Começo mais uma vez a minha busca por um sistema em que eu possa escrever uma coisa ou outra. Afinal, não dá pra lembrar de tudo e algumas coisas valem a pena deixar registrado.
Esta busca já passou por alguns CMS anteriormente. Drupal, Dokuwiki e Wordpress já passaram pelo meu rol de aplicações que eu não tinha tempo para manter.
Sem a manutenção adequada, meus sites podiam ser hackeados e usados para fins maliciosos. A complexidade desses sistemas sempre deixa buracos que podem ser explorados, e os upgrades também costumam quebrar o conteúdo, plugins, etc. Ou seja, nunca havia tempo pra atualizar o site, e quando havia tempo para pelo menos escrever um post ou outro, o sistema nunca estava em condições de recebê-lo.
Hoje em dia, no entanto, vem crescendo a onda de geradores de sites estáticos. O principal chamativo desses programas é que os sites gerados são estáticos, ou seja, são compostos apenas de HTML, CSS e outros arquivos que podem ser baixados sem a necessidade de intervenção por parte do servidor.
O que isso quer dizer, em uma linguagem mais técnica, é que:
- Até o servidor mais simples pode hospedar o site, o que diminui a complexidade da instalação e manutenção
- O carregamento das páginas é muito rápido, já que pode ser feito apenas enviando os arquivos diretamente para o cliente
- É mais fácil ainda utilizar recursos de otimização já disponíveis em navegadores e servidores como caching em vários níveis
- Os vetores de ataques através do próprio site são praticamente eliminados
- É possível usar um sistema de versionamento (Git ou Mercurial, por exemplo) para manter um controle sobre as modificações tanto do conteúdo quanto dos arquivos de saída (site gerado)
As desvantagens também são óbvias:
- Não dá pra gerar conteúdo dinamicamente, a menos que seja feito client-side, por exemplo através de Javascript. Isso impede a criação de ferramentas que precisam ser executadas no servidor
- É difícil controlar acesso a áreas restritas
No entanto, tais desvantagens podem ser diminuídas ao usar uma solução híbrida. Mais importante é que às vezes elas nem se aplicam, como é o caso de um blog, em que o conteúdo é praticamente todo estático.
Assim, resolvi portar o meu conteúdo para um desses sistemas.
A escolha, naturalmente, foi por um gerador baseado em Python. A intenção era usar uma linguagem de markup mais difundida, mas eu também precisava de algo que suportasse textos com um formato mais científico, como os artigos que eu costumo escrever em LaTeX. Acabei buscando um sistema que suportasse o Markdown e reStructuredText, mas também buscava algo que permitisse a conversão a partir de notebooks do IPython. O Markdown é a linguagem de markup da moda, que é bastante simples e legível. Muito boa para escrever texto sem muitas firulas como gráficos, equações, etc. No entanto, sua simplicidade peca por não dispor de muitos recursos, alguns dos quais eu vou precisar, como referências cruzadas, referências a equações, etc. Por isso eu também queria o suporte ao ReST. E por fim eu queria suporte aos notebooks do IPython para que eu pudesse escrever how-to's com códigos embutidos junto aos resultados.
Fiz algumas buscas e acabei ficando no Pelican, apesar da licença dele ser GPL (eca!). Até fiz alguns testes com o Nikola, mas não consegui adaptar sua estrutura de geração para o que eu precisava, e a documentação consegue ser pior que a do Pelican.
Enfim, agora estou portando o conteúdo dos meus sites antigos para Markdown ou ReST. Estou fazendo isso aos poucos, encontrando e tentando resolver uma série de incompatibilidades de plugins e até fazendo os meus próprios. Isso vai levar algum tempo, mas espero que em breve eu possa escrever conteúdo de verdade.
Para a migração, estou usando algumas páginas bem úteis:
Blogs:
- http://nafiulis.me/making-a-static-blog-with-pelican.html
- http://peterwittek.com/academic-website-with-pelican.html
- http://www.notionsandnotes.org/tech/web-development/pelican-static-blog-setup.html
- http://jakevdp.github.io/blog/2013/05/07/migrating-from-octopress-to-pelican/
- http://proven-inconclusive.com/blog/scientific_blogging_with_pelican_and_pandoc.html
Software e plugins:
- http://duncanlock.net/blog/2013/05/29/better-figures-images-plugin-for-pelican/
- http://www.codedread.com/scour/
- https://github.com/jakevdp/PythonicPerambulations/blob/master/pelicanconf.py
- http://livereload.readthedocs.org/en/latest/
Cheatsheets:
- http://docutils.sourceforge.net/docs/user/rst/cheatsheet.txt
- http://fortawesome.github.io/Font-Awesome/cheatsheet/
- https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet
- http://sourceforge.net/p/pelican-edt/wiki/markdown_syntax/
- http://daringfireball.net/projects/markdown/syntax
Documentação:
- http://docs.getpelican.com/en/3.6.3/settings.html
- http://docs.getpelican.com/en/3.6.3/plugins.html
- http://pythonhosted.org/Markdown/siteindex.html
- http://pygments.org/docs/lexers/
Discussão: