Apresento: dangolino
Já fazia algum tempo que eu queria escrever meu próprio mecanismo de blogging, mas hora a preguiça, hora a falta de tempo me impediam de faze-lo e então eu acabava por protelar isso e dar atenção a outras coisas, até alguns dias atrás quando eu resolvi colocar essa minha idéia em prática.
Inicialmente eu comecei a escrever usando node.js, mas eu encontrei alguns obstáculos pelo caminho que me levaram a crer que aquela não era a tecnologia mais adequada para este tipo de app, talvez meu conhecimento em node.js é que foi o empecilho para eu continuar usando ele, sendo assim congelei o projeto usando node.js e o reiniciei usando ruby o que ao meu ver foi uma decisão muito acertada.
O que eu queria inicialmente era dispor de um meio que eu pudesse criar os templates HTML e então a partir destes gerar os arquivos HTML estáticos individualmente para cada post via linha de comando, então passei um WD40 nas minhas habilidades de programador ruby que estavam bem enferrujadinhas e mandei ver.
Hoje o projeto permite escrever posts usando HTML puro ou usando Markdown que no momento da criação do arquivo estático é parseado e em seguida mesclado com o template.
Para os templates eu usei o mustache que é e suas próprias palavras "logic-less templates" e tem o mínimo de recursos possíveis, o que para os meus objetivos se encaixou como uma luva.
Achei que não fosse perguntar.
Inicialmente é preciso instalar as seguintes gems:
sequel (se você for usar o script de importação de posts do wordpress)
mustache (para os templates)
optiflag (para parse de parâmetros CLI)
ruby-mysql (também somente se for importar posts do wordpress)
redcarpet (para suporte ao markdown)
Após instalar as gems, você pode clonar o projeto diretamente do github:
git clone git://github.com/adlermedrado/dangolino.git
Você pode fazer o download do pacote diretamente no site do github caso não queira clonar.
É necessário fazer algumas configurações
O dangolino tem um único arquivo de configuração que é bem simples de ser entendido, então vou poupar tempo apenas colocando seu conteúdo aqui.
O arquivo que deve ser editado é esse: /lib/dangolino/config/settings.yml
root_dir: /Users/adler/dev/projects/dangolino
generate_dir: /Users/adler/dev/projects/dangolino/site
template_dir: /Users/adler/dev/projects/dangolino/templates
lib_dir: /Users/adler/dev/projects/dangolino/lib
url: http://your-url
pass: ""
dbname: my_db
Eu criei 3 templates para meu projeto:
post.mustache
all_posts.mustache
O arquivo index.mustache será usado para gerar o index.html do meu site, nele eu coloquei para que fossem listados um texto introdutório e fossem listados os quatro último posts e seu conteúdo é esse:
<div>Oi, seja bem vindo ao meu site :)</div>
<h3>{{{date_1}}} - {{{title_1}}}</h3>
<p>{{{link_1}}} </p>
<h3>{{{date_2}}} - {{{title_2}}}</h3>
<p>{{{link_2}}} </p>
<h3>{{{date_3}}} - {{{title_4}}}</h3>
<p>{{{link_3}}} </p>
<h3>{{{date_4}}} - {{{title_4}}}</h3>
<p>{{{link_4}}} </p>
<p>© Adler Medrado 1996-2012 | powered by <a href="http://github.com/adlermedrado/dangolino">dangolino</a> </p>
O arquivo all_posts.mustache irá gerar o all_posts.html, neste arquivo serão listados todos os posts publicados até o momento:
<h1>Lista de todos os meus posts publicados</h1>
<p>Enjoy :)</p>
<h2>{{{date}}} - {{{title}}}</h3>
<p>{{{link}}} </p>
<p><a class="btn btn-small" href="{{{link}}}">ler post »</a></p>
<p>© Adler Medrado 1996-2012 | powered by <a href="http://github.com/adlermedrado/dangolino">dangolino</a></p>
E por fim, o arquivo post.mustache irá gerar o arquivo de cada post individualmente; Exemplo: Este post chama-se Apresento o Dangolino então o nome do arquivo gerado será apresento-o-dangolino.html:
<h1>{{{post_title}}}</h1>
<p>Post date: {{{post_date_published}}}</p>
Se você criar estes 3 templates e configurar o settings.yml você já poderá começar usar o dangolino se você quiser.
Além desses arquivos, o dangolino gera também um arquivo de RSS :-)
Para gerar o arquivo basta executar um simples comando:
ruby dangolino.rb -year 2012 -month 05 -file ~/site/dango.markdown -link apresento-o-dangolino -title "Apresento: dangolino" -format markdown
Para importar os posts que estão no wordpress:
ruby dangolino-import.rb
Eu ainda quero implementar algumas funcionalidades nele, melhorar pontos do código afim de torna-lo mais genérico, escrever os testes unitários, importar do wordpress.com (hoje só importo de wordpress local), posterous e implementar maneiras que tornem o deploy dos arquivos gerados e/ou modificados a cada novo post mais simples e também automatizados, nesse último caso eu tenho algumas idéias para fazer o deploy usando capistrano, git e rsync, com o tempo espero implementar tudo isso e muito mais.
Como já me perguntaram isso mais de uma vez desde que comecei a comentar com algumas pessoas sobre o projeto, eu resolvi acrescentar este bloco de texto neste post.
Se já existe jekyll, wordpress, posterous, etc., porque diabos eu escrevi o meu? A resposta é simples: Porque eu posso e porque eu quero. :-) Eu escrevi porque eu quero tornar o processo de gerenciamento dos meus blogs o mais simples possível, como eu já tenho o ambiente ruby configurado no meu computador, isso não é problema para mim e como os arquivos gerados são todos HTML puro fica fácil de eu colocar o site aonde eu quiser além de tornar o processo de backup mais simples por se tratarem apenas de um monte de arquivos.
Bom, é isso pessoal. Esse é um projeto que eu criei para mim, por isso pode ser que se você tentar experimenta-lo ele não sirva em nada para suas necessidades, nesse caso você pode tentar outras alternativas ou fazer um fork e adapta-lo às suas necessidades.
Eu escrevi este post para mostrar o meu novo xodó pra galera e pra compartilhar com quem interessar possa.
Ah, outra pergunta que me fizeram é: "O que é dangolino? De onde você tirou esse nome?" - Bom, meu filho mais novo se chama Dan e eu sempre o chamo pelo apelido de dangolino e na hora que eu criei o projeto no github eu precisava de um nome e o primeiro que me veio a cabeça na hora foi esse. No final deu certo porque tanto o Dan menino quanto o dangolino app, são dois dos meus xodós. :D