<?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>CaChi &#187; PHP5</title>
	<atom:link href="http://cachi.temiga.org/category/php5/feed/" rel="self" type="application/rss+xml" />
	<link>http://cachi.temiga.org</link>
	<description>[ TEMIGA ]</description>
	<lastBuildDate>Mon, 19 Jul 2010 14:10:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Introducción a Redis e Instalando PhpRedis &#124; NoSQL</title>
		<link>http://cachi.temiga.org/2010/05/15/introduccion-a-redis-e-instalando-phpredis-nosql/</link>
		<comments>http://cachi.temiga.org/2010/05/15/introduccion-a-redis-e-instalando-phpredis-nosql/#comments</comments>
		<pubDate>Sun, 16 May 2010 03:31:57 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[GNU/linux]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Programing]]></category>
		<category><![CDATA[Redis]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=619</guid>
		<description><![CDATA[Introducción a Redis Como muchos se han enterado desde hace un tiempo esta en la cresta de la ola, el moviento NoSQL el cual es una serie de almacenes de datos no relacionales (ojo no han muertos las BD relaciones), hay multiples proyectos para almacenar este tipo de datos y uno de lo que mas]]></description>
			<content:encoded><![CDATA[<h3><a href="http://cachi.temiga.org/wp-content/uploads/logo-redis.png"><img class="alignright" title="logo de redis" src="http://cachi.temiga.org/wp-content/uploads/logo-redis.png" alt="" width="108" height="82" /></a>Introducción a Redis</h3>
<p>Como muchos se han enterado desde hace un tiempo esta en la cresta de la ola, el moviento <a title="NoSQL" href="http://es.wikipedia.org/wiki/NoSQL" target="_blank">NoSQL</a> el cual es una serie de almacenes de datos <em>no relacionales</em> (ojo no han muertos las BD relaciones), hay multiples proyectos para almacenar este tipo de datos y uno de lo que mas me ha interesado en <a title="Redis" href="http://code.google.com/p/redis/" target="_blank">Redis</a> (REmote DIctionary Server) el cual es un avanzado contenedor de datos del tipo clave-valor (key-value) muy parecido a <a title="memcached" href="http://memcached.org/" target="_blank">memcached</a>, pero a diferencia de esta que los datos <em>no son volatiles</em>, como cultura general Redis es desarrollado por <a title="antirez weblog" href="http://antirez.com/" target="_blank">Salvatore antirez Sanfilippo</a> (@<a title="Twitter Salvatore Antirez" href="http://twitter.com/antirez" target="_blank">antirez</a>)</p>
<p>Redis a diferencia de <a title="memcached" href="http://memcached.org/" target="_blank">memcached</a> cuenta con diversidad de <em>tipos de datos</em>, en Redis hay listas, conjuntos y conjuntos ordenados. Todos estos tipos de datos pueden ser manipulados con operaciones <em>atómicas</em> push/pop, add/remove. Puedes mirar todas las <a title="Características de Redis" href="http://code.google.com/p/redis/wiki/Features">características de Redis</a> en detalle del porque es una alternativa NoSQL muy interesante a valorar.</p>
<p>Redis actualmente esta siendo adoptado por multiples proyectos primordialmente por si <em>perfomance</em> (<a title="Benchmark Redis" href="http://code.google.com/p/redis/wiki/Benchmarks" target="_blank">pueden chequear el siguiente benchmark</a>) entre los cuales figuran <a title="GitHub" href="http://github.com/blog/530-how-we-made-github-fast" target="_blank">GitHub</a> (<a rel="bookmark" href="http://github.com/blog/530-how-we-made-github-fast">How We Made GitHub Fast)</a>, <a title="Vidio Wiki" href="http://vidiowiki.com/" target="_blank">VidioWiki</a>, y otros tantos. Al igual que proyectos existen <a title="Lenguajes de Programación que Soportan Redis" href="http://code.google.com/p/redis/wiki/SupportedLanguages" target="_blank">lenguajes de programación que soportan a Redis</a>.</p>
<p>Como ven hay muchas cosas interesantes en todo esto del <a title="NoSQL" href="http://es.wikipedia.org/wiki/NoSQL" target="_blank">NoSQL</a> y especialmente con Redis, pero es importante acotar que <em>NoSQL</em> no esta pensado para cualquier aplicación, me refiero que esta <em>nueva forma</em> de almacenar datos nace en vista de necesidad que las <a title="Base de datos relacional" href="http://es.wikipedia.org/wiki/Base_de_datos_relacional" target="_blank">Base de Datos Relaciones</a> (las mismas que ofrecen el <a title="Atomicity, Consistency, Isolation and Durability" href="http://es.wikipedia.org/wiki/ACID" target="_blank">ACID</a>) se quedarón cortas para lo que requieren las aplicación de hoy día en cuento al manejo de datos. En pocas palabras no intenten hacer un <span style="text-decoration: line-through;">Blog con NoSQL</span>, lo he visto a diario <em>producto del novísimo</em> de algunos que piensan y/o creen que ahora todo se puede hacer con NoSQL y lo que puede llevarlo <a title="Why NoSQL is bad for startups" href="http://labs.mudynamics.com/2010/04/01/why-nosql-is-bad-for-startups/">al fracaso de un startup</a> :)</p>
<h3>PHP + Redis</h3>
<p>PHP es uno de los lenguaje que ha dado soporte a Redis y hay varios clientes para trabajar con Redis los dos que considerado mas importante es <a title="Rediska (radish on russian) - PHP client for Redis." href="http://rediska.geometria-lab.net/" target="_blank">Rediska</a> la cual tiene características interesantes e integración con varios framework pero y <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a> el cual es una libraría nativa de PHP escrita en C.</p>
<p><a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a> es la que más me ha llamado la atención y es por tema que es una extensión nativa de PHP la cual supone que será mas rápida que cualquier librería que haga las veces de cliente para trabajar con Redis.</p>
<p>Explicare brevemente como instalar <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a>, en sistemas operativos basado en GNU/Linux en mi caso es Debian, realmente la instanción es bastante simple y lo primero es que debes tener Redis como servidor.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">#aptitude install redis-server</pre></div></div>

<p>Lo anterior solo instala el server, ya podemos trabajar con redis, pero hace falta un cliente en mi caso escogí <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a>, yo la baje directamente de <a title="GitHub" href="http://github.com/blog/530-how-we-made-github-fast" target="_blank">GitHub</a> como proyecto pudíeras solo bajar el .tar.gz.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">#git clone --depth 1 git://github.com/owlient/phpredis.git</pre></div></div>

<p>Ubicados en el directorio donde se descargo <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a> hacemos lo siguiente:</p>
<p><em><strong>Nota: como se compilará un módulo de PHP necesitas tener instalado php5-dev</strong></em></p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">phpize
./configure
make &amp;&amp; make install</pre></div></div>

<p>Si lo anterior se ejecuto de forma correcta tendrás un mensaje al final lo que indica que todo se instalo como este:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Build complete.
Don't forget to run 'make test'.
&nbsp;
Installing shared extensions:     /usr/lib/php5/20060613+lfs/</pre></div></div>

<p>El próximo paso es cargar el módulo en el php.ini para ubicarlo use <em>php &#8211;ini | grep &#8216;Loaded&#8217;</em> lo editamos y cargamos el módulo con solo añadir <em>extension=redis.so</em> en la sección <em>Dynamic Extensions</em> de su php.ini, ahora verificamos que lo hecho esta bien.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">php -m | grep redis
php -i | grep 'Redis Support'</pre></div></div>

<p>Hay un <a title="redis-glue-test" href="http://gist.github.com/402018" target="_blank">Script de PHP</a> el cual es un test rápido para verificar que hay comunicación entre el servidor redis y la extensión PhpRedis instalada.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">curl -s http://gist.github.com/raw/402018/redis-glue-test.php -o redis-test.php
php redis-glue-test.php</pre></div></div>

<p>Si vez lo siguiente como salida del comando anterior, sientase feliz porque ya tiene andando <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a> como cliente de PHP y Redis como servidor :)</p>
<p><a href="http://cachi.temiga.org/wp-content/uploads/test-phpredis.png"><img class="aligncenter" title="Test PhpRedis" src="http://cachi.temiga.org/wp-content/uploads/test-phpredis.png" alt="" width="717" height="159" /></a></p>
<h3>Para terminar&#8230;</h3>
<p>Este post fue una introducción bastante general pero precisa a lo que es Redis como un sistema de almacenamiento key-value, espero pronto escribir algo de código donde se aprecie como guardar y recuperar datos de Redis desde PHP o bien desde la consola pura y cruda :).</p>
<p>Espero las dudas, preguntas y sugerencias sobre el post :)</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F05%2F15%2Fintroduccion-a-redis-e-instalando-phpredis-nosql%2F&amp;linkname=Introducci%C3%B3n%20a%20Redis%20e%20Instalando%20PhpRedis%20%7C%20NoSQL"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/05/15/introduccion-a-redis-e-instalando-phpredis-nosql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>No te confies de todo lo que dice el manual de PHP</title>
		<link>http://cachi.temiga.org/2009/05/17/no_te_confies_de_todo_lo_que_dice_el_manual_de_php/</link>
		<comments>http://cachi.temiga.org/2009/05/17/no_te_confies_de_todo_lo_que_dice_el_manual_de_php/#comments</comments>
		<pubDate>Mon, 18 May 2009 00:37:30 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Buenas Prácticas]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[KumbiaPHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[profiler]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=301</guid>
		<description><![CDATA[Hace unos días haciendo unos benchmark a kumbiaphp framework en comparación con la vieja estructura de directorios de alguna para ver si la nueva estructura directorio genero efectos de rendimientos sobre el framework que seria lo ideal. Bien lo cierto es que cuando se corrió el benchmark los #request/seg no cuadraban y no era lógico]]></description>
			<content:encoded><![CDATA[<p>Hace unos días haciendo unos <a title="benchamrk" href="http://en.wikipedia.org/wiki/Benchmark_(computing)">benchmark</a> a <a title="Sitio web de kumbiaphp framework" href="http://www.kumbiaphp.com">kumbiaphp framework</a> en comparación con la <span style="text-decoration: line-through;">vieja estructura</span> de directorios de alguna para ver si la <a title="KumbiaPHP Avances version 1.0" href="http://www.kumbiaphp.com/blog/2009/04/30/avances_de_kumbiaphp_framework/" target="_blank">nueva estructura directorio</a> genero efectos de rendimientos sobre el framework que seria lo ideal.</p>
<p>Bien lo cierto es que cuando se corrió el benchmark los <strong>#request/seg</strong> no cuadraban y no era lógico ya que la nueva estructura se depuraron ciertas cosas que sobraban, en el benchmark los números obtenidos eran tan locos que la vieja estructura tenia unos 10 #req/seg por encima :-S no era nada normal esto, nos toco recurrir a las <strong><em>buenas prácticas de desarrollo</em></strong> y que ya es una constante dentro del <a title="Equipo de Desarrollo de KumbiaPHP framework" href="http://wiki.kumbiaphp.com/Team_Development_KumbiaPHP_Framework#KumbiaPHP_Team_Developers" target="_blank">Equipo de Desarrollo de kumbiaphp</a> hacer <a title="debug y profiler con xdebug" href="http://cachi.temiga.org/2008/04/08/instalando-xdebug-en-debian-lenny/">debug y profiler con xdebug</a> :-), esto para detectar donde estaban los &#8220;cuellos de botellas&#8221; que nos hacían mas lento que la versión anterior.</p>
<p>El detalle estaba en una función de <a title="PHP" href="http://en.wikipedia.org/wiki/PHP">PHP</a> llamada <a title="php function extract" href="http://es.php.net/manual/es/function.extract.php" target="_blank">extract,</a> dentro de <a title="KumbiaPHP web &amp; app Framework" href="http://www.kumbiaphp.com">kumbiaphp framework</a> se utiliza esta dicha función en el core ya que el framework implementa las <strong><em>variables de instancia</em></strong> (algo muy parecido de <a title="Rails" href="http://en.wikipedia.org/wiki/Ruby_on_Rails">Rails</a>), es decir todo lo que llame en mi controlador <strong><em>$this-&gt;var</em></strong> o sean atributos públicos, en la vista los tengo disponible como <strong><em>$var</em></strong>, volviendo al punto esta funcion nos permite hacer lo antes dicho pero recibe ciertos parámetros uno es unas constantes entre ellas <span class="term"><strong><em>EXTR_OVERWRITE</em></strong> (</span><span class="simpara">Si hay colisión, sobrescribe la variable existente</span><span class="term">) nosotros decidimos sacar la constante porque en la documentación Oficial de PHP dice claro lo siguiente:</span></p>
<blockquote><p><em>Si no se especifica </em><em><tt class="parameter">tipo_extraccion</tt> , se asume que      vale EXTR_OVERWRITE.</em></p></blockquote>
<p>Bien como sabemos el xdebug nos da mucha información y la misma nos decía que el &#8220;cuello de botella&#8221; estaba allí ya que tomamos un profiler de la versión anterior y los tiempos eran totalmente distintos en ese punto. viendo en detalle la función <em><strong>extract </strong></em>decidí olvidar lo que dice el manual de PHP y pasar de forma implícita el tipo de extracción en este caso <span class="term"><strong><em>EXTR_OVERWRITE, </em></strong>una vez hecho el cambio vuelvo a correr el benchmark y como por arte de magia ahora obtengo los resultados esperados la nueva estructura ha causado efecto en velocidad y esta ~10 #req/seg por encima respecto a la <span style="text-decoration: line-through;">vieja estructura</span>.<br />
</span></p>
<p><strong><span class="term">Conclusión.</span></strong></p>
<p><span class="term">Tal como dice el titulo del post no hay que confiarse de lo que dicen algunos manual, ya que pueden ocurrir excepciones como la que comente aqui. En el caso descrito fue detectado este detalle porque se hizo uso de las <em>buenas prácticas</em> de desarrollo y de las herramientas disponibles y el turno fue para una que muchos obvian <a title="Xdebug " href="http://www.xdebug.org">(xdebug)</a>, que si le damos el uso correcto podemos ganar mucho en nuestros desarrollos.</span></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2009%2F05%2F17%2Fno_te_confies_de_todo_lo_que_dice_el_manual_de_php%2F&amp;linkname=No%20te%20confies%20de%20todo%20lo%20que%20dice%20el%20manual%20de%20PHP"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2009/05/17/no_te_confies_de_todo_lo_que_dice_el_manual_de_php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Filter un misterio de PHP.</title>
		<link>http://cachi.temiga.org/2009/02/16/filter-un-misterio-de-php/</link>
		<comments>http://cachi.temiga.org/2009/02/16/filter-un-misterio-de-php/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 02:58:32 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Buenas Prácticas]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programing]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=253</guid>
		<description><![CDATA[Todas las aplicaciones (Web, Escritorio, Consola) dependen que datos externos para crear una salida o iniciar un proceso, estos datos pueden venir desde un usuario u otra aplicación (WebService, formulario, etc&#8230;) por eso la premisa #1 de todo desarrollador debe: Filtrar todos los datos externos El filtrado de datos es una de las piedras angulares]]></description>
			<content:encoded><![CDATA[<p><a href="http://cachi.temiga.org/wp-content/uploads/filter.gif"><img class="alignleft" title="Filter" src="http://cachi.temiga.org/wp-content/uploads/filter.gif" alt="" width="115" height="186" /></a>Todas las aplicaciones (Web, Escritorio, Consola) dependen que datos externos para crear una salida o iniciar un proceso, estos datos pueden venir desde un usuario u otra aplicación (<a href="http://en.wikipedia.org/wiki/Web_service">WebService</a>, formulario, etc&#8230;) por eso la premisa #1 de todo desarrollador debe:</p>
<blockquote><p><em>Filtrar todos los datos externos</em></p></blockquote>
<p>El filtrado de datos es una de las piedras angulares en cualquier aplicación en el tema de seguridad, independientemente del lenguaje donde se trabaje. <a href="http://www.php.net">PHP</a> proporciona una amplia gama de herramientas y funciones para filtrar o validar los datos, pero a diferencia de otros lenguajes, no tiene funciones estándar para filtrar los datos (como cgi de perl).</p>
<p>La extensión <em><a title="Filter" href="http://us3.php.net/manual/hu/ref.filter.php" target="_self">Filter</a></em> llena este vacío y viene a suplir muchas expresiones regulares que son extremadamente lentas para validar formatos y datos de entradas, estas son muchas de las bondades de <em>PHP</em> que muchos desarrolladores no suelen utilizar y que vienen a ser parte de las <strong><em>buenas practicas</em></strong> de desarrollo sobre este lenguaje.</p>
<p>Este componente cuenta con constantes que representan los filtros a ser aplicados y ademas estos se pueden aplicar sobre <a title="Arrays PHP" href="http://ve2.php.net/manual/es/function.array.php" target="_blank">array&#8217;s</a> conocidos (POST, GET, COOKIE, etc) de manera que se vuelve flexible, para este tipo de validaciones y/o sanamiento de los datos de entrada, veamos unos ejemplos.</p>
<p>imaginemos que enviamos por <a title="$_GET" href="http://us3.php.net/manual/hu/reserved.variables.php#reserved.variables.get" target="_self">$_GET</a> un dato que lo hemos llamado &#8216;mode&#8217;</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'mode'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_numeric</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'mode'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;'mode' no es un entero&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;'mode' es un entero&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'mode'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Ahora utilizando el <em>Filter</em> <a title="filter_input" href="http://ve2.php.net/manual/es/function.filter-input.php" target="_self">filter_input</a></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$mode</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filter_input</span><span style="color: #009900;">&#40;</span>INPUT_GET<span style="color: #339933;">,</span> <span style="color: #0000ff;">'mode'</span><span style="color: #339933;">,</span> FILTER_VALIDATE_INT<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: #339933;">!</span><span style="color: #000088;">$mode</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;'mode' no es un entero&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;mode es: <span style="color: #006699; font-weight: bold;">$mode</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$mode</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Ya podemos apreciar que nuestro código se limpia y si le hacemos un <em><a title="benchmark" href="http://en.wikipedia.org/wiki/Benchmark_(computing)">benchmark</a></em> seguramente también será mas rápido ;-)</p>
<h3>Consideraciones sobre los filtros</h3>
<ul>
<li><em>Santizing(limpieza) filtros</em>, Permitir o denegar los caracteres de una cadena, siempre retorna una cadena</li>
<li><em>Filtros Lógicos</em>, Conoce los formatos devuelve el tipo esperado de éxito.</li>
</ul>
<h3>Un formulario, aplicando filtros lógicos.</h3>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>form action<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;example.php&quot;</span> method<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;post&quot;</span><span style="color: #339933;">&gt;</span>
    Ingrese su Edad<span style="color: #339933;">:</span>
<span style="color: #339933;">&lt;</span>input name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;age&quot;</span> size<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;2&quot;</span> <span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>input name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;submit&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;submit&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Ir&quot;</span> <span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;/</span>form<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Y el script que procesa esta información seria:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">filter_has_var</span><span style="color: #009900;">&#40;</span>INPUT_POST<span style="color: #339933;">,</span> <span style="color: #0000ff;">'submit'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Se envió el form'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$age</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filter_input</span><span style="color: #009900;">&#40;</span>INPUT_POST<span style="color: #339933;">,</span> <span style="color: #0000ff;">'age'</span><span style="color: #339933;">,</span> FILTER_VALIDATE_INT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_null</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$age</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;La 'edad' es un campo requerido!&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$age</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Ingrese una edad valida'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Bienvenido.'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Bien como vemos solo validamos que la <em>edad</em> sea un numero entero, pero existen algunos filtros que soportan <em><strong>options</strong></em> para que las validaciones sean mas precisas. Ahora la <em>edad</em> debe pasar la condición que debe estar entre un rango entre 7 y 77. veamos la utilización con el código anterior.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">filter_has_var</span><span style="color: #009900;">&#40;</span>INPUT_POST<span style="color: #339933;">,</span> <span style="color: #0000ff;">'submit'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Se envió el form'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$age</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filter_input</span><span style="color: #009900;">&#40;</span>INPUT_POST<span style="color: #339933;">,</span> <span style="color: #0000ff;">'age'</span><span style="color: #339933;">,</span> FILTER_VALIDATE_INT<span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'options'</span><span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'min_range'</span><span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #cc66cc;">7</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'max_range'</span><span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #cc66cc;">77</span><span style="color: #009900;">&#41;</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: #990000;">is_null</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$age</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;La 'edad' es un campo requerido!&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$age</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Ingrese una edad valida'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Bienvenido.'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Un formulario, aplicando filtros Santizing.</h3>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>form action<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;example01.php&quot;</span> method<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;post&quot;</span><span style="color: #339933;">&gt;</span>
    Ingrese su Nombre<span style="color: #339933;">:</span>
<span style="color: #339933;">&lt;</span>input name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;name&quot;</span> size<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;50&quot;</span> <span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>input name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;submit&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;submit&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Ir&quot;</span> <span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;/</span>form<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Y script que lo procesa&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">filter_has_var</span><span style="color: #009900;">&#40;</span>INPUT_POST<span style="color: #339933;">,</span> <span style="color: #0000ff;">'submit'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Se envió el form'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filter_input</span><span style="color: #009900;">&#40;</span>INPUT_POST<span style="color: #339933;">,</span> <span style="color: #0000ff;">'name'</span><span style="color: #339933;">,</span> FILTER_SANITIZE_STRING<span style="color: #339933;">,</span> FILTER_FLAG_STRIP_LOW<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_null</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;El 'nombre' es un campo requerido!&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Bienvenido, <span style="color: #006699; font-weight: bold;">$name</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>En PHP 5.x esta extensión viene por defecto.</p>
<p>Por último dejo un post de <a title="PHPPro" href="http://phpro.org/tutorials/Filtering-Data-with-PHP.html" target="_blank">PHPPro</a> donde servirá de guía para muchos, de manera que escalemos nuestras formas de validar datos.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2009%2F02%2F16%2Ffilter-un-misterio-de-php%2F&amp;linkname=Filter%20un%20misterio%20de%20PHP."><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2009/02/16/filter-un-misterio-de-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Prof. Charlatan + Buenas Prácticas PHP + Parte I</title>
		<link>http://cachi.temiga.org/2009/02/07/prof-charlatan-buenas-practicas-php-parte-i/</link>
		<comments>http://cachi.temiga.org/2009/02/07/prof-charlatan-buenas-practicas-php-parte-i/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 05:20:43 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programing]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=221</guid>
		<description><![CDATA[Este termino comencé a ver una materia que se llama Procesamiento de Datos (Programación PHP) y es triste ver como un profesor le cae a mentira a un grupo de alumnos, que en vez de dedicarse &#8220;enseñar&#8221;, busca &#8220;sorprender&#8221; a un conglomerado, como se que esto dará mucho que hablar hoy comienzo una serie de]]></description>
			<content:encoded><![CDATA[<div class="mceTemp">
<dl class="wp-caption alignleft" style="width: 210px;">
<dt class="wp-caption-dt"><a href="http://cachi.temiga.org/wp-content/uploads/melkor_20061012_pirata.jpg"><img title="Pirata" src="http://cachi.temiga.org/wp-content/uploads/melkor_20061012_pirata.jpg" alt="Pirata" width="200" height="160" /></a></dt>
</dl>
</div>
<p>Este termino comencé a ver una materia que se llama <strong>Procesamiento de Datos</strong> (Programación <a title="PHP" href="http://es.wikipedia.org/wiki/Php" target="_self">PHP</a>) y es triste ver como un profesor le cae a mentira a un grupo de alumnos, que en vez de dedicarse &#8220;enseñar&#8221;, busca &#8220;sorprender&#8221; a un conglomerado, como se que esto dará mucho que hablar hoy comienzo una serie de post donde rescatare las carencia de este profesor, por razones obvias no daré su nombre (Espero lea este post profesor) y que <strong>NO</strong> se consideran como buenas prácticas de desarrollo en <a title="PHP" href="http://es.wikipedia.org/wiki/Php" target="_blank">PHP</a>.</p>
<p>Aclaro que <em>No</em> es un <em>Flame</em> contra este profesor, son simplemente aclaratorias que desde mi modesto punto de vista no puede quedar &#8220;impune&#8221; de la misma forma sirva para incentivar a las personas y/o alumnos(hasta al mismo profesor) a buscar información antes de decirla y/o creerle a cualquiera y mas en el área de la programación debido a que existe mucha información en la web.</p>
<p>Hay cosas de &#8220;ABC&#8221; que cualquier desarrollador de aplicaciones web debería tener claro, en este caso para <a title="PHP" href="http://es.wikipedia.org/wiki/Php" target="_blank">PHP</a> y es que las aplicaciones web de hoy día necesitan ir rápido, y rápido no se traduce es hacer códigos pequeños sino en implementar buenas prácticas.</p>
<h2>En Plena Clase</h2>
<p>El profesor explico como instalar <a title="Apache" href="http://es.wikipedia.org/wiki/Servidor_HTTP_Apache" target="_blank">Apache</a> (En windows XP :-P) pero nunca dijo porque se usaría Apache? y no otro por ejemplo <a href="http://en.wikipedia.org/wiki/Internet_Information_Services">IIS</a>, <a title="Cherokee" href="http://en.wikipedia.org/wiki/Cherokee_HTTP_Server" target="_blank">Cherokee</a>, etc. Ya por aquí considero que empezó mal porque como pedagogo (que no tiene nada) debió explicar esto, no conforme, comienza a dar la explicación de instalar <a title="Zend Studio" href="http://www.zend.com/en/products/studio/" target="_blank">Zend Studio</a> (un <a title="IDE" href="http://en.wikipedia.org/wiki/Integrated_development_environment" target="_blank">IDE</a> privativo)y luego dice como &#8220;<a href="http://en.wikipedia.org/wiki/Crack_(software)" target="_blank">crackearlo</a>&#8221; (profesor tenga ética y no sea &#8220;pisa bandera&#8221;) otro error, esto se puede decir entre amigos pero NO en una clase.</p>
<p>Bien, después del <em>bla bla bla</em>, llega a un punto donde comienza hablar de rutas en los archivos, es decir hacer los <strong>include &#8216;../mi_ruta/archivo.php&#8217;</strong>, y dice que las rutas relativas son mejores (aquí explote) y hago una pregunta, <em>Profesor que es mas optimo rutas Relativas o Absolutas?</em> la barbarie! el profesor contesto Relativas, caigo en un intercambio de palabras donde le dije que era falso y ahora explico porque.</p>
<p><strong>Las rutas absolutas son mas optimas</strong>, como dije en un principio hay que hacer <em>aplicaciones web rápidas</em> y algo tan simple como hacer un <strong>include</strong> de una ruta relativa se paga caro en tiempo de ejecución, porque se perderá <em>mas</em> tiempo resolviendo la ruta, es decir crear el arbol de directorio porque el compilador de <a title="PHP" href="http://es.wikipedia.org/wiki/Php" target="_blank">PHP</a> no es que hará un simple <em>cd ../mi_ruta/archivo.php</em> no no no, el compilador construye la ruta completa del <strong>archivo.php</strong> hará algo como <strong>/var/www/mi_ruta/archivo.php</strong>.</p>
<p>Luego que le comente lo anterior con otras palabras pero la idea sigue siendo la misma, el profesor en cuestión me alega que me imaginase que tuviera muchos archivo dentro del proyecto que desarrollo, por favor con mas razón se debe <strong>utilizar rutas absolutas</strong> por el simple hecho que serán mas archivos los que se procesaran en la ejecución de la aplicación (profe esto es sentido común).<a title="PHP" href="http://es.wikipedia.org/wiki/Php" target="_blank"><br />
</a></p>
<p>Pero no todo es malo el profesor dentro de todo lo que comento en cuatro (04) horas de clases académicas (45min C/U) unas de las pocas que considero que acertó fue en el manejo de las comillas dobles y simple, cuando en <a title="PHP" href="http://es.wikipedia.org/wiki/Php" target="_blank">PHP</a> colocamos comillas dobles el compilador asumirá que existen variable ($var) dentro del string, solo que con comillas simples se ignoran las variables dentro del string pero le falto decir que es mas rápido.</p>
<p>ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$tmp</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'aaaaaaaaaaaaaaaaaaaa'</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//rápido</span>
<span style="color: #000088;">$tmp</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;aaaaaaaaaaaaaaaaaaaa&quot;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//lento</span></pre></div></div>

<h2>Conclusiones.</h2>
<p>Estas carencias son casi que normales (aunque no deberia ser así) entre los desarrolladores <em>en cualquier lenguaje</em> y es porque muy pocos se preocupan por hacer <a title="Profiler y Debug" href="http://cachi.temiga.org/2008/04/08/instalando-xdebug-en-debian-lenny/" target="_blank">profiler y debug</a> o simples <a title="Benchmark" href="http://es.wikipedia.org/wiki/Benchmark" target="_blank">benchmark</a> para encontrar <span class="serif">bottlenecks (cuellos de botella) dentro de nuestro código, con esto quiero decir que lo que se dice dentro de este post no lo invente yo, la práctica da la razón y utilizar las mejores prácticas nos hace mejor desarrollador(existen deferencias entre desarrollador y programador).</span></p>
<p><span class="serif">Leer: <a title="Regla 20/80" href="http://cachi.temiga.org/2008/08/30/la-regla-2080-buenas-practicas-de-desarrollo-parte-ii/" target="_blank">Regla 20/80</a><br />
</span></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2009%2F02%2F07%2Fprof-charlatan-buenas-practicas-php-parte-i%2F&amp;linkname=Prof.%20Charlatan%20%2B%20Buenas%20Pr%C3%A1cticas%20PHP%20%2B%20Parte%20I"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2009/02/07/prof-charlatan-buenas-practicas-php-parte-i/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Compartiendo mi conexión&#8230;</title>
		<link>http://cachi.temiga.org/2008/11/03/compartiendo-mi-conexion/</link>
		<comments>http://cachi.temiga.org/2008/11/03/compartiendo-mi-conexion/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 02:39:08 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[Configuracion]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Software Libre]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=147</guid>
		<description><![CDATA[Al fin Juan Carlos y yo nos sentamos hacer un trabajo que desde hace tiempo teníamos pendiente y era el hecho que compartir mi conexión a internet por razones obvia (chulear mi conex), actualmente me conecto mediante un Modem CDU 680 CMOTECH. Explicando un poco que vamos hacer la idea es que cualquier persona tenga]]></description>
			<content:encoded><![CDATA[<p>Al fin <a href="http://nexcon.com.ve">Juan Carlos</a> y yo nos sentamos hacer un trabajo que desde hace tiempo teníamos pendiente y era el hecho que compartir mi conexión a internet por razones obvia (chulear mi conex), actualmente me conecto mediante un <a href="http://cachi.temiga.org/2008/02/27/modem-evdo-cdu-680-en-debian-lenny/">Modem CDU 680 CMOTECH</a>.<br />
Explicando un poco que vamos hacer la idea es que cualquier persona tenga conexión a internet ya sea mediante mi interfaz de Red o <a href="http://es.wikipedia.org/wiki/Red_inalámbrica">Inalambrica</a>, estas opciones son validas de acuerdo el caso que se presente pero focalizando el escenario que tengo y es que el modem CDU se conecta a mi PC mediante USB, es decir cuando establezco la conexión tengo interfaz <a href="http://es.wikipedia.org/wiki/Point-to-Point_Protocol">PPP</a>, la idea es que mi PC sea el <a href="http://es.wikipedia.org/wiki/Gateway_(informática)">gateway</a> de las maquinas que se van a conectar.<br />
Los instrumentos que necesitamos es un <a href="http://es.wikipedia.org/wiki/Cable_cruzado#Cable_directo">cable de red directo</a>, <strong>NO cruzado</strong> y es por hecho que en distribuciones Linux automáticamente este cable se vuelve cruzado por software, hagamos la prueba para comprobar esto que les digo :-).<br />
Conectemos ambas PC&#8217;s una vez que tengamos la dirección IP 169.254.xxx.xxx, asignemos direcciones IP a estos computadores:</p>
<p>PC-1</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># ifconfig eth0 192.168.0.2</pre></div></div>

<p>PC-2</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># ifconfig eth0 192.168.0.3
# route add default gw 192.168.0.2</pre></div></div>

<p>Una vez hecho esto hacemos ping de computador a computador para comprobar que existe conectividad.<br />
Ping desde el PC-2 hacia el PC-1</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># ping 192.168.0.2</pre></div></div>

<p>Debemos obtener una salida como esta:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=0.036 ms
64 bytes from 192.168.0.2: icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from 192.168.0.2: icmp_seq=3 ttl=64 time=0.031 ms</pre></div></div>

<p>Esto simplemente para que se vea que no necesitamos un cable cruzado :-), ahora vamos a la parte interesante en esta primera sección lo haremos que nuestra PC-2 se conecte a internet mediante la interfaz de Red utilizando como gateway la PC-1, para esto utilizaremos <a href="http://linuxcommand.org/man_pages/brctl8.html">brctl</a> para crear un puente (bridge) esto lo haremos de la siguiente manera, todos estos pasos se harán en la PC-1:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># brctl addbr br0</pre></div></div>

<p>donde <strong>br0</strong> es un nombre que le damos, puede ser cualquiera, una vez hecho esto levantamos este bridge, que finge como &#8220;interfaz&#8221;.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># ifconfig  br0 up
# brctl addif br0 eth0</pre></div></div>

<p>Le damos una dirección IP al bridge <strong>br0</strong></p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># ifconfig  br0 192.168.0.2</pre></div></div>

<p>Agregamos las siguientes reglas en el <a href="http://en.wikipedia.org/wiki/Iptables">Iptables</a></p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# iptables -A INPUT -p TCP -m state --state RELATED -j ACCEPT
# echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward</pre></div></div>

<p><em>NOTA: debemos detener el network-manager de la PC-1, ya que este tumba la puerta de enlace y por ende a pesar que de se este conectado por la interfaz ppp0 la PC nunca se &#8220;entera&#8221; que esta conectada.</em></p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># /etc/init.d/network-manager stop</pre></div></div>

<p>La configuración de la PC-2 ya tiene la dirección IP asignada (192.168.0.3) solo debemos agregar los dns, en este caso utilice los de cantv 200.44.32.12, una vez hecho esto en la PC-2 podemos intentar navegar, ya sea abriendo un navegador o haciendo ping.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># ping www.google.com
PING www.l.google.com (74.125.95.103) 56(84) bytes of data.
64 bytes from iw-in-f103.google.com (74.125.95.103): icmp_seq=1 ttl=241 time=269 ms
64 bytes from iw-in-f103.google.com (74.125.95.103): icmp_seq=2 ttl=241 time=279 ms
64 bytes from iw-in-f103.google.com (74.125.95.103): icmp_seq=3 ttl=241 time=261 ms</pre></div></div>

<p>Como vemos ya tenemos conectividad hacia internet mediante la PC-1 utilizando la interfaz de red, ahora lo hacemos utilizando la tarjeta inalámbrica de ambos computadores, para esto quitamos el cable de Red para evitar problemas.<br />
En la <strong>PC-1</strong> colocamos la tarjeta inalámbrica en mode ad-hoc y añadimos la interfaz inalámbrica por lo general wlan0 al brctl.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># iwconfig wlan0 essid &quot;CaChi&quot; mode ad-hoc channel 11
# brctl addif br0 wlan0</pre></div></div>

<p>Ahora solo queda conectarse desde cualquier otra maquina hacia la <strong>PC-1</strong> de la misma manera, es decir modo <a href="http://es.wikipedia.org/wiki/Ad_hoc">ad-hoc</a> y por el canal (channel) 11 y por supuesto colocar los DNS correspondiente, en nuestro caso se colocó los de <strong>CANTV</strong> <strong>200.44.32.12</strong>.<br />
Con esto mis panas de la Universidad y demás, podrán &#8220;chulearme&#8221; la conexión :-) ahora solo faltaría un <a href="http://es.wikipedia.org/wiki/QoS">QoS</a>.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2008%2F11%2F03%2Fcompartiendo-mi-conexion%2F&amp;linkname=Compartiendo%20mi%20conexi%C3%B3n%26%238230%3B"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2008/11/03/compartiendo-mi-conexion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Entendiendo el Modelo Orientado a Objeto de PHP :-)</title>
		<link>http://cachi.temiga.org/2008/11/01/entendiendo-el-modelo-orientado-a-objeto-de-php/</link>
		<comments>http://cachi.temiga.org/2008/11/01/entendiendo-el-modelo-orientado-a-objeto-de-php/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 03:58:43 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Buenas Prácticas]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Programing]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=161</guid>
		<description><![CDATA[Dejo una presentación que considero excelente y ayudara aclarar muchas dudas en cuanto al modelo de POO de PHP ya que veo que existe un gran desconocimiento a nivel general y que escala a niveles bien altos en torno a este tema, la invitación es que vayamos a nuevas practicas de desarrollo y dejemos atrás]]></description>
			<content:encoded><![CDATA[<p>Dejo una presentación que considero excelente y ayudara aclarar muchas dudas en cuanto al modelo de <a href="http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos">POO</a> de PHP ya que veo que existe un gran desconocimiento a nivel general y que escala a niveles bien altos en torno a este tema, la invitación es que vayamos a nuevas practicas de desarrollo y dejemos atrás la vieja escuela de esa programación estructurada que no permite que PHP avance como un lenguaje mas serio respecto a otros y esto es producto de los mismo desarrolladores. </p>
<div style="width:425px;text-align:left" id="__ss_423889"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/sebastian_bergmann/understanding-the-php-object-model?type=powerpoint" title="Understanding the PHP Object Model">Understanding the PHP Object Model</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=20080522phptek-1211544400120012-8&#038;stripped_title=understanding-the-php-object-model" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=20080522phptek-1211544400120012-8&#038;stripped_title=understanding-the-php-object-model" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></p>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View SlideShare <a style="text-decoration:underline;" href="http://www.slideshare.net/sebastian_bergmann/understanding-the-php-object-model?type=powerpoint" title="View Understanding the PHP Object Model on SlideShare">presentation</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/php">php</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/oop">oop</a>)</div>
</div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2008%2F11%2F01%2Fentendiendo-el-modelo-orientado-a-objeto-de-php%2F&amp;linkname=Entendiendo%20el%20Modelo%20Orientado%20a%20Objeto%20de%20PHP%20%3A-%29"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2008/11/01/entendiendo-el-modelo-orientado-a-objeto-de-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDO (PHP Data Objects)&#8230;</title>
		<link>http://cachi.temiga.org/2008/10/12/pdo-php-data-objects/</link>
		<comments>http://cachi.temiga.org/2008/10/12/pdo-php-data-objects/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 21:02:51 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[PDO]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Programing]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=122</guid>
		<description><![CDATA[Muy pocos desarrolladores de PHP conocen la existencia de algo llamado PDO, dejo una presentación que puede ayudar aclarar porque es bueno que se comiencen a implementar estas nuevas prácticas que trae PHP5 en nuestros desarrollados. PHP Data Objects View SlideShare presentation or Upload your own. (tags: access database)]]></description>
			<content:encoded><![CDATA[<p>Muy pocos desarrolladores de PHP conocen la existencia de algo llamado <a href="http://ve2.php.net/pdo">PDO</a>, dejo una presentación que puede ayudar aclarar porque es bueno que se comiencen a implementar estas nuevas prácticas que trae PHP5 en nuestros desarrollados.</p>
<div style="width:425px;text-align:left" id="__ss_480915"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/wezfurlong/php-data-objects?type=powerpoint" title="PHP Data Objects">PHP Data Objects</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=furlongpdolong-1214197343293793-9&#038;stripped_title=php-data-objects" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=furlongpdolong-1214197343293793-9&#038;stripped_title=php-data-objects" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></p>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View SlideShare <a style="text-decoration:underline;" href="http://www.slideshare.net/wezfurlong/php-data-objects?type=powerpoint" title="View PHP Data Objects on SlideShare">presentation</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/access">access</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/database">database</a>)</div>
</div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2008%2F10%2F12%2Fpdo-php-data-objects%2F&amp;linkname=PDO%20%28PHP%20Data%20Objects%29%26%238230%3B"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2008/10/12/pdo-php-data-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FirePHP&#8230;</title>
		<link>http://cachi.temiga.org/2008/08/13/firephp/</link>
		<comments>http://cachi.temiga.org/2008/08/13/firephp/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 02:10:41 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Planeta Linux]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/2008/08/13/firephp/</guid>
		<description><![CDATA[Para todo desarrollador que realice labores orientada a la web no puede faltar la &#8220;archi&#8221; conocida extensión de firefox Firebug adorada por muchos por el grado de ayuda que esta puede ofrecer en todo lo referente a tecnologias del lado cliente (HTML, CSS, JavaScript =&#62; Debug). Pero no faltaba mas ahora tenemos un derivado de]]></description>
			<content:encoded><![CDATA[<p>Para todo desarrollador que realice labores orientada a la web no puede faltar la &#8220;archi&#8221; conocida extensión de firefox <a href="http://es.wikipedia.org/wiki/Firebug" title="Firebug" target="_blank">Firebug</a> adorada por muchos por el grado de ayuda que esta puede ofrecer en todo lo referente a tecnologias del lado cliente (HTML, CSS, JavaScript =&gt; Debug).</p>
<p>Pero no faltaba mas ahora tenemos un derivado de esta iniciativa, pero ahora dando ayuda del lado servidor con lenguaje como <a href="http://en.wikipedia.org/wiki/PHP" title="PHP" target="_blank">PHP</a>, :-) sin duda que una gran herramienta para realizar Debug (a quienes les guste, yo soy un adicto a esa práctica), he realizado unas pruebas y los resultados son impresionantes todo lo que esta extensión puede hace.</p>
<p style="text-align: center"><img src="http://www.firephp.org/images/Screenshots/Sample1a.png" height="457" width="422" /></p>
<p>Para su descarga e instalación pueden visitar el sitio oficial <a href="http://www.firephp.org/" title="FirePHP" target="_blank">FirePHP &#8211; Firebug Extension</a> el cual trae un demo bien pragmatico de la extensión&#8230;</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2008%2F08%2F13%2Ffirephp%2F&amp;linkname=FirePHP%26%238230%3B"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2008/08/13/firephp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
