~/ezequiasOR on main

$ git log --graph --decorate --all

* HEAD -> mainorigin/maintag: v2026

EzequiasRocha

Analista de Sistemas e Pesquisador no Laboratório de Sistemas de Informação da UFCG. Bacharel em Ciência da Computação pela UFCG e mestrando. O histórico abaixo vai do primeiro repositório de estudos, em 2019, até uma correção de teclado ABNT num projeto open source, em 2026.

  • ~1.110commits autorais em 22 repos
  • 50repositórios públicos
  • 138seguidores no GitHub
  • 2018conta criada em outubro
Foto de Ezequias Rocha
Author
Ezequias Rocha (@ezequiasOR)
Lab
LSI/UFCG
Org
EssentIA (@EssentIA-Agents), agentes de IA, repos privados
Local
Campina Grande, Paraíba

tag: v2026

2026

Merge branch 'open-source/turbo-whisper' into main

open-source/turbo-whisperezequiasOR/turbo-whisperset/2026

fix:prefer xdotool/wtype over evdev for auto-typing

O turbo-whisper é ditado por voz no estilo SuperWhisper: atalho global, waveform em PyQt6, transcrição com OpenAI Whisper em 99 idiomas. Ezequias fez um fork de knowall-ai/turbo-whisper e achou um bug que só aparece pra quem digita em ABNT2.

O texto transcrito era digitado via evdev, que injeta scancodes crus assumindo um teclado US-QWERTY. A posição física da tecla de apóstrofo no US é a tecla de til no ABNT2. Então cada ' do texto chegava na tela como ~.

layout US
layout ABNT2
auto-typing: ordem dos backends (diff condensado da lógica do commit)
@@ def type_text(text: str) -> None: @@
1- # evdev first: raw scancodes straight into uinput
2- if type_with_evdev(text):
3- return
1+ wayland = bool(os.environ.get("WAYLAND_DISPLAY")) \
2+ or os.environ.get("XDG_SESSION_TYPE") == "wayland"
3+
4+ # tools that go through the active keyboard layout
5+ if wayland and shutil.which("wtype"):
6+ if run(["wtype", text]):
7+ return
8+ if shutil.which("xdotool"):
9+ if run(["xdotool", "type", "--clearmodifiers",
10+ "--delay", str(DELAY_MS), text]):
11+ return
12+
13+ # fallback: evdev still sends US-QWERTY scancodes
14+ if type_with_evdev(text):
15+ return
16 if type_with_pyautogui(text):
17 return
18 paste_from_clipboard(text)

A nova ordem

  • Detecta a sessão por WAYLAND_DISPLAY ou XDG_SESSION_TYPE.
  • wtype no Wayland, que digita respeitando o layout ativo.
  • xdotool type --clearmodifiers --delay no X11: solta modificadores ainda pressionados e espaça as teclas.
  • evdev, PyAutoGUI e clipboard continuam como fallback, nessa ordem, pra quem não tem as ferramentas instaladas.

Os outros commits do branch

  • feat: language selection, headless recording, clearer offline error+143 linhas em api.py, config.py e main.py.
  • docs: self-hosted setup notes for Pop!_OSServidor faster-whisper em Docker com CUDA (--gpus all), modelo Systran/faster-whisper-small, porta exposta só em 127.0.0.1, cache do HuggingFace montado como volume, áudio por PipeWire/PortAudio.

tag: v2025

2025

Merge branch 'ensino/algoritmos' into main

ensino/algoritmosezequiasOR/aa2025

feat:nova turma, trilha avançada de consultas em intervalo

Em 2025 a trilha de Aprendizado de Algoritmos volta com turma nova. O formato é o mesmo de 2020: uma lista por semana no vJudge e vídeos gravados por ele resolvendo as questões.

A parte avançada ataca o mesmo problema de três jeitos, o que obriga o aluno a escolher a ferramenta pelo custo, não pelo nome.

  • Segment Tree: consulta e atualização pontual em O(log n).
  • Lazy Propagation: atualização em intervalo adiando o trabalho nos nós, ainda O(log n).
  • Square Root Decomposition e algoritmo de Mo: blocos de √n e consultas reordenadas offline, O((n + q)·√n).

Merge branch 'fast_zero' into main

fast_zeroezequiasOR/fast_zero2025

feat:API em FastAPI onde lint, teste e cobertura são um comando só

CRUD REST de usuários em FastAPI com Pydantic v2. O modelo de entrada não é o de saída: UserSchema recebe (com EmailStr), UserPublic responde sem a senha, UserDB representa o registro e UserList embrulha a listagem. Respostas usam HTTPStatus e o 404 é tratado explicitamente.

O interessante está em volta do código: Python 3.14, Poetry, Ruff com regras de pylint e de estilo pytest em modo preview, e TestClient servido por fixture.

pyproject.toml (trecho)

[tool.ruff.lint]
preview = true
select = ["I", "F", "E", "W", "PL", "PT"]

[tool.taskipy.tasks]
pre_test  = "task lint"
post_test = "coverage html"

task test roda o Ruff antes e gera o relatório HTML do pytest-cov depois. Se o lint falha, o teste nem começa.

tag: v2024

2024

Merge branch 'pesquisa/anes' into main

pesquisa/anesezequiasOR/replication-ANES2024PyTorch

research:replica o ANES, inferência de amizade sem rótulo a partir de check-ins

Replicação de Aspect-oriented unsupervised social link inference on user trajectory data, de Byun, Choi e Kim. Information Sciences, vol. 626, 2023. doi:10.1016/j.ins.2023.01.022

O problema: dado só o histórico de check-ins do Foursquare em Nova York, dizer quem é amigo de quem, sem nenhum par rotulado no treino. A replicação tem cerca de 2.400 linhas de Python em 8 módulos, com model.py sozinho em 776.

1 · Cada check-in vira uma tripla

Usuário, POI, tempo, categoria e geografia ganham embeddings separados de 128 dimensões. O check-in é tratado como uma relação entre aspectos, e as relações são projetadas em hiperplanos no estilo TransH (com variantes TransR e TransD), a mesma família de modelos de grafo de conhecimento.

hiperplano de r w_r h t h⊥ t⊥ d_r

h⊥ = h − (w_rᵀ h) w_r  ·  f(h,t) = ‖h⊥ + d_r − t⊥‖₁

Notação padrão do TransH. O repositório usa distância L1.

2 · O tempo é uma grade de 168 slots

7 dias × 24 horas. O horário de cada check-in é corrigido pelo offset de fuso em minutos antes de cair num slot.

3 · Três perdas

  • Margin loss separa triplas reais de triplas corrompidas.
  • Orthogonal loss mantém o vetor de relação ortogonal ao hiperplano.
  • Norm loss segura a norma dos embeddings.

4 · Amostragem negativa em O(log n)

Negativos são sorteados de uma distribuição não uniforme. Em vez de varrer a lista a cada sorteio, ele monta a CDF uma vez e faz busca binária sobre ela.

# a ideia, em forma mínima
def sample(cdf, u):          # u ~ U(0, 1)
    lo, hi = 0, len(cdf) - 1
    while lo < hi:
        mid = (lo + hi) // 2
        if cdf[mid] < u: lo = mid + 1
        else: hi = mid
    return lo

5 · Protocolo experimental

  • Recortes NYC_20, 40, 60, 80 e 100, cada um com pares verdadeiros e falsos de treino, validação e teste.
  • lr 1e-4, distância L1, 1000 iterações.
  • Variantes: ANES, ANES_GEO, ANES_GEO_YELP, ANES_GEO_Others, LBGC_v4.
  • t-SNE para inspecionar o espaço de embeddings.

Módulos

  • preprocessing.py
  • ANES.py
  • model.py · 776
  • data.py
  • loss.py
  • projection.py
  • graphutils.py
  • utils.py

mainezequiasOR/tmux2024

chore:config de tmux versionada

Completa o ambiente de terminal que começou com o Neovim em 2022.

mainezequiasOR/clone-tabnews2023–24demo

feat:clone-tabnews, Next.js com Postgres em Docker e teste de integração

Um app pequeno montado com o cuidado de um grande. Next.js 13 falando com Postgres pelo driver pg, banco local subido por Docker Compose em infra/compose.yaml, e um endpoint /api/v1/status que é testado de verdade: o Jest faz a requisição e confere a resposta do banco, sem mock.

Deploy na Vercel.

  • infra/compose.yaml: Postgres reproduzível em qualquer máquina.
  • /api/v1/status: versionado desde o primeiro endpoint.
  • Jest: teste de integração contra o serviço rodando.
  • .nvmrc, .editorconfig e Prettier: versão do Node e estilo fixados no repositório.

tag: v2023

2023

Merge branch 'ia' into main

iaezequiasOR/ia-ufcg2022–23Jupyter

feat:quizzes de Inteligência Artificial resolvidos em notebooks

A disciplina de IA da UFCG feita em Jupyter. É o ponto em que o histórico troca de eixo: Python científico (NumPy, Pandas, scikit-learn) entra aqui e volta, com PyTorch, na pesquisa de 2024. No volume por linguagem, Jupyter soma 294 KB.

mainezequiasOR/nvim2022–23Lua

chore:Neovim configurado do zero em Lua

Os 11 KB de Lua do volume por linguagem são isso: um editor montado peça por peça, com servidor de linguagem, parser incremental e git dentro do buffer.

  • LSP
  • Treesitter
  • Telescope
  • Harpoon
  • Fugitive
  • Undotree
  • Trouble
  • refactoring
  • Zen Mode
  • cloak

tag: v2022

2022

tag: v2021

2021

ensino/algoritmosezequiasOR/atal-ufcg2021

feat:ATAL, soluções de Codeforces organizadas por paradigma

Análise e Técnicas de Algoritmos, na UFCG. O repositório não é uma pasta de submissões: as questões estão agrupadas pela técnica que resolve, então ele serve de índice para quem estuda a mesma disciplina.

  • força bruta
  • backtracking
  • guloso
  • divisão e conquista
  • programação dinâmica
  • grafos · BFS/DFS

tag: v2020

2020

Merge branch 'omnistack/nlw' into main

omnistack/nlwezequiasOR/Ecoleta2020 · NLW124 commits dele

feat:Ecoleta, pontos de coleta por geolocalização em API, web e mobile

Marketplace de pontos de coleta de resíduos. Tudo em TypeScript, com o mesmo domínio implementado três vezes.

API

Node e Express, Knex com migrations e seeds sobre SQLite, validação com Celebrate/Joi, upload de imagem com Multer, CORS.

Web

React com TypeScript, mapa em Leaflet via react-leaflet, upload drag-and-drop com react-dropzone, react-router.

Mobile

React Native com Expo, react-native-maps, expo-location, expo-mail-composer, React Navigation.

omnistack/nlwezequiasOR/be-the-hero2020 · Omnistack122 commits dele

test:be-the-hero, API em Express coberta por Jest e Supertest

API

Express, Knex e SQLite, validação com Celebrate. Testes com Jest + Supertest e cross-env para isolar o ambiente de teste.

Web

Front em React.

Mobile

App em React Native com Expo.

omnistack/nlwezequiasOR/DevRadar2020 · Omnistack123 commits dele

feat:DevRadar, devs próximos em tempo real com Socket.io

API

Express com MongoDB/Mongoose e consultas geoespaciais. Socket.io avisa quem está por perto quando um dev novo é cadastrado. Perfil puxado da API do GitHub com axios.

Web

React.

Mobile

Expo com mapa, localização, WebView para o perfil e socket.io-client.

main2020Java · UFCG

feat:primeiros sistemas em Java na UFCG

  • coisa: Controle Institucional da Situação Acadêmica.
  • agenda-de-contatos e controle-de-alunos.
  • audio-speed-controller: extensão de navegador que acelera os áudios do WhatsApp Web. Mesmo ano, problema próprio.

ensino/algoritmosezequiasOR/aa-iniciante2020

docs:trilha iniciante, uma lista por semana e vídeo de cada solução

Começa a ensinar no mesmo ano em que começa a programar web a sério. Montou trilhas semanais de Aprendizado de Algoritmos com listas no vJudge e gravou vídeos resolvendo as questões para os alunos. Esse branch fica aberto até 2025.

  • ad hoc
  • two pointers
  • soma acumulada
  • busca binária
  • fila · pilha · heap
  • set · mapa
  • GCD/LCM
  • crivo
  • aritmética modular
  • exponenciação binária

Merge branch 'web-estudos' into main

tag: v2019

2019

web-estudosWeb-Estudos2019 → 2025479 de 844 commits

docs:Web-Estudos, JavaScript do zero ao avançado

O repositório mais longo do histórico: começou em 2019 e recebeu commits até 2025. Cobre a linguagem pelo caminho difícil, de map/filter/reduce e imperativo contra declarativo até as quatro formas de fazer uma requisição, passando por bundlers, dois frameworks e dois tipos de banco.

  • AJAX: XHR, fetch, axios e jQuery lado a lado.
  • Build: Gulp e Webpack.
  • Front e back: Vue, React, Express.
  • Dados: SQL relacional com joins e agregação, MongoDB com $lookup.
  • Projetos menores: bin2dec, casa-criativa, doe (MaratonaDev).

web-estudosPython-Estudos · ibdmd2019105 commits dele

feat:Python-Estudos, SQL parametrizado antes de qualquer ORM

Banco de dados em Python com consultas parametrizadas, incluindo um exercício chamado literalmente "selecionar sem SQL injection", CRUD e paginação com LIMIT/OFFSET. No mesmo veio, ibdmd guarda datasets para BI: lojas, gerentes e vendas.

tag: v2018

2018

maingithub.com/ezequiasORout/2018

init:Initial commit

Conta criada no GitHub. O primeiro commit autoral nos repositórios analisados vem em 2019.

$ git shortlog -s --author=ezequiasOR --group=ano

Commits por ano

201921
2020207
2021200
2022256
2023172
2024193
202561
20263

cada quadrado = 2 commits, escala real~1.110 commits autorais em 22 repositórios próprios, sem forks2026 = contribuição open source

$ linguist --breakdown repos próprios

Volume de código

JavaScript828 KB
CSS392 KB
HTML330 KB
Jupyter294 KB
Python223 KB
TypeScript55 KB
Java36 KB
Lua11 KB
Vue11 KB
SQL6 KB

Bytes por linguagem nos repositórios próprios. Mede quanto código existe, não domínio.

$ git config --list --show-scope

Stack

[ia-e-dados] pesquisa

Python, PyTorch, scikit-learn, Pandas, NumPy, Jupyter, embeddings de grafos (TransH/R/D), Whisper, faster-whisper

[backend]

FastAPI, Pydantic, Node.js, Express, Next.js API routes, Knex, Mongoose, Socket.io

[frontend-e-mobile]

TypeScript, React, React Native, Expo, Next.js, Leaflet, Vue

[bancos]

PostgreSQL, SQLite, MongoDB, MySQL/SQL

[qualidade-e-infra]

pytest, Jest, Supertest, Ruff, Prettier, Poetry, Docker, Docker Compose, CUDA, Vercel, Git

[ambiente]

Linux (Pop!_OS), Neovim/Lua, tmux, Wayland/X11

$ git remote -v

Contato