<?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>Juan Benavides &#187; Programación</title>
	<atom:link href="http://juanbenavides.info/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://juanbenavides.info</link>
	<description>Anotaciones de un Geek</description>
	<lastBuildDate>Tue, 25 Oct 2011 05:08:29 +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>Rediseño de IndieWeblogs</title>
		<link>http://juanbenavides.info/rediseno-de-indieweblogs/2010/04/</link>
		<comments>http://juanbenavides.info/rediseno-de-indieweblogs/2010/04/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 22:22:16 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[indieweblogs]]></category>
		<category><![CDATA[rediseño]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=308</guid>
		<description><![CDATA[Despues de 3 días de locura con WordPress, finalmente salió el rediseño de IdentidadGeek, MetropoliBlog, CriticaPura, junto con los nuevos blogs SalaDeportiva y Cinescopia. De hecho me da gusto que salió este último, era un proyecto que tenía desde hace mucho tiempo y ahora funciona finalmente. Falta que se llenen de contenido para ver que [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://juanbenavides.info/wp-content/uploads/2010/04/footer-indieblogs.png" alt="" title="footer-indieblogs" width="700" class="alignnone size-medium wp-image-309" /></p>
<p>Despues de 3 días de locura con WordPress, finalmente salió el rediseño de <a href="http://identidadgeek.com/">IdentidadGeek</a>, <a href="http://metropoliblog.com/">MetropoliBlog</a>, <a href="http://criticapura.com/">CriticaPura</a>, junto con los nuevos blogs <a href="http://saladeportiva.com/">SalaDeportiva</a> y <a href="http://cinescopia.com/">Cinescopia</a>. De hecho me da gusto que salió este último, era un proyecto que tenía desde hace mucho tiempo y ahora funciona finalmente.</p>
<p>Falta que se llenen de contenido para ver que maravillas nos traerán y espero poder darme el tiempo de colaborar. Además quedé enamorado del pie de página :)</p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/rediseno-de-indieweblogs/2010/04/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Autobahn: una abstracción para bases de datos</title>
		<link>http://juanbenavides.info/autobahn-una-abstraccion-para-bases-de-datos/2010/01/</link>
		<comments>http://juanbenavides.info/autobahn-una-abstraccion-para-bases-de-datos/2010/01/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 11:54:20 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[autobahn]]></category>
		<category><![CDATA[microbus]]></category>
		<category><![CDATA[orm]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=292</guid>
		<description><![CDATA[Un proyecto que ya tenía en mente desde hace un buen tiempo, era hacer un nano-framework. CakePHP es muy bueno, pero a veces es simplemente demasiado para lo que paga el cliente. El punto es que nunca llegué a nada concreto y Armando se me adelanto espectacularmente con Microbus :D Microbus es mucho mejor de [...]]]></description>
			<content:encoded><![CDATA[<p>Un proyecto que ya tenía en mente desde hace un buen tiempo, era hacer un nano-framework. <a href="http://cakephp.org/">CakePHP</a> es muy bueno, pero a veces es simplemente <strong>demasiado</strong> para lo que paga el cliente. El punto es que nunca llegué a nada concreto y <a href="http://dupermag.com/">Armando</a> se me adelanto espectacularmente con <a href="http://github.com/soska/microbus">Microbus</a> :D</p>
<p><a href="http://github.com/soska/microbus">Microbus</a> es mucho mejor de lo que yo tenía en mente, así que prefiero meterle mano a este que reescribir la rueda -como si no fuera suficiente. El único detalle es que le faltaba un modelo de base de datos. <a href="http://github.com/Linnk/Autobahn">Autobahn</a> fue el resultado que por algunas razones, no pude liberar antes. Falta mucho todavía, pero así es como funciona:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">require</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'lib/autobahn.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$library</span> <span style="color: #339933;">=</span> Autobahn<span style="color: #339933;">::</span><span style="color: #004000;">getConnection</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//	Classic SQL</span>
<span style="color: #000088;">$authors</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$library</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SELECT Author.id, Author.firstname FROM authors Author'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
&nbsp;
<span style="color: #666666; font-style: italic;">//	Find (like Select)</span>
<span style="color: #000088;">$book</span>	  <span style="color: #339933;">=</span> <span style="color: #000088;">$library</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">findBooksById</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$books</span>	  <span style="color: #339933;">=</span> <span style="color: #000088;">$library</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">findAllBooks</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$favorites</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$library</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">findAllBooksById</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//	Insert</span>
<span style="color: #000088;">$newBook</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'author_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">12</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'title'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Frameworks for PHP'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$library</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">insertBooks</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$newBook</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//	Update</span>
<span style="color: #000088;">$values</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Frameworks for PHP 5'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'description'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'...'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$conditions</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$library</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">updateBooks</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$values</span><span style="color: #339933;">,</span> <span style="color: #000088;">$conditions</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//	Delete</span>
<span style="color: #000088;">$library</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">deleteBooksById</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">11</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">12</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//	Show stats of all queries :) ... only for CLI mode, for now.</span>
<span style="color: #000088;">$library</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">showLogs</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Lo que sigue es mejorar el generador de consultas, el cual está mal hecho y repartido entre el objeto que abstrae MySQL y el objeto abstracto administrador. Una parte del generador se hace en el objeto abstracto y eso está mal, según mi teoría. SQL debería ser un estándar universal -como el HTML/CSS, ja- pero en la práctica no lo es del todo, siempre hay mínimas diferencias y debo de cuidar este hecho.</p>
<p>Una vez hecho lo anterior, el siguiente paso es diseñar el modelo padre, del cual se van a instanciar los modelos creados para la aplicación. Aquí seré cuidadoso, porque podría cometer el error de crecer demasiado el código, cuando la idea es mantenerlo corto y simple. El objetivo a lograr sería que pudiera manejar la base de datos de la siguiente manera:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">require</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'lib/autobahn.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">require</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'model/book.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$book</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Book<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$book</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">author_id</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">12</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$book</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Frameworks for PHP'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$book</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">save</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$book</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">showLogs</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Entre algunas otras ideas por ahí que rondan mi cabeza, esto es más o menos el resultado final que me gustaría. Pero siempre con el propósito de hacerlo corto y simple, por eficiencia y portabilidad principalmente. Ojalá a alguien le sirva :)</p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/autobahn-una-abstraccion-para-bases-de-datos/2010/01/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Buscar y reemplazar texto en muchos archivos</title>
		<link>http://juanbenavides.info/buscar-y-reemplazar-texto-en-muchos-archivos/2009/12/</link>
		<comments>http://juanbenavides.info/buscar-y-reemplazar-texto-en-muchos-archivos/2009/12/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 11:47:13 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=257</guid>
		<description><![CDATA[Hay muchas formas de hacerlo y seguramente muchos IDEs ya lo hacen. Creo que Textmate, Notepad++ y Textedit son los únicos editores de código ligeros que lo hacen. Terrible que uno sea solo para OS X y los otros dos para Windows. La gente asume que todos los linuxeros usamos la consola y las expresiones [...]]]></description>
			<content:encoded><![CDATA[<p>Hay muchas formas de hacerlo y seguramente muchos IDEs ya lo hacen. Creo que Textmate, Notepad++ y Textedit son los únicos editores de código ligeros que lo hacen. Terrible que uno sea solo para OS X y los otros dos para Windows. La gente asume que todos los <em>linuxeros</em> usamos la consola y las expresiones regulares para todo.</p>
<p>Bueno, quizás lo primero si. Pero usar expresiones regulares siempre ha sido un dolor de cabeza para mi (no se como pasé Compiladores I). En busca de una solución express, tiré código a lo idiota y he aquí la idiotez llamada <strong>replace.php</strong> que me ha sacado de apuro:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
	<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'argv'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$find</span> <span style="color: #339933;">=</span>		<span style="color: #0000ff;">'&lt;td class=&quot;pie&quot;&gt;&lt;a href=&quot;#&quot;&gt;Políticas de privacidad&lt;/a&gt; &lt;a href=&quot;#&quot;&gt;Vigencia del catalogo&lt;/a&gt; &lt;a href=&quot;#&quot;&gt;Mapa del sitio&lt;/a&gt;&lt;/td&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$replace</span> <span style="color: #339933;">=</span>	<span style="color: #0000ff;">'&lt;td class=&quot;pie&quot;&gt;&lt;a href=&quot;/pagina/politicas-privacidad&quot;&gt;Políticas de privacidad&lt;/a&gt; &lt;a href=&quot;/pagina/terminos-condiciones&quot;&gt;Terminos y condiciones&lt;/a&gt;&lt;/td&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$new_data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$find</span><span style="color: #339933;">,</span><span style="color: #000088;">$replace</span><span style="color: #339933;">,</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$new_data</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'argv'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; &lt;-- Modificado<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'argv'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #000088;">$new_data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Se ejecuta desde consola para <strong>más practicidad</strong>, si, lo he dicho :D</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">find</span> .<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #660033;">-name</span> <span style="color: #000000; font-weight: bold;">*</span>.ctp <span style="color: #660033;">-exec</span> php replace.php <span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span> \;</pre></div></div>

<p>El comando <code>find</code> buscará en el directorio <code>./</code> todos los archivos que terminen con la extensión <code>.ctp</code> y ejecutará mi script mandandole como argumento la ruta del archivo encontrado. El proceso es recursivo, por lo que si encuentra un archivo en varios subdirectorios la ejecución manualmente se traduciría en algo como <code>php replace.php ./views/pages/politicas.ctp</code></p>
<p>La ventaja de usarlo en consola es que podemos personalizar la elección de los archivos a modificar con una sencilla expresión regular, que se podría hacer más poderosa para un filtro más avanzado de archivos, pero igual yo he sido feliz concatenando la instrucción dos veces en una misma linea, así:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">find</span> .<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #660033;">-name</span> <span style="color: #000000; font-weight: bold;">*</span>.ctp <span style="color: #660033;">-exec</span> php replace.php <span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span> \; <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">find</span> .<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #660033;">-name</span> <span style="color: #000000; font-weight: bold;">*</span>.html <span style="color: #660033;">-exec</span> php replace.php <span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span> \;
.<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>layouts<span style="color: #000000; font-weight: bold;">/</span>default.ctp <span style="color: #000000; font-weight: bold;">&lt;</span>-- Modificado
.<span style="color: #000000; font-weight: bold;">/</span>webroot<span style="color: #000000; font-weight: bold;">/</span>formulario.html <span style="color: #000000; font-weight: bold;">&lt;</span>-- Modificado
.<span style="color: #000000; font-weight: bold;">/</span>webroot<span style="color: #000000; font-weight: bold;">/</span>viajes.html <span style="color: #000000; font-weight: bold;">&lt;</span>-- Modificado
.<span style="color: #000000; font-weight: bold;">/</span>webroot<span style="color: #000000; font-weight: bold;">/</span>hacemos.html <span style="color: #000000; font-weight: bold;">&lt;</span>-- Modificado
.<span style="color: #000000; font-weight: bold;">/</span>webroot<span style="color: #000000; font-weight: bold;">/</span>contacto.html <span style="color: #000000; font-weight: bold;">&lt;</span>-- Modificado
.<span style="color: #000000; font-weight: bold;">/</span>webroot<span style="color: #000000; font-weight: bold;">/</span>static.catalogo.html <span style="color: #000000; font-weight: bold;">&lt;</span>-- Modificado
.<span style="color: #000000; font-weight: bold;">/</span>webroot<span style="color: #000000; font-weight: bold;">/</span>estamos.html <span style="color: #000000; font-weight: bold;">&lt;</span>-- Modificado
.<span style="color: #000000; font-weight: bold;">/</span>webroot<span style="color: #000000; font-weight: bold;">/</span>quienes.html <span style="color: #000000; font-weight: bold;">&lt;</span>-- Modificado
.<span style="color: #000000; font-weight: bold;">/</span>webroot<span style="color: #000000; font-weight: bold;">/</span>nuevos.html <span style="color: #000000; font-weight: bold;">&lt;</span>-- Modificado
.<span style="color: #000000; font-weight: bold;">/</span>webroot<span style="color: #000000; font-weight: bold;">/</span>beneficios.html <span style="color: #000000; font-weight: bold;">&lt;</span>-- Modificado
.<span style="color: #000000; font-weight: bold;">/</span>webroot<span style="color: #000000; font-weight: bold;">/</span>gracias.html <span style="color: #000000; font-weight: bold;">&lt;</span>-- Modificado
.<span style="color: #000000; font-weight: bold;">/</span>webroot<span style="color: #000000; font-weight: bold;">/</span>principal.html <span style="color: #000000; font-weight: bold;">&lt;</span>-- Modificado
.<span style="color: #000000; font-weight: bold;">/</span>webroot<span style="color: #000000; font-weight: bold;">/</span>unete.html <span style="color: #000000; font-weight: bold;">&lt;</span>-- Modificado
.<span style="color: #000000; font-weight: bold;">/</span>webroot<span style="color: #000000; font-weight: bold;">/</span>negocio.html <span style="color: #000000; font-weight: bold;">&lt;</span>-- Modificado
$</pre></div></div>

<p>Algo bruto, pero funciona incluso con mucho texto por buscar y mucho por reemplazar. La he usado tanto que decidí dedicarle este pequeño apunte, quizás a alguien más le puede servir.</p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/buscar-y-reemplazar-texto-en-muchos-archivos/2009/12/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fondos múltiples animados con CSS y Mootools</title>
		<link>http://juanbenavides.info/fondos-multiples-animados-con-css-y-mootools/2009/12/</link>
		<comments>http://juanbenavides.info/fondos-multiples-animados-con-css-y-mootools/2009/12/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 07:13:59 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[animaciones]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=252</guid>
		<description><![CDATA[Visitando el sitio de Code and Theory quedé algo asombrado de lo que habían hecho con el encabezado. Una animación muy sutil, pero da un aire muy elegante al sitio. Así que me puse a tirar un poco de código para probar el rendimiento de una animación de ese tamaño -verán, yo la quería de [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://juanbenavides.info/wp-content/uploads/2009/12/letsrock.jpg" alt="" title="letsrock" width="700" height="418" class="alignnone size-full wp-image-253" /></p>
<p>Visitando el sitio de <a href="http://www.codeandtheory.com/">Code and Theory</a> quedé algo asombrado de lo que habían hecho con el encabezado. Una animación muy sutil, pero da un aire muy elegante al sitio. Así que me puse a tirar un poco de código para probar el rendimiento de una animación de ese tamaño -verán, yo la quería de fondo completo :D</p>
<p>He aquí el resultado: <a href="http://juanbenavides.info/experimentos/fondos-multiples/">demo</a>.</p>
<p>Evidentemente le hace falta detector de imagenes cargadas antes de cada animación. Lo resolví temporalmente con un hack pero solo probado en Firefox, en Opera hay que esperar la ronda de 18 segundos para que las imagenes queden en caché y la animación sea fluida.</p>
<p>Estoy en proceso de rediseñar algunos sitios y este es un efecto que quiero introducir más adelante, así que era necesario jugar un poco por ahora. El código completo <a href="http://juanbenavides.info/experimentos/fondos-multiples.rar">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/fondos-multiples-animados-con-css-y-mootools/2009/12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recuperando la contraseña de WordPress 2.8.x</title>
		<link>http://juanbenavides.info/recuperando-la-contrasena-de-wordpress-2-8-x/2009/08/</link>
		<comments>http://juanbenavides.info/recuperando-la-contrasena-de-wordpress-2-8-x/2009/08/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 06:04:16 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=199</guid>
		<description><![CDATA[Vale, no soy ningún experto en WordPress y no sabía hasta hace un par de minutos que existía un script de emergencia a prueba de tontos para recuperar la contraseña de administrador de tu WordPress. El miércoles, MetropoliBlog fue víctima de la terrible vulnerabilidad de la versión 2.8.3. La culpa la tenemos nosotros que lo [...]]]></description>
			<content:encoded><![CDATA[<p>Vale, no soy ningún experto en WordPress y no sabía hasta hace un par de minutos que existía un <a href="http://www.village-idiot.org/archives/2007/05/22/wp-emergency-password-recovery/">script de emergencia <del datetime="2009-08-14T05:09:54+00:00">a prueba de tontos</del> para recuperar la contraseña</a> de administrador de tu WordPress.</p>
<p>El miércoles, <a href="http://metropoliblog.com/">MetropoliBlog</a> fue víctima de la <a href="http://lists.grok.org.uk/pipermail/full-disclosure/2009-August/070139.html">terrible vulnerabilidad de la versión 2.8.3</a>. La culpa la tenemos nosotros que lo sabíamos con anterioridad y no lo corregimos a tiempo. Para entonces ya estaba disponible la actualización 2.8.4, pero alguien ya nos había jugado <em>mala-leche</em>. A toda velocidad y un poco nervioso de que algo malo pase, implementé lo primero que se me ocurrió:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">require</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'wp-includes/class-phpass.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$wp_hasher</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> PasswordHash<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$hashPassword</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wp_hasher</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">HashPassword</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'NUEVA_CLAVE'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #006699; font-weight: bold;">$hashPassword</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>El script lo guardé donde WordPress y lo ejecuté desde consola: <code>php reset-password.php</code> o desde el navegador. El resultado es un <em>Hash</em> listo para guardar en la base de datos de WordPress. Funcionó, recuperamos WordPress y actualizamos.</p>
<p>Resulta que con éstas nuevas versiones (no se desde cual exactamente) las contraseñas no son encriptadas simplemente con MD5, sino que tiene un par de arreglos para hacer más seguro el sistema. De hecho, si ejecutas <code>reset-password.php</code> varias veces, siempre te dará un Hash diferente. Es por eso que ya no se puede hacer solo un UPDATE con MD5 a la base de datos, pero de esta forma sencilla obtenemos el Hash que si podemos guardar en la base de datos.</p>
<p>Ésta fue mi manera, como he dicho hay <a href="http://www.village-idiot.org/archives/2007/05/22/wp-emergency-password-recovery/">mejores formas de recuperar la contraseña</a>. En cualquiera de los casos necesitas mínimo el acceso FTP y a la base de datos (phpMyAdmin por ejemplo).</p>
<p><strong>Moraleja:</strong> Que no te dé <abbr title="Actualizar siempre a la última versión. Espera un tiempo para que corrijan cualquier vulnerabilidad grave">versionítis</abbr>, pero si sabes de un problema grave, actualiza lo más rápido que puedas.</p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/recuperando-la-contrasena-de-wordpress-2-8-x/2009/08/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Referencia Rápida de Mootools 1.2.x</title>
		<link>http://juanbenavides.info/referencia-rapida-de-mootools-12x/2009/04/</link>
		<comments>http://juanbenavides.info/referencia-rapida-de-mootools-12x/2009/04/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 22:03:34 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=177</guid>
		<description><![CDATA[Leyendo varios blogs he acabado en uno muy bueno con 14 hojas de referencia rápida para diseño web, de entre las que destacan esta hoja de CSS y la hoja de Mootools 2.1. En cualquier caso recomiendo que, si estas empezando con Mootools, te bajes una versión del framework sin compresión y con comentarios. No [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://juanbenavides.info/wp-content/uploads/2009/04/mootools-cheat-sheet-demo.jpg" alt="mootools-cheat-sheet-demo" title="mootools-cheat-sheet-demo" width="700" height="300" class="alignnone size-full wp-image-178" /></p>
<p>Leyendo varios blogs he acabado en uno muy bueno con <a href="http://delimitdesign.com/design/14-incredibly-useful-web-design-cheat-sheets/">14 hojas de referencia rápida para diseño web</a>, de entre las que destacan <a href="http://www.webtutoriales.com/tutoriales/html-css/hoja-referencia-css.26.html">esta hoja de CSS</a> y <a href="http://mediavrog.net/blog/2008/06/11/mootools/mootools-12-cheat-sheet/">la hoja de Mootools 2.1</a>.</p>
<p>En cualquier caso recomiendo que, si estas empezando con <a href="http://mootools.net/">Mootools</a>, te bajes una versión del framework sin compresión y con comentarios. <strong>No le tengas miedo al código del framework</strong>, está tan bien escrito que es como leer poesía en la programación. Gracias a sus estandares, podemos consultar el código -que es perfectamente entendible- y aprender mucho para desarrollar nuestras aplicaciones.</p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/referencia-rapida-de-mootools-12x/2009/04/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La difusa linea entre diseñador web y programador web</title>
		<link>http://juanbenavides.info/la-difusa-linea-entre-disenador-web-y-programador-web/2009/03/</link>
		<comments>http://juanbenavides.info/la-difusa-linea-entre-disenador-web-y-programador-web/2009/03/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 09:09:13 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[desarrollador web]]></category>
		<category><![CDATA[perfil]]></category>
		<category><![CDATA[profesional]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=164</guid>
		<description><![CDATA[He escrito al respecto sobre éste tema, pero creo que lo abordé al revéz. Primero deberíamos separar los roles en el desarrollo web e identificar al profesional que ¿debería? cubrirlos. Como le comentaba a Luis Alarcón vía email, de entrada lo más obvio para mi es: XHTML y CSS no pertenecen a la programación, XHTML [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://juanbenavides.info/2009/02/el-desarrollo-web-y-los-desarrolladores/">He escrito al respecto sobre éste tema</a>, pero creo que lo abordé al revéz. Primero deberíamos separar los roles en el desarrollo web e identificar al profesional que ¿debería? cubrirlos. Como le comentaba a <a href="http://www.luisalarcon.com/blog/">Luis Alarcón</a> vía email, de entrada lo más obvio para mi es:</p>
<ul>
<li>XHTML y CSS no pertenecen a la programación, XHTML es la estructura y CSS el diseño.</li>
<li>Javascript es un lenguaje de programación y AJAX es solo una técnica.</li>
<li>&#8220;Diseño de plantillas&#8221; para CMS es diseño. Involucra saber código de un lenguaje (PHP generalmente), pero no deja de ser &#8220;diseño&#8221;.</li>
<li>Programar alguna funcionalidad en estas plantillas, entonces si sería programación.</li>
<li>Dreamweaver y editores de código WYSIWYG son para diseñar, aunque se puede programar con ellos, pero no tiene mucho sentido.</li>
<li>Flash puede ser tanto diseño como programación, aunque un programador preferirá programar en Flex (pues para eso es) y Flash queda más como herramienta de diseño.</li>
<li>&#8220;Propiedad intelectual&#8221; ¿?. Lo c<a href="http://www.luisalarcon.com/blog/?p=1526">omentó Luis Alarcón en su post del &#8220;diserrollador&#8221;</a>, yo creo que esto es tema de abogados y no más. Debemos conocer las leyes, pero no si me enfoco puramente a un perfil técnico, no lo incluiría.</li>
</ul>
<p><a href="http://es.wikipedia.org/wiki/Usabilidad">Usabilidad</a>, accesibilidad, diseño de interfaces&#8230; son conceptos que <a href="http://es.wikipedia.org/wiki/Usabilidad#Reconocimiento_en_la_industria_del_software">se introdujeron</a> por medio de la Ingeniería de software, por lo que sus raíces están en la programación (el comportamiento). Sin embargo en el desarrollo web, un diseñador tambien participa muchísimo durante la creación del sitio, ya que los diseños en la web están intimamente relacionados con aspectos del comportamiento. Paradigmas de la programación como <a href="http://en.wikipedia.org/wiki/Model-view-controller">MVC</a> solucionan mucho de estos problemas, pero no todos.</p>
<p>Hay otras cuestiones más complicadas, por ejemplo: estrictamente hablando XHTML/CSS son aspectos técnicos del diseño, sin embargo, la programación de interfaces con Javascript involucra XHTML/CSS profundamente. Por otro lado, si el diseñador quiere hacerlas deberá aprender Javascript, y PHP/XML si quiere implementar AJAX.</p>
<p>Volviendo a una visión estricta: El diseñador se encarga de hacer la estructura y el diseño, el programador se encarga del comportamiento, pero ambos tienen que manejar XHTML para sus labores. Entonces, ¿el <a href="http://en.wikipedia.org/wiki/Search_engine_optimization">SEO</a> pertenece a&#8230;? Por más que le doy vueltas, sigo creyendo que a ninguno de los dos, es un <strong>aspecto único y propio del desarrollo web</strong>.</p>
<p>De hecho, creo que por eso la linea es tan difusa, porque <strong>el desarrollo web</strong> es completamente otro paradigma.</p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/la-difusa-linea-entre-disenador-web-y-programador-web/2009/03/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interceptando la salida accidental del usuario</title>
		<link>http://juanbenavides.info/interceptando-la-salida-accidental-del-usuario/2009/02/</link>
		<comments>http://juanbenavides.info/interceptando-la-salida-accidental-del-usuario/2009/02/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 15:39:14 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=143</guid>
		<description><![CDATA[El problema (y lo detecte gracias a mi madre :P), es, ¿y que si el usuario presiona F5 cuando va a la mitad de un enorme formulario? No es culpa del usuario, pero incluso cuando me pasa a mi, me da tanto coraje perder lo que había llenado por tan tremenda tontería, que se me [...]]]></description>
			<content:encoded><![CDATA[<p>El problema (y lo detecte gracias a mi madre :P), es, ¿y que si el usuario presiona F5 cuando va a la mitad de un enorme formulario? No es culpa del usuario, pero incluso cuando me pasa a mi, me da tanto coraje perder lo que había llenado por tan tremenda tontería, que se me quitan las ganas de volverlo a intentar.</p>
<p>No queda opción, hay que interceptar cuando el usuario presiona ciertas teclas en ciertos lugares. Por suerte, fue muy fácil hacerlo. Para <strong>Mootools</strong> el script sería así:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">window.<span style="color: #660066;">addEvent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'domready'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>$$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div.no-f5'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		document.<span style="color: #660066;">addEvent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'keydown'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #003366; font-weight: bold;">var</span> tag <span style="color: #339933;">=</span> event.<span style="color: #660066;">target</span>.<span style="color: #660066;">tagName</span>.<span style="color: #660066;">toLowerCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>event.<span style="color: #660066;">key</span><span style="color: #339933;">==</span><span style="color: #3366CC;">'f5'</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>event.<span style="color: #660066;">key</span><span style="color: #339933;">==</span><span style="color: #3366CC;">'backspace'</span> <span style="color: #339933;">&amp;&amp;</span> tag<span style="color: #339933;">!=</span><span style="color: #3366CC;">'input'</span> <span style="color: #339933;">&amp;&amp;</span> tag<span style="color: #339933;">!=</span><span style="color: #3366CC;">'textarea'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
				event.<span style="color: #000066;">stop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Revisamos si existe un <code>div.no-f5</code>, que no es más que una <em>clase bandera</em>, para saber si en esa pantalla necesitaré del script. Si procede, creo el evento <em>keydown</em> para el documento. Cuando el evento suceda, comprobamos a que elemento se está <em>apuntando</em>, pues no queremos interceptar el <em>backspace</em> cuando el usuario esta escribiendo en algún campo de texto, pero si en cualquier otro caso pues lo regresaría a la pantalla anterior. La tecla <em>F5</em> la interceptamos en todo momento.</p>
<p>Al mismo tiempo, descubrí (todo por no leer en su momento), que <em>Mootols</em> no extiende el objeto <code>event.target</code> con <code>$</code>, por razones de rendimiento. Así que si los chicos de Moo tuvieron buenas razones, decidí no extenderlo aunque hacer un <code>$(event.target).get('tag')</code> era muy tentador&#8230; pero hacerlo con Javascript nativo es muy fácil y <em>cross browser</em>.</p>
<p>Tanto el problema como la solución son detalles muy simples y normalmente subestimadas, pero seguro salvas a algún usuario de que se arranque el cabello mientras llenaba un enorme formulario.</p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/interceptando-la-salida-accidental-del-usuario/2009/02/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitto, un framework PHP en un twit</title>
		<link>http://juanbenavides.info/twitto-un-framework-php-en-un-twit/2009/01/</link>
		<comments>http://juanbenavides.info/twitto-un-framework-php-en-un-twit/2009/01/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 23:34:36 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[twitto]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=136</guid>
		<description><![CDATA[Twitto es el web framework para PHP más pequeño hasta ahora, escrito en menos de 140 caraceteres por Fabien Potencier de Symfony. El framework a continuación: require __DIR__.'/c.php'; if &#40;!is_callable&#40;$c = @$_GET&#91;'c'&#93; ?: function&#40;&#41; &#123; echo 'Woah!'; &#125;&#41;&#41; throw new Exception&#40;'Error'&#41;; $c&#40;&#41;; Evidentemente es un framework experimental y no se recomienda para producción. El framework [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://twitto.org/">Twitto</a> es el web framework para PHP más pequeño hasta ahora, escrito en menos de 140 caraceteres por <a href="http://www.symfony-project.org/">Fabien Potencier</a> de <a href="http://www.symfony-project.org/">Symfony</a>. El framework a continuación:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">require</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/c.php'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_callable</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$c</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'c'</span><span style="color: #009900;">&#93;</span> ?<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Woah!'</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Error'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$c</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Evidentemente es un framework experimental y no se recomienda para producción. El framework funciona únicamente con PHP 5.3, ya que incluye algunas de sus novedades:</p>
<ul>
<li>La constante <code>__DIR__</code></li>
<li>El operador <code>?:</code></li>
<li>Funciones anonimas</li>
</ul>
<p>Vía | <a href="http://www.symfony.es/2009/01/11/twitto-el-framework-php-mas-pequeno/">Symfony.es: Twitto, el framework PHP más pequeño</a></p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/twitto-un-framework-php-en-un-twit/2009/01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Lo más bonito que podemos experimentar es&#8230;&#8221;</title>
		<link>http://juanbenavides.info/lo-mas-bonito-que-podemos-experimentar-es/2009/01/</link>
		<comments>http://juanbenavides.info/lo-mas-bonito-que-podemos-experimentar-es/2009/01/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 00:44:30 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Anécdotas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[basic]]></category>
		<category><![CDATA[recuentos]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=125</guid>
		<description><![CDATA[&#8230; el misterio. Es la fuente de toda arte verdadera y de toda ciencia. Aquél a quien sea extraña esta emoción, aquel que no pueda detenerse a maravillarse y permanecer absorto de asombro, es tan bueno como un muerto: sus ojos están cerrados. [Albert Einstein] El primer aparato electrónico que desarmé fué una pequeña televisión, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://juanbenavides.info/wp-content/uploads/2009/01/einst_7.jpg" alt="einst_7" title="einst_7" class="alignnone size-full wp-image-126" /> <img src="http://juanbenavides.info/wp-content/uploads/2009/01/einst_fid.jpg" alt="einst_fid" title="einst_fid" width="334" height="313" class="alignnone size-full wp-image-130" /></p>
<blockquote><p>&#8230; el misterio. Es la fuente de toda arte verdadera y de toda ciencia. Aquél a quien sea extraña esta emoción, aquel que no pueda detenerse a maravillarse y permanecer absorto de asombro, es tan bueno como un muerto: sus ojos están cerrados. <em>[Albert Einstein]</em></p></blockquote>
<p>El primer aparato electrónico que desarmé fué una pequeña televisión, tenía como unos 5 años aproximadamente. Cuando descubrí que era fácil hacerlo, mis juguetes fueron los siguientes :P </p>
<p>Mi hermano y yo desarmabamos los que tenían &#8220;lucecitas&#8221; y se las poníamos a los juguetes que no tenían. Me parecía impresionante que las partes moviles de algunos fueran tan pequeños y nos gustaba por reinvetar los juguetes. Tambien abrimos telefonos, radiograbadoras, controles remotos. Hasta que en 1997, llegó mi primer computador: Un flamante 486 DX2 a 80 Mhz, con 16 Mb de RAM y un disco duro de 128 Mb.</p>
<p>El misterio por saber como funciona me invadió de inmediato, ¡me gritaba! ¡me llamaba fuerte! Debía saber. Investigando un poco (hechando a perder tambien), conocí los procesos por lotes *.bat. Despues descubrí un programa <strong>QBasic</strong>, que según la ayuda podía programar con él, pero al abrir los *.exe no entendía nada. Una prima que tomó un curso barato de Basic, me explicó lo fundamental: PRINT, INPUT e IF. Más adelante descubrí que QBasic tenía un glosario de los comandos, con lo que pude seguir aprendiendo yo solo. Aprendí a hacer juegos tontos, pero no era suficiente para mi, yo quería hacer un <strong>Windows 3.11</strong>, al menos un <a href="http://en.wikipedia.org/wiki/Doom_(video_game)">Doom</a>.</p>
<p>Poco despues, durante unas vacaciones en casa de mis abuelos, buscando algo interesante en los libreros, me encontré con un &#8220;Manual de programación para lenguaje Basic&#8221;. No se como, por que mis abuelos no tienen relación con la informática, pero amaban los libros y no le negaban casa a ninguno. Pedí prestado el libro, mis abuelos me lo regalaron y pasé el resto de las vacaciones leyendolo.</p>
<p>En ese entonces los tamagotchis estaban de moda, mis primos estaban asombrados con estos, pero yo creía que no eran muy dificiles de hacer. Al escuchar esto de mi, creyeron que tenía envidia. Me enfureció eso y sin estar tan seguro, me propuse callarles la boca a todos <strong>programando mi propio tamagotchi</strong>. No recuerdo cuanto tardé, pero fueron más de 500 lineas de instrucciones en Basic las que dieron vida a un simple tamagotchi, <em>un circulo grande con dos circulos por ojos y un rectangulo por boca</em>, era la mascota y hacía lo que todo tamagotchi solía hacer: se enfermaba, pedía de comer, queria jugar, dormía y moría si no lo cuidabas. ¡Nada mal para un niño de 10 años! :P</p>
<p>Recuerdo que me decía a mi mismo, que lo único que me faltaba era convertir ese código en un *.exe y meterlo en un <em>chip</em>. Quizás fué eso por lo que decidí estudiar programación y electrónica.</p>
<p>Ese año entre a la secundaria y un compañero que tambien sabía algo de Basic me contó que con <strong>Turbo Basic</strong> podía convertir mis programas en archivos *.exe. Pero ambos caímos ante el <em>desmadre</em> de la secundaria y no volví a programar hasta años despues&#8230;</p>
<p>&#8230; lamentablemente, perdí el código del tamagotchi :(</p>
<p>Cita que inspiró este post, vía | <a href="http://www.maikelnai.es/2009/01/09/citas-de-albert-einstein-1879-1955/">Maikelnai: Citas de Albert Einstein (1879-1955)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/lo-mas-bonito-que-podemos-experimentar-es/2009/01/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

