Paulo Henrique Rodrigues Pinheiro

Um blog sobre programação para programadores!


Gerablog, um modesto gerador de blog estático

Liberado no RubyGems o gerador de blog estático que uso para este blog: Gerablog.

I'm GeraBlog Image created by https://robohash.org/

No post em que falo sobre a gem Tenjin, expliquei como funciona o script que comecei a usar para gerenciar esse blog.

Há algum tempo, comecei a salvar os textos que publico como arquivos Markdown. E isso me facilitou muito quando eu queria usar algum novo sistema para meu blog.

O simples script que iniciou essa brincadeira, transformou-se (comparando a ele) em um amontoado de código, como algumas classes e gems a mais. Comecei com isso: Gist para o peimiro gerablog.rb.

A primeira versão do blog eu gerei com shell-script, mas conforme eu ia tendo ideias, como a de gerar automaticamente o RSS, a coisa foi complicando de tal forma que precisei partir para uma linguagem mais adequada.

E parti para a criação de algo que eu pudesse liberar como free-software.

Foi aí que a tormenta começou. Estimei que em dois dias transformaria o script inicial em um projeto minimamente organizado no GitHub. Santa Inocência! Foram mais de duas semanas em que isso tomou grande parte de meu tempo, inclusive tempo de trabalho.

Mas como preciso aprender Ruby para o trampo, fui adiante. E aprendi muito. Eu prefiro aprender tendo em conta algo prático para resolver. Não é a melhor forma, mas é o que funciona melhor para mim. Crianças, não sigam meu exemplo. Sempre se esforcem para aprender os fundamentos das coisas!

Princípios

Conhecendo um pouco do rails, resolvei também ser metido a besta e escrever um sistema com opiniões. Só que sem muita brecha para personalizações... O sistema espera uma estrutura rígida de diretórios e tem convenções para o texto e até mesmo para o nome dos arquivos.

Na raiz de seu blog, existem apenas os diretórios que indicam as categorias dos textos. Por exemplo, nesse blog tenho:


C Currículo Diversos Javascript Perl ProgramadorBipolar Python Ruby Rust

Em cada um deles existe um subdiretório images, onde as imagens para cada texto são salvas.

Os arquivos devem ser salvos no formato YYY-MM-DD-nome-do-arquivo.md. Em geral, nome-do-arquivo é o título do texto, mas sem acentuação ou pontuação.

No arquivo com o texto, a primeira linha deve ser o título do texto, por exemplo, # Título do texto, a segunda linha deve estar em branco, e a terceira deve conter um resumo do texto, como por exemplo, ## Resumo do texto. as Marcas # e ## são obrigatórias.

Para o resto do texto, use Markdown à vontade.

É gerado um feed.xml geral, e para categoria, em seu diretório, é criado um index.html e um feed.xml contendo apenas as entradas da categoria.

Criando um blog

O sistema não é uma gem para ser usada em seus programas (até se pode fazer isso), o seu uso é pela linha de comando com o executável gerablog.

Para criar um novo blog, execute gerablog --new ~/meublog, por exemplo. Ele irá criar a seguinte estrutura de arquivos:


➤ tree ~/meublog
/home/paulohrpinheiro/meublog
├── assets
│   └── css
│       └── gerablog.css
├── gerablog.conf
├── output
├── templates
│   ├── categories.rbhtml
│   ├── category.rbhtml
│   ├── feed.rbxml
│   ├── footer.rbhtml
│   ├── header.rbhtml
│   ├── index.rbhtml
│   └── post.rbhtml
└── texts

Em assets, se quiser incluir imagens e CSS e Javascript, sinta-se desimpedido. O arquivo assets/css/gerablog.css é o super CSS que consegui criar (sim, estou me esforçando para aprender).

Como indica o nome, gerablog.conf é a configuração. Nem rele nesse arquivo!

O diretório output é o local em que ficará o blog gerado, como tudo que precisa, inclusive cópia da pasta assets.

Em templates temos os templates usando Tenjin. Altere como preferir, eles serão a base de seu blog.

Já em texts devem estar os seus textos, organizados por categoria (diretórios) e, se necessário, imagens, como explicado antes.

Gerando o conteúdo estático

Para criar seus arquivos html e RSS, execute o comando


gerablog --generate ~/meublog

Isso criará o diretório output com tudo que é necessário para o blog.

Confissão

Ao escrever esse texto, ainda estava usando o velho script. A consciência pesou, e agora esse blog finalmente é gerado pelo Gerablog.