Skip to content

Instantly share code, notes, and snippets.

View horacioibrahim's full-sized avatar

Horacio Ibrahim horacioibrahim

View GitHub Profile
@horacioibrahim
horacioibrahim / reelssearch.txt
Last active September 19, 2025 13:11
reelssearch.txt
https://www.youtube.com/watch?v=tuSBC-Wi3QA;ROADMAP Fundamento 101 - O Básico;Roadmaps: da história à estratégia. Aprenda a simplificar e comunicar visão com clareza e impacto;;Fundamentos;Básico;19m;9;4.9
https://www.youtube.com/watch?v=83VwGEke-jk;Por Que o Gerente de Produto Nunca Deve Dar Estimativa de Estado de Pronto!;Gerente de Produto não deve estimar prazos: preserve estratégia, confiança e foco no impacto.;;Dicas;2m45s;-;4.8
https://www.youtube.com/watch?v=CNzAJLD7GpY;O gerente de produto NUNCA deve estimar prazo ou prometer desenvolvimento para clientes.;Neste vídeo, você vai descobrir por que essa prática é perigosa, como prejudica a credibilidade do produto e do time, e qual é o verdadeiro papel do PM;;Dicas;1m17s;-;4.8
https://www.youtube.com/watch?v=oGGY2GBBgAA;3 Coisas Que Um Gerente de Produto NUNCA Deve Dizer Sobre Priorizar!;Priorizar não é apenas organizar uma lista: é alinhar visão, impacto e estratégia. Neste vídeo, você vai aprender quais frases e atitudes o gerente de produto deve evit
@horacioibrahim
horacioibrahim / harden-nginx-drop-ip.sh
Created August 10, 2025 11:30
harden-nginx-drop-ip.sh
#!/usr/bin/env bash
# curl -fsSL https://example.com/harden-nginx-drop-ip.sh -o harden-nginx-drop-ip.sh
# sudo bash harden-nginx-drop-ip.sh
set -euo pipefail
SITES_AVAIL="/etc/nginx/sites-available"
SITES_ENABL="/etc/nginx/sites-enabled"
SELF_DIR="/etc/nginx/selfsigned"
@horacioibrahim
horacioibrahim / setup-ufw.sh
Last active August 9, 2025 13:35
setup-ufw.sh
#!/usr/bin/env bash
# setup-docker.sh — Ubuntu (DigitalOcean)
# 1. Instalar UFW
sudo apt install -y ufw
# 2. Permitir as portas que você vai precisar
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
@horacioibrahim
horacioibrahim / setup-docker.sh
Last active August 9, 2025 14:49
setup-docker.sh
#!/usr/bin/env bash
# setup-docker.sh — Ubuntu (DigitalOcean)
set -euo pipefail
ADD_USER_TO_DOCKER="${ADD_USER_TO_DOCKER:-false}"
SKIP_HELLO="${SKIP_HELLO:-false}"
log(){ printf "\033[1;34m%s\033[0m %s\n" "›" "$*"; }
ok(){ printf "\033[1;32m%s\033[0m %s\n" "✔" "$*"; }
err(){ printf "\033[1;31m%s\033[0m %s\n" "✖" "$*" >&2; }
@horacioibrahim
horacioibrahim / extracao_Azure_devops.js
Last active July 28, 2025 14:00
Extrair informações dos cards para estimar conclusividade
(function () {
const rows = document.querySelectorAll('tr[data-row-index]');
const result = [];
rows.forEach((row) => {
const userStoryCard = row.querySelector('.taskboard-parent-cell .wit-card');
if (!userStoryCard) return;
const codigo = userStoryCard.querySelector('.font-weight-semibold')?.innerText?.trim();
const descricao = userStoryCard.querySelector('.title-text')?.innerText?.trim();
This extension does not collect, store, or transmit any personal data. PlantUML code is processed locally and sent only to the public PlantUML server (www.plantuml.com) for diagram rendering. No user information is shared with third parties.
@horacioibrahim
horacioibrahim / videoControls.js
Created January 26, 2025 12:01
Ativa controle para vídeos VLS
// Copie cole em devtools > console
// Para a console pode-se usar Abra as DevTools do navegador (F12 ou Ctrl+Shift+I).
(() => {
// Seleciona todos os elementos <video> na página
document.querySelectorAll('video').forEach(video => {
try {
// Adiciona controles ao vídeo
video.setAttribute('controls', 'controls');
video.setAttribute('controlslist', 'nodownload'); // Impede download (opcional)
video.removeAttribute('autoplay'); // Remove autoplay
@horacioibrahim
horacioibrahim / _c_document.painless.java
Last active December 11, 2024 17:32
Normalizar documento de usuário em índices e nomes diferentes
if (doc.containsKey('event_name.keyword') && doc['event_name.keyword'].size() > 0) {
String eventName = doc['event_name.keyword'].value;
String apenasNumeros = "";
if (doc.containsKey('user_id.keyword') && doc['user_id.keyword'].size() > 0) {
String userId = doc['user_id.keyword'].value;
if (userId != null && !userId.isEmpty()) {
for (int i = 0; i < userId.length(); i++) {
char c = userId.charAt(i);
if (Character.isDigit(c)) {
@horacioibrahim
horacioibrahim / sql-elastic-sample.bash
Last active November 19, 2024 09:26
Consulta SQL no ELASTIC
POST /_sql?format=txt
{
"query": """
SELECT payload_parsed.externalId, COUNT(*) as ocurrences FROM "TABLE" // "TABLE*"
WHERE payload_parsed.type.keyword = 'MESSAGE_STATUS'
AND event_data.source.keyword = 'ZENVIA'
AND payload_parsed.channel.keyword = 'email'
AND payload_parsed.messageStatus.code.keyword = 'SENT'
AND inserted_date >= NOW() - INTERVAL 48 HOUR
GROUP BY payload_parsed.externalId HAVING COUNT(*) > 2
@horacioibrahim
horacioibrahim / jwt_token_document.java
Last active December 18, 2024 15:00
AgnosticData + Elastic Insights: JWT introspected
String token = null;
// Primeiro, verificar em params._source['utm_case']['token']
if (params._source.containsKey('utm_case') && params._source['utm_case'] != null) {
if (params._source['utm_case'].containsKey('token')) {
token = params._source['utm_case']['token'];
// Processar o JWT se o token for encontrado
int firstDot = token.indexOf(".");