Heartbleed

Bastante hardcore lo de Heartbleed. En Genbeta he explicado en qué consiste: a grandes rasgos, es una puerta abierta a la memoria del proceso del servidor. Claves privadas, contraseñas, datos confidenciales… una fiesta.

Mirando más en detalle el código, es un fallo bastante estúpido. La función coge un valor que recibe en un paquete y no verifica que es correcto. Me parece increíble que alguien que esté programando en C una librería de seguridad no tenga grabado a fuego en la mano y en mayúsculas VERIFICA TODOS LOS DATOS. No me entra en la cabeza cómo alguien puede escribir un memcpy usando una longitud que no está comprobada sin que le salten todas las alarmas. Yo no llevo mucho programando C, pero siempre me saltan las alertas cada vez que hay un mínimo riesgo de sobrepasar el buffer (strcmp, memcpy, por ejemplo). Se pueden escapar fallos, sí, pero este es demasiado grave. Y no soy el único que lo digo.

Otra cosa que me ha llamado mucho la curiosidad, ya fuera del plano técnico, es la cobertura que han hecho los medios, especialmente en la cifra de sitios web afectados. 66%, dos tercios de la web. ¿De dónde sale esta cifra?

Most notable software using OpenSSL are the open source web servers like Apache and nginx. The combined market share of just those two out of the active sites on the Internet was over 66% according to Netcraft’s April 2014 Web Server Survey. – Heartbleed.com

De ahí sale. Alguien lo vio y se puso en marcha la máquina de gente que repite sin mirar y sin preocuparse. ¿No se extrañan de una cifra tan alta? ¿No se preguntan cómo es posible que haya tantos servidores vulnerables si es un fallo que afecta a HTTPS (entre otros) cuando hay tan relativamente pocos servidores usando HTTPS?

El 66% se refiere a los servidores usando Apache o nginx, que usan por defecto (creo) OpenSSL. Pero eso no quiere decir que todos ellos tengan HTTPS activado. Con saber un mínimo sobre el tema y preocuparse por lo que escribes, rápidamente veías que esa estadística estaba mal. Así luego nos tienen enfilados a los bloggers de tecnología.

Cifrado de correo electrónico, misión imposible

Hoy publico en Genbeta una entrega del especial Cómo cifrarlo todo dedicada al correo electrónico. Creo que ha sido uno de los artículos más frustrantes que he escrito, y es que el tema del cifrado de correo es absolutamente terrible. Crear una clave es de lo más oscuro que te puedas encontrar: si no funciona a la primera, suerte encontrando el por qué. La usabilidad de los clientes en este aspecto es pésima. En Outlook 2013 tardé 15 minutos en encontrar cómo añadir mi clave de cifrado. Thunderbird directamente se colgaba cada poco tiempo y tenía que reiniciarlo. Los errores son crípticos (“error desconocido al verificar la identidad”, wtf), la documentación es escasa… terrible.

Como digo al final del artículo, este es uno de los mejores ejemplos de más seguridad implica menos comodidad. Me parece bastante increíble que veinte años después de su creación cifrar el correo electrónico sea tan caótico, que no haya ninguna solución asequible para el usuario medio como sí la hay con HTTPS o con el cifrado de archivos. Es realmente muy curioso que una de las herramientas de comunicación más usadas sea al mismo tiempo de las más inseguras.

WordPress y ‘connection reset’ en RedCoruna

Pequeño apunte rápido, que hoy he estado peleándome con WordPress y Firefox. Resulta que a raíz de un ataque de spam masivo a WordPress, los de RedCoruna pusieron una protección en su hosting que resetea las conexiones si el navegador sólo acepta páginas en inglés. En mi caso, que tengo todo el Mac en inglés, no me dejaba acceder a WordPress a través de Firefox.

La solución es sencilla: En Preferencias -> Contenido -> Idiomas, añadir “español” (el orden no importa) y recargar.

Do what you love

Estos últimos días, he visto aparecer por las redes un artículo curioso, de Miya Tokumitsu en Slate: Stop saying “do what you love, love what you do.” It devalues actual work. Comparte reflexiones interesantes, pero creo que yerra completamente en las conclusiones y en la visión general del asunto.

Do what you love (haz lo que amas, ama lo que haces) es un mantra que cada vez está más presente: dedícate a lo que más te guste. El mejor trabajo es aquel que te gusta hacer. Personalmente, estoy muy de acuerdo con esta filosofía: me encanta mi trabajo y me encanta mi campo de estudio. Creo que es mejor perseguir lo que te gusta a conformarte y hacer algo que no te gusta. A largo plazo probablemente repercuta en un mejor nivel económico y, lo más importante, en lo agusto que estés contigo mismo.

El artículo de Slate trata de refutar estas ideas, pero empieza mal. Comparte un ejemplo, el de Steve Jobs y esta cita:

You’ve got to find what you love. And that is as true for your work as it is for your lovers. Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do.

Jobs, es por supuesto, uno de los epítomes de esta filosofía. Tokumitsu confunde una crítica al propio Jobs con una crítica al mantra:  [...] by portraying Apple as a labor of his individual love, Jobs elided the labor of untold thousands in Apple’s factories. No es incompatible hacer lo que amas con reconocer a los que te ayudan a realizar tu trabajo. 

Y es que el artículo parte de una idea preconcebida que, en mi opinión, es errónea. Esta idea es que sólo se pueden amar trabajos de “alto nivel”, con prestigio social, con grandes sueldos, “glamurosos”… En un momento del artículo dice lo siguiente: Elevating certain types of professions to something worthy of love necessarily denigrates the labor of those who do unglamorous work that keeps society functioning, especially the crucial work of caregivers. Me sorprende muchísimo que diga que el trabajo de cuidar de personas que lo necesitan no pueda ser un trabajo que ames.

Hay otros dos párrafos que me chirrían mucho:

His [Steve Jobs'] food harvested from fields, then transported across great distances. His company’s goods assembled, packaged, shipped. Apple advertisements scripted, cast, filmed. Lawsuits processed. Office wastebaskets emptied and ink cartridges filled. Job creation goes both ways. Yet with the vast majority of workers effectively invisible to elites busy in their lovable occupations, how can it be surprising that the heavy strains faced by today’s workers—abysmal wages, massive child care costs, etc.—barely register as political issues even among the liberal faction of the ruling class?

In ignoring most work and reclassifying the rest as love, DWYL may be the most elegant anti-worker ideology around. Why should workers assemble and assert their class interests if there’s no such thing as work?

Mezcla cosas sin relación y acaba concluyendo que hacer lo que amas lleva a problemas laborales. Por el camino, plantea implícitamente que ni un granjero, ni un actor, ni un guionista, ni un trabajador de oficina pueden amar su trabajo.

Tokumitsu sigue por esa línea de vincular el hacer lo que amas y problemas laborales y llega al asunto de los “becarios gratis”, gente que trabaja sin cobrar porque les gusta lo que hacen. Para mí es otro problema sin relación: puedes amar tu trabajo y aun así no dejarte abusar. Es cierto que hay empleadores que engañan y tratan de convencerte para trabajar gratis con la excusa de “así trabajarás en lo que te gusta”. Sin embargo, no creo que ese mal uso por parte de explotadores implique que la filosofía sea dañina.

El final es de nuevo una conclusión errónea, al menos para mí:

Do what you love and you’ll never work a day in your life! Before succumbing to the intoxicating warmth of that promise, it’s critical to ask, “Who, exactly, benefits from making work feel like nonwork?” “Why should workers feel as if they aren’t working when they are?” In masking the very exploitative mechanisms of labor that it fuels, DWYL is, in fact, the most perfect ideological tool of capitalism. If we acknowledged all of our work as work, we could set appropriate limits for it, demanding fair compensation and humane schedules that allow for family and leisure time.

Puedes amar lo que haces y aun así tener claro que no todo es trabajo. Es cierto que es fácil confundirse y convertir toda tu vida en tu trabajo, pero no creo que sea un problema específicamente creado por amar tu trabajo.

La idea central del artículo se basa en contraponer trabajar en lo que te gusta con valorar tu trabajo y el de los demás como tal. No creo que sean cosas incompatibles, al contrario, y por eso no estoy para nada de acuerdo con esa conclusión que saca Tokumitsu.

Sin embargo, sí hay varias ideas muy interesantes, como decía al principio:

“Do what you love” disguises the fact that being able to choose a career primarily for personal reward is a privilege, a sign of socioeconomic class.

[...] If we believe that working as a Silicon Valley entrepreneur or a museum publicist or a think-tank acolyte is essential to being true to ourselves, what do we believe about the inner lives and hopes of those who clean hotel rooms and stock shelves at big-box stores? The answer is: nothing.

Aquí tiene razón, pero hasta cierto punto. Es obvio que si apenas tienes para comer, dedicarte a lo que más te gusta se hace difícil. Por otra parte, uno se puede plantear esos trabajos como un medio para llegar al trabajo que te gusta. Tampoco creo que buscar hacer lo que amas implique prejuzgar a la gente por el trabajo que tiene.

Resumiendo: creo que el artículo merece la lectura para plantearse críticamente una filosofía muy extendida, pero creo que las conclusiones a las que llega no son acertadas.

Enseñar a programar – Medium

Quería probar Medium desde hace un tiempo, y he aprovechado para divagar un poco sobre un tema que me interesa bastante: la idea, cada vez más extendida, de enseñar a programar a los niños en las escuelas.

Sobre Medium, me ha gustado pero no me acaba de convencer como plataforma. Tiene cosas muy interesantes, principalmente en el tema de diseño y uso de las imágenes (a veces demasiado excesivo para mi gusto, pero muy chulo en general). A cambio, no me gusta el no poder personalizar nada el formato, ni tampoco esa sensación de que escribes para Medium, no en Medium. Por así decirlo, es como escribir en una revista porque te apetece, no tienes la sensación de tener un espacio propio. En este sentido prefiero seguir con mi WordPress, que funciona bien y no anda mal de diseño. Además, con la última versión el editor minimalista está genial, así que no tengo mucho que echar de menos.

Pequeñas maravillas: Migrant

El otro día, buscando serializadores eficientes para Ocell, me encontré con esta pequeña maravilla del código: Migrant. Lo que más me llamó la atención no es lo que más publicitan en su repositorio (el soporte de serialización de grafos complejos de objetos), sino su serializador generado.

Para serializar datos (guardar un objeto de  memoria a un archivo), lo más rápido es la serialización binaria. Es, por así decirlo, como volcar los bits de memoria al archivo tal y como están. Ahora bien, hay un problema: ¿qué pasa cuando queremos guardar objetos diferentes? Hay que guardar en el archivo información de qué tipo de objeto es y qué campos tiene. El deserializador tiene que encargarse de leer esos datos y generar el objeto en memoria, normalmente usando Reflection, un proceso bastante lento. La principal ventaja es que no es necesario escribir un (de)serializador para cada tipo de objeto que vayamos a guardar. A cambio perdemos en velocidad.

Migrant coge un enfoque mixto. Al serializar un objeto, lo que hace es generar un serializador binario específico para esa clase, usando System.Reflection.Emit. Por así decirlo, programa automáticamente el serializador, lo carga como si fuese una clase que hayas escrito normalmente y es lo que usa para serializar. Los resultados son bestiales: es rapidísimo en cuanto vayamos a serializar colecciones grandes.

Es una verdadera lástima que no pueda usar System.Reflection.Emit en Windows Phone, porque Migrant me vendría genial.  Es muy, muy original y además extremadamente fácil de usar. Merece la pena no perderle de vista.

Galaxy Round, ¿un teléfono sólo para vender otros?

Estoy intentando buscarle el sentido a esto.

¿Ergonomía? Javier Penalva lo comentaba ayer en Twitter, pero eso sólo justificaría la curvatura de la parte trasera. Dejando la pantalla recta probablemente habrían logrado poner más batería, una de las cosas que más piden los usuarios.

¿Nuevas interacciones? Pues de momento sólo han mostrado que cuando inclinas el teléfono se muestren las notificaciones o se cambie de canción. Pero me resulta extraño: cuando más uso le damos al teléfono no es encima de una mesa así que esto no se usaría mucho. Quizás lo de las notificaciones sea lo más interesante, pero aun así no sé qué ofrece sobre pulsar un botón o pasar la mano por encima de la pantalla. Además, viendo cómo le funcionaron a Samsung cosas como el scroll con la inclinación, no me fiaría de que esto vaya a funcionar perfectamente sin causar problemas.

Continue reading

Overkill

Andaba yo leyendo reviews del Galaxy Gear vía Javipas y me he encontrado con una perla en Gizmodo.

There’s so much lag (likely due to the lowly 800MHz processor and half a gig of RAM), that you often don’t know if it didn’t read your touch or if it’s just hesitating.

Aunque yo cuando lo probé durante unos minutos no noté lag (y de hecho el resto de reseñas tampoco tratan especialmente este aspecto), me ha hecho pensar en algo más bien relacionado con el desarrollo y programación, algo que más de un profesor de mi universidad ha dicho en alguna clase. Continue reading

Tweetsharp for the Portable Class Library

Tweetsharp is a .NET library to connect with Twitter. Complete, easy to use, but with a little problem: it’s platform-depending. That means you can’t use it on PCL projects. For me, it was a big problem: Ocell depends heavily on Tweetsharp. I wanted to refactor the code, moving the ViewModels to a PCL project (it’s easier for testing, it would simplify the creation of a Windows Store app too) but I couldn’t do that with Tweetsharp being platform-dependent. So, open-source to the rescue, I forked it and migrated it.

Continue reading