Coding in anger: not-gitbook

I have, intermitently, for the past few months, been writing a book. You can see it here and I am fairly happy with how it's going.

I am not so happy with the tooling.

When I started writing it, I didn't want to write a tool, I just wanted to write a book. So, I looked for "things to make a book out of markdown" and found a few, including mdBook and gitbook and tried them both, then decided to go with gitbook because it seemed more developed.

But, you know how this works. Things started drifting.

One initial obstacle was that I wanted the code in the book to come from the actual working code, not be a copy. I also wanted to "execute" the chapters and make the output of the chapter's code part of the chapter itelf.

I found a nice tool for this called pyLiterate which... I ended up extending to allow for things such as "include this piece of code from that file but do not execute it" and whatever, and integrating it into gitbook involved ... a lot of Makefiles.

And then wen the output appeared in gitBook ... I really didn't like how syntax highlighting worked. I wanted prettier and specifically to be able to highlight some lines, and to have line numbers matching the file contents and not starting from 1 ... and I ended up writing a Gitbook Extension

And I added support for graphviz in pyLiterate because I wanted SVG diagrams as part of the code and not as separate things.

And I wrote and I wrote.

And then life happened and I stopped writing. And whenever I wanted to start writing again in a new setup something broke.

  • Maybe the gitbook version installed or its dependencies had a security issue and needed updating.
  • Maybe the updated gitbook broke my plugin
  • Maybe things just were "off" and I had to track it down*

And a couple of days ago, I just got angry. And what the hell this is just a lame static file generator and I know those suckers.

So, I decided to see how much work would it be to reimplement, somewhat dumbly, gitbook.

Well, really, it's about a day's work (for a low quality version)

  • Supports all I want
  • Supports plugins
  • Supports arbitrary markdown preprocessing
  • Supports arbitrary markdown renderer hacking
  • Uses mistune for markdown, which kicks ass
  • Uses jinja2 for templates and they are 10x simpler than in gitbook AND THE OUTPUT LOOK THE SAME. I mean, there is one template

I logged the work, which was at a very relaxed pace over a couple of days here and published not-gitbook in gitlab

I could migrate my book to the new toolchain in a day more work, mostly involving implementing things gitbook doesn't do and I am hacking via Makefiles.

It's surely not ready for any real usage but feel free to poke around and contact me if you want to use it.

Out on Blue Six

  • Author: Ian McDonald
  • Rating:
  • See in goodreads
  • Review:

    Had a bit of a hard time finishing the book. At a certain point around 2/3rds of the way in the language got just too flowery and psychodelic.

    In any case, it's pretty good!

DeVicenzo 2

A long time ago I "wrote a web browser". Those there are some very heavy quotes. You may imagine me doing air quotes while I write it, maybe?

That's because I didn't really, what I actually did was write UI around Qt's webkit-based widget. It was a fun project, specially because I did it with the absurd constraint of staying below 128 lines of code.

And then I did not touch if for six years. But yesterday I did.

commit 0b29b060ab9962a32e671551b0f035764cbeffaa
Author: Roberto Alsina <ralsina@medallia.com>
Date:   Tue Oct 30 12:32:43 2018 -0300

    Initial PySide2 port

commit 831c30d2c7e6b6b2a0a4d5d362ee7bc36493b975
Author: roberto.alsina@gmail.com <roberto.alsina@gmail.com@1bbba601-83ea-880f-26a2-52609c2bd284>
Date:   Fri Jun 1 15:24:46 2012 +0000

    nicer, smaller margins

Six years is a long time. So, nowadays:

  • I prefer my code to be formatted better
  • Python 3 is the thing
  • PySide is official, so I would recommend using it instead of PyQt
  • Qt is now on version 5 instead of 4

So, with those new constraints in mind, I ported DeVicenzo to the latest everything, formatted the code properly using black, and expanded by line limit to a generous 256.

And Here it is ... it's not realy useful but it is an example of how expressive the Python/Qt combination can be, even while being an absurdly bad example nobody should follow (Oh, the lambdas!)

screenshot

La Fundación Mítica de Gorilandia

El Mito

Es posible aprender sobre un grupo humano por los mitos que elige creer. Esos mitos elegidos son siempre expresión de un valor compartido entre los miembros, o por lo menos de un valor aspiracional, de lo que quieren ser, o de lo que quieren creer que son.

Si tu mito es que dios salvó a tu tribu, querés creer que tu tribu es la favorita, que todas las cosas que pasaron fueron parte de un plan de tu dios, y eso explica cosas.

Si tu mito es que son descendientes de una ciudad mítica, es porque vos querés que tu ciudad actual sea la heredera de esa ciudad mítica, y eso explica cosas.

Si uno de tus mitos es que una persona intachable, inteligente, sabia, fue perseguida sin motivos por un tirano ... eso explica cosas.

Y el mito fundador de gorilandia es que Perón persiguió a Borges humillándolo, y que eso es expresión del odio por la intelectualidad del peronismo, de que el antiperonismo es el dueño de la inteligencia, y sobre todo, de que el peronismo es una colección de mezquindades que ataca a alguien tan indefenso como un escritor ciego y para humillarlo lo nombra en un cargo ridículo en vez de despedirlo o vaya uno a saber qué.

Veamos algunas de las versiones contemporáneas del mito, obtenidas googleando al azar.

Borges era empleado desde 1937 en la biblioteca municipal Miguel Cané. Según una versión, debido a su público antiperonismo, fue designado "inspector de aves, conejos y huevos"

-- Ruben H Ríos

En 1946 Borges fue removido de su puesto en la Biblioteca Miguel Cané, de Boedo, y nombrado por el burócrata Emilio Siri como Inspector de pollos, gallinas y conejos en las ferias municipales.

-- Alguien en la revista Sudestada

En 1937 Borges se empleó en la biblioteca municipal Miguel Cané. En la década siguiente, su oposición abierta al peronismo lo obligó a dejar el cargo. Según una versión, luego fue nombrado "inspector de aves, conejos y huevos" por el gobierno.

-- Alguien en La Nación

Si se buscaran fuentes menos informadas se encontraría gente que cree que fue en la Biblioteca Nacional (no, fue en la Biblioteca Municipal Miguel Cané) y el nombre del cargo en que se lo nombra varía.

Sin embargo, el núcleo del mito es ese. Perón y sus esbirros, ante el antiperonismo de Borges, ínclito escritor, le quitan su puesto en la biblioteca y lo mandan a hacer algo "indigno" obligándolo así a renunciar como parte de una persecución política.

Empecemos por algunas de las cosas en las que hay acuerdo.

  • Borges fue nombrado en la Biblioteca Municipal en 1937 (o más probablemente 1938) como "hemerotecario auxiliar" o "asistente" trabajando en catalogar el fondo bibliográfico.

  • Obtiene el cargo "por recomendación de Adolfo Bioy [padre de Bioy Casares]" o de su amigo Francisco Bernardez

  • Trabaja ahí hasta 1946

  • Perón llega al poder en 1946 (o 1945, depende de a qué llames poder)

Ése es el núcleo más o menos indiscutible. Lo demás ... bueno, lo demás veremos.

Borges, El Ñoqui

Partamos de que Borges entró por acomodo. En 1937, con casi cuarenta pirulos, Borges había tenido trabajo ocasional como asesor para Emecé, y escrito una columna semanal para la revista El Hogar, mientras trataba de hacer que su carrera literaria despegara. Nada en su currículum indicaba que estuviera ni remotamente calificado para trabajar de bibliotecario o archivista. Su conocimiento de los detalles técnicos del funcionamiento de una biblioteca o hemeroteca consistían en que le gustaban las bibliotecas.

Según algunas fuentes fue el padre de su amigo Bioy, según otras fue Francisco Bernardez, que dirigía la biblioteca, pero alguien habló con alguien más y le consiguió un puestito en una biblioteca en Boedo.

Una vez acomodado en ese puesto, Borges procedió a no hacer nada durante la siguiente década, por lo menos en cuanto a trabajar. Leamos al mismo Borges contando su experiencia:

Ahora, yo hubiera debido dejar esa biblioteca --era un ambiente asaz mediocre-- pero seguí trabajando. No sé si la palabra "trabajando" es exacta; éramos, creo, unos cincuenta empleados, y nos asignaron un trabajo que tenía que ser lento.

Yo recuerdo que me dieron libros para clasificar el primer día, y el manual de Bruselas, que emplea el sistema decimal el mismo que se usa en la Biblioteca del Congreso de los Estados Unidos. Yo trabajé, y creo que clasifiqué casi ochenta libros había que simular que se trabajaba cada día, yo clasifiqué los libros y eso se supo; y, al día siguiente, uno de los compañeros vino a recriminarme, me dijo que eso era una falta de compañerismo, porque ellos se habían fijado un promedio de cuarenta libros para clasificar por día.

Ahora, para fines de realismo, esos cuarenta no eran siempre cuarenta; podían ser treinta y nueve, treinta y ocho, cuarenta y uno, para que todo resultara más verosímil, ¿no?, según exige la novela naturalista. Entonces, me dijo que yo no podía seguir así, y yo, al día siguiente, clasifiqué treinta y ocho, para no quedar como presuntuoso.

Bueno, y entonces, ¿qué sucedía?: el trabajo que teníamos que hacer se cumplía en, digamos, media hora o en tres cuartos de hora; y luego quedaba el resto de las seis horas, que estaban dedicadas a conversaciones sobre fútbol tema que ignoro profundamente, o si no chismes, o si no, por qué no, cuentos "verdes". Ahora, yo me escondía porque había encontrado una extraña ocupación: la de leer los libros de la biblioteca. Yo le debo a esos nueve años el conocimiento de la obra de León Bloy, de Paul Claudel; volví a releer los seis tomos de la Historia de la decadencia y caída del Imperio Romano, de Gibbon, y conocí libros de los que no tenía noticia. De modo que aproveché el tiempo.

No crean que fue una década improductiva. De hecho, literariamente, fue la década en la que Borges escribe y publica sus mejores obras. El jardín de senderos que se bifurcan, El Aleph, Seis problemas para don Isidro Parodi, Ficciones ... es la década en que Borges comienza a ser reconocido.

Lo de los compañeros diciéndole que no trabaje tanto suena un poco inverosímil, así como la idea de que la biblioteca Cané tuviera 50 personas catalogando el patrimonio bibliográfico, pero bueno, claramente lo que muestra esta anécdota es que Borges un empleado ejemplar no era.

Borges mismo en El Aleph describe así al protagonista Carlos Argentino Daneri:

Carlos Argentino es rosado, considerable, canoso, de rasgos finos. Ejerce no sé qué cargo subalterno en una biblioteca ilegible de los arrabales del Sur

El Aleph fue escrito en esos años por Jorge Borges, subalterno en una de esas bibliotecas ilegibles.

Admito que estoy pecando al aplicar estándares de 2018 a cosas que pasaron hace más de setenta años. En esa época se aceptaba que los empleados públicos eran acomodados, que no trabajaban, que esos puestos de auxiliar en biblioteca eran sinecuras para ovejas negras de familias bien que no podían ganarse la vida de otra forma.

Queda así planteada la situación alrededor de 1945. Jorge Luis Borges, casi cincuentón, escritor que está teniendo sus primeros éxitos en el mundo de las letras y vive de no trabajar en una biblioteca municipal hace una década, descubre el peronismo. ¿O no?

Enter Perón

Borges fue famosamente antiperonista y era bueno para la chicana. Por lo tanto, hay muy buenas chicanas antiperonistas borgeanas:

Los peronistas no son ni buenos, ni malos; son incorregibles.

Mire, yo detesto a los comunistas, pero, por lo menos, tienen una teoría. Los peronistas, en cambio, son snobs.

Perón no me pudo perdonar que cuando estaba en Norteamérica me hayan preguntado por él y yo haya dicho que "no me interesaban los millonarios" ni que, cuando me preguntaron por la mujer, haya dicho que no me interesan las prostitutas.

La peor desdicha es que lo derrote a uno la gente despreciable. Los peronistas a nosotros.

Los peronistas son gente que se hace pasar por peronista para sacar ventaja.

Partamos de lo más básico. Borges, en 1945, era un desconocido. Sí, estaba comenzando a adquirir una módica fama en ambientes literarios, pero no era Jorge Luis Borges todavía, así, con negritas. Era un escritor.

En 1945 y 1946, cuando el presidente era Farrell (no Perón) Borges firma solicitadas. Había un decreto (deleznable) que prohibía que los empleados públicos emitieran declaraciones políticas. Borges es sumariado por ese decreto antes de que Perón asuma el poder.

Pero aún si hubiera sido sumariado luego de que Perón tomara la presidencia ... ¿Es creíble que uno de los primeros actos de su gobierno fuera sumariar a un auxiliar de tercera en una biblioteca de barrio? Más aún cuando había motivos de sobra para simplemente despedirlo por incumplir su trabajo durante años.

Pero ignoremos por el momento lo que pueda haber sucedido... que cuenta Borges que sucedió?

Como a mí me da por firmar todo lo firmable, resulta que firmé cuanto manifiesto me trajeron los amigos [...] Hace pocos días me mandaron llamar para comunicarme que había sido trasladado de mi puesto de bibliotecario al de inspector de aves —léase gallináceas— a un mercado de la calle Córdoba. Aduje yo que sabía mucho menos de gallinas que de libros.

-- Borges, entrevista con diario El Plata, 1946

En algún resquicio de esa tarde única, yo temerariamente firmé alguna declaración democrática [...] me ordenaron que prestara servicios en la policía municipal. Maravillado por este brusco avatar administrativo, fui a la intendencia. Me confiaron, ahí, que esa metamorfosis era un castigo por haber firmado esas declaraciones.

-- Borges, discurso en cena de la SADE, 1946

Y luego, cuando subió el que sabemos al poder, entonces la municipalidad me nombró inspector para la venta de aves de corral y de huevos... yo, desde luego, no sé absolutamente nada sobre ese tema, y mandé mi renuncia, que es lo que se esperaba.

-- Borges, entrevista, 1999

Nótese que en esos cincuenta años lo que se pierde es lo de "firmé cuanto manifiesto me trajeron los amigos"y en 1946 se arrogaba el puesto de "bibliotecario" que estrictamente no tenía y luego desprecia.

¿Que eran esos manifiestos? ¿Eran acaso manifiestos antiperonistas? Bueno, más o menos, ya que el peronismo no existía aún como tal. Si quieren leerlo, acá está el texto

Eran claramente contrarios al gobierno del momento, de Edelmiro Farrell, y de hecho Perón fue elegido en las elecciones que ese manifiesto reclama, en febrero de 1946, porque Borges siempre estuvo a favor de elecciones libres en las que ganara el candidato de su preferencia.

De hecho, la idea de que todo el incidente fue represalia no por antiperonismo sino por antinazismo es sostenida por Victoria Ocampo en 1961, en una entrevista que recuerdo pero no encuentro.

Si se lee la entrevista con el diario El Plata de Montevideo, se puede apreciar que está escrita en chiste y es ahí donde surge la idea del inspector de gallinas. Cuando lo escribe en serio Borges dice algo distinto.

De hecho, si se le pregunta a terceros surge una historia distinta. María Esther Vazquez, biógrafa de Borges cuenta lo siguiente:

Siempre se dijo que Perón lo hizo renunciar a Borges de la Biblioteca Miguel Cané, y eso es mentira. Fue el Director de Cultura de la Municipalidad de Buenos Aires el que lo despidió, cuando era intendente de la ciudad el señor Siri.

Yo entrevisté a quien fuera director de cultura en aquella época, cuando escribí la biografía de Borges, y le pregunté, y este señor me dijo: (3) ¡Qué quería! Si este hombre (por Borges) era un holgazán, no hacía nada, esa gente molesta, son parásitos. Entonces, en ese momento, algunas personas le pidieron que no lo despidiera porque, alegaban, Borges no tenía como ganarse la vida, y este hombre se apiadó y lo derivó al Departamento de Apicultura, de miel y abejas.

Y Borges, cuando salió de la intendencia dijo, y yo creo que a Alicia Jurado: Me pasaron a un departamento que es exactamente igual como si me hubiera designado inspector de Aves, conejos y huevos. Ahí surgió el mito de esa designación, pero en realidad era en el departamento de Apicultura.

De nuevo Vazquez:

Instaladas las autoridades peronistas, desde la intendencia de Emilio Siri le llegó a Salinas una lista de los cesantes; Borges figuraba allí. Francisco Luis Bermúdez, amigo de Borges y adscripto a la secretaría, le pidió al secretario que no lo echara. “Entonces decidí trasladarlo a la Escuela de Apicultura de la Intendencia”, dice Salinas

No sé si este Francisco Bermúdez no sería Francisco Bernardez, el que le había conseguido su primer cargo en la biblioteca, consiguiéndole un segundo conchabo con el resultado de ser despreciado por hacer un favor.

Luego de dejar de trabajar en la biblioteca Borges cuenta:

Y, en realidad, eso finalmente me hizo mucho bien, ya que inmediatamente me llamaron del Colegio Libre de Estudios Superiores, yo empecé a dar conferencias — yo tenía que hacer algo — , bueno, gané bastante dinero

-- Borges, Entrevista, 1999

Olvida mencionar que esas conferencias las pagó Victoria Ocampo. Pero eso es otra historia.

Incluso, la mayoría de los hechos que se citan como fuentes del antiperonismo de Borges son posteriores. ¿El arresto de su hermana y su madre? 1948. ¿Su oposición a Perón desde la SADE? 1947 en adelante. ¿El arresto de Victoria Ocampo? 1953.

No son motivo para que el gobierno de Farrell o Perón estuvieran enemistados con él en 1946. Antes bien pareciera que su antiperonismo es efecto de este episodio, y no causa.

Y Entonces?

Entonces, sospecho que la historia "real" fue mas o menos así:

Borges entra, acomodado, de ñoqui en una biblioteca municipal, donde procede a no trabajar y dedicarse a leer y escribir, dando forma a sus primeros éxitos literarios.

Por motivos políticos es sumariado y cesanteado por algún burócrata municipal, no por Perón. Apiadándose de él un amigo le consigue un traslado a algún otro lado, pero no de inspector de gallinas. Da una entrevista en chiste, y el chiste queda.

Al no querer aceptar el traslado, supongo que porque involucraba trabajar y salir de la tranquilidad de la biblioteca, presenta la renuncia que es aceptada.

Nunca reconoce que una de sus mejores épocas como escritor fue posible gracias a ser un empleado público corrupto y a ser apañado por amigos y favorecedores que le consiguen refugio para su impracticidad en la vida.

Durante los siguientes 50 años ese chiste se convierte en "la verdad" y la raíz de un mito fundacional del antiperonismo. Esa estadía en la biblioteca se convierte, por un lado, en una especia de paraíso perdido, el cielo en forma de biblioteca, pero por otro en un ambiente mediocre donde es hostigado por seres toscos que quieren hablar de San Lorenzo de Almagro y contar chistes verdes.

Borges, como todo elitista, siente orgullo de sus ignorancias, desprecio por actividades que desconoce. Esa amargura en el sentido lunfardo de la palabra envenena todas sus relaciones con aquellos que no le rinden pleitesía, con las contadas excepciones de quienes considera sus pares.

Así, Borges crea su propia mitología interna y encara una longeva vida de inusitada infelicidad.

Microturismo por Coghlan

Ayer se quedó mi tren yendo al trabajo. Como no me tengo que hacer mala sangre me bajé, me fui a pasear, saqué unas fotos, caminé un poco, y llegué justo antes que arranque el tren de vuelta.

Los grafitis y murales son de las paredes del hospital Pirovano, los flamencos de hierro son inexplicables.

The Pleasures of a Cheap Phone

When it comes to phones I am a cheap guy. I don't buy expensive phones, I don't buy flagship phones, I don't even buy "cheap flagship-like phones". I don't buy unknown chinese brands that make amazingly cheap but awesome phones, I don't buy mid-range phones, I don't buy mistery phones. I buy cheap phones. Or at least that is the plan from now on.

My previous phone was a former flagship, a LG G4 which had awesome specs ... for 2015. Of course I bought it in 2017, but still, it was like, nice? The camera took good pictures, and all the apps ran smoothly and the battery sucked and dropped to 50% before I had finished my commute.

I hated that phone's battery life. It made my life 10% more annoying. So I decided to try an experiment. I considered what the hell I wanted of my phone. And here is the full list, not in priority order:

  1. I want it to have Internet
  2. I want it to play FM radio (no data usage!)
  3. I want it to take pictures, but not necessarily awesome pictures. I am more inclined to do things like taking a picture of a funny street sign than anything else.
  4. I want a large-ish screen because I watch Netflix on the train sometimes, or read books in the Kindle app. No need for super-high resolution. Honestly, 720p is just fine. I know because I checked.
  5. I don't want to worry if someone steals it. Insurance here is totally worthless. I had it on a previous phone: it was more expensive to use the insurance than to just buy a new phone (really).
  6. I wanted a metal back. Why? I like how metal backs feel. Glass backs are idiotic.
  7. I want apps to run. I don't mind at all if there is an occasional slowdown.
  8. I want a battery that doesn't aggravate me

So I took those parameters and considered all the phones available. And I bought a phone most people consider a piece of crap. And I love it.

Let me introduce you to the glory that is the Moto E4 Plus (by Lenovo)

Let's cover all the items in my list.

I want it to have Internet

Because this phone comes in a "world version"by default, it supports pretty much every band out there. I get 4G and it's plenty fast. Or, fast enough? It does have a small problem in that for some reason it doesn't see my office's WiFi network but who cares. I have enough data.

I want it to play FM radio

It does! It sucks, but it works. Good for emergencies?

I want it to take pictures

It has a camera. That is about as much as you can say about it. It even has two cameras! Front camera has flash! They are both hot garbage! It's barely good enough for me.

I want a large-ish screen

Maybe 5.5 inches is not a large screen for you, but it is large for me. It is, in fact, about as large as I can use single-handed. So, yay. It's bright, and it's 720p resolution is not awesome but who cares? I can see what's in it even in direct sunlight, so all good. A bit of a fingerprint magnet.

I can read fine, Netflix pics look good. That's it.

I don't want to worry if someone steals it

This thing costs $120 (US) or so. Do I mind if someone steals it? Yes. Do I just walk to the next store and buy another one if it happens? Yes too. So, yes yes yes. In fact, considering it's last year's model it's probably worth even less now. So I may just buy a E5 plus now that it exists and give this one to my son. Or not, since it works fine.

I wanted a metal back

Yes, it has a nice curved aluminum back. It's a bluish grey and I think it's pretty.

I want apps to run

They do run! Ok! Most of the time! Sometimes (once every couple of days) things get slow for a second. Then it fixes itself. Sure, the Kindle app takes a second or two to start if I have not used it in a while. So? What can possibly be the problem with having a app that contains every book I bought in the past 6 years (and that's several hundred books) available in my pocket to read and reread at any moment taking 2 seconds to open?

I want a battery that doesn't aggravate me

Behold my battery graph a while ago. I had a heart attack and was in a hospital por 3 days, which means charging the phone was pretty hard (no USB ports on ICU beds) but the phone was the only way to be connected to people or not be bored out of my skull, so on 4G network and using it most of the time.

It says I have 6 hours of battery left. It's actually underestimating it a little. On normal usage it lasts two days. Two whole days. TWO DAYS. Not two working days, not two days on standby, but two whole days of just using it normally for smartphone-like normal activities like one does, playing games, using twitter, taking a picture of two, watching a movie on Netflix, reading on Kindle, checking email, streaming music to a bluetooth headset, making calls, and so on. TWO. Not one, but two days.

Did I forget to plug it at night? Who cares, I will plug it tomorrow.

The charger even lets you get 4 or 5 hours of usage by charging it for 15 freaking minutes.

I am in love with this phone's battery. I want to marry this battery and have little electric children that will run and run and run and never shutdown.

You don't know how much your phone's crappy battery (and yes, your phone's battery is probably crappy) stresses you until you are relieved of the concern.

Random Nice things

  • It's water resistant!
  • I dropped it on the floor a few times and nothing happened!
  • It has a fingerprint sensor that works well!
  • It can use the fingerprint sensor for controls and then you don't need on-screen buttons, so your screen is "bigger"!
  • It has pretty much stock Android, even though it's a version that is now a bit outdated.
  • Even though it's a bit thick, it's thinnest than your fancy thin phone after you put it in a sleeve because you care about it.

Random Not Nice Things

  • The speaker is garbage
  • The FM radio tuner is garbage
  • The cameras are garbage (yes, I already said it, but they really are)

Implications

I absolutely love this phone even though several of its components are garbage. It gives me peace. The battery gives me peace that it will work. The price gives me peace that I don't need to worry about it much. It does what it has to do. It feels good in the hand.

But why do people buy expensive phones, or new phones? If I were to buy an Iphone X, that costs about 8 times as much as this one, what would it give me that this one doesn't? Nicer pictures. Prettier screen. Not much else.

But it would make me feel like I spent a substantial amount of money on just that. Sure, one spends a lot of time using the phone, so it makes sense to spend money on making that time more pleasant, but ... the iPhone X is more expensive than my bed. And I spend 9 hours a day there.

And I would worry about that phone.

And I would care about that phone.

What can it give me that pays back even 2 minutes of worrying?

Nothing.

Quick Nikola Feature: document APIs using pdoc

A user asked in the nikola-discuss if there was a way to use Nikola to document APIs. Well, there wasn't and now there is. I took pdoc and wrote a wrapper as a plugin for Nikola.

And now you can just document python modules using it in a couple of minutes.

Here is the documentation for the re module from stdlib as an example.

Yes, the output is not great, and it needs CSS, and many other fixes, but it's easy to improve now that it's there, as long as there is interest.