______/\\\\\\\\\\\\\__________/\\\\\________/\\\\____________/\\\\________/\\\\\______
_____\/\\\/////////\\\______/\\\///\\\_____\/\\\\\\________/\\\\\\______/\\\///\\\____
_____\/\\\_______\/\\\____/\\\/__\///\\\___\/\\\//\\\____/\\\//\\\____/\\\/__\///\\\__
_____\/\\\\\\\\\\\\\/____/\\\______\//\\\__\/\\\\///\\\/\\\/_\/\\\___/\\\______\//\\\_
_____\/\\\/////////_____\/\\\_______\/\\\__\/\\\__\///\\\/___\/\\\__\/\\\_______\/\\\_
_____\/\\\______________\//\\\______/\\\___\/\\\____\///_____\/\\\__\//\\\______/\\\__
_____\/\\\_______________\///\\\__/\\\_____\/\\\_____________\/\\\___\///\\\__/\\\____
_____\/\\\_________________\///\\\\\/______\/\\\_____________\/\\\_____\///\\\\\/_____
_____\///____________________\/////________\///______________\///________\/////_______
O POMO é um temporizador desenvolvido com o objetivo de oferecer uma maneira simples de aplicar a técnica Pomodoro, uma estratégia de gerenciamento de tempo popular. Além disso, o projeto possibilita a integração do temporizador com outros programas, transmitindo dados por meio de sockets. O Pomo também inclui um módulo específico para análise de dados, proporcionando uma visão mais aprofundada do uso do temporizador.
POMO fornece uma interface gráfica para usuários noobs. Para utilizá-la, você pode executar o comando
$ python3 -m pomo-gui
# OR
$ python3 -m pomo-gui [parameters]
Os parâmetros disponíveis são:
Parâmetro | Descrição |
---|---|
-h, --help | Show help message and exit |
-dm, --darkmode | Run window in dark mode |
-w, --worktime <time in seconds> | Set the worktime |
-b, --breaktime <time in seconds> | Set the breaktime |
-db, --database <path> | Set the path to database |
-t, --tag <tag> | Set the tag to be used to identify the timer |
Ao inicializar o pomo-gui
, um processo do módulo pomo será executado em background até que o pomo-gui
seja finalizado.
O módulo pomo-gui
aceita também o parâmetro -c, --client
, para o caso de já haver um processo do módulo pomo
executando em background. Esse parâmetro impedirá que outro processo seja executado.
Em determinadas partes da interface, a interação pode ser feita através do mouse:
- Click com o scroll do mouse no temporizador: Ativa ou desativa o bloqueio de incremento e decremento do timer
- Scroll do mouse em cima do temporizador: Incrementa ou decrementa o timer, de acordo com a direção do acionamento do scroll
Além disso, há os botões:
- : Pause/Resume
- : skip para finalizar o breaktime ou worktime atual e pular para o próximo modo
- : alternar entre o modo claro e o modo escuro da janela
As cores do modo escuro utilizam a paleta do tema Dracula.
Pomo-GUI em modo claro | Pomo-GUI em modo escuro |
---|---|
Na imagem acima, a palavra other
abaixo do temporizado é a tag definida para o timer atual. Essa tag pode ser atualizada com o serguinte comando:
$ python3 -m pomo tag <new_tag>
Por fim, o ciclo em volta do relógio é preenchido à medida que o tempo configurado passa.
Em sistemas GNU/Linux, você pode criar um atalho para o pomo-gui
, com o intuito de não precisar abrir o terminal para inicializar a aplicação. Para isso, crie um arquivo chamado pomo.desktop
e grave o código abaixo nele (Não esqueça de corrigir o caminho de Icon
)
[Desktop Entry]
Name=Pomo
Exec=python3 -m pomo-gui
Icon=/caminho/para/POMO/data/img/tomato.png
Type=Application
Categories=Productivity;
Mova o arquivo pomo.desktop
para o seguinte diretório ~/.local/share/applications/
.
Por fim, abra o terminal e adicione o projeto ao path do seu SO (isso é necessário para que o comando python3 -m pomo-gui
seja reconhecido sem a necessidade de determinar o caminho completo).
$ export PYTHONPATH=$PYTHONPATH:/caminho/para/POMO
Após isso, o seu SO já deve ser capaz de localizar a aplicação através do launcher de aplicativos.
Como será exposto posteriormente, a arquitetura de POMO opera com mestres e escravo. Escravo é o processo que executará em background aguardando o envio de comandos dos mestres. Dessa forma, o primeiro passo é iniciar uma instância em background do módulo pomo
.
Crie uma instância de execução do módulo Pomo com o seguinte comando:
$ python3 -m pomo
A instância que executa em background também pode ser inicializa definindo alguns parâmetros. Execute python3 -m pomo --help
para visualizar as opções disponíveis. Esse parâmetros também são configuráveis no arquivo pomo/config.py
.
OBS.: A duração de worktime e breaktime são dadas em segundos. Por exemplo:
$ python3 -m pomo --worktime 2700 --breaktime 300 --database ~/Documents/pomo.db
OBS.: Talvez seja interessante adicionar o projeto ao path do seu SO. Isso permitirá que você execute os comandos a partir de qualquer diretório. Para isso, você pode modificar o comando abaixo de forma que o caminho corresponda ao caminho onde esse projeto foi clonado:
$ export PYTHONPATH=$PYTHONPATH:/caminho/para/POMO
Uma vez que existe uma instância módulo pomo
rodando em background, o gerenciamento do temporizador pode ser realizado, iniciando worktimes ou breaktimes, ou pausando o relógio:
$ python3 -m pomo toggle # Pause ou ative o relógio
$ python3 -m pomo end # Finalize o worktime ou breaktime atual
O temporizador opera em ciclos, ou seja, ao finalizar um worktime, inicializamos um breaktime, e ao finalizar um breaktime, um worktime é iniciado.
O tempo do relógio pode ser incrementado ou decrementado. Por exemplo:
$ python3 -m pomo time +60 # Incrementa o relógio em 1min
$ python3 -m pomo time -120 # Decrementa o relógio em 2min
O incremento e decremento do relógio pode ser ativado ou desativo utilizando o comando abaixo:
$ python3 -m pomo lock # Alterna o bloqueio do incremento e decremento do relógio
A arquitetura do POMO foi baseada em uma estratégia de mestre e escravo. O escravo é o processo do módulo pomo
que executa em background. Esse processo fica encarregado de receber e executar os comandos enviados pelo mestre. O mestre, por outro lado, são execuções do módulo pomo
acompanhadas de parâmetros que definem quais comandos serão executados. Ao contrário dos escravos, os mestres são efêmeros, isto é, não executam em background por muito tempo, e o tempo de execução de seus processos é somente o necessário para estabelecer comunicação com o escravo e transmitir os comandos.
As comunicações entre mestre e escravo são feitas por meio de sockets UNIX. A figura abaixo ilustra a arquitetura. As setas representam os fluxos de comunicação entre os módulos.
O banco de dados é um arquivo .db
, criado (caso não exista) em um diretório default ou onde o usuário determinar.
Pomo é o módulo principal do programa. As principais classes desse módulo são:
- DBManager: Acessa e manipula o banco de dados
- LogManager: Gerencia as mensagens de log. O arquivo de log pode ser localizado em
/tmp/pomo.log
- Status: Gerencia cada worktime e breaktime
- Timer: Relógio que contabiliza o tempo a cada instante
- Pomodoro: Executa todos os comandos enviados pelo usuário e fornece os dados do programa através de sockets.
Pomo pode ser integrado com o Polybar. Um exemplo de configuração:
[module/pomodoro]
type = custom/script
exec = python3 -m polybar-pomo
tail = true
label = %output%
format-prefix-foreground = ${colors.foreground-alt}
format-underline = ${colors.underline}
click-left = python3 -m pomo toggle
click-right = python3 -m pomo end
click-middle = python3 -m pomo lock
scroll-up = python3 -m pomo time +60
scroll-down = python3 -m pomo time -60
Fornece uma interface gráfica para gerenciar o módulo Pomo.
A principal função desse módulo e fazer uma analise dos dados disponíveis no banco de dados, de forma que o usuário possa avaliar a sua performance com relação ao uso da técnica Pomodoro.
Para obter os gráficos de performance, analytics
pode ser executado com as datas de início de fim da análise no formato YYYY-MM-DD. Por exemplo, o comando abaixo realiza uma avaliação dos dados coletados no intervalo 2024-03-10 até 2024-03-20
$ python3 -m analytics 2024-03-10 2024-03-20
Há também a opção de indicar o número de dias no passado. Por exemplo, o comando abaixo avalia os dados coletados nos últimos 7 dias.
$ python3 -m analytics 7
As análises incluem a quantidade de horas em que a técnica Pomodoro foi empregada em cada dia do intervalo dado e também a quantidade de horas empregada em cada tipo de tag.