Optimizador de piel en OpenArt
Descubra el impresionante impacto del Optimizador de Piel Vellum de TheCluelessAI, probado en OpenArtOptimizador de piel en OpenArt
Descubra el impresionante impacto del Optimizador de Piel Vellum de TheCluelessAI, probado en OpenArtEfecto cinemático
Descubre las limitaciones de la especie de crippleware en el que se han convertido los modelos de generación de video con IA.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 drk0027@interlan.ec ¿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 #servidoresYa que no hay muchas recetas veganas por aquí @maricrunxy y yo hemos decidido compartir nuestra tarde de experimentos en la cocina :QueerCat:
Hemos hecho:
- Salami
- Mortadela
- Queso para fundir
El salami tiene muy buena textura y sabor increíble pero le falta un poco de intensidad, a la próxima le echaremos mucho más de especias jeje
El queso muy rico pero pero fundir no funde jaja tampoco sabe mucho a queso JAJAJA
La mortadela sigue enfriándose, os iremos contando jajajaja
PD: vamos a hacer la cata definitiva con unas piadinas de queso y salami ✨✨
#comida #cocinar #experimentos #veganfood #comidavegana #comidaveganafacil
Entrenando en el gym
Poniendo a un personaje en una máquina de entrenamiento dándole solo el nombre de ésta (experimento).🐾 ■ Estupefacción por la prueba cognitiva que han superado los cuervos y creían reservada únicamente a humanos ■ Las aves han logrado diferenciar formas geométricas muy parecidas sin ser preparadas para ello.
https://www.huffingtonpost.es/life/animales/estupefaccion-prueba-cognitiva-han-superado-cuervos-creian-reservada-unicamente-humanos-f202602.html?int=MASTODON_WORLD
Introducción
Desde hace un buen tiempo que he estado unificando las cosas entre los dos blogs. Simplificando unas, probando otras, y finalmente decidí que los blogs deben ser eso, blogs. Nada de cosas mágicas ni plugins especiales ni desborde de Javascript. Así que como base, voy a desactivar los registros de usuarios, porque bueno, tampoco es que se hayan registrado usuarios (humanos) últimamente y prepararé el campo para otros experimentos. Se supone que mediante wordpress multisite tendré mayor control y hasta podría añadir mas sitios con los que podría experimentar. Me gusta la idea. Si bien son muchos sitios, todos son míos y no necesito administrarlos como si no lo fueran. Vamos a ver que resulta de esto. De forma muy resumida, me guiaré con el articulo de Kinsta, sobre como hacer un multisite. Así que omitiré gran parte de los pasos y solo acotare los detalles particulares para mi situación.Desarrollo
Para empezar, el cambio a multisite es principalmente relacionado a las bases de datos, por lo que es poco probable que necesites preocuparte por los archivos. adjunto del blog de kinsta lo que considera mas importantes de los cambios que van a suceder.Tropiezos
A decir verdad, ya me lo veía venir. Muchas veces advierten que no se va a poder restaurar el sitio secundario y lo mejor es empezarlo de cero. Técnicamente hice eso. Tras el aterrador proceso de convertir mi sitio principal en MultiSite, y previo a exportar mediante la herramienta nativa de wordpress, intente importar los contenidos del sitio anterior. Es una pesadilla. Que cosa mas horrible. El importador nativo de wordpress es cercano a ser inutil. Tuve problemas exportando. No encontre rastros del error, pero las entradas no las dejaba exportar. Menos las páginas. Simplemente colapsaba al instante sin dejar rastro. Cosas mas superfluas si que exportaban, pero no era lo que me interesaba. Tras lucharle con el WP-CLI, logré sacar algunas cosas. Pero luego no podia importarlas. Para importarlas tenia que estar el sitio original en pie. Intenté solo copiar las imagenes y que el importador solo traiga los contenidos. Pero no dejaba. ¿Para que da la opcion de importar sin imagenes si luego no deja importarlas si no activo esa casilla? El WP-CLI no funciona en multisite. asi que no hay forma de aplicarlo. La inteligencia artificial me daba opciones ambiguas y tras leer personalmente la documentación, me di cuenta que las opciones que sugeria no existian. Al final me rendí. Es importante que el sitio principal no haya sido modificado en general. No tuve que hacer ninguna cosa magica para que funcione, pero el secundario quedó gravemente mutilado. Utilicé un plugin llamado mediasync para recuperar las imágenes que copié físicamente al nuevo directorio y la herramienta de importacion funcionó de alguna manera. Entonces comencé a corregir los detalles. En primer lugar, la carpetawp-content/uploads ahora agrega un directorio sites y una numeración que corresponde al id del nuevo blog/página. Si bien el sistema de url amigable de wordpress permite que ningún post de blog se pierda, si que se pierden las URL de las imágenes. Mediante un pequeño script SQL en la base de datos reescribi la nueva URL agregando los directorios que se agregaron por el cambio y finalmente funcionó… la mayoria.
Resulta también que importar las imágenes mediante mediasync no importa metadatos que se alojan en la tabla wp-media, por lo que los post pierden la imagen destacada. ¿Por que esta vinculada la imagen como destacada a un post en la tabla de medios y no en la misma de posts?
Como sea, tras pensarlo un poco, vi que podría restaurar la base de datos con Dbeaver, pero también me di cuenta que, teniendo las entradas con sus comentarios y fechas basta. Aprovechare este desastre para ir reconstruyendo todo poco a poco y materializar mi visión sobre mis blogs.
Observaciones sobre el cambio
Es interesante el resultado. Puedo agregar nuevos sitios sin tener que andar desplegando nuevo directorio y nueva base de datos con mucha facilidad. Si bien tengo que agregar plugins desde el panel central, cada instancia maneja sus propias configuraciones y temas. Es como usar wordpress.com, pero en selfhosting y sin limites jajaja No estoy seguro en que situaciones se usa esto. Es muy probable que se haga para tiendas o algo así, lo tengo que estudiar. Creo que con métodos mas primitivos se puede restaurar un sitio secundario al convertir en multisite y creo que se puede evitar todo el mal rato que pasé por ignorante, pero esto es para aprender.Conclusiones
WordPress tiene una flexibilidad que me llama mucho la atención. Estaré probando algunas plataformas que necesitan una instalación limpia para funcionar. Por andar instalando plugins sin cuidado es que probablemente se dañó mi sitio y esta es una buena oportunidad para practicar. Por el momento, el sitio se queda así.Curiosidades:
Este sitio es multisite desde el 28 de diciembre de 2025 y esta entrada se publicará en el 6 de febrero de 2026 y hoy 19 de enero de 2026 veo a alguien mas hablar del tema XDMejoras en el blog: ahora es multisite, buscador junto a las categorías, mejora de autoría en header y contacto en postshttps://interlan.ec/blog/2026/02/06/estado-multisite-wordpress/ #Blog #devops #experimentos #selfhosting #servidores #wordpress #wordpressMultisite
Una de las características de los blogs mas conocidas son los sistemas de comentarios, que le da el aspecto social para poder distinguirse de las paginas web comunes. Aunque en la actualidad es muy común que los blogs ya no tengan ni caja de comentarios ni forma de contacto, aun veo gente probando alternativas. Vamos analizando las alternativas disponibles y sumemos una propuesta.
Introducción
Iniciar un blog es una decisión que tiene muchos preparativos detrás. Y uno de los mayores disuasorios es el hecho de que requiere una inversión monetaria en diferentes escalas, que muchas veces no nos podemos permitir. Hay soluciones que dependiendo de lo que quieras y creas, pueden ser o no buena idea. WordPress ofrece el servicio gratuito de hosting de blogs, pero no es divertido lidiar con una versión castrada de WordPress. Blogger también ofrece servicios gratuitos en una plataforma súper limitada. Puedes apostarle a plataformas sociales como Facebook, Instagram, Tumbrl que si bien son limitadas, ofrecen un gran alcance, pero la magia del blogging es que puedes elegir la casa que quieras según tus necesidades o limitaciones.
Para este articulo, vamos a centrarnos en los generadores de sitios estáticos. Si ninguna de las alternativas anteriores te ha gustado, tal vez quieras probar crear tu blog c0mo un sitio estático y publicarlo en GitHub Pages puesto que no necesitas un servidor como en el caso de WordPress para servir paginas que ya has procesado localmente. Esto tiene la ventaja de que la carga es muy rápida y el alojamiento es gratuito, con el extra de que puede servirte de proyecto para tu hoja de vida. Por supuesto, tu página tendrá que usar un subdominio de GitHub, pero es un nombre con buena reputación que puedes utilizar de forma gratuita. Supongo que te darás cuenta del problema de utilizar un servidor de paginas estáticas; sin procesamiento del lado del servidor, no cuentas con el aspecto social del blogging.
A medida que escribía este articulo, me fui dando cuenta de que no necesitas tomarte tantas molestias. Elije wordpress y ya. Blogger también te sirve. Son gratis y no es como que vayas a meter algo mas que texto e imágenes. Pero me di cuenta de que hay muchas decisiones envueltas a la hora de elegir servir un sitio estático en github pages. No las voy a repasar, pero si fuera por mi, diría que es por experimentar. Justo la razón por la que mantengo este blog y la razón por la que me molesta la falta de soporte de resaltado de código en wordpress. Es divertido y aprendo mucho.
Justo por lo anterior, una de las ventajas de elegir un sitio estático estaría relacionado a la soberanía digital y a mantener un minimalismo en lo que publicas. Probablemente no necesites un servidor escuchando peticiones en el login todo el tiempo, o actualizando dinámicamente paginas que ya por tu elección, son estáticas. De hecho es lo que hay. En este blog, muchas paginas no vuelven a ser tocadas, por lo que no tiene sentido andar procesandolas una y otra vez. Se desperdicia recursos en algo que se puede hacer de forma mas eficiente.
Mencione antes también, la soberanía digital. Podrías estar preocupado por cuanta información sobre tus lectores sale de tu sitio a servidores externos. Esto implica que esos datos obedecen a reglas fuera de tu control, lo que también puede significar que esos mismos datos serán monetizados de alguna forma. Alguien podría hablar de estos detalles. No creo ser el adecuado para ello.
Sea cual sea tu razón para elegir sitios estáticos, hoy vamos a analizar algunas alternativas y luego propondre una por mi cuenta.
Las alternativas
Puedes utilizar muchas alternativas con diferentes enfoques según lo que prefieras. de hecho, Hugo mismo recomienda una lista que analizaremos un poco mas adelante. Pero debes tener en cuenta que todo lo gratis tiene un costo oculto que tal vez quieras o no asumir. El mas común en la perdida de soberanía digital. Las opciones de terceros, como Disqus monetizan con los datos de tus usuarios e insertan rastreadores, mientras que las opciones selfhosted como Commento o Isso te obligan a asumir la carga de procesamiento que evitabas al ingresar al mundo de los sitios estáticos. Ten en cuenta que esto ultimo también tiene un costo técnico en forma de parches de seguridad, actualizaciones y otras cosas que arruinan el concepto de simplicidad total que se espera de un sitio estático.
Vamos analizando las características de algunos ejemplos que he seleccionado. Por supuesto, hay mas que puedes consultar por tu cuenta.
Dependencia Externa¿Requiere Self-Hosting?Tipo de AlmacenamientoDisqus / FacebookAlta (Propietario)NoServidores de la empresa (Nube)Cactus CommentsMedia (Protocolo Matrix)OpcionalRed federada MatrixCommento / IssoBajaSiTu propia base de datos (SQL/Docker)Utterances / GiscusMedia (GitHub)NoGitHub Issues / DiscussionsStaticmanBaja (Transforma a Git)Si (Node.js)Tu propio repositorio (Archivos)Mi propuesta
¿Por qué no? Vamos aprovechando los recursos existentes, que asumo ya tienes, ya que quieres y puedes montarte un blog.
Adelanto que esto solo es una prueba de concepto. En lo personal, las alternativas que analizamos son más completas y funcionales; aquí solo busco añadir una opción a la lista de alternativas existentes.
Mail-Comment es una prueba de concepto de comentarios en páginas estáticas basado en correo electrónico. De la misma forma en la que buscaba otros usos para IMAP, se me ocurrió esta idea, notándole algunas ventajas interesantes.
Características
Dado que es un prototipo, estaré analizando mas cosas y mejoras que hacer.
Instalación y ejecución
En Linux necesitas crear un entorno virtual (venv). Te adjunto los comandos para crearlo y ejecutarlo, pero recuerda que tienes que editar el archivo .env:
git clone https://git.interlan.ec/Drk0027/mail-comment.git cd mail-comment pip install -r requirements.txt cp .env.example .env python -m venv source venv/bin/activate python email-processor.py
He dejado un archivo .env.example para que lo copies a .env y lo configures según tus necesidades. Recuerda que necesitas un servidor IMAP, que puede ser el de tu correo electrónico.
Advertencia
Recuerda que publicar tu dirección de correo puede ser algo sensible. Puede exponerte a spam y a vulnerabilidades que podrían causarte daño. Te recomiendo que, si quieres utilizar este enfoque, crees una cuenta nueva dedicada a esta tarea.
Nota
En el estado actual, el script revisa todos los correos de la carpeta INBOX, pero solo borra los que cumplan los requisitos de los que hablaremos mas adelante. Esto es por seguridad: así, si quieres hacer pruebas, no terminaras con toda tu bandeja aniquilada.
El script analiza uno por uno los correos dentro de la bandeja que has especificado. Si está muy llena o si tu servidor es lento, esta tarea puede tardar bastante.
Si bien, es posible utilizar el correo de gmail, es algo de lo que tengo dudas y no he tenido la oportunidad de probar todavía. Parece que se puede utilizar una clave de aplicación, si alguien lo intenta, puede decirme para actualizar este post. Aun así, en teoría puedes usar los mismos servidores que usarías en delta chat.
👉 https://providers.delta.chat/
Flujo de trabajo
Por supuesto, si no quieres agregar el botón o crees que el enlace mailto no funciona, puedes pedir que te escriban directo desde sus bandejas de entrada, indicando en el asunto la url del post que deseas que comenten.
Comentar esta entrada por correo electrónico
.env deberás configurar el DOMAIN_TO_SEARCH con tu dominio para poder localizar el destino de los comentarios. Esto también te evitará algo de SPAM puesto que los procesos automatizados no saben que estarás utilizando este sistema de comentarios (a menos que se haga popular y los crawlers terminen aprendiendo como funciona y empiecen a joder simulando ser usuarios legítimos)En el archivo .env también puedes configurar palabras clave que puedes usar a modo de filtro mediante IGNORE_KEYWORDS=publicidad,notificacion,spamintroduce todas las palabras que quieras usar. Pero esto es mas útil si eliges ejecutar este script de forma regular, con poca o ninguna supervisión.
SAVE_HTML=True SAVE_MARKDOWN=True SAVE_XML=True SEND_WEBHOOK=True
https://git.interlan.ec/Drk0027/mail-comment/src/branch/main/functions.php
WP_WEBHOOK_URL=https://tusitio.com/wp-json/tudominio/v1/recibir-comentario WEBHOOK_SECRET_TOKEN=mi_clave_secreta_123
HUGO_DIR = /home/user/quickstart/ APPEND_HUGO = True
Esta función prepara todos los comentarios recibidos y los agrega al final de tus entradas en Hugo que correspondan a la URL equivalente.
Solo lo he probado con un despliegue básico de Hugo. Por eso se llama QuickStart XD
Recuerda usar un venv en linux. Hay formas de usarlo sin tener que andar activando el venv, pero me da pereza explicarlo ahora.
python email-processor.py
El Script hará las siguientes cosas:
.env (evita spam)IGNORE_KEYWORDSy si no es el caso, continua el flujo
SAVE_MARKDOWN guardara un fragmento por mensajeSAVE_XML guardará fragmentos para RSS en XMLSEND_WEBHOOK enviará el comentario al webhook de wordpress. Recuerda que tienes que haber configurado el secreto entre ambos.SAVE_HTML guardara fragmentos HTML por mensajesAPPEND_HUGO convertirá el contenido HTML a Markdown y buscará en los directorios especificados en busca del post deducido de la URL. en caso de encontrarlo, agregara el comentario al final del post.El resultado es que se integraran los comentarios en las entradas y estos se cargaran la próxima vez que actualices tu sitio.
Resultado de mail-comment y hugoConclusiones
He escrito esta herramienta como prueba de concepto para añadir más alternativas a sitios estáticos que no desean tener servicios externos ni depender de servidores propios o ajenos. La idea resultó más extensa de lo que creí para un simple script en Python que automatiza tareas, pero me inspiré en los bots de Telegram para su flujo de trabajo.
Dejo los recursos que he creado para que quien desee lo pruebe y, si así lo desea, me deje una opinión.
Actualización
Me quedan pendientes de hacer algunas cosas. como por ejemplo, una pagina de demo para mostrar funcionando el proyecto, pero me encontré con la particularidad de que no he contemplado el alojamiento en rutas de un dominio/subdominio y eso que funciona hasta para localhost jajaja
Tambien encontré otro servicio similar a mi idea. ¡Hasta por las mismas razones! jajaja.
Cito traducido de su pagina:
Cada vez menos sitios web independientes admiten comentarios enviados por los lectores. Una barrera es que los diseños existentes están fundamentalmente en desacuerdo con lo que el usuario quiere y lo que necesita el moderador del sitio. Las principales compensaciones son entre brindar una experiencia conveniente y respetuosa para el visitante del sitio, manteniendo al mismo tiempo la capacidad de moderar los comentarios en busca de spam y contenido ofensivo.
Históricamente, exigir a los usuarios que se registren para obtener cuentas antes de enviar comentarios ha sido el principal enfoque de moderación; sin embargo, un flujo de registro está en conflicto con el objetivo de conveniencia del visitante. Una alternativa a esto ha sido asociarse con grandes empresas comerciales de redes sociales para aprovechar su mayor conjunto de cuentas que muchos visitantes del sitio probablemente ya tendrán en estas otras plataformas. Este enfoque ayuda a aliviar el problema de conveniencia mencionado anteriormente (asumir que los visitantes utilizan las redes sociales), pero lo hace a expensas de su privacidad. Podría decirse que este compromiso es peor, porque los problemas de privacidad a menudo ocurren sin el conocimiento del lector.
https://spenc.es/writing/email-as-a-commenting-system/
Observo con curiosidad con que aunque la idea es la misma y las razones de su origen también, el desarrollo es totalmente diferente. Uh, súper diferente la verdad.
Mientras r3ply se orienta a un despliegue permanente en la nube, Mail-Comment se puede ejecutar bajo demanda en tu propio equipo, sin infraestructura adicional
Pero ya que estamos, analicemos este ecosistema un momento
Una de las cosas mas útiles que he deseado tener disponible, es acceder a un terminal mediante SSH inverso a mi computadora persona, desde cualquier parte del mundo. He conocido herramientas como ngrok y localtunnel que sirven, mas o menos, para lo que necesito, pero quería intentar con una herramienta que no dependa de servidores externos y ajenos a mi poder, sea porque no quiero compartir mis datos con terceros, o porque simplemente quería aprender a hacerlo por mi mismo.
Luego de mucho investigar, he encontrado algo que existe desde hace mucho tiempo y que probablemente es conocido por todo el mundo, pero recién aprendí a hacerlo por mi cuenta; SSH permite hacer túneles inversos.
Tabla de contenidos
Introduccion
No es raro tener que acceder a una consola aislada en una red privada, a veces hace falta revisar alguna situación extraña, como escaneos sospechosos en un servidor o editar algo de código. Aquí explico mas sobre este tema.
https://interlan.ec/2022/06/06/revisando-los-logs-de-mi-server-w00tw00t-scan/
Esquemas de control remoto
Desde el periodo de confinación por el COVID-19, todo tipo de servicios se hicieron sumamente populares, como zoom para las conferencias, y AnyDesk para trabajo remoto.
Aunque es de conocimiento común, se puede controlar un equipo utilizando el modelo Cliente-Servidor, donde el cliente se conecta al servidor y el servidor responde a sus peticiones.
Modelo Cliente-ServidorEn este modelo, el equipo a controlar debe ser el servidor, es decir, debe mantenerse escuchando para poder responder las peticiones del cliente, es decir, el controlador.
Este modelo es sencillo si hay conexión directa entre el cliente y el servidor, por lo que se puede utilizar la siguiente combinación de programas para el acceso remoto:
El problema entonces es que todo esto funciona en una red local, pero no a través de internet.
La gran nube
La red de redesPodríamos definir a internet como la red que une a muchas redes pequeñas mediante un mapa de rutas complejas trazado por algoritmos aun mas complejos de entender.
Inicialmente, los proveedores de internet buscan conectar un solo dispositivo a internet, pero en una casa, esto no es lo ideal. Hay muchos dispositivos y cada día parecen haber mas, por lo que una sola conexión no abastecería.
Para solucionar esto, se crea una pequeña red local mediante routers que guiaran todas las conexiones hacia el exterior.
Es probable que por seguridad el proveedor de internet haya limitado las conexiones del router a solo salientes, por lo que no hay forma de conectarse desde afuera.
También es probable que el mismo proveedor haya creado una infraestructura compleja de subredes anidadas que dificultan aun mas encontrar el camino hacia un equipo en especifico desde el exterior. Casi cualquier dispositivo que no esté en la red local, estará en la misma situación, por lo que la comunicación entre ambos es virtualmente imposible.
Acceder a un terminal mediante SSH inverso
Internet es una maraña de dispositivos conectados, pero si alejamos lo suficiente nuestra perspectiva, nos daremos cuenta de que en realidad, parece una gigantesca red local.
Esto significa que es posible conectarse a algún nodo que tenga conexión directa y publica a internet, utilizando lo que es llamado IP Pública
Algunos proveedores de internet ofrecen el servicio de IP publica a sus clientes, por lo que ajustando algunas configuraciones en el router, ya se puede acceder desde cualquier parte del mundo a nuestro equipo, pero esto es innecesariamente peligroso, por cuanto internet es un lugar plagado de atacantes buscando vulnerabilidades en cada IP que puedan encontrar.
Para resolver esto y evitarle a los clientes todo tipo de pesadillas, las empresas proveedoras de servicios de control remoto, crearon servidores de conexión inversa, que sigue un modelo de Cliente – Servidor – Cliente.
Modelo Cliente Servidor ClientePara este ejercicio, vamos a imitar el modelo que utilizan las grandes empresas y crearemos un puente para alcanzar algún equipo de nuestra red local, desde cualquier parte de internet.
Desarrollo de la Solución
Aunque técnicamente se puede realizar con solo dos dispositivos, lo mas común es que se necesiten tres, así que enumeraremos los requisitos a continuación:
Seguramente ya dispones de los dispositivos de destino y de salida, pero el servidor es algo menos probable, así que, por que no arriesgarse con un droplet de Digital Ocean?
Utilizando este enlace puedes crear una cuenta con un crédito inicial de 100 dólares, totalmente sin costo durante 60 días. Úsalo para aprender y practicar con servidores Linux y cuando se acabe el periodo de prueba, puedes comprar Droplets desde 5 dólares mensuales. Recuerda administrar responsablemente tus VPS para evitar sorpresas al final del mes.
Ahora vamos a empezar a aplicar la configuración de los distintos dispositivos implicados:
Dispositivo de Destino
Este dispositivo, que se encuentra atrapado en una red que no permite conexiones entrantes, va a permanecer conectado todo el tiempo al servidor para que el túnel se mantenga vivo. Eso significa que la ventana del terminal tendrá que mantenerse abierta en todo momento o de lo contrario el túnel morirá.
Esto también sucede en las las aplicaciones de control remoto, pero es mas transparente al usuario debido a que utilizan servicios para mantener vivo el cliente y revivir el túnel cada que sea necesario. Aquí se puede realizar algo similar, enviando la conexión al fondo mediante screen u otras herramientas.
En el dispositivo de destino, hay que escribir lo siguiente
ssh -R 16789:localhost:22 usuario@servidor donde:
Al ejecutar este comando, se abrirá una conexión con el servidor, que deberás mantener viva tanto como quieras acceder por el túnel inverso. Por supuesto, mientras estas en ese túnel, puedes usar libremente al servidor como si fuera una conexión normal.
Dispositivo de salida
Puede parecer raro comenzar por el dispositivo de salida, pero asumiremos que en el servidor ya está SSHd bien configurado.
En el dispositivo de salida deberás acceder al servidor con una conexión normal de SSH
ssh usuario@servidor Donde:
Una vez que haya una sesión iniciada en el servidor, debemos ejecutar este comando y tendremos acceso a la consola del dispositivo de destino.
ssh usuario@localhost -p 16789 Donde:
Si queremos acceder a nuestro dispositivo de destino, hemos de dejar encendido el túnel, pero una falla de la red podría causar que la conexión se cierre. Al no estar cerca del equipo para restaurar la conexión, no podremos revivir el túnel hasta que volvamos presencialmente a restaurarla, así que lo recomendable es utilizar una herramienta que reviva el túnel cada que sea necesario o utilizar un cliente que pueda mantener conexiones persistentes a pesar de los quiebres de red.
Mientras tanto, se pueden utilizar sin problema los demás protocolos que funcionan sobre SSH, como SFTP o SCP por ejemplo.
Eso si, hay que recordar que para conectarse, hay que usar el puerto arbitrario que hemos definido anteriormente.
SFTP:
sftp -oPort=16789 usuario@localhost SCP
scp -p -P 16789 /tmp/ssh.txt usuario@localhost: Hay muchas dudas que me quedan pendientes pero las iré estudiando conforme vaya necesitando mas cosas, pero tener este túnel es algo interesante para practicar.
Bibliografía/Webgrafía
Túnel inverso. Obtenido de :https://mundo-hackers.weebly.com/tuacutenel-inverso-ssh.html
https://interlan.ec/blog/2022/07/20/acceder-a-un-terminal-mediante-ssh-inverso/ #DIY #experimentos #SSH #SSHTunneling #túnel #tunelEl articulo a continuación es una bitácora del desarrollo de un bot o plataforma de bots que actualmente tengo funcionando. Se puede acceder usando el siguiente URL: Descargar_Musica
https://interlan.ec/2022/02/15/actualizacion-del-estado-del-bot-de-descargar-musica/
He comenzado esta especie de portafolio con un pequeño bot de Telegram para descargar música desde YouTube. Para esto, he recurrido a las siguientes tecnologías:
Los cambios que he realizado recientemente son muy escasos. Mi conocimiento sobre javascript es relativamente superficial, por lo que he decidido aprender clases, módulos y librerías en javascript. Debido a esto, ahora se han realizado los siguientes cambios:
Creación del directorio data/descargar_musica/descargas
Con el fin de crear un sistema de control para bots unificado, he creado este directorio para que en el futuro, pueda agregar mas directorios de datos para cada bot. En esta situación en especifico, este cambio se hace por la necesidad de asegurar que si hay datos corruptos o incompletos, o un sistema de borrado deficiente, al modificar o borrar los archivos, esto no afecte a otros bots o al propio código fuente.
Creación de las librerias db_logging_system y telegram_logging_system
Con el fin de crear un código mas simple y fácil de mantener, he creado estas librerías universales, que permiten registrar a los nuevos usuarios que utilicen el bot y otra que registre los eventos en un canal distinto.
PD: Sigo sin entender mucho esto, pero ahi logre hacerlo funcionar.
Creación de un vídeo tutorial
Este bot no tiene mayor complicación. Lo único que requiere es que envíen un enlace y comienza a trabajar, sin embargo, siguen mandandole enlaces de spotify e incluso itunes. Si bajar música de estas plataformas fuera legal (y hubiese alguna ganancia aparte de practicar programación) seguro que implementaría una función adecuada, pero por el momento, esto no es asi.
Telegram tiene muchas funciones interesantes y una de mis preferidas son los bots inline. Es posible conseguir la url de un vídeo de youtube, usando el bot @vid y una vez seleccionado el vídeo, mi bot comenzará a trabajar.
Tutorial uso bot inline youtubeUso de los directorios data/descargar_musica/descargas y data/descargar_musica/info
En la revisión anterior, los vídeos se descargaban en el mismo directorio de ejecución. Sean estos archivos temporales o archivos completos, todos se guardaban sin reparo allí, por lo que si ocurría un error o el sistema caía abruptamente, este directorio que contiene los ejecutables, se llenaba de basura que era difícil de limpiar. Para esto, se ha creado el directorio descargas, dentro de uno asignado al bot en cuestión, donde irán todas las descargas realizadas y las que hayan fallado también.
el directorio info, existe en cambio para guardar datos permanentes que no son parte del código, como el vídeo instructivo mencionado previamente
Otros cambios
Proximos cambios
El bot ya se encuentra en un estado bastante aceptable para lo que queria aprender, pero deseo aprender mas cosas, por lo que espero poder agregar lo siguiente:
Los preuniversitarios en el campo en #Cuba fueron uno de los #experimentos sociales más traumáticos del sistema educativo #cubano .
Los preuniversitarios en el campo en #Cuba fueron uno de los #experimentos sociales más traumáticos del sistema educativo #cubano. La idea surgió a finales de los años 60 y se consolidó en los 70, inspirada directamente por el modelo #socialista #soviético y por la visión del #Estado cubano de “formar al hombre nuevo”. El proyecto combinaba estudios académicos con trabajo agrícola.
🔥 ■ Milán, profesor que se disfraza de Batman en el metro para comprobar los efectos: "Con la ciencia también hay que ensuciarse las manos" ■ Su objetivo era medir qué ocurre cuando un elemento inesperado y disruptivo irrumpe en una rutina.
https://www.huffingtonpost.es/virales/milan-profesor-disfraza-batman-metro-comprobar-efectos-con-ciencia-hay-ensuciarse-manos-f202512.html?int=MASTODON_WORLD
#virales #italia #batman #sociologia #estudios #antropologia #experimentos
Carregar Celular com Dentes de Alho e Moeda? 🤯 Desvendando Esse Mistério! 🔋
Você já viu essa "dica" de carregar o celular #Smartphone usando apenas dois dentes de alho e uma moeda? 🧅💰 Parece coisa de filme de ficção científica ou mágica, né? 🧙♂️
Esses #Experimentos intrigantes estão circulando na internet e promete uma solução inusitada para aquela hora que a bateria está no fim. Mas será que a ciência por trás disso realmente funciona? ⚛️
🧘 ■ Los Ig Nobel vuelven a premiar a la ciencia más loca: lagartos yonquis de pizza, una vaca cebra y bebés enganchados al ajo ■ Los galardones que premian lo “improbable pero real” celebran 35 años de ciencia delirante con hallazgos como la receta definitiva de la pasta cacio e p[…]
https://www.huffingtonpost.es/life/los-ig-nobel-vuelven-premiar-ciencia-mas-loca-lagartos-yonquis-pizza-vaca-cebra-bebes-enganchados-ajo.html?int=MASTODON_WORLD
💪 ■ Cierra el puño y extiende solo este dedo: descubrirás que es totalmente imposible y un experto sabe el motivo ■ Si puedes tal vez tengas una mano única.
https://www.huffingtonpost.es/life/salud/cierra-puno-extiende-dedo-descubriras-totalmente-imposible-experto-motivo.html?int=MASTODON_WORLD
Hoy mientras deambulaba por los grupos de Telegram, encontré que alguien pedía ayuda con «algo» para crear un algo que permita deslizar un conjunto de noticias obtenidas con RSS de derecha a izquierda. Esto me ha recordado a la etiqueta marquesina y lo mucho que se abusaba de ella en el antiguo Internet. Hoy me he enterado que esa etiqueta ya es obsoleta. Lo que el usuario deseaba hacer es una Marquesina RSS con CSS animado en WordPress y aquí muestro como.
Tabla de contenidos
Introducción
Mi historia en internet no es muy extensa y probablemente sea significativa ya entrado en la era de la Web 2.0, pero al vivir en un país tercermundista, pude echarle un ojo a la Web 1.0, con sus maravillas de solo texto y su escaso valor de accesibilidad. Una de las cosas que mas destacaban era la existencia de marquesinas, que ponían en el titulo de las paginas, en los header, en los body, en los footer y en algunos casos, hasta en la barra de tareas del viejo Windows XP, cuando lo permitía. Era una época loca donde la accesibilidad y la semántica eran ignoradas en pos de generar contenidos de consumo inmediato y llamativos. Creo que en Japón aun hay sitios con un mínimo de CSS y JS, pero eso es cuestión de su cultura y su aprecio por el minimalismo y la funcionalidad por sobre la estética, pero eso lo podría investigar para otro momento.
Teniendo esto como antecedente, la pregunta del usuario me pareció extraña. puesto que al ser una etiqueta HTML, bastaba con encerrar el texto en ellas y tarea terminada. Hoy me enteré que es una etiqueta obsoleta y se recomienda no usarla.
Los MDN Web Docs de Mozilla aun la documentan, pero instan fuertemente a no usarla. Al parecer algunos navegadores aun la soportan, pero la mayoría no.
<marquee>Texto a desplazar</marquee> Al parecer, esta etiqueta no pertenecía al estándar HTML y fue implementada en secreto por Microsoft para Internet Explorer. Me resulta curioso que todos los demás exploradores también la hayan terminado implementando para que ahora nadie le haga caso.
Marquesina RSS con CSS animado en WordPress
Mientras aun pensaba en una solución para el usuario que preguntaba, este ya había encontrado un Plugin que lo resolvía sin tanto drama. Pero yo me quedé con la curiosidad de ver como resolverlo por mi cuenta, por lo que experimenté un poco.
Dado que la etiqueta «marquee» esta deprecada y no quería instalar plugin en mi WordPress, empecé a investigar un poco. Tras ojear solo la pagina 1 de Google, encontré este articulo.
Pensé que con eso ya tendría resuelto mi problema, pero me encontré con otros nuevos:
Teniendo en cuenta esto, procedi a implementar mi propia solucion:
Lo primero, necesitaba un lector RSS. Pensé en hacer uno con JS, pero encontré que WordPress tiene uno integrado. Me ahorré mucho tiempo, así que lo puse en una pagina nueva.
Puse una URL al componente y guardé la pagina.
Hecho esto, tuve que buscar las clases que dan estilos al componente y estas son las siguientes:
Sin embargo, aun era necesario un cambio mas para poder utilizar mi código o de lo contrario estiraría la pagina en horizontal:
Aun tengo dudas de las consecuencias de agregar CSS sobre esas clases, pero lo iré evaluando con el tiempo. El resto es pegar el codigo en el CSS personalizado del tema en uso.
Código CSS para Marquesina en componente RSS
/* * Seccion para hacer marquesina con css rss * */.wp-block-rss{display: flex;overflow-x: hidden;list-style: none !important;animation: scrolling 40s linear infinite;width: max-content;}.wp-block-rss__item{flex-shrink: 0;padding-right: 10px;}.post-content{overflow: hidden;}.entry-content{overflow: hidden;}@keyframes scrolling {0% {transform: translateX(25%)}100%{transform: translateX(-100%)}} Explicación del codigo.
Las opciones para conseguir este resultado estaban limitadas a usar las clases que se creaban con el componente, así que aproveché que se puede agregar CSS personalizado.
En la clase wp-block-rss puse un display:flex; para ordenar de forma horizontal los elementos que contiene. Para que la animacion detecte cuando llega al final, extendi el ancho del componente hasta el espacio ocupado por sus elementos, pero , width:100% no serviria, asi que utilizé width:max-content;
Para la animación usé animation: scrolling 40s linear infinite; que desplaza durante 40 segundos de forma lineal y en bucle el componente que tenga esta propiedad.
Por ultimo, los keyframe establecen la transformación inicial y la animación hasta la transformación final. Establecí la animación inicial desplazada en un 25% para que el reinicio del ciclo no aparezca abruptamente.
Conclusiones
¿Para que hice esto? Por los loles por supuesto. Quería probar si esto es posible de hacer sin recurrir a plugins y con alteraciones mínimas. Tal vez le sirva a alguien mas que quiera implementar algo parecido, pero como dije al principio, ya existen un montón de plugins que resuelven este problema, tampoco es necesario romperse mucho la cabeza.
https://interlan.ec/2023/05/11/tutorial-marquesina-rss-con-css-animado-en-wordpress/
#animación #CSS #experimentos #html #marquee #marquesina #tutorial
💪 ■ La ciencia confirma que estos baños no ayudan a la recuperación muscular después del ejercicio ■ Se comprobó con un grupo de 30 mujeres jóvenes y activas.
https://www.huffingtonpost.es/life/salud/la-ciencia-confirma-banos-ayudan-recuperacion-muscular-ejercicio.html?int=MASTODON_WORLD
🐾 ■ Un experimento único sorprende al demostrar que las hormigas vencen a los humanos en un reto de inteligencia colectiva ■ Los resultados fueron sorprendentes.
https://www.huffingtonpost.es/life/animales/un-experimento-unico-sorprende-demostrar-hormigas-vencen-humanos-reto-inteligencia-colectivabr.html?int=MASTODON_WORLD
Las #lentejas dan para mucho, eso nos lo demuestra @matem1nuto.bsky.social y el cálculo del Número #π
El #métododeMontecarlo proporciona soluciones aproximadas a una gran variedad de problemas matemáticos posibilitando la realización de #experimentos, como éste ⬇️
RE: https://bsky.app/profile/did:plc:pglswf3ryf5mznd7u66heris/post/3lnnnzqkwtk2h