Skip to content

Instantly share code, notes, and snippets.

View horacioibrahim's full-sized avatar

Horacio Ibrahim horacioibrahim

View GitHub Profile
@horacioibrahim
horacioibrahim / intent_score.sql
Created October 26, 2025 21:22
intent_score.sql
WITH
eventos_base_extraidos AS (
SELECT
visitor_id, session_id, inserted_date, created, event_name, relative_view, items, timeago,
jsonb_extract_path_text(data, 'firstname') AS firstname,
jsonb_extract_path_text(data, 'status') AS session_status,
jsonb_extract_path_text(data, 'element_label') AS element_label,
jsonb_extract_path_text(utm_case, 'argumento') AS argumento_busca
FROM bronze.events, jsonb_array_elements(event_data) AS data
WHERE inserted_date >= EXTRACT(EPOCH FROM NOW() - INTERVAL '${INTERVAL} minutes')
@horacioibrahim
horacioibrahim / reelssearch.txt
Last active November 7, 2025 21:12
reelssearch.txt
https://www.youtube.com/watch?v=dQj6PMmld1U;Como conciliar operação e inovação?; Como parar de errar ao gerenciar inovação e execução e continuar prosperando como antes?;;Módulo II;Avançado;14m;15;4.99
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
@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