Sobre Smartphones, Facebook y la falta de atención

“Todos los problemas de la humanidad proceden de la incapacidad del hombre para permanecer sentado, en silencio, a solas en una habitación.”

– Blaise Pascal.

Escribo estas líneas en un Starbucks. Delante mío puedo ver a personas sentadas, en silencio, con sus rostros iluminados por una pantalla. Un hombre de más o menos mi edad con un iPhone. Una señora entre 40 y 50 años conversando a través de un Android. Un jovencito con gafas pulsando botones en un Nintendo 3DS. Los observo sin que ellos se den cuenta, agachados y distraídos de lo que sucede a su alrededor. Entonces sigo tecleando, irónicamente, con mi rostro iluminado por una pantalla aún más grande.

Read More

De blogs, el pasado y cambios

Acabo de terminar de leer todo mi blog, de principio a fin. ¡Cómo he cambiado! Hay varios posts que me dan vergüenza, jaja, era demasiado irreverente.

Y no solo yo, muchas cosas han cambiado. La persona común no tenía ni celular ni mucho menos acceso a internet. En esas épocas había que convencer a las empresas que necesitaban una página web, diciéndoles que es el futuro, y pocos apostaban. Hoy todos tienen al menos una amiga vendiendo ropa por Facebook.

Los blogs estaban en un proceso de maduración. Recién los feeds RSS se estaban estableciendo, junto con los Trackbacks. El concepto del tumblelog fue absorvido por los motores de blogs, haciendo el feature característico de Tumblr irrelevante.

Oliver y yo blogueábamos en nuestra burbuja, ignorantes que había toda una galaxia de blogs peruanos. Eramos pioneros sin saberlo.

Lo que me sorprende es la cercanía que teníamos entre bloggers, bastaba hacer una pregunta a alguien en mi blog y él o ella respondía en su propio blog o en un comentario. Nos leíamos unos a otros, facilitado por los Planets.

Me hace gracia leer cuando abrí mi cuenta en el muy nuevo Twitter, quien junto a Facebook eclipsaron los blogs, centralizaron la información y nos convirtieron en productos. Anhelo ver el día que Facebook caiga tan rápido como subió y recuperemos el control de nuestra información y privacidad.

No recordaba para nada que había escrito en mi blog cuando empecé a leer Dune de Frank Herbert. Ahora ya sé que fue Savre quien me convenció de leer el libro; hasta entonces sólo conocía algo de Dune por los juegos de Cryo y Westwood para PC y la película de David Lynch (y estoy cruzando los dedos para que el próximo remake tan bien como Blade Runner 2048).

Me he inspirado a mí mismo (jaja) y estaré retomando prácticas de antes como publicar fotos casualmente o escribir posts super breves.

Me sorprende que muchas veces he dicho que debo escribir más en mi blog. Está claro que siempre he estado descontento con mi output y siempre el pasado me ha parecido mejor.

Sin querer soy dueño de una reliquia de internet, pues vengo escribiendo en mi blog desde el 2001. Muchos websites y blogs ya no existen, hay links rotos por doquier. Algunos se han mudado o cambiado sus permalinks y algunos pocos aún siguen de pie.

Espero que los blogs resurgan, sin importar si es con otro nombre. Aquí en mi rincón de internet, yo haré mi parte.

A word count exercise

I stumbled upon a novelist’s blog, Chris Orcutt, and found an interesting proposition:

Book-writing is as much an endeavor of numbers as it is one of words. The consistent, daily production of a minimum number of words is the key to getting books written. For novices this minimum word count should be higher, not lower, because writing is one of those few enterprises that, paradoxically, gets tougher as you go on.

How hard is to write, say, 250 words? I’m finding it out. And I guess I cheated when I pasted that quote. Feel free to substract 59 words from my total if you feel so inclined.

I’ve just recalled WordPress’ editor has a word count a click away. The classic editor had it on the bottom. I was baffled when a reviewer complained the Alphasmart 3000’s lack of a word count feature. I’m now discovering why. It’s an adequate measure of progress. Not that your goal is to spew out as many words as possible with fillers and padding, but that you know your writing quota for the day is done.

How can I apply this to drawing? Maybe draw a number of pages per day, or fill all the blank space in a page, or a number of anatomy studies?

I’m reminded again of the defining feature of the OKRs, the measurement. You can’t improve what you don’t measure. It’s about making a goal quantifiable and binary (“Did I reach 250 words? Yes or no?”).

Woo, 250 words. This is hard.

Dos anuncios importantes

Primero, como ya adivinan, he decidido retomar mi blog. Sí, otra vez. No prometo escribir con mucha frecuencia, pero sí prometo no volver a abandonarlo por casi un año.

Segundo, voy a escribir también en inglés. Quiero llegar a una audiencia más grande y, de paso, mejorar mi inglés escrito.

Fonts gratuitos de iA Writer

Los de iA Writer han liberado tres fuentes (fonts) de forma gratuita. iA Writer es el editor de Markdown que uso en mi smartphone. Me gustan sus fuentes porque son bien legibles y cuidadas; fue una grata sorpresa poder descargarlos y usarlos en mi computadora.

Mi Journal Comic: 2019

Este 2019 me he propuesto volver a actualizar regularmente mi Journal Comic. El 2017 no publiqué ni un solo comic y me tiene descontento. No volverá a ocurrir.

He estado implementando mejoras al motor detrás de todo Retrazos, ahora es una aplicación Zend Framework 3 en lugar del obsoleto Ruby on Rails 1.6. Ha sido una buena oportunidad para hacer refactoring y ordenar todo: la separación de secciones (antes todos compartían las mismas tablas), Unit Testing, una mejor arquitectura, etc.

Aún tengo tareas pendientes, pero mi enfoque está en tener mi Journal Comic funcional, tanto en la parte pública como en la sección privada de administración.

He hecho un cambio que va a romper muchos enlaces pero lo veía necesario: he renombrado varios tags según reglas específicas y claras a fin de mantener una consistencia. Tenía tags en singular, plural, en distintos tiempos gramaticales, etc.

Por si alguien lo encuentra útil, copio y pego mis reglas:

  • All tags are in lowercase, separated by spaces.
  • Use international characters: thalía, déjà vu.
  • Use dashes or other characters proper to the name: wreck-it ralph, sandwich.com.
  • Proper Names are in singular: batman, bible, ankylosaurus, php.
  • Prefer the English spelling over the Spanish one: peru vs perú.
  • Subjects and nouns are in plural: bees, kids, apps, songs. Exception to the rule: when inherently there’s only one: grammar, syntax, literature, music. Think: “show me posts with tags of ___”.
  • Adjectives should complete the sentence “I’m ___” or “I’m feeling ___”: poor, tired, burnt-out, weary, moved, blue.
  • Verbs are in singular, present participle tense: running, burning out, falling, walking, reading.
  • The rationale for adjectives and verbs is that they’re actively happening in the comic.

Un detalle del cual nunca me había percatado es que ¡mis imágenes no tenían fecha! Sin el contexto del post, no había forma de saber de cuándo es el comic, haciendo irrelevantes diálogos como “last Tuesday” o “three days ago.” Desde el 2019 todos los comics tienen la fecha al pie de la imagen.

Lo que no me gusta de Laravel

He estado leyendo, probando y viendo un poco de cerca Laravel, buscando agilizar los desarrollos que hacemos en Nodos.

Estas son algunas cosas que no me han gustado de Laravel. Quizás en algunas esté equivocado, dado que sólo he construido algo pequeño con el framework para tener un hands-on experience y no tengo un conocimiento a profundidad de éste. Corríjanme si me equivoco.

NOTA: Al momento que escribo esto, la versión más reciente de Laravel es 5.6.

La magia

Este es un código de ejemplo copiado del manual de Laravel acerca de validación:

/**
 * Store a new blog post.
 *
 * @param  Request  $request
 * @return Response
 */
public function store(Request $request)
{
    $validatedData = $request->validate([
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);

    // The blog post is valid...
}

Lo que se puede ver es que hay una llamada a $request->validate().

Lo que no se ve es que si validate() encuentra contenido inválido, arroja una Excepción y se redirige automáticamente a la página anterior (con toda otra funcionalidad detrás de cámaras para preparar los errores y la persistencia de los valores antiguos).

Este comportamiento “mágico” no es visible ni intuitivo en el código, violando el Principle of Least Surprise. Solamente alguien con conocimientos de Laravel sabe lo que va a suceder.

Por otro lado, los Exceptions están siendo usados para controlar el flujo de la aplicación, lo cual es una mala práctica. Citando a Philip Brown:

An exception is basically an exceptional circumstance that is often unrecoverable from. This means something went wrong and we can’t proceed with running the application because the program is unable to carry on executing.

For example, I see a lot of code where the developer is using exceptions to control the flow of logic.

Exceptions should only be used in exceptional circumstances and therefore should be used sparingly.

Los famosos “Façades”

Mathias Verraes lo sabe decir mejor:

Laravel’s Facades have global state, which is precisely the thing you *shouldn’t* do. It is bad design and should be deprecated. They are nothing more than an elaborate $_GLOBALS.
(And they are a misnomer, as they are not Facades in the OOP meaning.)

Los formularios

Zend Framework 2 y 3 tienen Forms, que son colecciones de Form Elements con validación. Puedes crear nuevas clases de Form Elements como por ejemplo, “DNI” que incluye validadores, filtros, atributos, etc.
Laravel no tiene un concepto similar, estas funcionalidades están dispersas. Menos que eso, los helpers para renderizar los elementos de formulario fueron retirados del framework. No hay una base sobre la cual crear elementos reutilizables.

Service Container y PSR-11

Debido a requerimientos de clientes, en Nodos seguiremos usando tanto Zend Framework como Laravel. Revisando la interoperabilidad de Laravel en relación a su Service Container, veo que no se ajusta al PSR-11 — tampoco al ahora obsoleto container-interop.

Quizás tengamos que usar zend-servicemanager o algún otro Container PSR-11 para los Layers framework-agnostic.

Coda

Sobre el tema de la magia, cabe mencionar lo obvio: todo framework, por definición, trae consigo cierta medida de magia. Desde Rails, esto viene siendo un debate; y como ex-Rails developer, tengo tolerancia a cierta medida de magia pero ahora estoy gravitando más hacia lo explícito.

Hay “magia buena” (e.g. convention-over-configuration) y “magia mala” (e.g. leaky abstractions). La primera es aceptable, la segunda no.

Es mi sentir (y meramente mi opinión personal) que Laravel sacrifica mucho por darle prioridad al aspecto “beautiful code” y el “developer as an Web Artisan.” Para que Laravel pueda ser más interoperativo y desacoplado tendría que cambiar mucho estructuralmente, pero dudo que formen parte de las metas de Taylor Otwell. Mientras no pretenda convertirse en omakase, estamos bien.

Para equilibrar la balanza, en un próximo post haré una lista de las cosas que me gustan de Laravel.