<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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" version="2.0">

<channel>
	<title>el 33</title>
	
	<link>http://www.el33.es</link>
	<description>Blog sobre programación, informática, desarrollo web, aplicaciones y cualquier otra cosa que se me ocurra</description>
	<pubDate>Wed, 02 Sep 2009 11:52:30 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/El33" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="el33" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Último post?</title>
		<link>http://www.el33.es/2009/09/02/ultimo-post/</link>
		<comments>http://www.el33.es/2009/09/02/ultimo-post/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 11:50:44 +0000</pubDate>
		<dc:creator>campbell</dc:creator>
		
		<category><![CDATA[personal]]></category>

		<guid isPermaLink="false">http://www.el33.es/?p=59</guid>
		<description><![CDATA[Hace ya mucho tiempo que tengo el blog abandonado, el motivo principal es la falta de tiempo (y pereza, todo hay que decirlo). Un día de estos compraré otro dominio y empezaré más seriamente la ardua tarea de escribir regularmente.
Ahora estoy bastante interesado en la plataforma android, mi hermano y yo hemos creado unas cuantas [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Último post?", url: "http://www.el33.es/2009/09/02/ultimo-post/" });</script>]]></description>
			<content:encoded><![CDATA[<p>Hace ya mucho tiempo que tengo el blog abandonado, el motivo principal es la falta de tiempo (y pereza, todo hay que decirlo). Un día de estos compraré otro dominio y empezaré más seriamente la ardua tarea de escribir regularmente.</p>
<p>Ahora estoy bastante interesado en la plataforma android, mi hermano y yo hemos creado unas cuantas aplicaciones y tenemos bastantes ideas por desarrollar. Para los que queráis seguir nuestro progreso estamos en <a title="Androidsx" href="http://www.androidsx.com">http://www.androidsx.com</a>.</p>
<p>Espero volver algún día, de momento cuento mis tonterías en <a href="http://twitter.com/ompemi">twitter</a> <img src='http://www.el33.es/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=1982493f-9e51-40dc-9c64-5a5052c802c9&amp;title=%C3%9Altimo+post%3F&amp;url=http%3A%2F%2Fwww.el33.es%2F2009%2F09%2F02%2Fultimo-post%2F">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.el33.es/2009/09/02/ultimo-post/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Links interesantes: PHP</title>
		<link>http://www.el33.es/2008/10/11/links-interesantes-php/</link>
		<comments>http://www.el33.es/2008/10/11/links-interesantes-php/#comments</comments>
		<pubDate>Sat, 11 Oct 2008 16:15:09 +0000</pubDate>
		<dc:creator>campbell</dc:creator>
		
		<category><![CDATA[Links interesantes]]></category>

		<category><![CDATA[links]]></category>

		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.el33.es/?p=58</guid>
		<description><![CDATA[Voy a empezar una serie de post con links interesantes de un tema en concreto. Son enlaces que tengo perdidos por mis marcadores o que acabo de encontrar que merecen la pena. Empezaremos con PHP:

PHP senior: presentación con buenas prácticas de desarrollo en PHP.
Deuteria: modelar con ArgoUML aplicaciones en PHP.
Carlos Leopoldo: screen scrapping a lo [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Links interesantes: PHP", url: "http://www.el33.es/2008/10/11/links-interesantes-php/" });</script>]]></description>
			<content:encoded><![CDATA[<p>Voy a empezar una serie de post con <strong>links interesantes</strong> de un tema en concreto. Son enlaces que tengo perdidos por mis marcadores o que acabo de encontrar que merecen la pena. Empezaremos con <strong>PHP</strong>:</p>
<ul>
<li><a href="http://phpsenior.blogspot.com/2008/06/presentacin-buenas-prcticas-de.html" target="_blank">PHP senior:</a> presentación con buenas prácticas de desarrollo en PHP.</li>
<li><a href="http://deuteria.blogspot.com/2008/03/modelando-con-argouml-aplicaciones-en.html" target="_blank">Deuteria:</a> modelar con ArgoUML aplicaciones en PHP.</li>
<li><a href="http://www.carlosleopoldo.com/post/como-extraer-contenido-de-un-html-con-htmlsql/" target="_blank">Carlos Leopoldo:</a> screen scrapping a lo SQL.</li>
<li><a href="http://www.phpbsd.net/2008/04/11/optimizacion-de-aplicaciones-php-server-side/" target="_blank">PHPBSD:</a> optimización de aplicaciones server-side.</li>
<li><a href="http://boozox.net/php/manual-completo-y-sencillo-de-expresiones-regulares-en-php/">Boozox:</a> manual sencillo de regex en PHP.</li>
<li><a href="http://immike.net/blog/2007/08/15/5-tools-every-php-programmer-should-know-about/" target="_blank">ImMike:</a> 5 aplicaciones que todo desarrollador de PHP debería saber.</li>
<li><a href="http://phpbarcelona.org/materiales-de-la-barcelona-php-workshop-1" target="_blank">PHPBarcelona:</a> material muy interesante que se dio en un workshop del grupo PHPBarcelona</li>
<li><a href="http://www.ibm.com/developerworks/opensource/library/os-php-secure-apps/index.html" target="_blank">IBM:</a> 7 hábitos para escribir aplicaciones seguras en PHP</li>
</ul>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=1982493f-9e51-40dc-9c64-5a5052c802c9&amp;title=Links+interesantes%3A+PHP&amp;url=http%3A%2F%2Fwww.el33.es%2F2008%2F10%2F11%2Flinks-interesantes-php%2F">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.el33.es/2008/10/11/links-interesantes-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Experiencia de 2 meses de trabajo en Cambridge</title>
		<link>http://www.el33.es/2008/09/15/experiencia-de-2-meses-de-trabajo-en-cambridge/</link>
		<comments>http://www.el33.es/2008/09/15/experiencia-de-2-meses-de-trabajo-en-cambridge/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 15:48:02 +0000</pubDate>
		<dc:creator>campbell</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[personal]]></category>

		<category><![CDATA[trabajo]]></category>

		<guid isPermaLink="false">http://www.el33.es/?p=57</guid>
		<description><![CDATA[Voy a dar un breve repaso sobre lo que he vivido este verano en Cambridge respecto al trabajo, ya que hoy es mi último día y la verdad es que estoy un poco ocioso : )
Al principio vine con miedo, primera vez que estaba en un país extranjero con un idioma que a pesar de [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Experiencia de 2 meses de trabajo en Cambridge", url: "http://www.el33.es/2008/09/15/experiencia-de-2-meses-de-trabajo-en-cambridge/" });</script>]]></description>
			<content:encoded><![CDATA[<p>Voy a dar un breve repaso sobre lo que <strong>he vivido este verano en Cambridge</strong> respecto al trabajo, ya que hoy es mi último día y la verdad es que estoy un poco ocioso : )</p>
<p>Al principio vine con miedo, primera vez que estaba en un país extranjero con un idioma que a pesar de haberlo estudiado toda la vida, no había tenido la posibilidad de tener que hablarlo día a día. Aparte estaba el trabajo que tenía que hacer y a dónde iba trabajar, siendo <strong>mi primer trabajo como programador y mi primer mini-salario.</strong></p>
<p>He estado estos dos meses en el <a href="http://www.ebi.ac.uk/" target="_blank">European Bioinformatic Institute</a>, un centro de investigación con unas instalaciones bastante impresionantes la verdad. <span style="text-decoration: line-through;">Es</span> Supongo que es bastante diferente a una empresa normal, aquí la gente tiene <em>relativa</em> libertad de horarios, pudiendo trabajar desde casa siempre y cuando cumplas con tu trabajo y tengas un resultado. He de decir que en este campo, <strong>la bioinformática</strong>, hay mucho trabajo por hacer y es bastante interesante. No quiere decir que me vaya a centrar en él, primero me gustaría trabajar en varios campos para saber realmente lo que me gusta hacer.</p>
<p>Respecto al proyecto que tenía que hacer, lo he desarrollado con <strong>PHP, MySQL, Javascript/AJAX</strong> y he de decir que me ha gustado trabajar con estas tecnologías. En una presentación que hice para recibir feedback de la gente, uno de mi grupo me comento <strong>porqué no usaba Java</strong>, que es mucho más robusto que PHP y que podía utilizar para facilitarme las cosas Hibernate, JSF, etc. Era mi segunda semana y tampoco quería entrar en debates de porque no debía usarlo, simplemente dije que para cada <strong>aplicación/situación hay que usar la tecnología adecuada.</strong> No quise defender PHP ( podría ser Perl, Python&#8230;), pero para unos simples scripts que debía hacer en el servidor no creo que requiera toda la <em>robustez </em>de Java.</p>
<p>A parte de que ya tenía algo de idea con PHP, creo que para lo que tenía que hacer en el servidor era necesario.  En resumen, el trabajo en el servidor era hacer un cliente de OpenID, todas las operaciones y el acceso a la base de datos, un sistema de login y un pequeño proxy para consumir <em>Web Service</em>s. La mayoría de la lógica está en el cliente con Javascript/AJAX, <strong>he utilizado Yahoo User Interface</strong> y la verdad es que es muy potente, a parte de la inmensa cantidad de documentación y ejemplos que dispone.</p>
<p>Si alguien tiene curiosidad, todo la documentación relacionada con el proyecto esta en un <a href="http://trac.assembla.com/dasty/wiki">wiki</a> público de assembla que hice para mantener informado a mi jefe, es un branch de un proyecto Open Source, así que si ya estáis muy aburridos se puede ver el <a href="http://sourceforge.net/projects/dasty/">código fuente</a>. Realmente estaba muy motivado para hacer un buen trabajo y creo que les ha gustado : )</p>
<p>He intentado aprender un poco de biología/bioinformática en general ( me falta mucha base ) pero me ha resultado interesante. Tambien he estado lidiando bastante con <em>Web Services,</em> que está claro que han venido para quedarse. Me apunté a un curso de aquí bastante interesante &#8216;<em>Programmatic access of Proteomics Resources</em>&#8216;, en el que consumíamos Web Services con Java. Al final me cansé un poco porqué habían mucho <em>speakers/databases</em> cada uno con su modelo de datos debajo del brazo y me hubiera gustado saber un poco qué datos recuperaba.</p>
<p>En conclusión, la experiencia de un<em> internship</em> fuera ha resultado muy satisfactoria, se la recomiendo a todos y la verdad es que me hubiera gustado darme cuenta mucho antes, y aunque no sea a trabajar en lo mío, salir de España¡</p>
<p>No he hablado del tema personal porque aún me siento raro escribiendo, pero vamos he hecho muy buenos amigos y me lo he pasado muy bien.</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=1982493f-9e51-40dc-9c64-5a5052c802c9&amp;title=Experiencia+de+2+meses+de+trabajo+en+Cambridge&amp;url=http%3A%2F%2Fwww.el33.es%2F2008%2F09%2F15%2Fexperiencia-de-2-meses-de-trabajo-en-cambridge%2F">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.el33.es/2008/09/15/experiencia-de-2-meses-de-trabajo-en-cambridge/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tips para hacer funcionar tu sitio web en IE</title>
		<link>http://www.el33.es/2008/09/06/tips-para-hacer-funcionar-tu-sitio-web-en-ie/</link>
		<comments>http://www.el33.es/2008/09/06/tips-para-hacer-funcionar-tu-sitio-web-en-ie/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 14:10:23 +0000</pubDate>
		<dc:creator>campbell</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[Programación]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[dom]]></category>

		<category><![CDATA[ie]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.el33.es/?p=56</guid>
		<description><![CDATA[Sabiendo que tu aplicación funciona perfectamente en Firefox, Opera, Safari, Chrome&#8230; ver cómo se comporta en IE puede llegar a resultar muy frustante. Y no estoy hablando del CSS, sino de pequeñas diferencias en la especificación del DOM.
He estado lidiando un poco sobre cómo hacer funcionar una aplicación en IE 6 sin ningun fallo,  éstos [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Tips para hacer funcionar tu sitio web en IE", url: "http://www.el33.es/2008/09/06/tips-para-hacer-funcionar-tu-sitio-web-en-ie/" });</script>]]></description>
			<content:encoded><![CDATA[<p>Sabiendo que tu aplicación funciona perfectamente en Firefox, Opera, Safari, <strong>Chrome</strong>&#8230; ver cómo se comporta en IE puede llegar a resultar muy frustante. Y no estoy hablando del CSS, sino de pequeñas diferencias en la especificación del DOM.</p>
<p>He estado lidiando un poco sobre <strong>cómo hacer funcionar una aplicación en IE 6 sin ningun fallo</strong>,  éstos son sólo son algunos <strong>tips rápidos e información que encontrado:</strong></p>
<ul>
<li>Como víen <a title="companion js" href="http://www.anieto2k.com/2007/10/18/companionjs-el-firebug-de-internet-explorer/" target="_blank">Anieto2k</a>, existe Companion JS y tiene buena pinta como debugger, pero quería algo sencillo para el momento así que directamente usé Visual Studio (no lo recomiendo) con las excepciones que me daba ; )</li>
<li> Existe una versión muy reducida de <strong>Firebug para Internet Explore</strong>r llamada <a href="http://getfirebug.com/lite.html">Firebug Lite</a>.</li>
<li>Habilita el modo debug en IE, enlazo al <a href="http://www.jonathanboutelle.com/mt/archives/2006/01/howto_debug_jav.html">tutorial.</a></li>
<li><strong>Inserta la etiqueta tbody</strong> en tus tablas, es una buena práctica además de ser necesario para Internet Explorer.</li>
<li>Al <strong>asignar una clase con setAttribute</strong> a un elemento creado mediante DOM, <strong>en IE es <em>className</em></strong> y en los demás <em>class</em>.</li>
<li>Un <a href="http://www.quirksmode.org/js/detect.html#link9">ligero script</a> para <strong>detectar el navegador del usuario</strong>.</li>
<li>Cuando quieres <strong>obtener el textNode de un elemento</strong>, en algunos es innerText y en otros contentText. Lo he arreglado con un simple <em><strong>el.innerText || el.contentText.</strong></em></li>
<li>Hay muchas librerías que abstraen las <strong>distintas formas de asignar eventos</strong>, pero bueno para <strong>IE</strong> te puede servir <strong><em>elemento.onclick = function(){}</em></strong></li>
<li>El <strong>evento <em>onchange</em></strong> de un checkbox <strong>sólo se dispara al perder el foco.</strong> La solución es cambiarlo por <em>onclick</em>.</li>
<li>Si tienes que añadir atributos a un elemento con <strong>setAtribute</strong>, <strong>primero insertalo en el árbol DOM.</strong></li>
<li>Si asignas un <strong>margin en la misma dirección que el <em>float </em>de un elemento, IE dobla este margin.</strong>  Hay una explicación bastante detallada <a href="http://www.positioniseverything.net/explorer/doubled-margin.html" target="_blank">aquí.</a> Existen varias soluciones, una de ellas es asignar la propiedad con &#8216;_&#8217; delante, que sólo será interpretada por IE.

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p562');">[<span id="p562_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p56code2'); return false;">View Code</a> CSS</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p562"><td class="code" id="p56code2"><pre class="css">&nbsp;
<span style="color: #6666ff;">.exampleContainer</span><span style="color: #66cc66;">&#123;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">float</span><span style="color: #3333ff;">:left</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">width</span><span style="color: #66cc66;">:</span> <span style="color: #933;"><span style="color: #933;">40</span>%</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">margin-left</span><span style="color: #66cc66;">:</span> <span style="color: #933;">100px</span><span style="color: #66cc66;">;</span>
&nbsp;
_margin-<span style="color: #000000; font-weight: bold;">left</span><span style="color: #66cc66;">:</span> <span style="color: #933;">50px</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

</li>
</ul>
<ul>
<li>Para que un elemento contenedor se expanda por ejemplo dos divs flotados a la izquierda y a la derecha, en IE se necesita un hack que está muy bien explicado ( con otros tips ) en la página de <a href="http://www.marciobarrios.com/consejos-css" target="_blank">Marcio Barrios</a>.</li>
</ul>
<p>No es mucha información y puede que me equivoque, pero espero que le sirva a alguien. ( y a mí­ para que no se me olvide )</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=1982493f-9e51-40dc-9c64-5a5052c802c9&amp;title=Tips+para+hacer+funcionar+tu+sitio+web+en+IE&amp;url=http%3A%2F%2Fwww.el33.es%2F2008%2F09%2F06%2Ftips-para-hacer-funcionar-tu-sitio-web-en-ie%2F">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.el33.es/2008/09/06/tips-para-hacer-funcionar-tu-sitio-web-en-ie/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Debug en Javascript con la consola de Firebug</title>
		<link>http://www.el33.es/2008/08/18/debug-en-javascript-con-la-consola-de-firebug/</link>
		<comments>http://www.el33.es/2008/08/18/debug-en-javascript-con-la-consola-de-firebug/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 17:06:36 +0000</pubDate>
		<dc:creator>campbell</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[Programación]]></category>

		<category><![CDATA[Recursos web]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[debug]]></category>

		<category><![CDATA[dom]]></category>

		<category><![CDATA[firebug]]></category>

		<category><![CDATA[html]]></category>

		<category><![CDATA[internet explorer]]></category>

		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.el33.es/?p=52</guid>
		<description><![CDATA[Tras un tiempo sin actividad alguna, espero volver al mismo ritmo que los dos primeros meses de blog. Ahora que estoy trabajando bastante con Javascript/AJAX, creo que puede resultar útil escribir sobre cómo utilizar Firebug para realizar un buen debug de una aplicación web.
El modo más simple para saber qué está haciendo una aplicación en [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Debug en Javascript con la consola de Firebug", url: "http://www.el33.es/2008/08/18/debug-en-javascript-con-la-consola-de-firebug/" });</script>]]></description>
			<content:encoded><![CDATA[<p>Tras un tiempo sin actividad alguna, espero volver al mismo ritmo que los dos primeros meses de blog. Ahora que estoy trabajando bastante con Javascript/AJAX, creo que puede resultar útil escribir sobre <strong>cómo utilizar Firebug para realizar un buen debug</strong> de una aplicación web.</p>
<p>El modo más simple para saber qué está haciendo una aplicación en cada momento sería una función parecida a esta:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p526');">[<span id="p526_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p52code6'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p526"><td class="code" id="p52code6"><pre class="javascript"><span style="color: #003366; font-weight: bold;">function</span> printTestInfo<span style="color: #009900;">&#40;</span> msg <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> container <span style="color: #339933;">=</span> document.<span style="color: #006600;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;systemInfo&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    container.<span style="color: #006600;">innerHTML</span> <span style="color: #339933;">+=</span> msg <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;
&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Muy simple y muy limitada, lo mismo puedes hacer llenando de <em>alerts</em> tu código. Para cuando tienes unas pocas líneas de código puede estar bien, pero cuando tiener muchas llamadas AJAX y trabajas mucho con el DOM no es suficiente.</p>
<p><strong>Firebug</strong> se ha hecho indispensable para cualquier desarrollador web, te ahorra mucho tiempo y poco a poco <a href="http://www.softwareishard.com/blog/firebug/list-of-firebug-extensions/">están saliendo plugins</a> que lo hacen mucho más potente.<strong> En mi caso lo que más utilizo es</strong>: HTML y CSS inspector, inspeccionar el árbol DOM, la extensión <a href="https://addons.mozilla.org/es-ES/firefox/addon/6683">FireCookie</a>, <a href="http://developer.yahoo.com/yslow/">YSlow</a> de vez en cuando, el <em>debug</em> y <em>profile</em> de Javascript, y por último el motivo de este post, la <strong>consola</strong>.</p>
<p>La consola aparte de incorporar <a href="http://getfirebug.com/cl.html"><strong>un command line muy potente</strong></a> y toda la información necesaria sobre <strong>llamadas AJAX</strong> realizadas, <strong>dispone de una API</strong> que hace que la función anterior no la vuelvas a utilizar. Es un objeto que dispone de una <strong>serie de métodos</strong> muy útiles para <strong>mostar información en la consola de Firebug</strong>.</p>
<p>Tenéis el listado completo de métodos en la <a href="http://getfirebug.com/console.html">documentación de Firebug</a>, que recomiendo echarle un vistazo porque hay muchas opciones que no sabes ni que existen. No se le puede pedir más, pero sinceramente hecho en falta que el método <em>group</em> lleve un identificador para poder agrupar mensajes de distintos módulos y no correlativamente cómo lo hace actualmente.</p>
<p>Aquí tenes un ejemplo de uso:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p527');">[<span id="p527_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p52code7'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p527"><td class="code" id="p52code7"><pre class="javascript"><span style="color: #003366; font-weight: bold;">var</span> callbackDasSources <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    success<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>o<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
         console.<span style="color: #006600;">info</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'DAS REGISTRY: Success ajax request to retrieve das registry'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
         console.<span style="color: #006600;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'DAS REGISTRY: Parsing ...'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         dasSources._parseDasSources<span style="color: #009900;">&#40;</span>o.<span style="color: #006600;">responseXML</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
         console.<span style="color: #006600;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'DAS REGISTRY: Generating select form...'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         dasSources._printDasSources<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
&nbsp;
    failure<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>o<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        console.<span style="color: #006600;">error</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'DAS REGISTRY: Failure retrieving DAS sources..'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Y a la consola en funcionamiento (con la extensión FireCookie):</p>
<p><a href="http://www.el33.es/blog/wp-content/uploads/2008/08/firebug1.png"><img class="size-full wp-image-55" title="firebug1" src="http://www.el33.es/blog/wp-content/uploads/2008/08/firebug1.png" alt="" width="506" height="280" /></a></p>
<p>Ahora bien, todo esto esta muy bien <strong>pero sólo sirve para Firefox</strong>. <strong>Si ejecutas tu sitio web en Internet Explorer deja de ser funcional</strong> mostrando un mensaje que no conoce el objeto <em>console</em> (con suerte te muestra el error, porque es algo bastante frustante el mensaje &#8220;Runtime error&#8221;). Los de Firebug han hecho <a href="http://getfirebug.com/firebug/firebugx.js">un pequeño script</a> en el que definen el objeto con los métodos vacíos,  pero bueno si le añades un par de líneas usando la función <strong>printTestInfo anterior</strong> puede llegar a resultar algo útil:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p528');">[<span id="p528_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p52code8'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p528"><td class="code" id="p52code8"><pre class="javascript"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>window.<span style="color: #006600;">console</span> <span style="color: #339933;">||</span> <span style="color: #339933;">!</span>console.<span style="color: #006600;">firebug</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> names <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;log&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;debug&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;info&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;warn&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;error&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;assert&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;dir&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;dirxml&quot;</span><span style="color: #339933;">,</span>
                 <span style="color: #3366CC;">&quot;group&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;groupEnd&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;time&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;timeEnd&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;count&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;trace&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;profile&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;profileEnd&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
    window.<span style="color: #006600;">console</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> names.<span style="color: #006600;">length</span><span style="color: #339933;">;</span> <span style="color: #339933;">++</span>i<span style="color: #009900;">&#41;</span>
        window.<span style="color: #006600;">console</span><span style="color: #009900;">&#91;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">var</span> j <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> arguments.<span style="color: #006600;">length</span><span style="color: #339933;">;</span> <span style="color: #339933;">++</span>j<span style="color: #009900;">&#41;</span>
                printTestInfo<span style="color: #009900;">&#40;</span>arguments<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>El post iba a ser más largo, pero entonces no sabía que poner de título por lo que lo dejo para unos días más tarde : )</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=1982493f-9e51-40dc-9c64-5a5052c802c9&amp;title=Debug+en+Javascript+con+la+consola+de+Firebug&amp;url=http%3A%2F%2Fwww.el33.es%2F2008%2F08%2F18%2Fdebug-en-javascript-con-la-consola-de-firebug%2F">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.el33.es/2008/08/18/debug-en-javascript-con-la-consola-de-firebug/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Clase para geolocalizar la IP en PHP + Google Maps API</title>
		<link>http://www.el33.es/2008/07/01/clase-para-geolocalizar-la-ip-en-php-google-maps-api/</link>
		<comments>http://www.el33.es/2008/07/01/clase-para-geolocalizar-la-ip-en-php-google-maps-api/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 14:11:18 +0000</pubDate>
		<dc:creator>campbell</dc:creator>
		
		<category><![CDATA[APIs]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programación]]></category>

		<category><![CDATA[Scripts]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[geolocalizar ip]]></category>

		<category><![CDATA[google maps]]></category>

		<category><![CDATA[hostip]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[script]]></category>

		<category><![CDATA[simple xml]]></category>

		<guid isPermaLink="false">http://www.el33.es/?p=47</guid>
		<description><![CDATA[En el proyecto pidecita.com del iWeekend de Valencia se hacía uso de Google Maps para localizar las peluquerías, y se pensó en recomendar varias al usuario en base a su ubicación. Para ello implementé una clase muy básica en PHP para geolocalizar la IP del usuario consumiendo la API de hostip.
Existen muchos servicios que ofrecen [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Clase para geolocalizar la IP en PHP + Google Maps API", url: "http://www.el33.es/2008/07/01/clase-para-geolocalizar-la-ip-en-php-google-maps-api/" });</script>]]></description>
			<content:encoded><![CDATA[<p>En el proyecto <a title="Pidecita" href="http://www.pidecita.com" target="_blank">pidecita.com</a> del <a title="Experiencia en el iWeekend" href="http://www.el33.es/2008/05/16/experiencia-en-el-iweekend-parte-3/" target="_blank">iWeekend</a> de Valencia se hacía uso de Google Maps para localizar las peluquerías, y se pensó en recomendar varias al usuario en base a su ubicación. Para ello implementé una <strong>clase</strong> muy básica en <strong>PHP</strong> para <strong>geolocalizar la IP</strong> del usuario consumiendo la <a href="http://www.hostip.info/">API de hostip</a>.<a href="http://www.el33.es/blog/wp-content/uploads/2008/07/geolocateip.jpg"><img class="alignright size-medium wp-image-48" title="geolocateip" src="http://www.el33.es/blog/wp-content/uploads/2008/07/geolocateip-296x300.jpg" alt="" width="239" height="239" /></a></p>
<p>Existen muchos servicios que ofrecen información sobre el país en el que te encuentras, pero lo que nosotros queríamos era<strong> localizar por ciudad</strong>. Este tipo de servicios suele acertar el país en un 95% de los casos, pero la provincia o ciudad no suele ser la correcta sino la del proxy de tu proveedor. Se basa en rangos de IP específicamente asignados a cada país, por lo que su fiabilidad en este sentido es media/baja. Mi IP estática que me brinda Telefónica me localiza mi provincia perfectamente, además de sus <strong>coordenadas</strong>.</p>
<p>Con la <strong>API REST</strong> de Hostip pódeis hacer las siguientes consultas:</p>
<pre><strong>http://api.hostip.info/country.php</strong>
  US

<strong>http://api.hostip.info/get_html.php?ip=12.215.42.19</strong>
  Country: UNITED STATES (US)
  City: Sugar Grove, IL

<strong>http://api.hostip.info/get_html.php?ip=12.215.42.19&amp;position=true</strong>
  Country: UNITED STATES (US)
  City: Sugar Grove, IL
  Latitude: 41.7696
  Longitude: -88.4588

<strong>http://api.hostip.info/?ip=12.215.42.19</strong>
  [Archivo XML]</pre>
<p>En un principio en el iWeekend parseaba el html devuelto de la 2º opción, pero ya de paso para probar la facilidad que te brinda PHP 5 para leer XML con <strong>Simple XML</strong> he utilizado la 4º opción. La clase es muy <strong>fácil de usar</strong> sólo tenéis que incluirla y llamar al método <em>getLocationFromIp()</em>:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p4711');">[<span id="p4711_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p47code11'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p4711"><td class="code" id="p47code11"><pre class="php"><span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./classes/geoLocateIp.class.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000033;">$geo</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> geoLocateIp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000033;">$location</span> <span style="color: #339933;">=</span> <span style="color: #000033;">$geo</span> <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span> getLocationFromIp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>La variable <em>$location</em> es un array asociativo con los siguientes campos: <strong>CountryName, CountryCode, City, Longitude y Latitude.</strong></p>
<p>Os dejo el código fuente de la clase:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p4712');">[<span id="p4712_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p47code12'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p4712"><td class="code" id="p47code12"><pre class="php"><span style="color: #000000; font-weight: bold;">class</span> geoLocateIp
<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000033;">$serviceLocateURL</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://api.hostip.info/?ip='</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getLocationFromIp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000033;">$ip</span> <span style="color: #339933;">=</span> <span style="color: #000033;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getIpAdress<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000033;">$ip</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Error retrieving IP address'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Use the method your server supports ( most of them only support curl )</span>
		<span style="color: #000033;">$xmlData</span> <span style="color: #339933;">=</span> geoLocateIp<span style="color: #339933;">::</span><span style="color: #004000;">file_get_contents_curl</span><span style="color: #009900;">&#40;</span><span style="color: #000033;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>serviceLocateURL<span style="color: #339933;">.</span><span style="color: #000033;">$ip</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">//$xmlData = file_get_contents($this-&amp;gt;serviceLocateURL.$ip);</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000033;">$xmlData</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Error retrieving xml'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000033;">$locationInfo</span> <span style="color: #339933;">=</span> <span style="color: #000033;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>parseLocationData<span style="color: #009900;">&#40;</span><span style="color: #000033;">$xmlData</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000033;">$locationInfo</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> getIpAdress<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000033;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_X_FORWARDED_FOR'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			   <span style="color: #000033;">$ip</span> <span style="color: #339933;">=</span> <span style="color: #000033;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_X_FORWARDED_FOR'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000033;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_VIA'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		   <span style="color: #000033;">$ip</span> <span style="color: #339933;">=</span> <span style="color: #000033;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_VIA'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000033;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REMOTE_ADDR'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		   <span style="color: #000033;">$ip</span> <span style="color: #339933;">=</span> <span style="color: #000033;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REMOTE_ADDR'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		   <span style="color: #000033;">$ip</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000033;">$ip</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> parseLocationData<span style="color: #009900;">&#40;</span><span style="color: #000033;">$xmlData</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Use of Simple XML extension of PHP 5</span>
		<span style="color: #000033;">$xml</span> <span style="color: #339933;">=</span> simplexml_load_string<span style="color: #009900;">&#40;</span><span style="color: #000033;">$xmlData</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_object</span><span style="color: #009900;">&#40;</span><span style="color: #000033;">$xml</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		    throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Error reading XML'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000033;">$infoHost</span> <span style="color: #339933;">=</span> <span style="color: #000033;">$xml</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>xpath<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'//gml:featureMember'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000033;">$city</span> <span style="color: #339933;">=</span> <span style="color: #000033;">$xml</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>xpath<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'//gml:featureMember//gml:name'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000033;">$coordinates</span> <span style="color: #339933;">=</span> <span style="color: #000033;">$infoHost</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>xpath<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'//gml:coordinates'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000033;">$coordinates</span> <span style="color: #339933;">=</span> <span style="color: #990000;">split</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">','</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span> <span style="color: #000033;">$coordinates</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>				
&nbsp;
		<span style="color: #000033;">$info</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">&quot;City&quot;</span>		<span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span> <span style="color: #000033;">$city</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
			<span style="color: #0000ff;">&quot;CountryName&quot;</span>	<span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span> <span style="color: #000033;">$infoHost</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>Hostip<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>countryName<span style="color: #339933;">,</span>
			<span style="color: #0000ff;">&quot;CountryCode&quot;</span>	<span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span> <span style="color: #000033;">$infoHost</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>Hostip<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>countryAbbrev<span style="color: #339933;">,</span>
			<span style="color: #0000ff;">&quot;Longitude&quot;</span>	<span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000033;">$coordinates</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
			<span style="color: #0000ff;">&quot;Latitude&quot;</span>	<span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000033;">$coordinates</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span>
		<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000033;">$info</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #990000;">static</span> <span style="color: #000000; font-weight: bold;">function</span> file_get_contents_curl<span style="color: #009900;">&#40;</span><span style="color: #000033;">$url</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000033;">$ch</span> <span style="color: #339933;">=</span> curl_init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		curl_setopt<span style="color: #009900;">&#40;</span><span style="color: #000033;">$ch</span><span style="color: #339933;">,</span> CURLOPT_HEADER<span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		curl_setopt<span style="color: #009900;">&#40;</span><span style="color: #000033;">$ch</span><span style="color: #339933;">,</span> CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		curl_setopt<span style="color: #009900;">&#40;</span><span style="color: #000033;">$ch</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #000033;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000033;">$data</span> <span style="color: #339933;">=</span> curl_exec<span style="color: #009900;">&#40;</span><span style="color: #000033;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		curl_close<span style="color: #009900;">&#40;</span><span style="color: #000033;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000033;">$data</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Y a continuación, he preparado un <strong>mashup</strong> muy básico con dicha clase y la <strong>API de Google Maps</strong> en el que geolocaliza en el mapa tu situación. Lo he llamado <a title="Geolocale your IP address" href="http://www.el33.es/geolocateip" target="_blank"><strong>Geolocate your IP</strong></a>, original verdad? : ) Estoy abierto a críticas del código, bugs, chapuzas&#8230; Y si queréis el código fuente sólo tenéis que decírmelo.</p>
<p><span style="color: #ff0000;">Update:</span> Por una petición <span style="text-decoration: line-through;">masiva</span> de <strong>Darocz </strong>dejo el código fuente del <a href="http://www.el33.es/blog/wp-content/uploads/2008/07/geolocateip-googlemaps.rar">mini-mashup</a> y el de la clase <a href="http://www.el33.es/blog/wp-content/uploads/2008/07/geolocateipclass.rar">geoLocateIp</a><a href="http://www.el33.es/blog/wp-content/uploads/2008/07/geolocateipclass.php">.</a></p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=1982493f-9e51-40dc-9c64-5a5052c802c9&amp;title=Clase+para+geolocalizar+la+IP+en+PHP+%2B+Google+Maps+API&amp;url=http%3A%2F%2Fwww.el33.es%2F2008%2F07%2F01%2Fclase-para-geolocalizar-la-ip-en-php-google-maps-api%2F">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.el33.es/2008/07/01/clase-para-geolocalizar-la-ip-en-php-google-maps-api/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Alternativas a Powerpoint online y offline</title>
		<link>http://www.el33.es/2008/06/23/alternativas-a-powerpoint-online-y-offline/</link>
		<comments>http://www.el33.es/2008/06/23/alternativas-a-powerpoint-online-y-offline/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 15:46:38 +0000</pubDate>
		<dc:creator>campbell</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[alternativas]]></category>

		<category><![CDATA[latex]]></category>

		<guid isPermaLink="false">http://www.el33.es/?p=43</guid>
		<description><![CDATA[Introducción
Todos nos manejamos bien y hemos usado PowerPoint alguna vez, pero con el tiempo han salido buenas alternativas que le pueden hacer frente. En ésta época en la que Internet está más en auge que nunca, tenemos a disposición muchas herramientas online para crear powerpoint presentaciones de buena calidad. Por otro lado, sin ser tan [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Alternativas a Powerpoint online y offline", url: "http://www.el33.es/2008/06/23/alternativas-a-powerpoint-online-y-offline/" });</script>]]></description>
			<content:encoded><![CDATA[<h2>Introducción</h2>
<p>Todos nos manejamos bien y hemos usado <strong>PowerPoint</strong> alguna vez, pero con el tiempo han salido buenas <strong>alternativas</strong> que le pueden hacer frente. En ésta época en la que Internet está más en auge que nunca, tenemos a disposición muchas herramientas online para crear <span style="text-decoration: line-through;">powerpoint</span> presentaciones de buena calidad. Por otro lado, sin ser tan fáciles de usar existen alternativas offline que pueden plantarle cara al programa de Microsoft.</p>
<p>Como principal alternativa disponemos de <strong>Open Office,</strong> pero me limitaré a las alternativas menos conocidas.</p>
<h2>Herramientas offline</h2>
<h3><span style="color: #333333;">LaTeX con la clase Beamer</span></h3>
<p><a href="http://latex-beamer.sourceforge.net/">Beamer</a> es una clase de LaTeX, si no sabéis que es eso de LaTeX escribí una entrada hace poco: <a title="Alternativa a word: LaTeX" href="http://www.el33.es/2008/06/05/alternativa-a-word-latex/" target="_blank">Alternativa a Word.</a> Al ser un complemento de LaTeX, tenéis que tenerlo instalado y descargaros el paquete correspondiente.</p>
<p>Si sabéis manejaros con LaTeX no resulta complicado, el aspecto es bastante profesional y hay muchos temas a elegir. El objetivo del post no es explicar el modo de creación de presentaciones de Beamer, por lo que os dejo un par de tutoriales paso a paso de la mano de <a href="http://plagatux.es/">Plaga Tux</a> para su <a href="http://plagatux.es/?p=17">instalación</a> y <a href="http://plagatux.es/?p=79">uso</a>.</p>
<p>En la página del proyecto hay un ejemplo muy bueno en el que se puede ver el <a href="http://latex-beamer.sourceforge.net/beamerexample1.pdf">resultado final</a>, y a parte os dejo una <strong><a href="http://www.el33.es/dokugen/presentacion.pdf">ejemplo</a></strong> que hice hace unos meses y su <a href="http://www.el33.es/blog/wp-content/uploads/2008/06/presentacion.rar">código fuente</a>.<a href="http://www.el33.es/blog/wp-content/uploads/2008/06/presentacion.rar"></a></p>
<h3><span style="color: #333333;">S5: Simple Standards-Based Slide Show System</span></h3>
<p><a href="http://s5project.org/">S5</a> es un sistema de presentaciones basado en XHTML, CSS y Javascript creado por <a href="http://en.wikipedia.org/wiki/Eric_Meyer">Eric Meyer</a>. Entre sus características más destacadas diría:</p>
<ul>
<li>Sólo necesitas el <strong>navegador</strong> para poder visualizarlo (todo ordenador tiene uno hoy en día).</li>
<li>La presentación en un único archivo.</li>
<li>Si tienes nociones de CSS puedes crear tu propio tema.</li>
<li>Puedes controlar las diapositivas con el ratón, flechas del teclado, barra espaciadora, etc.</li>
<li><strong>Muestra incremental</strong> del contenido de la presentación.</li>
<li><strong>Sencillo de utilizar</strong> con mínimos conocimientos de HTML.</li>
<li>Existe una versión para imprimir con la posibilidad de añadir notas.</li>
</ul>
<p>A mí sinceramente junto con Beamer es el que más me gusta, pero todo hay que decirlo, sirve para diapositivas sencillas. El uso común para una presentación no suele pasar de listas e imágenes por lo que es una buena opción, pero hay que tener cuidado con el número de diapositivas ( 40 o 50 puede ralentizarse ).</p>
<p>La <strong>cantidad de temas</strong> es <strong>inmensa</strong>, hasta <a href="http://mozilla.wikia.com/wiki/Firefox_S5:Designs">Firefox</a> ha adoptado este sistema de presentaciones, pero recomiendo encarecidamente los que ha creado <a href="http://www.jesusda.com/projects/presentaciones_s5/index.html">JesusDa</a> por su originalidad.</p>
<p>Como he hecho con LaTeX, os dejo <strong><a href="http://www.el33.es/concursoeda/presentacion/index.html">un ejemplo de presentación</a></strong> que realicé para un concurso de programación y su <a href="http://www.el33.es/blog/wp-content/uploads/2008/06/presentacion-s5.rar">código fuente</a>.</p>
<p>Por último decir, que la comunidad ha crecido y se ha creado <a href="http://cavorite.com/labs/presentacular/">Presentacular</a>, una librería Javascript con licencia GPL para añadir efectos a S5. Aún no está muy testeada en los navegadores más modernos (Firefox 3) pero <a href="http://cavorite.com/labs/presentacular/example/">pinta muy bien</a>.</p>
<div class="g"><span> </span></div>
<h2>Herramientas online</h2>
<h3><span style="color: #333333;">Google Docs</span></h3>
<p>Supongo que conoceréis <a href="docs.google.com/">Google Docs</a>, empezó sólo como un procesador de textos online pero poco a poco se está convirtiendo en un paquete ofimático muy completo.</p>
<p>La posibilidad de poder <strong>importar y exportar</strong> nuestras presentaciones a <strong>PPT</strong> (Powerpoint) me parece muy interesante, a parte de poder generar un archivo pdf o texto plano. Y dentro de poco por lo que he leído en <a href="http://www.genbeta.com/2008/03/31-google-docs-con-acceso-offline" target="_blank">Genbeta</a> se podrá utilizar offline con Google Gears.</p>
<p>Os dejo un <strong><a href="http://docs.google.com/Present?docid=df7b563g_6cb55qv&amp;fs=true">ejemplo</a></strong> publicado, podéis ampliarlo con F11.</p>
<h3><span style="color: #333333;">Zoho Show</span></h3>
<p><a href="http://zoho.com/">Zoho</a> es una de las competencias más fuertes como paquete ofimático de Google Docs(y ya le puede tener miedo&#8230;). A parte de las muchas aplicaciones han creado <a href="http://show.zoho.com/jsp/zoho_login.jsp?serviceurl=%2FHome.do" target="_blank">Zoho Show</a> que con una interfaz muy similar e intuitiva podemos crear presentaciones como <strong><a href="http://show.zoho.com/public/arvindnatarajan/Zoho+Writer+-+May+28%2C+2008?view=2">ésta</a></strong>. Existen una muy amplia variedad de <a href="http://show.zoho.com/help/tour/tour.html" target="_blank">temas</a>.</p>
<h3><span style="color: #333333;">280 slides</span></h3>
<p><a href="http://280slides.com/">280 slides</a> me ha <strong>impresionado</strong> mucho la verdad. Sin necesidad de registro puedes probar la aplicación, tiene un aspecto inmejorable y puedes disponer de las imágenes de Google Images y los vídeos de Youtube para insertarlos, todo ello sin salir de la aplicación.</p>
<p>Se pueden exportar a PowerPoint 2007, insertarlo en tu web o publicarlo en SlideShare. Os enseño <a href="http://280slides.com/Viewer/?user=56&amp;name=Tour&amp;fullscreen"><strong>un ejemplo</strong></a> como en cada una de las herramientas. Tiene un aire al <strong>Keynote</strong> (sus dos creadores son ex-empleados  de Apple).</p>
<h2>Conclusión</h2>
<p>Hay bastantes más aplicaciones, pero éstas son las que me han resultado más interesantes. Así que ya sabéis no hace falta que nuestras presentaciones sean como las de todos, puedes destacar del resto : )</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=1982493f-9e51-40dc-9c64-5a5052c802c9&amp;title=Alternativas+a+Powerpoint+online+y+offline&amp;url=http%3A%2F%2Fwww.el33.es%2F2008%2F06%2F23%2Falternativas-a-powerpoint-online-y-offline%2F">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.el33.es/2008/06/23/alternativas-a-powerpoint-online-y-offline/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Alojamiento gratuito por un año con Dominios Low Cost</title>
		<link>http://www.el33.es/2008/06/19/alojamiento-gratuito-por-un-ano-con-dominios-low-cost/</link>
		<comments>http://www.el33.es/2008/06/19/alojamiento-gratuito-por-un-ano-con-dominios-low-cost/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 11:26:47 +0000</pubDate>
		<dc:creator>campbell</dc:creator>
		
		<category><![CDATA[Recursos web]]></category>

		<category><![CDATA[gratis]]></category>

		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://www.el33.es/?p=42</guid>
		<description><![CDATA[Leyendo Webmaster Libre me encontré con que regalaban 100 códigos para hosting gratuito durante un año en Dominios Low Cost, nueva empresa española que está dispuesta a hacer el mismo tipo de ofertas que hizo en su día 1&#38;1, éste blog está alojado allí y me ha ido bien por el momento.
La oferta de hosting [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Alojamiento gratuito por un año con Dominios Low Cost", url: "http://www.el33.es/2008/06/19/alojamiento-gratuito-por-un-ano-con-dominios-low-cost/" });</script>]]></description>
			<content:encoded><![CDATA[<p>Leyendo <a title="webmaster libre" href="http://www.webmasterlibre.com" target="_blank">Webmaster Libre</a> me encontré con que regalaban <strong>100 códigos</strong> para <strong>hosting gratuito</strong> durante un <strong>año</strong> en <a href="http://dominioslowcost.com/" target="_blank">Dominios Low Cost</a>, nueva empresa española que está dispuesta a hacer el mismo tipo de ofertas que hizo en su día <a href="www.1and1.es" target="_blank">1&amp;1</a>, éste blog está alojado allí y me ha ido bien por el momento.</p>
<p>La oferta de hosting no ofrece un dominio y para activar el vale es necesario disponer de uno. Hay muchos sitios web para registrar un dominio, aunque en la misma empresa hay precios muy competitivos. En mi caso ya tengo el código pero quiero pensarme un poco más el dominio a registrar, tenemos <strong>2 meses</strong> para activar el vale.</p>
<p>Nos dan la opción de elegir entre 3 planes de hosting: <strong>Inicio</strong>, <strong>Avanzado Linux</strong> y <strong>Avanzado Windows. </strong>Lo más recomendable en mi opinión es el el plan avanzado Linux, pero si a alguien le interesa trabajar con ASP, Access y demás ya sabe cuál escoger&#8230;</p>
<p>Por lo que veo se han acabado los códigos de <a href="http://www.webmasterlibre.com/2008/06/16/100-alojamientos-gratis-por-un-ao-con-dominios-low-cost/" target="_blank">Webmaster Libre</a>, pero hay más <strong>sitios que ofrecen dichos códigos:</strong></p>
<ul>
<li><a href="http://unpocodemucho.wordpress.com/2008/06/17/regalo-100-codigos-para-alojamiento-gratuito-en-dominios-low-cost/" target="_blank"> Un poco de mucho</a>: sólo tienes que poner un comentario en su blog, quedan <span style="text-decoration: line-through;">79</span> 50 en este momento¡</li>
<li><a href="http://www.soygik.com/soygik-te-regala-un-hosting-gratis/" target="_blank">SoyGik:</a> aquí debes escribir un post en tu blog hablando sobre su entrada y ponerle un comentario.</li>
</ul>
<p>Por último decir, que en la búsqueda de un <strong>dominio libre</strong>, es recomendable tener a mano ( en otra pestaña ) el <strong>registrador de dominios</strong>, ya que no me resultaron muy fiables las webs que te buscan dominios libres. No digo que no exista ninguna realmente fiable, pero me quitaron un par de dominios a los 10 o 20 minutos de estar libre&#8230; Yo aprendí la lección.</p>
<p><span style="color: #ff0000;">Update:</span> La empresa ha tirado la casa por la ventana y regala 5000 dominios gratis con un mismo código¡ Más información en <a href="http://www.bitecnia.com/2008/06/20/dominioslowcost-regala-5000-alojamientos-gratuitos/">Bitecnia</a></p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=1982493f-9e51-40dc-9c64-5a5052c802c9&amp;title=Alojamiento+gratuito+por+un+a%C3%B1o+con+Dominios+Low+Cost&amp;url=http%3A%2F%2Fwww.el33.es%2F2008%2F06%2F19%2Falojamiento-gratuito-por-un-ano-con-dominios-low-cost%2F">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.el33.es/2008/06/19/alojamiento-gratuito-por-un-ano-con-dominios-low-cost/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Optimiza la carga de tu sitio web</title>
		<link>http://www.el33.es/2008/06/09/optimiza-la-carga-de-tu-sitio-web/</link>
		<comments>http://www.el33.es/2008/06/09/optimiza-la-carga-de-tu-sitio-web/#comments</comments>
		<pubDate>Sun, 08 Jun 2008 23:26:14 +0000</pubDate>
		<dc:creator>campbell</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[Programación]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[html]]></category>

		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.el33.es/?p=38</guid>
		<description><![CDATA[Un estudio de Yahoo revela que en los sitios web más populares el tiempo de carga total de una página viene condicionado por un 20% del lado del servidor y un 80% del cliente. Esto no quiere decir que dejemos de optimizar el servidor, pero sí que tengamos en cuenta consejos o buenas prácticas para [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Optimiza la carga de tu sitio web", url: "http://www.el33.es/2008/06/09/optimiza-la-carga-de-tu-sitio-web/" });</script>]]></description>
			<content:encoded><![CDATA[<p>Un estudio de Yahoo revela que en los sitios web más populares el tiempo de carga total de una página viene condicionado por un 20% del lado del servidor y un 80% del cliente. Esto no quiere decir que dejemos de optimizar el servidor, pero sí que tengamos en cuenta consejos o buenas prácticas para que tu sitio web cargue más rápido.</p>
<p>El tiempo de respuesta de una página es muy importante de cara al usuario, no suelen tener mucha paciencia ( yo tampoco&#8230; ), por lo que la primera carga se debe tener muy en cuenta (sin ningun elemento <em>cacheado</em> en el navegador) . En Yahoo han creado una serie de pautas para que tengamos en cuenta a la hora de analizar el rendimiento de nuestro sitio:</p>
<div class="orderedlist">
<ul>
<li><a href="http://developer.yahoo.com/performance/rules.html#num_http">Hacer pocas peticiones HTTP</a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#cdn">Usar un CDN</a> ( de algo sirvió FRC¡ )</li>
<li><a href="http://developer.yahoo.com/performance/rules.html#expires">Añadir una etiqueta para expirar tus cabeceras</a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#gzip">Compresión gzip</a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#css_top">CSS al principio</a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#js_bottom">Enlaza los archivos javascript al final</a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#css_expressions">Evita propiedades dinámicas de CSS</a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#external">Archivos JS y CSS en archivos externos </a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#dns_lookups">Reduce las consultas DNS</a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#minify">Minimiza archivos javascript</a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#redirects">Evita redirecciones</a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#js_dupes">Borra scripts duplicador</a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#etags">Configura los ETags</a></li>
</ul>
</div>
<p>Han añadido muchos consejos más que podéis ver en la página<a href="http://www.el33.es/blog/wp-content/uploads/2008/06/yslow.jpg"><img class="alignright size-medium wp-image-39" title="yslow" src="http://www.el33.es/blog/wp-content/uploads/2008/06/yslow-273x300.jpg" alt="" width="273" height="299" /></a><br />
para <a href="http://developer.yahoo.com/performance/rules.html">desarrolladores de Yahoo</a>, me acuerdo  que hace poco sólo estaban éstas 13 y ahora ya van sobre las 40. Cito sólo éstas, porque existe una extensión para Firefox en la que comprueban las trece pautas puntuándolas y con la teoría necesaria para poder solucionarlas. Se llama <a href="http://developer.yahoo.com/yslow/">YSlow</a> y la derecha podéis ver una captura evaluando mi sitio web, parece que no tengo muy buena puntación&#8230;</p>
<p style="text-align: left;">Ésta extensión se basa en <a href="https://addons.mozilla.org/es-ES/firefox/addon/1843">FireBug</a>, para los que no la conozcan es una extensión impresionante que te ayuda a depurar tu sitio web. Puedes controlar el HTML y CSS en tiempo real, analizar las peticiones que se realizan e incorpora un completo debugger de JavaScript.</p>
<p style="text-align: left;">Una de las prácticas importantes es reducir las peticiones HTTP, los navegadores sólo aceptan dos peticiones concurrentes del mismo dominio, por lo que a mayor número de archivos mayor número de peticiones y por consecuencia, mayor tiempo de carga.</p>
<p style="text-align: left;">Sitios web con mucho tráfico como Google y Yahoo reducen el número de peticiones HTTP para los iconos,  botonos, pequeñas imágenes con una técnica basada en la propiedad de CSS  <em><code>background-image y </code><code>background-position, </code></em>en la que combinan las imágenes en una para después mostrar sólo el segmento adecuado.</p>
<p>En un principio no había encontrado una aplicación web en la que subier mis imágenes a combinar y me devolviera las propiedades CSS necesarias para cada imagen. Ya me había apuntado contento otra cosilla a hacer en mi libreta, para aprender un poco de la librería para gráficos GD de PHP. Pero me resultaba un poco raro que no lo hubiera hecho nadie por lo que buscando un poco más, me he encontrado con que un desarrollador de Yahoo ya la había <a href="http://spritegen.website-performance.org/">implementado</a>. La verdad es que la aplicación funciona muy bien, y está disponible hasta el código fuente, otra vez será ; )</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=1982493f-9e51-40dc-9c64-5a5052c802c9&amp;title=Optimiza+la+carga+de+tu+sitio+web&amp;url=http%3A%2F%2Fwww.el33.es%2F2008%2F06%2F09%2Foptimiza-la-carga-de-tu-sitio-web%2F">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.el33.es/2008/06/09/optimiza-la-carga-de-tu-sitio-web/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lucha por tu sueño</title>
		<link>http://www.el33.es/2008/06/08/lucha-por-tu-sueno/</link>
		<comments>http://www.el33.es/2008/06/08/lucha-por-tu-sueno/#comments</comments>
		<pubDate>Sun, 08 Jun 2008 13:06:46 +0000</pubDate>
		<dc:creator>campbell</dc:creator>
		
		<category><![CDATA[Emprendedores]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[videos]]></category>

		<guid isPermaLink="false">http://www.el33.es/?p=37</guid>
		<description><![CDATA[Mucha gente ha llegado a donde está con perseverancia en lo que creía, luchando por la meta que se ha propuesto sin bajar la cabeza cada vez que se encontraba un bache. Estos vídeos reflejan un poco lo dicho, hay que luchar todo lo que puedas para conseguir lo que deseas. Disfrutarlos : )

Discurso de [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Lucha por tu sueño", url: "http://www.el33.es/2008/06/08/lucha-por-tu-sueno/" });</script>]]></description>
			<content:encoded><![CDATA[<p>Mucha gente ha llegado a donde está con perseverancia en lo que creía, luchando por la meta que se ha propuesto sin bajar la cabeza cada vez que se encontraba un bache. Estos vídeos reflejan un poco lo dicho, hay que luchar todo lo que puedas para conseguir lo que deseas. Disfrutarlos : )</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/AyFlzeWlESc&amp;hl=en&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/AyFlzeWlESc&amp;hl=en&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></embed></object></p>
<p>Discurso de Steve Jobs subtitulado en español en la universidad de Stanford, la mayoría lo habréis visto pero es inevitable no ponerlo.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/ykUyVFkizfQ&amp;hl=en&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/ykUyVFkizfQ&amp;hl=en&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></embed></object></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/X4xO1QUKYxM&amp;hl=en&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/X4xO1QUKYxM&amp;hl=en&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></embed></object></p>
<p>No tiene mucho que ver con la temática de los vídeos anteriores, pero me parece muy bueno.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/bf1ySTtaMRU&#038;hl=en&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999"></param><embed src="http://www.youtube.com/v/bf1ySTtaMRU&#038;hl=en&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999" type="application/x-shockwave-flash" width="425" height="344"></embed></object></p>
<p>En definitiva, disfruta la vida intentando conseguir tus metas.</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=1982493f-9e51-40dc-9c64-5a5052c802c9&amp;title=Lucha+por+tu+sue%C3%B1o&amp;url=http%3A%2F%2Fwww.el33.es%2F2008%2F06%2F08%2Flucha-por-tu-sueno%2F">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.el33.es/2008/06/08/lucha-por-tu-sueno/feed/</wfw:commentRss>
		</item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.729 seconds -->

