<?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>nemediano</title>
	<atom:link href="http://www.nemediano.com.mx/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nemediano.com.mx</link>
	<description>Reflexiones de un espiritu curioso</description>
	<lastBuildDate>Fri, 28 Oct 2011 19:07:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Musica y tauromaquia</title>
		<link>http://www.nemediano.com.mx/2011/musica-y-tauromaquia/</link>
		<comments>http://www.nemediano.com.mx/2011/musica-y-tauromaquia/#comments</comments>
		<pubDate>Sat, 10 Sep 2011 22:38:18 +0000</pubDate>
		<dc:creator>nemediano</dc:creator>
				<category><![CDATA[Libros]]></category>

		<guid isPermaLink="false">http://www.nemediano.com.mx/?p=415</guid>
		<description><![CDATA[El otro día platicando con Erika, sobre si conocía algún canadiense famoso ( y vaya que nos costo trabajo dar con el) Dimos con la pagina wikipedia de canadienses famosos. El caso es que después me puse a pensar que así como nosotros no conocíamos ningún canadiense famoso en el resto del mundo no habrían [...]]]></description>
			<content:encoded><![CDATA[<p>El otro día platicando con Erika, sobre si conocía algún canadiense famoso ( y vaya que nos costo trabajo dar con el) Dimos con la pagina wikipedia de <a href="http://en.wikipedia.org/wiki/List_of_Canadians">canadienses famosos</a>. El caso es que después me puse a pensar que así como nosotros no conocíamos ningún canadiense famoso en el resto del mundo no habrían de conocer a los mexicanos famosos.</p>
<p>Después de darle una vuelta a la pagina wikipedia de <a href="http://en.wikipedia.org/wiki/List_of_Mexicans">mexicanos famosos</a>, siendo el geek deportivo que soy. Me detuve en la <a href="http://en.wikipedia.org/wiki/List_of_Mexicans#Sports">sección de deportistas mexicanos</a> famosos.</p>
<p><span id="more-415"></span>Ahí fue cuando recordé al famoso torero mexicano <a href="http://en.wikipedia.org/wiki/Silverio_P%C3%A9rez_%28bullfighter%29">Silverio Pérez</a> (1915-2005). (Si la <a href="http://en.wikipedia.org/wiki/Bullfight">tauromaquia</a> es un deporte (aunque se que la mayoría de mis lectores no lo consideran así (que no sea un deporte noble, o bonito, u honorable, -ahhh eso es otra historia-)))</p>
<p>El caso es que recordé que a <a href="http://en.wikipedia.org/wiki/Agust%C3%ADn_Lara">Agustín Lara</a> (otro mexicano famoso) le gustaban mucho las corridas de toros y en particular admiraba a Silverio tanto que le escribió una canción. Bueno si le había escrito a la <a href="http://en.wikipedia.org/wiki/Maria_Felix">doña</a> la de <a href="http://www.youtube.com/watch?v=-z0iHQvHSeA">María Bonita</a>, ni modo que no nos acordemos de Silverio <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> .</p>
<h2>Silverio Perez</h2>
<blockquote><p>Mirando torear a Silverio<br />
me ha salido de muy dentro<br />
lo gitano de un cantar</p>
<p>Con la garganta sequita,<br />
muy sequita la garganta<br />
seca de tanto gritar</p>
<p>Silverio, Silverio Pérez<br />
diamante del redondel,<br />
tormento de las mujeres<br />
haber quien puede con él</p>
<p>Silverio, torero estrella<br />
El príncipe milagro de la fiesta más bella.<br />
Carmelo que esta en el cielo se asoma a verte torear</p>
<p>Monarca del trincherazo, torero, torerazo,<br />
azteca y español<br />
Silverio cuando toreas no cambio por un trono<br />
mi barrera de sol.</p>
<p>Silverio, torero estrella<br />
El príncipe milagro de la fiesta más bella.<br />
Carmelo que esta en el cielo se asoma a verte torear</p>
<p>Monarca del trincherazo, torero, torerazo,<br />
azteca y español<br />
Silverio cuando toreas no cambio por un trono<br />
mi barrera de sol.</p></blockquote>
<p>Al caso es que encontré varias versiones de la canción aquí algunas de ellas</p>
<p><a class="wpaudio" href="http://www.nemediano.com.mx/wp-content/uploads/2011/09/Ana-Gabriel-Silverio-Perez.mp3">Ana Gabriel &#8211; Silverio Perez</a></p>
<p><a class="wpaudio" href="http://www.nemediano.com.mx/wp-content/uploads/2011/09/Yanni-Silverio-Perez.mp3">Yanni &#8211; Silverio Perez</a></p>
<p><a class="wpaudio" href="http://www.nemediano.com.mx/wp-content/uploads/2011/09/Mariachi-Vargas-Silverio-Perez.mp3">Mariachi Vargas &#8211; Silverio Perez</a></p>
<p>Igual no les gustan lo toros, (a mi en lo particular me aburren) igual lo consideran un acto violento y sangriento (yo también lo considero así) y hasta se sienten insultados de que se le considere un deporte (cómo suele decir mi papá, en las corridas yo le voy al toro <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> ). Pero vamos: ¿A poco no es una canción muy épica? ¿A poco no les hace pensar en esas canciones tolkinianas heroicas del <a href="http://en.wikipedia.org/wiki/Silmarillion">Simarillion</a>? ¿A que otro deportista mexicano le han escrito una canción tan bonita? Que me disculpen <a href="http://es.wikipedia.org/wiki/Hugo_S%C3%A1nchez">Hugo Sánchez</a> y <a href="http://en.wikipedia.org/wiki/Paola_Espinosa">Paola Espinoza</a>, pero las rolas que les escribieron no le llegan a esta. <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Notas geek:</p>
<ul>
<li>En la versión de Yani dice “<em>amante</em> de las mujeres” en vez de “<em>tormento</em> de las mujeres” (nena <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> )</li>
</ul>
<ul>
<li>Cuando hablan de “Carmelo” se refieren a <a href="http://www.silverioperez.mx/v-taurina-carmelo.html">Carmelo Perez</a>, gran torero y hermano de Silverio. Quien sufrió una cornada que lo retiro de los ruedos y después le costaría su vida.</li>
<li>Hay todo un sitio web en <a href="http://www.silverioperez.mx">homenaje a Silverio</a>.</li>
<li>Silverio nació en <a href="http://en.wikipedia.org/wiki/Texcoco,_Mexico_State">Texcoco</a> por lo que le apodaban el <em>Faraón de Texoco</em>.</li>
</ul>
<p>&nbsp;</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.nemediano.com.mx%2F2011%2Fmusica-y-tauromaquia%2F&amp;t=Musica%20y%20tauromaquia" id="facebook_share_icon_415" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none;"><img src="http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif" alt="Share on Facebook" /></a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_415') || document.getElementById('facebook_share_icon_415') || document.getElementById('facebook_share_both_415') || document.getElementById('facebook_share_button_415');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_415') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.nemediano.com.mx/2011/musica-y-tauromaquia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.nemediano.com.mx/wp-content/uploads/2011/09/Ana-Gabriel-Silverio-Perez.mp3" length="3800540" type="audio/mpeg" />
<enclosure url="http://www.nemediano.com.mx/wp-content/uploads/2011/09/Yanni-Silverio-Perez.mp3" length="6506655" type="audio/mpeg" />
<enclosure url="http://www.nemediano.com.mx/wp-content/uploads/2011/09/Mariachi-Vargas-Silverio-Perez.mp3" length="3907584" type="audio/mpeg" />
		</item>
		<item>
		<title>Livecoding en el Cenart</title>
		<link>http://www.nemediano.com.mx/2011/livecoding-en-el-cenart/</link>
		<comments>http://www.nemediano.com.mx/2011/livecoding-en-el-cenart/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 21:28:20 +0000</pubDate>
		<dc:creator>nemediano</dc:creator>
				<category><![CDATA[Acerca de mi]]></category>
		<category><![CDATA[Computación]]></category>
		<category><![CDATA[cenart]]></category>
		<category><![CDATA[livecoding]]></category>
		<category><![CDATA[processing]]></category>

		<guid isPermaLink="false">http://www.nemediano.com.mx/?p=397</guid>
		<description><![CDATA[Como siempre sucede Tzolkin me presenta con amigos (ya saben de los poquísimos que tiene) que hacen cosas interesantes. No entraré en detalles en esta parte. Pero lo importante es que me contactaron con unos monitos que hacen livecoding en el Cenart. Antes que nada quiero decir que mi hermano ya me había comentado del [...]]]></description>
			<content:encoded><![CDATA[<p>Como siempre sucede Tzolkin me presenta con amigos (ya saben de los poquísimos que tiene) que hacen cosas interesantes. No entraré en detalles en esta parte. Pero lo importante es que me contactaron con unos monitos que hacen <a href="http://en.wikipedia.org/wiki/Live_coding" target="_blank">livecoding</a> en el <a href="http://www.cenart.gob.mx/" target="_blank">Cenart</a>. Antes que nada quiero decir que mi hermano ya me había comentado del livecoding, pero según teníamos entendido es una practica muy Europea que en México nadie hacia.</p>
<p>Total que como en mis ratos libres (Si, me sorprende que tenga <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />  ) me gusta programar al <a href="http://processing.org/" target="_blank">Procesing</a>, me interesó y me lancé a ver de que iba la cosa el mes pasado. Como me gusto la cosa y ahora que por fin me gradué y tengo tiempo libre (si, ajá) me decidí a participar en el evento de este mes aquí la crónica de mi 9 minutos de fama como artista.</p>
<p><span id="more-397"></span></p>
<p>El mes pasado solo me lance a ver y me entere de que iba la cosa: la idea es escribir programas en vivo desde cero y contra reloj. Bueno, cual es el chiste. Para empezar lo llaman concierto <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  . Pues en la modalidad en la que lo hacen en el Cenart, es que pasan por parejas, una persona escribe un programa para hacer audio y otra uno para hacer video. Tienen 9 minutos para escribir desde cero el código y mostrarlo. No se vale traer nada escrito ni copiar ni pegar de otro código existente, además como proyectan todo lo que haces en tu compu, el chiste es que los asistentes vean como lo escribes. Así que si haces trampa quedas en evidencia. En general, en su <a href="http://cmm.cenart.gob.mx/tallerdeaudio/actividades/sesioneslivecoding/sesioneslivecoding.html" target="_blank">pagina</a> se explican mejor.</p>
<p>Pues en la primera sesión me llevé varias impresiones:</p>
<ul>
<li>Eso de la formalidad a los artistas, no se les da. (Esto es un cumplido)</li>
<li>Son endiabladamente rápidos y buenos para codificar, la neta me sorprendí bastante.</li>
<li>¿Como es posible que <a href="http://en.wikipedia.org/wiki/Scheme_%28programming_language%29" target="_blank">Scheme</a> sirva para algo practico? <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </li>
<li>Yo <strong>no puedo</strong> hacer eso, así de rápido.</li>
</ul>
<p>Al terminar en evento hable con Tito y me dijo que no es tan live, como me pareció en un principio. Vamos la codificación es en live, pero no están improvisando (bueno no tanto) es decir ensayan el programa que van a escribir. Fijense que esto tiene todo el sentido del mundo, despues de todo antes de dar un concierto&#8230; ensayas, ¿no? <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />  . Luego, usan frameworks muy amigables, para hacerlo rápido. Por ejemplo el mismo Procesing, <a href="http://www.pawfal.org/fluxus/" target="_blank">Fluxus</a> y <a href="http://www.audiosynth.com/" target="_blank">SuperColider</a>. Por lo que sus primitivas son muy evolucionadas (chiste local).</p>
<p>Total que después de ver la sesión y como la verdad son un batos muy agradables (y en el Cenart hay chicas muy guapas) me decidí a participar. Bueno esto no fue tan inmediato, en realidad me tomo casi tres semanas decidirme a hacerlo, <a href="http://la-ciudad-de-eleutheria.blogspot.com/" target="_blank">Eleutheria</a> fue vital en convencerme y con la bendición de la bandita me apunte (mande correo confirmando mi participación).</p>
<p>Como algunos de ustedes ya saben, he estado un poco ocupado (malditos escuincles del demonio, que no quieren aprender Teoría de Grafos <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />  ). Por lo que fiel a mi costumbre un día antes en la mañana empecé a pensar que iba a hacer (e invité a la bandita a que me fuera a ver <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> , total ya si voy a hacer el ridículo, si quiera que quede entre cuates (nótese la correcta anidación de los paréntesis)). Me tomo media hora programar por primera vez la idea (ya no me acordaba ni que era el Procesing, ni que era java, ni que era la POO, ni que era programar <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />  ).</p>
<p>Ok, ahí me empecé a asustar. Una vez que tenia la idea, borre mi código (no se imaginan lo difícil y antinatural que fué para mi hacerlo <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_confused.gif' alt=':-?' class='wp-smiley' />  ) y lo codifique de nuevo desde ceros. Resultado esta vez tomo 10 minuto. Deje que pasaron unas horas y repetí proceso. Además investigue que partes de mi código eran prescindible (no se imaginan la cantidad de lineas que uno gasta haciendo safefall en los estados de default). Por ultimo el miércoles antes de dormir, lo volví a hacer una vez mas 6 minutos 35 seg (OK, now we are talking <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ).</p>
<p>Total que el jueves, me pasó todo. Fui a Acatlan, me entretuve platicando de mis aspiraciones políticas con alguien muy importante de la FESA, fui a la Universidad Anahuac del norte a pedir consejo espiritual a mi mentor y por azares del destino (y después de tomar un taxi). A las 4 y media estaba en el Cenart, con el estomago vacío y listo para la sesión.</p>
<p>Me fije que no había un orden estricto, tu te apuntas en el lugar que quieras, total que fiel a mi costumbre me apunte de segundo. Pero luego nadie se apunto al principio y se corrieron todos un lugar así que para aumentar mis nervios me tocó empezar. Con todo y el nervio termine mi programa como en 8min.</p>
<p>Fiel a la filosofía del blog y de mi persona y aprovechando que el Procesing es muy amigable para exportar cosas (es lo bueno de usar Java para programar, ¡Como las niñas! XD ) aquí esta mi código.</p>
<div class="processing_embed" id="LivecodingAtCenart_container"><p><a href="#" onclick="deployJava.addAppletTo('LivecodingAtCenart', 'http://www.nemediano.com.mx/wp-content/uploads/2011/08/LivecodingAtCenart.jar', 512, 384, 'http://www.nemediano.com.mx/wp-content/plugins/wordpress-processing-embed', 'LivecodingAtCenart_container'); return false;">Ejecutar el programa como un applet de Java</a></p></div>
<p>Source Code: <a href="http://www.nemediano.com.mx/wp-content/uploads/2011/08/LivecodingAtCenart.pde">LivecodingAtCenart.pde</a> <a href="http://www.nemediano.com.mx/wp-content/uploads/2011/08/Neuron.pde">Neuron.pde</a></p>
<p>Built with <a title="Processing.org" href="http://processing.org/">Processing</a></p>
<p>Después del evento y relajarme, estas reflexiones cruzan mi mente:</p>
<ul>
<li>Aunque me fue bien para ser la primera vez, sin duda fui el peor participante en el rubro de video.</li>
<li>Principalmente fue por que erré el paradigma, mi programa es muy estructurado y en general los demas son mucho, mucho menos convencionales y mas&#8230; artísticos. El error estuvo desde que planee que hacer.</li>
<li>Esto no será la última vez que participe <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>Me sorprende que haya mas participantes en el audio que en el video. El simple hecho de que haya mas gente que programa sonido, que gente que haga graficación por computadora me deja anonadado. Si en MAC y en el posgrado y en general entre toda la bandita, hay chingomil gente que quiere hacer gráficos y ninguna que conozco quisiera hacer audio. Me sorprende que en el gremio de los artistas sea justo al revés, para mi no tiene ningún sentido.</li>
<li>Urge aprender Fluxus y reencontrarme con la programación funcional de graficos.</li>
<li>No tengo ni la mas remota idea del sentido musical <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </li>
<li>Eso ultimo explica también por que no puedo tocar ni el <a href="http://en.wikipedia.org/wiki/Birimbau" target="_blank">berimbau</a> (instrumento musical con solo tres tonos) <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </li>
<li>La aleatoriedad es lo de hoy <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li>Es mas fácil enseñarle a un artista a programar, que aun científico a &#8230; ¿cocinar? Este último es solo una conjetura.</li>
</ul>
<p>Y como resultado de las conclusiones este es el trabajo futuro <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
<ul>
<li>Invitar a la banda del Cenart al congreso de TI en FES Acatlan.</li>
<li>Aprender Fluxus</li>
<li>Como dijo MacArthur al abandonar las Filipinas. I shall return</li>
</ul>
<p>La anécdota: Al final uno de ellos me pregunto &#8220;<em>¿Como se te ocurrió escribir una clase en vivo?</em>&#8221; Mi respuesta natural es: ¿Por que en la POO la base de todo desarrollo es el diseño de clases? ¿Por que la simple idea de un programa en un lenguaje de POO (como java) sin clases me es reprobable? Pero saben, ahora que lo reflexiono mas&#8230; el tenía toda la razón.</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.nemediano.com.mx%2F2011%2Flivecoding-en-el-cenart%2F&amp;t=Livecoding%20en%20el%20Cenart" id="facebook_share_icon_397" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none;"><img src="http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif" alt="Share on Facebook" /></a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_397') || document.getElementById('facebook_share_icon_397') || document.getElementById('facebook_share_both_397') || document.getElementById('facebook_share_button_397');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_397') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.nemediano.com.mx/2011/livecoding-en-el-cenart/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Un swap sin memoria extra</title>
		<link>http://www.nemediano.com.mx/2011/un-swap-sin-memoria-extra/</link>
		<comments>http://www.nemediano.com.mx/2011/un-swap-sin-memoria-extra/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 04:56:13 +0000</pubDate>
		<dc:creator>nemediano</dc:creator>
				<category><![CDATA[Computación]]></category>
		<category><![CDATA[Matematicas]]></category>
		<category><![CDATA[Mis demonios]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.nemediano.com.mx/?p=384</guid>
		<description><![CDATA[Este es otro de los trucos que me enseño Eduardo Lemus cuando me estaba preparando para mis entrevistas en Microsoft. Se trata de hacer un cambio swap entre dos variables con la restricción de que no podemos usar ninguna variable temporal como buffer. Antes que nada quiero aclarar que este truco es una mala practica, [...]]]></description>
			<content:encoded><![CDATA[<p>Este es otro de los trucos que me enseño Eduardo Lemus cuando me estaba preparando para mis entrevistas en Microsoft. Se trata de hacer un cambio swap entre dos variables con la restricción de que no podemos usar ninguna variable temporal como buffer.</p>
<p>Antes que nada quiero aclarar que este truco es una mala practica, en la mayoría de los lugares donde lo he visto (mientras me documentaba para escribir este post) aconsejan no hacerlo. La razón, aunque el truco funciona (y como veremos adelante tiene un fundamento solido) es confuso. Es decir según los <a href="http://en.wikipedia.org/wiki/Software_engineering">IS</a> la ganancia en performance es muy poca comparada con la complicación en entender el código escrito. Además de que en computadoras modernas este truco puede ser mas lento que la solución estándar (estúpidos optimizadores de memoria).</p>
<p>Así que solo ocuparlo en código que quieran usar con fin de hacer faramalla, show e impresionar chicas. <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  O en caso de que algún entrevistador para alguna chamba se pase de listo y les pregunte como hacerlo.<br />
<span id="more-384"></span></p>
<h2>Entendiendo el problema</h2>
<p>En muchos algoritmos (por ejemplo en ordenación) es necesario intercambiar los valores de dos variables. Para simplificar el resto de la explicación asumiré <em>sin perdida de generalidad</em> (como me gusta usar esa frase <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ) que se tienen valores numéricos y enteros.</p>
<p>Es decir al principio tenemos algo como.</p>
<p>A = 2<br />
B = 4</p>
<p>Queremos llevar a cabo la operación de intercambio y obtener una situación como:</p>
<p>A = 4<br />
B = 2</p>
<h2>Como lo haría una persona normal</h2>
<p>Pues como nos enseñaron en la escuela XD. En todos los lenguajes de programación al asignación es una operación destructiva. Es decir al momento de asignar un valor a una variable se pierde el contenido anterior. (¡Estúpidas limitantes físicas del computo!).</p>
<p>Por lo que la gente que no sabe el truco haría algo así:</p>
<p>TEMP = A<br />
A = B<br />
B = TEMP</p>
<p>De esta manera tenemos un espacio de memoria extra donde guardar el valor de A, por lo tanto podemos destruir el contenido de A sin tentarnos nuestro corazoncillo. Y recuperarlo después del buffer temporal.</p>
<p>Ahora lo interesante: ¿Cómo se hace sin usar ninguna variable TEMP?</p>
<h2>La solución del matemático.</h2>
<p>Ahora si ustedes son de esas personas que saben un montón de matemáticas, pero jamas han programado de a de veras (¡Como los hombres!) podrían sugerir esta solución. (No se hagan se que por ahí hay muchísimos).</p>
<p>A = A + B<br />
B = A &#8211; B<br />
A = A &#8211; B</p>
<p>Ahora sabemos que ésta es un caso particular de una solución mas general.</p>
<ol>
<li>Combina los dos valores en la variable A por medio de una operación binaria bien portada (Es decir que sea invertible). En este momento en A están guardados de alguna manera los dos valores.</li>
<li>Usa la operación inversa de la operación binaria para extraer en la variable B el valor original de A a partir del valor actual de A. Recuerda que no hemos modificado B.</li>
<li>Usa la operación inversa para extraer ahora el viejo valor de B en A. Recordando que tenemos guardado en B el valor original de A.</li>
</ol>
<p>El fallo de la solución anterior es que trabajamos con maquinas de memoria finita, es decir podría pasar que la operación bien portada que es la suma produzca un número tan grande que no quepa en la localidad de memoria que le guardamos. ¿No se acuerdan del molesto carry cuando nos enseñaron la suma en binario y  hacer circuitos sumadores? Pues es aquí donde nos vino a fastidiar la vida.</p>
<h2>La solución del computólogo</h2>
<p>Tan simple, tan elegante, tan parecida a la solución del matemático XD (Por ahí dicen que es la misma por que los computologos y los matemáticos son casi lo mismo ). Pues resulta que hay mas de una operación bien portada y una que tiene todo lo que necesitamos es el XOR.</p>
<table>
<tr>
<th>x</th>
<th>y</th>
<th>x<img style="border:0px;vertical-align:middle;" src='http://l.wordpress.com/latex.php?latex=%5Coplus+&bg=FFFFFF&fg=000000'  alt="\oplus " />y</th>
</tr>
<tr>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>1</td>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>0</td>
</tr>
</table>
<p>¡Muérete de envidia suma! ¡El XOR es una suma sin carry vean la tabla!. ¿Suficiente? El XOR (conocido también en los bajos mundos de la lógica como <strong>disyunción exclusiva</strong>) es una de las operaciones que pueden construir toda la lógica de primer orden, además es conmutativo, asociativo y es su propio inverso. Pueden ver aquí la lista de <a href="http://en.wikipedia.org/wiki/Xor">todo lo bello que es el XOR</a>. Es mas: ¡XOR soy tu fan!</p>
<p>Es decir podemos usar el XOR que como no tiene carry y nunca se desborda para hacer</p>
<p>A = A <img style="border:0px;vertical-align:middle;" src='http://l.wordpress.com/latex.php?latex=%5Coplus&bg=FFFFFF&fg=000000'  alt="\oplus" /> B<br />
B = B <img style="border:0px;vertical-align:middle;" src='http://l.wordpress.com/latex.php?latex=%5Coplus&bg=FFFFFF&fg=000000'  alt="\oplus" /> A<br />
A = A <img style="border:0px;vertical-align:middle;" src='http://l.wordpress.com/latex.php?latex=%5Coplus&bg=FFFFFF&fg=000000'  alt="\oplus" /> B</p>
<p>¿Mencione que es conmutativo y que es su propio inverso? Además que en todo lenguaje decente como en C y C++ y en algunos no decentes (Java <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) Tenemos un operador de XOR y tenemos una forma abreviada de hacer la asignación. ¿No me creen? Miren con sus propios ojos:</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
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> argv<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
&nbsp;
	<span style="color: #0000ff;">int</span> a <span style="color: #000080;">=</span> <span style="color: #0000dd;">4</span>, b <span style="color: #000080;">=</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Los valores son: a = &quot;</span> <span style="color: #000080;">&lt;&lt;</span> a <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; b = &quot;</span> <span style="color: #000080;">&lt;&lt;</span> b <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
&nbsp;
	swap<span style="color: #008000;">&#40;</span>a, b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Después del swap:&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Los valores son: a = &quot;</span> <span style="color: #000080;">&lt;&lt;</span> a <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; b = &quot;</span> <span style="color: #000080;">&lt;&lt;</span> b <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> swap <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>a, <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	a <span style="color: #000040;">^</span><span style="color: #000080;">=</span> b<span style="color: #008080;">;</span>
	b <span style="color: #000040;">^</span><span style="color: #000080;">=</span> a<span style="color: #008080;">;</span>
	a <span style="color: #000040;">^</span><span style="color: #000080;">=</span> b<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Y para que no digan que no pelo a la banda Javera, tomen no se vallan a enojar.</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
16
</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> TestSwaping <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">int</span> a <span style="color: #339933;">=</span> <span style="color: #cc66cc;">4</span>, b <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
&nbsp;
		<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;Los valores son: a = &quot;</span> <span style="color: #339933;">+</span> a <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; b = &quot;</span> <span style="color: #339933;">+</span> b<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		a <span style="color: #339933;">^=</span> b<span style="color: #339933;">;</span>
		b <span style="color: #339933;">^=</span> a<span style="color: #339933;">;</span>
		a <span style="color: #339933;">^=</span> b<span style="color: #339933;">;</span>
&nbsp;
		<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;Después del swap&quot;</span><span style="color: #009900;">&#41;</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;Los valores son: a = &quot;</span> <span style="color: #339933;">+</span> a <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; b = &quot;</span> <span style="color: #339933;">+</span> b<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Mas información sobre la correctez y demás cosas de este truco esta en su <a href="http://en.wikipedia.org/wiki/XOR_swap_algorithm">pagina wikipedia</a>.<br />
﻿</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.nemediano.com.mx%2F2011%2Fun-swap-sin-memoria-extra%2F&amp;t=Un%20swap%20sin%20memoria%20extra" id="facebook_share_icon_384" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none;"><img src="http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif" alt="Share on Facebook" /></a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_384') || document.getElementById('facebook_share_icon_384') || document.getElementById('facebook_share_both_384') || document.getElementById('facebook_share_button_384');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_384') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.nemediano.com.mx/2011/un-swap-sin-memoria-extra/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Esteganografía y otros bichos de las CC</title>
		<link>http://www.nemediano.com.mx/2011/esteganografia-y-otros-bichos-de-las-cc/</link>
		<comments>http://www.nemediano.com.mx/2011/esteganografia-y-otros-bichos-de-las-cc/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 21:07:47 +0000</pubDate>
		<dc:creator>nemediano</dc:creator>
				<category><![CDATA[Computación]]></category>
		<category><![CDATA[Mis demonios]]></category>
		<category><![CDATA[ciencia]]></category>
		<category><![CDATA[codigos]]></category>
		<category><![CDATA[computacion]]></category>
		<category><![CDATA[criptografía]]></category>
		<category><![CDATA[esteganografía]]></category>

		<guid isPermaLink="false">http://www.nemediano.com.mx/?p=372</guid>
		<description><![CDATA[Hace ya unos meses me reuní con mi viejo amigo Leo, de por allá cuando estábamos trabajando juntos en la FC. Tenia mucho tiempo de no verlo y después de ponernos al tanto de nuestras vidas y de empezar a platicar de diversas cuestiones (OVNIS, terremotos, teoría de la conspiración, la nueva versión de Ubuntu, [...]]]></description>
			<content:encoded><![CDATA[<p>Hace ya unos meses me reuní con mi viejo amigo Leo, de por allá cuando estábamos trabajando juntos en la FC. Tenia mucho tiempo de no verlo y después de ponernos al tanto de nuestras vidas y de empezar a platicar de diversas cuestiones (OVNIS, terremotos, teoría de la conspiración, la nueva versión de Ubuntu, de CC y de matemáticas), al final me comento de un truco muy simple que conocía para ocultar mensajes en las imágenes.</p>
<p>Pasaron unos días y comente con otro amigo (Lalo Lemus) el truco de mi amigo Leo y me comento que era una forma muy primitiva de una área de las Ciencias de la computación conocida como <a href="http://en.wikipedia.org/wiki/Steganography">Esteganografía</a> (siempre me ha sorprendido la cantidad de cultura general de computólogo que posee Lalo).</p>
<p><span id="more-372"></span>La esteganografía es la rama de las ciencias de la computación que estudia la manera de transmitir mensajes ocultos embebidos en mensajes. Aquí hago un paréntesis, ya se que están pensando que eso es la <a href="http://en.wikipedia.org/wiki/Cryptography">criptografia</a>, pero no, aunque son cosas muy parecidas la criptografía y la estagnografía son cosas diferentes.</p>
<p>Mientras que la criptografía estudia como cifrar mensajes para que cuando alguien los intercepte no sea capaz de entenderlos, la esteganografia estudia como oculta el mismo hecho <em>de que un mensaje existe</em>.</p>
<p>Vamos para la cirpto se asume que el enemigo conoce que se va a atransmitir un mensaje, y que ademas el enemigo va a interceptar el mensaje. Solo que el mensaje viene en clave y no va a poder entender su contenido (esta cifrado).</p>
<p>En el caso de la esteganografia, el enemigo se da cuenta que hay un intercambio de información. Pero no sabe que en la información; aparentemente inocente, hay un mensaje oculto.</p>
<p>Desde los tiempo de <a href="http://en.wikipedia.org/wiki/Herodotus">Herodoto</a> (padre de la historia) hay indicios de esteganografía. Pues se describe una situación donde un general escribió un aviso donde prevenía de un ataque de los griegos en una tableta de madera, y después la encero y escribió otro mensaje sobre la cera (en esos tiempo era común mandar correspondencia en tabletas enceradas).</p>
<p>Herodoto también describe otro caso mas <em>hardcore</em> en donde le rapan la cabeza a un esclavo y le tatuan un mensaje, luego esperan a que el cabello del esclavo vuelva a crecer y lo mandan (sin conocimiento del mensaje) con el receptor.</p>
<p>En la esteganografia moderna se trata de esconder archivos dentro de otros archivos (de apariencia inocente) por ejemplo imágenes, musica o vídeos. Una de la técnicas mas comunes es la de modificar el LSB (Bit menos significativo) en los datos de algún archivo (por ejemplo los píxeles de una imagen). De esta manera la imagen no cambia mucho (no es perceptible al ojo humano y tiene un mensaje oculto entre sus píxeles.</p>
<p>Una buena esteganografia, debe cumplir con:</p>
<ul>
<li>El archivo no sea sospechoso.</li>
<li>Un usuario normal no debe notar el cambio entre un archivo común y un archivo con un mensaje oculto</li>
<li>El tamaño del archivo no debe variar.</li>
</ul>
<p>Como la mayoría de las buenas técnicas de esteganografia requieren un cierto conocimiento de teoría de la información y de programación, por lo que la mayoría de los usuarios mortales no podemos usarlas tan fácil.</p>
<p>Aquí es donde se vuelve valioso el truco de mi amigo Leo</p>
<h2>Esteganografía para principiantes</h2>
<p>Este truco no es una buena esteganografia, pues no cumple con los requisitos arriba expuestos. pero digamos que tiene la enorme ventaja que no requiere nada mas que el ambiente estándar de usuario (sin conocimientos de programación) y en un sistema operativo decente sin ser nada del otro mundo (vamos con cualquier GNU/Linux &#8211; Unix basta).</p>
<p>El truco en cuestión es el siguiente (me dio permiso de escribirlo :p )</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cat</span> imagen.jpg mensaje.zip <span style="color: #000000; font-weight: bold;">&gt;</span> imagenConMensaje.jpg
<span style="color: #c20cb9; font-weight: bold;">du</span> <span style="color: #660033;">-b</span> imagen.jpg
<span style="color: #c20cb9; font-weight: bold;">tail</span> <span style="color: #660033;">-c</span> +<span style="color: #000000;">4012558</span> imagenConMensaje.jpg <span style="color: #000000; font-weight: bold;">&gt;</span> mensajeRecuperado.zip</pre></div></div>

<p>Expliquemos paso a paso. Se tiene una imagen: <strong>imagen.jpg</strong> y se quiere ocultar el mensaje contenido en el zip: <strong>mensaje.zip</strong>. Se le añaden a la imagen los bytes del mensaje al final. Esto forma una nueva imagen (que mide el tamaño de la imagen mas el tamaño del mensaje). Ahora si queremos recuperar el mensaje debemos de saber cual era el tamaño original del mensaje (por eso lo calculamos con <strong>du</strong>) y extraemos los ultimo bytes de la imagen y les damos forma en un nuevo archivo .zip.</p>
<p>En el caso de mi imagen el tamaño resulto ser 4012558, pero obviamente <em><strong>esa cantidad debe sustituirse con el tamaño de la imagen que ustedes usen</strong></em> (el resultado del comando previo).</p>
<h3>¿Por que funciona?</h3>
<p>Recordemos que en las imagenes .jpg hay un <em>cabecero</em> y luego vienen los datos y en el cabecero <em>esta guardado el tamaño de la imagen</em>. Al añadir el mensaje al final del archivo con el comando <strong>cat</strong>, le estamos poniendo bytes al final de los datos sin modificar el cabecero. Por esta razón la nueva imagen con los datos puede ser vista y leída en cualquier SW como si fuera una imagen normal. Aun cuando tiene los datos ocultos.</p>
<p>Si nosotros supiéramos el tamaño de la imagen original, podemos restarle a la imagen modificada ese tamaño (<strong>tail</strong>) y el resultado deben ser los bytes que contienen el mensaje, como ese era originalmente un zip lo direccionamos en nuevo zip y tendremos el mensaje de vuelta.</p>
<p>Como ejemplo aquí hay una imagen de Emma Watson.</p>

<a href="http://www.nemediano.com.mx/wp-content/gallery/imagenesvarias/emma.jpg" title="Imagen original de Emma Watson" class="thickbox" rel="singlepic403" >
	<img class="ngg-singlepic" src="http://www.nemediano.com.mx/wp-content/gallery/cache/403__320x240_emma.jpg" alt="emma" title="emma" />
</a>

<p>Ahora aquí esta la misma imagen, junto con <strong>todos los libros de Narnia</strong> escondidos en un zip.</p>

<a href="http://www.nemediano.com.mx/wp-content/gallery/imagenesvarias/emmaconlibros.jpg" title="Imagen de Emma Watson con un zip con TODOS los libros de narnia" class="thickbox" rel="singlepic404" >
	<img class="ngg-singlepic" src="http://www.nemediano.com.mx/wp-content/gallery/cache/404__320x240_emmaconlibros.jpg" alt="emmaconlibros" title="emmaconlibros" />
</a>

<p>Nótese el cambio de tamaño de la imagen a mas del doble (como ya dijimos esta <strong>no es</strong> una buena técnica de esteganografía).</p>
<p>Nota Las miniaturas son links a las verdaderas imágenes que usé.</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.nemediano.com.mx%2F2011%2Festeganografia-y-otros-bichos-de-las-cc%2F&amp;t=Esteganograf%C3%ADa%20y%20otros%20bichos%20de%20las%20CC" id="facebook_share_icon_372" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none;"><img src="http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif" alt="Share on Facebook" /></a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_372') || document.getElementById('facebook_share_icon_372') || document.getElementById('facebook_share_both_372') || document.getElementById('facebook_share_button_372');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_372') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.nemediano.com.mx/2011/esteganografia-y-otros-bichos-de-las-cc/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Una de los beatles</title>
		<link>http://www.nemediano.com.mx/2011/una-de-los-beatles/</link>
		<comments>http://www.nemediano.com.mx/2011/una-de-los-beatles/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 23:06:57 +0000</pubDate>
		<dc:creator>nemediano</dc:creator>
				<category><![CDATA[Acerca de mi]]></category>
		<category><![CDATA[beatles]]></category>
		<category><![CDATA[musica]]></category>

		<guid isPermaLink="false">http://www.nemediano.com.mx/?p=367</guid>
		<description><![CDATA[He estado tratando infructuosamente de concentrarme en lo que debo hacer. Ayer viernes termino mi fecha limite para pedir extensión para titularme. Aun estoy lejos de terminar mi tesis, debía ir por la extensión, con todo el estrés que conlleva no saber si van a conceder o no la prorroga. Total, hoy he regresado a [...]]]></description>
			<content:encoded><![CDATA[<p>He estado tratando infructuosamente de concentrarme en lo que debo hacer. Ayer viernes termino mi fecha limite para pedir extensión para titularme. Aun estoy lejos de terminar mi tesis, debía ir por la extensión, con todo el estrés que conlleva no saber si van a conceder o no la prorroga.</p>
<p>Total, hoy he regresado a mi labores normales de escritura, sin embargo creo que todavía tengo un poco de la resaca de ayer y de la tensión de escribir bien la carta y poner mis avances bonitos, el resultado: hoy no puedo concentrarme&#8230;. <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p><span id="more-367"></span></p>
<p>He estado tratando de leer un montón de papers, que baje para enriquecer la bibliografía. El puro trabajo de  tenerlos que acomodar, leer los abstracts y ver cuales si voy a leer enteros y cuales no me llevo todo el día de hoy.</p>
<p>Ya estando medio fastidiado como para ponerme a leer, me puse a perder el tiempo en internet. (ya saben bien raro en mi).  Buscando información de la película de <a title="IMDB" href="http://www.imdb.com/title/tt1285016/">red social</a>, encontré <a href="http://www.opposingviews.com/i/beatles-song-great-choice-for-social-network-ending-credits">esta nota</a>. Y me puse a pensar en que no había tenido tiempo de escuchar bien la canción y que no sabia que fuera tan raro escuchar musica de los beatles en una película.</p>
<h3>Baby you&#8217;re a rich man</h3>
<blockquote><p>How does it feel to be<br />
One of the beautiful people?<br />
Now that you know who you are<br />
What do you want to be?<br />
And have you travelled very far?<br />
Far as the eye can see.<br />
How does it feel to be<br />
One of the beautiful people?<br />
How often have you been there?<br />
Often enough to know.<br />
What did you see, when you were there?<br />
Nothing that doesn&#8217;t show.<br />
Baby you&#8217;re a rich man,<br />
Baby you&#8217;re a rich man,<br />
Baby you&#8217;re a rich man too.<br />
You keep all your money in a big brown bag inside a zoo.<br />
What a thing to do.<br />
Baby you&#8217;re a rich man,<br />
Baby you&#8217;re a rich man,<br />
Baby you&#8217;re a rich man too.<br />
How does it feel to be<br />
One of the beautiful people?<br />
Tuned to a natural E<br />
Happy to be that way.<br />
Now that you&#8217;ve found another key<br />
What are you going to play?<br />
Baby you&#8217;re a rich man,<br />
Baby you&#8217;re a rich man,<br />
Baby you&#8217;re a rich man too.<br />
You keep all your money in a big brown bag inside a zoo.<br />
What a thing to do.<br />
Baby you&#8217;re a rich man&#8230;</p></blockquote>
<p>La canción de los créditos finales se lama <a href="http://en.wikipedia.org/wiki/Baby,_You%27re_a_Rich_Man">Baby you&#8217;re a rich man</a> y es del album <a href="http://en.wikipedia.org/wiki/Magical_Mystery_Tour">Magic and Mystery tour</a>. &lt;sarcasmo&gt;Ahora solo espero tener oportunidad de poner en practica mi conocimiento de la rola en el <a href="http://www.thebeatlesrockband.com/">rock band</a>&lt;/sarcasmo&gt;<br />
<a class="wpaudio" href="http://www.nemediano.com.mx/wp-content/uploads/2011/03/10-Baby-Youre-A-Rich-Man.mp3">Baby You&#8217;re A Rich Man</a><br />
P D: Este post es XMML copilant</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.nemediano.com.mx%2F2011%2Funa-de-los-beatles%2F&amp;t=Una%20de%20los%20beatles" id="facebook_share_icon_367" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none;"><img src="http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif" alt="Share on Facebook" /></a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_367') || document.getElementById('facebook_share_icon_367') || document.getElementById('facebook_share_both_367') || document.getElementById('facebook_share_button_367');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_367') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.nemediano.com.mx/2011/una-de-los-beatles/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://www.nemediano.com.mx/wp-content/uploads/2011/03/10-Baby-Youre-A-Rich-Man.mp3" length="7241249" type="audio/mpeg" />
		</item>
		<item>
		<title>Primera Colecta Monstruo de Historieta Juvenil</title>
		<link>http://www.nemediano.com.mx/2011/primera-colecta-monstruo-de-historieta-juvenil/</link>
		<comments>http://www.nemediano.com.mx/2011/primera-colecta-monstruo-de-historieta-juvenil/#comments</comments>
		<pubDate>Sat, 15 Jan 2011 22:23:37 +0000</pubDate>
		<dc:creator>nemediano</dc:creator>
				<category><![CDATA[Acerca de mi]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Comics]]></category>
		<category><![CDATA[Mis demonios]]></category>
		<category><![CDATA[colecta]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[mexico]]></category>

		<guid isPermaLink="false">http://www.nemediano.com.mx/?p=358</guid>
		<description><![CDATA[En definitiva es un mes raro . Hay otra causa-campaña que deseo apoyar eso si esta es un poco mas afín con el giro de mi blog. A participar en la Primera Colecta Monstruo de Historieta Juvenil. Se trata de donar comics para la Fundación Familiar Infantil, I.A.P. Yo no se si entre todos mis [...]]]></description>
			<content:encoded><![CDATA[<p>En definitiva es un mes raro <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . Hay otra causa-campaña que deseo apoyar eso si esta es un poco mas afín con el giro de mi blog. A participar en la Primera Colecta Monstruo de Historieta Juvenil. Se trata de donar comics para la Fundación Familiar Infantil, I.A.P.</p>
<p>Yo no se si entre todos mis comics junte cinco que quiera donar, pero le voy a rascar por que me parece una buena causa. Además de que si quiero mi pin up conmemorativo.<br />
<span id="more-358"></span></p>
<h3>¿Qué tanto han influido los cómics en tu vida? ¿Te gustaría compartir un poco de lo mucho que has disfrutado con ellos?</h3>
<p>Con el objetivo de compartir con un grupo de niños y jóvenes de una casa hogar, el blog sobre cómics <a href="http://www.lacovacha.net/">La Covacha</a>, el <a href="http://es-es.facebook.com/note.php?note_id=242531017802">Club San Miguel Chapultepec-Politécnico de Rotaract</a> y la revista <a href="http://revista-comikaze.blogspot.com/">Comikaze</a> te invitan a participar en la Primera Colecta Monstruo de Historieta Juvenil.</p>
<h3>¿Qué fin tiene este evento?</h3>
<p>﻿Reunir la mayor cantidad de historietas posible, para su donación a un grupo de niños y jovenes que se encuentran bajo el cuidado de Fundación Familiar Infantil, I.A.P.</p>
<h3>¿Por qué se organiza esta colecta?</h3>
<p>Las historietas son un pasatiempo al cual muchos estamos acostumbrados. Sin embargo, hay niños que nunca han conocido un cómic y que por lo mismo no han podido disfrutar de todo lo que estos pueden ofrecer. Como lectores de cómics, sabemos que a través de estos es posible inculcar diversos valores e ideales. De hecho, para muchos de nosotros, los héroes de las historietas sirvieron como modelo de conducta en las primeras etapas de nuestra vida, enseñándonos valores como la honestidad, la perseverancia, el trabajo en equipo y el valor de la verdad, entre muchas otras fortalezas. A través de esta donación de cómics, queremos compartir con este grupo de niños y niñas un poco de lo mucho que los cómics nos han regalado.</p>
<h3>¿Cuándo se realizará?</h3>
<p>La Primera Colecta Monstruo de Historieta Juvenil se realizará el sábado 22 de enero, de 15:00 a 20:00 horas, en la <a href="http://www.comicastle.com/tienda/">tienda de cómics Fantástico </a>(antes Comicastle), ubicada en Félix Cuevas 835, planta alta, en la Colonia del Valle, a dos cuadras de Metro Zapata.</p>
<p><a class="thickbox" title="Croquis para llegar a la tienda fantástico, antes comic castle Trico." href="http://www.nemediano.com.mx/wp-content/gallery/imagenesvarias/mapaFantastico.jpg"><img class="ngg-singlepic ngg-none" src="http://www.nemediano.com.mx/wp-content/gallery/imagenesvarias/thumbs/thumbs_mapaFantastico.jpg" alt="mapaFantastico" /></a></p>
<h3>¿Cómo puedo participar?</h3>
<p>Para participar en esta colecta, te pedimos que los cómics que dones cuenten con tres características:</p>
<ol>
<li>Buen estado</li>
<li>Preferentemente, estar editados en español. De cualquier forma, aceptaremos cómics en inglés (o en cualquier otro idioma)</li>
<li>Agradeceremos que los cómics que dones no tengan una carga excesiva de violencia, así como de contenidos no aptos para menores. En este punto apelamos a tu buen criterio.</li>
</ol>
<h3>¿Qué gano con participar?</h3>
<p>Además de la satisfacción de participar en una buena obra, los asistentes que donen cinco cómics o más, se llevarán a casa un pin-up conmemorativo realizado especialmente para esta ocasión por Paco Medina, actual dibujante de X-Men, quien gustosamente nos hizo el honor de prestarnos su tiempo y talento para esta causa.</p>
<p>Los pin-ups, tamaño tabloide, estarán impresos a todo color y estarán numerados (sólo se imprimirán 150 copias).</p>
<p>Por adelantado, te agradecemos infinitamente que compartas esta invitación en tu blog, con tus amigos o en el medio que creas más conveniente. El éxito de esta idea depende de tu ayuda, así que marca el 22 de enero en tu calendario y&#8230;¡a donar cómics!</p>
<p><a class="thickbox" title="Poster de la Primera Colecta Monstruo de Historieta Juveni " href="http://www.nemediano.com.mx/wp-content/gallery/imagenesvarias/posterCampana.jpg"><img class="ngg-singlepic ngg-none" src="http://www.nemediano.com.mx/wp-content/gallery/imagenesvarias/thumbs/thumbs_posterCampana.jpg" alt="posterCampana" /></a></p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.nemediano.com.mx%2F2011%2Fprimera-colecta-monstruo-de-historieta-juvenil%2F&amp;t=Primera%20Colecta%20Monstruo%20de%20Historieta%20Juvenil" id="facebook_share_icon_358" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none;"><img src="http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif" alt="Share on Facebook" /></a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_358') || document.getElementById('facebook_share_icon_358') || document.getElementById('facebook_share_both_358') || document.getElementById('facebook_share_button_358');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_358') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.nemediano.com.mx/2011/primera-colecta-monstruo-de-historieta-juvenil/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Activismo de nuevo</title>
		<link>http://www.nemediano.com.mx/2011/activismo-de-nuevo/</link>
		<comments>http://www.nemediano.com.mx/2011/activismo-de-nuevo/#comments</comments>
		<pubDate>Thu, 13 Jan 2011 17:50:52 +0000</pubDate>
		<dc:creator>nemediano</dc:creator>
				<category><![CDATA[Acerca de mi]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[no mas sangre]]></category>
		<category><![CDATA[rius]]></category>

		<guid isPermaLink="false">http://www.nemediano.com.mx/?p=347</guid>
		<description><![CDATA[En general el giro de este blog nunca ha sido el activismo, ni político, ni social ni de ningún tipo. (Bueno los comics de izquierda aun no se consideran activismo ). Sin embargo, ahora que entré al caralibro, y que algunos de los blogers que mas admiro se están uniendo a la campaña, creo que [...]]]></description>
			<content:encoded><![CDATA[<p>En general el giro de este blog nunca ha sido el activismo, ni político, ni social ni de ningún tipo. (Bueno los comics de izquierda aun no se consideran activismo <img src='http://www.nemediano.com.mx/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ).</p>
<p>Sin embargo, ahora que entré al caralibro, y que algunos de los blogers que mas admiro se están uniendo a la campaña, creo que es posible a veces romper mi regla no escrita y hacer un post.</p>
<p>Como no ha habido mucho tiempo y recientemente me he estado especializando en frases cortas y directas, y no he andado de muy de buenas para redactar. Vamos a los hechos.</p>
<p><span id="more-347"></span></p>
<ul>
<li>Al parecer <a href="http://es.wikipedia.org/wiki/Eduardo_del_R%C3%ADo">Rius</a> inicio la campaña, <a href="http://es.wikipedia.org/wiki/Rafael_Barajas_Dur%C3%A1n">el fisgon</a> y <a href="http://www.cgdesign.com.mx/OAC/Alejandro%20Magallanes.html">Alejandro Magallanes</a> se han unido.</li>
<li>Apenas el domingo 9 de enero hubo mas de <a href="http://www.jornada.unam.mx/2011/01/09/index.php?section=politica&amp;article=007n1pol">56 asesinatos</a>.</li>
<li>Hace dos años ya eramos <a href="http://www.bangbangmusica.com/politica/245-mexico/3760-mexico-el-pais-sin-guerra-civil-con-mas-muertes-violentas">el país con mas muertes sin estar en guerra</a>.</li>
<li>En cuatro años de lucha contra el crimen hay mas de <a href="http://www.eluniversal.com.mx/nacion/183027.html">34000 muertos</a>.</li>
<li>Casi diario mueren gobernantes, por poner un ejemplo <a href="http://www.jornada.unam.mx/ultimas/2011/01/13/acribillan-a-edil-de-santiago-amoltepec-en-oaxaca">hoy asesinaron un alacalde</a>.</li>
<li>En promedio el año pasado hubo <a href="http://www.excelsior.com.mx/index.php?m=nota&amp;id_nota=703816">41 muertos diarios</a> en México.</li>
</ul>
<p>Por todo esto, en este blog al igual que en muchos otros no unimos a la campaña <strong>No mas sangre</strong>. No se si ayude de mucho pero aquí esta.</p>

<a href="http://www.nemediano.com.mx/wp-content/gallery/imagenesvarias/nomassangre.jpg" title="Póster de la campaña no mas sangre creada por Rius en el 2011" class="thickbox" rel="singlepic396" >
	<img class="ngg-singlepic" src="http://www.nemediano.com.mx/wp-content/gallery/cache/396_watermark_300x389_nomassangre.jpg" alt="No mas sangre" title="No mas sangre" />
</a>

<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.nemediano.com.mx%2F2011%2Factivismo-de-nuevo%2F&amp;t=Activismo%20de%20nuevo" id="facebook_share_icon_347" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none;"><img src="http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif" alt="Share on Facebook" /></a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_347') || document.getElementById('facebook_share_icon_347') || document.getElementById('facebook_share_both_347') || document.getElementById('facebook_share_button_347');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_347') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.nemediano.com.mx/2011/activismo-de-nuevo/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Una felicitación atrasada por la UNAM</title>
		<link>http://www.nemediano.com.mx/2010/una-felicitacion-atrasada-por-la-unam/</link>
		<comments>http://www.nemediano.com.mx/2010/una-felicitacion-atrasada-por-la-unam/#comments</comments>
		<pubDate>Sun, 10 Oct 2010 14:17:38 +0000</pubDate>
		<dc:creator>nemediano</dc:creator>
				<category><![CDATA[Acerca de mi]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[unam]]></category>

		<guid isPermaLink="false">http://www.nemediano.com.mx/?p=337</guid>
		<description><![CDATA[El pasado 22 de septiembre la Universidad Nacional Autónoma de México (UNAM) cumplió 100 años. Desde hace unos días he querido escribir algo acerca de la UNAM, simplemente las palabras no me salían, acuso yo a las constantes ocupaciones y preocupaciones que tengo al estar tratando de terminar mi tesis de maestría. Lo chistoso del [...]]]></description>
			<content:encoded><![CDATA[<p><!-- p { margin-bottom: 0.21cm; } -->El pasado 22 de septiembre la <a href="http://unam.mx/">Universidad Nacional Autónoma de México</a> (<a href="http://www.100.unam.mx/">UNAM</a>) cumplió 100 años. Desde hace unos días he querido escribir algo acerca de la UNAM, simplemente las palabras no me salían, acuso yo a las constantes ocupaciones y preocupaciones que tengo al estar tratando de terminar mi tesis de maestría. Lo chistoso del asunto es como aun cuando yo no podía escribir, la mayoría de mis pensamientos giran en torno a la UNAM. Ayer regresando de <a href="http://www.100.unam.mx/index.php?option=com_content&amp;view=article&amp;id=1391%3Acarrera-nocturna-del-centenario&amp;catid=1%3Alatest-news&amp;Itemid=81&amp;lang=es">la carrera nocturna</a>, no he podido aguantar mas para poder escribir un poco.</p>
<p><span id="more-337"></span></p>
<p>La UNAM es para mi y para muchos estudiantes mexicanos, su forma de vida, el lugar donde tomas clases, el lugar donde te reúnes con tus amigos, donde vas al cine, donde comes, donde lees, donde practicas deporte, donde conoces nuevas personas, etc.</p>
<p>La UNAM ciertamente genera muchos tipos de pasiones, y no es que critique la afición de los <a href="http://www.pumasunam.com.mx/">Pumas</a> (el equipo de futbol soccer de la UNAM). A mi también me apasiona el futbol y creo que ir a ver jugar a los pumas <a href="http://en.wikipedia.org/wiki/Estadio_Ol%C3%ADmpico_Universitario">al estadio</a> de <a href="http://en.wikipedia.org/wiki/Ciudad_Universitaria">CU</a> es una experiencia única. Pero la UNAM genera una pasión que vas mas allá de la lujuria deportiva.</p>
<p>Uno quiere e la UNAM, por que nos da propósito en nuestras vidas. La UNAM es el lugar donde pasas la mayor parte del tiempo, te da educación, te da cultura, te da dinero para las chelas (OK, de acuerdo ese es el <a href="http://www.conacyt.gob.mx/Paginas/default.aspx">CoNaCyT</a>; pero lo hace por que la UNAM aboga por ti), nos da los colores que nos identifican, nos da prestigio internacional, nos da un titulo que nos acompañará el resto de nuestras vidas, nos da la satisfacción de caminar por el campus, nos da esperanza cuando vemos a los nuevos alumnos, nos da trabajo de educadores (y que conste que educadores, en la forma integral de la palabra), nos da los libros que leemos, la musica que escuchamos, el cine que vemos, nos da criterio, nos da confianza, nos da un sentido de pertenencia y a cambio no nos pide mas que dedicación.</p>
<p>Ahora de los 100 años, me pongo a reflexionar acerca de la historia de la UNAM y como fanático deportivo no puedo olvidar el campeonato del 91 con el gol del <a href="http://es.wikipedia.org/wiki/Ricardo_Ferretti">Tuca</a>, ni el debut de <a href="http://es.wikipedia.org/wiki/Jorge_Campos_%28futbolista%29">Jorge Campos</a>. Yo no tuve edad para ver jugar al mítico <a href="http://es.wikipedia.org/wiki/Cabinho">Cabinho</a>, ni el campeonato del 81 de la mano de <a href="http://es.wikipedia.org/wiki/Hugo_S%C3%A1nchez">Hugo Sanchez</a> pero pude presenciar los campeonatos del 2004 también de la mano de Hugo, esta vez como DT.</p>
<p>Y que decir del <a href="http://pumasdorados.com/">futbol americano</a>, de los increíbles clásicos que nos toco vivir en el estadio de CU. Estadio construido para la practica de éste deporte y que fue testigo de la primera vez en la historia que una mujer prendió <a href="http://en.wikipedia.org/wiki/1968_Summer_Olympics">la flama olímpica en el 68</a>.</p>
<p>El campus de CU pilar del <a href="http://en.wikipedia.org/wiki/Postmodern_architecture">posmodernismo</a>, (aunque para mis gusto carece de cierto sabor que si hay en los campus descentralizados), es muy hermoso, con la <a href="http://en.wikipedia.org/wiki/Central_Library_%28UNAM%29">biblioteca central</a> adornada por <a href="http://en.wikipedia.org/wiki/Juan_O%27Gorman">O&#8217;Gorman</a>, con los murales de <a href="http://en.wikipedia.org/wiki/Jos%C3%A9_Clemente_Orozco">Orozco</a>, la torre de rectoría adornada por <a href="http://en.wikipedia.org/wiki/David_Alfaro_Siqueiros">Siqueiros</a>, la arquitectura de <a href="http://en.wikipedia.org/wiki/Mario_Pani">Mario Pani</a> y de <a href="http://es.wikipedia.org/wiki/Enrique_del_Moral">Enrique del Moral</a> presente en todo el campus, la <a href="http://100.unam.mx/index2.php?option=com_content&amp;view=article&amp;id=276">alberca mas grande de América latina</a>, el <a href="http://es.wikipedia.org/wiki/Jard%C3%ADn_Bot%C3%A1nico_del_Instituto_de_Biolog%C3%ADa_%28UNAM%29">jardín botánico</a>, el <a href="http://www.revistadelauniversidad.unam.mx/4507/sanchez/45sanchez.html">espacio escultórico</a>, el <a href="http://www.musica.unam.mx/index.php?option=com_content&amp;task=view&amp;id=12&amp;Itemid=21">centro cultural</a> y el recién estrenado <a href="http://www.muac.unam.mx/webpage/index.htm">MUAC</a>.</p>
<p>No nos salgamos de contexto, yo soy de los primeros en brincar de protesta cuando se afirma que la UNAM es CU. Que decir de las prepas (<a href="http://dgenp.unam.mx/">ENP</a>) y de los <a href="http://www.cch.unam.mx/">CCH</a>, de las FES (<a href="www.acatlan.unam.mx">Acatlan</a>, <a href="informatica.aragon.unam.mx">Aragon</a>, <a href="www.iztacala.unam.mx">Iztacala</a>, <a href="www.cuautitlan.unam.mx">Cuautitlan</a> y <a href="www.zaragoza.unam.mx">Zaragoza</a>), y de los centros de investigación desperdigados en el interior de la república.</p>
<p>Ya por ultimo me queda la satisfacción de decir que he sido alumno de la UNAM desde hace mas de 10 años, y afortunadamente he podido seguir en contacto (a veces como profesor, a veces como alumno y a veces como colado) en ésta, la máxima casa de estudios de América Latina.</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.nemediano.com.mx%2F2010%2Funa-felicitacion-atrasada-por-la-unam%2F&amp;t=Una%20felicitaci%C3%B3n%20atrasada%20por%20la%20UNAM" id="facebook_share_icon_337" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none;"><img src="http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif" alt="Share on Facebook" /></a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_337') || document.getElementById('facebook_share_icon_337') || document.getElementById('facebook_share_both_337') || document.getElementById('facebook_share_button_337');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_337') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.nemediano.com.mx/2010/una-felicitacion-atrasada-por-la-unam/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Esas peliculas de mafiosos</title>
		<link>http://www.nemediano.com.mx/2010/esas-peliculas-de-mafiosos/</link>
		<comments>http://www.nemediano.com.mx/2010/esas-peliculas-de-mafiosos/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 00:08:33 +0000</pubDate>
		<dc:creator>nemediano</dc:creator>
				<category><![CDATA[Acerca de mi]]></category>
		<category><![CDATA[luis estrada]]></category>
		<category><![CDATA[mefiosos]]></category>
		<category><![CDATA[peliculas]]></category>
		<category><![CDATA[Tarantino]]></category>

		<guid isPermaLink="false">http://www.nemediano.com.mx/?p=326</guid>
		<description><![CDATA[Aprovechando el inicio del puente, Erika me llevo a ver la nueva cinta de Luis Estrada: El infierno: nada que celebrar. Bastante recomendable, buena fotografía, muy al estilo de Estada y aunque es un poco fuerte la violencia se justifica por contexto (¿Eso lo pensé o lo escribí?). Me puso a pensar en como me [...]]]></description>
			<content:encoded><![CDATA[<p>Aprovechando el inicio del puente, Erika me llevo a ver la nueva cinta de <a href="http://www.imdb.com/name/nm0261840/">Luis Estrada</a>: El infierno: nada que celebrar. Bastante recomendable, buena fotografía, muy al estilo de Estada y aunque es un poco fuerte la violencia se justifica por contexto (¿Eso lo pensé o lo escribí?).</p>
<p>Me puso a pensar en como me agradan las películas de gánsters, mafiosos, <a href="http://en.wikipedia.org/wiki/Spaghetti_Western">spaguetti western</a> o como quieran decirles. Si, esta película es de ese genero el mismo director <a title="El comentario esta en notas de director, estupidas paginas en flash" href="http://www.elinfiernolapelicula.com.mx/" target="_blank">lo dijo</a>.</p>
<p>Aunque hoy he estado pensando en como optimizar la memoria usada en una <a href="http://en.wikipedia.org/wiki/Data_structure">estructura de datos</a>, que representa una <a href="http://en.wikipedia.org/wiki/Polygonal_modeling">superficie discretizada en 3D</a>. (¿Alguna sugerencia?, la ayuda es bien recibida :p ). Creo que es justo que pierda un poco de tiempo en escribir este post.</p>
<p>Aquí mi top 5 de películas de mafiosos&#8230;<br />
<span id="more-326"></span></p>
<h4>1.- <a href="http://www.imdb.com/title/tt0110912/" target="_blank">Pulp Fiction</a></h4>
<p><strong>En español le púsieron:</strong> Tiempos Violentos</p>
<p><strong>La dirige:</strong> Quentin Tarantino</p>
<p><strong>La escena cumbre para mi es:</strong> El <a href="http://en.wikipedia.org/wiki/Pulp_Fiction_%28film%29#Jules.27s_Bible_passage">Ezequiel 25:17</a>, una de las mejores escenas jamas filmadas, nada mas que decir.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/wZBfmBvvotE?fs=1&amp;hl=es_MX&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/wZBfmBvvotE?fs=1&amp;hl=es_MX&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h4>2.- <a href="http://www.imdb.com/title/tt0221027/">Blow</a></h4>
<p><strong>En español le púsieron:</strong> Inhala</p>
<p><strong>La dirige:</strong> Ted Demme</p>
<p><strong>La escena cumbre para mi es:</strong> La escena del final, después de ser traicionado por sus socios George, piensa en que no le dolió el dinero que perdió, los años que va a pasar en la cárcel, o el hecho de ser traicionado, si no el haberle roto una promesa a su hija.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/2w5pVPGmjUY?fs=1&amp;hl=es_MX&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/2w5pVPGmjUY?fs=1&amp;hl=es_MX&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h4>3.- <a href="http://www.imdb.com/title/tt1692190/">El infierno</a></h4>
<p><strong>En español le púsieron:</strong> El infierno: nada que celebrar. (que al cabo es su titulo original :p )</p>
<p><strong>La dirige:</strong> Luis Estrada</p>
<p><strong>La escena cumbre para mi es:</strong> Difícil decidir por que la acabo de ir a ver, pero creo que casi al final. En el discurso del recién electo presidente municipal Don Jose Reyes, que tiene el descaro de dar el grito de independencia en el marco del bicentenario (se equivoca y dice la corredora en vez de <a href="http://en.wikipedia.org/wiki/La_Corregidora">la corregidora</a>)  antes de la balacera podemos apreciar el escudo nacional (Cualquier parecido con la escena final de la Ley de Herodes, no es coincidencia).<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/suJTY94dH1I?fs=1&amp;hl=es_MX&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/suJTY94dH1I?fs=1&amp;hl=es_MX&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h4>4.- <a href="http://www.imdb.com/title/tt0105236/" target="_blank">Reservoir Dogs</a></h4>
<p><strong>En español le púsieron:</strong> Perros de reserva</p>
<p><strong>La dirige:</strong> Quentin Tarantino</p>
<p><strong>La escena cumbre para mi es:</strong> Después del intento fallido de asalto a la joyería Mr. Blonde, toma como rehen a un policía. En lo que espera a que lleguen los demás al punto de reunión, se dedica a torturarlo solo por diversión mientras escucha musica country en la K-BIll (También cualquier semejanza con otro titulo de Tarantino no es coincidencia).<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/WCUooZ9iciI?fs=1&amp;hl=es_MX&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/WCUooZ9iciI?fs=1&amp;hl=es_MX&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h4>5.- <a href="http://www.imdb.com/title/tt0765429/">American Gangster</a></h4>
<p><strong>En español le púsieron:</strong> Gangster Americano</p>
<p><strong>La dirige:</strong> Ridley Scott</p>
<p><strong>La escena cumbre para mi es:</strong> Frank Lucas les enseña a sus hermanos recién llegado del campo como es el nuevo negocio familiar y los lleva a comer a una cafetería. Y ante la mirada atónita de todos sale un momento para matar a uno de sus rivales y luego regresa a seguir comiendo mientras les habla de integridad.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/yXceJA-eoJg?fs=1&amp;hl=es_MX&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/yXceJA-eoJg?fs=1&amp;hl=es_MX&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Muy buenas pero fuera de mi top five (créanme fue una decisión difícil):</p>
<p><a href="http://www.imdb.com/title/tt0120735/">Lock, Stock and Two Smoking Barrels</a></p>
<p><a href="http://www.imdb.com/title/tt0068646/">The Godfather</a></p>
<p><a href="http://www.imdb.com/title/tt0099685/">Goodfellas</a></p>
<p><a href="http://www.imdb.com/title/tt0181865/">Trafic</a></p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.nemediano.com.mx%2F2010%2Fesas-peliculas-de-mafiosos%2F&amp;t=Esas%20peliculas%20de%20mafiosos" id="facebook_share_icon_326" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none;"><img src="http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif" alt="Share on Facebook" /></a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_326') || document.getElementById('facebook_share_icon_326') || document.getElementById('facebook_share_both_326') || document.getElementById('facebook_share_button_326');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_326') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.nemediano.com.mx/2010/esas-peliculas-de-mafiosos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Organizando fotos con ImageMagick</title>
		<link>http://www.nemediano.com.mx/2010/organizando-fotos-con-imagemagick/</link>
		<comments>http://www.nemediano.com.mx/2010/organizando-fotos-con-imagemagick/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 22:07:36 +0000</pubDate>
		<dc:creator>nemediano</dc:creator>
				<category><![CDATA[Computación]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nemediano.com.mx/?p=317</guid>
		<description><![CDATA[El semestre antepasado lleve la clase de tratamiento de imágenes multiespectrales con el Dr jorge Lira. Fue un curso muy pesado tareas y practicas a diestra y siniestra, además incluían manejar imágenes en un formato RAW para evitar la pedida de información, (esto se traducía en que cada practica o tarea que queríamos hacer, involucraba [...]]]></description>
			<content:encoded><![CDATA[<p>El semestre antepasado lleve la clase de tratamiento de imágenes multiespectrales con el <a href="http://turing.iimas.unam.mx/~siav/Gente/jorgelira.htm">Dr jorge Lira</a>. Fue un curso muy pesado tareas y practicas a diestra y siniestra, además incluían manejar imágenes en un formato RAW para evitar la pedida de información, (esto se traducía en que cada practica o tarea que queríamos hacer, involucraba de 500MB a 1GB en 10 o 15 imágenes).  Lo mas feo del asunto es que las imágenes en RAW no son interpretables en casi ningún programa, para poder transformarlas en lindos png o jpg (o tiff) que pudiéramos usar en los reportes y tareas (Documentos de <a href="http://www.latex-project.org/">LaTeX</a> o de <a href="www.openoffice.org">Open Office</a>).</p>
<p>Prácticamente dependíamos de un programa comercial (privativo) que el Dr tenia en su laboratorio para guardar una copia de la imagen en algún formato mas universal. No contentos con llevar nuestro GB de imágenes en raw con los datos de la practica, teníamos que viajar con una copia de la imagen en jpg para poder escribir nuestro reporte.</p>
<p>Fue entonces cuando mi amiga Etna, me presento con <a href="http://www.imagemagick.org/script/index.php">ImageMagick</a>.<br />
<span id="more-317"></span></p>
<h2>Y que es ImageMagick&#8230;</h2>
<p>Es un conjunto de programas libres que sirven para convertir, transformar, y procesar imágenes en casi cualquier formato (y lo digo en serio). Lo que lo hace tan poderoso y flexible es que su interfaz es en linea de comandos, por lo que es ideal para desarrollar programas que ocupen ImageMagick y procesen imágenes (de hecho hay bindings para varios lenguajes de programación).</p>
<p>Una de las chucherias de ImageMagick es convertir de formato raw a cualquier formato.</p>
<h2>Por que lo querría usar uno normalmente.</h2>
<p>La segunda vez que me encontré con la necesidad de procesar un montón de imágenes y que me motivo a escribir este post fue regresando de las vacaciones en Oaxaca. Yo no llevaba mi cámara, pero Erika y Mag me pasaron sus fotos.</p>
<p>Ya saben tenia cientos de imágenes con títulos bien descriptivos como IMG_2379.JPG que pesaban algo así como 600Kb y median como 3072&#215;2304 píxeles. Lo cual si hubiera querido subir en mi blog, conllevan un montón de trafico de red, y además seria un desperdicio, por que quien tiene un monitor con esa resolución (Vamos los que las vieran las tendrían que rescalar antes de verlas).</p>
<p>La solución de nuevo es ImageMagick</p>
<h2>Como se usa ImageMagik</h2>
<p>Pues el comando convert (que no es el único que conforma ImageMagick), nos da toda la versatilidad que queremos.</p>
<h3>Escalando una imagen</h3>
<p>Al escalar una imagen debemos de tener cuidado de hacerlo de una manera de que conserve su proporción (su aspect ratio), la mayoría del SW nos deja hacerlo si le decimos que no queremos deformaciones, también se puede hacer en ImageMagick</p>
<pre>convert -resize 50% input.jpg output.jpg</pre>
<p>Al darle en porcentaje el tamaño, Imagemagick sabe que no debe modificar el aspect ratio.</p>
<h3>Reduciendo la calidad de la imagen</h3>
<p>Hay dos tipos de compresión una donde no se pierde información llamada lossless, y otra llamada lossy compresión que es cuando un imagen pierde parte de su información al comprimirse. Cuando guardamos una imagen en formato jpg se esta haciendo una compresión con pérdida (lossy). El algoritmo del jpg es lo suficientemente flexible para dejarnos controlar la perdida con un parámetro de calidad. Mientras menos sea la calidad menor sera la perdida y mayor el tamaño de la imagen.</p>
<p>Sin embargo el algoritmo es tan bueno que bajar un poco la calidad de la imagen, suele bajar en mucho el tamaño (en bytes) de la misma, aproximadamente una imagen al 90% de calidad mide una cuarta parte que la imagen original. El estándar para publicar en una web es del 85%.</p>
<p>Para hacerlo en ImageMagick se ocupa el siguiente comando</p>
<pre>convert -quality 85% input.jpg output.jpg</pre>
<h3>Corrigiendo la orientación</h3>
<p>Otra cosa interesante es que ImageMagick puede corregir la orientación de una imagen de una cámara si los metadatos de la foto tienen esa orientación con el comando</p>
<pre>convert -auto-orient input.jpg output.jpg</pre>
<p>Ojo esto no siempre funciona (a veces los metadatos de la cámara no están bien), por lo que siempre es bueno darle una checada a la imagen de salida. También recuerda que en muchos navegadores de archivos se aplica esta corrección, pero eso no quiere decir que la imagen este volteada, si no que el visor de imágenes la esta transformando para que la veas.</p>
<p>Eso puede provocar que en tu máquina tu veas la imagen al derecho y cuando la subas a un sitio web, la veas al revés. La única forma de saberlo es viendo el tamaño de la imagen y ver si es mas alta que ancha o viceversa.</p>
<p>Y desde luego todos estos pasos se pueden llevar a cabo al mismo tiempo. Por ejemplo:</p>
<pre>convert -auto-orient -quality 85% -resize 50% input.jpg output.jpg</pre>
<h2>Y poniendo todo en un script</h2>
<p>Aprovechando que tuve que aprender un poco de bash, para un programa de la tesis, escribí el siguiente scrip en bash, para hacer las operaciones antes descritas sobre una carpeta con muchas imágenes.</p>
<p>El script tiene las siguientes características:</p>
<ul>
<li>Siempre trata de hacer la corrección de orientación</li>
<li>Acepta opcionalmente los siguientes parámetros</li>
<li><strong>-q quality</strong> Para reducir de calidad las imágenes, el parámetro debe ser entero y estar en el intervalo (0, 100)</li>
<li><strong>-s size</strong> Para reducir el tamaño en un porcentaje, (en ImageMagick esto no necesariamente tiene que especificarse así, pero en el scrip valido que solo se pueda cambiar el tamaño en un porcentaje) que acepta enteros en el intervalo (0, 100)</li>
<li><strong>-n name</strong> Para especificar un patrón de nombre de la imagen de salida, en caso de que este parámetro no se le proporcione, las imágenes de salida tendrán el mismo nombre que las de salida (puede que las sobrescriban), con la única excepción que valido que en la imagen de salida la extensión siempre sea en minúsculas (odio que en la mayoría de las cámaras, las extensiones de las imágenes estén en mayúsculas DSC_001.JPG)</li>
</ul>
<p>En resumen el scrip corrido en su forma completa por ejemplo:</p>
<pre>photo2wp.sh -q 85 -s 50  –name Vacaciones</pre>
<p>Tomara todas las imágenes con extensión jpg ó JPG que haya en el directorio actual. A cada una de ellas las escalará al 50% respetando su aspect ratio, las comprimirá en jpg, con el 85% de calidad y las imágenes de salida tendrán el nombre VacacionesXXX.jpg. Donde XXX es un numero progresivo que depende de la cantidad de imágenes que haya en la carpeta.</p>
<p>Es posible pasar mas de una palabra en el nombre pero entonces hay que encerrarlo en comillas:</p>
<pre>photo2wp.sh -q 85 -s 50  –name “Mis Vacaciones”</pre>
<p>Todos los argumentos son opcionales:</p>
<pre>photo2wp.sh -q 85  –name Vacaciones</pre>
<p>Por ejemplo comprime todas las imágenes al 85% y las renombra como VacacionesXXX.jpg, sin escalar su tamaño.</p>
<p>En un abuso de las opciones, puede usarse sin argumentos</p>
<pre>photo2wp.sh</pre>
<p>Que toma todas las imágenes, trata de corregir su orientación, y las guarda con el mismo nombre pero asegurándose que la extensión sea en minúsculas (si las imágenes originales tienen su extensión en minúsculas, las va a sobrescribir)</p>
<p>Por ultimo algunas recomendaciones:</p>
<ul>
<li><strong>No he testeado el script al 100%</strong>, así que siempre ten una copia de tus imágenes originales. (Aún cuando no uses mi script esto es buena practica)</li>
<li>Recuerda que el script solo funciona cuando <strong>ya tienes instalado</strong> el ImageMagick en tu maquina.</li>
<li>Si quieres usar el script, recuerda que antes que nada debes darle permisos de ejecución.</li>
<li>Recuerda que el script solo actúa sobre el directorio en el que esta siendo ejecutado. <strong>No se mete recursivamente</strong> en carpetas.</li>
</ul>
<p>Finalmente el script esta aqui (copia y pega en un archivo de texto yo lo llame photo2wp.sh, pero pon el nombre que quieras):</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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Este scrip toma todas las fotos de la carpeta donde se ejecute y las</span>
<span style="color: #666666; font-style: italic;">#procesa. Primero la pone al derecho dependiendo de los metadatos, </span>
<span style="color: #666666; font-style: italic;">#les cambia de nombre y las guarda con un tamaño y una calidad </span>
<span style="color: #666666; font-style: italic;">#determinadas por las opciones</span>
&nbsp;
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> dameNumero <span style="color: #7a0874; font-weight: bold;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$total</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">100</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$cont</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">10</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
			<span style="color: #007800;">number</span>=<span style="color: #ff0000;">&quot;0<span style="color: #007800;">$cont</span>&quot;</span>
		<span style="color: #000000; font-weight: bold;">else</span>
			<span style="color: #007800;">number</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$cont</span>&quot;</span>
		<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">elif</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$total</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">1000</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$cont</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">10</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
			<span style="color: #007800;">number</span>=<span style="color: #ff0000;">&quot;00<span style="color: #007800;">$cont</span>&quot;</span>
		<span style="color: #000000; font-weight: bold;">elif</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$cont</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">100</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
			<span style="color: #007800;">number</span>=<span style="color: #ff0000;">&quot;0<span style="color: #007800;">$cont</span>&quot;</span>
		<span style="color: #000000; font-weight: bold;">else</span>
			<span style="color: #007800;">number</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$cont</span>&quot;</span>
		<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">else</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$cont</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">10</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
			<span style="color: #007800;">number</span>=<span style="color: #ff0000;">&quot;000<span style="color: #007800;">$cont</span>&quot;</span>
		<span style="color: #000000; font-weight: bold;">elif</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$cont</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">100</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
			<span style="color: #007800;">number</span>=<span style="color: #ff0000;">&quot;00<span style="color: #007800;">$cont</span>&quot;</span>
		<span style="color: #000000; font-weight: bold;">elif</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$cont</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">1000</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
			<span style="color: #007800;">number</span>=<span style="color: #ff0000;">&quot;0<span style="color: #007800;">$cont</span>&quot;</span>
		<span style="color: #000000; font-weight: bold;">else</span>
			<span style="color: #007800;">number</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$cont</span>&quot;</span>
		<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">fi</span> 
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Aqui parseamos las opciones</span>
<span style="color: #007800;">qflag</span>=<span style="color: #000000;">0</span>
<span style="color: #007800;">sflag</span>=<span style="color: #000000;">0</span>
<span style="color: #007800;">nflag</span>=<span style="color: #000000;">0</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">getopts</span> <span style="color: #ff0000;">'q:s:n:'</span> OPTION
<span style="color: #000000; font-weight: bold;">do</span>
  <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #007800;">$OPTION</span> <span style="color: #000000; font-weight: bold;">in</span>
  q<span style="color: #7a0874; font-weight: bold;">&#41;</span>	<span style="color: #007800;">qflag</span>=<span style="color: #000000;">1</span>
		<span style="color: #007800;">quality</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$OPTARG</span>&quot;</span>
		<span style="color: #000000; font-weight: bold;">;;</span>
  s<span style="color: #7a0874; font-weight: bold;">&#41;</span>	<span style="color: #007800;">sflag</span>=<span style="color: #000000;">1</span>
		<span style="color: #007800;">size</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$OPTARG</span>&quot;</span>
		<span style="color: #000000; font-weight: bold;">;;</span>
  n<span style="color: #7a0874; font-weight: bold;">&#41;</span>	<span style="color: #007800;">nflag</span>=<span style="color: #000000;">1</span>
		<span style="color: #007800;">nameBase</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$OPTARG</span>&quot;</span>
		<span style="color: #000000; font-weight: bold;">;;</span>
  <span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>	<span style="color: #7a0874; font-weight: bold;">printf</span> <span style="color: #ff0000;">&quot;Usage: photo2wp.sh [-q &lt;quality&gt;] [-s &lt;size&gt;] [-n &lt;name&gt;]&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">2</span>
		<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">2</span>
		<span style="color: #000000; font-weight: bold;">;;</span>
  <span style="color: #000000; font-weight: bold;">esac</span>
<span style="color: #000000; font-weight: bold;">done</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Si no nos dieron quality asume el 100</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$qflag</span> <span style="color: #660033;">-ne</span> <span style="color: #000000;">1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #007800;">quality</span>=<span style="color: #000000;">100</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Si no nos dieron size asume el 100</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$sflag</span> <span style="color: #660033;">-ne</span> <span style="color: #000000;">1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #007800;">size</span>=<span style="color: #000000;">100</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
&nbsp;
<span style="color: #666666; font-style: italic;">#Checamos que quality sea valido</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$quality</span> =~ ^<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0</span>-<span style="color: #000000;">9</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>+$ <span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$quality</span> <span style="color: #660033;">-gt</span> <span style="color: #000000;">100</span> <span style="color: #660033;">-o</span> <span style="color: #007800;">$quality</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
    <span style="color: #000000; font-weight: bold;">then</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;El parámetro quality debe se un número entero en el intervalo [0, 100]&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">2</span>
		<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">3</span>
    <span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">else</span> 
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;El parámetro quality debe se numérico y entero&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">2</span>
    <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">3</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Ahora validamos el valor de size</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$size</span> =~ ^<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0</span>-<span style="color: #000000;">9</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>+$ <span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$size</span> <span style="color: #660033;">-gt</span> <span style="color: #000000;">100</span> <span style="color: #660033;">-o</span> <span style="color: #007800;">$size</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
    <span style="color: #000000; font-weight: bold;">then</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;El parámetro size debe se un número entero en el intervalo [0, 100]&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">2</span>
		<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">3</span>
    <span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">else</span> 
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;El parámetro size debe se numérico y entero&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">2</span>
    <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">3</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Contamos cuantas imagenes hay</span>
<span style="color: #007800;">total</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">*</span>.<span style="color: #7a0874; font-weight: bold;">&#91;</span>jJ<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>pP<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>gG<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">wc</span> -l<span style="color: #000000; font-weight: bold;">`</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$total</span> <span style="color: #660033;">-eq</span> <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;No hay imagenes que procesar en esta carpeta&quot;</span>
	<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Calculemos las opciones y avisemos al usuario que vamos a hacer</span>
<span style="color: #007800;">opciones</span>=<span style="color: #ff0000;">&quot;-auto-orient&quot;</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Hay <span style="color: #007800;">$total</span> fotos&quot;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$sflag</span> <span style="color: #660033;">-eq</span> <span style="color: #000000;">1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Se van a escalar a un tamaño de: <span style="color: #007800;">$size</span>%&quot;</span>
	<span style="color: #007800;">opciones</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$opciones</span> -resize <span style="color: #007800;">$size</span>%&quot;</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$qflag</span> <span style="color: #660033;">-eq</span> <span style="color: #000000;">1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Se van a comprimir con una calidad de: <span style="color: #007800;">$quality</span>%&quot;</span>
	<span style="color: #007800;">opciones</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$opciones</span> -quality <span style="color: #007800;">$quality</span>%&quot;</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$nflag</span> <span style="color: #660033;">-eq</span> <span style="color: #000000;">1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Se guardaran con el nombre: <span style="color: #007800;">$nameBase</span>[XXX].jpg&quot;</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Todo correcto empezamos a procesar</span>
<span style="color: #007800;">cont</span>=<span style="color: #000000;">0</span>
<span style="color: #007800;">number</span>=<span style="color: #ff0000;">&quot;&quot;</span>
<span style="color: #007800;">output_file</span>=<span style="color: #ff0000;">&quot;&quot;</span>
<span style="color: #007800;">images</span>=<span style="color: #000000; font-weight: bold;">*</span>.<span style="color: #7a0874; font-weight: bold;">&#91;</span>jJ<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>pP<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>gG<span style="color: #7a0874; font-weight: bold;">&#93;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Ciclo principal sobre todas las imagenes de entrada</span>
<span style="color: #000000; font-weight: bold;">for</span> input_file <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #007800;">$images</span>
<span style="color: #000000; font-weight: bold;">do</span>
	<span style="color: #666666; font-style: italic;">#Calculamos el nombre de la imagen de salida</span>
	<span style="color: #007800;">cont</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">expr</span> <span style="color: #007800;">$cont</span> + <span style="color: #000000;">1</span><span style="color: #000000; font-weight: bold;">`</span>
	dameNumero
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$nflag</span> <span style="color: #660033;">-eq</span> <span style="color: #000000;">1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
		<span style="color: #007800;">output_file</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$nameBase</span><span style="color: #007800;">$number</span>&quot;</span>
	<span style="color: #000000; font-weight: bold;">else</span>
		<span style="color: #007800;">output_file</span>=<span style="color: #800000;">${input_file%%.*}</span>
	<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">#Realizamos la conversion</span>
	<span style="color: #000000; font-weight: bold;">if</span> convert <span style="color: #007800;">$opciones</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$input_file</span>&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$output_file</span>.jpg&quot;</span> <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null ; <span style="color: #000000; font-weight: bold;">then</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Imagen <span style="color: #007800;">$cont</span> de <span style="color: #007800;">$total</span>&quot;</span>
	<span style="color: #000000; font-weight: bold;">else</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$input_file</span> no pudo ser procesada...&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">2</span>
	<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">done</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span></pre></td></tr></table></div>

<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.nemediano.com.mx%2F2010%2Forganizando-fotos-con-imagemagick%2F&amp;t=Organizando%20fotos%20con%20ImageMagick" id="facebook_share_icon_317" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none;"><img src="http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif" alt="Share on Facebook" /></a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_317') || document.getElementById('facebook_share_icon_317') || document.getElementById('facebook_share_both_317') || document.getElementById('facebook_share_button_317');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_317') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.nemediano.com.mx/2010/organizando-fotos-con-imagemagick/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

