<?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>Historias de un Geek &#187; trucos</title>
	<atom:link href="http://albertein.com.mx/archives/tag/trucos/feed" rel="self" type="application/rss+xml" />
	<link>http://albertein.com.mx</link>
	<description>AlbertEin - Desvarios de una mente perturbada</description>
	<lastBuildDate>Wed, 30 Nov 2011 16:12:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>¿Como funciona el swaping con XOR?</title>
		<link>http://albertein.com.mx/archives/26</link>
		<comments>http://albertein.com.mx/archives/26#comments</comments>
		<pubDate>Thu, 06 Mar 2008 20:09:42 +0000</pubDate>
		<dc:creator>AlbertEin</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[masturbacion mental]]></category>
		<category><![CDATA[pseudomath]]></category>
		<category><![CDATA[trucos]]></category>

		<guid isPermaLink="false">http://albertein.gamersla.net/archives/26</guid>
		<description><![CDATA[Los que estudiaron programación indudablemente se encontraron con el problema de swapear dos variables, es decir, intercambiar su valor, y los profesores indudablemente mostraban la resolución: 1 2 3 4 5 6 void Swap &#40;ref int a, ref int b&#41; &#123; int swapTemporal = a; a = b; b = swapTemporal; &#125; Donde se usaba [...]]]></description>
			<content:encoded><![CDATA[<p>Los que estudiaron programación indudablemente se encontraron con el problema de swapear dos variables, es decir, intercambiar su valor, y los profesores indudablemente mostraban la resolución:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">	<span style="color: #6666cc; font-weight: bold;">void</span> Swap <span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">ref</span> <span style="color: #6666cc; font-weight: bold;">int</span> a, <span style="color: #0600FF; font-weight: bold;">ref</span> <span style="color: #6666cc; font-weight: bold;">int</span> b<span style="color: #008000;">&#41;</span> 
	<span style="color: #008000;">&#123;</span>
		<span style="color: #6666cc; font-weight: bold;">int</span> swapTemporal <span style="color: #008000;">=</span> a<span style="color: #008000;">;</span>
		a <span style="color: #008000;">=</span> b<span style="color: #008000;">;</span>
		b <span style="color: #008000;">=</span> swapTemporal<span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Donde se usaba una variable temporal para no perder el valor de a cuando se le asigna el valor de b, para posteriormente asignárselo a b. Algunos tal ves se hayan encontrado la resolución alternativa, usando XOR sin variable temporal:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">	<span style="color: #6666cc; font-weight: bold;">void</span> Swap <span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">ref</span> <span style="color: #6666cc; font-weight: bold;">int</span> a, <span style="color: #0600FF; font-weight: bold;">ref</span> <span style="color: #6666cc; font-weight: bold;">int</span> b<span style="color: #008000;">&#41;</span> 
	<span style="color: #008000;">&#123;</span>
		a <span style="color: #008000;">=</span> a <span style="color: #008000;">^</span> b<span style="color: #008000;">;</span>
		b <span style="color: #008000;">=</span> a <span style="color: #008000;">^</span> b<span style="color: #008000;">;</span>
		a <span style="color: #008000;">=</span> a <span style="color: #008000;">^</span> b<span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Y quedaron sorprendidos por que ciertamente funciona.</p>
<p><strong>¿Pero, por que?</strong></p>
<p>Empezamos definiendo rápidamente, XOR es un OR exclusivo, lo que significa que es un operador binario que nos da como resultado un 1 solamente si uno de los dos (pero no ambos) operandos es igualmente 1, es decir, la siguiente tabla de verdad:</p>
<pre>
	_________________
	| a | b | a ^ b |
	-----------------
	| 0 | 0 |   0   |
	| 0 | 1 |   1   |
	| 1 | 0 |   1   |
	| 1 | 1 |   0   |
	-----------------
</pre>
<p>Dado esto podemos definir un par de axiomas:</p>
<pre>
	a ^ a = 0
	a ^ 0 = a
</pre>
<p>es decir:</p>
<ul>
<li>Si ambos operandos son iguales en un XOR el resultado es invariablemente cero</li>
<li>Si un operando es igual a cero en un XOR el resultado es invariablemente el valor del otro operando</li>
</ul>
<p>Y estos dos axiomas son lo único que necesitamos para comprobar que el primer y segundo código son equivalentes:</p>
<blockquote>
<p>	<strong>a&#8217; = a ^ b</strong> //Es a prima para evitar confundir la variable con el valor original de a</p>
<p>	b&#8217; = a&#8217; ^ b<br />
	Si sutituimos el valor de a&#8217; tenemos:<br />
	b&#8217; = (a ^ b) ^ b<br />
	b ^ b = 0 por nuestro primer axioma, por lo que nos queda:<br />
	b&#8217; = a ^ 0<br />
	a ^ 0 = a por nuestro segundo axioma, por lo que tenemos<br />
	<strong>b&#8217; = a</strong></p>
<p>	a&#8217; = a&#8217; ^ b&#8217; //Si sustituimos los valores de a&#8217; y b&#8217; tenemos:<br />
	a&#8217; = (a ^ b) ^ a<br />
	a ^ a = 0 por nuestro primer axioma, por lo que nos queda:<br />
	a&#8217; = b ^ 0<br />
	b ^ 0 = b por nuestro segundo axioma, por lo que tenemos<br />
	<strong>a&#8217; = b</strong></p>
<p>	Asi, al finl de las tres operaciones a&#8217; tiene el valor original de b, y b&#8217; el valor original de a.</p>
<p><strong>Q.E.D. \o/</strong>
</p></blockquote>
<p>Como ven la demostración es trivial y seguramente un overkill, pero te puede matar 5 minutos de aburrimiento :p. Nos vemos en la siguiente entrega cuando demuestre que el negro es blanco, claro, al menos que muera antes en un crucero de zebras.</p>
]]></content:encoded>
			<wfw:commentRss>http://albertein.com.mx/archives/26/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>La belleza del formato de fecha yyyymmdd</title>
		<link>http://albertein.com.mx/archives/13</link>
		<comments>http://albertein.com.mx/archives/13#comments</comments>
		<pubDate>Tue, 11 Dec 2007 00:06:34 +0000</pubDate>
		<dc:creator>AlbertEin</dc:creator>
				<category><![CDATA[Palabras al azar]]></category>
		<category><![CDATA[trucos]]></category>

		<guid isPermaLink="false">http://albertein.gamersla.net/la-belleza-del-formato-de-fecha-yyyymmdd</guid>
		<description><![CDATA[Siempre que pongo una fecha trato de hacerlo en el formato yyyymmdd en ves del mas tradicional (en México) de ddmmyyy. ¿Por que? Resulta ser que ese formato es mal útil al momento de ver una lista de archivos y saber cual es el mas actual, si usamos yyyymmdd lo único que ocupamos es ordenar [...]]]></description>
			<content:encoded><![CDATA[<p>Siempre que pongo una fecha trato de hacerlo en el formato yyyymmdd en ves del mas tradicional (en México) de ddmmyyy.</p>
<p><strong>¿Por que?</strong></p>
<p>Resulta ser que ese formato es mal útil al momento de ver una lista de archivos y saber cual es el mas actual, si usamos yyyymmdd lo único que ocupamos es ordenar la lista alfabéticamente y tendremos en el mismo momento un orden cronológico.</p>
<p>Cuando un programa ordena una lista, compara los caracteres uno por uno según su ubicación, si los nombres están en formato ddmmyyyy, comparara primeramente los dias, por lo que el primero de diciembre (0112) aparecerá antes que el 31 de enero (3112). En cambio si usamos yyyymmdd, siempre se compararan primero el año, que es el valor que tiene mas peso, seguido del mes y por ultimo el día.</p>
<p>No cuesta mucho acostumbrarse a un nuevo formato de fecha y las ventajas si usas mucho la compu son bastantes, por lo que no hace daño y puede ser muy útil <img src='http://albertein.com.mx/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ahora, antes de que alguien salga diciendo que es antinatural, les recuerdo que el mundo no gira alrededor de ustedes, distintas culturas usan distintos formatos de fecha, numero, moneda, etc. Y lo que a ustedes les parece poco común en otros lugares del mundo es de uso diario, por ejemplo, en gran parte Europa se usa el punto (.) como separador de miles y la coma (,) como separador decimal, por lo que nuestro 123,456.78 se convierte en 123.456,78. Sin mencionar que los gringos usas mmddyyyy como formato de fecha común.</p>
<p>Igual si no me hacen caso me vale.</p>
<p>P.S Si van a hacer esto, es importante que los meses y los días siempre tengan dos dígitos, por ejemplo, para enero usar 01 en ves de 1.</p>
]]></content:encoded>
			<wfw:commentRss>http://albertein.com.mx/archives/13/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Di no a los passWORDS, si a passPHRASE</title>
		<link>http://albertein.com.mx/archives/10</link>
		<comments>http://albertein.com.mx/archives/10#comments</comments>
		<pubDate>Sat, 08 Dec 2007 00:34:29 +0000</pubDate>
		<dc:creator>AlbertEin</dc:creator>
				<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[trucos]]></category>

		<guid isPermaLink="false">http://albertein.gamersla.net/di-no-a-los-passwords-si-a-passphrase</guid>
		<description><![CDATA[Leyendo Coding Horror, me encontré con un post acerca de no usar palabras como contraseñas, si no frases. El beneficio es obvio, una frase es fácil de recordar, mas aun si es algún tipo de cita de un libro o una canción, y es mas larga que cualquier palabra que puedas elegir. Por lo tanto [...]]]></description>
			<content:encoded><![CDATA[<p>Leyendo <a href="http://www.codinghorror.com/blog/archives/000342.html">Coding Horror</a>, me encontré con un post acerca de no usar palabras como contraseñas, si no frases.</p>
<p>El beneficio es obvio, una frase es fácil de recordar, mas aun si es algún tipo de cita de un libro o una canción, y es mas larga que cualquier palabra que puedas elegir.</p>
<p><strong>Por lo tanto una frase usada como contraseña es mucho mas segura que una palabra.</strong></p>
<p>Los críticos dicen que esto no es así, debido a que las frases contienes palabras de diccionario, pero no necesariamente. Yo desde hace bastantes años llevo usando como contraseña principal una pequeña frase de unas cuantas palabras, la frase esta ingles y para evitar ataques de diccionarios esta mexicanizado.</p>
<p><strong>¿Mexicanizado?</strong></p>
<p>Así es, basicamente lo que hago es poner algunas palabras tal y como suenan en español, ejemplos:</p>
<ul>
<li>Lucky star: Luqui Estar</li>
<li>What if god was one of us: Güat if god uas uan of os</li>
<li>When the night, has come: Güen de naigt, jas com</li>
</ul>
<p>Hasta el momento me ha funcionado, y no veo por que a ustedes no <img src='http://albertein.com.mx/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://albertein.com.mx/archives/10/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

