<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://www.berriart.com/wp-atom.php">
	<title type="text">Berriart</title>
	<subtitle type="text">Un programador hablando de diseño............</subtitle>

	<updated>2009-08-28T15:02:48Z</updated>
	<generator uri="http://wordpress.org/" version="2.8.4">WordPress</generator>

	<link rel="alternate" type="text/html" href="http://www.berriart.com" />
	<id>http://www.berriart.com/feed/atom/</id>
	

			<geo:lat>43.28082174529978</geo:lat><geo:long>-2.987959384918213</geo:long><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc/2.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><link rel="self" href="http://feeds.feedburner.com/berriart" type="application/atom+xml" /><feedburner:emailServiceId>berriart</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
		<author>
			<name>artberri</name>
						<uri>http://www.berriart.com</uri>
					</author>
		<title type="html"><![CDATA[&#8216;Tunear&#8217; Gedit y convertirlo en un IDE]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/berriart/~3/ZHkbMMyfXp4/" />
		<id>http://www.berriart.com/?p=503</id>
		<updated>2009-08-28T15:02:48Z</updated>
		<published>2009-08-28T15:02:48Z</published>
		<category scheme="http://www.berriart.com" term="Desarrollo web" /><category scheme="http://www.berriart.com" term="Recursos" /><category scheme="http://www.berriart.com" term="Tutoriales" /><category scheme="http://www.berriart.com" term="editor" /><category scheme="http://www.berriart.com" term="gedit" /><category scheme="http://www.berriart.com" term="ide" /><category scheme="http://www.berriart.com" term="programar" />		<summary type="html"><![CDATA[No sé si os lo he comentado alguna vez, pero Gedit es mi editor preferido y la herramienta que más utilizo para programar. He probado, e incluso alguna vez utilizo, algun IDE auténtico (según para que) Eclipse, Aptana o NetBeans; pero por lo general mi IDE es Gedit.
Algunos dirán que lo que digo es una [...]]]></summary>
		<content type="html" xml:base="http://www.berriart.com/2009/08/28/tunear-gedit-y-convertirlo-en-un-ide/">&lt;p&gt;No sé si os lo he comentado alguna vez, pero &lt;a href="http://projects.gnome.org/gedit/"&gt;Gedit&lt;/a&gt; es mi editor preferido y la herramienta que más utilizo para programar. He probado, e incluso alguna vez utilizo, algun IDE &lt;em&gt;auténtico&lt;/em&gt; (según para que) Eclipse, Aptana o NetBeans; pero por lo general mi IDE es Gedit.&lt;/p&gt;
&lt;p&gt;Algunos dirán que lo que digo es una barbaridad, pero me parece una de las mejores herramientas y sobre todo la más ligera. Porque aunque en un principio parezca que es muy &lt;em&gt;light&lt;/em&gt;, si sabemos cómo, podemos personalizarla y convertirla en una gran herramienta. Hace tiempo &lt;a href="http://www.viciao2k3.net/blog/linux/haciendo-gedit-mas-sociable-para-el-programador/"&gt;Miquel ya nos dió unos consejitos&lt;/a&gt;, pero como se nos ha pasado a Mac, ahora me tengo que buscar la vida :p&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Os explico mi configuración y ya me diréis que opináis:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lo primero es ir a las preferencias &lt;em&gt;(Editar-&gt;Preferencias)&lt;/em&gt;, y adecuaremos unas cuantas cositas:&lt;/p&gt;
&lt;p&gt;&lt;u&gt;- Pestaña &amp;#8216;Ver&amp;#8217;:&lt;/u&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mostrar números de línea&lt;/li&gt;
&lt;li&gt;Resaltar línea actual&lt;/li&gt;
&lt;li&gt;Resaltar pareja del corchete&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="http://www.berriart.com/wp-content/uploads/2009/08/gedit-preferences-1.png" alt="gedit preferences" title="gedit preferences cap" width="450" height="444" class="aligncenter size-full wp-image-505" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;- Pestaña &amp;#8216;Editor&amp;#8217;:&lt;/u&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Insertar 4 espacios en lugar de tabulaciones&lt;/li&gt;
&lt;li&gt;Activar sangría automática&lt;/li&gt;
&lt;li&gt;Desactivar copia de seguridad, ya que crea archivos con el mismo nombre con el caracter &amp;#8216;~&amp;#8217; al final, que hace que linux los trate como ocultos y que si los subimos al servidor nos traeran graves problemas de seguridad&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="http://www.berriart.com/wp-content/uploads/2009/08/gedit-preferences-2.png" alt="gedit preferences " title="gedit preferences " width="450" height="444" class="aligncenter size-full wp-image-506" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Los colores&lt;/strong&gt; que vienen por defecto para resaltar el código, no me gustan. Yo prefiero el fondo negro, ahorro energia y descanso la vista :p Así que nos vamos a la siguiente pestaña &amp;#8216;Tipografías y colores&amp;#8217;. De los esquemas existentes, tampoco me convencen ninguno, así que lo que hice fue descargarme otro. &lt;a href="http://120linux.com/6-estilos-de-colores-para-gedit/"&gt;Aquí podéis descargar colores para Gedit&lt;/a&gt;, a mi el esquema que más me gusta y el que uso es el Darkwin. Para instalarlo, descargalo y luego en la pestaña pulsa en el botón &amp;#8216;Añadir&amp;#8217; y agregalo.&lt;/p&gt;
&lt;p&gt;Ahora llega el turno de instalar &lt;strong&gt;plugins o complementos&lt;/strong&gt; para el Gedit. Por defecto trae algunos preinstalados que solo necesitamos activar desde la cuarta pestaña del panel de preferencias. Activaremos los siguientes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Herramientas externas &amp;#8211; Permite ejecutar comandos o programas externos a Gedit para facilitarnos el trabajo. Más adelante explicaré como configurarlo.&lt;/li&gt;
&lt;li&gt;Panel de examinador de Archivos &amp;#8211; Pone a nuestra disposición un panel lateral para examinar y acceder a los archivos de nuestro proyecto (Tecla rápida F9).&lt;/li&gt;
&lt;li&gt;Recortes &amp;#8211; Permite insertar &amp;#8216;recortes&amp;#8217; de código, o estructuras muy utilizadas (loops, ifs,&amp;#8230;). Escribe la palabra clave y luego pulsa tabulador, el resto se escribirá solo.&lt;/li&gt;
&lt;li&gt;Sangrar líneas &amp;#8211; Permite el sangrado de líneas de manera rápida mediante Ctrl+T.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Además de estos, creo que es una buena opción instalar otro plugin más, pero este no viene por defecto, se llama &lt;a href="http://sourceforge.net/projects/symbol-browser/"&gt;Symbol Browser&lt;/a&gt;. Se trata de un panel lateral que permite la exploración de objetos, funciones, &lt;em&gt;defines&lt;/em&gt;,&amp;#8230; &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.berriart.com/wp-content/uploads/2009/08/screenshot.jpg" alt="Symbol Browser" title="Symbol Browser" width="400" height="419" class="aligncenter size-full wp-image-512" /&gt;&lt;/p&gt;
&lt;p&gt;Yo os explico como le he instalado en Ubuntu 9.04, pero si necesitáis más información &lt;a href="http://www.micahcarrick.com/11-14-2007/gedit-symbol-browser-plugin.html"&gt;podéis ver este artículo&lt;/a&gt; que fue como lo descubrí. Lo primero que hay que hacer es instalar Exuberant Ctags, que es la herramienta ne la que se basa este plugin, luego descargamos el plugin y lo instalamos. No olvides después de instalarlo activarlo en la pestaña &amp;#8216;Complementos&amp;#8217; como hemos hecho con los anteriores.&lt;/p&gt;
&lt;pre&gt;sudo apt-get install ctags
cd ~/.gnome2/gedit/
wget http://sourceforge.net/projects/symbol-browser/files/symbol-browser-bin/gedit-symbol-browser-plugin-bin-ubuntu-i386-0.1/gedit-symbol-browser-plugin-bin-ubuntu-i386-0.1.tar.gz/download #La URL puede cambiar al cambiar de versión
tar -xzf gedit-symbol-browser-plugin-bin-ubuntu-i386-0.1.tar.gz
&lt;/pre&gt;
&lt;p&gt;Eso sería todo. Bueno, más bien casi todo. Por último habría que configurar el plugin &amp;#8216;Herramientas externas&amp;#8217; para poder realizar diferentes tareas, como comprobar la syntaxis de nuestro código, consultar la documentación de PHP, &amp;#8217;standarizar&amp;#8217; nuestro código con el programa PHP-Beautifer,&amp;#8230; Para ver como hacerlo creo que lo mejor es que os paséis por la web de la que he recogido la mayor parte de la info que he puesto en este post, ya que mejor que él seguro que no lo explico: &lt;a href="http://www.micahcarrick.com/09-29-2007/gedit-html-editor.html"&gt;Micah Carrick&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/berriart?a=ZHkbMMyfXp4:AADX9dqEVo0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=ZHkbMMyfXp4:AADX9dqEVo0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=ZHkbMMyfXp4:AADX9dqEVo0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=ZHkbMMyfXp4:AADX9dqEVo0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=ZHkbMMyfXp4:AADX9dqEVo0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=ZHkbMMyfXp4:AADX9dqEVo0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=ZHkbMMyfXp4:AADX9dqEVo0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/berriart/~4/ZHkbMMyfXp4" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.berriart.com/2009/08/28/tunear-gedit-y-convertirlo-en-un-ide/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.berriart.com/2009/08/28/tunear-gedit-y-convertirlo-en-un-ide/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.berriart.com/2009/08/28/tunear-gedit-y-convertirlo-en-un-ide/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>artberri</name>
						<uri>http://www.berriart.com</uri>
					</author>
		<title type="html"><![CDATA[No es una foto, es Inkscape]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/berriart/~3/8xJ9W0TLZJs/" />
		<id>http://www.berriart.com/?p=498</id>
		<updated>2009-07-29T22:30:47Z</updated>
		<published>2009-07-29T22:30:47Z</published>
		<category scheme="http://www.berriart.com" term="Enlaces" /><category scheme="http://www.berriart.com" term="Inkscape" /><category scheme="http://www.berriart.com" term="batería" /><category scheme="http://www.berriart.com" term="imagen" /><category scheme="http://www.berriart.com" term="vectorial" />		<summary type="html"><![CDATA[Bueno, es Inkscape, y 250 horas de trabajo, todo hay que decirlo. Hace algún tiempo os enseñé esta impresionante bombilla que hizo el compi Joaquín con Inkscape, que ya es una pasada. Pero esto que me ha pasado Urtzi me ha dejado completamente impresionado. Juzgad por vosotros mismos:

En el Flick del autor
En alta resolución JPG [...]]]></summary>
		<content type="html" xml:base="http://www.berriart.com/2009/07/30/no-es-una-foto-es-inkscape/">&lt;p&gt;Bueno, es Inkscape, y 250 horas de trabajo, todo hay que decirlo. Hace algún tiempo os enseñé esta &lt;a href="http://www.berriart.com/2007/09/06/%C2%BFhasta-donde-llega-inkscape/"&gt;impresionante bombilla&lt;/a&gt; que hizo el compi &lt;a href="http://joaclintistgud.wordpress.com/"&gt;Joaquín&lt;/a&gt; con Inkscape, que ya es una pasada. Pero esto que me ha pasado &lt;a href="http://www.jauregibeitia.net/"&gt;Urtzi&lt;/a&gt; me ha dejado completamente impresionado. Juzgad por vosotros mismos:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/35772571@N03/3554078653/"&gt;&lt;img src="http://www.berriart.com/wp-content/uploads/2009/07/drums-inkscape.jpg" alt="drums inkscape" title="drums inkscape" width="500" height="375" class="aligncenter size-full wp-image-499" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.flickr.com/photos/35772571@N03/3554078653/"&gt;En el Flick del autor&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://public.heathenx.org/pinard/inkscape/Drums_(HR).jpg.zip"&gt;En alta resolución JPG (6000 X 4500)&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://public.heathenx.org/pinard/inkscape/Drums.svg.zip"&gt;En formato editable (SVG) por inkscape&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Aunque parezca mentira y como creo estar dejando claro, no es una foto. La imagen ha sido creada por Gilles Pinard, un tío que controla de Inkscape y que tiene mucha paciencia :p. &lt;a href="http://www.flickr.com/photos/35772571@N03/"&gt;En su cuenta de Flickr, &lt;/a&gt; podéis encontrar otras de sus obras, y algún que otro tutorial. Para el que aún no lo sepa, Inkscape es un programa libre de edición vectorial, lo que quiere decir que esta imagen puede ser escalada a cualquier tamaño sin perder resolución.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/berriart?a=8xJ9W0TLZJs:mm36vmXsurM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=8xJ9W0TLZJs:mm36vmXsurM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=8xJ9W0TLZJs:mm36vmXsurM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=8xJ9W0TLZJs:mm36vmXsurM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=8xJ9W0TLZJs:mm36vmXsurM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=8xJ9W0TLZJs:mm36vmXsurM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=8xJ9W0TLZJs:mm36vmXsurM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/berriart/~4/8xJ9W0TLZJs" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.berriart.com/2009/07/30/no-es-una-foto-es-inkscape/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.berriart.com/2009/07/30/no-es-una-foto-es-inkscape/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://www.berriart.com/2009/07/30/no-es-una-foto-es-inkscape/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>artberri</name>
						<uri>http://www.berriart.com</uri>
					</author>
		<title type="html"><![CDATA[Comprobar TLDs válidos en PHP]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/berriart/~3/JHBZwFOjKIw/" />
		<id>http://www.berriart.com/?p=496</id>
		<updated>2009-07-20T22:40:05Z</updated>
		<published>2009-07-20T22:40:05Z</published>
		<category scheme="http://www.berriart.com" term="Desarrollo web" /><category scheme="http://www.berriart.com" term="Programación" /><category scheme="http://www.berriart.com" term="código" /><category scheme="http://www.berriart.com" term="función" /><category scheme="http://www.berriart.com" term="php" /><category scheme="http://www.berriart.com" term="script" /><category scheme="http://www.berriart.com" term="tld" />		<summary type="html"><![CDATA[Estoy de vuelta de vacaciones, y no os voy a contar nada especialmente novedoso, pero es uno de esos apuntes que me hace falta de vez en cuando y que mejor sitio para tenerlo a mano que el blog.  La función en sí no es nada del otro mundo, pero a la hora de [...]]]></summary>
		<content type="html" xml:base="http://www.berriart.com/2009/07/21/comprobar-tlds-validos-en-php/">&lt;p&gt;Estoy de vuelta de vacaciones, y no os voy a contar nada especialmente novedoso, pero es uno de esos apuntes que me hace falta de vez en cuando y que mejor sitio para tenerlo a mano que el blog.  La función en sí no es nada del otro mundo, pero a la hora de comprobar el &lt;a href="http://es.wikipedia.org/wiki/TLD"&gt;TLD&lt;/a&gt; de un email o de una URL siempre es bueno tener a mano la lista de &lt;a href="http://es.wikipedia.org/wiki/TLD"&gt;TLDs&lt;/a&gt; válidos, así que los acabo de sacar de &lt;a href="http://www.iana.org/"&gt;IANA&lt;/a&gt; y he preparado esta pequeña función:&lt;/p&gt;
&lt;pre name="code" class="php"&gt;&amp;lt;?php

// TLDs válidos sacados de IANA (http://www.iana.org) el 21/07/2009
$validTLDs = array( 'ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai',
	 'al', 'am', 'an', 'ao', 'aq', 'ar', 'arpa', 'as',
	 'asia', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb',
	 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'biz', 'bj',
	 'bl', 'bm', 'bn', 'bo', 'br', 'bs', 'bt', 'bv',
	 'bw', 'by', 'bz', 'ca', 'cat', 'cc', 'cd', 'cf',
	 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co',
	 'com', 'coop', 'cr', 'cu', 'cv', 'cx', 'cy', 'cz',
	 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'edu',
	 'ee', 'eg', 'eh', 'er', 'es', 'et', 'eu', 'fi',
	 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd',
	 'ge', 'gf', 'gg', 'gh', 'gi', 'gl', 'gm', 'gn',
	 'gov', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw',
	 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id',
	 'ie', 'il', 'im', 'in', 'info', 'int', 'io', 'iq',
	 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jobs', 'jp',
	 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw',
	  'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr',
	  'ls', 'lt', 'lu', 'lv', 'ly', 'ma', 'mc', 'md',
	  'me', 'mf', 'mg', 'mh', 'mil', 'mk', 'ml', 'mm',
	  'mn', 'mo', 'mobi', 'mp', 'mq', 'mr', 'ms', 'mt',
	  'mu', 'museum', 'mv', 'mw', 'mx', 'my', 'mz', 'na',
	  'name', 'nc', 'ne', 'net', 'nf', 'ng', 'ni', 'nl',
	  'no', 'np', 'nr', 'nu', 'nz', 'om', 'org', 'pa',
	  'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn',
	  'pr', 'pro', 'ps', 'pt', 'pw', 'py', 'qa', 're',
	  'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd',
	  'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm',
	  'sn', 'so', 'sr', 'st', 'su', 'sv', 'sy', 'sz',
	  'tc', 'td', 'tel', 'tf', 'tg', 'th', 'tj', 'tk',
	  'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'travel', 'tt',
	  'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'um', 'us', 'uy',
	  'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf',
	  'ws', 'ye', 'yt', 'yu', 'za', 'zm', 'zw'
);

/**
 * Función is_valid_tld
 *
 * Función que comprueba si el TLD de una URL o un email es válido o no
 *
 * @param string $urloremail Email o URL a testear
 * @return boolean Devuelve TRUE si la entrada tiene un TLD válido
 */
function is_valid_tld( $urloremail ) {
	global $validTLDs;

	// Check if is an email
	if( strpos($urloremail, '@') &amp;gt; 0 &amp;#038;&amp;#038; strpos($urloremail, '://') === false ) {
		// Is an email, get TLD
		$tld = end( explode('.', $urloremail) );
	}
	else {
		// Is an url, get TLD
		$host = parse_url($urloremail, PHP_URL_HOST);
		$tld = end( explode('.', $host) );
	}

	return in_array($tld, $validTLDs);
}

?&amp;gt;&lt;/pre&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/berriart?a=JHBZwFOjKIw:RyimU7T3gMo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=JHBZwFOjKIw:RyimU7T3gMo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=JHBZwFOjKIw:RyimU7T3gMo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=JHBZwFOjKIw:RyimU7T3gMo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=JHBZwFOjKIw:RyimU7T3gMo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=JHBZwFOjKIw:RyimU7T3gMo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=JHBZwFOjKIw:RyimU7T3gMo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/berriart/~4/JHBZwFOjKIw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.berriart.com/2009/07/21/comprobar-tlds-validos-en-php/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.berriart.com/2009/07/21/comprobar-tlds-validos-en-php/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.berriart.com/2009/07/21/comprobar-tlds-validos-en-php/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>artberri</name>
						<uri>http://www.berriart.com</uri>
					</author>
		<title type="html"><![CDATA[Hay muchas maneras de decir las cosas]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/berriart/~3/pNd6GHZJ5Es/" />
		<id>http://www.berriart.com/?p=491</id>
		<updated>2009-07-04T14:08:45Z</updated>
		<published>2009-07-04T14:06:20Z</published>
		<category scheme="http://www.berriart.com" term="Noticias" /><category scheme="http://www.berriart.com" term="berriart" /><category scheme="http://www.berriart.com" term="humor" /><category scheme="http://www.berriart.com" term="vacaciones" />		<summary type="html"><![CDATA[&#60;?php
/**
 * Notification to Berriart readers
 *
 * @package blog
 * @author Alberto Varela (artberri)
 * @version 2.0
 */

$artberri = new myself();

while( time() > strtotime("2009-07-03 19:00:00") &#038;&#038; time() < strtotime("2009-07-15 09:30:00") ) {
	holidays($artberri);
}

function holidays($people) {
	if( time() > strtotime("2009-07-06 13:00:00") &#038;&#038; time() < strtotime("2009-07-13 19:30:00") ) {
		holidays_in_menorca($people);
	}
	else {
		$people->eat();
		if( !$people->istired() &#038;&#038; $people->isbored() ) {
			$people->party();
		}
		sleep(8*3600);
	}
}

function holidays_in_menorca($people) {
	$people->beach();
	$people->eat();
	$people->beach();
	if( !$people->istired() [...]]]></summary>
		<content type="html" xml:base="http://www.berriart.com/2009/07/04/hay-muchas-maneras-de-decir-las-cosas/">&lt;pre name="code" class="php"&gt;&amp;lt;?php
/**
 * Notification to Berriart readers
 *
 * @package blog
 * @author Alberto Varela (artberri)
 * @version 2.0
 */

$artberri = new myself();

while( time() &gt; strtotime("2009-07-03 19:00:00") &amp;#038;&amp;#038; time() &lt; strtotime("2009-07-15 09:30:00") ) {
	holidays($artberri);
}

function holidays($people) {
	if( time() &gt; strtotime("2009-07-06 13:00:00") &amp;#038;&amp;#038; time() &lt; strtotime("2009-07-13 19:30:00") ) {
		holidays_in_menorca($people);
	}
	else {
		$people-&gt;eat();
		if( !$people-&gt;istired() &amp;#038;&amp;#038; $people-&gt;isbored() ) {
			$people-&gt;party();
		}
		sleep(8*3600);
	}
}

function holidays_in_menorca($people) {
	$people-&gt;beach();
	$people-&gt;eat();
	$people-&gt;beach();
	if( !$people-&gt;istired() &amp;#038;&amp;#038; $people-&gt;isbored() ) {
		$people-&gt;party();
	}
	sleep(8*3600);
}

?&amp;gt;&lt;/pre&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/berriart?a=pNd6GHZJ5Es:-bxgnNyZ8Y4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=pNd6GHZJ5Es:-bxgnNyZ8Y4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=pNd6GHZJ5Es:-bxgnNyZ8Y4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=pNd6GHZJ5Es:-bxgnNyZ8Y4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=pNd6GHZJ5Es:-bxgnNyZ8Y4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=pNd6GHZJ5Es:-bxgnNyZ8Y4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=pNd6GHZJ5Es:-bxgnNyZ8Y4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/berriart/~4/pNd6GHZJ5Es" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.berriart.com/2009/07/04/hay-muchas-maneras-de-decir-las-cosas/#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://www.berriart.com/2009/07/04/hay-muchas-maneras-de-decir-las-cosas/feed/atom/" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://www.berriart.com/2009/07/04/hay-muchas-maneras-de-decir-las-cosas/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>artberri</name>
						<uri>http://www.berriart.com</uri>
					</author>
		<title type="html"><![CDATA[Protege y ayuda a proteger la privacidad de tus fotos en Facebook]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/berriart/~3/NvyDTq85xlo/" />
		<id>http://www.berriart.com/?p=488</id>
		<updated>2009-06-22T22:31:20Z</updated>
		<published>2009-06-22T22:30:19Z</published>
		<category scheme="http://www.berriart.com" term="Aplicaciones web" /><category scheme="http://www.berriart.com" term="Noticias" /><category scheme="http://www.berriart.com" term="aplicación" /><category scheme="http://www.berriart.com" term="Facebook" /><category scheme="http://www.berriart.com" term="privacidad" />		<summary type="html"><![CDATA[Lo de la privacidad en internet es un tema sobre el que se podrían estar horas hablando, pero hay ciertas cosas que creo que son muy fáciles de evitar sin necesidad de tanta discusión. Me he enterado que los álbumes de fotos que subimos a Facebook quedan marcados por defecto como públicos, lo que quiere [...]]]></summary>
		<content type="html" xml:base="http://www.berriart.com/2009/06/23/protege-privacidad-fotos-facebook/">&lt;p&gt;Lo de la privacidad en internet es un tema sobre el que se podrían estar horas hablando, pero hay ciertas cosas que creo que son muy fáciles de evitar sin necesidad de tanta discusión. Me he enterado que los álbumes de fotos que subimos a Facebook quedan marcados por defecto como públicos, lo que quiere decir que cualquier persona puede ver esas fotos. Me parece un asunto grave porque la mayoría de la gente piensa que solo sus amigos podrán ver esas fotos, pero no es así, y hay fotos que la gente no subiría si supiese que cualquiera puede verlas (lo he preguntado entre amigos del barrio y el 100% de encuestados pensaba que solo sus amigos veían sus fotos, o como mucho amigos de amigos). Este problema me parece que hubiera sido (y es) muy fácil de evitar, pero alguna razón les llevaría a la gente de Facebook a hacerlo (no quiero pensar cual).&lt;/p&gt;
&lt;p&gt;De esto me enteré gracias a &lt;a href="http://www.blogoff.es/2009/05/25/facebook-permite-ver-los-albumes-de-fotos-de-cualquiera/"&gt;un post en Blogoff&lt;/a&gt; en el que en principio se trataba el asunto como si fuera un bug de FB, lo que cualquiera hubiera pensado al saber algo así, y no una cuestión de privacidad. Pero teniendo en cuenta que la mayoría de users de Facebook no se interesan en leer sobre esas cosas en internet, he pensado en otra manera de hacerles llegar esa noticia y de avisarles para que protejan sus fotos cambiando la privacidad a sus álbumes.&lt;/p&gt;
&lt;p&gt;Lo que he hecho ha sido crear una aplicación para FB que avisa sobre ello y ayuda a configurar tus álbumes para que solo los vean tus amigos. Además te sugiere que invites a tus amigos para que ellos también protejan sus fotos. Creo que es una manera de llegar a más gente, si todo va bien y la gente se la agrega y avisa a sus amigos mediante invitación. La aplicación la os la podéis agregar pinchando en esta URL:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://apps.facebook.com/tu-privacidad/"&gt;http://apps.facebook.com/tu-privacidad/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ya me diréis que os parece y si vuestros albumes eran públicos o no.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/berriart?a=NvyDTq85xlo:TPmUEtjYMuc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=NvyDTq85xlo:TPmUEtjYMuc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=NvyDTq85xlo:TPmUEtjYMuc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=NvyDTq85xlo:TPmUEtjYMuc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=NvyDTq85xlo:TPmUEtjYMuc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=NvyDTq85xlo:TPmUEtjYMuc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=NvyDTq85xlo:TPmUEtjYMuc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/berriart/~4/NvyDTq85xlo" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.berriart.com/2009/06/23/protege-privacidad-fotos-facebook/#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://www.berriart.com/2009/06/23/protege-privacidad-fotos-facebook/feed/atom/" thr:count="4" />
		<thr:total>4</thr:total>
	<feedburner:origLink>http://www.berriart.com/2009/06/23/protege-privacidad-fotos-facebook/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>artberri</name>
						<uri>http://www.berriart.com</uri>
					</author>
		<title type="html"><![CDATA[Clase PHP para la nueva API de Minube]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/berriart/~3/s0RQyynbv5o/" />
		<id>http://www.berriart.com/?p=483</id>
		<updated>2009-06-17T08:26:54Z</updated>
		<published>2009-06-17T08:26:54Z</published>
		<category scheme="http://www.berriart.com" term="Aplicaciones web" /><category scheme="http://www.berriart.com" term="Desarrollo web" /><category scheme="http://www.berriart.com" term="Recursos" /><category scheme="http://www.berriart.com" term="API" /><category scheme="http://www.berriart.com" term="clase" /><category scheme="http://www.berriart.com" term="minube" /><category scheme="http://www.berriart.com" term="php" />		<summary type="html"><![CDATA[Últimamente a las startups españolas les ha dado por crear APIs para que todos podamos utilizar sus datos, crear mashups,&#8230; Ya lo hicieron 11870, nvivo, bitacoras,&#8230; y ahora le ha tocado el turno a Minube. Personalmente me parece estupendo, ya sabemos todos lo que nos enseñaron de pequeñitos, compartir es bueno.
Pues aprovechando esta salida, y [...]]]></summary>
		<content type="html" xml:base="http://www.berriart.com/2009/06/17/clase-php-api-minube/">&lt;p&gt;Últimamente a las &lt;em&gt;startups&lt;/em&gt; españolas les ha dado por crear APIs para que todos podamos utilizar sus datos, crear mashups,&amp;#8230; Ya lo hicieron &lt;a href="http://11870.com"&gt;11870&lt;/a&gt;, &lt;a href="http://www.nvivo.es/"&gt;nvivo&lt;/a&gt;, &lt;a href="http://bitacoras.com"&gt;bitacoras&lt;/a&gt;,&amp;#8230; y ahora le ha tocado el turno a &lt;a href="http://www.minube.com"&gt;Minube&lt;/a&gt;. Personalmente me parece estupendo, ya sabemos todos lo que nos enseñaron de pequeñitos, compartir es bueno.&lt;/p&gt;
&lt;p&gt;&lt;a style="float:left; margin:0 5px 5px 0;" href="http://www.minube.com/api/"&gt;&lt;img src="http://1.images.minube.com/minube_api_01.png" alt="Powered by Minube" title="Powered by Minube"  style="border:0px;vertical-align:bottom;" /&gt;&lt;/a&gt;Pues aprovechando esta salida, y teniendo en cuenta que se me ha ocurrido una semi-idea para la que tal vez pueda usar esta API, he creado una clase en PHP para facilitar su manejo, &lt;a href="http://www.berriart.com/minube-php/"&gt;Minube PHP&lt;/a&gt;. Teniendo en cuenta que la idea puede no llegar  nada o quedarse aparcada como tantas otras cosas, he creido conveniente publicar la clase para que otros que si vayan a llevar a cabo las suyas se ahorren el trabajo.&lt;/p&gt;
&lt;p&gt;Minube PHP: &lt;a href="http://www.berriart.com/minube-php/"&gt;http://www.berriart.com/minube-php/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(Hace más de un mes que no escribía en el blog, soy un poco vago ¿verdad?)&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/berriart?a=s0RQyynbv5o:N5qGxX7wcJs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=s0RQyynbv5o:N5qGxX7wcJs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=s0RQyynbv5o:N5qGxX7wcJs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=s0RQyynbv5o:N5qGxX7wcJs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=s0RQyynbv5o:N5qGxX7wcJs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=s0RQyynbv5o:N5qGxX7wcJs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=s0RQyynbv5o:N5qGxX7wcJs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/berriart/~4/s0RQyynbv5o" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.berriart.com/2009/06/17/clase-php-api-minube/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.berriart.com/2009/06/17/clase-php-api-minube/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://www.berriart.com/2009/06/17/clase-php-api-minube/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>artberri</name>
						<uri>http://www.berriart.com</uri>
					</author>
		<title type="html"><![CDATA[Ajustar el centro y el zoom de un listado de puntos con Google Maps]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/berriart/~3/YHwYL6FDX00/" />
		<id>http://www.berriart.com/?p=477</id>
		<updated>2009-05-13T13:26:48Z</updated>
		<published>2009-05-13T13:25:55Z</published>
		<category scheme="http://www.berriart.com" term="Desarrollo web" /><category scheme="http://www.berriart.com" term="Programación" /><category scheme="http://www.berriart.com" term="centro" /><category scheme="http://www.berriart.com" term="google maps" /><category scheme="http://www.berriart.com" term="javascript" /><category scheme="http://www.berriart.com" term="zoom" />		<summary type="html"><![CDATA[Sé que ando tarde, pero son cosas que pasan. Cuando tenía que mostrar un listado de puntos en un mapa usando la API de Google Maps, siempre he tenido ciertos problemas para ajustar en lo posible el mapa a los puntos mostrados. Es decir, encontraba problemas en elegir el centro y el zoom exacto para [...]]]></summary>
		<content type="html" xml:base="http://www.berriart.com/2009/05/13/ajustar-el-centro-y-el-zoom-de-un-listado-de-puntos-con-google-maps/">&lt;p&gt;Sé que ando tarde, pero son cosas que pasan. Cuando tenía que mostrar un listado de puntos en un mapa usando la API de Google Maps, siempre he tenido ciertos problemas para ajustar en lo posible el mapa a los puntos mostrados. Es decir, encontraba problemas en elegir el centro y el zoom exacto para que se vieran todos los puntos lo más cerca posible. Para conseguirlo usaba un par de funciones en PHP y realizaba el cálculo &lt;em&gt;server side&lt;/em&gt;, aunque no siempre conseguía el resultado perfecto.&lt;/p&gt;
&lt;p&gt;Bueno, pues hace poco que me he enterado que la propia API de Google Maps te permite hacerlo sin muchas complicaciones. Así que por si acaso hay por ahí algún despistadillo como yo que se páis que lo podéis hacer de la siguiente manera (más abajo hay un ejemplo completo):&lt;/p&gt;
&lt;pre class="javascript"&gt;
/* Primero seteamos el centro a cualquier punto */
map.setCenter(new GLatLng(0,0),0);

/* Creamos un objeto vacio GLatLngBounds() */
var bounds = new GLatLngBounds();

/* Por cada uno de los puntos a incluir en el mapa extendemos los límites del objeto */
/* En este caso latlng debería ser un objeto GLatLng */
/* Ejemplo: var latlng = new GLatLng(43, -2); */
bounds.extend(latlng);

/* Cuando hayamos incluido todos los puntos seteamos el centro y el zoom usando el objeto 'bounds' */
map.setZoom(map.getBoundsZoomLevel(bounds));
map.setCenter(bounds.getCenter());
&lt;/pre&gt;
&lt;p&gt;Su modo de empleo se puede ver mejor en el siguiente ejemplo. Aprovechando que hoy se jugará la final de Copa, he creado un pequeño mapita con los puntos de Bilbao donde habrá pantallas gigantes para seguir el partido de mi querido Athletic contra el Barça, el zoom y el centro del mapa se calculan usando el método que he explicado más arriba.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.berriart.com/examples/ajustar-centro-y-zoom-google-maps.html"&gt;http://www.berriart.com/examples/ajustar-centro-y-zoom-google-maps.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Y ya puestos, os comento a los twitteros del Athletic que podéis conseguir una camiseta oficial gracias a &lt;a href="http://bilbao.bi"&gt;Bilbao.bi&lt;/a&gt; si estos días comentáis la final por Twitter. Para obtener más información&lt;a href="http://bilbao.bi/copa_athletic"&gt; seguir el siguiente enlace&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Si estos días no me véis por &lt;em&gt;la internete&lt;/em&gt; es que hemos ganado la copa &lt;img src='http://www.berriart.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /&gt;  Athletic, beti zurekin!&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.berriart.com/wp-content/uploads/2009/05/athletic-campeon.jpg" alt="athletic campeon de copa" width="550" height="389" style="display:block;margin:auto;" /&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/berriart?a=YHwYL6FDX00:Rfv4SxPvts8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=YHwYL6FDX00:Rfv4SxPvts8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=YHwYL6FDX00:Rfv4SxPvts8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=YHwYL6FDX00:Rfv4SxPvts8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=YHwYL6FDX00:Rfv4SxPvts8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=YHwYL6FDX00:Rfv4SxPvts8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=YHwYL6FDX00:Rfv4SxPvts8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/berriart/~4/YHwYL6FDX00" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.berriart.com/2009/05/13/ajustar-el-centro-y-el-zoom-de-un-listado-de-puntos-con-google-maps/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.berriart.com/2009/05/13/ajustar-el-centro-y-el-zoom-de-un-listado-de-puntos-con-google-maps/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.berriart.com/2009/05/13/ajustar-el-centro-y-el-zoom-de-un-listado-de-puntos-con-google-maps/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>artberri</name>
						<uri>http://www.berriart.com</uri>
					</author>
		<title type="html"><![CDATA[Hook al activar o desacivar un plugin de WordPress]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/berriart/~3/bqXriM-Ynzk/" />
		<id>http://www.berriart.com/?p=473</id>
		<updated>2009-05-05T22:51:25Z</updated>
		<published>2009-05-05T22:49:47Z</published>
		<category scheme="http://www.berriart.com" term="Desarrollo web" /><category scheme="http://www.berriart.com" term="Plugins" /><category scheme="http://www.berriart.com" term="Tutoriales" /><category scheme="http://www.berriart.com" term="Web 2.0" /><category scheme="http://www.berriart.com" term="WordPress" /><category scheme="http://www.berriart.com" term="activar" /><category scheme="http://www.berriart.com" term="funciones" /><category scheme="http://www.berriart.com" term="plugins de wordpress" />		<summary type="html"><![CDATA[Si eres desarrollador de plugins de WordPress, te habrá pasado alguna vez que has querido que se ejecute alguna acción cuando un usuario instala uno de tus plugins o cuando lo desinstala. Un ejemplo claro es que tu plugin necesite una tabla de base de datos adicional, y necesite que ésta se cree al activar [...]]]></summary>
		<content type="html" xml:base="http://www.berriart.com/2009/05/06/hook-activar-desactivar-plugin/">&lt;p&gt;Si eres desarrollador de plugins de WordPress, te habrá pasado alguna vez que has querido que se ejecute alguna acción cuando un usuario instala uno de tus plugins o cuando lo desinstala. Un ejemplo claro es que tu plugin necesite una tabla de base de datos adicional, y necesite que ésta se cree al activar el plugin. Al igual que al desinstalar el plugin podría ser que esa tabla ya no sirva y quieras que se borre.&lt;/p&gt;
&lt;p&gt;Para ello Wordpress nos ofrece dos funciones que nos permitirán que se ejecute algo al activar o desactivar un plugin, estas funciones son &lt;em&gt;register_activation_hook&lt;/em&gt; y &lt;em&gt;register_deactivation_hook&lt;/em&gt;. Se puede ver su modo de empleo en las siguientes líneas de código que simulan la situación que he expuesto antes:&lt;/p&gt;
&lt;pre name="code" class="php"&gt;&amp;lt;?php

register_activation_hook( __FILE__, 'plugin_name_activate' );
register_deactivation_hook( __FILE__, 'plugin_name_deactivate' );

function plugin_name_activate() {
	global $wpdb;
	$sql = 'CREATE TABLE `' . $wpdb-&gt;prefix . 'plugin_name`
		( `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
		`date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
		`otro` VARCHAR( 255 ) NOT NULL )
	';
	$wpdb-&gt;query($sql);

}

function plugin_name_deactivate() {
	global $wpdb;
	$sql = 'DROP TABLE `' . $wpdb-&gt;prefix . 'plugin_name`';
	$wpdb-&gt;query($sql);

}

?&amp;gt;&lt;/pre&gt;
&lt;p&gt;A mi me han sido de utilidad en más de una ocasión, ya me contaréis.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/berriart?a=bqXriM-Ynzk:mAb4QuuKjYo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=bqXriM-Ynzk:mAb4QuuKjYo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=bqXriM-Ynzk:mAb4QuuKjYo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=bqXriM-Ynzk:mAb4QuuKjYo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=bqXriM-Ynzk:mAb4QuuKjYo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=bqXriM-Ynzk:mAb4QuuKjYo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=bqXriM-Ynzk:mAb4QuuKjYo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/berriart/~4/bqXriM-Ynzk" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.berriart.com/2009/05/06/hook-activar-desactivar-plugin/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.berriart.com/2009/05/06/hook-activar-desactivar-plugin/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.berriart.com/2009/05/06/hook-activar-desactivar-plugin/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>artberri</name>
						<uri>http://www.berriart.com</uri>
					</author>
		<title type="html"><![CDATA[Concatenar dentro de la propia consulta en MySQL]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/berriart/~3/vyCZStj6170/" />
		<id>http://www.berriart.com/?p=470</id>
		<updated>2009-04-29T08:35:31Z</updated>
		<published>2009-04-29T08:35:31Z</published>
		<category scheme="http://www.berriart.com" term="Desarrollo web" /><category scheme="http://www.berriart.com" term="Programación" /><category scheme="http://www.berriart.com" term="bases de datos" /><category scheme="http://www.berriart.com" term="concatenar" /><category scheme="http://www.berriart.com" term="consultas" /><category scheme="http://www.berriart.com" term="mysql" />		<summary type="html"><![CDATA[Me estoy empezando a acostumbrar a buscar soluciones a mis necesidades desde la propia consulta a la BD. Antes me limitaba a realizar consultas INSERT, UPDATE, SELECT o DELETE de lo más normales, y una vez recibidos los datos los trataba mediante PHP. Incluso en mis inicios, para hacer una media o buscar el máximo [...]]]></summary>
		<content type="html" xml:base="http://www.berriart.com/2009/04/29/concatenar-dentro-de-la-propia-consulta-en-mysql/">&lt;p&gt;Me estoy empezando a acostumbrar a buscar soluciones a mis necesidades desde la propia consulta a la BD. Antes me limitaba a realizar consultas &lt;em&gt;INSERT&lt;/em&gt;, &lt;em&gt;UPDATE&lt;/em&gt;, &lt;em&gt;SELECT&lt;/em&gt; o &lt;em&gt;DELETE&lt;/em&gt; de lo más normales, y una vez recibidos los datos los trataba mediante PHP. Incluso en mis inicios, para hacer una media o buscar el máximo consultaba todos los datos y sacaba la solución programando en vez de usar algo tan simple como &lt;em&gt;AVG&lt;/em&gt; o &lt;em&gt;MAX&lt;/em&gt; en la consulta. Imagino que tampoco es tan raro cuando empiezas y cuando nadie te ha explicado que se puede hacer de otra manera.&lt;/p&gt;
&lt;p&gt;Pero concatenar era algo que creo que nunca había necesitado -aunque sabía que podía hacerlo-, y esta semana en cambio he tenido que probar a ver que tal. Además, al final incluso he acabado usando una función que desconocía, &lt;em&gt;GROUP_CONCAT&lt;/em&gt;, en vez de la más conocida &lt;em&gt;CONCAT&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Imaginemos que queremos un string con la dirección completa de un lugar y que tenemos esa información guardada en una tabla, pero tenemos guardados por separado la dirección, el código postal, la ciudad y la provincia. Puedes hacer una SELECT, pedirle todos los datos y concatenarlos al gusto mediante PHP. Pero también podemos recibir los datos ya formateados de la propia consulta utilizando &lt;em&gt;CONCAT&lt;/em&gt;, por ejemplo:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SELECT CONCAT( `direccion`, ' - ', `ciudad`, '/', `codigopostal`, ' (', `provincia`, ')' ) as `address` FROM `places` WHERE `id` = '123'&lt;br /&gt;
Nos devolvería algo así: "C/ La Paz, 43 - Barakaldo/48903 (Bizkaia)"&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;También puede que queramos juntar varios campos en un string, separados todos por el mismo caracter o caracteres. Para eso, lo mejor sería usar &lt;em&gt;CONCAT_WS&lt;/em&gt;, dónde el primer parametro que le pasamos es el separador que concatenará el resto de parametros de la función. Vamos a poner otro ejemplo:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SELECT CONCAT_WS( ', ', `telefono_personal`, `telefono_trabajo`, `movil`, `fax` ) as `telephone_list` FROM `listing` WHERE `id` = '123'&lt;br /&gt;
Nos devolvería algo así: "945678345, 91234567, 612312389, 911234234"&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El último caso para el que voy a poner otro ejemplo es para el uso de &lt;em&gt;GROUP_CONCAT&lt;/em&gt;. Imagina que tenemos un tabla de posts, y una tabla de tags relacionada con los posts. Es decir cada uno de los posts puede tener uno, ninguno o varios tags. Y nuestro objetivo en este caso, es sacar de una sola consulta un listado con los títulos de los posts y todos los tags asociados a este. Se podría hacer con una serie de consultas y PHP, pero también lo podemos hacer de una sola (lo hacemos así porque una INNER JOIN no sacaría los posts que no tuvieran tags asociados y una LEFT JOIN nos saquería una fila por cada tag y lo que queremos es una fila por cada post):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SELECT posts.title, (SELECT GROUP_CONCAT(tags.name) FROM tags WHERE posts.id = tags.post_id) AS `alltags` FROM posts&lt;br /&gt;
Nos devolvería algo así:&lt;br /&gt;
"Tïtulo del primer post", "tag1, tag2, tag3, tag4"&lt;br /&gt;
"Post sin tags", NULL&lt;br /&gt;
"Este sería otro post", "tag3, tag4, tag1"&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;No sé si os servirá de mucha ayuda, pero al menos, recordaros a todos que &lt;a href="http://dev.mysql.com/doc/refman/5.0/es/string-functions.html"&gt;MySQL tiene funciones para strings&lt;/a&gt; y que muchas veces pueden ayudarnos y ahorrarnos un poco de código.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/berriart?a=vyCZStj6170:wN8rqCPxX0U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=vyCZStj6170:wN8rqCPxX0U:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=vyCZStj6170:wN8rqCPxX0U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=vyCZStj6170:wN8rqCPxX0U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=vyCZStj6170:wN8rqCPxX0U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=vyCZStj6170:wN8rqCPxX0U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=vyCZStj6170:wN8rqCPxX0U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/berriart/~4/vyCZStj6170" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.berriart.com/2009/04/29/concatenar-dentro-de-la-propia-consulta-en-mysql/#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://www.berriart.com/2009/04/29/concatenar-dentro-de-la-propia-consulta-en-mysql/feed/atom/" thr:count="4" />
		<thr:total>4</thr:total>
	<feedburner:origLink>http://www.berriart.com/2009/04/29/concatenar-dentro-de-la-propia-consulta-en-mysql/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>artberri</name>
						<uri>http://www.berriart.com</uri>
					</author>
		<title type="html"><![CDATA[Este finde Nonick Conference]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/berriart/~3/xyD0__kMX08/" />
		<id>http://www.berriart.com/?p=468</id>
		<updated>2009-04-24T10:04:54Z</updated>
		<published>2009-04-24T10:04:54Z</published>
		<category scheme="http://www.berriart.com" term="Noticias" /><category scheme="http://www.berriart.com" term="evento" /><category scheme="http://www.berriart.com" term="internet" /><category scheme="http://www.berriart.com" term="nonick" /><category scheme="http://www.berriart.com" term="vídeo" />		<summary type="html"><![CDATA[Hoy (yo solo a la tarde) y mañana estaré en Nonick Conference en Bilbao. Es un evento sobre Internet, muy centrado en el vídeo en la red. Al principio me echaba un poco para atrás el que el evento fuera en inglés, pero al final me he animado. Así que por allí estaré.
También asistirán Raquel, [...]]]></summary>
		<content type="html" xml:base="http://www.berriart.com/2009/04/24/este-finde-nonick-conference/">&lt;p&gt;Hoy (yo solo a la tarde) y mañana estaré en &lt;a href="http://nonickconference.com/"&gt;Nonick Conference&lt;/a&gt; en Bilbao. Es un evento sobre Internet, muy centrado en el vídeo en la red. Al principio me echaba un poco para atrás el que el evento fuera en inglés, pero al final me he animado. Así que por allí estaré.&lt;/p&gt;
&lt;p&gt;También asistirán &lt;a href="http://www.seofemenino.com/"&gt;Raquel&lt;/a&gt;, &lt;a href="http://www.galder.net"&gt;Galder&lt;/a&gt;, &amp;#8230; y algún que otro blogger local. ¿Alguno de vosotros va a estar? Para los que no podáis asistir tenéis la opción de ver parte del &lt;a href="http://nonickconference.com/"&gt;evento en straming desde la web&lt;/a&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/berriart?a=xyD0__kMX08:eOhaaHpkAKY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=xyD0__kMX08:eOhaaHpkAKY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=xyD0__kMX08:eOhaaHpkAKY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=xyD0__kMX08:eOhaaHpkAKY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=xyD0__kMX08:eOhaaHpkAKY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/berriart?a=xyD0__kMX08:eOhaaHpkAKY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/berriart?i=xyD0__kMX08:eOhaaHpkAKY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/berriart/~4/xyD0__kMX08" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.berriart.com/2009/04/24/este-finde-nonick-conference/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.berriart.com/2009/04/24/este-finde-nonick-conference/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://www.berriart.com/2009/04/24/este-finde-nonick-conference/</feedburner:origLink></entry>
	</feed><!-- Dynamic Page Served (once) in 0.585 seconds --><!-- Cached page served by WP-Cache -->
