Entradas

¡Amor RSS!

Me encanta el RSS . Siento que es una tecnología tan simple, pero increíblemente útil. Actualmente cada día uso menos las redes sociales y, aunque esto haga que pierda cierto contacto constante con mis amistades, siento que a largo plazo hace un buen trabajo manteniéndome fuera del loop del constante "slop" que producen las IA (aunque admito que yo igual uso) y de la guerra política que albergan las redes hoy en día. Esta fascinación por el RSS lleva mucho tiempo en mi cabeza y la he ejecutado con distintos grados de éxito. Primero probé una aplicación de escritorio llamada QuiteRSS, pero cuando dejó de funcionar correctamente, decidí pasarme a Thunderbird . Thunderbird es un gran gestor de correos, pero es un pésimo programa para todo lo demás. A veces desearía que simplemente eliminaran las funciones que no corresponden a un cliente de correo. Como la experiencia en Thunderbird era mala, empecé en el mundo del self-hosting. Primero ejecuté FreshRSS en una TV Box que tenía...

Cyg: Sistema de guardado asíncrono y robusto para GameMaker

Uno de los mayores dolores de cabeza al desarrollar en GameMaker suele ser el sistema de guardado. Históricamente, GML no lo ponía fácil: gestionar la serialización, evitar que el juego se congele al escribir archivos grandes y asegurar que los datos no se corrompan es una tarea que consume horas de documentación. Últimamente, GameMaker ha mejorado mucho sus funciones de archivos y estructuras, pero todavía falta esa "capa" de robustez que te dé tranquilidad. Por eso, he estado trabajando en Cyg , una librería propia que automatiza estas tareas pesadas. ¿Qué hace a Cyg diferente? No quería simplemente "escribir un JSON". Quería algo que aguantara el flujo de trabajo de un proyecto real: I/O Asíncrono por defecto : Fundamental para evitar tirones de frames ( stuttering ) y asegurar compatibilidad con plataformas más allá de Desktop, como consolas o navegadores. Gestión de Backups y Compresión : Reduce el peso de los archivos y, más importante, gener...

Mi experiencia con el filtro UV Sobo 9W

Imagen
Cualquier persona que tenga una tortuga sabe que mantener el agua cristalina es un reto constante. Aunque cuento con una buena filtración mecánica y biológica gracias a mi ReptiClear F250 , hace poco me enfrenté a un brote de algas microscópicas que dejó el acuario completamente verde. Investigando aprendí que este fenómeno, conocido como "bloom" de algas , ocurre cuando estas encuentran el equilibrio perfecto entre luz y exceso de nutrientes. El problema es que los filtros convencionales no pueden atrapar partículas tan pequeñas. El agua se convierte rápidamente en una especie de "sopa" donde apenas puedes ver a tu mascota. La solución: Radiación UV-C Leyendo en foros y sitios especializados, me di cuenta de que la solución definitiva era instalar un filtro interno UV. Opté por un Sobo de 9W (600 L/h) . La lógica detrás de este equipo es sencilla pero muy efectiva. No se limita a filtrar sedimentos, pues utiliza una lámpara de luz ultravioleta en la banda C (UV-C) ...

Cimplicity: Cambiar texto de un botón según el estado de un punto

Imagen
Recientemente, en un proyecto implementé una solución para un botón de conmutación ( toggle ) que indica el modo de operación ( Manual o Automático ) de forma dinámica. A continuación, explico cómo configurar este comportamiento utilizando variables de objeto y procedimientos. El Desafío Necesitamos que un mismo objeto gráfico realice dos tareas: Invertir el valor de un bit en el PLC. Cambiar su propio texto para reflejar el nuevo estado. Para que esto sea eficiente, el texto no puede ser estático. Utilizaremos una variable interna, en este caso llamada {Modo} , que servirá como puente entre la lógica del punto y la visualización. Configuración de la Variable Dentro de las propiedades del grupo o botón, en la pestaña Variables , debemos declarar la variable {Modo} . Es recomendable asignarle un valor inicial como "INDEFINIDO" o "ERROR" para detectar rápidamente si la lógica de actualización no se está ejecutando. Lógica de Eventos y Procedimientos El secreto para...

Cimplicity: El "hack" para mostrar valores en los 'Trends'

Imagen
Si trabajas con Cimplicity , sabrás que el programa es muy "llevado a su idea" y a veces simplemente no desea funcionar aun cuando aparentemente debería. Uno de estos casos es cuando los Trends (gráficos de tendencias) deciden no mostrar los valores analógicos de un PLC sin razón aparente. Hace poco me pasó y, aunque el motivo técnico sigue siendo un misterio, encontré una solución que, aunque algo tediosa de configurar, funciona de maravilla. Aquí les comparto este "truco" para que no se queden trabados en sus proyectos La Estrategia: Crear un "Puente" de Datos El problema suele estar en la comunicación directa entre el punto del PLC y el objeto gráfico. Para saltarnos esto, vamos a crear puntos virtuales que actúen como intermediarios. Crear el punto virtual: Si tu variable original es  FQI-xxx , crea un nuevo punto llamado G-FQI-xxx .  Recuerda seleccionar que sea virtual (que no esté vinculada a ningún dispositivo). Configuración: Asegúrate de que ...

Cimplicity: Un problema de región

Imagen
A veces, en automatización, los errores más desesperantes no vienen de la lógica del proceso, sino de los detalles más pequeños del sistema operativo. Hace poco, trabajando con Cimplicity , me topé con un error tan extraño como molesto que me impidió avanzar por un buen rato. El Problema Intentaba ingresar una expresión simple en un objeto de texto para mostrar un valor analógico con sus unidades. La idea era usar esta fórmula: FormatReal(EU_CONV('02727-PI-08328'), 2, 4, 1, 0, 0) + " [bar]" A pesar de que la sintaxis es correcta según el manual, el Workbench simplemente rechazaba la expresión. No permitía validarla, como si estuviera escrita en otro idioma. ¿Qué estaba pasando realmente? Después de investigar, llegué a la raíz del problema: la configuración regional de Windows . Resulta que el motor de expresiones de Cimplicity es extremadamente sensible a cómo el sistema operativo maneja los separadores. En Chile ...