Escola fantasma e R$800k — fraude desmascarada

Quer ver como uma fraude foi desmascarada pela comunidade? 😳👇

• O que rolou:
• Dados falsos — uma 'escola fantasma' registrada como recebendo verba de R$800k 💸

• Como descobriram:
• Front-end bonitinho, mas o back-end não conseguia ler os dados
• O código nem foi revisado antes de publicar — deu ruim 🧾❌

• Quem expôs:
• Pessoas sérias da comunidade e...

#fraude #auditoria #comunidade #codigo #escolafantasma #transparencia #MorningCrypto

Llevo rato viendo esto de los Blog Roll y no me parece una mala idea. Inauguremos este articulo con mi pagina propia de /blogroll  y una herramienta que hice para facilitar la tarea: OPML to Blog Roll Esta es una herramienta sencilla, diseñado en un modelo híbrido porque si algo me desespera, es que un programa no pueda ser automatizado desde la linea de comandos. En ese sentido, puedes utilizar este script desde la linea de comandos y desde una pequeña interfaz gráfica. Por supuesto, también odio tener que hacer demasiados preparativos para usar un código, asi que trata de ser lo mas nativo posible, por eso la elección de tkinter. (¿Este programa es entonces nacido del odio?)

Este script en python es bastante manual por lo descrito anteriormente. Esta basado en lo que vi en el blog de DanQ quien tiene su propio código, que se integra de forma semi automática con FreshRSS. Me encantan los iconitos pixelados que pone el generador de el, pero no tengo idea de donde los saca ni he visto a nadie por este ecosistema hacer uso de ellos.

OMPL to Blog Roll es un script versátil diseñado para convertir archivos de suscripciones RSS (OPML/XML) en formatos listos para publicar en la web. Ideal para crear «blogrolls» o directorios de lectura en WordPress, blogs estáticos o documentación personal.

Este script permite transformar tus exportaciones de FreshRSS (o cualquier lector RSS) en piezas de contenido visualmente atractivas o estructuradas.

Funcionalidades

  • Entrada Dual: Soporta archivos .opml y .xml.
  • Modo Híbrido:
    • Ejecución por línea de comandos para automatización.
    • Interfaz Gráfica (GUI) con Tkinter para un uso sencillo.
  • Formatos de Salida:
    • HTML: Genera tarjetas con bordes redondeados y diseño responsivo utilizando CSS Inline (100% compatible con WordPress y otros CMS que bloquean etiquetas <style>).
    • Markdown: Crea tablas limpias escapando caracteres especiales (como |) para evitar errores de formato.
    • JSON: Exporta una estructura de datos limpia para desarrolladores. Portabilidad: No requiere librerías externas (solo Python 3.x).

Uso

  • Gráfico: Ejecuta python script.py sin argumentos.
  • Comandos: python script.py archivo.opml -f markdown

Instalación

git clone https://git.interlan.ec/Drk0027/opml-to-blogroll

 Conclusiones

Meh, una cosa que he notado es que la mayor parte de los códigos que escribo, requieren cierto nivel de conocimiento o entusiasmo. clonar el repo, ejecutar python, descargar dependencias si es necesario. ¡Hacer un venv! Creo que entiendo por que prospera tanto el modelo SaaS. Solo abro una web y hago lo que quiera y obtengo el resultado que quiera… Y si hago esto en ¿Javascript? imagino que seria menos automatizable. Nah, sabes que? también lo hago javascript.  https://interlan.ec/blog/2026/03/13/proyecto-opml-to-blog-roll/ #Blog #Código #comunidad #experimentos #python
Blogroll

Una pagina de blogroll es una buena forma de recomendar nuevos contenidos a los que visitan el sitio, por lo que he creado la mía, basándome en mis categorías de mi lector FreshRSS. Por supuesto…

Interlan
Creíamos que los #programadores #humanos acabarían siendo revisores de #código. #Anthropic se acaba de cargar eso www.xataka.com/robotica-e-i...

Creíamos que los programadores...
Creíamos que los programadores humanos acabarían siendo revisores de código. Anthropic se acaba de cargar eso

El ascenso de la IA generativa al mundo del desarrollo de software parecía seguir un guión claro: los modelos escribirían el código y los humanos se...

Creíamos que los programadores humanos acabarían siendo revisores de código. Anthropic se acaba de cargar eso

El ascenso de la IA generativa al mundo del desarrollo de software parecía seguir un guión claro: los modelos escribirían el código y los humanos se...

Esto solo es un script bash para tener una idea de cuantos lectores RSS se tienen.

Introducción

Esto es solo un proyecto rápido originado por la curiosidad que me dio el post de Manuel Moreale sobre cuantos le leen por lectores RSS, el cual también es una reacción a un post de Kev sobre como los lectores leen sus contenidos. Ambos han recurrido a formularios y han obtenido sus resultados, siendo que Manuel Moreale incluso añadió datos técnicos sacados de sus Logs, con lo que tuve la idea de evitar los formularios e ir directo a los Logs. Entiendo que hago esto desde una posición de privilegio del conocimiento. Después de todo, tengo acceso a mis logs y puedo procesarlos a gusto. Compartiré el código con el fin de que otros puedan usarlo y si asi lo desean, contribuir con ideas para mejorarlo, pero eso también beneficiaria solo a los que tengan acceso a sus Logs. Tampoco es para tanto. Si sale bien, se me podría ocurrir una idea para que sea mas fácil de utilizar. Los logs de nginx/apache son abrumadores. Ya antes tuve que segmentarlos para no perderme entre tanta cosa, separando los logs por subdominios. Aun así, la cantidad de trafico kk es abrumadora. Hay demasiados bots, crawlers y personas con intenciones sospechosas, y leerlos da flojera. Es demasiado que analizar. Desde hace rato, he estado intentando de entender comandos de linux que ayuden a procesar texto. La verdad, las herramientas existentes, aunque cripticas, son asombrosas. Mira la velocidad en la que trabajan con grandes volúmenes de datos y el resultado siempre es excelente. Me salvé gracias a esto para segmentar archivos SQL y ahora lo aprovecharé para este breve experimento.

Descripción del Problema

En teoría, suena sencillo. Solo necesito recopilar los datos de la URL /feed que es donde publica mi blog de WordPress los Feeds RSS. En teoría, solo los lectores RSS deberían visitar esa URL pero ya sabes, ahi estan metidos los bots y crawlers todo el tiempo, asi que es muy fácil inflar las estadísticas con datos que no queremos. También, aunque se ejecute el script de forma regular, corre el riesgo de captar datos repetidos inflando aun mas las estadísticas, así que, es necesario evitar datos repetidos. Para saber cuantos lectores RSS unicos visitan el sitio, lo mejor es hacer una asociacion entre la direccion IP y su User Agent de esta manera puedo generar un UID que permitiria sumar la estadistica de cuantos lectores RSS estan cargando mi contenido desde el Feed. Esto por supuesto, no es infalible. especialmente los Feeds que cambian la version en el nombre del User Agent, quedarian sumados como un lector adicional en lugar de ser unico. Otra cosa es que es difícil saber cual es un lector RSS y cual no. Como criterio de búsqueda, he determinado que este tenga las palabras RSS, Feed, Reader, SimplePie, W3C_Validator, TinyPRSS y NewsBlur en su user agent. Iré sumando ideas, pero hay demasiados. a veces pienso que hay mas lectores de RSS que blogs. Como curiosidad, también agregué patrones para identificar lectores del fediverso (teóricamente algunas plataformas como friendica, pueden seguir un sitio mediante los RSS) así que agregue los patrones de Mastodon, Pleroma, Friendica, PixelFed, Lemmy y ActivityPub. Por ultimo, bots. Todo lo que parezca bot (asumiendo que son honestos y dicen ser bots) con los patrones bot, googlebot, bingbot, slurp, duckduckbot, yandexbot, spider, crawl. Para este proceso hay que hacer algunos archivos temporales que serviran para el procesamiento de los datos.

Control-RSS

El script es sencillo en teoria. Tiene un monton de Regex, pero solo eso es lo unico intimidante. De hecho te animo a ayudarme a mejorarlo, aunque no se tampoco que interes habria en mejorarlo. Igual, Siguiendo el patrón que he aprendido al hacer el bot de Channel2RSS en el que se separa la configuración del programa, tengo un archivo de configuración, el cual debe llamarse config.conf, pero que dejo un ejemplo que añade la extensión .example. # --- Configuración del Script ---LOG_FILE="/var/log/nginx/access.log" # Ruta a tu archivo de log principal# Si usas Apache, podría ser /var/log/apache2/access.log o similarURL_A_MONITORIZAR="/feed" # El script es principalmente para ver datos de RSS, pero lo puedes modificar tu gustoOUTPUT_FILE="visitantes_unicos.json" # Archivo JSON de salida# --- Fin de Configuración --- Antes de ejecutar el programa, debes asegurarte de que tienes instalado JQ, GnuPlot y AWK. JQ sirve para procesar JSON en la consola, GnuPlot para los graficos y AWK para el procesamiento de texto plano en los logs. #!/bin/bash# 1. Cargar configuraciónif [ ! -f config.conf ]; then echo "Error: config.conf no encontrado"; exit 1; fisource ./config.conf # Inicializar JSON si no existeif [ ! -f "$OUTPUT_FILE" ]; then echo '{"datos": [], "resumen": {}}' > "$OUTPUT_FILE"fiecho "Procesando logs de $LOG_FILE..."# 2. Extracción rápida con AWK awk -v url="$URL_A_MONITORIZAR" '$7 == url || $7 ~ url { split($4, t, /[:/]/); fecha=t[1]"/"t[2]"/"t[3]; hora=t[4]":"t[5]; ua=""; for(i=12; i<=NF; i++) ua=(ua=="" ? $i : ua" "$i); gsub(/"/, "", ua); print $1 "|" fecha "|" hora "|" ua}' "$LOG_FILE" | sort -u > temp_data.txt # 3. Actualización Incremental del JSONecho "Actualizando base de datos (evitando duplicados)..."while IFS="|" read -r ip fecha hora ua; do # ID Único: Asociación IP + Agente ID_UNICO=$(echo "${ip}${ua}" | md5sum | cut -d' ' -f1) # Clasificación de Agentes IS_RSS=$([[ "$ua" =~ (RSS|Feed|Reader|SimplePie|W3C_Validator|TinyPRSS|NewsBlur) ]] && echo "true" || echo "false") IS_FEDIVERSE=$([[ "$ua" =~ (Mastodon|Pleroma|Friendica|PixelFed|Lemmy|ActivityPub) ]] && echo "true" || echo "false") IS_BOT=$([[ "$ua" =~ (bot|googlebot|bingbot|slurp|duckduckbot|yandexbot|spider|crawl) ]] && echo "true" || echo "false") # Inserción segura con JQ (Solo si el UID no existe) jq --arg id "$ID_UNICO" --arg ip "$ip" --arg f "$fecha" --arg h "$hora" --arg ua "$ua" \ --arg rss "$IS_RSS" --arg fedi "$IS_FEDIVERSE" --arg bot "$IS_BOT" \ 'if .datos | any(.[]; .uid == $id) then . else .datos += [{"uid": $id, "ip": $ip, "fecha": $f, "hora": $h, "agente": $ua, "es_rss": ($rss=="true"), "es_fedi": ($fedi=="true"), "es_bot": ($bot=="true")}] end' \ "$OUTPUT_FILE" > "$OUTPUT_FILE.tmp" && mv "$OUTPUT_FILE.tmp" "$OUTPUT_FILE"done < temp_data.txt # 4. Cálculo del Resumen (Corregido error de sintaxis)AHORA=$(date +"%Y-%m-%d %H:%M:%S") jq --arg fecha_act "$AHORA" '.resumen = { "total_visitantes_unicos": (.datos | length), "usuarios_rss": ([.datos[] | select(.es_rss == true)] | length), "usuarios_fediverso": ([.datos[] | select(.es_fedi == true)] | length), "bots_crawlers": ([.datos[] | select(.es_bot == true)] | length), "usuarios_estandar": ([.datos[] | select(.es_rss == false and .es_fedi == false and .es_bot == false)] | length), "ultima_actualizacion": $fecha_act}' "$OUTPUT_FILE" > "$OUTPUT_FILE.tmp" && mv "$OUTPUT_FILE.tmp" "$OUTPUT_FILE"# 5. Generar Gráfica de Frecuencia jq -r '.datos[].fecha' "$OUTPUT_FILE" | sort | uniq -c | awk '{print $2, $1}' > freq.dat gnuplot <<EOFset terminal pngcairo size 800,400set output 'grafica_semanal.png'set title "Evolución de Visitantes Únicos"set xtics rotate by -45set style fill solidplot 'freq.dat' using 2:xtic(1) with boxes title "Visitas"EOF# 6. Generar Informe HTML cat <<HTML > informe.html<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>Análisis de Audiencia 2026</title> <style>body{font-family:sans-serif; margin:40px; background:#f4f4f9;} .card{background:white; padding:20px; border-radius:8px; box-shadow:0 2px 5px rgba(0,0,0,0.1);}</style></head><body> <div class="card"> <h1>Informe: $URL_A_MONITORIZAR</h1> <p><b>Actualizado:</b> $(jq -r '.resumen.ultima_actualizacion' "$OUTPUT_FILE")</p> <hr> <ul> <li>👤 <b>Visitantes Únicos:</b> $(jq '.resumen.total_visitantes_unicos' "$OUTPUT_FILE")</li> <li>rss <b>Lectores RSS:</b> $(jq '.resumen.usuarios_rss' "$OUTPUT_FILE")</li> <li>🌐 <b>Fediverso (Mastodon/Etc):</b> $(jq '.resumen.usuarios_fediverso' "$OUTPUT_FILE")</li> <li>🤖 <b>Bots y Crawlers:</b> $(jq '.resumen.bots_crawlers' "$OUTPUT_FILE")</li> <li>🖥️ <b>Navegadores Estándar:</b> $(jq '.resumen.usuarios_estandar' "$OUTPUT_FILE")</li> </ul> <img src="grafica_semanal.png" style="max-width:100%;"> </div></body></html>HTML rm temp_data.txt freq.dat echo "Proceso completado. Revisa informe.html y $OUTPUT_FILE" De forma muy resumida, este código permite ir creando un archivo JSON que puedes usar a tu gusto de manera privada. Recuerda tener cuidado con esto pues contiene las IP de las personas que te siguen y probablemente ni ti ni ellos querrán que se divulgue esa información. Basado en este archivo JSON se genera una imagen con GNUPlot mediante simplemente contar las entradas por fechas. Por ultimo, Genera un archivo HTML que te permitirá ver de forma resumida visitantes unicos, lectores de RSS, Fediverso, Bots y Crawlers y Navegadores Estandares. Puedes poner estos dos últimos, la imagen y el archivo HTML, en un directorio publico de tu servidor, en mi caso como hice en el post de NextCloud y Aria2 usando NGinx para tener un directorio que puedo usar de forma publica sin que WordPress lo neutralice. En mi caso, estoy pensando en hacer una página para mostrar esta información, pero a modo de ejemplo, la dejaré aquí, incrustada como iframe como hice en la entrada de las galerías especiales. 

Conclusiones

El experimento es interesante. RSS es solo un archivo y no se le suele prestar mucha atención, así que en las estadísticas no suele contar cuantos lo utilizan y visto lo visto, es relativamente difícil sacar resultados apreciables a la hora de saber cuantos individuos lo usan para acceder al sitio. Para este ejercicio he intentado asociar la dirección IP con el user agent, con lo que se puede hacer una idea, pero la misma persona puede usar diferentes lectores en diferentes dispositivos, así sea la misma IP. He dejado este código en publico por si le interesa a alguien. Por supuesto, le he creado una entrada en mi repo git para poder clonarlo y usarlo por cualquiera que así lo desee. https://git.interlan.ec/Drk0027/control-rss ¿Deseas hacer algun comentario? Aqui hay una caja de comentarios que puedes utilizar. ¿Quieres contactarte conmigo? Por correo electronico por supuesto en [email protected] ¿Quieres profundizar en este tema? Vamos pal foro en forum.interlan.ec https://interlan.ec/blog/2026/03/06/proyecto-control-rss/ #Código #DIY #experimentos #linux #logs #nginx #programacion #proyecto #recursos #selfhosting #servidores

Farsa exposta: front-end bonito, back-end falso

Já viu uma fraude de software desvendada pela comunidade? 😳

- O que rolou:
• A galera foi checar o código e encontrou uma plataforma que parecia legítima só no front-end — por trás, tudo falso.
- Como foi descoberto:
• Cálculos e dados forjados (escola fantasma com verba de 800k) e um back-end que ninguém conseguia ler.
• O autor nem abriu o código antes de...

#fraude #auditoria #comunidade #código #exposto #segurança #MorningCrypto

#Codigo #HSN y ahorra 5€ JN92800

Me inclua fora dessa — posição sobre mudanças de consenso do Bitcoin

Quer saber por que uma voz influente decidiu se afastar das mudanças do Bitcoin? 👀

• Trecho principal:
- Ele afirma que não quer mais ser envolvido em futuras mudanças de consenso no Bitcoin.
- Diz que, se houver um grande impulso e existir código concreto, ele vai revisar — mas não quer ser a pessoa que empurra a mudança.

• Por que isso importa:
- Reduz...

#Bitcoin #Consenso #Código #Cripto #Influência #MorningCrypto

LibreOffice Online regresa: código abierto, gratis y con polémica incluida

LibreOffice Online reanuda su desarrollo tras tres años congelado. The Document Foundation apuesta por un modelo autoalojado y reabre el proyecto en plena demanda de soberanía digital.

Computer Hoy
LibreOffice Online regresa: código abierto, gratis y con polémica incluida

LibreOffice Online reanuda su desarrollo tras tres años congelado. The Document Foundation apuesta por un modelo autoalojado y reabre el proyecto en plena demanda de soberanía digital.

Computer Hoy