Categorias
notas aplicativos

Converter vídeo para GIF animado

Algo que comecei a fazer com mais freqüência é converter vídeos de embriões se desenvolvendo ou de animais marinhos para GIFs animados. Mas como fazer a conversão sem perder a qualidade?

Uma medusa mexendo seus tentáculos. Fonte: Cifonauta.

Bastante tempo atrás encontrei este guia para converter vídeos em GIFs animados de alta qualidade usando a ferramenta FFmpeg. O truque é gerar uma paleta de cores a partir do próprio vídeo para melhorar a qualidade das cores do GIF. Baseado no guia, criei um pequeno bash script para facilitar a minha vida e talvez a sua 😉

Acesse em https://github.com/nelas/gif.sh

Categorias
aplicativos artigos ciência

Buscar artigos da PLOS pelo DuckDuckGo

Ano passado resolvi experimentar a DuckDuckHack, plataforma de desenvolvimento para o buscador DuckDuckGo. A idéia era usar as respostas instantâneas, característica do pato, para encontrar artigos científicos; ou seja, um Google Scholar alternativo.

Apesar de parecer possível, resolvi tentar algo mais simples. Um plugin que usa o API da PLOS para buscar artigos (como esse) e mostrá-los na caixa de resposta instantânea.

Pra buscar basta colocar a palavra “plos” + termo de busca (exemplo acima). O resultado é uma lista com o título e data dos 5 artigos mais relevantes e link direto para o texto. O mouse over mostra os autores e qual revista da PLOS. Este formato foi simplificado ao longo do pull request inicial e finalizado no segundo.

Resposta instantânea para artigos da PLOS no DuckDuckGo.

O código no final é bem simples, uma função em Perl que conecta o API ao Duck e uma função em javascript que lida com a resposta da busca. E a comunidade do pato é bem amigável pra ajudar com qualquer dificuldade no código.

O fato de ser um plugin de um buscador menos usado que o Google restringe um pouco o número de usuários. Talvez eu seja o único e posso contar nos dedos quantas vezes eu usei. Muito mais útil seria se ele buscasse toda literatura científica! Mas enfim,  gosto dele. Acho que é a emoção de conectar serviços usando APIs.

Categorias
aplicativos artigos biologia imagens

Cifonauta, um banco de imagens para a biologia marinha

O Cifonauta foi inaugurado no dia 26 de setembro do ano passado (2011) e completa hoje 1 ano de vida pública. A ideia de um banco de imagens da vida marinha, no entanto, é mais antiga.

Primórdios da galeria de fotos sobre biologia marinha.

A documentação fotográfica faz parte de muitas abordagens de pesquisa e nos 30 anos de CEBIMar muito material foi coletado e estudado. Revistas especializadas e atividades de extensão do centro como cursos, folhetos e palestras são o destino comum deste conteúdo. No entanto, apenas uma pequena parte é publicada desta maneira, o restante acabava nunca vindo a público. São fotos e vídeos acumulados ao longo dos anos e que de certo modo representam a diversidade da vida marinha do litoral norte de São Paulo. Como aproveitar este potencial?

A ideia do Alvaro era criar um banco de imagens para divulgar os organismos documentados no CEBIMar. A primeira versão do site do CEBIMar, por exemplo, já continha uma galeria curada à mão contendo fotos de organismos marinhos separadas por classificação taxonômica.

galeria2008

A segunda versão do site também continha uma galeria ainda maior com cerca de 1000 fotos. Ainda assim, era pouco para o volume de material nos arquivos do CEBIMar. A oportunidade surgiu com um edital do CNPq e assim criamos o Cifonauta.

A ideia é simples. Um banco de imagens sobre biologia marinha abastecido pelos próprios pesquisadores do CEBIMar. Especialistas cujo conhecimento permite enriquecer as imagens com informações adicionais. No caso, nome da espécie, classificação taxonômica, habitat, estágio de vida, modo de vida, tamanho, geolocalização, técnica utilizada, etc. Estes dados permitem não só saber um pouco mais sobre o organismo, mas também filtrar o conteúdo do banco combinando marcadores.

Filtrando conteúdo através de marcadores no Cifonauta.

Outro diferencial do Cifonauta é que não colocamos apenas a melhor foto de cada ser. Uma foto é um recorte espacial e temporal e um organismo é um ser complexo tridimensional. Por isso, colocamos diversas imagens representativas de um mesmo organismo como no Chromodoris paulomarcioi. Todo o material sobre o vida de bolacha também está disponível na página da Clypeaster subdepressus.

Outro exemplo recente da utilidade do banco veio da iniciativa de pesquisadores da meiofauna do CEBIMar (organismos que vivem entre grãos de areia). Eles produziram um filme fantástico chamado Vida Entre Grãos e adicionaram todas as fotos e vídeos utilizados ao Cifonauta. São 538 fotos e 167 vídeos documentando a biologia destes organismos. Tardígrados, ácaros, nemertíneos, poliquetos, quinorrincos, gastrótricos, moluscos – entre outros! Não é qualquer pessoa que já viu um gastrótrico andando por aí… mas agora qualquer pessoa pode. E é esse o ideal do Cifonauta.

O Vida Entre Grãos para quem não viu:

Categorias
aplicativos notas

Mestre em LaTeX de roupa nova

Aproveitando que algumas pessoas me mandaram suas modificações do Mestre em LaTeX nesta semana, resolvi tirar a poeira de lá. Migrei o desenvolvimento para o GitHub, onde mantenho meus programas: github.com/nelas/mestre-em-latex. Agora fica mais fácil pra outras pessoas contribuirem criando um clone ou editando o wiki. O screenshot abaixo é da nova página que fica mais elegante e convidativa: nelas.github.com/mestre-em-latex

nelas.github.com 2012-5-6 1:25:26

Os arquivos foram baixados quase 4 mil vezes desde 2009; não é muito, mas imagine esse tanto em teses empilhadas… 🙂 Agora vem o trabalho de verdade que é incorporar as contribuições e resolver pendências antigas.

Categorias
biologia aplicativos artigos

Gene Fetcher tool no Zim Desktop Wiki

Tenho usado o Zim Desktop Wiki como caderno de anotações faz algum tempo. Ele salva as notas como arquivo texto com marcação wiki permitindo que eu acesse o conteúdo diretamente com outros editores e facilitando o backup (eg, pasta de notas sincronizada no Dropbox).

Comecei a mexer com genes no doutorado e estava guardando as sequências em arquivos texto soltos por aí. Pra manter as coisas organizadas (já que a quantidade de genes começou a aumentar) resolvi tentar guardar cada sequência em uma nota separada no Zim. Assim posso organizar os genes de maneira mais intuitiva, fica mais fácil encontrar o que estou procurando e ainda posso acessar as sequências programaticamente com scripts.

Cada gene pode ter marcadores indicando que aquela página é uma sequência, o organismo, o tipo de gene (relacionado com que processos do desenvolvimento) e o nome mais comum para agrupar genes ortólogos. Com os marcadores fica fácil filtrar as notas. Na imagem abaixo eu cliquei no gene vasa e de cara dá pra ver que tenho as sequências do peixe paulistinha (D. rerio), humanos (H. sapiens) e drosófila (D. melanogaster).

Example of gene sequence in Zim Desktop Wiki importado com o Gene Fetcher.
Example of gene sequence in Zim

O link para a sequência no NCBI também é útil, caso precise voltar lá para checar alguma informação. Por fim tenho a sequência no formato FASTA, que é o que vou usar na maioria dos casos. Criar uma página assim consome alguns comandos, copy/paste e cliques, então fiz um script simples para automatizar isso.

No Zim você pode rodar scripts customizados que interagem com as páginas do caderno de notas. Criei o Gene Fetcher para gerar a página a partir do identificador da sequência. Basta você colar o identificador numa nova página, selecioná-lo com o cursor e rodar. As informações serão adicionadas ao final da página.

Nada muito revolucionário, mas útil. Pelo menos pra mim, por enquanto. Também pode ser usado fora do Zim, é só passar os argumentos certos.

Categorias
aplicativos artigos biologia

Bibliografia viva

Num sábado de manhã de algumas semanas atrás eu caí de paraquedas (online) no Hack4Knowledge, um encontro para criar aplicativos, ferramentas e remisturas que aproveitem os bancos de dados existentes para inovar e enriquecer a criação e disseminação do conhecimento.

Eu já estava fazendo uns testes com o API do Mendeley e resolvi aproveitar a oportunidade para por em prática uma idéia: agregar referências bibliográficas relacionadas com um determinado táxon. Não é uma idéia particularmente inédita nem difere muito de você colocar o nome de um táxon no google ou scopus, mas o fato do banco de dados do Mendeley ser construído por coleções dos usuários permite extrair algumas informações interessantes. Por exemplo, descobrir quais são os artigos mais populares ou criar um trending topics com os grupos do momento baseado na quantidade de leitores e número de publicações.

Living Bibliography Home Page
Página inicial do Living Bibliography

Possuir os dados de artigos (independente da fonte) também possibilita extrair informações interessantes como autores mais ativos em determinado táxon, rede de colaboradores, variação anual no número de artigos relacionados, tópicos mais estudados em cada grupo, etc. Integrando tudo isso e usando ferramentas para visualização de dados complexos seria possível, por exemplo, “ver” buracos no conhecimento ou acompanhar a história do estudo de um organismo.

Imagine se todos os artigos estivessem acessíveis livremente e contivessem informações (metadados) sobre os organismos em questão como informações taxonômicas, ocorrência, coletas, sequências, citações com marcação semântica, tópicos abordados, hipóteses para testar, metodologias, dados brutos, etc. Em instantes qualquer pessoa poderia ter um resumo do conhecimento atual sobre um organismo. Especialmente interessante para definir diretrizes para a pesquisa e evitar gastos de recursos com os mesmos erros; uma otimização da ciência. Isso sem contar na possibilidade de anexar observações, anotações, discussões, questões não resolvidas e outras atividades colaborativas.

Bom, depois de fazer um modelinho da idéia acabei de colocar as funções básicas do agregador para funcionar. Não tem nada do que escrevi acima, apenas uma interface de busca onde você pode usar o nome científico ou nome popular do organismo (em inglês) que você quer ver e uma página por táxon com a lista de referências relacionadas e alguns controles de ordenação. Se o táxon não estiver no banco ele vai buscar as referências na hora, portanto, é necessário esperar um pouco e recarregar a página (pelo menos até eu dar um jeitinho nisso).

Living Bibliography Taxon Page
Página de um táxon no Living Bibliography

Quem se interessar pode testar o Living Bibliography no livingbib.organelas.com. Só lembrando que é totalmente experimental, nada garantido que seus artigos favoritos aparecerão ou que as informações estejam corretas (ainda tem muito artigo duplicado, nome de autor errado, títulos mal formatados, revistas trocadas, e afins no Mendeley). Não sei o quanto vou poder me dedicar, mas o código é aberto e adoraria ouvir idéias e sugestões 🙂

Categorias
aplicativos notas

Mestre em LaTeX v0.2

Acabo de lançar uma nova versão do Mestre em LaTeX! Fiz uma boa limpeza no código e corrigi os poucos (mas importantes) bugs que haviam sido reportados. As principais mudanças foram a melhoria da formatação dos elementos pré-textuais (capa até sumário), o ajuste para que seções comecem sempre nas páginas ímpares e re-estruturação do texto. Veja mais detalhes sobre as atualizações desta versão aqui. Para baixar:

Mestre em LaTeX v0.2 – 2010-05-01 [zip com 502kb]

ou visite o site para mais informações: http://code.google.com/p/mestre-em-latex/

Para a próxima versão deixarei o texto mais didático, já que ficou um pouco bagunçado depois do rearranjo, e adequarei o documento de acordo com as normas da ABNT para a apresentação de documentos acadêmicos.

Desde 29 de janeiro de 2009 a primeira versão foi baixada 767 vezes e pelo menos 2 dissertações foram defendidas com sucesso (essa do gepeto e essa do zué; além da minha ;)). Se alguém tiver notícia de mais alguma me avise. Agradeço a todos que me relataram bugs ou me escreveram, mesmo que só para dizer que o MeL* havia funcionado (ou não) nos seus sistemas. Continuem mandando sugestões!

* apelido carinhoso

Categorias
aplicativos notas

Shell script para backup: nova versão

Outro dia atualizei o que faltava no meu shell script para fazer backup usando o rsync.

Adicionei o wakeonlan para ligar a máquina remotamente (necessário descobrir o HW address da sua máquina de destino e se certificar de que é possível ligá-la remotamente — possível que tenha que ativar essa opção na BIOS), dei uma arrumadinha, incluí a opção de excluir arquivos e pastas do backup (ver abaixo) e adicionei num cron job para fazer um backup diário. Além disso, o script desliga a máquina depois do fim do backup. Aqui está:

#!/bin/bash

# Script para backup via SSH usando o rsync
# Versão 0.8 - 2009/09/05

# # # # # # Configuração # # # # # #

# Mude os parâmetros abaixo, referentes ao seu sistema

# Arquivo log
LOG=/home/user0/.backup`date +%Y-%m-%d`.log

# IP ou hostname da máquina de destino
DESTINO=destino.local

# Usuário no destino
USR=user1

# Diretório de destino
DIR=/home/user1/Backup/

# Diretório de origem
SRC=/home/user0

# Arquivo com lista de arquivos e diretórios
# que não serão incluídos no backup
EXCLUIR=/home/user0/.rsync/exclude

# HW address
HW=00:ee:dd:cc:bb:aa

# # # # # # Configuração # # # # # #

# # # # # # #  Funções # # # # # # #

function ligada
{
# Checar se a máquina de destino está ligada
echo -e "Checando se $DESTINO está ligada..."
/bin/ping -c 1 -W 2 $DESTINO > /dev/null
if [ "$?" -ne 0 ]; then
return 1
else
return 0
fi
}

function run_backup
{
HORA_INI=`date +%s`
echo -e `date +%c` >> $LOG
echo -e "\n$DESTINO ligado!" >> $LOG
echo -e "Iniciando o backup...\n" >> $LOG
rsync -ah --delete --stats --progress --log-file=$LOG --exclude-from=$EXCLUIR -e ssh $SRC $USR@$DESTINO:$DIR
HORA_FIM=`date +%s`
TEMPO=`expr $HORA_FIM - $HORA_INI`
echo -e "\nBackup finalizado com sucesso!" >> $LOG
echo -e "Duração: $TEMPO s\n" >> $LOG
echo -e "--- // ---\n" >> $LOG
echo -e "\nBackup finalizado com sucesso!"
echo -e "Duração: $TEMPO s\n"
echo -e "Consulte o log da operação em $LOG.\n"
}

# # # # # # # Funções  # # # # # # #

# # # # # # # Programa # # # # # # #

# Checar se a máquina de destino está ligada
ligada
if [ "$?" -eq "1" ]; then
echo -e "\n$DESTINO desligado. Tentando acordá-lo..."
wakeonlan $HW
echo -e "\nPacote mágico enviado. Aguarde."
sleep 70
ligada
if [ "$?" = "1" ]; then
echo -e `date +%c` >> $LOG
echo -e "\n$DESTINO desligado." >> $LOG
echo -e "Backup não realizado\n" >> $LOG
echo -e "--- // ---\n" >> $LOG
echo -e "\n$DESTINO desligado."
echo -e "Backup não realizado.\n"
else
echo -e "\n$DESTINO ligado! Começando o backup..."
run_backup
fi
else
echo -e "\n$DESTINO ligado! Começando o backup..."
run_backup
fi

echo -e "Desligando o $DESTINO..."
ssh $USR@$DESTINO 'sudo halt'
echo -e "Pronto. Tchau!"

# # # # # # # Programa # # # # # # #

# # # # # # # Afazeres # # # # # # #
#
#  - Criar alça para quando a transferência falhar (e.g.,falta de espaço)

Meu arquivo exclude, com a lista de arquivos e pastas que não serão incluídas no backup ficou assim:

.thumbnails/
Picasa.ini
Thumbs.db
.local/share/Trash/
.cache/
.gvfs/

Categorias
aplicativos artigos

Shell script para backup usando rsync e ssh em DHCP no Ubuntu

Fiz uma versão nova e mais completa, deste script. Confira aqui.

No meu computador mantenho apenas arquivos essenciais para o trabalho da semana/mês e vou estocando tudo em discos rígidos externos progressivamente. Contudo, como eles são meio desorganizados, queria um jeito prático de fazer backup completo dos arquivos diários de trabalho.

A solução foi criar um script em shell (bash) que fizesse uma cópia exata do meu computador para outra máquina conectada na rede local.

Depois de uma rápida pesquisa vi que o rsync era a ferramenta que estava procurando para o trabalho. Não é preciso muito para conseguir fazer o backup com o rsync, basta usar o seguinte comando (cheque a documentação para entender os argumentos):

rsync -ah --delete -e ssh /home/user1 user2@IPouHostname:/home/user2/Backup/
#nota de precaução: o --delete faz com que os arquivos no destino sejam deletados, caso estejam ausentes na origem

No entanto, foi preciso configurar algumas coisas para que tudo corresse bem nas duas máquinas rodando Ubuntu.

Como minha rede local é DHCP as máquinas não tem um IP estático. Queria rodar o script sem precisar saber o IP do destino usando apenas o hostname (nome da máquina na rede). Quando tentei conectar via ssh usando o hostname original não consegui. Para funcionar é necessário simplesmente mudar o hostname da máquina de destino para hostname.local. Siga estas instruções resumidas abaixo:

  1. Abra o arquivo /etc/hosts com um editor de texto pelo terminal

    sudo vim /etc/hosts

  2. Mude a linha

    127.0.1.1 hostname

    para

    127.0.1.1 hostname.local

  3. Salve o arquivo e abra o arquivo /etc/hostname com

    sudo vim /etc/hostname

  4. Mude o hostname para hostname.local e salve
  5. Reinicie a máquina ou execute:
    1. sudo /etc/init.d/hostname.sh stop
    2. sudo /etc/init.d/hostname.sh start
    3. sudo /etc/init.d/network restart

Com isso foi possível conectar via ssh sem precisar saber o IP, apenas com o hostname. Outra pendenguinha é que o ssh precisa da senha de usuário da máquina de destino para se conectar. Pra evitar isso e conseguir fazer o login remotamente sem precisar digitar a senha siga estes passos (isso permite com que você possa iniciar o backup sem precisar estar por perto, por exemplo deixar agendado para rodar o script 1 vez por semana).

Com isso resolvido abra o script abaixo num editor de texto, edite os detalhes de configuração, salve e execute o script num terminal. Para executar torne o arquivo executável com o comando

chmod 755 backup.sh

e execute com

./backup.sh

Tentei fazer com que meu computador ligasse remotamente (para que nem precisasse ligar a máquina de destino pra fazer backup – o script a ligaria remotamente), mas não consegui. Tem instruções sobre o wakeonlan aqui.

O script abaixo basicamente:

  • Checa se a máquina de destino está ligada (se estiver desligada ele avisa, põe no log e fecha)
  • Se estiver ligada ele executa o rsync (o –delete-before deleta os arquivos do destino antes de copiar os arquivos novos; útil se não houver muito espaço no disco do destino – o padrão é –delete que vai deletando e copiando progressivamente)
  • O terminal mostra todas as operações e calcula a duração do backup. Tudo isso fica registrado num arquivo log

Obviamente sugestões são muito bem vindas! Segue então o script:

#!/bin/bash

# Script para backup via SSH usando o rsync
# Versão 0.1

## Configuração!!! ##
# Mude os parâmetros abaixo, referentes ao seu sistema

# Arquivo log
LOG=/home/user0/.backup`date +%Y-%m-%d`.log

# Destino
# IP ou hostname da máquina de destino
DESTINO=destino.local

# Usuário no destino
USR=user1

# Diretório de destino
DIR=/home/user1/Backup/

# Origem
# Diretório de origem
SRC=/home/user0

## Fim das Configurações!!! ##

# Checar se a máquina de destino está ligada
/bin/ping -c 1 -W 2 $DESTINO > /dev/null
if [ "$?" -ne 0 ];
then
   echo -e `date +%c` >> $LOG
   echo -e "\n$DESTINO desligado." >> $LOG
   echo -e "Backup não realizado\n" >> $LOG
   echo -e "--- // ---\n" >> $LOG
   echo -e "\n$DESTINO desligado."
   echo -e "Backup não realizado.\n"
else
   HORA_INI=`date +%s`
   echo -e `date +%c` >> $LOG
   echo -e "\n$DESTINO ligado!" >> $LOG
   echo -e "Iniciando o backup...\n" >> $LOG
   rsync -ah --delete --stats --progress --log-file=$LOG -e ssh $SRC $USR@$DESTINO:$DIR
   HORA_FIM=`date +%s`
   TEMPO=`expr $HORA_FIM - $HORA_INI`
   echo -e "\nBackup finalizado com sucesso!" >> $LOG
   echo -e "Duração: $TEMPO s\n" >> $LOG
   echo -e "--- // ---\n" >> $LOG
   echo -e "\nBackup finalizado com sucesso!"
   echo -e "Duração: $TEMPO s\n"
   echo -e "Consulte o log da operação em $LOG.\n"
fi

# Afazeres

#  - Incluir em cron job!
#  - Definir como lidar com o arquivo.log (deletar, arquivar, deixar...)
#  - Incluir wakeonlan para ligar o computador se estiver desligado
#  - Desligar máquina de destino após o término do backup
#  - Criar alça para quando a transferência falhar (e.g.,falta de espaço)
Categorias
aplicativos notas

Mestre em LaTeX

Mestre em LaTeX

O Mestre em LaTeX tem como objetivo facilitar a vida de quem está prestes a escrever sua dissertação de mestrado ou tese de doutorado em português. Ele é um modelo de dissertação que contém informações básicas para iniciantes em LaTeX, além de incluir uma série de pacotes úteis para escrever sua dissertação/tese eficientemente na língua portuguesa.

Confira a primeira versão aqui.

O projeto está hospedado no endereço http://code.google.com/p/mestre-em-latex/ onde estou acrescentando informações no wiki e você pode reportar problemas. Além disso, a versão mais recente está disponível via Mercurial.