Por qué hice un fork en lugar de tomar el camino fácil

Quería añadir un pequeño contador de visitantes presentes en mi web en tiempo real. En otras palabras, que se pueda ver abiertamente cuánta gente hay viendo mi sitio en ese preciso momento que tú estás dentro. Si estás solo: 1. Si estás tú y otra persona al otro lado del mundo: 2. etc.

Contador de presencia en acción

Mi web usa un servidor de WebSockets, Channels de Django (ya que toda la parte dinámica se renderiza usando Django LiveView). Con ello me dije ¿por qué no? Sería divertido. Tengo todas las herramientas necesarias para calcular el número y notificar a los visitantes al instante.

Si no conocéis algunas de estas tecnologías, os comento rápidamente:

  • Django: Framework web en Python
  • Django Channels: Extensión de Django para manejar conexiones asíncronas, como WebSockets. Piensa en cosas como chats, notificaciones push, etc
  • Django LiveView: Inspirado en Phoenix LiveView, permite renderizar HTML en el servidor y enviarlo al cliente en tiempo real usando WebSockets. Ideal para crear interfaces reactivas sin necesidad de escribir JavaScript

En el pasado ya había hecho una funcionalidad similar para un chat que indicaba si un usuario estaba conectado o no. Se puede averiguar llevando la cuenta de cuántos usuarios se conectan al servidor de WebSockets y cuántos se desconectan, y preguntando cada cierto tiempo si siguen ahí. Entonces, sabía la lógica que había detrás. Sin embargo quería esta vez alguna extensión fácil de integrar. La mínima complejidad posible.

Encontré un repositorio con justo lo que necesitaba django-channels-presence. Lamentablemente llevaba 5 años abandonado, con Pull requests suplicando algo de atención.

En lugar de desanimarme, o forzarme a construirlo manualmente, decidí hacer un fork. Me dispuse a actualizarlo a las versiones modernas de Django. No fue un trabajo tan complejo como imaginé. Con una pequeña inversión de tiempo creé django-channels-more-than-present.

Actualmente lo puedes instalar con:

pip install django-channels-more-than-present

Actualicé dependencias, reemplacé funciones deprecadas (como unique_together por UniqueConstraint o eliminé el parámetro antiguo de Signal providing_args), hice una migración, probé todo, lo publiqué en pypi y... poco más. Tardé más tiempo en comprender cómo funcionaba que en cambiar el código (spoiler: ¡está bien enfocado!).

La pregunta que te harás es: ¿Por qué me tomé la molestia de hacer el fork?:

  • Lo volvería a utilizar en el futuro, y una app de Django es una excelente forma de integrarlo con rapidez
  • Es un código con potencial
  • Mejora el ecosistema de Django

Y porque el Opensource funciona así. Desarrollarlo para mí hubiera sido más rápido, sí, pero solo contribuiría a mi proyecto. Ahora cualquier persona se puede beneficiar.

Ya con el nuevo paquete listo, y Django LiveView renderizando HTML en tiempo real... et voilà! Con una temática felina, mis visitantes pueden saber si están solos o hay alguien más explorando la web en ese preciso momento.

Indicador de presencia

Django Channels Presence

Actualizaciones del fork

Contador de presencia en acción

Ya solo queda jugar con el diseño.

This work is under a Attribution-NonCommercial-NoDerivatives 4.0 International license.

Will you buy me a coffee?

Written by Andros Fenollosa

December 7, 2025

3 min of reading

You may also like

Visitors in real time

You are alone: 🐱