<?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</title>
	<atom:link href="http://juanbenavides.info/feed/" rel="self" type="application/rss+xml" />
	<link>http://juanbenavides.info</link>
	<description>Anotaciones de un Geek</description>
	<lastBuildDate>Thu, 14 Jan 2010 11:59:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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 lo [...]]]></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"><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
</pre></td><td class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #b1b100;">require</span><span style="color: #009900;">&#40;</span><span style="">'lib/autobahn.php'</span><span style="color: #009900;">&#41;</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="">'default'</span><span style="color: #009900;">&#41;</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="">'SELECT Author.id, Author.firstname FROM authors Author'</span><span style="color: #009900;">&#41;</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: #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: #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>;
&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="">'id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="">'author_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">12</span><span style="color: #339933;">,</span> <span style="">'title'</span> <span style="color: #339933;">=&gt;</span> <span style="">'Frameworks for PHP'</span><span style="color: #009900;">&#41;</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>;
&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="">'title'</span> <span style="color: #339933;">=&gt;</span> <span style="">'Frameworks for PHP 5'</span><span style="color: #339933;">,</span> <span style="">'description'</span> <span style="color: #339933;">=&gt;</span> <span style="">'...'</span><span style="color: #009900;">&#41;</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="">'id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</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>;
&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>;
&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>;</pre></td></tr></table></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"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #b1b100;">require</span><span style="color: #009900;">&#40;</span><span style="">'lib/autobahn.php'</span><span style="color: #009900;">&#41;</span>;
<span style="color: #b1b100;">require</span><span style="color: #009900;">&#40;</span><span style="">'model/book.php'</span><span style="color: #009900;">&#41;</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: #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: #000088;">$book</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span> <span style="color: #339933;">=</span> <span style="">'Frameworks for PHP'</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>;
&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>;</pre></td></tr></table></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>0</slash:comments>
		</item>
		<item>
		<title>El contenido está antes que el diseño</title>
		<link>http://juanbenavides.info/el-contenido-esta-antes-que-el-diseno/2010/01/</link>
		<comments>http://juanbenavides.info/el-contenido-esta-antes-que-el-diseno/2010/01/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 04:52:24 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[contenido]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=288</guid>
		<description><![CDATA[Contenido precede al diseño. Diseño en la ausencia de contenido no es diseño, es decoración.
Jeffrey Zeldman
Evidente para algunos de nosotros, ridículo para la gran mayoría de las personas e incluso diseñadores. La frase me recuerda aquella vez cuando el diseñador de Google renunció por que &#8220;le pedían justificar cada píxel que movía&#8221;, y más de [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Contenido precede al diseño. Diseño en la ausencia de contenido no es diseño, es decoración.</p></blockquote>
<p style="text-align:right"><a href="http://twitter.com/zeldman/statuses/804159148">Jeffrey Zeldman</a></p>
<p>Evidente para algunos de nosotros, ridículo para la gran mayoría de las personas e incluso diseñadores. La frase me recuerda aquella vez cuando el diseñador de Google renunció por que &#8220;le pedían justificar cada píxel que movía&#8221;, y más de un diseñador conocido se ofendió. Una pena.</p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/el-contenido-esta-antes-que-el-diseno/2010/01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Herramienta c99 para Newbies</title>
		<link>http://juanbenavides.info/herramienta-c99-para-newbies/2010/01/</link>
		<comments>http://juanbenavides.info/herramienta-c99-para-newbies/2010/01/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 23:59:18 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[c99]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=281</guid>
		<description><![CDATA[
&#8220;La seguridad de un sistema, es tan fuerte como la de su eslabón más débil.&#8221;
Esta herramienta fue la que nos colaron y con la que nos hicieron travesuras en año nuevo. La subo por que merece la pena instalarla en los servidores de cada uno y ver que tanto daño puede hacer o que tan [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://juanbenavides.info/wp-content/uploads/2010/01/screenshot1.png" alt="" title="c99" width="700" height="450" class="alignnone size-full wp-image-282" /></p>
<blockquote><p>&#8220;La seguridad de un sistema, es tan fuerte como la de su eslabón más débil.&#8221;</p></blockquote>
<p>Esta herramienta fue la que nos colaron y con la que <a href="http://juanbenavides.info/%c2%a1feliz-ano-nuevo-2010/2010/01/">nos hicieron travesuras en año nuevo</a>. La subo por que merece la pena instalarla en los servidores de cada uno y ver que tanto daño puede hacer o que tan inseguro es nuestro servidor.</p>
<p>La pueden descargar -junto con otras- de aquí: <a href='http://juanbenavides.info/wp-content/uploads/2010/01/tools-for-newbies.tar.gz'>c99</a></p>
<p>La herramienta se llama <code>ajnnk.php</code>, que aparentemente es el seudónimo de quien nos la dejó, estaba encriptada pero igual subí una versión legible para que se pueda analizar, con fines educativos obviamente :P Básicamente, son una recopilación de comandos y pequeños algoritmos en PHP que te permiten explorar y atacar el sistema donde está instalado. Es una herramienta para newbies, pero algunos de los errores que cometimos fueron bastante ridículos. El consuelo es que así se aprende.</p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/herramienta-c99-para-newbies/2010/01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oídos sordos, dedos lastimados y bugs de Wordpress</title>
		<link>http://juanbenavides.info/oidos-sordos-dedos-lastimados-y-bugs-de-wordpress/2010/01/</link>
		<comments>http://juanbenavides.info/oidos-sordos-dedos-lastimados-y-bugs-de-wordpress/2010/01/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 14:00:22 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Musica]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[blues]]></category>
		<category><![CDATA[the fall of troy]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=275</guid>
		<description><![CDATA[
Wordpress 2.9 tiene esta pequeña lista de bugs. Entre los que se encuentran, un fallo crítico en el componente Cron para los posts a futuro y del que me habían avisado los chicos de IndieWeblogs. Pues nada que, debido a los recientes eventos la paranoia nos volvió por un momento, pero por suerte esta ves [...]]]></description>
			<content:encoded><![CDATA[<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/DOatmk4obzI&#038;hl=es_MX&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/DOatmk4obzI&#038;hl=es_MX&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p><a href="http://core.trac.wordpress.org/query?status=closed&#038;group=resolution&#038;order=priority&#038;milestone=2.9.1&#038;resolution=fixed">Wordpress 2.9 tiene esta pequeña lista de bugs</a>. Entre los que se encuentran, un fallo crítico en el componente Cron para los posts a futuro y del que me habían avisado los chicos de <a href="http://indieweblogs.com">IndieWeblogs</a>. Pues nada que, debido a los recientes eventos la paranoia nos volvió por un momento, pero por suerte esta ves fue lo cotidiano.</p>
<p>El video es para festejarme que despues de muchísimo sin tocar, pude sacar al fin esa linda canción de mi banda favorita estos días <strong>The Fall of Troy</strong>, llamada <strong>Caught up</strong>. Dice mi hermano que es de las pocas bandas -relativamente- nuevas que, manteniendo su estilo, puede hacer <em>blues</em>. Estoy de acuerdo, aparte de Dragonforce no conozco otra banda que toque en esa hermosa escala -y sin hacerlo a 1000 mil notas por segundo.</p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/oidos-sordos-dedos-lastimados-y-bugs-de-wordpress/2010/01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¡Feliz año nuevo 2010!</title>
		<link>http://juanbenavides.info/%c2%a1feliz-ano-nuevo-2010/2010/01/</link>
		<comments>http://juanbenavides.info/%c2%a1feliz-ano-nuevo-2010/2010/01/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 11:22:34 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[feliz año 2010]]></category>
		<category><![CDATA[musulmanes]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=262</guid>
		<description><![CDATA[
Así es como pasé año nuevo. Feliz año musulmanes extremistas de Arabia Saudí. Resulta que la suma de muchas cosas (falta de mantenimiento en el servidor, permisos 777 por todos lados y así), logró que un par de mocosos hijos de Alá pudieran inyectar html en algunos archivos de nuestros blogs vía cPanel y Wordpress. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://juanbenavides.info/wp-content/uploads/2010/01/100_3432.jpg" style="border:none;"><img src="http://juanbenavides.info/wp-content/uploads/2010/01/100_3432.jpg" alt="" title="Feliz año nuevo 2010" width="700" class="alignnone size-large wp-image-263" /></a></p>
<p>Así es como pasé año nuevo. Feliz año musulmanes extremistas de Arabia Saudí. Resulta que la suma de muchas cosas (falta de mantenimiento en el servidor, permisos 777 por todos lados y así), logró que un par de mocosos hijos de Alá pudieran inyectar html en algunos archivos de nuestros blogs vía cPanel y Wordpress. Note usted que en el momento de la foto, <a href="http://twitter.com/arturoleon">Arturo</a> me mandaba sus deseos de año nuevo vía la consola :D</p>
<p>Aparentemente no tuvieron mayor acceso salvo la inyección del texto a determinados archivos, las bases de datos están a salvo y la mayoría de los errores de seguridad ya están cerrados, pero aún sigo con la paranoia por los errores que quizás no he detectado. Nos atacaron por un bug de cPanel y después por el plugin de Facebook Connect y Wordpress, pero creo que ya dejé todo un poco más seguro.</p>
<h3 style="font-size:1.7em">¡Feliz año nuevo!</h3>
<p>Que puedo decir. Fue un año muy difícil para WEM, <a href="http://othaner.net/el-ultimo-post-del-ano-del-crecimiento/2009/12/31/">Otháner ya dijo algunas cosas al respecto</a>. Las montañas rusas emocionales y financieras del 2009 parecían interminables, pero aquí estamos, motivados y listos para el 2010 :D </p>
<p>Afortunadamente en WEM siempre he contado con los #<a href="http://wem.mx/">wemmers</a>, con <a href="http://twitter.com/Othaner">Otháner</a> sobre todo para tomar decisiones y para visitar clientes. Soy un terrible vendedor, siempre llego temblando, aunque de la nada aparece el coraje que necesito para encararlo, creo.</p>
<p>Muchos no tienen idea que para mantener una empresa, saber programar o saber diseñar no es suficiente. La estrategia, las decisiones, la administración los recursos, conseguir contactos, intercambios comerciales, búsqueda y atención de clientes, etc. Es un trabajo sumamente estresante. Toda empresa tiene gastos que debe cubrir y la mayoría de las veces estos nos absorben de tal manera que incluso olvidamos quienes somos como empresa, olvidamos la cultura de trabajo que elegimos y caemos en el error de prostituirse por dinero. Así que, mientras yo caía en la depresión, <a href="http://twitter.com/Othaner">Otháner</a> me animaba, <a href="http://twitter.com/bleedingxedge">Maru</a> me hacía reir y <a href="http://twitter.com/slider_037">Slider</a> <a href="http://twitter.com/Linnk/status/7207007626">coloreaba mi vida -y sueños- trolleando</a> xD, que puedo decir&#8230; emprender así es divertido.</p>
<p><a href="http://twitter.com/mKosto">Kosto</a> incluso me cuidó cuando quedé dormido con las manos aún en el teclado mientras programaba en la Campus Party. <a href="http://twitter.com/arturoleon">Arturo</a>, que no me asesina por llamarle en navidad y año nuevo para darle mantenimiento al servidor. También se que cuento con <a href="http://twitter.com/Jalil">Jalil</a> para cualquier cosa y con <a href="http://twitter.com/staf621">Staf621</a> para cualquier duda sobre programación.</p>
<p>Y espero poder responderles igual :)</p>
<p>Así es como se termina un año difícil. Empieza el 2010 y la verdad es que le tengo miedo. Mi vida escolar es bastante mediocre y es algo que he querido corregir desde&#8230; bueno, no importa. Lo importante es que estoy decidido a enfrentar este año escolar, el cual tiene toda la pinta de ser tan hijo de puta como fue el 2009 para WEM. Sin embargo aquí estoy, temblando de miedo, pero listo para lo que sea y esperando que el coraje &#8220;aparezca&#8221; como suele hacerlo.</p>
<p>Trabajaré por un buen 2010. No soy fan de la esperanza ni las creencias, así que no me queda otra más que trabajar por que mis deseos se cumplan. Espero que todos ustedes trabajen por los suyos. Feliz año nuevo a todos, si a todos, incluyendo a los musulmanes.</p>
<p>¡Salúd! :D</p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/%c2%a1feliz-ano-nuevo-2010/2010/01/feed/</wfw:commentRss>
		<slash:comments>4</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"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="php 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="">'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>;
&nbsp;
	<span style="color: #000088;">$find</span> <span style="color: #339933;">=</span>		<span style="">'&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: #000088;">$replace</span> <span style="color: #339933;">=</span>	<span style="">'&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>;
&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>;
&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: #990000;">echo</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="">'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>;
		file_put_contents<span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="">'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: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

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

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash 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></td></tr></table></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"><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="bash 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></td></tr></table></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>0</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>Breve reflexión sobre las &#8220;Agencias Interactivas&#8221;</title>
		<link>http://juanbenavides.info/breve-reflexion-sobre-las-agencias-interactivas/2009/12/</link>
		<comments>http://juanbenavides.info/breve-reflexion-sobre-las-agencias-interactivas/2009/12/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 13:19:13 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[reflexion]]></category>
		<category><![CDATA[talibanismo]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=245</guid>
		<description><![CDATA[&#8220;Somos una agencia interactiva de diseño y marketing en Internet&#8221;.
Un poco cansado quedé luego de trabajar en una pequeña agencia de diseño y desarrollo, los sitios se vendían como &#8220;dinámicos&#8221;, &#8220;interactivos&#8221;, &#8220;auto-administrables&#8221;, etc. Estos términos son tan acertados como incorrectos al mismo tiempo, ya que desde el momento en que se utiliza la tecnología como [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>&#8220;Somos una agencia interactiva de diseño y marketing en Internet&#8221;.</p></blockquote>
<p>Un poco cansado quedé luego de trabajar en una pequeña agencia de diseño y desarrollo, los sitios se vendían como &#8220;dinámicos&#8221;, &#8220;interactivos&#8221;, &#8220;auto-administrables&#8221;, etc. Estos términos son tan acertados como incorrectos al mismo tiempo, ya que desde el momento en que se utiliza la tecnología como medio de comunicación, la información es dinámica, interactiva e incluso podría administrarse.</p>
<p>Pero no por el hecho de usar esta tecnología se está haciendo automáticamente un producto verdaderamente interactivo.</p>
<p>La Interactividad es un proceso de la comunicación presente en humanos y maquinas. Dos personas interactúan hablando, pero con una maquina quizás necesite apretar un botón y esta responderá causando una interacción hombre-maquina.</p>
<p>He ahí el problema, ¿que debería pensar por una &#8220;agencia interactiva&#8230; de diseño&#8221;?</p>
<p>La interactividad es parte de la computación y del mismo internet, sin esta sería tecnología inútil. Quizás lo mejor sería fijarnos más en la parte importante, el contenido de un sitio. Sin importa el medio (texto, gráfico o audiovisual). Si lograra comunicar un mensaje por medio del contenido, si pudiera hacer que el usuario quiera responder dejando un comentario en el sitio, entonces creo que no me sentiré como el <em>capitán obvio</em> diciendo que desarrollo &#8220;sitio interactivos&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/breve-reflexion-sobre-las-agencias-interactivas/2009/12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Propósitos para el 2010</title>
		<link>http://juanbenavides.info/propositos-para-el-2010/2009/12/</link>
		<comments>http://juanbenavides.info/propositos-para-el-2010/2009/12/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 08:14:22 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[propósitos]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=240</guid>
		<description><![CDATA[Lo siento como una obligación publicarlos para -entre otras cosas- presionarme a cumplirlos y recordármelo. Por suerte este año tengo una enorme motivación para cumplir el más importante, pero que va, vamos con la lista:

Escribir al menos un post diario.
Retomar mis lecturas mensuales.
Practicar más con la guitarra e incluso subir algo a Youtube ¿por qué [...]]]></description>
			<content:encoded><![CDATA[<p>Lo siento como una obligación publicarlos para -entre otras cosas- presionarme a cumplirlos y <abbr title="Si, así es, soy muy olvidadizo.">recordármelo</abbr>. Por suerte este año tengo una enorme motivación para cumplir el más importante, pero que va, vamos con la lista:</p>
<ol>
<li>Escribir al menos un post diario.</li>
<li>Retomar mis lecturas mensuales.</li>
<li>Practicar más con la guitarra e incluso subir algo a Youtube ¿por qué no?.</li>
<li>Publicar muchos scripts como código abierto.</li>
<li>Trabajar muchísimo más por <a href="http://wem.mx/">WEM Creative Studio</a> e <a href="http://indieweblogs.com/">IndieWeblogs</a>, y lograr su completa rentabilidad. Al menos de uno.</li>
</ol>
<p>Sobre el post diario. Es fácil decirlo, pero requiere su dedicación y he decidido hacerlo simplemente por la buena costumbre de vaciar mis ideas. Creo que eso es muy importante y no lo hago seguido, me las trago. Sabrá Alá a donde se van.</p>
<p>La literatura y la música son mis artes preferidas, es una pena que no me he forzado a disfrutarlas y creo que es tiempo de poner orden respecto a eso. </p>
<p>El año 2010 va a ser muy interesante y muy pesado. Va a ser el año <del datetime="2009-12-26T07:32:22+00:00">de Linux en el escritorio</del>, en el que grandes cambios haré a mi vida y por supuesto, si lo logro, tendré una linda recompensa para fin de año que me estoy planeando&#8230; pero todo a su tiempo :) </p>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/propositos-para-el-2010/2009/12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Decisiones</title>
		<link>http://juanbenavides.info/decisiones/2009/12/</link>
		<comments>http://juanbenavides.info/decisiones/2009/12/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 12:53:21 +0000</pubDate>
		<dc:creator>Juan Benavides</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[decisiones]]></category>
		<category><![CDATA[filosofía de vida]]></category>

		<guid isPermaLink="false">http://juanbenavides.info/?p=235</guid>
		<description><![CDATA[Nunca he sabido si las decisiones que he tomado en mi vida han sido buenas o malas. Pero al menos las he tomado yo.
]]></description>
			<content:encoded><![CDATA[<blockquote><p>Nunca he sabido si las decisiones que he tomado en mi vida han sido buenas o malas. Pero al menos las he tomado yo.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://juanbenavides.info/decisiones/2009/12/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
