Cuando no corres para tí

Según los planes que yo me había marcado al empezar el año, este fin de semana tendría que haber estado en Aranjuez ( Madrid ) para correr la Wings for Life. Pero el azar, el karma y el precio de los billetes a Madrid durante el puente de Mayo quisieron que no pudiera ser.

Por otro lado, está mi amigo Guillem. Lo nombro aquí porque él me ha dado permiso para hacerlo y porque se lo merece. El tio hace un año que le echó valentía a la vida y como me pasó a mi, pero por otras razones, empezó a salir a correr. Poco a poco, paso a paso ha ido superando etapas y haciendo mejoras pero le faltaba un empujón. Alguna vez en estos meses hemos hablado sobre running, que si a ver si algún día corremos, que si a ver cómo lo llevas …

Aquí quiero parar para decir que Guillem me enseñó muchas cosas sin las cuales dudo que yo fuese a día de hoy programador. El fue uno de mis maestros. Pero para mi es más que eso, es un amigo.

El caso es que hace unas semanas, chateando con él le tiré la piedra porque no se atrevía a dar el paso final. Apúntate a una carrera, popular, la que sea y yo correré contigo. No es que yo sea, ningún profesional, ni mucho menos, pero sí que he pasado ya por la experiencia de cumplir un reto, los meses de entrenamientos para conseguirlo, el sabor de llegar a meta y sobre todo el miedo a no lograrlo. Por eso quise ofrecerme a acompañarle para ayudarle a dar el salto.

Unos días después y tras darle mucho la tabarra con que no es importante el ritmo que suela llevar yo o el que pueda llevar él, me envió por chat una imagen que me llenó de ilusión. El cartel de una carrera en Es Pont d’Inca, 8km, se había apuntado. Así que, no tuve la menor duda de que iba a correr con él.

Y así fue, el sábado tuve el gustazo de correr como apoyo, asistencia o como quieras llamarlo de un amigo. Y la experiencia creo que fue de las más bonitas que voy a tener corriendo.  Desde que empecé con esto, siempre he admirado a los voluntarios de las carreras. Especialmente a los que son corredores, pero sacrifican esa carrera por estar repartiendo agua y comida, pendientes de si te pasa algo, marcándote el recorrido, dando ánimos…

El sábado yo me olvidé de mis ritmos, de mis entrenos, mi manera de correr, de si me gustaba o no el recorrido ni nada más. Mi trabajo fue estar paso tras paso al lado de mi amigo y asegurarme de que no desfalleciese con el calor, estuviese hidratado y mantuviese un ritmo adecuado. Ni rápido ni lento, simplemente adecuado a él y que le permitiese acabar el recorrido con alegría. Me encantó poder volcar lo mucho o poco que tu has ido aprendiendo en ayudar a otro, estar pendiente del ritmo pero no para ti. Observar el calor aun sabiendo que tú si vas bien hidratado. Llevar dos botellitas de agua, cuando si fuese para tí, igual habrías tirado hace dos kilometros incluso una sola. En definitva volcar tu carrera en otra persona.

Guillem le echó mucho coraje y lo logró, por supuesto. Me emcioné mucho al verle cruzar la meta. Lo curioso es que era él el que nos daba las gracias a mi y a otros dos amigos que iban con nosotros. Creo que no sabe cuanto aprendí yo con su tesón, con su actitud de decidirse a hacerlo, con su humildad de dejarse ayudar y aconsejar cada minuto de carrera.

Gracias Guillem por haber querido que el fin de semana que iba a correr la Wings for Life, en vez de eso haya podido ser parte de un día tan especial para alguien que se inicia en esto de correr.

 

 

Imágen destacada: Creative Commons por Peter Mooney.

¿Y si ya no soy de ninguna parte?

Hoy hace exáctamente diez años que llegué a esta isla. Una década entera en Mallorca y sobre todo lejos de Madrid. Yo que siempre fuí muy madrileño y que jamás me imaginaba viviendo lejos de allí, me agobio ahora un poco cuando voy a Gran Vía en navidades y me costaría no ver nunca el mar aunque sea corriendo por el paseo. Siempre pensé que moriría sin el ritmo de Madrid y ahora no podría estar sin la calma de la isla.

Un día como hoy, en 2005 llegué con mi coche en el ferry después de conducir hasta Valencia y venía sólo para unos meses trabajando en un rodaje.

Ahora mis amigos de aquí dicen que soy muy madrileño y los de allí que parezco muy mallorquín. Una vez alguien me dijo también que uno es de donde son sus hijos.

De lo que traje aquí me queda menos acento castizo, he cambiado de profesión, el coche que traía murió el año pasado y he perdido relación con muchos amigos de antes. Mi padres ya no viven en el barrio donde crecí y yo que fumaba más de un paquete al día, hace ya como siete años que lo dejé.

De lo que no tenía, van ya casi también diez años de pareja y dos hijos que son mi mayor ilusión. Ahora hablo catalán, aunque reconozco que escrbiéndolo soy un desastre y me he dejado contagiar un poco por el espíritu tranquilo y la manera de hacer las cosas que no siempre tienen por qué ser a lo grande.

Pero ya no me siento del todo de un sitio ni del otro y la verdad es que estoy aprendiendo a que esa idea no me incomode. No sé si es bueno o malo, quizá es solo parte de algún proceso. No sé si es solo una mezcla entre que sigo siendo muy urbanita, pero bastante más mediterraneo.

Después de todo. ¿Es importante?. Es decir, tengo raices, está claro. Y recuerdos y también contexto actual. ¿Pero en realidad, para qué sentirse especialmente de un lugar o de otro?. Cada vez más, creo que me siento simplemente parte de mi grupo, mi familia, mi tribu, mi comunidad … llámalo como quieras. Y eso si que me lo llevo esté donde esté. Y esté donde esté toda esa gente, no necesito que sea en un sitio determinado así que ¿y si no soy ya de ningún sitio?. ¿Y si soy de cualquier sitio donde hay gente que me tiene presente?.

Ser normal está sobrevalorado

Definitivamente se le da demasiada importancia a eso que llaman “ser normal“.

Entiendo la necesidad que tenemos de etiquetar las cosas y las personas para entender el mundo. Sin duda clasificar ayuda a asimilar.

Lo que no me gusta tanto es ver que muchas veces, esas etiquetas se convierten en algo que va mucho más allá de una mera herramienta para hacernos el aprendizaje y la explicación más facil.

Si tienes barba eres “hipster”o “taliban”, si no te crees todo lo que te cuentan, “conspiranoico”, los que viven en comunidades son “hippies” y quien haga y transmita las cosas con pasión, que se prepare para ser “un flipado”.

Las personas no se crean en moldes y cuando olvidas que por esa razón no van a encajar en las imágenes predefinidas que tu te hayas creado las estas en cierto modo “deshumanizando”. Todos estamos llenos de matices, el mundo no funciona en términos de blanco y negro, pero parece que es algo que a la gente le cuesta entender. Pero ¿por qué?.

El problema

El problema de pensar y actuar así es que sometes con tus comentarios, preguntas burlonas o simple presión social a un continuo bombardeo a cualquier persona que no encaje en los moldes que el grueso de la sociedad tiene preparados.

¿De verdad es necesario que un vegano se tenga que estar justificando continuamente?. ¿Es lógico que siempre tengamos que explicar por qué decidimos usar software libre?. Y si, incluso aceptando que no podemos usar “****” software. ¿Es comprensible que una persona que tiene ideas políticas que no están entre lo que todo el mundo piensa tenga se le cuestione continuamente? O ¿por qué hacer siempre chiste o crítica de quien va muy tatuado o lleva ropa que evidentemente no procede de donde casi todo el mundo la compra?.

Sinceramente, no sé si la gente se da cuenta pero es algo que se sufre desde niños. Si levantas un poco la cabeza por encima del pelotón, llueven las collejas.

¿Qué es ser normal?

Pues es dificl de decir, pero para poder entrar en el contexto de lo que explico aquí, parece que para la gente, normal podría ser sinónimo de varias cosas en realidad.

Previsible. Si eres previsible en todo momento, eres normal, porque no te vas a salir de lo marcado, no actuas fuera del comportamiento que se considera siempre “adecuado” ni vas a tratar de hacer cosas que puede que a algunos no les encajen.

Homogéneo. Con pocos matices, todo dentro de un orden vamos. Sin sorpresas entre cómo vistes, como piensas políticamente, como actuas y la música que escuchas.

Ordenado. Nunca te dejes llevar por el caos, la espontaneidad ni por absolutamente nada que no se ajuste a los cánones previamente aprovados como válidos por la sociedad, el estado, los medios y ¿cómo no?, la tendencia actual.

De provecho. Si quieres una persona normal, no se ocurra tratar de sacar adelante ideas que otros deshechan porque “nunca triunfarán” o porque “a nadie le va a gustar” o nadie lo va a usar. Por mucho que creas que eso podría cambiar las cosas.

Académico. Las cosas se hacen como se tienen que hacer y está todo inventado. No intentes, si pretendes vivir en la normalidad, métodos nuevos ni hacer las cosas por razones diferentes a aquellas por las que todo el mundo las hace.

Conformista y práctico. Esto es muy importante. Quizá lo más. Es muy importante que para ser normal entiendas que “esto es lo que hay” y “y que así son las cosas”. Incluso si resulta que son completamente distintas a cómo eran ayer. No se te ocurra perder tu tiempo en tratar de aprender cosas que no vayas a utilizar en tu trabajo, no serviría para nada y te haría dejar de ser normal. Por favor, no se te pase por la cabeza actuar nunca movido solo por principios o ideales.

¿Y qué hacemos?

Pues mira, si llegados a este punto piensas que la normalidad te gusta, felicidades, pasarás por la vida sin problemas. Nadie te va a cuestionar y encajarás a la perfección casi en todas partes.

Si por el contrario, no puedes evitar no encajar en los moldes de todo el mundo o simplemente no quieres, la solución es compleja pero liberadora. Se trata básicamente de renunciar a encajar. No eres una pieza y nadie te va a poder meter en un molde. Simpre te saldrás de todos por una cosa o la otra. Por eso es mejor, directamente, renunciar a ello y dedicarse simple y llánamente a vivir.

¿Te van a cuestionar?. Si, muchas veces. Y no solo eso, vas a aguantar cachondeos a veces, incomprensión otras, preguntas raras, miradas más aún o simplemente indiferencia. Pero vas a poder vivir la vida con pasión, haciendo que cada instante de tu vida sea tuyo. Tuyo y por tanto de quien tú quieras.

Si aceptas que no eres “normal” e incluso que no quieres serlo, construirás gran parte de tu propio contexto, podrás elegir qué aprender y qué quieres hacer con ello. Podrás meter la pata muchas veces, pero con la liberación de saber que podrás algún dia poner en práctica lo aprendido. Y si, también vas a sufrir, pero eso es parte de la vida y al menos de esta manera, estarás viviendo la tuya.

 

 

Imágen destacada: Creative Commons Josh Haroldson

Avatares. Dando cariño al plugin de WordPress GNU Social

El viernes hablé de cómo he incorporado al blog el sistema de comentarios distibuido de WordPress GNU Social con el plugin creado por Manuel de Las indias.

Vengo siguiendo el proyecto desde que se anunció la idea y conversando con Manuel y David acerca de ideas sobre cómo gestionar algunas cosas en el plugin. Esta semana, mientras hacía pruebas antes de incorporarlo al blog, le comenté a Manuel que tenía una idea sobre cómo mejorar la gestión de avatares que se estaba haciendo. Manuel, como buen hacker que es, contestó que le parecía bien, pero me tiró la caña para ver si yo me animaba a hacerlo. Yo dije que sí y la verdad es que ha sido muy divertido.

Nunca había trabajado en el desarrollo de un plugin para WordPress. Sí que había desarrollado temas personalidados pero nunca una linea de código para un plugin y este además presentaba algunos retos como la interacción con el API de GNU  Social o la necesidad de mantener compatibilidad con las primeras versiones del plugin e instalaciones ya existenes.

El escenario previo

Manuel tuvo una gran idea sobre cómo tener almacenada la imagen a mostrar de cada usuario. Hasta ahora en el campo de email del autor del comentario, se almacenaba la url que GNU Social da como avatar a mostrar para ese usuario.

Es una solución ingeniosa, la verdad, pero presentaba varios problemas que los indianos ya habían detectado. A veces cuatro ojos ven más que dos y es parte de la magia del Software Libre así que cuando cuando se me ocurrió cómo solucionar este tema nos pusimos manos a la obra y durante la tarde / noche del sábado hice las modificaciones.

¿Por qué el cambio?

Almacenar una url concreta era depender de que esa imagen esté siempre ahí, lo que puede no ser así por multiples razones.

La primera y más sencilla es simplemente que el nodo al que referencia no nos la pueda entregar. Bien porque el nodo está caído, la imagen ya no esté almacenada, el nodo se haya desmantelado, errores en la red, etc. Eso nos podría dejar con un montón de enlaces con respuestas 404.

La segunda es que, aunque la imagen esté disponible para siempre, el usuario queda atadao, para esos comentarios, a la imagen de avatar que seleccionó en ese momento y eso si bien no es realmente un problema, no es lo más deseable.

Es sobre estos detalles que nace la idea del cambio.

Almacenado usuarios en vez archivos

El primer cambio a realizar es cambiar el almacenamiento de urls concretas de imagenes por el usuario que ha realizado el comentario. Por suerte para nosotros además, la manera en que se referencia a un usuario en GNU Social tiene el formato usuario@nodognusocial.com,   que tiene un formato igual al de un email y esto nos facilita mucho la tarea. De esta manera, almacenando esto en el campo del email, en la fase de pintado de los comentarios, podemos separar ese formato y tenemos disponibles el “nombre” de usuario y el node donde ese usuario está registrado.

Rescatando imágenes

Si no tenemos ni queremos tener almacenadas esas urls de las imágenes de los usuarios, tenemos que solicitarlas en tiempo de mostrar la página al nodo del usuario correspondiente. Para ello atacamos al nodo, solicitando en cada petición la imagen que ese usuario tiene en el momento actual como avatar por defecto. Es algo similar a lo que WordPress hace cuando rescata los avatares de sistemas como Gravatar.

Técnicamente, como tenemos que hacer peticiones a otros servidores desde dentro del plugin, utilizamos funciones de WordPress como wp_remote_request para evitar usar otras soluciones como cURL y mantener todo más integrado en WP y utilizando las herramientas que nos proporciona. Todas las instalaciones de GNU Social tienen un API de tipo REST a la que se pueden hacer consultas y algunas de ellas, como la que nosotros hacemos solo traen datos públicos, por lo que se pueden hacer sin necesidad de usuario y contraseña.

Con esa respuesta, obtenemos en tiempo de pintado la url de la imagen a mostrar para cada usuario.

Me encontré con el asunto de que por supuesto, cada usuario puede y suele tener más de un comentario en cada post y no queremos que esta solicitud al nodo se haga más de una vez para cada página. Es innecesario, retrasaría el tiempo de respuesta de la página y multiplicaría las solicitudes a cada nodo. No es algo brutal que ni que supondría segundos, pero en web, se trata de reducir todo este tipo de ineficiencias para reducir los tiempos del usuario al máximo.

Para solucionar esto, para cada usuario que vamos a mostrar, consultamos si antes hemos guardado ese valor de url en la caché de WordPress a través de wp_cache_get, parte de una colección de funciones que WP nos dá para optimizar petciciones trabajando con caché. De esta manera, si ya tenemos el dato, saltamos la petición y procedemos al pintado. Si no, hacemos la petición al nodo y cuando responde, guardamos en caché con wp_cache_set y seguimos. Si el usuario se vuelve a repetir en la misma página, ya lo tendríamos y no necesitamos solicitar de nuevo, volveríamos al primer caso explicado.

Retrocompatibilidad

Para mí una de las cosas más bonitas de lo que hemos logrado al hacer el cambio en el plugin es no romper la compatibilidad con todos los comentarios que se han creado con la primera versión del plugin.

Como mínimo en Las indias ya llevan unos cuantos posts con el sistema y no queríamos dejar esos comentarios con imagenes erroneas, ni siquiera con las antiguas, parte del reto era hacerlos igual de compatibles. Por no hablar de otros blog, incluso algunos que quizá ni sabemos si ya lo tienen instalado. Será transparente para el usuario y el autor del blog si se usó originalmente un sistema o el otro.

En caso de usuarios del sistema original, en lugar de tomar el nick del usuario, sacamos la id de usuario y la url de su nodo del campo comment_author_url y hacemos las mismas peticiones que he explicado antes solo que basado en la id. Caché incluida.

Gestión de errores

En cualquier software pueden pasar cosas. En el nuestro, concretamente pueden pasar varias cosas.  Que el nodo o el usuario ya no existan o estén temporalemte fuera de linea, que existan pero falle el API o que algún dato que hubiese en el nombre de usuario haya sido modificado o mal guardado por la razón que sea en base de datos.

Pero lo bueno es que en ese caso, si cualquiera de esas situaciones se diese, tenemos al autor del blog cubierto. La gestión de errores para el sistema de avatares, en caso de fallo al obtener las imágenes del nodo, tampoco te dejaría con la página llena de errores 404. En lugar de la foto del usuario, mostramos una imagen por defecto. Pero no cualquiera, sino la que el usuario haya decidido configurar como avatar por defecto en los comentarios de su blog.

Siguientes pasos

Según dice Manuel, y estoy de acuerdo, parece que estamos listos para una versión 1.0 del plugin. Así que creo que lo siguiente, aunque él podrá hablar mejor de esto, será hacer los preparativos para incorporar el plugin al directorio de WordPress y quizá otras acciones para darlo a conocer.

Como dicen en Las indias, empiezan a alcanzar velocidad de crucero en el desarrolo con GNU Social y me alegro mucho de que estos pequeños cambios puedan abrir la puerta un poco más para ese futuro.

El regreso a WordPress

Esta semana escribí sobre el nuevo sistema de comentarios distribuidos que he incorporado al blog y ya comentaba que se trata de un plugin para WordPress, así que en realidad no es sorpresa que he vuelto a migrar el blog, pero me apetecía comentar un poco las razones de la decisión. Técnicas y de usuabilidad como autor.

En febrero anunciaba que había cambiado de dominio y había aprovechado el cambio para migrar a otro software de publicación, Ghost. Tengo que decir que  funciona muy bien y me gusta, no es cuestión de eso. En mi caso lo tenía auto alojado y la instalación es facil, funciona rápido y no me ha dado ni un solo problema. Pero para las cosas que quiero hacer de aquí a un tiempo se me quedaba corto.

El tiempo que lleva Ghost en desarrollo es relativamente poco, y si bien está perfectamente maduro para poder publicar, en mi opinión, si pretendes hacerlo con cierta asiduidad, aún le faltan cosas para que sea, digamos, cómodo de usar. Inisito, no es ni mucho menos una queja, es un producto fantástico y lleva muy buen camino.

Panel de control

Panel de control GhostEl famoso panel de control de Ghost que quizá hayas visto en el video de presentación del proyecto, a dia de hoy no existe. Está en desarrollo según la hoja de ruta del proyecto, pero lo que hay ahora dista mucho de ser tan completo. En realidad lo que tenemos es poco más que un listado de posts publicados y en borrador, desde el que puedes acceder a la creación, edición o la configuración del blog.

No existe una búsqueda de artículos, lo que en mi caso, aunque no es un blog con un contenido enorme, ya empieza a volverse incómodo cuando tratas de referenciar artículos para dar cierto contexto.

Gestión de multimedia

Sencillamente no existe. No hay nada implementado aún para navegar entre archivos subidos,  borrar imágenes y demás. Esto si que llega a ser un inconveniente enseguida, porque no puedes ver lo que ya has utilizado en otros artículos y no existe nada parecido a una biblioteca.

Si subes un archivo dos veces, lo subes dos veces.

Referencias internas

Como comenté antes, no hay manera de hacer una búsqueda entre tus contenidos para referencias a unos archivos desde otros. No necesariamente algo tan completo como lo que ofrece WordPress al crear un enlace, es que no hay nada aún.

Por razones similares, tampoco existe aún un api para poder crear en las plantillas una caja de búsqueda. Esto creo que es muy incómodo para los lectores. Existen soluciones a través de scripts que bucean en el RSS del blog, es un buen hack y muy buena idea para atacar el problema, pero no es muy … eficiente.

Programación de publicaciones

Parece que también está en la hoja de ruta pero a dia de hoy … nada de nada. Puedes tener los post en estado de borrados, evidentemente, pero no programar una fecha de publicación. En mi caso, que suelo escribir por la noche que es cuando tengo algo de tiempo, o lo dejaba publicado a las tantas o tenía que estar pendiente de publicar por la mañana. No es un problema enorme, pero es algo a lo que estamos acostumbrados.

Plugins

Por ahora no exite un API en Ghost para que los desarrolladores puedan crear plugins que amplien las funcionalidades del software. Así que básicamente lo que hay creado (y hay bastantes cosas) son scripts que hacen algunos hacks para poder llevar a cabo lo que se quiere en el la plantilla.

Esto es lo único, en mi opinión, que sí considero un error por parte de los creadores. Por lo que he podido ver, existe una buena cantidad de desarrolladores con ganas de crear para Ghost. Quizá si se priorizase este API, antes incluso que algunas cuestiones de core del sistema, el estado y el ecosistema podrían crecer bastante.

i18n

No exitste absolutamente ninguna manera de tener las plantillas con cadenas por idioma, contenido multi lenguaje, el panel de control en tu idioma ni nada que tenga que ver con internacionalización. Tengo cero problemas con manejarme con un software en inglés, pero es algo que no me gusta. Quiero al menos la posibilidad.

Sistema de comentarios

En Ghost no existe sistema de comentarios. Esto no es algo que falta por hacer. El proyecto parece tener claro que no lo quieren y no lo pondrán. No sé en realidad si es tanto por simplificación (lo dudo) y para hacerles a ellos más sencilla su oferta del software como servicio.

No es sorpresa, lo sabía cuando lo instalé, de hecho nada es sorpresa porque primero probé todo unos días en local. No me acababa de gustar la idea de usar un sistema centralizado y privado como Disqus, pero con el tiempo la idea me ha ido “escamando” cada vez más hasta el punto de ser uno de los motivos principales para el cambio.

¿Lo recomendaría?

Pues aunque pueda parece que he acabado muy descontento por lo que comento en los puntos anteriores, si.

Para alguien que busque una solución realmente sencilla y que no le guste estar cacharreando con el blog, probando cosas nuevas o incorporando distintos tipos de contenido, de verdad que Ghost funciona super bien. Es fácil de usar, es rápido, tiene un API de desarrollo de plantillas en JS muy bien documentado.

Pero en mi caso, como digo, echaba de menos poder hacer todas las cosas que comento, así que, unido a algunas cosas que me apetecía apoyar, como las integraciones con GNU Social, la decisión estaba clara. Volver a WordPress.

 

 

Imagen destacada: Creative Commons por Alexande Gounder