<?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"
	>

<channel>
	<title>xanfran</title>
	<atom:link href="http://www.xanfran.es/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.xanfran.es</link>
	<description>Programación web: ese mundo tan "denso"</description>
	<pubDate>Tue, 03 Aug 2010 19:23:13 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>en</language>
			<item>
		<title>Búsquedas raras en Google</title>
		<link>http://www.xanfran.es/2010/08/03/busquedas-raras-en-google/</link>
		<comments>http://www.xanfran.es/2010/08/03/busquedas-raras-en-google/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 19:23:13 +0000</pubDate>
		<dc:creator>xanfran</dc:creator>
		
		<category><![CDATA[Curiosidades]]></category>

		<category><![CDATA[Google]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.xanfran.es/?p=295</guid>
		<description><![CDATA[Hacía mucho tiempo que no entraba en mi cuenta de Google Analytics, y navegando por una de sus opciones, me he encontrado que alguien ha llegado a este blog buscando &#8220;quiero saber porque yo hice el codigo de la calculadora de javascript y me comenzo con from&#8220;.

Lo siguiente que hice, fué buscar en que posición [...]]]></description>
			<content:encoded><![CDATA[<p>Hacía mucho tiempo que no entraba en mi cuenta de <a title="Google Analytics" href="http://www.google.com/analytics/">Google Analytics</a>, y navegando por una de sus opciones, me he encontrado que alguien ha llegado a este blog buscando &#8220;<strong>quiero saber porque yo hice el codigo de la calculadora de javascript y me comenzo con from</strong>&#8220;.</p>
<p style="text-align: center;"><img class="aligncenter foto" title="Búsqueda rara" src="http://farm5.static.flickr.com/4098/4857944650_c21101e821.jpg" alt="Se ve que alguien ha buscado quiero saber porque yo hice el codigo de la calculadora de javascript y me comenzo con from" /></p>
<p>Lo siguiente que hice, fué buscar en que posición saldría al hacer esa misma búsqueda: en <a title="Google España" href="http://www.google.es/#hl=es&amp;source=hp&amp;q=quiero+saber+porque+yo+hice+el+codigo+de+la+calculadora+de+javascript+y+me+comenzo+con+from">Google.es</a> sale en la primera página, en décimo lugar.</p>
<p>Es increíble que alguien haya hecho esa búsqueda y haya llegado hasta aquí <img src='http://www.xanfran.es/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xanfran.es/2010/08/03/busquedas-raras-en-google/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hacking Faitic</title>
		<link>http://www.xanfran.es/2010/07/31/hacking-faitic/</link>
		<comments>http://www.xanfran.es/2010/07/31/hacking-faitic/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 08:10:22 +0000</pubDate>
		<dc:creator>xanfran</dc:creator>
		
		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Programación]]></category>

		<category><![CDATA[Recursos]]></category>

		<category><![CDATA[Seguridad]]></category>

		<guid isPermaLink="false">http://www.xanfran.es/?p=276</guid>
		<description><![CDATA[La verdad que el título de esta entrada puede parecer un poco pretencioso, porque la verdad que de hacking poco. Se intenta exponer un problema de seguridad de Faitic: portal de e-learning de la Universidad de Vigo. Además, se publica un script en JavaScript para tener todas las opciones del menú, incluso las opciones que [...]]]></description>
			<content:encoded><![CDATA[<p>La verdad que el título de esta entrada puede parecer un poco pretencioso, porque la verdad que de hacking poco. Se intenta exponer un problema de seguridad de <a title="Faitic" href="http://faitic.uvigo.es/" target="_blank">Faitic</a>: portal de e-learning de la <a title="Universidad de Vigo" href="http://uvigo.es/" target="_blank">Universidad de Vigo</a>. Además, se publica un script en JavaScript para tener todas las opciones del menú, incluso las opciones que no son públicas. Este script solo funcionará en aquellas asignaturas que usen <a title="Claroline.net" href="http://www.claroline.net/" target="_blank">Claroline</a> como plataforma de e-learning:</p>
<p style="text-align: center;"><a title="Claroline - Faitic" href="http://farm5.static.flickr.com/4130/4845160714_01283e3969_b.jpg"><img class="aligncenter foto" src="http://farm5.static.flickr.com/4130/4845160714_01283e3969.jpg" alt="Cabecera de Faitic en Claroline" /></a></p>
<p style="text-align: center;">Haz click en la foto para verla a tamaño completo</p>
<p>El problema está en que aunque existan opciones del menú que no estén visibles, se puede acceder igualmente. Solo hay que poner la URL correcta en barra de direcciones del navegador. Con poner un <strong><em>if</em></strong> controlando si la opción es visible o no, se solucionaría este problema.</p>
<p>Otro problema, es que se pueden ver los componentes de un grupo. Para ello hay que saber el id (número) que tiene el grupo en la BBDD. Otra vez, hay que poner la URL correcta en la barra de direcciones, solo que esta vez hay que poner como parámetro <strong><em>registration=1</em></strong> para que la página &#8220;crea&#8221; que queremos darnos de alta en ese grupo. Otro <strong><em>if</em></strong> al principio del código, comprobando que el usuario no está ya dado de alta en otro grupo, también bastaría.</p>
<p>Un ejemplo de como queda el menú si se usa este script:</p>
<p style="text-align: center;"><a title="Menú - Faitic" href="http://farm5.static.flickr.com/4129/4845160748_5b1471ff1b_b.jpg"><img class="aligncenter foto" src="http://farm5.static.flickr.com/4129/4845160748_5b1471ff1b_m.jpg" alt="Cabecera de Faitic en Claroline" /></a></p>
<p style="text-align: center;">Haz click en la foto para verla a tamaño completo</p>
<p>El script que aquí se publica, es solo una recopilación de las distintas opciones del menú y aparecerán justo después de las que ya están visibles:</p>
<ul>
<li><a title="Descargar script Faitic" href="/get-example.php?f=9">Descargar script</a></li>
</ul>
<p>Para que funcione este script, hay que instalar la extensión Greasemonkey. Luego darle a &#8220;Nuevo script&#8221;, poner un nombre y un espacio de nombre (yo puse Faitic en los dos campos). Finalmente hay que poner lo dominios en los que se quiera que se ejecute el script:</p>
<ul>
<li>http://faitic*.uvigo.es/*</li>
<li>http://193.146.32.240/tema*</li>
</ul>
<p>El primer dominio, era el que se usaba antes de que cambiaran al segundo. Si volviesen a cambiar la dirección, habría que añadirla a la lista.</p>
<p>Después de darle a aceptar (es posible que os pida un editor de texto, el notepad vale bien), hay que copiar el script al archivo que se os habra. Guardar y entrar en <a title="Faitic" href="http://faitic.uvigo.es/" target="_blank">Faitic</a>.</p>
<p>Esta entrada está relacionada con las dos anteriores entradas:</p>
<ul>
<li><a title="Errores en programación web" href="http://www.xanfran.es/2009/12/12/errores-en-programacion-web/">Errores en programación web</a></li>
<li><a title="jQuery &amp; Greasemonkey" href="http://www.xanfran.es/2009/10/02/jquery-greasemonkey/">jQuery &amp; Greasemonkey</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.xanfran.es/2010/07/31/hacking-faitic/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Errores en programación web</title>
		<link>http://www.xanfran.es/2009/12/12/errores-en-programacion-web/</link>
		<comments>http://www.xanfran.es/2009/12/12/errores-en-programacion-web/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 18:39:29 +0000</pubDate>
		<dc:creator>xanfran</dc:creator>
		
		<category><![CDATA[Programación]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.xanfran.es/?p=261</guid>
		<description><![CDATA[Existen muchos errores en el mundo de la programación web. Un pequeño ejemplo es este enlace:

http://www.456bereastreet.com/lab/web_development_mistakes/es/

Esta es una buena colección de errores a tener en cuenta, sobre todo enfocados en respetar los estándares y en las buenas prácticas de programación.
Hay otro error que puede surgir en aquellas personas que tienen experiencia en el desarrollo de [...]]]></description>
			<content:encoded><![CDATA[<p>Existen muchos errores en el mundo de la programación web. Un pequeño ejemplo es este enlace:</p>
<ul>
<li><a title="Errores comunes del desarrollo web | 456 Berea Street" href="http://www.456bereastreet.com/lab/web_development_mistakes/es/">http://www.456bereastreet.com/lab/web_development_mistakes/es/</a></li>
</ul>
<p>Esta es una buena colección de errores a tener en cuenta, sobre todo enfocados en respetar los estándares y en las buenas prácticas de programación.</p>
<p>Hay otro error que puede surgir en aquellas personas que tienen experiencia en el desarrollo de aplicaciones de escritorio y que surge a la hora de realizar una aplicación web. <strong>Este error consiste en pensar que si no muestras la opción de un menú, implica que el usuario no tiene acceso a esa opción</strong>. El acceso a esa opción es tan sencillo como poner la <abbr title="Uniform Resource Locator">URL</abbr> en la barra de direcciones del navegador.</p>
<p>Sí, lo sé, demasiado obvio. Pero existen páginas en las que esto sucede.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xanfran.es/2009/12/12/errores-en-programacion-web/feed/</wfw:commentRss>
		</item>
		<item>
		<title>jQuery &#038; Greasemonkey</title>
		<link>http://www.xanfran.es/2009/10/02/jquery-greasemonkey/</link>
		<comments>http://www.xanfran.es/2009/10/02/jquery-greasemonkey/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 22:29:17 +0000</pubDate>
		<dc:creator>xanfran</dc:creator>
		
		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.xanfran.es/?p=252</guid>
		<description><![CDATA[Últimamente ha estado &#8220;jugando&#8221; un poco con Greasemonkey, que para quien no lo sepa, es una extensión para Firefox que sirve para incrustar código JavaScript propio y cambiar la funcionalidad y/o aspecto de una web en concreto.

Existen multitud de scripts públicos en Userscripts.org, además de otra extensión llamada Greasefire, que te avisa si hay scripts [...]]]></description>
			<content:encoded><![CDATA[<p>Últimamente ha estado &#8220;jugando&#8221; un poco con <a title="Greasemonkey :: Complementos para Firefox" href="https://addons.mozilla.org/es-ES/firefox/addon/748">Greasemonkey</a>, que para quien no lo sepa, es una extensión para <a title="Navegador web Firefox" href="http://www.mozilla-europe.org/es/firefox/">Firefox</a> que sirve para incrustar código <a title="JavaScript - Wikipedia" href="http://es.wikipedia.org/wiki/JavaScript">JavaScript</a> propio y cambiar la funcionalidad y/o aspecto de una web en concreto.</p>
<p style="text-align: center;"><img class="aligncenter foto" title="Greasemonkey" src="http://farm3.static.flickr.com/2576/3973042568_de18c0bab6_o.png" alt="Icono de la extensión Greasemonkey" width="40" height="40" /></p>
<p>Existen multitud de scripts públicos en <a title="Userscripts.org: Power-ups for your browser" href="http://userscripts.org/">Userscripts.org</a>, además de otra extensión llamada <a title="Greasefire :: Complementos para Firefox" href="https://addons.mozilla.org/es-ES/firefox/addon/8352">Greasefire</a>, que te avisa si hay scripts en <a title="Userscripts.org: Power-ups for your browser" href="http://userscripts.org/">Userscripts.org</a> de la página que estás visitando actualmente.</p>
<p>En las pruebas que he realizado, alguna que otra vez echaba de menos el poder usar las funciones que proporciona el framework de JavaScript <a title="jQuery: The Write Less, Do More, JavaScript Library" href="http://jquery.com/">jQuery</a>. Intenté enlazarlo a los miniscripts que hice, pero no resultaba del todo bien, hasta que busqué y encontré:</p>
<ul>
<li><a title="jQuery and Greasemonkey: How to play nicely with jQuery and Greasemonkey" href="http://joanpiedra.com/jquery/greasemonkey/">jQuery &amp; Greasemonkey: How to play nicely with jQuery and Greasemonkey</a></li>
</ul>
<p>En esta página encontrarás el código para poder usar <a title="jQuery: The Write Less, Do More, JavaScript Library" href="http://jquery.com/">jQuery</a> en tus scripts de <a title="Greasemonkey :: Complementos para Firefox" href="https://addons.mozilla.org/es-ES/firefox/addon/748">Greasemonkey</a>. El código lo cambié un poco para que no avise con un <a title="window.alert - MDC" href="https://developer.mozilla.org/en/DOM/window.alert">alert</a> cada vez que carga la librería.</p>
<p>Gracias <a title="Joan Piedra: UI designer &amp;amp; Front-End web developer, jQuery samurai, UI lover, javascript fan" href="http://joanpiedra.com/">Joan Piedra</a>. <img src='http://www.xanfran.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xanfran.es/2009/10/02/jquery-greasemonkey/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MySQL: Backup BBDD</title>
		<link>http://www.xanfran.es/2009/08/22/mysql-backup-bbdd/</link>
		<comments>http://www.xanfran.es/2009/08/22/mysql-backup-bbdd/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 17:53:23 +0000</pubDate>
		<dc:creator>xanfran</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.xanfran.es/?p=227</guid>
		<description><![CDATA[Me acuerdo cuando no sabía realizar una simple copia de seguridad de una BBDD en modo consola y acababa buscando/usando un gestor de MySQL, tipo phpMyAdmin, que me permitía exportar una BBDD.
Para realizar una copia de seguridad de una BBDD, se puede usar el siguiente comando:
$ mysqldump -u nombre_usuario -ppassword_usuario nombre_bbdd &#62; bbdd_backup.sql
Con esta sentencia, [...]]]></description>
			<content:encoded><![CDATA[<p>Me acuerdo cuando no sabía realizar una simple copia de seguridad de una <abbr title="Base de datos">BBDD</abbr> en modo consola y acababa buscando/usando un gestor de MySQL, tipo <a title="phpMyAdmin" href="http://www.phpmyadmin.net/">phpMyAdmin</a>, que me permitía exportar una <abbr title="Base de datos">BBDD</abbr>.</p>
<p>Para realizar una copia de seguridad de una <abbr title="Base de datos">BBDD</abbr>, se puede usar el siguiente comando:</p>
<div class="terminal">$ mysqldump -u <em>nombre_usuario</em> -p<em>password_usuario</em> <em>nombre_bbdd</em> &gt; <em>bbdd_backup.sql</em></div>
<p>Con esta sentencia, se guardará en el archivo especificado en<em> </em><strong><em>bbdd_backup</em><em>.sql</em></strong>, el código SQL de la <abbr title="Base de datos">BBDD</abbr> cuyo nombre coincida con <strong><em>nombre_bbdd</em></strong>. El usuario <em><strong>nombre_usuario</strong> </em>debe tener los suficientes privilegios para poder recuperar toda la información que contiene la <abbr title="Base de datos">BBDD</abbr>.</p>
<p>Ojo que <strong>entre la opción -u y <em>nombre_usuario</em> hay un espacio en blanco, al contrario que la opción -p y <em>password_usuario</em> que están pegados</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xanfran.es/2009/08/22/mysql-backup-bbdd/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Firefox: Bug</title>
		<link>http://www.xanfran.es/2009/08/09/firefox-bug/</link>
		<comments>http://www.xanfran.es/2009/08/09/firefox-bug/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 14:44:01 +0000</pubDate>
		<dc:creator>xanfran</dc:creator>
		
		<category><![CDATA[Curiosidades]]></category>

		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://www.xanfran.es/?p=230</guid>
		<description><![CDATA[Actualmente estoy usando Firefox en su versión 3.5.2 en un Windows XP, aunque el problema que tengo ya me pasaba en la versión 3.5.1 (no me acuerdo si ya pasaba en la versión 3.5).
Cuando cierro la aplicación, hay algunas veces que no se cierra completamente y queda consumiendo recursos hasta que mato el proceso:

Haz click [...]]]></description>
			<content:encoded><![CDATA[<p>Actualmente estoy usando Firefox en su versión 3.5.2 en un Windows XP, aunque el problema que tengo ya me pasaba en la versión 3.5.1 (no me acuerdo si ya pasaba en la versión 3.5).</p>
<p>Cuando cierro la aplicación, hay algunas veces que no se cierra completamente y queda consumiendo recursos hasta que mato el proceso:</p>
<p style="text-align: center;"><a title="Bug Firefox" href="http://farm4.static.flickr.com/3495/3803482093_444580185b_o.png"><img class="aligncenter foto" src="http://farm4.static.flickr.com/3495/3803482093_fa4b6eb34d.jpg" alt="Se ve como Firefox consume muchos recursos: 98% del procesador" /></a></p>
<p style="text-align: center;">Haz click en la foto para verla a tamaño completo</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xanfran.es/2009/08/09/firefox-bug/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Windows: Accesos directos</title>
		<link>http://www.xanfran.es/2009/05/12/windows-accesos-directos/</link>
		<comments>http://www.xanfran.es/2009/05/12/windows-accesos-directos/#comments</comments>
		<pubDate>Tue, 12 May 2009 19:14:10 +0000</pubDate>
		<dc:creator>xanfran</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.xanfran.es/?p=181</guid>
		<description><![CDATA[En las últimas semanas he tenido que usar muchas aplicaciones pesadas simultáneamente, con el consecuente consumo de recursos del ordenador. Para evitar eso, cerraba aquellas aplicaciones que no iba a necesitar inmediatamente. Aunque después volvía a tener que ejecutarlas: tenía que buscar el acceso directo en el menú inicio, o minimizar todo y buscar el [...]]]></description>
			<content:encoded><![CDATA[<p>En las últimas semanas he tenido que usar muchas aplicaciones pesadas simultáneamente, con el consecuente consumo de recursos del ordenador. Para evitar eso, cerraba aquellas aplicaciones que no iba a necesitar inmediatamente. Aunque después volvía a tener que ejecutarlas: tenía que buscar el acceso directo en el menú inicio, o minimizar todo y buscar el enlace en el escritorio (en medio de multitud de archivos&#8230; ), etc.</p>
<p>Un proceso un poco tedioso.</p>
<p>Llegué a pensar en usar una aplicación como <a title="Launchy: The Open Source Keystroke Launcher" href="http://www.launchy.net/" target="_self">Launchy</a>, que es un programa que sirve para lanzar aplicaciones. Su funcionamiento consiste en permanecer en segundo plano en el sistema hasta que se realiza la combinación de teclas que lo traen al primer plano (por defecto, Alt+Barra Espaciadora):</p>
<p style="text-align: center;"><a href="http://es.wikipedia.org/wiki/Archivo:Screenshot_of_launchy2.png"><img class="aligncenter foto" title="Archivo:Screenshot of launchy2.png - Wikipedia, la enciclopedia libre" src="http://upload.wikimedia.org/wikipedia/commons/a/a5/Screenshot_of_launchy2.png" alt="Captura de pantalla del programa Launchy" /></a></p>
<p style="text-align: center;">Haz click en la foto para verla en la Wikipedia</p>
<p>Llegué a instalarlo, pero entre que era otra aplicación más corriendo en el <abbr title="Sistema Operativo">S.O.</abbr>, la combinación de teclas (Alt+Barra Espaciadora) es una combinación que uso a menudo y que en <strong>cuanto lo instalé, el Firewall me empezó a avisar de varios intentos de acceder a la red </strong>por parte de esta aplicación, decidí desinstalarla y <strong>hacer un lanzador de aplicaciones casero</strong>.</p>
<p>Para ello, he usado los <strong>accesos directos</strong> y el <strong>PATH</strong> de Windows. Los primeros tienen un nombre muy descriptivo y no son más que eso: accesos directos a una aplicación, un archivo de texto, una imagen una unidad del sistema, etc. A casi lo que se quiera. Para ver la ruta a la que apunta cada acceso directo, puedes hacer click con el botón derecho del ratón sobre un acceso directo y elegir <strong>Propiedades</strong> de la lista. En el campo <strong>Destino</strong> de la pestaña <strong>Acceso directo</strong>, verás la ruta completa (<a title=" Modos de expresar una ruta en Ruta (informática) - Wikipedia" href="http://es.wikipedia.org/wiki/Ruta_(inform%C3%A1tica)#Modos_de_expresar_una_ruta" target="_self">absoluta</a>) y a que archivo apunta.</p>
<p>El <strong>PATH</strong> es un conjunto de directorios separados por &#8220;<strong>;</strong>&#8221; que sirven al <abbr title="Sistema Operativo">S.O.</abbr>, para saber donde buscar una aplicación si se intenta ejecutar sin especificar su ruta. Como seguro que no ha quedado muy claro, veamos un caso práctico. Pulsa la tecla Windows y sin soltar, pulsar la letra R ( tecla <img class="size-full wp-image-189" title="Windows" src="http://www.xanfran.es/wp-content/uploads/2009/05/ico-win.gif" alt="Icono Windows" width="16" height="16" />+R). Te deberá salir la siguiente ventana:</p>
<p style="text-align: center;"><img class="aligncenter foto" title="Ventana Ejecutar de Windows" src="http://farm4.static.flickr.com/3342/3523695682_e23a090804_o.gif" alt="Se muestra la ventana ejecutar de Windows" /></p>
<p>Ahora escribe <code>cmd</code> y pulsa Enter. Se ejecutará esta aplicación que es un intérprete de comandos equivalente al command.com de MS-DOS. <strong>Y este es el primer ejemplo del uso del PATH</strong>. Has lanzado la aplicación cmd únicamente escribiendo el nombre del ejecutable: <code>cmd</code>. Aprovechando el intérprete de comandos, puedes probar a escribir <code>notepad</code> (para ejecutar el <strong>Bloc de notas</strong>) o <code>calc</code> (para ejecutar la <strong>Calculadora</strong> de Windows). Todas estas aplicaciones están en el mismo directorio: <em>system32</em>,dentro del directorio de instalación de tu <abbr title="Sistema Operativo">S.O.</abbr> Windows, normalmente <em>C:\WINDOWS\system32</em></p>
<p>Si aún no has cerrado el intérprete de comandos cmd, puedes probar a escribir <code>PATH</code> y ver el conjunto de directorios que tiene ahora mismo tu PATH. Verás que está el directorio <em>system32</em>.</p>
<p>Después de todo este rollo explicativo vamos a <strong>hacer el lanzador de aplicaciones casero</strong>.</p>
<p>La idea es hacer que un directorio que nosotros queramos, aparezca en el PATH para luego meter nuestros accesos directos en ese directorio y así poder lanzarlos desde la ventana de Ejecutar de Windows. Lo primero es pensar en un directorio donde quieres poner tus accesos directos. Puede ser el que quieras (aunque esto no lo probado del todo, supongo que puede ser cualquiera). Yo, por ejemplo, he creado un directorio en la carpeta Mis Documentos y he metido ahí todos mis accesos directos, incluso los que aparecen en el Escritorio (y de paso hice limpieza del mismo):</p>
<p style="text-align: center;"><a href="http://farm4.static.flickr.com/3582/3523004805_f255b35dbf_o.png"><img class="aligncenter foto" title="Accesos directos en Windows" src="http://farm4.static.flickr.com/3582/3523004805_dccbfeb864.jpg" alt="Un pequeño conjunto de accesos directos a programas y carpetas." /></a></p>
<p style="text-align: center;">Haz click en la foto para verla a tamaño completo</p>
<p>Como podéis ver, he optado por usar nombres de accesos directos cortos, para que me sea más sencillo lanzar las aplicaciones.</p>
<p>Aviso importante: <strong>los nombres de los accesos no deberían tener espacios</strong>. Pueden tener espacios en blanco, pero si tienen espacios, por ejemplo &#8220;Mozilla Firefox&#8221;, hay que poner el texto entre comillas dobles (<strong>&#8220;</strong>), lo que hace un poco más engorroso lanzar las aplicaciones de esta forma.</p>
<p>Otro aviso importante: <strong>he tenido problemas al poner nombres a los accesos directos que coincidían con el nombre de algún directorio de la carpeta <em>C:\Documents and Settings\&lt;nombre_usuario&gt;\</em></strong>. Por alguna razón que no puedo explicar, en lugar de usar el acceso directo, abre la carpeta con dicho nombre. Por lo que debéis mirar los nombres de los directorios que tengáis en esa carpeta y evitarlos.</p>
<p>Ahora hay que poner el directorio elegido en el PATH. Busca el icono que pone &#8220;Mi PC&#8221; en tu escritorio y haz click con el botón derecho del ratón y elige Propiedades (también lo puedes hacer una vez dentro, donde se listan las unidades del sistemas: C:, D:&#8230;). Te saldrá una ventana como esta:</p>
<p style="text-align: center;"><img class="aligncenter foto" title="Propiedades del sistema" src="http://farm4.static.flickr.com/3563/3523046003_fe357947c1_o.png" alt="Ventana de propiedades del sistema de Windows." /></p>
<p>Elige la pestaña &#8220;<strong>Opciones avanzadas</strong>&#8220;. Verás en la parte inferior un botón que pone &#8220;<strong>Variables de entorno</strong>&#8220;. Al entrar te aparecerán las variables que tiene el usuario actual, entre ellas <strong>PATH</strong>. Selecciónala y dale a &#8220;<strong>Modificar</strong>&#8220;. En el campo &#8220;<strong>Valor de la variable</strong>&#8221; introduce la <a title=" Modos de expresar una ruta en Ruta (informática) - Wikipedia" href="http://es.wikipedia.org/wiki/Ruta_(inform%C3%A1tica)#Modos_de_expresar_una_ruta" target="_self">ruta absoluta</a> del directorio en el que has metido tus accesos directos. Si este campo ya tiene algún directorio, puedes añadirlo pero siempre que los separes con &#8220;<strong>;</strong>&#8220;.</p>
<p>Para ver que todo ha ido bien abre otra vez la aplicación cmd, recuerda: tecla <img class="size-full wp-image-189" title="Windows" src="http://www.xanfran.es/wp-content/uploads/2009/05/ico-win.gif" alt="Icono Windows" width="16" height="16" />+R, escribe <code>cmd</code> y pulsa Enter. Debes <strong>abrir una nueva ventana del intérprete de comandos</strong> de Windows, ya que cada vez que abres uno, <strong>carga el PATH que actualmente tiene el sistema</strong> y si éste ha sido modificado, las instancias abiertas del cmd no se enterarán del cambio. Ahora escribe <code>PATH</code> en la nueva ventana del cmd y deberías ver el directorio que has añadido (posiblemente estará por el final de la lista).</p>
<p>Lo que queda es realizar pruebas poniendo el nombre de alguno de los accesos directos en la ventana de Ejecutar. Por ejemplo, en mi caso:</p>
<ul>
<li>ff</li>
<li>wa</li>
<li>fz</li>
<li>r</li>
</ul>
<p>etc.</p>
<p>Sin duda, este método puede resultar un poco lioso o complicado por tener que mantener uno mismo los accesos directos en ese directorio. Si ese es tu caso y no deseas complicarte, a lo mejor la mejor opción es que uses una aplicación como <a title="Launchy: The Open Source Keystroke Launcher" href="http://www.launchy.net/" target="_self">Launchy</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xanfran.es/2009/05/12/windows-accesos-directos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP: Números aleatorios</title>
		<link>http://www.xanfran.es/2009/03/21/php-numeros-aleatorios/</link>
		<comments>http://www.xanfran.es/2009/03/21/php-numeros-aleatorios/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 12:42:20 +0000</pubDate>
		<dc:creator>xanfran</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.xanfran.es/?p=143</guid>
		<description><![CDATA[PHP incorpora 2 rutinas para generar números aleatorios, aunque realmente hay que hablar de números pseudo-aleatorios, ya que dichos números se generan a partir de un algoritmo determinista, es decir, para la misma entrada de datos ofrece la misma salida.
Por ello, surge la necesidad de aportar algo que modifique la salida: una semilla. Pero con [...]]]></description>
			<content:encoded><![CDATA[<p><abbr title="PHP: Hypertext Preprocessor">PHP</abbr> incorpora 2 rutinas para generar números aleatorios, aunque realmente hay que hablar de números pseudo-aleatorios, ya que dichos números se generan a partir de un algoritmo <a title="Sistema determinista - Wikipedia" href="http://es.wikipedia.org/wiki/Sistema_determinista">determinista</a>, es decir, para la misma entrada de datos ofrece la misma salida.</p>
<p>Por ello, surge la necesidad de aportar algo que modifique la salida: una semilla. Pero con ello surge un problema: cada vez que se ejecute el programa con una misma semilla, generará los mismos números aleatorios. Imagina que tienes un array del cual quieres recuperar un elemento al azar, siempre tendrías el mismo elemento.</p>
<p>La solución es usar una semilla que varíe, por ejemplo: el tiempo, usando como semilla el valor devuelto de la función <a title="PHP: time - Manual" href="http://es.php.net/time">time</a>. Desde <a title="PHP: PHP 4 ChangeLog - Version 4.2.0" href="http://es.php.net/ChangeLog-4.php#4.2.0">PHP 4.2.0</a> no hace falta inicializar la semilla ya que se hace automáticamente, pero para versiones anteriores de PHP si que es necesario.</p>
<p>Un primera opción para generar números pseudo-aleatorios, está en usar la función <a title="PHP: rand - Manual" href="http://es.php.net/rand">rand</a>. Si se quiere inicializar la semilla, hay que usar la función <a title="PHP: srand - Manual" href="http://es.php.net/srand">srand</a>.</p>
<p>Ejemplo de recuperar un elemento al azar de un array:</p>
<div class="php">
<ol>
<li><span class="open_tag">&lt;?php</span></li>
<li><span class="function margin20">function</span> randElem<span class="bracket">(</span>$array<span class="bracket">)</span></li>
<li><span class="bracket margin20">{</span></li>
<li><span class="keyword margin40">return</span> $array<span class="bracket">[</span><span class="function">rand<span class="bracket">(</span></span><span class="number">0</span>,<span class="function">count</span><span class="bracket">(</span>$array<span class="bracket">)</span><span class="function">-</span><span class="number">1</span><span class="bracket">)</span><span class="bracket">]</span>;</li>
<li><span class="bracket margin20">}</span></li>
<li><span class="open_tag">?&gt;</span></li>
</ol>
</div>
<div class="download"><a title="PHP: Números aleatorios 1" href="/get-example.php?f=7">Descargar ejemplo</a></div>
<p>Si lo que se desea es simular un problema que requiera aleatoriedad y cuyos números aleatorios sean independientes entre ellos (llegada de coches a un semáforo, probabilidad de que en un grupo de personas haya dos personas que cumplan años el mismo día del año&#8230;), la función <a title="PHP: rand - Manual" href="http://es.php.net/rand">rand</a> no es muy buena opción, ya que <strong>los valores generados presentan dependencia entre si</strong>.</p>
<p>Una forma visual de ver esta dependencia, es generar una gran cantidad de números pseudo-aleatorios con la rutina en cuestión y generar un <a title="Plot (graphics) - Wikipedia" href="http://en.wikipedia.org/wiki/Plot_(graphics)">plot</a> con esos números.</p>
<p>La idea de generar un plot es ver si aparecen <a title="Hiperplano - Wikipedia" href="http://es.wikipedia.org/wiki/Hiperplano">hiperplanos</a> en el gráfico generado (que indicaría que existe dependencia entre los números generados). Si se realiza un plot en 2D a partir de números generados con la función  <a title="PHP: rand - Manual" href="http://es.php.net/rand">rand</a>, no se aprecia nada especial, pero si creamos un plot en 3D si que se verán esos <a title="Hiperplano - Wikipedia" href="http://es.wikipedia.org/wiki/Hiperplano">hiperplanos</a>:</p>
<p style="text-align: center;"><a href="http://farm4.static.flickr.com/3657/3370977479_feaf7bbbf9_o.png"><img class="aligncenter foto" title="Plot 3D - rand" src="http://farm4.static.flickr.com/3657/3370977479_53019a47d9.jpg" alt="Plot 3D - rand" /></a></p>
<p style="text-align: center;">Haz click en la foto para verla a tamaño completo</p>
<p>Este problema es heredado de usar una rutina basada en &#8220;bibliotecas de C antiguas que    tienen <strong>características dudosas o desconocidas</strong>.  <abbr title="PHP: Hypertext Preprocessor">PHP</abbr> usa el generador de números aleatorios de <a title="GNU C Library - GNU Project - Free Software Foundation   (FSF)" href="http://www.gnu.org/software/libc/">libc</a> con la función rand()&#8221; (texto extraido de  <a title="PHP: mt_rand - Manual" href="http://es.php.net/mt-rand">mt_rand</a>).</p>
<p>Si se quiere evitar esta dependencia entre los números, habrá que usar la segunda rutina que tiene <abbr title="PHP: Hypertext Preprocessor">PHP</abbr> para generar los números pseudo-aleatorios. La función a usar es <a title="PHP: mt_rand - Manual" href="http://es.php.net/mt-rand">mt_rand</a>. Esta rutina &#8220;usa el <a title="Mersenne Twister: A random number generator (since 1997/10)" href="http://www.math.sci.hiroshima-u.ac.jp/%7Em-mat/MT/emt.html">Mersenne Twister</a>, mecanismo que produce números aleatorios <strong>cuatro veces más rápido</strong> que el resultado promedio de rand() de libc&#8221;. Para inicializar su semilla hay que usar la función <a title="PHP: mt_srand - Manual" href="http://es.php.net/mt-srand">mt_srand</a>, aunque recuerdo que desde <a title="PHP: PHP 4 ChangeLog - Version 4.2.0" href="http://es.php.net/ChangeLog-4.php#4.2.0">PHP 4.2.0</a> no hace falta inicializar la semilla.</p>
<p>Si repetimos el experimento del plot 3D con la función <a title="PHP: mt_rand - Manual" href="http://es.php.net/mt-rand">mt_rand</a>, el resultado es el siguiente:</p>
<p style="text-align: center;"><a href="http://farm4.static.flickr.com/3612/3371798754_6d55881d7d_o.png"><img class="aligncenter foto" title="Plot 3D - mt_rand" src="http://farm4.static.flickr.com/3612/3371798754_e2ef434ac0.jpg" alt="Plot 3D - mt_rand" /></a></p>
<p style="text-align: center;">Haz click en la foto para verla a tamaño completo</p>
<p>Finalmente, una función que devuelve un número pseudo-aleatorio entre dos números pasados. Esta función también permite generar números con decimales usando el tercer parámetro:</p>
<div class="php">
<ol>
<li><span class="open_tag">&lt;?php</span></li>
<li><span class="function margin20">function</span> aleatorio<span class="bracket">(</span>$menor,$mayor,$decimales<span class="function">=</span><span class="keyword">false</span><span class="bracket">)</span></li>
<li><span class="bracket margin20">{</span></li>
<li><span class="keyword margin40">if</span><span class="bracket">(</span>$decimales<span class="bracket">)</span></li>
<li><span class="keyword margin60">return</span> <span class="bracket">((</span><span class="function">mt_rand</span><span class="bracket">(</span><span class="number">0</span>,<span class="function">mt_getrandmax</span><span class="bracket">())</span><span class="function">/mt_getrandmax</span><span class="bracket">())</span><span class="function">*</span><span class="bracket">(</span>$mayor<span class="function">-</span>$menor<span class="bracket">))</span><span class="function">+</span>$menor;</li>
<li><span class="keyword margin40">else</span></li>
<li><span class="keyword margin60">return</span> <span class="function">mt_rand</span><span class="bracket">(</span>$menor,$mayor<span class="bracket">)</span>;</li>
<li><span class="bracket margin20">}</span></li>
<li><span class="open_tag">?&gt;</span></li>
</ol>
</div>
<div class="download"><a title="PHP: Números aleatorios 2" href="/get-example.php?f=8">Descargar ejemplo</a></div>
<p>Nota: el programa usado para generar el plot 3D ha sido <strong><a title="The R Project for Statistical Computing" href="http://www.r-project.org/">R</a></strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xanfran.es/2009/03/21/php-numeros-aleatorios/feed/</wfw:commentRss>
		</item>
		<item>
		<title>El verdadero formato de las direcciones de correo electrónico</title>
		<link>http://www.xanfran.es/2008/12/08/verdadero-formato-direcciones-correo-electronico/</link>
		<comments>http://www.xanfran.es/2008/12/08/verdadero-formato-direcciones-correo-electronico/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 16:48:14 +0000</pubDate>
		<dc:creator>xanfran</dc:creator>
		
		<category><![CDATA[Curiosidades]]></category>

		<category><![CDATA[Estándares]]></category>

		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.xanfran.es/?p=110</guid>
		<description><![CDATA[Ya hace unos meses que escribí la entrada PHP: Validar email. Cuando estaba recogiendo información de como validar una dirección de correo electrónico, pensé en mirar el documento RFC 822 donde se especifica el formato estándar que debe seguir cualquier email. También miré en la Wikipedia (bendita Wikipedia).
En ésta última, muestra una lista de ejemplos [...]]]></description>
			<content:encoded><![CDATA[<p>Ya hace unos meses que escribí la entrada <a title="PHP: Validar email" href="/2008/08/24/php-validar-email/">PHP: Validar email</a>. Cuando estaba recogiendo información de como validar una dirección de correo electrónico, pensé en mirar el documento <a title="RFC 822 - STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES" href="http://tools.ietf.org/html/rfc822">RFC 822</a> donde se especifica el formato estándar que debe seguir cualquier email. También miré en la <a title="E-mail address - Wikipedia, the free encyclopedia" href="http://en.wikipedia.org/wiki/E-mail_address">Wikipedia</a> (bendita <a title="Wikipedia" href="http://www.wikipedia.org/">Wikipedia</a>).</p>
<p>En ésta última, muestra una <a title="RFC examples - E-mail address - Wikipedia, the free encyclopedia" href="http://en.wikipedia.org/wiki/E-mail_address#RFC_examples">lista de ejemplos</a> de direcciones de correo electrónico válidos:</p>
<ul>
<li>abc@example.com</li>
<li>Abc@example.com</li>
<li>aBC@example.com</li>
<li>abc.123@example.com</li>
<li>1234567890@example.com</li>
<li>_______@example.com</li>
<li>abc+mailbox/department=shipping@example.com</li>
<li> !#$%&amp;&#8217;*+-/=?^_`.{|}~@example.com (todos estos caracteres están permitidos)</li>
<li>&#8220;abc@def&#8221;@example.com (cualquier cosa que esté entre comillas)</li>
<li>&#8220;Fred Bloggs&#8221;@example.com</li>
<li>&#8220;Fred \&#8221;quota\&#8221; Bloggs&#8221;@example.com (ojo, las comillas deben <a title="Escape character - Wikipedia, the free encyclopedia" href="http://en.wikipedia.org/wiki/Escape_character">escaparse</a>)</li>
</ul>
<p>Viendo estos ejemplos, la verdad que <strong>una expresión regular que compruebe todo esto se vuelve muy enrevesada</strong>. Un ejemplo de esta posible expresión regular, se encuentra entre <a title="Footnotes - E-mail address - Wikipedia, the free encyclopedia" href="http://en.wikipedia.org/wiki/E-mail_address#Footnotes">las notas de pié de página de la entrada de la Wikipedia</a>: <a title="Mail::RFC822::Address" href="http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html">Mail::RFC822::Address</a></p>
<p>Por ello opté por crear <strong>una expresión regular que comprobara las direcciones que permitían los servicios de correo electrónico más populares</strong>:</p>
<ul>
<li><a title="Gmail: Email from Google" href="http://www.gmail.com/">Gmail</a></li>
<li><a title="Hotmail" href="http://www.hotmail.com/">Hotmail</a></li>
<li><a title="Correo electrónico en Yahoo! España" href="http://es.mail.yahoo.com/">Yahoo! Mail</a></li>
</ul>
<p>El problema de esto, es que se usará una expresión regular muy restrictiva respecto a la gramática especificada en el documento <a title="RFC 822 - STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES" href="http://tools.ietf.org/html/rfc822">RFC 822</a>, por lo que podrás considerar correos electrónicos que son válidos, como incorrectos.</p>
<p><strong>Una posible solución es usar una expresión regular que permita prácticamente cualquier cosa.</strong> Aunque también hay que tener en cuenta que es muy difícil encontrar un servicio de correo electrónico que permita crear una dirección como las de la lista anterior.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xanfran.es/2008/12/08/verdadero-formato-direcciones-correo-electronico/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Descargar los ejemplos</title>
		<link>http://www.xanfran.es/2008/11/23/descargar-los-ejemplos/</link>
		<comments>http://www.xanfran.es/2008/11/23/descargar-los-ejemplos/#comments</comments>
		<pubDate>Sun, 23 Nov 2008 20:55:38 +0000</pubDate>
		<dc:creator>xanfran</dc:creator>
		
		<category><![CDATA[Programación]]></category>

		<category><![CDATA[Recursos]]></category>

		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.xanfran.es/?p=83</guid>
		<description><![CDATA[Para facilitar el uso de los ejemplos que he puesto en entradas anteriores (y espero seguir poniendo cuando tenga tiempo&#8230;), he habilitado la descarga de los mismos.
Después de cada ejemplo aparecerá un enlace para descargarlo.
Las entradas en las que se pueden descargar los ejemplos, son:

PHP: Cortar texto
PHP: Validar email
PHP: Descargar archivo

]]></description>
			<content:encoded><![CDATA[<p>Para facilitar el uso de los ejemplos que he puesto en entradas anteriores (y espero seguir poniendo cuando tenga tiempo&#8230;), he habilitado la descarga de los mismos.</p>
<p><strong>Después de cada ejemplo aparecerá un enlace para descargarlo.</strong></p>
<p>Las entradas en las que se pueden descargar los ejemplos, son:</p>
<ol>
<li><a href="http://www.xanfran.es/2008/05/18/php-cortar-texto/" title="Entrada de como cortar texto">PHP: Cortar texto</a></li>
<li><a href="http://www.xanfran.es/2008/08/24/php-validar-email/" title="Entrada de como validar un email">PHP: Validar email</a></li>
<li><a href="http://www.xanfran.es/2008/10/11/php-descargar-archivo/" title="Entrada de como forzar la descarga de un archivo">PHP: Descargar archivo</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.xanfran.es/2008/11/23/descargar-los-ejemplos/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
