El perfeccionista de mierda

(…) la cultura del “perfeccionista de mierda“, en la cual todo error o falta de usabilidad es subsanado con prioridad UNO antes de programar nuevas características

Marcos Besteiro

Pues va a ser que me siento identificado, sí. Pero tampoco está tan mal, al menos incita a encontrar nuevas formas de hacer las cosas (superarse? bueno, depende, muahaha…). ¿Mejor que estar parado, no? Vale, todo depende de como se haga.

Existir y ser de carne y circuitos

Es obvio. Lo que era Internet hace 10, 15, o incluso 20 años, no tiene absolutamente nada que ver con lo que es hoy. Una red de comunicación diseñada con fines científicos se ha convertido en un gran contenedor de relaciones entre personales reales, completamente ajenas a la definición de Internet pese a tratarse de grandes consumidores del contenido presente en “la telaraña” como a algunos les gusta llamar este lugar, que a ojos de otros sólo se trata (poéticamente hablando) de muchos ceros y muchos unos.

Internet es un lugar para despotricar sobre películas y compatir pornografía. Esto lo dicen “Jay” y “Silent Bob”. ¿Cómico? Por qué no. Aunque no deja de ser una caricatura sobre el desarrollo ‘a futuro’ de Internet y por ende “su propia decadencia”.

Pero lo cierto es que Internet no tiene forma, o yo no la veo y soy un cegato. Tampoco se trata de una nebulosa, aunque el concepto de “nube” no es tan descabellado: estamos explotados (y si no nosotros, nuestra propia identidad más real que virtualmente reflejada) por los cuatro lados del mundo y la liamos parda cuando algo se viene abajo.

Y mientras unos discuten sobre la propia identidad, y de la propia persona –real– que busca discernir entre él y su autómata, otros saborean la guinda del postre de esta cargada discusión, adelantándose a una generación que por lo visto jamás pasará el test de Turing.

Ca-Captcha

Cómo hacer un Captcha y que te salga una mierda tal cual: RapidShare. Pero hablemos de humanos y más exactamente de personas: algunas no saben contar. Y eso hace que nuestras propias conclusiones nos terminen asustando. Pero nos terminamos aclarando, aunque sea erróneamente: no podemos usar captchas por que nunca serán completamente fiables, no podemos contarnos según cookies ni tampoco por IPs, ni siquiera por ordenadores. Al fin y al cabo, no somos personas. Aren’t we?

Y hablando de medir, hay que ir con mucho cuidado. No vaya a ser que el ego se nos vuelva más salvaje de lo que debería y pase que un diario nacional que se la mide con el New York Times.

Ahora me voy a mi esquina, a reflexionar sobre lo que hemos hecho.

Software libre y empresas

Mucha gente y especialmente muchas empresas no quieren software libre. Quieren software con responsables que estén obligados a dar respuestas y proveer soluciones.

Dado que la respuesta tradicional en foros de software libre (me la han dicho miles de veces y yo la he dicho docenas) cuando alguien se queja de como funciona algo o pide una mejora es “pues ahí está el código fuente, anda y búscate la vida y lo compartes con nosotros luego”) no es tan útil como mucha de esta gente piensa, pues el software libre pierde de calle.

eduo, en un comentario en un post de fotomaf

Dificilmente podría haberlo acertado más. Hoy en día, la mayoría de empresas que recurren a sistemas cerrados (la gran mayoría de veces pertenecientes Microsoft) para sus infraestructuras, y así derivar el soporte (o cabeza de turco, si hay algún problema), lo hacen ‘premiando’ las arcas de grandes empresas, dejando atrá  la gran mayoría de veces el funcionamiento ópitmo del servico prestado (más vale echarle la culpa alguien de que no funcione, que el hecho de que funcione bien sin poder echarle la culpa a alguien).

Típico.

A muerte con el mapa

Soy una leyenda. Me refiero a que posiblemente sea la persona más torpe a la hora de desplazarse que puede haber a este lado de tierra. Ni con el GPS del iPhone (sí, tengo un iPhone desde hace poco), ni con las indicaciones de Google Maps. Ni siquiera con las indicaciones por las que voy mendigando…

Vale, odio los mapas. Y soy una verdadera mierda a la hora de situarme, tengo el don de liarla siempre. Mi madre me lo dice, ’sólo tú puedes hacerlo hijo’. No se equivoca. ¿Debería sentirme orgulloso o preocuparme por ello, doctor?

Pero no es mi vida de lo que vengo a hablar, por quién me habéis tomado… Es que he vuelto a enfadarme con Google Maps. Bueno, ahora mismo no, pero sí hace unos meses y ahora que he retomado un poco el jugueteo con el API de Google Maps, es como tomarse mal una CocaCola. Vuelve y jode mucho.

Al turrón. Desde hace relativamente poco (bueno, ya hace bastante que está implementado) se puede usar el API de reverse geocoding desde JavaScript. Es sencillo: creas un nuevo objeto en plan geocoder = new GClientGeocoder(); y llamas a la función getLocations del mismo objeto.

Por dar un ejemplo:

geocoder = new GClientGeocoder();
geocoder.getLocations(latlng, function(addresses) {
if(addresses.Status.code != 200) {
alert("Ubicación no reconocida");
} else {
if(typeof(addresses.Placemark[0].AddressDetails.Country.
\
AdministrativeArea.SubAdministrativeArea.Locality.PostalCode) == "undefined") {
alert("No hemos podido obtener el código postal de este área, con lo que es posible que los resultados de tus búsquedas sean inexactos");
} else {
cp = addresses.Placemark[0].AddressDetails.Country. \

AdministrativeArea.SubAdministrativeArea.Locality.PostalCode. \
PostalCodeNumber;
};
};
);

(Nota mental: vaya pesadilla poner código en WordPress… Donde hay un \ hay que volver a juntar el código (quitando espacios, claro))

Todo este código asume que ya tienes un objeto llamado “latlng” que contiene las coordenadas de Latitud y Longitud que quieres convertir a código postal en este caso. Crear el objeto LatLng es muy fácil: latlng = new GLatLng(latitud, longitud);.

Aunque así parezca fácil, obtener la información reversa no es nada fácil, entre otras por que cambia el resultado si estás haciendo un reverse de un lugar en España, Alemania, Francia o Estados Unidos (jerarquía e informaciones algo diferentes). Por aquí hay un ejemplo básico de qué resultados da el Reverse Geocoding en XML.

Desde JavaScript, es algo así: del objeto se saca un array, matriz, tupla, quillostoquéeh de ‘PlaceMark’. Aquí asumimos el primero que es teóricamente el más preciso si no es el único. Dentro tenemos “AddressDetails”. Dentro de esto, “Country”. Dentro de “Country”, llega “AdministrativeArea”. Dentro “SubAdministrativeArea”. Dentro, “PostalCode”. Y ahí, finalmente, “PostalCodeNumber”.

Pese a que todo esto es y parece una pesadilla, obtener la dirección sin más se puede conseguir de una forma un poco más sencilla: addresses.Placemark[0].address;

Y repitiéndome de otras veces, esto no deja de ser una chuleta. Tamaño XL, pero sí… lo es.

Voy a ver si me pongo a hacer una aplicación sencillita para el iPhone, con el API de 11870. Mi idea era simplemente rellenar una “posición actual” con texto libre, pasarlo a coordenadas y pasarlo a reverso para confirmar en limpio (por código postal y dirección) la inserción realizada. Una vez ahí, un formulario de búsqueda libre que simplemente deje buscar a una distancia de nuestra posición actual (el API de 11870 permite búsquedas geográficas, la verdad es que mola un montón).

Voy a ver si no me pierdo demasiado (y de nuevo) con el GeoCoding. No es lugar para desorientados.

(Nota de pie: Sí, estoy copiando un poco –mucho– a Gafeman y su Comil.us, que por cierto, funciona genial y está muy bien –si no lo has hecho, échale un ojo–… pero le tengo ganas al API de Google Maps y a la de 11870, sólo sea por programar un poco para la plataforma webapp-móvil y exprimir al máximo el API JavaScript de Google Maps sin usar los propios mapas).

Para el futuro

Otro tanto de furilo, compañía y La Coctelera. Acaban de sacar su último proyecto llamado “Las cinco del día“. Cinco noticias, un amago de resumen del día. Según dicen, lo que tendría sentido recordar dentro de 50 años. Me recuerda bastante a 20palabras, que como otros proyectos web se extinguió (a estas alturas del juego, caballeros, sabemos que nada es para siempre). Promete y mucho. A ver qué nos da, que eso es otra cosa. ¡Suerte!

PHP: estirar el objeto

No, nada. Es un maldito título no-creativo. En realidad yo venía a hablar de mi libro a hablar del tema de extensión infinita de objetos clases. En algunos lenguajes de programación se pueden crear objetos e ir extendiéndolos hasta el infinito y más allá, no es el caso de PHP.

Por poner un ejemplo: si tenemos una clase que es AllTheApplication, es posible que queramos que herede las clases ApplicationRenderPage y ApplicationDatabase, algo como:

class ApplicationRenderPage {}
class ApplicationDatabase {}
class AllTheApplication extends ApplicationRenderPage, ApplicationDatabase {}

Sin embargo, esto no está (todavía) disponible en PHP por lo que nos dará un error. Eso no significa que no se puedan hereder cualidades de un objeto en tercer grado:

class ApplicationRenderPage {}
class ApplicationDatabase extends ApplicationRenderPage {}
class AllTheApplication extends ApplicationDatabase {}

En este último caso, AllTheAplication podría manejar también funciones y variables no protegidas tanto de ApplicationRenderPage como de ApplicationDatabase. Voilà!

Y una pequeña nota: aunque esto sea de cierta forma una solución posible, estoy casi seguro de que hay formas más consistentes de hacerlo, puesto que en este caso las clases se van extendiendo una a otra, de cierta forma ‘en anillo’ con lo que conlleva al hacer cambios en la estructura. Recomendaría algo parecido a:

class ApplicationRenderPage {}
class ApplicationDatabase {}
class AllTheApplication { function __construct() { $this->ApplicationDatabase = new ApplicationDatabase; $this->ApplicationRenderPage = new ApplicationRenderPage; } }

Así, basta con inicializar el objeto ($Application = new AllTheApplication) y de ahí acceder a los subobjetos (echo $Application->ApplicationDatabase->QueryCount si tenemos una variable que se llame QueryCount dentro del objeto ApplicationDatabase inicializado desde el construct de AllTheApplication). Ojo, no es oro todo lo que reluce y en este caso no se pueden acceder a las variables entre los distintos objetos (quizás usando parent::ApplicationDatabase, aunque no sé demasiado como se comportaría).

Y esto, señores, es una chuleta.

Maldito seas, Murphy

De la saga de ‘programadores desamparados’, o más bien jodidos y precedido por el post ‘Probabilidades‘ (de que cambien Twitter cuando peor te va), llega el ‘es que lo estás haciendo mal’.

No, no hablo de ninguna crítica pelotera (que haberlas, haylas), si no de la putada que supone pasarse 2 horas currando en una verdadera chorrada. No por eso, si no por el empacho que te metes después de cruasáns con miel, así andamos…

El módulo APC tiene una función (RFC1867) que básicamente permite mostrar una barra de carga de archivo en entornos que tengan el caché APC activado. Más o menos una linea asín en el formulario:

<input type=”hidden” name=”APC_UPLOAD_PROGRESS” value=”<?php echo uniqid() ?>” />

Pues bien, si tenemos un input ‘file’ para subir el archivo, tendrá que ir debajo del input oculto ‘APC_UPLOAD_PROGRESS’, por qué si no no funcionará la barra de progreso.

Obviamente si lo digo… sí, lo he hecho. 2… dos malditas horas para darme cuenta. Murphy, te odio.

PS: saludos a Aguarate, que le hace ilusión… ¬¬”

Defina ‘estúpido’

Existen ciertas tensiones, que vienen de bastante tiempo atrás, y que esencialmente consisten las peleas entre usuarios finales y discográficas o sociedades gestoras de derechos.

Localmente, la eterna mafia que todos conocemos: la SGAE. Sociedad encargada de la gestión de derechos de los autores y editores, sin ánimo de lucro (no jodas ¿en serio?). Y aquí lo que hace caja es la música: toda la música es mía. Te jodes, eres un pendejo electrónico. Y si es que tienes, por ejemplo, un local (llámalo bar) en el que pones música, da igual que sea copyleft: pagas y punto. Te jodes, que tengo que reacomodar mi nueva mansión.

Y es que somos violentos, ojo. Ellos siempre tienen razón, y el apoyo del gobierno. Suele ocurrir en un país en el que votas al que menos te desagrada, y cuando necesitas votos no se te ocurre mejor idea que vender tu alma al artista. Te jodes, piratilla.

No existe término medio. Si descargas, mereces morir, o al menos que te desconecten… según el modelo Sarkozy. Otro pelota (¿he oído Carla Bruni o me lo ha parecido?) como pasa por aquí. Al menos un pelota que salvo excepciones como esta, suele hacer las cosas bien, y no está completamente vendido a un lobby de artistas que le promocionen.

Que yo sepa la (vieja y difunta) cinta de audio no produjo el armageddon de la cultura tal y como querían dar por entendido. Defina estúpido: para estúpido yo, y el doble.

Eso no quita que no tenga que pagar por respirar. No tal y como se dice, pero casi. ¿Usa CDs en su vida cotidiana? Quizás sí, quizás no. Pero no me digan que cada vez se usan menos. O si los usa, ¿para música?

Salvo excepción, la respuesta suele ser ‘no’. Si no es la mismisima radio o un reproductor de música portátil (llámalo iPod, MP4 o teléfono móvil). El eterno ejemplo, el del sistema operativo libre que hay que grabar en un CD. ¿Cuanto cuesta Ubuntu? ¿0 €? No, 17 céntimos. Y esto, probablemente vaya a pagar a los pobres curritos que se encarguen de los derroches de los autores. Los autores, en este caso, son unos magníficos expertos en trabajar remuneradamente sin hacer absolutamente nada.

No estoy delirando… hablo del canon digital de copia privada. Un impuesto revolucionario sobre los distintos soportes que puedan servir para… para violar… ¿los derechos de los autores?

Por suerte, en España está permitida la copia privada. De cierta forma, si me descargo para mi sólo cualquier película o canción de Internet, (por suerte) no pueden decir absolutamente nada. No quita que si la grabo en un DVD, pague a la SGAE mientras que me recuerda que soy un pendejo electrónico y que lo que hago está mal. He dicho.

Eso no quita que no tenga que pagar por respirar. No tal y como se dice, pero casi. ¿Usa CDs en su vida cotidiana? Quizás sí, quizás no. Pero no me digan que cada vez se usan menos. O si los usa, ¿para música?

Salvo excepción, la respuesta suele ser ‘no’. Si no es la mismisma radio o un reproductor de música portátil (llámalo iPod, MP4 o teléfono móvil). El eterno ejemplo, el del sistema operativo libre que hay que grabar en un CD. ¿Cuanto cuesta Ubuntu? ¿0 €? No, 17 céntimos. Y esto, probablemente vaya a pagar a los pobres curritos que se encarguen de los derroches de los autores. Los autores, en este caso, son unos magníficos expertos en trabajar remuneradamente sin hacer absolutamente nada.

No estoy delirando… hablo del canon digital de copia privada. Un impuesto revolucionario sobre los distintos soportes que puedan servir para… para violar… ¿los derechos de los autores?

Por suerte, en España está permitida la copia privada. De cierta forma, si me descargo para mi solito cualquier película o canción de Internet, (por suerte) no pueden decir absolutamente nada. No quita que si la grabo en un DVD, pague a la SGAE mientras que me recuerda que soy un pendejo electrónico y que lo que hago está mal. He dicho.

¿Dispone de un disco duro para copias de seguridad? Yo sí. Uso Time Machine, pefecto para lo que necesito. De los apenas 60 € que me costó este disco duro de 160 GB (hace ya cierto tiempo), 12 € de tasa fija fueron a parar a la SGAE, y ahora estarán en los bolsillos de cualquier autor o editor de música que probablemente odie profundamente.

Aunque por suerte… por suerte seguiremos pagando. Todo lo que sirva merece pagar: CD, DVD, impresora, disco duro… Da igual, pagas.

Volvamos al gigantesco grano. Por un lado, los viejos conocidos evangelizando a los críos. Por otro lado, la respuesta gradual. Y finalmente, la eterna repetición ¿Realmente funcionará la respuesta gradual?

Para las sociedades, todo lo que sea caja vale. Comprar en tienda, claro: son los que más se llevan. En cuanto a Internet, también: de manera indirecta, les terminas pagando en mayor o menor medida, aunque seas de los que sólo compra legal.

¿Realmente podemos amenazar con la desconexión? No. Ya lo comentó un ISP belga, Scarlet, que fue multado por no bloquear las descargas de contenidos “ilegales”. No se puede.

Por lo tanto, es la respuesta gradual una posiblidad? Tampoco. No mientras se siga protegiendo la intimidad de los usuarios, aplicando el principio de presunción de inocencia (no es el caso con el canon, para ellos la metáfora del cuchillo es distinta ¿no?) y el secreto de las comunicaciones. Y fuera de la imposibilidad técnica, esto no sería otra cosa que un acercamiento encubierto a la censura en la red. Bienvenido a 1984, por que por desgracia no es la primera vez que se les ha ocurrido.

Recorta los derechos, amenaza, manipula y serás rico. Para estúpido, yo.

Batallitas de Telefónica y OVH: Limitando el tráfico

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 web Europa. Dispone de peerings propios 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.

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).

OVH instaló hace poco su fibra y router en ESPANIX, desde Francia. Desde Paris hasta Madrid hay una latencia de 16ms, y tienen 2×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.

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.

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.

Larga vida a OVH, larga vida a los operadores alternativos y al libre tránsito de datos.

» Leer email envíado por OVH a sus clientes

Light Framework

Con Linkloo empecé un desarrollo de una “plataforma” sobre la cual desarrollar. Es necesario, puesto que es una aplicación muy grande y compleja, y la desorganización del código me llevó a reprogramarlo desde cero. Cuando re-hice Fileclick también le hice una “plataforma” y junto con Rubén en Jisko hicimos lo mismo – adaptado al proyecto, claro.

Esta estructura de la que hablo se basa sobre varios ejes de necesidades (al desarrollar):

  • URLs limpias, “tipo Rails”
  • MySQL sencillo y extendido
  • Templating sencillo: además se introduce al final del renderizado, en Jisko fue muy útil para establecer el titulo de la página desde cualquier parte del código.
  • Organización (por librerías, que puedan ser propias e importarlas al vuelo)

Obviamente hay más detalles, pero eso es lo básico y que toca desarrollar a cada nuevo proyecto (y la experiencia hace que cada vez sea algo más refinado).

He escrito un PDF (en un Inglés muy cutre, por cierto) en el cual resumo esto. Podéis descargarlo aquí.

El código está completamente desarrollado, queda escribir toda la documentación (y seguramente retocar algo).