<?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>Ruido blanco</title>
	<atom:link href="http://ruido-blanco.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://ruido-blanco.net/blog</link>
	<description>Estática sólo para confundir</description>
	<lastBuildDate>Sat, 20 Mar 2010 15:58:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Google no se anda con chiquitas con los puzzles</title>
		<link>http://ruido-blanco.net/blog/archivos/2010/03/20/google-no-se-anda-con-chiquitas-con-los-puzzles/</link>
		<comments>http://ruido-blanco.net/blog/archivos/2010/03/20/google-no-se-anda-con-chiquitas-con-los-puzzles/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 15:29:41 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://ruido-blanco.net/blog/?p=1199</guid>
		<description><![CDATA[

El Jueves estuve en el Google Chrome Hackathon Madrid (junto con Alberto), y por programar y presentar una extensión (Video5) me dieron una camiseta, que cambié a Alberto por su puzzle (la extensión de Alberto es YouTube Video Kit).

El puzzle tiene unas 500 piezas. Los bordes y la parte superior del puzzle fueron sencillos, pero [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://ruido-blanco.net/blog/wp-content/uploads/2010/03/puzzle.jpeg" alt="Google Chrome Extensions Puzzle" title="Google Chrome Extensions Puzzle" width="100%" class="aligncenter size-full wp-image-1200" /></p>

<p>El Jueves estuve en el <a href="http://programa-con-google.blogspot.com/2010/03/google-chrome-hackaton-madrid.html" title="Programa con Google: Google Chrome Hackathon Madrid">Google Chrome Hackathon Madrid</a> (junto con Alberto), y por programar y presentar una extensión (<a href="https://chrome.google.com/extensions/detail/bnbgfkneigcldienfggfoacjnkbmmhhe?hl=es" title="Video5 - Galería de extensiones de Google Chrome">Video5</a>) me dieron una camiseta, que cambié a Alberto por su puzzle (la extensión de Alberto es <a href="https://chrome.google.com/extensions/detail/eabbpecapgpjacbdnkniiankolclnnid?hl=es" title="YouTube Video Kit - Galería de extensiones de Google Chrome">YouTube Video Kit</a>).</p>

<p>El puzzle tiene unas 500 piezas. Los bordes y la parte superior del puzzle fueron sencillos, pero la parte central (el código bidimensional) es más cuestión de mirar a la forma de la pieza más que al dibujo. Al final, esta mañana lo he terminado (ayudado por mi hermano y mi hermana a ratos) y descubierto el contenido: una extensión para Google Chrome, que en ciertas páginas activa un <em>page action</em> que te lleva a un documento de Google Docs. Desgraciadamente este documento parece que sólo es accesible a empleados de Google (o gente que tenga un correo terminado en google.com), por lo que no puedo llegar más allá.</p>

<p>Pensándolo así debería haberme quedado con la camiseta ¿no?</p>
]]></content:encoded>
			<wfw:commentRss>http://ruido-blanco.net/blog/archivos/2010/03/20/google-no-se-anda-con-chiquitas-con-los-puzzles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construyendo entornos de hosting</title>
		<link>http://ruido-blanco.net/blog/archivos/2010/02/28/construyendo-entornos-de-hosting/</link>
		<comments>http://ruido-blanco.net/blog/archivos/2010/02/28/construyendo-entornos-de-hosting/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 22:05:13 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Ordenadores]]></category>

		<guid isPermaLink="false">http://ruido-blanco.net/blog/?p=1195</guid>
		<description><![CDATA[Me he encontrado una charla del grupo de usuarios de Ruby de San Diego que no la he visto enlazada en ninguno de mis blogs habituales (aunque puede ser que no estuviera mirando). La charla trata sobre construir sistemas de hosting para aplicaciones Ruby (aunque hay mucho aplicable a otro tipo de aplicaciones, por supuesto), [...]]]></description>
			<content:encoded><![CDATA[<p>Me he encontrado una charla del <a href="http://sdruby.org" title="SD Ruby - We are San Diego's Ruby community">grupo de usuarios de Ruby de San Diego</a> que no la he visto enlazada en ninguno de mis <em>blogs</em> habituales (aunque puede ser que no estuviera mirando). La charla trata sobre construir sistemas de hosting para aplicaciones Ruby (aunque hay mucho aplicable a otro tipo de aplicaciones, por supuesto), desde el <em>hardware</em> hasta el <em>software</em> (la segunda parte sigue siendo muy interesante para <em>hosting</em> gestionado).</p>

<p>El <a href="http://sdruby.org/podcast/77" title="SD Ruby - Episode 077: Building Your Own Hosting Environment">video de la charla</a> está disponible y el ponente <a href="http://nicbenders.com/hosting/" title="Building a Hosting Enviroment, Correctly">ha recopilado enlaces y las transparencias</a>.</p>

<p>Tras el salto, mis notas (en horrible español técnico y con enlaces).</p>

<p><span id="more-1195"></span></p>

<p>Un servidor no es un ordenador de escritorio: necesita ser durable, mantenible y escalable.</p>

<p>DEBES utilizar <a href="http://en.wikipedia.org/wiki/RAID#Hardware-based" title="RAID en la Wikipedia">RAID <em>hardware</em></a>. Una de las ventajas más grandes del RAID <em>harware</em> es la <em>caché</em> protegida por la batería (las escrituras pendientes no se pierden debido a un fallo de corriente). El RAID <em>hardware</em> permite además hacer <em>write-back</em> en vez de <em>write-through</em>. La diferencia entre los dos es escribir a la velocidad de la memoria frente a escribir a la velocidad del disco. También necesitas discos que se puedan cambiar “en caliente”. Si pierdes un disco no quieres tener que parar el servidor para sustituirlo.</p>

<p>DEBES tener una consola de gestión remota REAL (no se refiere a SSH o similares). Necesitas algo que se ejecute cuando el sistema operativo no se está ejecutando. Algo como <a href="http://www.delltechcenter.com/page/OpenManage+Systems+Management" title="OpenManage System Management - The Dell TechCenter">Dell OpenManage</a>.</p>

<p>DEBES tener fuentes de alimentación redundantes. Las fuentes de alimentación contienen piezas físicas, que, como los discos duros, pueden fallar. También es recomendable utilizar diferentes circuitos para las diferentes fuentes de alimentación.</p>

<p>NECESITAS una CPU para servidores, no para escritorios. Buena <em>cache</em> L2 (de segundo nivel) y gran ancho de banda para memoria. Actualmente, para servidores, <a href="http://en.wikipedia.org/wiki/Intel_Nehalem_(microarchitecture)" title="Nehalem (microarchitecture) en la Wikipedia">Nehalem</a> son los procesadores a instalar. Cuentan con controlador de memoria en el <em>chip</em>, pero no se debe llenar los canales de memoria con <em>DIMMs</em> porque cada uno ralentiza el canal.</p>

<p>Para sistema operativo no hay discusión: una distribución de Linux con soporte a largo plazo (LTS, <em>long term support</em>). Dos posibilidades: <a href="http://www.redhat.com/rhel/server/" title="Red Hat Enterprise Linux 5 Server">Red Hat Enterprise Linux</a> (publicada en el 2007 y con soporte hasta el 2014) o <a href="http://www.ubuntu.com/products/whatIsubuntu/serveredition" title="Ubuntu Server Edition">Ubuntu Server LTS</a> (publicada en el 2008 y soportada hasta el 2013). La idea es que nunca se necesita actualizar el sistema operativo de un servidor una vez instalado, únicamente aplicar las actualizaciones de seguridad.</p>

<p>NO instales una distribución al completo (nada de XWindows en un servidor). Instala únicamente lo que necesites. Paquetes extra significa <em>bugs</em> extras, problemas de seguridad <em>extra</em> y trabajo de mantenimiento extra.</p>

<p>Utiliza gestión de volumenes lógicos (LVM, <em>Logical Volume Management</em>), de forma que puedas añadir más discos duros físicos sin tener que crear nuevas particiones e incluyendo el nuevo espacio en las particiones ya existentes.</p>

<p>Utiliza ext3 como sistema de ficheros: muchos más usuarios significa que los problemas que puedas llegar a tener pueden haber sido resueltos antes. Utiliza la opción <em>noatime</em> cuando montes particiones, de otra forma cada lectura del disco significa una escritura para el tiempo de acceso, lo que empeorará el ancho de banda del disco y <em>envenenará</em> la <em>cache</em>.</p>

<p>Utiliza /etc/hosts y no dependas en el DNS. Todos los servidores (bases de datos, ficheros,…) deben poder ser resueltos sin necesidad de utilizar DNS.</p>

<p>Utiliza iptables incluso si tienes más líneas de defensa (como <em>firewalls</em> <em>hardware</em>) o tu servidor no esta directamente conectado a Internet.</p>

<p>Redirige el correo electrónico del <em>root</em> a un correo real. Muchos programas envian correos a <em>root</em>, sin la redirección los correos podrían perderse durante meses o años.</p>

<p>Utiliza <a href="http://wiki.opscode.com/display/chef/Home" title="Home - Chef - Opscode Open Source Wiki">Chef</a>.</p>

<p>Para desplegar aplicaciones utiliza Apache y Passenger. La configuración del host virtual de Apache y la configuración de Passenger deben estar en archivos diferentes. Activa el <a href="http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerUseGlobalQueue" title="Phusion Passenger users guide"><em>GlobalQueue</em> de Passenger</a> (esta opción utiliza una única cola, en vez de una cola por <em>worker</em>, mejorando el rendimiento en el caso de peticiones largas). Modifica <em>MaxPoolSize</em> dependiendo de cada servidor y cada aplicación: aumentalo hasta que el servidor empiece a necesitar <em>swapping</em>. Establece el <em>PoolIdleTime</em> a 0 para que los <em>worker</em> no se desactiven cuando esté “ociosos” (y vigila que no existan <em>leaks</em> por procesos de larga duración).</p>

<p>En vez de utilizar el Ruby proporcionado por la distribución utiliza <a href="http://www.rubyenterpriseedition.com/" title="Ruby Enterprise Edition">Ruby Enterprise Edition</a>. La principal ventaja es un recolector de basura configurable. <a href="http://blog.evanweaver.com/articles/2009/04/09/ruby-gc-tuning/" title="ruby gc tuning :: snax">Evan Weaver tiene un buen <em>wrapper</em> optimizado para procesos de larga duración</a>.</p>

<p>Comprueba tus <em>backups</em> (restaura desde el <em>backup</em> para comprobarlo). El único <em>backup</em> en el que puedes confiar es el que hayas comprobado que funciona más recientemente. Si no puedes permitirte perder una semana de datos, comprueba tus <em>backups</em> cada semana.</p>

<p>NECESITAS Gigabit para tu red interna, incluso si tu <em>upstream</em> no dispone de esa velocidad (lo más probable). Lo que pretendes es reducir la latencia dentro de tu red (cuanto más ancho de banda, menos tardará el servidor de bases de datos en proporciona la información al servidor de aplicaciones). Hay soluciones baratas por unos $100 (Linksys). El control de flujo (<em>flow control</em>) evita problemas cuando tu red Gigabit se encuentra con tu red Megabit (problemas de <em>packet dropping</em>).</p>

<p>Monitoriza. Dos tipos: disponibilidad y eficiencia. <a href="http://www.nagios.org/" title="Nagios - The Industry Standard in IT Infrastructure Monitoring">Nagios</a> es código abierto. <a href="http://www.pingdom.com/" title="Pingdom Web site monitoring for 100% uptime">Pingdom</a> es barato ($10/mes, con <em>push notifications</em> para el iPhone). Tiene la ventaja de ejecutarse en una red diferente a la tuya y comprobar la disponibilidad “al mundo” de tu aplicación. <a href="http://www.newrelic.com/" title="New Relic .:. On-Demand Application Management">New Relic RPM</a> tiene versión gratuita y versión de pago (cara), pero es muy buena herramienta.</p>

<p>¿Por qué no <a href="http://nginx.org/" title="nginx news">Nginx</a>?<br />
Es menos estable y “peor” soportado. Frente a Apache, Nginx sirve con mucho menos gasto de CPU contenido estático, pero si el problema es este, posiblemente deberías estar sirviendo el contenido estático desde Amazon S3.</p>

<p>¿Capistrano sí o Capistrano no?<br />
<a href="http://www.capify.org/" title="Capistrano">Capistrano</a> no es <em>abandonware</em> pero si <em>doneware</em> y posiblemente no se actualice. Se debe utilizar un sistema de despliege automatizado mediante <em>scripts</em>. Capistrano sigue siendo una opción muy buena, pero no es la única y existen muchas alternativas.</p>

<p>¿Seguridad e iptables?<br />
Sí es la última línea de defensa y tienes <em>firewalls</em> <em>hardware</em> delante, trata de hacerlo simple: cierra todos los puertos, abre HTTP, abre SSH para algunos rangos, y cosas como DNS… Si no puedes restringir SSH a ciertos rangos, limita el número de conexiones desde una subred para evitar ataques de diccionario.</p>

<p>¿No es el controlador RAID un punto de fallo único?<br />
Sí, es un punto de fallo único (<em>single point of failure</em>). Si necesitas evitar esto, será necesario un NAS o similar.</p>

<p>¿Se debe utilizar <a href="http://mmonit.com/monit/" title="Monit">Monit</a> o <a href="http://god.rubyforge.org/" title="God - A Process Monitoring Framework in Ruby">God</a>?<br />
No es necesario para Passenger, pero es necesario para cosas como BackgroundJob, Workling,… También es necesario rotar los archivos de registro (<em>log</em>), de otra forma crecerán hasta llenar el disco duro y harán fallar al servidor. Haz que el servidor no requiera intervención humana.</p>

<p>¿Se debe aplicar todo esto a <em>hostings</em> gestionados?<br />
La parte de <em>hardware</em> es irrelevante, pero se debe aplicar la parte de <em>software</em> siempre que se pueda. Mantén tus propios <em>backups</em>, a pesar de que el <em>hosting</em> realice <em>backups</em> de tus datos. Para tu propio servidor no utilices virtualización, proporciona mucha flexibilidad, pero el precio en eficiencia no lo vale.</p>

<p>¿Se debe compilar desde código fuente?<br />
Utiliza siempre que puedas soluciones estándares proporcionadas con la distribución. Compila desde código únicamente cuando sea necesario (Ruby Enterprise Edition, versiones modernas de Git). Deberias “paquetizar” tus productos para desplegar nuevos servidor más rápido y más estandarizadamente. Muchas veces puedes elegir paquetes de la distribución más moderna y re-compilarlos tu mismo para una versión anterior.</p>

<p>¿Por qué <em>Long Term Support</em>?<br />
Quieres construir el servidor, lanzar tu producto, y no volver a tocar el servidor de nuevo.</p>

<p>¿Se debería utilizar JRuby?<br />
En principio no. No es tan estándar y tan utilizado como el Ruby de Matz. Además consume más memoria. En la práctica no es competición para Ruby en entornos de producción.</p>
]]></content:encoded>
			<wfw:commentRss>http://ruido-blanco.net/blog/archivos/2010/02/28/construyendo-entornos-de-hosting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Llamadme tonto</title>
		<link>http://ruido-blanco.net/blog/archivos/2010/02/09/llamadme-tonto/</link>
		<comments>http://ruido-blanco.net/blog/archivos/2010/02/09/llamadme-tonto/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 20:27:47 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://ruido-blanco.net/blog/?p=1188</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a class="no-underline" href="http://ruido-blanco.net/blog/wp-content/uploads/2010/02/eyetv3-about.png" title="Ventana de Acerca de EyeTV 3.3"><img src="http://ruido-blanco.net/blog/wp-content/uploads/2010/02/eyetv3-about.png" alt="Ventana de Acerca de EyeTV 3.3" title="Ventana de Acerca de EyeTV 3.3" width="480" height="354" class="size-full wp-image-1187" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://ruido-blanco.net/blog/archivos/2010/02/09/llamadme-tonto/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>* Radio</title>
		<link>http://ruido-blanco.net/blog/archivos/2010/01/17/globradio/</link>
		<comments>http://ruido-blanco.net/blog/archivos/2010/01/17/globradio/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 13:57:02 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://ruido-blanco.net/blog/?p=1183</guid>
		<description><![CDATA[Nada más publicar RNE Radio alguién me pregunto si iba a liberar el código fuente de la aplicación (fuisteis varios, pero como no os recuerdo a todos, tendreis que quedar en el anonimato). Mi respuesta fue que se liberaría cuando hubieramos hecho algo de dinero con ella. Como muchos sabéis, RNE Radio fue un éxito [...]]]></description>
			<content:encoded><![CDATA[<p>Nada más publicar <a href="http://ruido-blanco.net/blog/archivos/2009/01/05/rne-radio-¡felices-reyes-a-todos/" title="RNE Radio: ¡Felices reyes a todos! - Ruido blanco">RNE Radio</a> alguién me pregunto si iba a liberar el código fuente de la aplicación (fuisteis varios, pero como no os recuerdo a todos, tendreis que quedar en el anonimato). Mi respuesta fue que se liberaría cuando hubieramos hecho algo de dinero con ella. Como muchos sabéis, <a href="http://ruido-blanco.net/blog/archivos/2009/02/12/al-asalto-de-las-maquinas-de-pedos-o-como-triunfamos-en-el-app-store/" title="Al asalto de las máquinas de pedos (o como triunfamos en el App Store) - Ruido blanco">RNE Radio fue un éxito</a> y hicimos “algún” dinero. Además durante el año pasado expandimos el catálogo con <a href="http://ruido-blanco.net/blog/archivos/2009/04/05/¿nueva-version-ya-actualizare/" title="¿Nueva versión? Ya actualizaré - Ruido blanco">France Radio</a>, que más lentamente, pero con obstinación, llegó a superar la recaudación de RNE Radio en el App Store (aunque por desgracia su vida también <a href="http://apps.yoteinvoco.com/franceradio/" title="Reproductor France Radio">tuvo que ser acabada</a>). También está el “hermano menor” de esas dos, <a href="http://radio.asoc.fi.upm.es/iphone/" title="FI-FM Radio">FI-FM Radio</a> (el servidor está caido), que sigue en la tienda, de forma gratuita, y descargada masivamente por alguna razón que <a href="http://ruido-blanco.net/blog/archivos/2009/04/16/resenas-de-los-clientes-de-fi-fm-radio/" title="Reseñas de los clientes de FI-FM Radio">escapa a mi entendimiento</a>.</p>

<p>Hace unos días me decidí a limpiar el repositorio que yo utilizaba para el desarrollo (el repositorio compartido por Javier era Subversion, y yo utilizaba git-svn para manejarlo) y <a href="http://github.com/drodriguez/globradio" title="drodriguez's globradio at master - GitHub">publicarlo en GitHub</a> como código abierto, esperando que a alguién le sea útil (al menos como herramienta educativa de cómo no escribir código). Tras el salto describiré algo más el contenido del código y las ausencias.</p>

<p><span id="more-1183"></span></p>

<p>Primero una disculpa, el código no es el código completo del que dispongo, y la historia contiene algunos saltos (sobre todo al principio). La razón es sencilla: el código de RNE Radio paso a ser propiedad de RTVE, y, aunque nosotros tenemos aún la propiedad de todo el código anterior al contrato (o al menos así lo entiendo yo), he preferido no publicarlo, por si los abogados se ponen nerviosos. De forma que no encontrareis el código o el <em>artwork</em> de RNE Radio en el repositorio (o eso espero). También me he cargado cosas como la web y las versiones archivadas de los productos que enviamos a la App Store, porque principalmente sólo ocupan espacio. A parte de eso, creo que está el resto (un poco modificado para que siga compilando y funcionando como el primer día).</p>

<p>¿Qué podemos encontrar? Pues como primer destacado, RRQAudioPlayer.[hm], RRQM3UParser.[hm], RRQPLSParser.[hm] y RRQShoutcastAudioPlayer.[hm] son los que hacían sonar a todos los programas (técnicamente se podrían haber reutilizado parte de los controlodares, pero según las aplicaciones empezaron a divergir, tener diferentes controladores fue una facilidad, en vez de un incordio, aunque aún hay bastante copia-pega entre ellos). RRQM3UParser y RRQPLSParser son simples <em>parsers</em> para los formator M3U y PLS, que obtienen la lista de archivos a reproducir (normalmente MP3), mientras que RRQAudioPlayer y RRQShoutcastAudioPlayer son los que descargan el <em>stream</em>, lo decodifican y lo envían al sistema de sonido del dispositivo. El primero está basado en uno de los ejemplos de Apple y muchas otras referencias desperdigadas por Internet. El segundo es una ampliación del primero para escuchar <em>streams</em> <a href="http://www.shoutcast.com/" title="Free Internet Radio - SHOUTcast Radio">Shoutcast</a> con meta-información incluida en el <em>stream</em> (como por ejemplo el de Radio FI). A este último, lo único que le quedaría por hacer es conseguir “sincronizar” la aparición de la meta-información con el sonido en sí (algo que busqué y rebusqué, y que creo que sigue sin ser posible).</p>

<p>Para Radio FI-FM necesitabamos una implementación de (parte) de la API de <a href="http://last.fm" title="Last.fm">Last.fm</a>, que está contenida en los archivos FILastFMDataProvider.[hm], FIImageProvider.[hm] y FI*Info.[hm]. Todo porque pensabamos que una aplicación en la que únicamente sonara sonido iba a quedar sosa (aunque siempre supimos que la gente únicamente miraría a la pantalla de vez en cuando… en el caso de que alguien utilizase la aplicación). Luego descubrimos que puedes poner a volar unas notas musicales que calientan el dispositivo a más no poder, y la gente no protestaba.</p>

<p>En el repositorio también está el código de COPE Radio, que nunca fue publicada, y que tiene una característica que me divertí mucho programándola: la selección de la cadena con un botón que se puede arrastrar con el dedo y rebota. Es una tontería, pero me gusta (la implementación está en COPENeedleView.[hm]).</p>

<p>Luego tenemos algunas clases de utilidad, como RRQFileLogger.[hm] para almacenar los <em>logs</em> en un archivo en el dispositivo, RRQNSString+Version.[hm], para comprobar si una versión es mayor, menor, igual o compatible con otra (aunque creo que este código finalmente no fue utilizado), y RRQVolumeView.[hm] que se encargaba de modificar el <em>slider</em> de volumen por defecto del sistema operativo en algo que nos gustaba más (y en un principio a hacer que ese <em>slider</em> proporcionando por el sistema operativo mostrara los cambios de volumen realizados con los botones físicos del dispositivo, <em>bug</em> que Apple eliminó en algún momento posterior). Finalmente encontramos a isArrrrr.m, que nunca entró en producción (estaba pensado para France Radio 2.0), un intento de un sistema antipiratería recopilado de comentarios en foros y páginas de Internet, mezclado con un poco de paranoia.</p>

<p>Hay, además de <em>master</em>, otras dos ramas con algún código interesante de France Radio 1.5 (en el cuál se incluían todas las cadenas de Radio France Bleu) y France Radio 2.0 (nunca publicado, y que iba a incluir muchas más cadenas francesas, una semilla para un posible “Ñ” Radio). En estos dos, según el número de cadenas aumentaba, vimos que la solución del archivo plist empezaba a ser un impedimento, y empezamos a utilizar <a href="http://sqlite.org" title="SQLite">SQLite</a> mediante <a href="http://code.google.com/p/sqlitepersistentobjects/" title="sqlitepersistentobjects - Project Hosting on Google Code">SQLitePersistentObjects</a> (proyecto abandonado a su suerte desde la aparición de Core Data en el iPhoneOS 3.0, pero muy útil para los días del 2.0). Seguramente no son los controladores más limpios basados en una base de datos, pero hay algunas ideas ahí dentro que quizá merezca la pena mirar (como el <em>timeout</em> para volver al controlador anterior).</p>

<p>Pues creo que eso es un resumen del código presente (que muy posiblemente sea todo el código que existirá relacionado, por mi parte). Si alguien quiere y puede hacer algo con él, al menos seguirá teniendo utilidad.</p>
]]></content:encoded>
			<wfw:commentRss>http://ruido-blanco.net/blog/archivos/2010/01/17/globradio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Please, Please, Please Let Me Get What I Want</title>
		<link>http://ruido-blanco.net/blog/archivos/2009/08/20/please-please-please-let-me-get-what-i-want/</link>
		<comments>http://ruido-blanco.net/blog/archivos/2009/08/20/please-please-please-let-me-get-what-i-want/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 21:39:18 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[Cine]]></category>
		<category><![CDATA[Música]]></category>

		<guid isPermaLink="false">http://ruido-blanco.net/blog/?p=1175</guid>
		<description><![CDATA[

 No solo Zooey Deschanel nos brinda su presencia en (500) Days of Summer, sino que, a través de She &#38; Him, regala a la banda sonora con una deliciosa versión del Please, Please, Please Let Me Get What I Want de The Smiths.

Aún no he visto la película (que promete), pero si podéis echar [...]]]></description>
			<content:encoded><![CDATA[<p><object type="application/x-shockwave-flash" data="http://ruido-blanco.net/blog/wp-content/musicplayer.swf?&#038;song_url=http://ruido-blanco.net/descargas/please-please-please-let-me-get-what-i-want.mp3" 
width="17" height="17">
<param name="movie" 
value="http://ruido-blanco.net/blog/wp-content/musicplayer.swf?&#038;song_url=http://ruido-blanco.net/descargas/please-please-please-let-me-get-what-i-want.mp3" />
</object> No solo <a href="http://spanish.imdb.com/name/nm0221046/" title="Zooey Deschanel en IMDB">Zooey Deschanel</a> nos brinda su presencia en <a href="http://spanish.imdb.com/title/tt1022603/" title="(500) Days of Summer en IMDB">(500) Days of Summer</a>, sino que, a través de <a href="http://www.sheandhim.com/" title="She &amp; Him">She &amp; Him</a>, regala a la banda sonora con una deliciosa versión del <a href="http://en.wikipedia.org/wiki/Please,_Please,_Please_Let_Me_Get_What_I_Want" title="Please, Please, Please Let Me Get What I Want en la Wikipedia">Please, Please, Please Let Me Get What I Want</a> de <a href="http://en.wikipedia.org/wiki/The_Smiths" title="The Smiths en la Wikipedia">The Smiths</a>.</p>

<p>Aún no he visto la película (que promete), pero si podéis echar una mano a la banda sonora la recomiendo (y si la compráis por iTunes tiene <em>bonus tracks</em>, entre ellos una cantada por de Zooey y una versión de <a href="http://en.wikipedia.org/wiki/Here_Comes_Your_Man" title="Here Comes Your Man en la Wikipedia">Here Comes Your Man</a> cantada por <a href="http://spanish.imdb.com/name/nm0330687/" title="Joseph Gordon-Levitt en IMDB">Joseph Gordon-Levitt</a>).</p>

<p>Y como homenaje postumo, una pregunta sencilla, ¿en qué dos películas de <a href="http://spanish.imdb.com/name/nm0000455/" title="John Hughes en IMDB">John Hughes</a> aparecia la canción en cuestión?</p>
]]></content:encoded>
			<wfw:commentRss>http://ruido-blanco.net/blog/archivos/2009/08/20/please-please-please-let-me-get-what-i-want/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PocketCheat disponible en GitHub</title>
		<link>http://ruido-blanco.net/blog/archivos/2009/07/31/pocketcheat-disponible-en-github/</link>
		<comments>http://ruido-blanco.net/blog/archivos/2009/07/31/pocketcheat-disponible-en-github/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 08:20:07 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://ruido-blanco.net/blog/?p=1168</guid>
		<description><![CDATA[

Esta mañana me he cruzado con Cheat for iPhone/iPod touch, una aplicación para acceder a los cheat sheets de cheat.

Hace meses (Enero-Febrero) me puse a programar una aplicación de similares características, pero nunca saqué tiempo para terminarla (de hecho, casi no se puede decir que esté “empezada”) y se quedó en el limbo. Como ya [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://ruido-blanco.net/blog/wp-content/uploads/2009/07/cheat-icon-512x512.png" alt="PocketCheat icon (the Konami code)" title="PocketCheat icon" width="512" height="512" class="size-full wp-image-1169 centered" /></p>

<p>Esta mañana me he cruzado con <a href="http://cheatapp.com/" title="Cheat">Cheat for iPhone/iPod touch</a>, una aplicación para acceder a los <a href="http://cheat.errtheblog.com/" title="$ command line cheat sheets">cheat sheets de cheat</a>.</p>

<p>Hace meses (Enero-Febrero) me puse a programar una aplicación de similares características, pero nunca saqué tiempo para terminarla (de hecho, casi no se puede decir que esté “empezada”) y se quedó en el limbo. Como ya no tiene mucho sentido seguir desarrollandola (el poco mercado que tuviese la aplicación acaba de ser ocupado) la publico como código abierto (siempre me rondó la idea por la cabeza, pero también quería tenerla más avanzada).</p>

<p>El <a href="http://github.com/drodriguez/PocketCheat/tree" title="drodriguez's PocketCheat - GitHub">código está en GitHub</a> (aunque no se porqué aún no aparece), y tendréis que admitirme que el icono de mi versión es (al menos) infinitamente superior <img src='http://ruido-blanco.net/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://ruido-blanco.net/blog/archivos/2009/07/31/pocketcheat-disponible-en-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>No es que tenga una “racha” muy larga&#8230;</title>
		<link>http://ruido-blanco.net/blog/archivos/2009/06/28/no-es-que-tenga-una-%e2%80%9cracha%e2%80%9d-muy-larga/</link>
		<comments>http://ruido-blanco.net/blog/archivos/2009/06/28/no-es-que-tenga-una-%e2%80%9cracha%e2%80%9d-muy-larga/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 12:41:55 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://ruido-blanco.net/blog/?p=1165</guid>
		<description><![CDATA[No es que tenga una “racha” muy larga&#8230;, pero un parser de líneas de ordenes en Objective-C (ayer) y un método para copiar juegos a ScummVM para iPhones sin jailbreak (hoy) son mis últimas dos contribuciones al open source.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://calendaraboutnothing.com/" title="Calendar About Nothing: Tracking Open Source Contributions">No es que tenga una “racha” muy larga&#8230;</a>, pero un <a href="http://github.com/drodriguez/nuzip/tree/shell-split" title="drodriguez’s nuzip at shell-split - GitHub"><em>parser</em> de líneas de ordenes en Objective-C</a> (ayer) y <a href="https://sourceforge.net/tracker/?func=detail&#038;aid=2813504&#038;group_id=37116&#038;atid=418822" title="ScummVM: iPhone: scummvm:// handler">un método para copiar juegos a ScummVM para iPhones sin <em>jailbreak</em></a> (hoy) son mis últimas dos contribuciones al <em>open source</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ruido-blanco.net/blog/archivos/2009/06/28/no-es-que-tenga-una-%e2%80%9cracha%e2%80%9d-muy-larga/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Code want to be free</title>
		<link>http://ruido-blanco.net/blog/archivos/2009/05/06/code-want-to-be-free/</link>
		<comments>http://ruido-blanco.net/blog/archivos/2009/05/06/code-want-to-be-free/#comments</comments>
		<pubDate>Wed, 06 May 2009 21:26:49 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://ruido-blanco.net/blog/?p=1162</guid>
		<description><![CDATA[Como comentaba hace unas semanas TwitterFon parece que ha dejado de ser GPL, lo que parece confirmarse en esta entrada del desarrollador en su blog, que parece que quiere hacer una versión Pro de pago.

Pero por suerte, cualquier codigo publicado bajo la GPL no puede “cerrarse” retroactivamente, así que he decidido publicar la última versión [...]]]></description>
			<content:encoded><![CDATA[<p>Como comentaba hace unas semanas <a href="http://ruido-blanco.net/blog/archivos/2009/03/31/“geocoding”-inverso-en-el-iphoneipod-touch/" title="Geocoding inverso en el iPhone iPod touch - Ruido Blanco">TwitterFon parece que ha dejado de ser GPL</a>, lo que parece <a href="http://blog.naanstudio.com/2009/05/couple-of-announcements.html" title="naan studio: Couple of Announcements">confirmarse en esta entrada del desarrollador en su blog</a>, que parece que quiere hacer una versión Pro de pago.</p>

<p>Pero por suerte, cualquier codigo publicado bajo la GPL no puede “cerrarse” retroactivamente, así que he decidido publicar la última versión del código de la que disponía. Como extra he decidio también añadir el parche que proporcioné al desarrollador en su día y crear una rama con mi código de <a href="https://github.com/drodriguez/reversegeocoding/tree" title="drodriguez's reversegeocoding at GitHub">reverse geocoding</a> integrado.</p>

<p>Obviamente mi elección para compartir el código era GitHub, pero antes de hacerlo me he decidido a hacer una búsqueda rápida a ver si alguien tenía revisiones más modernas o más antiguas que la revisión que yo tuve la suerte de descargar del repositorio (maldita la hora que decidí descargarlo con el cliente de Subversion en vez de utilizar <a href="http://www.kernel.org/pub/software/scm/git/docs/git-svn.html" title="git-svn(1)">git-svn</a>), y para mi sorpresa he encontrado que en el mismo GitHub había <a href="http://github.com/jpick/twitterfon/tree" title="jpick's twitterfon at GitHib">una persona que tiene una copia de todo el repositorio</a> hasta más o menos Enero de este año (una pena que no siguiera actualizandolo). Así que ha sido <a href="http://github.com/drodriguez/twitterfon/tree/master" title="drodriguez's twitterfon at GitHub"><em>forkear</em></a>, clonar en local, copiar mi versión encima, y reenviar. No es la mejor historia del código, pero al menos está una de las revisiones más recientes del código (revisión 1726, del 15 de Marzo).</p>

<p>Personalmente no me voy a dedicar a mantenerlo, aunque quizá le haga el par de cambios que le propuse al desarrollador hace unos meses, pero si alguién tiene interés, sería un gran punto de partida para el infinitésimo cliente de Twitter en la App Store (o quizá modificarlo para que sea utilizable en <a href="http://identi.ca/" title="identi.ca">identi.ca</a> y otros sitios basados en <a href="http://laconi.ca/trac/" title="Laconica">Laconica</a>).</p>

<p><strong>PD:</strong> No se lo digaís al desarrollador del TwitterFon oficial, pero si algún día decide aplicarle el parche que le envié (y que debe tener en el correo), me da la impresión que su código quedaría manchado de GPL y tendría que al menos liberar esa versión ¿no creéis?</p>

<p><strong>PD:</strong> Por si alguien quiere ayudar, las propuestas que le hice al desarrollador era permitir utilizar el texto de la localización (sobre todo la versión textual que se consigue con el <em>reverse geocoding</em>) como texto del <em>tweet</em> en sí; y la segunda era que en vez de recoger todos los <em>tweets</em> hasta el último conocido por Twitterfon se detuviera en el primer <em>tweet</em> del usuario (suponiendo que ha leído todos hasta el punto en el qué envió algo por última vez).</p>
]]></content:encoded>
			<wfw:commentRss>http://ruido-blanco.net/blog/archivos/2009/05/06/code-want-to-be-free/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gravity</title>
		<link>http://ruido-blanco.net/blog/archivos/2009/04/24/gravity/</link>
		<comments>http://ruido-blanco.net/blog/archivos/2009/04/24/gravity/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 07:48:57 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://ruido-blanco.net/blog/?p=1152</guid>
		<description><![CDATA[

Gravity es un pequeño no-juego para el iPhone con física realista gracias a Chipmuck utilizando los acelerómetros para determinar dónde es “abajo”.

Código disponible en mi repositorio en GitHub.
]]></description>
			<content:encoded><![CDATA[<p><img src="http://ruido-blanco.net/blog/wp-content/uploads/2009/04/gravity.jpg" alt="Captura de pantalla de Gravity" title="Gravity" width="320" height="481" class="size-full wp-image-1153 centered" /></p>

<p>Gravity es un pequeño no-juego para el iPhone con física realista gracias a <a href="http://code.google.com/p/chipmunk-physics/" title="Chipmuck physics">Chipmuck</a> utilizando los acelerómetros para determinar dónde es “abajo”.</p>

<p>Código disponible en <a href="http://github.com/drodriguez/gravity" title="drodriguez's gravity - GitHub">mi repositorio en GitHub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ruido-blanco.net/blog/archivos/2009/04/24/gravity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reseñas de los clientes de FI-FM Radio</title>
		<link>http://ruido-blanco.net/blog/archivos/2009/04/16/resenas-de-los-clientes-de-fi-fm-radio/</link>
		<comments>http://ruido-blanco.net/blog/archivos/2009/04/16/resenas-de-los-clientes-de-fi-fm-radio/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 19:49:58 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://ruido-blanco.net/blog/?p=1148</guid>
		<description><![CDATA[Tras más o menos dos semanas a la venta y 18.745 unidades descargadas (sí, habéis leído bien, 18.745 unidades), hoy me he puesto a mirar las reseñas que han dejado algunos clientes en las diferentes App Store. Las voy a poner aquí a modo de publicidad.

Funciona perfectamente. La aplicación funciona perfectamente&#8230; y además es la [...]]]></description>
			<content:encoded><![CDATA[<p>Tras más o menos dos semanas a la venta y 18.745 unidades descargadas (sí, habéis leído bien, 18.745 unidades), hoy me he puesto a mirar las reseñas que han dejado algunos clientes en las diferentes App Store. Las voy a poner aquí a modo de publicidad.</p>

<blockquote><p><strong>Funciona perfectamente.</strong> La aplicación funciona perfectamente&#8230; y además es la radio de mi facultad!! =P</p><p>abustamante (España)</p></blockquote>

<blockquote><p><strong>Más.</strong> Buena app me gustaría con mas estaciones</p><p>Youtubero (México)</p></blockquote>

<blockquote><p><strong> <img src='http://ruido-blanco.net/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </strong>No es un buen canal. Una sola cadena y no noruega. [interpretación basada en la traducción de Google]</p><p>Hoolo (Noruega)</p></blockquote>

<blockquote><p><strong>Ace!!</strong> Very useful! And first review woop-woop!! <img src='http://ruido-blanco.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p><p>StarsAreBlind (Reino Unido)</p></blockquote>

<blockquote><p><strong>Cool</strong> Hgggggggggg</p><p>~*Steve*~ (Estados Unidos)</p></blockquote>

<blockquote><p><strong>No</strong> Worst ever</p><p>Z g (Estados Unidos)</p></blockquote>

<blockquote><p><strong>Pathetic</strong> It&#8217;s freekin Spanish their are english people too horrible they should pay u for it</p><p>Tejdjrjhrjgijejrjdjjjj (Estados Unidos)</p></blockquote>

<blockquote><p><strong>needs improvement</strong> it doesn&#8217;t let you chose different genres of music and there&#8217;s no next button pandora is much better</p><p>nkarls (Estados Unidos)</p></blockquote>

<blockquote><p><strong>No</strong> It&#8217;s gay</p><p>Drmmer (Estados Unidos)</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ruido-blanco.net/blog/archivos/2009/04/16/resenas-de-los-clientes-de-fi-fm-radio/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
