Sempre que vou iniciar uma sessão de trabalho — em bom português, sentar para trabalhar — em algum projeto de programação ou escrita de um artigo, há uma série de ações repetitivas:
- Usando o terminal de comando, navego até a pasta do projeto em questão
- Obtenho a última versão do projeto no GitHub
- Abro os arquivos de LaTeX no Emacs e os programas em Python no Visual Studio Code
- Abro o Sourcetree, para gerenciar as modificações que eu vou fazendo
- Abro arquivos de referência (PDF de alguma documentação, por exemplo)
Ao longo da minha sessão, vou trabalhando, e periodicamente usando o supra-citado Sourcetree para registrar o que vou fazendo. Nesse período, invariavelmente meu celular está em modo Não perturbe e estou escutando a trilha sonora de algum filme, série ou jogo no Deezer.
Quando termino de trabalhar, por cansaço ou por ter de fazer outra atividade, também há série de atividades repetitivas:
- Fecho todos os arquivos abertos no começo
- Sincronizo minha versão atual do trabalho com a versão no GitHub.
Esse ciclo de abrir programas – trabalhar – fechar programas se repete algumas vezes ao longo de dia, de maneira que criei um sistema de automação dessas tarefas. Já falei aqui sobre como escrevi minha tese de maneira eficiente, onde automatizei algumas tarefas; o sistema que descrevo neste post é mais geral.
Um aviso: este post é bastante técnico e requer o uso do terminal de comando, em particular o sistema Git for Windows, que instala a shell Bash e muitos utiliários como programas nativos do Windows; para macOS e Linux, Bash e aplicativos de terminal já estão instalados. Se você se interesse por computação científica e quer aprender mais, existem muitos tutoriais disponíveis sobre como usar e configurar Bash, o meu canal preferido no YouTube para esse assunto é o do Corey Schafer. Os exemplos que vão mostrar aqui se aplicam a Windows, e minha configuração está disponível no GitHub.
Mesmo que o leitor não esteja familiarizado com nada disso, pode ler para tentar entender como eu automatizo algumas tarefas e ter ideias para facilitar a sua vida.
A base do meu sistema é um pequeno utilitário Bash chamado prm
, que permite definir “procedimentos” de “começar” e “parar” um projeto.
Vamos a um exemplo prático. No momento estou trabalhando em um paper sobre perfis magnéticos para refrigeradores magnéticos. Após instalar prm
usando as instruções do repositório, crio um projeto no terminal usando:
prm add pprof
pprof
é uma abreviação de “paper profiles” (é assim que meu cérebro funciona). Esse comando cria dois scripts, em uma pasta padrão do prm
(que pode ser mudada) abre-os no editor de texto padrão.
O primeiro script,start.sh
, define o que é feito ao começar a trabalhar no projeto:
cd $HOME/latex-writing/paper-magnetic-profiles/ | |
# sync repo | |
git pull origin master | |
# open Visual Studio Code to edit and run scripts | |
code -n . | |
# Sourcetree is a Git client | |
SourceTree.exe | |
# we can also open reference files | |
start Outline_Paper_Profiles.pdf | |
# I prefer to use emacs for LaTeX files | |
emacs PaperMagneticProfiles_JBSMSE.tex |
O segundo script, stop.sh
, é executado quando termino de trabalhar no projeto:
# Sincroniza de volta mudanças feitas | |
git push origin | |
# ver explicações abaixo para esses comandos | |
cf PaperMagneticProfiles_JBSMSE.tex | |
closew "paper-magnetic-profiles - Visual Studio Code" | |
closew "Sourcetree" | |
closew "Outline_Paper_Profiles" |
No script acima, cf
é uma função que fecha um arquivo no Emacs, que está definida em ~/.bash_profile
.
# function to close the buffer corresponding to a given file in emacs | |
# cf = close file | |
function cf() { | |
emacs -e "(if (get-buffer \"$1\") (kill-buffer \"$1\"))" | |
} |
e closew
é um comando que fecha janelas usando AutoHotKey:
; This script closes the window name passed as argument, e.g. | |
; AutoHotkey.exe closewindow.ahk "Visual Studio Code" | |
; To match strings anywhere in the window title | |
SetTitleMatchMode 2 | |
If (WinExist(A_Args[1])) | |
WinClose |
que é definido como um atalho na forma (dentro de .bash_profile
).
alias closew="AutoHotkey path/to/closewindow.ahk"
Como toda automação, apesar de exigir um pouco de trabalho, estes hacks facilitam muito o trabalho e deixam minha mente livre para se concentrar no que é necessário. Por exemplo, quando quero começar a trabalhar no paper, abro uma janela do Git Bash e digito:
prm start pprof
e tudo fica pronto na minha frente. Mais importante que a abertura dos programas, no entendo, é o recado ao meu cérebro, quando digito o comando acima, de que é hora de começar a trabalhar no paper.
Quando é hora de parar, digito
prm stop pprof
e tudo se fecha, deixando meu computador pronto para outras tarefas.