<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Adrián Navarro &#187; Enredando</title>
	<atom:link href="http://adrian.navarro.at/blog/category/enredando/feed/" rel="self" type="application/rss+xml" />
	<link>http://adrian.navarro.at/blog</link>
	<description>Esperando a que alguien me parta las piernas desde 1994</description>
	<lastBuildDate>Sat, 03 Apr 2010 10:48:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Concursos de la Euskal Encounter 17</title>
		<link>http://adrian.navarro.at/blog/2010/04/03/concursos-de-la-euskal-encounter-17/</link>
		<comments>http://adrian.navarro.at/blog/2010/04/03/concursos-de-la-euskal-encounter-17/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 10:33:56 +0000</pubDate>
		<dc:creator>Adrián</dc:creator>
				<category><![CDATA[Enredando]]></category>
		<category><![CDATA[concursos]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[euskal encounter]]></category>
		<category><![CDATA[lanparty]]></category>

		<guid isPermaLink="false">http://adrian.navarro.at/blog/?p=209</guid>
		<description><![CDATA[No he muerto. Sigo vivo. Y esto debí haberlo publicado hace ya eones, y me temo que tampoco estoy en mi mejor momento para reactivar el blog. Pero ahí va una entrada mientras tanto, que ya la tenía debida desde hace tiempo. Lo siento.
Ya pasé por encima del tema de los concursos en la Euskal, [...]]]></description>
			<content:encoded><![CDATA[<p><em>No he muerto. Sigo vivo. Y esto debí haberlo publicado hace ya eones, y me temo que tampoco estoy en mi mejor momento para reactivar el blog. Pero ahí va una entrada mientras tanto, que ya la tenía debida desde hace tiempo. Lo siento.</em></p>
<p><em><span style="font-style: normal;">Ya pasé por encima del tema de los concursos en la Euskal, en <a href="http://adrian.navarro.at/blog/2009/08/02/euskal-encounter-17/">el post recopilatorio</a> de mi iniciación a la </span>experiencia vital</em> que fue. Ahí animé a cualquiera a probar suerte con los concursos, puesto que debido al limitado número de participantes posibles, todo depende de tu talento y concursar por algo se vuelve algo interesante.</p>
<p>Sí, probé suerte. Concretamente con el <a href="http://www.euskalencounter.org/euskal17/es/actividades/api/">concurso de programación de GureGipuzkoa</a>. Sobrevolando un poco el asunto: <a href="http://guregipuzkoa.net/">GureGipuzkoa</a> es un proyecto de la diputación de cultura de <a href="http://www.gipuzkoa.net/">Gipuzkoa</a> (si no me equivoco).</p>
<p>Lo cierto es que me esperaba algo más de participación, pero en general no estuvo nada mal. Está publicada <a href="http://www.guregipuzkoa.net/blog/index.php/eu/guregipuzkoa/37-trabajos-del-concurso-de-programacion-con-la-api">la lista de proyectos participantes</a>, <a href="http://www.guregipuzkoa.net/blog/index.php/eu/guregipuzkoa/38-resultados-definitivos-del-concurso-de-programacion">los resultados</a> y <a href="http://www.guregipuzkoa.net/blog/index.php/eu/guregipuzkoa/39-entrega-de-premios">la entrega de premios</a>, a la que no pude asistir (para mi desgracia a esa hora ya estaba en el tren de vuelta a Madrid). Pero no deja de ser un <em>boost</em> de ego, la verdad <img src='http://adrian.navarro.at/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>Mi proyecto consistió en un mashup que cruzaba Google Maps con las fotos del sitio web. Es bastante perfeccionable, puesto que en aquel momento no funcionaba el API para realizar búsquedas geográficas y tuve que recurrir a diversos hacks no demasiado claros para hacer funcionar la aplicación, pero el resultado en general es bastante usable (y debí haber añadido paginación, aunque es muy sencillo).</p>
<p>La <a href="http://static.serviciosred.net/gg/">versión online está disponible aquí</a>, junto con un <a href="http://www.youtube.com/watch?v=y7dlNjhGcaI">video publicado</a> (screencast) que explica el funcionamiento de la aplicación (que ya de por si es muy sencilla y autoexplicativa).</p>
<p>Los premios iniciales consistían en un Reloj Binario, una cámara compacta de alta gama y una aspiradora Roomba. Al final, por temas de stock se quedó en una cámara (modelo distinto, aunque ampliamente superior) junto con una tarjeta de memoria y funda así como la aspiradora Roomba.</p>
<p>Aún no he tenido la ocasión de probar la Roomba (es el problema de vivir en una casa de varias plantas), pero en cualquier caso, la cámara es absolutamente maravillosa. Tuve la ocasión de probarla en un pequeño viaje que hice a Zaragoza con un amigo, las fotos como de costumbre <a href="http://www.flickr.com/photos/adrinavarro/sets/72157622679720403/">están en un set de Flickr</a>.</p>
<p>La cámara, una <a href="http://www.amazon.co.uk/Samsung-ST1000-Digital-Camera-Black/dp/B002JM1GSC">Samsung ST-1000</a>, tiene GPS, WiFi así como un zoom óptico bastante alucinante y una calidad de imagen muy buena. Lo único que realmente echo de menos es la posibilidad de sacar fotos en lugares con poca luz sin trípode, pero mucho me temo que para eso no me queda otra que usar una réflex con trípode.</p>
<p>Por cierto, este año vuelvo a estar en la <a href="http://euskal.org/">Euskal Encounter</a> (encaja de milagro entre los planes que ya tenía marcados, y allí estaré salvo imprevisto).</p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.navarro.at/blog/2010/04/03/concursos-de-la-euskal-encounter-17/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Objetos maestros en PHP</title>
		<link>http://adrian.navarro.at/blog/2009/08/16/objetos-maestros-en-php/</link>
		<comments>http://adrian.navarro.at/blog/2009/08/16/objetos-maestros-en-php/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 17:00:20 +0000</pubDate>
		<dc:creator>Adrián</dc:creator>
				<category><![CDATA[Enredando]]></category>
		<category><![CDATA[Infinitos monos aporreando infinitos teclados]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[objetos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programacion]]></category>

		<guid isPermaLink="false">http://adrian.navarro.at/blog/?p=194</guid>
		<description><![CDATA[Ya comenté el tema de usar clases &#8220;principales&#8221; para un proyecto&#8230; y ahora vuelvo con el mismo tema. Muy creativo, sí&#8230;
La idea es la de tener un objeto principal (maestro) con un constructor que crea dentro del propio objeto tantos objetos &#8220;internos&#8221; como hagan falta, pasándole por referencia su propio objeto al constuctor de los [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://adrian.navarro.at/blog/2009/02/07/php-estirar-el-objeto/">Ya comenté el tema</a> de usar clases &#8220;principales&#8221; para un proyecto&#8230; y ahora vuelvo con el mismo tema. Muy creativo, sí&#8230;</p>
<p>La idea es la de tener un objeto principal (<em>maestro</em>) con un constructor que crea dentro del propio objeto tantos objetos &#8220;internos&#8221; como hagan falta, pasándole por referencia su propio objeto al constuctor de los &#8220;objetos internos&#8221;.</p>
<p>Los &#8220;objetos internos&#8221; extienden a una plantilla de objeto, y esa plantilla contiene un constructor que a su vez &#8220;guarda&#8221; como referencia el parámetro pasado por el objeto principal.</p>
<p>Sí, es un lío, así que mejor verlo en código:<br />
<blockquote><code>class AppObjectSkel {<br />
&nbsp;&nbsp;function __construct(&#038;$parent) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;$this->_parent = $parent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(is_callable(array($this, 'init'))) $this->init();<br />
&nbsp;&nbsp;}<br />
}</p>
<p>class AppDatabase extends AppObjectSkel {<br />
&nbsp;&nbsp;function init() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;/* Aquí se inicializa la DB */<br />
&nbsp;&nbsp;}<br />
}</p>
<p>class AppCache extends AppObjectSkel {<br />
&nbsp;&nbsp;/* Elemento de cache, no lo inicializamos en este ejemplo */<br />
}</p>
<p>class Application {<br />
&nbsp;&nbsp;function __construct() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;$this->database = new AppDatabase($this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$this->cache = new AppCache($this);<br />
&nbsp;&nbsp;}<br />
}</code></p></blockquote>
<p>De esta manera se puede acceder de un elemento a otro. Por ejemplo, desde <code>AppCache</code> se puede acceder a <code>AppDatabase</code> pasando por <code>Application</code>, simplemente usando <code>$this->_parent->database</code>. Al tratarse de un valor pasado por referencia, se puede acceder desde <code>AppDatabase</code> a <code>AppCache</code> y reflejar cambios en tiempo real.</p>
<p>Pero hay que tener en cuenta un pequeño detalle: los constructores. Debido a que se hereda de una clase maestra (<code>AppObjectSkel</code>), no se puede poner constructor de ningún tipo (ya sea <code>__constructor</code> o una función con el nombre de la clase), ya que PHP ejecutará únicamente el del objeto creado (<code>AppCache</code>, por ejemplo) y no el de <code>AppObjectSkel</code> (y mucho menos va a ejecutar dos constructores). Se puede evitar esto de varias formas: evitando <code>AppObjectSkel</code> en todos los casos y copiando el construct a cada vez, copiando el construct sólo cuando lo necesitamos (por que pisamos el construct de <code>AppObjectSkel</code>) o simplemente usar una función opcional (llamada init), como pongo en el ejemplo, que sólo se ejecuta si existe y se llama desde <code>AppObjectSkel</code>, a modo de constructor (un constructor invoca a otro).</p>
<p>Desde la propia aplicación simplemente hay que crear una nueva instancia del objeto <code>Application</code> (<code>$app = new Application</code>) y acceder a los diferentes objetos a partir del maestro (<code>$app->db, $app->cache</code>).</p>
<p>Esto llega a ser muy útil cuando la aplicación entera está divida en objetos (<code>AppUsers, AppForums, AppProfiles...</code>) y es necesario hacer transacciones entre los objetos. En lugar de crear una instancia para cada objeto cada vez que se necesitan (por ejemplo, instanciar <code>AppCache</code> desde <code>AppUsers</code> cuando hace falta usar memcache), se pueden instanciar una sola vez y acceder en un <em>entorno protegido</em> (<code>Application</code>, que vendría a ser un &#8220;contenedor&#8221; relativamente protegido de variables pisadas y globales erradas), a todos los objetos o variables que haga falta.</p>
<p>Con esto después se pueden hacer montones de cambios (instanciar una clase poco usada sólo cuando se necesita, hacer una especie de <em>namespace</em> para tener un cache durante la ejecución del programa&#8230;). Y es que ahí, la imaginación es el límite.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.navarro.at/blog/2009/08/16/objetos-maestros-en-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maldito &#8220;Desvío de llamadas activado&#8221;</title>
		<link>http://adrian.navarro.at/blog/2009/03/23/maldito-desvio-de-llamadas-activado/</link>
		<comments>http://adrian.navarro.at/blog/2009/03/23/maldito-desvio-de-llamadas-activado/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 21:27:21 +0000</pubDate>
		<dc:creator>Adrián</dc:creator>
				<category><![CDATA[Ego]]></category>
		<category><![CDATA[Enredando]]></category>
		<category><![CDATA[Fail]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://adrian.navarro.at/blog/?p=143</guid>
		<description><![CDATA[Ni un mes llevo con el iPhone y ya estoy cansado de las ventanitas de &#8220;Desvió de llamadas activado&#8221;. Al llamar a alguien –por error o no– te tragas la ventana, con todo el rollo de tener que &#8220;Aceptar&#8221; la alerta antes de poder colgar rápidamente. Vamos, un gran fallo.
Aquí viene una solución que he [...]]]></description>
			<content:encoded><![CDATA[<p>Ni un mes llevo con el iPhone y ya estoy cansado de las ventanitas de &#8220;Desvió de llamadas activado&#8221;. Al llamar a alguien –por error o no– te tragas la ventana, con todo el rollo de tener que &#8220;Aceptar&#8221; la alerta antes de poder colgar rápidamente. Vamos, un <em>gran fallo</em>.</p>
<p>Aquí viene una solución que he encontrado buscando y que me ha funcionado con el último firmware (2.2.1). Basta con tener el iPhone 3G jailbreakeado, Cydia instalado, actualizado y cinco minutos libres. El proceso es sencillo:</p>
<ol>
<li>Abres Cydia.</li>
<li>En la &#8216;pestaña&#8217; o ventana &#8220;Home&#8221;, seleccionas &#8220;More package sources&#8221;, justo debajo de &#8220;Featured packages&#8221;.</li>
<li>En la lista buscas el repo llamado &#8220;iPhone-Notes.de&#8221;.</li>
<li>Pinchas, confirmas, le das a instalar, aceptas todo y vuelves a la pantalla de Cydia.</li>
<li>En la lista de secciones verás un par de nuevas secciones. El paquete está en &#8220;Tweaks (2.2)&#8221;.</li>
<li>Dentro de la sección &#8220;Tweaks (2.2)&#8221; hay un paquete llamado &#8220;ForwardMsgFix&#8221;.</li>
<li>Tocas sobre el paquete, confirmas, instalas y sales de Cydia.</li>
<li>Apagas el iPhone por completo (apretas en el botón <em>power</em> durante unos segundos, deslizas la barra &#8216;Apagar&#8217; y esperas a que se apague completamente – puede tardar un rato).</li>
<li>Vuelves a encender de la misma forma, apretando el botón de power. Lo que se dice reiniciar, vamos.</li>
<li><em>Voilà!</em></li>
</ol>
<p>Todo sea por encajar una chorrada en 10 pasos, pero vamos. Estoy feliz, ya puedo cancelar alegremente esas llamadas fatídicas de errores de toque. Y torpeza, claro.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.navarro.at/blog/2009/03/23/maldito-desvio-de-llamadas-activado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Batallitas de Telefónica y OVH: Limitando el tráfico</title>
		<link>http://adrian.navarro.at/blog/2008/11/22/batallitas-de-telefonica-y-ovh/</link>
		<comments>http://adrian.navarro.at/blog/2008/11/22/batallitas-de-telefonica-y-ovh/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 23:48:01 +0000</pubDate>
		<dc:creator>Adrián</dc:creator>
				<category><![CDATA[Enredando]]></category>
		<category><![CDATA[Servidores]]></category>
		<category><![CDATA[ovh]]></category>
		<category><![CDATA[timofónica]]></category>
		<category><![CDATA[transito]]></category>

		<guid isPermaLink="false">http://adrian.navarro.at/blog/?p=38</guid>
		<description><![CDATA[Si eres una empresa de tránsito IP o dispones de una red de servidores, y quieres hacer peering directo con Telefónica tienes que tener un tráfico de unos 6 Gigabits por segundo, o lo que vienen a ser sobre los 700 Megabytes por segundo (o un CD enterito cada segundo!).

OVH es una empresa de alojamiento [...]]]></description>
			<content:encoded><![CDATA[<p>Si eres una empresa de tránsito IP o dispones de una red de servidores, y quieres hacer peering directo con Telefónica tienes que tener un tráfico de unos 6 Gigabits por segundo, o lo que vienen a ser sobre los 700 Megabytes por segundo (o un CD enterito cada segundo!).</p>
<p><a href="http://adrian.navarro.at/blog/wp-content/uploads/2008/11/ping_telefonica.png"><img class="aligncenter size-full wp-image-39" title="Gráfico MRTG" src="http://adrian.navarro.at/blog/wp-content/uploads/2008/11/ping_telefonica.png" alt="" width="500" height="224" /></a></p>
<p>OVH es una empresa de alojamiento web Europa. Dispone de peerings <strong>propios</strong> en España, Francia, Italia, Inglaterra, Bruselas, Holanda, Alemania, Polonia, República Checa, Austria, Suiza, y otros peerings en IX independientes (por ejemplo PAIX, que es el punto de intercambio neutro situado en Nueva York). Además, tienen tránsito con las grandes empresas que manejan el flujo de datos en Internet: Level3, Global Crossing o TeleGlobe por ejemplo.</p>
<p>En resumidas cuentas significa que por un lado han establecido fibras hasta los intercambios de cada país que he expuesto por arriba. Y en cada uno tienen un router, que conectan con los diferentes operadores de cada país. Y donde no llegan, pasan a través de las empresas de tránsito que son las que llegan donde su propia red no llega (extranjero sobre todo).</p>
<p style="text-align: center;"><a href="http://adrian.navarro.at/blog/wp-content/uploads/2008/11/weathermap_europe.png"><img class="alignnone size-full wp-image-40" title="Mapa de red" src="http://adrian.navarro.at/blog/wp-content/uploads/2008/11/weathermap_europe.png" alt="" width="499" height="441" /></a></p>
<p>OVH instaló hace poco su fibra y router en ESPANIX, desde Francia. Desde Paris hasta Madrid hay una latencia de 16ms, y tienen 2&#215;10Gbps, es decir, 20Gbps de conectividad. Normalmente deberían establecer conectividad con todos los operadores españoles. Hacerlo bien significaría baja latencia desde España hasta los servidores de OVH y una velocidad bastante alta.</p>
<p>Como he expuesto arriba, Telefónica requiere un tráfico de al menos 6 Gbps para hacer peering. OVH de sobra genera ese tráfico ¿por qué no hacen peering? Si miráis el gráfico de arriba la latencia se dispara y en los gráficos de tráfico se encuentra un tope de 4 Gbps. ¿Significado? Está limitado el tráfico a 4 Gbps, y la conexión se satura en el tránsito con Telefónica, siempre desde la red OVH.</p>
<p>Por lo tanto, como limitación encubierta a OVH, Telefónica ha limitado su tránsito para evitar hacer peering. Esto hace que todos aquellos que tenemos servidores en OVH y necesitamos buena latencia y velocidad (ficheros/servidores de juego), estemos limitados a una conexión pésima desde Telefónica.</p>
<p>Larga vida a OVH, larga vida a los operadores alternativos y al libre tránsito de datos.</p>
<p><a href="http://rafb.net/p/IlKtIN43.html"><strong>» Leer email envíado por OVH a sus clientes</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.navarro.at/blog/2008/11/22/batallitas-de-telefonica-y-ovh/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.336 seconds -->
