
<?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>nafiux.com Blog</title>
	<atom:link href="http://nafiux.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://nafiux.com/blog</link>
	<description>Tecnología - Ciencia - Naturaleza</description>
	<lastBuildDate>Mon, 22 Aug 2011 00:02:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
<meta xmlns="http://www.w3.org/1999/xhtml" name="robots" content="noindex,follow" />
		<item>
		<title>Aumentar tamaño de Partición en VirtualBox</title>
		<link>http://nafiux.com/blog/2011/08/21/aumentar-tamano-de-particion-en-virtualbox/</link>
		<comments>http://nafiux.com/blog/2011/08/21/aumentar-tamano-de-particion-en-virtualbox/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 00:02:57 +0000</pubDate>
		<dc:creator>Ignacio Ocampo</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://nafiux.com/blog/?p=440</guid>
		<description><![CDATA[Si alguna ves te pasó (como a mí) que instalé Windows 7 (o cualquier S.O.) con una espacio en Disco<a href="http://nafiux.com/blog/2011/08/21/aumentar-tamano-de-particion-en-virtualbox/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<p>Si alguna ves te pasó (como a mí) que instalé Windows 7 (o cualquier S.O.) con una espacio en Disco Duro reducido para hacer pruebas, y después de trabajar mucho te das cuenta que el espacio ya no te alcanzo, lo menos que quieres hacer es volver a instalarlo con todas las aplicaciones y configuración nuevamente.</p>
<p>La solución es la siguiente:</p>
<ol>
<li>Añade un disco con mayor capacidad a tu Máquina Virtual (aparte del que ya tienes instalado, por ejemplo, mi disco duro virtual era de 20GB, le agregué otro de 50GB)</li>
<li>Descarga la última versión del LiveCD de GParted (http://gparted.sourceforge.net/)</li>
<li>Configurar la máquina Virtual, para que inicie desde el CD (debes configurar al CD para que cargue la imagen de GParted)</li>
<li>Configuración en GParted
<ol>
<li>En el nuevo disco duro, crea una nueva partición de tipo MSDOS</li>
<li>Del primer disco duro (el de menor capacidad) copia cada partición y pégala en el nuevo disco duro</li>
</ol>
</li>
<li>En la máquina Virtual, remueve el disco duro anterior (no lo elimines aún por seguridad)</li>
<li>Pone el disco duro como primera opción de arranque</li>
</ol>
<p>Es probable, que cuando inicies la máquina el S.O. (en mi caso con Windows 7) marcó un error de Boot, ya que normalmente una instalación tiene 2 particiones (una es el boot y la otra el espacio de almacenamiento en si), para reparar eso, inicia la máquina virtual desde una imagen ISO de Windows 7 y en lugar de instalar da clic en la opción de Reparar, automáticamente detectará el error, te pedirá reiniciar y listo.</p>
<p>Ahora disfruto de 20 GB libres <img src='http://nafiux.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>La misma explicación pero en Inglés y con imágenes: http://www.my-guides.net/en/content/view/122/26/</p>
]]></content:encoded>
			<wfw:commentRss>http://nafiux.com/blog/2011/08/21/aumentar-tamano-de-particion-en-virtualbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virus USB: Archivos Ocultos y Accesos Directos (.lnk)</title>
		<link>http://nafiux.com/blog/2011/06/05/virus-usb-archivos-ocultos-y-accesos-directos-lnk/</link>
		<comments>http://nafiux.com/blog/2011/06/05/virus-usb-archivos-ocultos-y-accesos-directos-lnk/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 04:59:25 +0000</pubDate>
		<dc:creator>Ignacio Ocampo</dc:creator>
				<category><![CDATA[Soporte Técnico]]></category>
		<category><![CDATA[accesos directos]]></category>
		<category><![CDATA[archivos ocultos]]></category>
		<category><![CDATA[carpetas ocultas]]></category>
		<category><![CDATA[virus usb]]></category>

		<guid isPermaLink="false">http://nafiux.com/blog/?p=310</guid>
		<description><![CDATA[Existe un virus muy común que afecta a Dispositivos de Almacenamientos USB para Sistemas Operativos Windows, que oculta los archivos<a href="http://nafiux.com/blog/2011/06/05/virus-usb-archivos-ocultos-y-accesos-directos-lnk/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<div id="attachment_318" class="wp-caption alignright" style="width: 58px"><a href="http://nafiux.com/blog/wp-content/plugins/download-monitor/download.php?id=1"><img class="size-full wp-image-318 " title="download" src="http://nafiux.com/blog/wp-content/uploads/2011/06/download.gif" alt="" width="48" height="44" /></a><p class="wp-caption-text">Clic para descargar herramienta</p></div>
<p>Existe un virus muy común que afecta a Dispositivos de Almacenamientos USB para Sistemas Operativos Windows, que oculta los archivos y carpetas y genera muchos archivos de accesos directo (.lnk).</p>
<p>Hice un Script en VBScript (archivo .vbs) que de manera automática restaura los archivos que el virus ocultó y elimina los archivos de acceso directo (.lnk).</p>
<p>Para utilizar el Script, debes descargar el archivo, descomprimirlo y copiar el archivo que se llama HerramientaArchivos.vbs a la USB (Dispositivo de Almacenamiento), <strong>una vez que el archivo está en la memoria</strong> (en la raíz), solo debes ejecutarlo (Darle doble clic)</p>
<p>El Script es seguro, si deseas ver el contenido puedes abrirlo con el Bloc de Notas. Te agradecería reportaras si algo no te funciona o si haces una mejora al Script para compartira con la comunidad.</p>
<p><span id="more-310"></span></p>
<p><strong>Más sobre el virus</strong></p>
<p>Los Antivirus son capaces de detectar el Virus y removerlo, pero no eliminan los archivos de acceso directo ni muestran los archivos y carpetas que el virus ocultó.</p>
<p>El Virus, agrega atributos S (System), H (Hidden), R (Read-Only) a los archivos y carpetas para ocultarlos.</p>
<p>El procedimiento para verlos nuevamente es eliminar los archivos de acceso directo (.lnk) y habilitar en el explorador de Windows la visa de Archivos y Carpetas Ocultos y del Sistema, una vez que los archivos ya se ven, abres el diálogo de Propiedades de Cada uno y deshabilitas los atributos S, H, R.</p>
]]></content:encoded>
			<wfw:commentRss>http://nafiux.com/blog/2011/06/05/virus-usb-archivos-ocultos-y-accesos-directos-lnk/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>CakePHP: View to PDF</title>
		<link>http://nafiux.com/blog/2011/05/31/cakephp-view-to-pdf/</link>
		<comments>http://nafiux.com/blog/2011/05/31/cakephp-view-to-pdf/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 05:54:14 +0000</pubDate>
		<dc:creator>Ignacio Ocampo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[dompdf]]></category>

		<guid isPermaLink="false">http://nafiux.com/blog/?p=292</guid>
		<description><![CDATA[I was working on a system that needed generate a PDF report of a view, I solved it as follows:<a href="http://nafiux.com/blog/2011/05/31/cakephp-view-to-pdf/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<p>I was working on a system that needed generate a PDF report of a view, I solved it as follows:</p>
<pre class="brush: php; title: ; notranslate">
function report_view() {
	...
	$this-&gt;render();
	require_once ('vendors/dompdf/dompdf_config.inc.php'); // import dompdf library
	$dompdf = new DOMPDF();
	$dompdf-&gt;load_html($this-&gt;output);
	$dompdf-&gt;set_paper(&quot;a4&quot;, &quot;landscape&quot; );
	$dompdf-&gt;render();
	$dompdf-&gt;stream('ReportExample_'.date('d_M_Y').'.pdf');
	exit(0);
}
</pre>
<p>You can see, that I used &#8220;$this-&gt;output&#8221; as parameter of load_html to get the output of the view.</p>
<p>I used the <a title="dompdf" href="http://code.google.com/p/dompdf/" target="_blank">dompdf</a> library.</p>
]]></content:encoded>
			<wfw:commentRss>http://nafiux.com/blog/2011/05/31/cakephp-view-to-pdf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bayes &amp; Árboles de desición</title>
		<link>http://nafiux.com/blog/2011/05/05/bayes-arboles-de-desicion/</link>
		<comments>http://nafiux.com/blog/2011/05/05/bayes-arboles-de-desicion/#comments</comments>
		<pubDate>Fri, 06 May 2011 01:01:12 +0000</pubDate>
		<dc:creator>Ignacio Ocampo</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Graphviz]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[webdot]]></category>

		<guid isPermaLink="false">http://nafiux.com/blog/?p=282</guid>
		<description><![CDATA[Desarrollé una aplicación en linea para generar y calcular Árboles de Desición sin experimentación, Probabilidades conjuntas, Eventos reducidos, Probabilidades A Posteriori,<a href="http://nafiux.com/blog/2011/05/05/bayes-arboles-de-desicion/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<p>Desarrollé una aplicación en linea para generar y calcular Árboles de Desición sin experimentación, Probabilidades conjuntas, Eventos reducidos, Probabilidades A Posteriori, a partir de datos introducidos por el usuario.</p>
<div id="attachment_283" class="wp-caption alignnone" style="width: 310px"><a href="http://nafiux.com/blog/wp-content/uploads/2011/05/765bfe95f5b82f4bc884589147187b54_adse.dot_.png"><img class="size-medium wp-image-283" src="http://nafiux.com/blog/wp-content/uploads/2011/05/765bfe95f5b82f4bc884589147187b54_adse.dot_-300x177.png" alt="" width="300" height="177" /></a><p class="wp-caption-text">Árbol de probabilidades sin experimentación</p></div>
<p><span id="more-282"></span></p>
<div id="attachment_284" class="wp-caption alignnone" style="width: 310px"><a href="http://nafiux.com/blog/wp-content/uploads/2011/05/765bfe95f5b82f4bc884589147187b54_adcec.dot_.png"><img class="size-medium wp-image-284" src="http://nafiux.com/blog/wp-content/uploads/2011/05/765bfe95f5b82f4bc884589147187b54_adcec.dot_-300x182.png" alt="" width="300" height="182" /></a><p class="wp-caption-text">Probabilidades conjuntas</p></div>
<div id="attachment_285" class="wp-caption alignnone" style="width: 310px"><a href="http://nafiux.com/blog/wp-content/uploads/2011/05/765bfe95f5b82f4bc884589147187b54_adceer.dot_.png"><img class="size-medium wp-image-285" src="http://nafiux.com/blog/wp-content/uploads/2011/05/765bfe95f5b82f4bc884589147187b54_adceer.dot_-300x64.png" alt="" width="300" height="64" /></a><p class="wp-caption-text">Eventos reducidos</p></div>
<div id="attachment_286" class="wp-caption alignnone" style="width: 310px"><a href="http://nafiux.com/blog/wp-content/uploads/2011/05/765bfe95f5b82f4bc884589147187b54_aposteriori.dot_.png"><img class="size-medium wp-image-286" src="http://nafiux.com/blog/wp-content/uploads/2011/05/765bfe95f5b82f4bc884589147187b54_aposteriori.dot_-300x83.png" alt="" width="300" height="83" /></a><p class="wp-caption-text">A Posteriori</p></div>
<h2>Para acceder a la aplicación da clic <a title="Bayes &amp; Árboles de desición" href="http://www.desarrollointeractivo.com/personal/ITESM/django/arboldesicion/">aquí.</a></h2>
<p>Bienvenidas las sugerencias de mejora de la aplicación.</p>
<p>Desarrollada en Python 2.7.1 (POO), la interfaz web con el Framework Django, y la generación de árboles y gráficas con webdot de Graphviz.</p>
<p>Pronto publicaré un tutorial de introducción para aplicaciones Web MVC (Modelo Vista Controlador) con el Framework Django.</p>
]]></content:encoded>
			<wfw:commentRss>http://nafiux.com/blog/2011/05/05/bayes-arboles-de-desicion/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tour: Tehuixtla &#8211; Cajones &#8211; Tehuixtla</title>
		<link>http://nafiux.com/blog/2011/03/21/tour-tehuixtla-cajones-tehuixtla/</link>
		<comments>http://nafiux.com/blog/2011/03/21/tour-tehuixtla-cajones-tehuixtla/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 19:13:09 +0000</pubDate>
		<dc:creator>Ignacio Ocampo</dc:creator>
				<category><![CDATA[Ciclismo]]></category>
		<category><![CDATA[Naturaleza]]></category>
		<category><![CDATA[Cajones]]></category>
		<category><![CDATA[El Estudiante]]></category>
		<category><![CDATA[Puente de Ixtla]]></category>
		<category><![CDATA[Tehuixtla]]></category>
		<category><![CDATA[Tequesquitengo]]></category>

		<guid isPermaLink="false">http://nafiux.com/blog/?p=180</guid>
		<description><![CDATA[<h2>Ruta: Tehuixtla - Tequesquitengo - Puente de Ixtla - Cajones - El Estudiante - Tehuixtla</h2>
<strong>Distancia: 38 Kilómetros</strong>
<span style="text-decoration: underline;"><strong>Integrantes:</strong></span>
<ul>
	<li>Chava Ruiz</li>
	<li>Juan Albarrán</li>
	<li>Ignacio Ocampo</li>
</ul>


[caption id="attachment_264" align="alignnone" width="300" caption="Los integrantes"]<a href="http://nafiux.com/blog/wp-content/uploads/2011/03/DSC01672.jpg"><img class="size-medium wp-image-264" src="http://nafiux.com/blog/wp-content/uploads/2011/03/DSC01672-300x225.jpg" alt="" width="300" height="225" /></a>[/caption]
]]></description>
			<content:encoded><![CDATA[<h2>Ruta: Tehuixtla &#8211; Tequesquitengo &#8211; Puente de Ixtla &#8211; Cajones &#8211; El Estudiante &#8211; Tehuixtla</h2>
<p><strong>Distancia: 38 Kilómetros</strong><br />
<span style="text-decoration: underline;"><strong>Integrantes:</strong></span></p>
<ul>
<li>Chava Ruiz</li>
<li>Juan Albarrán</li>
<li>Ignacio Ocampo</li>
<li>Luis Manuel Figueroa</li>
<li>Luis Figueroa</li>
</ul>
<div id="attachment_264" class="wp-caption alignnone" style="width: 310px"><a href="http://nafiux.com/blog/wp-content/uploads/2011/03/DSC01672.jpg"><img class="size-medium wp-image-264" src="http://nafiux.com/blog/wp-content/uploads/2011/03/DSC01672-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Los integrantes</p></div>
<p><span id="more-180"></span></p>
<h3>Tour animado</h3>
<div id="map3d" style="height: 400px; width: 600px;"></div>
<h3>Polígono de ruta</h3>
<div id="map3d_poligono" style="height: 400px; width: 600px;"></div>
<script type='text/javascript' src='https://www.google.com/jsapi?key=ABQIAAAA0EIFy3KCa4ah5mG_T7ZZWRSGN9fDUTG8UpAwpGsA-D7ZpyU6exQlVmNawy1EbiMx7RjJHGljmkhK-Q'></script><br />
<script type='text/javascript'> 
var ge, ge2; 
google.load("earth", "1"); 
 function init() { 
google.earth.createInstance('map3d', initCB, failureCB); 
google.earth.createInstance('map3d_poligono', initCB2, failureCB); 
} 
 function initCB(instance) { 
ge = instance; 
ge.getWindow().setVisibility(true); 
ge.getNavigationControl().setVisibility(ge.VISIBILITY_SHOW); 
 var href = 'http://nafiux.com/blog/wp-content/uploads/2011/03/Tour_Tehuixtla_Cajones.kml'; 
google.earth.fetchKml(ge, href, kmlFinishedLoading); 
} 
 function initCB2(instance) { 
ge2 = instance; 
ge2.getWindow().setVisibility(true); 
ge2.getNavigationControl().setVisibility(ge2.VISIBILITY_SHOW); 
 var href = 'http://nafiux.com/blog/wp-content/uploads/2011/03/Tour_Tehuixtla_Cajones_Poligono.kml'; 
google.earth.fetchKml(ge2, href, function(kmlObject) { 
if (kmlObject) { 
ge2.getFeatures().appendChild(kmlObject); 
if (kmlObject.getAbstractView()) 
ge2.getView().setAbstractView(kmlObject.getAbstractView()); 
} 
}); 
} 
 function kmlFinishedLoading(object) { 
ge.getTourPlayer().setTour(object); 
ge.getTourPlayer().play(); 
} 
 function failureCB(errorCode) { 
} 
 google.setOnLoadCallback(init); 
</script>
<div id="attachment_262" class="wp-caption alignnone" style="width: 310px"><a href="http://nafiux.com/blog/wp-content/uploads/2011/03/DSC01669.jpg"><img class="size-medium wp-image-262" src="http://nafiux.com/blog/wp-content/uploads/2011/03/DSC01669-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">La vista del lago</p></div>
<div id="attachment_264" class="wp-caption alignnone" style="width: 310px"><a href="http://nafiux.com/blog/wp-content/uploads/2011/03/DSC01672.jpg"><img class="size-medium wp-image-264" src="http://nafiux.com/blog/wp-content/uploads/2011/03/DSC01672-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Los integrantes</p></div>
<div id="attachment_263" class="wp-caption alignnone" style="width: 310px"><a href="http://nafiux.com/blog/wp-content/uploads/2011/03/DSC01671.jpg"><img class="size-medium wp-image-263" src="http://nafiux.com/blog/wp-content/uploads/2011/03/DSC01671-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Los Figueroa</p></div>
<div id="attachment_265" class="wp-caption alignnone" style="width: 310px"><a href="http://nafiux.com/blog/wp-content/uploads/2011/03/DSC01675.jpg"><img class="size-medium wp-image-265" src="http://nafiux.com/blog/wp-content/uploads/2011/03/DSC01675-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Cruzando un sendero con raíces de Amates</p></div>
<div id="attachment_267" class="wp-caption alignnone" style="width: 235px"><a href="http://nafiux.com/blog/wp-content/uploads/2011/03/DSC01680.jpg"><img class="size-medium wp-image-267" src="http://nafiux.com/blog/wp-content/uploads/2011/03/DSC01680-225x300.jpg" alt="" width="225" height="300" /></a><p class="wp-caption-text">Parada técnica en el puente de la vieja vía del tren</p></div>
]]></content:encoded>
			<wfw:commentRss>http://nafiux.com/blog/2011/03/21/tour-tehuixtla-cajones-tehuixtla/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Analizador de expresiones regulares</title>
		<link>http://nafiux.com/blog/2011/02/21/analizador-de-expresiones-regulares/</link>
		<comments>http://nafiux.com/blog/2011/02/21/analizador-de-expresiones-regulares/#comments</comments>
		<pubDate>Tue, 22 Feb 2011 01:59:33 +0000</pubDate>
		<dc:creator>Ignacio Ocampo</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[NFA]]></category>
		<category><![CDATA[Parser Tree]]></category>
		<category><![CDATA[RE]]></category>

		<guid isPermaLink="false">http://nafiux.com/blog/?p=151</guid>
		<description><![CDATA[Desarrollé una aplicación interactiva en línea, para analizar expresiones regulares, en esta primera versión convierte una expresión regular en un<a href="http://nafiux.com/blog/2011/02/21/analizador-de-expresiones-regulares/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<p>Desarrollé una aplicación interactiva en línea, para analizar expresiones regulares, en esta primera versión convierte una expresión regular en un parser tree, y el parser tree en un NFA-e (autómata finito no determinístico con transiciones épsilon).</p>
<p>La intención es hacer una herramienta didáctica que permita comprender el proceso. En la siguiente fase pretendo convertir el NFA-e a un DFA (autómata finito determinístico).</p>
<div id="attachment_119" class="wp-caption alignright" style="width: 265px"><a href="http://nafiux.com/blog/wp-content/uploads/2011/02/Screen-shot-2011-02-19-at-6.03.29-PM.png"><img class="size-full wp-image-119" title="Parse Tree" src="http://nafiux.com/blog/wp-content/uploads/2011/02/Screen-shot-2011-02-19-at-6.03.29-PM.png" alt="" width="255" height="212" /></a><p class="wp-caption-text">Parse Tree for (a|b)*abb</p></div>
<p>Para hacer la conversión, utilicé un enfoque top-down.</p>
<p>Las reglas de producción son las siguiente:</p>
<p>char = caracter alfanumérico</p>
<p>atom = char | &#8216;(&#8216; expr &#8216;)&#8217;</p>
<p>rep = atom &#8216;*&#8217; | atom &#8216;?&#8217; | atom</p>
<p>concat = rep &#8216;.&#8217; concat | rep</p>
<p>expr = concat &#8216;|&#8217; expr | concat</p>
<p><a href="http://nafiux.com/blog/proyectos/regular-expression-parser/">Ir a la página del proyecto</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nafiux.com/blog/2011/02/21/analizador-de-expresiones-regulares/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simplificación de código en PHP</title>
		<link>http://nafiux.com/blog/2011/01/16/simplificacion-de-codigo-en-php/</link>
		<comments>http://nafiux.com/blog/2011/01/16/simplificacion-de-codigo-en-php/#comments</comments>
		<pubDate>Sun, 16 Jan 2011 10:18:43 +0000</pubDate>
		<dc:creator>Ignacio Ocampo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://nafiux.com/blog/?p=75</guid>
		<description><![CDATA[Simplificar el código (en cualquier lenguaje de programación) ayuda no solo al rendimiento del programa, sino que también facilita la<a href="http://nafiux.com/blog/2011/01/16/simplificacion-de-codigo-en-php/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<p>Simplificar el código (en cualquier lenguaje de programación) ayuda no solo al rendimiento del programa, sino que también facilita la comprensión del mismo. (Claro que siempre debe ir acompañado de una buena documentación)</p>
<p><strong>1) IF (estructura de control)</strong></p>
<p style="padding-left: 30px;"><strong><span style="color: #0000ff;">Varias Expresiones</span></strong> (ejemplo no simplificado)</p>
<pre class="brush: php; title: ; notranslate">
if(isset($_GET['accion'])) {
     if($_GET['accion'] == 'agregar') { //Acción... }
}
</pre>
<p style="padding-left: 30px;">Ejemplo simplificado</p>
<pre class="brush: php; title: ; notranslate">
if(isset($_GET['accion']) &amp;&amp; $_GET['accion'] == 'agregar') { //Acción... }
</pre>
<p><span id="more-75"></span></p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;"><em>Explicación</em></span>: El primer caso hace una comparación primero de la existencia de la variable &#8220;accion&#8221; dentro del arreglo $_GET (por medio de la función isset), posteriormente se verifica si el valor de la acción $_GET['accion'] es igual a &#8220;agregar&#8221;, los resultados esperados son correctos, sin embargo, en el segundo ejemplo se muestra cómo la comparación se puede hacer en una sola línea (ahorrando así llaves para delimitar bloques de códigos y espacio), la expresión está compuesta por dos sentencias unidas por un and (&amp;&amp;), se empiezan a evaluar de izquierda a derecha y si alguna no se cumple, el IF termina su comprobación, sin entrar a ejecutar el código.</p>
<p style="padding-left: 30px;">Es importante saber esto, ya que muchas veces, si no hacemos la previa comparación con isset, e intentamos obtener el valor, PHP genera un error como el siguiente: <em><strong>Notice: Undefined index: accion</strong></em>, y nos hace creer que debemos separar el análisis en 2 IF (uno para verificar la existencia de la variable &#8220;accion&#8221; dentro de $_GET y otro IF para verificar el contenido de la variable $_GET["accion"], como en el ejempo no simplificado)</p>
<p style="padding-left: 30px;"><strong><span style="color: #0000ff;">Operador ? : </span></strong>(ejemplo no simplificado)</p>
<pre class="brush: php; title: ; notranslate">
$tipoPersona = &quot;&quot;;
if($edad &gt;= 18) {
     $tipoPersona = &quot;adulto&quot;;
} else {
     $tipoPersona = &quot;menor&quot;;
}
</pre>
<p style="padding-left: 30px;">Ejemplo simplificado</p>
<pre class="brush: php; title: ; notranslate">
$tipoPersona = ($edad &gt; 18)?&quot;adulto&quot;:&quot;menor&quot;;
</pre>
<p style="padding-left: 30px;"><em><span style="text-decoration: underline;">Explicación</span></em>: El operador ? : permite realizar sentencias IF en una sola linea, la sintaxis es la siguiente: <strong>resultado = (expresion_de_comparacion)?valor_si_verdadero:valor_si_falso</strong>, incluso se pueden realizar comparaciones anidadas en una sola linea, ejemplo:</p>
<pre class="brush: php; title: ; notranslate">
$pasarExamen = ($estudie_mucho == true)?true:($soy_inteligente==true)?true:false;
</pre>
<p><strong>2) Comparación de Arrays dentro de Ciclos For/While</strong></p>
<p>Seguramente te has topado con un código como el siguiente:</p>
<pre class="brush: php; title: ; notranslate">
$arreglo = array(&quot;color&quot; =&gt; &quot;rojo&quot;,
                 &quot;puertas&quot; =&gt; &quot;2&quot;,
                 &quot;precio&quot; =&gt; &quot;3500&quot;,
                 &quot;transmision&quot; =&gt; &quot;estandar&quot;,
                 &quot;garantia&quot; =&gt; &quot;2 años&quot;);
foreach($arreglo as $key =&gt; $value) {
     if($key != &quot;precio&quot; &amp;&amp; $key != &quot;garantia&quot;) {
          echo $key.&quot; = &quot;.$value;
     }
}
</pre>
<p style="padding-left: 30px;">El código anterior imprime la llave y valor de cada elemento del $arreglo, siempre y cuando, la llave no sea igual a &#8220;precio&#8221; y &#8220;garantia&#8221;, entonces, si tuviéramos un arreglo de 1000 elementos, en cada ciclo del FOR se haría la comparación de la llave, una forma de optimizar esto es:</p>
<pre class="brush: php; title: ; notranslate">
$arreglo_filtrado = array_diff_key($arreglo, array(&quot;precio&quot; =&gt; &quot;&quot;, &quot;garantia&quot; =&gt; &quot;&quot;));
foreach($arreglo_filtrado as $key =&gt; $value) {
     echo $key.&quot; = &quot;.$value;
}
</pre>
<p style="padding-left: 30px;">Con esto, filtramos primero las llaves del arreglo que queremos excluir (<a href="http://www.php.net/manual/es/function.array-diff-key.php">más información sobre la función array_diff_key</a>) y posteriormente recorremos cada elemento del $arreglo_filtrado, notemos que no debe realizarse ninguna comparación, puesto que con el filtrado inicial, nos deshicimos de los elementos que no queriamos mostrar en el ciclo FOR.</p>
]]></content:encoded>
			<wfw:commentRss>http://nafiux.com/blog/2011/01/16/simplificacion-de-codigo-en-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Paginación de resultados con Php y MySql</title>
		<link>http://nafiux.com/blog/2010/10/04/paginacion-de-resultados-con-php-y-mysql/</link>
		<comments>http://nafiux.com/blog/2010/10/04/paginacion-de-resultados-con-php-y-mysql/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 03:07:57 +0000</pubDate>
		<dc:creator>Ignacio Ocampo</dc:creator>
				<category><![CDATA[Base de Datos]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://nafiux.com/blog/?p=55</guid>
		<description><![CDATA[Ejemplo práctico de paginación de resultados en Php]]></description>
			<content:encoded><![CDATA[<p>Ejemplo práctico de paginación de resultados en Php</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
mysql_connect(&quot;localhost&quot;, &quot;root&quot;, &quot;&quot;);
mysql_select_db(&quot;dev&quot;);
$noRegistros = 3; //Registros por página
$pagina = 1; //Por default, página = 1
if($_GET[&quot;pagina&quot;]) //Si hay página por ?pagina=valor, lo asigna
    $pagina = $_GET[&quot;pagina&quot;];
echo &quot;Pagina: &quot;.$pagina.&quot;&lt;hr&gt;&quot;;

//Utilizo el comando LIMIT para seleccionar registros
$sSQL = &quot;SELECT * FROM alumnos LIMIT &quot;.($pagina-1)*$noRegistros.&quot;,$noRegistros&quot;;
$result = mysql_query($sSQL) or die(mysql_error());
while($row = mysql_fetch_array($result)) { //Exploracion comun de registros
    echo $row[&quot;nombre&quot;].&quot;&lt;br&gt;&quot;;
}

//Imprimiendo páginas
$sSQL = &quot;SELECT count(*) FROM alumnos&quot;; //Cuento el total de registros
$result = mysql_query($sSQL);
$row = mysql_fetch_array($result);
$totalRegistros = $row[&quot;count(*)&quot;]; //Almaceno el total en una variable

echo &quot;&lt;hr&gt;Total registros: &quot;.$totalRegistros.&quot;, Pagina: &quot;;

$noPaginas = $totalRegistros/$noRegistros; //Determino la cantidad de páginas
for($i=1; $i&lt;$noPaginas+1; $i++) { //Imprimo las páginas
    if($i == $pagina)
        echo &quot;$i &quot;; //A la página actual no le pongo link
    else
        echo &quot;&lt;a href=\&quot;?pagina=&quot;.$i.&quot;\&quot;&gt;&quot;.$i.&quot;&lt;/a&gt; &quot;;
}
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://nafiux.com/blog/2010/10/04/paginacion-de-resultados-con-php-y-mysql/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>JQuery: Ventana Interna al cargar la página</title>
		<link>http://nafiux.com/blog/2010/05/22/jquery-ventana-interna/</link>
		<comments>http://nafiux.com/blog/2010/05/22/jquery-ventana-interna/#comments</comments>
		<pubDate>Sat, 22 May 2010 15:32:03 +0000</pubDate>
		<dc:creator>Ignacio Ocampo</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://nafiux.com/blog/?p=16</guid>
		<description><![CDATA[Hola! Aquí les dejo un ejemplo de cómo mostrar un PopUP interno, al cargar la página, para eso, utilizamos 3<a href="http://nafiux.com/blog/2010/05/22/jquery-ventana-interna/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<p>Hola! Aquí les dejo un ejemplo de cómo mostrar un <strong>PopUP interno</strong>, al cargar la página, para eso, utilizamos 3 elementos importantes:</p>
<ul>
<li>JavaScript</li>
<li>JQuery (Es un framework para JavaScript que nos facilita el trabajo de codificación, entre otras cosas nos permite hacer transiciones tipo fadeIn fadeOut en Alpha de Objetos, <a href="http://jquery.com/" target="_blank">página oficial de JQuery</a>)</li>
<li>CSS</li>
</ul>
<p><span id="more-16"></span></p>
<p>Primero, debemos insertar las librerías de JQuery dentro de la etiqueta <strong>head</strong> del código <strong>html</strong>:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; dir=&quot;ltr&quot;&gt;
  &lt;head&gt;
    &lt;script src=&quot;http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
  &lt;/head&gt;
&lt;/html&gt;
</pre>
<p>El siguiente paso es definir algunos <strong>&lt;div&gt;</strong> en el código html dentro de la etiqueta <strong>body </strong>que vamos a utilizar para el ejemplo:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;body&gt;
  &lt;p&gt;Aqui el contenido normal de la pagina&lt;/p&gt;
  &lt;div id=&quot;ventanaPopup1&quot;&gt;
    &lt;a id=&quot;ventanaPopup1Cerrar&quot;&gt;x&lt;/a&gt;
    &lt;h1&gt;Ejemplo de Popup Interno&lt;/h1&gt;
    &lt;p&gt;
    Esto es una manera sencilla de mostrar información reelevante a los usuarios cuando entran a la página.
    &lt;br/&gt;&lt;br/&gt;
    Incluso podemos mostrar popups para formularios, videos, imanenes, entre otras cosas
    &lt;br/&gt;&lt;br/&gt;
    Click en X (superior-derecha) o Click fuera de la ventana para cerrar la popUp
    &lt;br/&gt;&lt;br/&gt;
    &lt;a href=&quot;http://www.nafiux.com&quot;&gt;Nafiux&lt;/a&gt;
    &lt;/p&gt;
  &lt;/div&gt;
  &lt;div id=&quot;ventanaPopup1Fondo&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
</pre>
<p>Como pueden ver, utilizamos etiquetas <strong>div </strong>para estructurar la información, la etiqueta principal se llama <strong>ventanaPopup1</strong> (este div tiene el contenido del popup) dentro tiene otro div llamado <strong>ventanaPopup1Cerrar</strong> (cuando el usuario de clic en este div, la popup será cerrada) y finalmente (fuera del div <strong>ventanaPopup1</strong>) tenemos a <strong>ventanaPopup1Fondo</strong> este div es el que ocupamos para poner el resto de la página en negro mientras cargamos el contenido.</p>
<p>El siguiente paso es configurar los estilos de los div (con css), este código es conveniente ponerlo dentro de la etiqueta <strong>&lt;header&gt;</strong>:</p>
<pre class="brush: css; title: ; notranslate">
&lt;style type=&quot;text/css&quot;&gt;
#ventanaPopup1Fondo{
display:none;
position:fixed;
_position:absolute; /* caso especial para IE 6*/
height:100%;
width:100%;
top:0;
left:0;
background:#000000;
border:1px solid #cecece;
z-index:1;
}
#ventanaPopup1{
display:none;
position:fixed;
_position:absolute; /* caso especial para IE 6*/
height:384px;
width:408px;
background:#FFFFFF;
border:2px solid #cecece;
z-index:2;
padding:12px;
font-size:13px;
}
#ventanaPopup1Cerrar{
font-size:14px;
line-height:14px;
right:6px;
top:4px;
position:absolute;
color:#6fa5fd;
font-weight:700;
display:block;
}
&lt;/style&gt;
</pre>
<p>Las hojas de estilo en cascada (CSS) nos permiten diseñar etiquetas de código html fácilmente, si no estás muy familiarizado te recomiendo <a href="http://www.w3schools.com/css/" target="_blank">leer este manual de w3schools</a>.</p>
<p>Es hora de configurar los eventos con JQuery, para eso, debemos insertar más codigo JavaScript dentro de la etiqueta <strong>header</strong>:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
//Configuramos el evento de carga de página, se ejecuta solamente 1 vez cuando la página cargo por completo
$(document).ready(function(){
  centraVentana();
  muestraVentana();
  //Agregamos el evento &quot;click&quot; del div: ventanaPopup1Cerrar
  $(&quot;#ventanaPopup1Cerrar&quot;).click(function(){
    ocultaVentana();
  });
  //Agregamos el evento &quot;click&quot; del div: ventanaPopup1Fondo
  $(&quot;#ventanaPopup1Fondo&quot;).click(function(){
    ocultaVentana();
  });
});

function centraVentana() {
	//Obtenemos ancho y alto del navegador, y alto y ancho de la popUp
	var windowWidth = document.documentElement.clientWidth;
	var windowHeight = document.documentElement.clientHeight;
	var popupHeight = $(&quot;#ventanaPopup1&quot;).height();
	var popupWidth = $(&quot;#ventanaPopup1&quot;).width();
	//centering
	$(&quot;#ventanaPopup1&quot;).css({
		&quot;position&quot;: &quot;absolute&quot;,
		&quot;top&quot;: windowHeight/2-popupHeight/2,
		&quot;left&quot;: windowWidth/2-popupWidth/2
	});

	//Solo se necesita para IE6
	$(&quot;#ventanaPopup1Fondo&quot;).css({
		&quot;height&quot;: windowHeight
	});
}

function ocultaVentana() {
	$(&quot;#ventanaPopup1Fondo&quot;).fadeOut(&quot;slow&quot;);
	$(&quot;#ventanaPopup1&quot;).fadeOut(&quot;slow&quot;);
}

function muestraVentana() {
	$(&quot;#ventanaPopup1Fondo&quot;).css({
		&quot;opacity&quot;: &quot;0.7&quot;
	});
	$(&quot;#ventanaPopup1Fondo&quot;).fadeIn(&quot;slow&quot;);
	$(&quot;#ventanaPopup1&quot;).fadeIn(&quot;slow&quot;);
}
&lt;/script&gt;
</pre>
<p>Les dejo el ejemplo completo de la página: <a href="http://nafiux.com/blog/wp-content/uploads/2010/05/JQuery_ventana_interna_cargar.html" target="_blank">JQuery_ventana_interna_cargar</a></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 198px; width: 1px; height: 1px; overflow: hidden;">
<pre>ventanaPopup1</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://nafiux.com/blog/2010/05/22/jquery-ventana-interna/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Mantener identación en RichTextBox C# .Net</title>
		<link>http://nafiux.com/blog/2010/05/02/mantener-identacion-en-richtextbox-c-net/</link>
		<comments>http://nafiux.com/blog/2010/05/02/mantener-identacion-en-richtextbox-c-net/#comments</comments>
		<pubDate>Mon, 03 May 2010 01:45:45 +0000</pubDate>
		<dc:creator>Ignacio Ocampo</dc:creator>
				<category><![CDATA[C# .Net]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://nafiux.com/blog/?p=9</guid>
		<description><![CDATA[Cuando estamos haciendo algún tipo de editor de texto plano, nos topamos muchas veces con el problema de la identación,<a href="http://nafiux.com/blog/2010/05/02/mantener-identacion-en-richtextbox-c-net/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<p>Cuando estamos haciendo algún tipo de editor de texto plano, nos topamos muchas veces con el problema de la identación, y es que cuando presionamos enter, la siguiente linea comienza de la posición 1, es decir, sin respetar los espacios ni tabuladores que hay en la linea actual. Esto es un problema, porque manualmente tenemos que hacer el espaciado, además de incómodo.</p>
<p>La solución que propongo es la siguiente:</p>
<ol>
<li>Buscamos el próximo salto de linea anterior a la posición actual del cursor</li>
<li>Vamos recorriendo hacia adelante cada caracter<br />
Si es un espacio, tabulador, o salto de linea lo almacenamos en una cadena temporal<br />
Si es otro caracter, cancelamos la búsqueda, hasta este punto ya tenemos en una cadena temporal todos los carácteres que forman nuestra identación</li>
<li>Finalmente, agregamos después de la posición del cursor actual de nuestro RichTextBox el contenido de nuestra variable temporal</li>
</ol>
<p>Ojalá les sea útil!</p>
<p>Adjunto ejemplo: <a href="http://nafiux.com/blog/wp-content/uploads/2010/05/IdentacionTextBox20100502200133.zip">IdentacionTextBox20100502200133</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nafiux.com/blog/2010/05/02/mantener-identacion-en-richtextbox-c-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

