Boix's Blog

Por qué y cómo

7, Noviembre, 2020 | Ir a los comentarios

¿Por qué un blog?

Hace unos años me encontré con la comunidad de dev.to, una comunidad alrededor del mundo del software donde se mezclan experiencias personales, consejos, entradas puramente técnicas, concursos o curiosidades. Poco después me encontré con Hacker News, un agregador de noticias, en general sobre software, que me ha mantenido un año visitándola diariamente y donde he encontrado mucha información interesante y útil, mucha de ella en blogs personales de diferentes desarrolladores, arquitectos y miembros de diferentes comunidades en general.

Un tiempo después me animé a escribir una entrada acerca de las métricas en Neo4J, cómo gestionarlas y cómo los valores de configuración por defecto podían causar problemas de espacio en disco. Tras escribirlo, publiqué el artículo en Medium, donde estaría disponible para todo el mundo que tuviera ese problema, dado que había encontrado alguna mención a este problema en el foro de Neo4J. Unos días después, me di cuenta que Medium no era para mí.

¿Por qué no Medium?

Tras un par de días, encontré ciertas cosas en Medium con las que no estaba del todo cómodo tanto desde la perspectiva de usuario como la de escritor:

Debido a estas razones encuentro que, si debo escribir artículos y publicarlos, debo hacerlo por mí mismo, donde tenga control sobre su contenido, sea visible para todo el mundo sin restricciones y no me preocupe en absoluto por los números asociados a cada entrada.

¿Qué quiero en el blog?

Teniendo el control total sobre el blog la siguiente pregunta es, ¿Qué debo incluir para estar cómodo con mi propio blog? Para ello, el blog va a seguir unas premisas básicas que, si bien pueden aumentar la cantidad de trabajo necesaria para publicar un artículo, hará que esté más cómodo con el resultado final.

Propiedad

El contenido del blog, en su totalidad, debe pertenecerme. Debo tener el control total de lo que se publica y no se publica y no debe depender de factores externos. Para ello, he decidido gestionar el blog en GitHub. El contenido del blog y sus cambios están controlados por git y la publicación en Internet se realiza mediante GitHub Pages y, mientras cumpla con las políticas de GitHub, no habrá ningun problema y, en cualquier momento, puedo llevarme el blog tal y como está y publicarlo en cualquier otro sitio.

Accesibilidad

El blog debe ser accesible a cualquier persona que quiera leerlo. Para ello el blog debe cumplir los siguientes requisitos:

Estos requisitos no se cumplen por norma general. La accesibilidad, excepto determinadas excepciones honrosas, es obviada en la gran mayoría de webs que visitas a diario y, las que sí la aplican, no estoy del todo seguro si lo hacen por el hecho de que cualquiera pueda consumir su contenido o porque no están dispuestos a peder a un porcentaje de potenciales clientes, por pocos que sean, y detrás de ese esfuerzo hay una razón monetaria y no empática. Parece que nos centramos más en hacer que el contenido sea consumible por cualquier dispositivo pero no por cualquier persona.

Facilidad de mantenimiento

Quiero poder añadir una nueva entrada de blog en cualquier lugar y momento, sin demasiada complicación, sin necesidad de instalar demasiadas herramientas y con un proceso de publicación sencillo.

Bilingüismo

Cualquier contenido del blog estará disponible en inglés y en español por varias razones:
  1. Al ser el español mi lengua materna, tengo más facilidad para estructurar y comunicar las ideas que en otro idioma, por lo que escribiendo en español primero me ayudará a estructurar correctamente lo que quiero decir. Además, así, el contenido está disponible para aquellos a los que les cueste un poco el inglés y prefieran leer en español.
  2. Algunos estudios apuntan a que nuestra personalidad cambia según el idioma que hables. Si bien esta idea no es compartida por todos los estudios, en mi caso si noto una ligera diferencia en tono entre mi forma de expresarme en inglés y en español, por lo que veo interesante escribir los artículos dos veces, una en cada idioma, para que las diferencias que pueda haber entre las dos personalidades queden plasmadas en el texto.
  3. El inglés es el idioma general del desarrollo de software en occidente, por lo que publicar el contenido en inglés es más lógico que publicaro en español, dado que así podrá llegar a más gente.

¿Qué no quiero en el blog?

Al igual que al crear el blog he de tener claro qué quiero ofrecer y cómo, también he de tener claro qué quiero evitar por todos los medios posibles, cosas que a mi me molestan, me incomodan o intento evitar en webs ajenas, para no replicarlas en la mía.

Cookies

¿Quién no está cansado de el cartel de permitir cookies en casi cualquier web? Y, quizá más importante, ¿Por qué hasta la web más pequeña e insignificante usa cookies? La respuesta a esta pregunta suele residir en Google Analytics. La mayoría de webs incluyen Google Analytics entre sus componentes para monitorizar qué tal funciona la web y permitir a Google que les de información sobre cómo mejorar la web en términos de SEO y maximizar el ratio de conversión. La inclusión de Google Analytics hace que se requiera ese aviso de habilitar las cookies dado que es información del usuario que viaja a servidores que no son propiedad de la web que se está consumiendo.

En el caso de un blog puede ser importante conocer las visitas y el éxito de las diferentes entradas para analizar qué funciona, qué no y cómo crecer. En mi caso me interesa bastante poco saber esos números y, como comentaba en el apartado de Medium, prefiero no tener acceso a la información. En este apartado voy a seguir un poco la estela de Henry Darger. Escribiré y publicaré sólo porque quiero hacerlo y por dar la posibilidad a que a alguien le pueda resultar útil o interesante, pero no lo haré con la única ambición de que sea leído y maximizar dicho número.

En definitiva, al no incluir nada de Google Analytics y no usar ni una sola cookie, no será necesario el cartelito de aceptar dichas cookies.

JavaScript

Hoy día casi cualquier web, por pequeña que sea, empieza por inicializar Angular, React, Vue, Svelte, Polymer o cualquiera de las decenas de frameworks JavaScript que existen en el mercado, herramientas que, en general, están enfocadas al desarrollo de webs altamente dinámicas e interactuables. En el caso de un blog no es necesario tanto dinamismo y, para ello, los diferentes framewosk proveen herramientas para generar webs státicas, como Next.js para React, Nuxt.js para Vue o Sapper para Svelte.

En cualquiera de los casos, desarrollar una web estática hace que tengas que aprender el framework, hacerte con el módulo de internacionalización (i18n), cómo se despliega, cómo se compila, ciclos de vida y muchos conceptos más, cuando lo que quieres es simplemente generar unos ficheros HTML para mostrar un texto, cosa que, aún generando contenido estático, estos frameworks y utilidades no consiguen del todo, dado que siguen inyectando ficheros JavaScript a priori innecesarios.

Pero, ¿Realmente es necesaria tanta sobreingeniería para que el resultado final sea una entrada de blog con un poco de texto y algunas imágenes? Pienso que no, que no es necesario y, de hecho, la cantidad de trabajo que hay que realizar para conseguir una web completamente estática y minificada suele llevar mucho más trabajo que simplemente escribir en un fichero HTML. Y todo esto sin hablar de que, con JavaScript, el navegador tiene que utilizar recursos para parsear, interpretar y ejecutar ese JavaScript que, para un blog, seguramente no sea necesario.

Dependencias

Continuando con el punto anterior sobre JavaScript, por todos es conocido el agujero negro que resulta la carpeta node_modules en cualquier proyecto JavaScript, donde instalar cualquiera de los frameworks previamente mencionados hace que se instalen alrededor de 200 MB de ficheros en el disco, haciendo que posiblemente una entrada de blog sencilla puede necesitar centenares de dependencias para poder generarse, totalmente innecesario para un poco de texto.

Otra dependencia que genera este tipo de desarrollos es una dependencia de determinado software instalado en tu máquina y seguir unos pasos determinados para desplegar los cambios. Cualquier proyecto que utilice algunos de los frameworks anteriormente mencionados necesitarán que tenga instalado node en la máquina local, además de necesitar ciertos pasos de construcción y publicación que, si desarrollas en Windows, pueden tener dependencias de node_gyp, que tantos problemas genera. Por lo tanto, otra cosa a evitar es necesitar de tanto software externo para publicar un artículo. Debería ser suficiente un editor de texto, cualquiera, y conexión a internet, necesaria para publicar los cambios realizados. Ésto no solo facilita el desarrollo, sino que asegura portabilidad y es inmune a cambios en las herramientas de construcción de JavaScript.

Analíticas

Como comentaba anteriormente, prefiero no tener a mano ningún tipo de analíticas y métricas sobre la web, por lo que no se incluirá ningún tipo de componente que facilite la obtención de este tipo de información, haciendo que Google Analytics no sea una opción y, por tanto, evitar cookies como se ha mencionado anteriormente.

¿Cómo se ha creado el blog?

Una vez definidos los requisitos que quieren cumplirse para este blog, el siguiente paso es crearlo. Recordemos qué debe cumplirse:

Para cumplir estos requisitos se han hecho las siguientes decisiones técnicas:

  1. Se prescinde de cualquier framework JavaScript, minimizando así dependencias y se evita el uso de JavaScript.
  2. No se incluye Google Analytics, evitando el uso de cookies y, con ello, aviso de uso de cookies y se evitan métricas de uso.
  3. Se escribe todo el contenido del blog en HTML plano. Todo el blog utiliza únicamente HTML y CSS.
  4. Para la parte visual se ha utilizado Writ, una librería CSS del estilo drop-in, es decir, no usa clases propias, sino que utiliza las etiquetas propias de HTML para formatear el contenido. Al no utilizar clases, hace que se pueda cambiar entre diferentes librerías CSS que utilicen la misma aproximación. Una lista de este librerías CSS de este estilo puede encontrarse en GitHub.
  5. Las entradas en inglés y español se escribirán por separado, en HTML plano y en carpetas diferentes, siendo el inglés el idioma por defecto.
  6. Antes de publicar un artículo se comprobará utilizando Lighthouse y aXe que cumple los estándares mínimos de accesibilidad.
  7. Debido a que no hay JavaScript, no hay comentarios en los artículos de ningún tipo. Para hacer posible la discusión, se creará una issue en GitHub para cada artículo por si alguien quiere comentar.

Con estas decisiones técnicas conseguimos los objetivos propuestos para la publicación del blog, aunque introduce cierto grado de complejidad a la hora de publicar, dado que cada entrada es totalmente independiente del resto, por lo que introducir algún tipo de plantilla o cambio general al blog será más complicado que hacerlo con JavaScript.