Automágica: durante 2017 estoy trabajando bastante en Automágica, mi software para editar libros: Más información - Posts relacionados

Galerías de fotos en Nikola

Hubo una época, pre-Facebook, en la que los informáticos instalábamos programas de galerías de imágenes escritos en PHP en nuestros propios servidores y subíamos allí las fotos sacadas con nuestras nuevas cámaras digitales de 4 megapixeles.

El problema con estos programas (había realmente muchos para elegir) es que requiren que uno (el administrador de sistemas) los actualice (entre otros mantenimientos requeridos). Esto es divertido al principio, una molestia después y al final es algo que dejamos de hacer.

Si visitamos alguno de esos sitios hoy, alrededor de las imágenes se pueden ver errores como:

Error

Deprecated: Function ereg() is deprecated in /home/jjconti/galeria.juanjoconti.com.ar/zp-core/functions-i18n.php on line 190

Warning: Cannot modify header information - headers already sent by (output started at /home/jjconti/galeria.juanjoconti.com.ar/zp-core/functions-i18n.php:190) in /home/jjconti/galeria.juanjoconti.com.ar/zp-core/functions.php on line 1897

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/jjconti/galeria.juanjoconti.com.ar/zp-core/functions-i18n.php:190) in /home/jjconti/galeria.juanjoconti.com.ar/zp-core/admin-functions.php on line 6

En estos días, que ando buscando qué me dejé olvidado en Internet para importarlo aquí, encontré uno de estos sitios que instalé en su momento.

Como el programa organizaba los álbums en carpetas y sub carpetas, con el siguiente comando

tar cvfz albumns.tgz  --exclude="*.php" albums/

pude crear un archivo listo para crear una galería en Nikola.

Crear una galería de fotos en Nikola es extremadamente fácil. Solo hay que agregar carpetas con fotos a la carpeta galleries o a la que se haya definido en conf.py y ejecutar:

nikola build

Fotos.


import_twitpic (plugin para Nikola)

Revisando qué contenido viejo subido a otros sitios podía importar en mi nuevo blog, me di cuenta que en mi segunda era de subir fotos tomadas con el celular mientras ando [1] mis fotos, por pura casualidad, se estuvieron guardando en Twitpic (descanse en paz).

Afortunadamente el sitio (que fue comprado por Twitter y dejado en modo read-only) te deja exportar tus datos. Me bajé un zip que adentro tenía una carpeta. La carpeta tenía todas las imágenes más un archivo de texto con la fecha de publicación de cada una y su texto.

Armado con esto y mi experiencia haciendo el plugin import_goodreads cree import_twitpic.

Este es su README:

README.md

This plugin imports Twitpic pics (including twitted text) as new posts.

This plugin:

  • Creates post as a rst file using the tweet text and the figure directive
  • Copies images to images/POSTS_OUTPUT_FOLDER/POST_SLUG/
  • Uses original tweet date as post date
  • Uses "Twitpic: DATE" as title
  • Adds "Twitpic" as tag plus the ones passed as arguments
  • Adds mentionds as hashtags as tags, but if the site already have a similar tag it use that (to avoid "ERROR: Nikola: You have tags that are too similar")

Note: Twitpic export is a folder cotaining all your images plus a tweets.txt file.

Tiene dos mejoras que eventualmente voy a migrar a import_goodreads y, con suerte, a otros:

  • agrega el parámetro --tags para definir tags extras a agregar a los posts que se crearán
  • antes de agregar un tag, se fija si antes no existe uno similar. De ser así, usa ese.

En la etiqueta Twitpic se puede ver el resultado luego de ejecutar el comando:

nikola import_twitpic -o posts/twitpic/  -t "Desde el camino, Fotos" dumps/twitpic/
[1] La primera era fue con un Nokia 6132 y mucho ingenio.

Author pages in Nikola v7.7.0

Since version 7.7 Nikola renders author pages for sites with more than one author. Let me talk a little about this.

The first Nikola site I set up was for a group of friend wanting to publish tech stuff online (for example, how to build a 3D printer with recycled elements). I noticed that author names in posts weren't linked to any page. And because this is a very common feature in blogging systems, I implemented it.

The feature can be enabled in conf.py with:

ENABLE_AUTHOR_PAGES = True

As with tags, you can configure the pages path and if you want to list links to the posts or the posts themselves:

AUTHOR_PATH = "reporters"
AUTHOR_PAGES_ARE_INDEXES = False

Additionaly, this is not required, you can add a little bio to each (or some) authors and hide others (this is, don't generate pages for them):

AUTHOR_PAGES_DESCRIPTIONS = {
    DEFAULT_LANG: {
        "Juanjo Conti": "Python coder and writer.",
        "Roberto Alsina": "Nikola father."
    },
}
HIDDEN_AUTHORS = ['Guest']

If you want to link to these pages in your own theme, you can use something like this (Mako example):

% if author_pages_generated:
    <a href="${_link('author', post.author())}">${post.author()}</a>
% else:
    ${post.author()}
% endif

You can see the feature in action in Nikola blog: author page example, all authors page example.

Hope you enjoy it!


Importar tweets al blog

Estos días, en mis ratos libres, además de leer The Martian, estoy haciendo algunas aportes a Nikola.

Algo a lo que le vengo dando vueltas es a la idea de importar tweets a este blog.

Hubo una época (o mejor dicho "hay", porque aún no termina) en la que Twitter mató a muchos blogs: más fácil, más rápido, más corto. Fast food para la era de la información.

Tengo la teoría, y de esto no estoy seguro, de que puedo rescatar mucha historia personal de tweets que escribí y ya olvidé.

Con la página de Twitter podés ir para atrás en tu historia pero, superado cierto límite de tweets ya no podés llegar al principio. Desde hace poco, Twitter te permite bajarse un archivo con todos tus tweets (incluso está acompañado por una aplicación web local con la cual es fácil navegarlos).

Bueno, quiero tomar ese archivo, seleccionar los tweetsccon algún valor e importarlos como posts (tal vez agregados por día? por tema?) en este blog.

Abrí un Issue para esto:

Issue #107

I'm planning to implement import_tweets. Version V0.1 will:

  • read from Twitter provided json files for a user
  • present each tweet asking the user if adding it or not
  • have a non-interactive parameter
  • have a parameter to filter replies
  • generate rst posts, one per day with tweets
  • (probably) download images and include them in the posts
  • Ideas or suggestions?

import_goodreads (plugin para Nikola)

Ayer creé un nuevo plugin para Nikola como parte de mi esfuerzo por centralizar en este nuevo blog estático, distintos contenidos creados a lo largo de los años en distintas plataformas web.

Hoy, luego de algunos ajustes, lo mergiamos.

https://plugins.getnikola.com/#import_goodreads

Este es el README:

README.md

This plugin import Goodreads read books from Goodreads RSS to an existing site.

It:

  • uses the date the user ends to read the book as post date
  • includes user review
  • includes user rating
  • includes a link to the original review
  • uses author name, book title and "Goodreads review" as tags
  • writes output by default in posts/

To Do:

  • include book cover (dowloading the image)
  • add parameters to customize tags and content generated

Estaría bueno que no tenga código repetido con otros plugins: sí.

Estaría bueno que tenga más parámetros: sí.

¡Pero para ser la versión 0.1 está bastante bien!

El resultado en este blog se puede ver en el tag Goodreads review.


Nikola, intento... 3? 4?

Como cada año, vuelvo a intentar pasarme a Nikola. Esta vez, la patada inicial vino por otro lado.

Tengo un grupo de amigos, el LugCOS (originalmente Linux Users Group del Centro Oeste Santafesino) que hace un par de años (desde que nos reencontramos gracias a Whatsapp) vienen reclamándome que vuelva a poner en línea nuestro viejo sitio. Uno quería subir artículos de electrónica, otro una guía sobre cómo armar una impresonar 3D con piezas recicladas de la basura y el resto simplemente me pinchaba por deporte.

Una noche, mientras nos comunicábamos, cual grupo de radioaficionados modernos, me volvieron a mojar la oreja. No aguanté más.

De cero a Nikola en diez minuotas

Entré al Getting Started de Nikola y a lo caballo con anteojeras seguí las instrucciones. Funcionaron de una. Tenía un blog andando en mi máquina. ¿Y ahora? Necesitaba que esté en Internet.

Algo que tenía en claro que no quería, y es por esto que retracé tanto levantar un sitio para el grupo, era encargarme del hosting del mismo. Se me ocurrió, entonces, usar Github Pages y tener en un sistema de control de versiones tanto el código fuente de la página como su versión compilada.

Tunning

El resto fue tunnear un poco el sitio:

Una comunidad con barrera de entrada muy baja

Mientras acomodaba un poco el theme a las necesidades de un blog multi-usuario pregunté cómo se hacía en Nikola para linkear a los posts escritos por un author. Quería que cuando se mostrara el nombre de un autor, por ejemplo bajo el título de cada post, este esté linkedo a todos sus artículos. La respuesta fue que no se generaban páginas por autor, por lo que no se podía. Se me ocurrió que podía hacer una contribución.

Ya había estado aportando cambios menores como pequeños fixes en la documentación, pero esto era algo más grande. Hice un fork del repo y trabajé unas horas en privado. Cuando no supe como seguir, ralsina me sugirió que haga un pull request agregándole WIP (Work in progress) al título: https://github.com/getnikola/nikola/pull/1972.

En pocos días la feature estaba funcionando gracias a los comentarios de los desarrolladores de Nikola, el fin de semana terminé los cambios que me sugirieron y hoy se mergió.

Continuará

Puede ser que este sea el año en el que me pase a Nikola. Realmente quiero hacerlo desde hace rato, quiero una forma simple (para una definición de simple dada por un programador) de publicar mi contenido en la web, pero también quiero otras cosas. Me gustaría por ejemplo, importar "posts" que escribí en distintas plataformas. Este es el plan:

Algo que siempre me tira para atrás es que mi posts de WordPress no se ven muy bien en Nikola apenas los importás. I'll try to not overthink it too much.