Member of The Internet Defense League Últimos cambios
Últimos Cambios
Blog personal: El hilo del laberinto Geocaching

Módulo Agenda

Última Actualización: 23 de Julio de 2003 - Miércoles

Este módulo permite que los usuarios con nick registrado dispongan de una agenda personal en la que apuntar eventos que se repiten cada año, como cumpleaños, aniversarios, etc. Naturalmente también se pueden introducir eventos puntuales, siempre que se tenga la precaución de eliminarlos cuando no se necesiten, para que no aparezcan al año siguiente. Se sugiere que, en estos casos, se indique el año en la entrada, para evitar confusiones.


TO DO

  • Cuando se añaden o se eliminan entradas, debe indicarse cuántas entradas quedan para ese día.
  • Poder solicitar inclusión de entradas en la agenda de otro. Si se acepta, el usuario original tiene opción de eliminar la entrada o cambiar su texto.
  • Soporte para horas, lo que incluye avisos horarios.
  • Si no tienes nada en la agenda, no debes recibir notificaciones al conectar. De momento no lo hago, para darle algo de "publicidad".
  • Si a "dia" y "mes" no se le indica el mes, que tome el mes en curso.
  • Comando para dar de alta entradas repetidas.
  • Posibilidad de definir grupos de usuarios, con agendas compartidas (al margen de la suya personal, claro).
  • Poder consultar la lista de todos los días que tienen entradas.
  • Poder purgar todas las entradas de un día, una semana o un mes.
  • Envío de notificaciones por SMS y/o email.
  • Las estructuras almacenadas en disco no deberían tener una representación ligada a ninguna arquitectura hardware en particular.
  • La agenda debe indicar el número de registros utilizados y cuántos nos quedan.
  • Cuando se indica el día de la semana, debe tomarse el año actual si la fecha es futura o pasado pero cercana, y el año pasado si la fecha es pasada. Pensarlo con calma.
  • Debe haber alguna manera de buscar texto en la agenda para, por ejemplo, buscar el cumpleaños de alguien.
  • La agenda debería poder compartirse entre varios nicks, al margen de los grupos (nicks alternativos, por ejemplo).
  • Incluir Santoral.
  • Las fechas de los horóscopos tienen algunos fallos. Hay que revisarlos uno a uno. En particular, el cambio Géminis -> Cáncer está mal.
  • Posibilidad de enviar la agenda completa por email, como copia de seguridad.
  • Cuando tenemos algo en la agenda para hoy, que nos llegue por SMS.
  • Poder programar el envío de SMSs a alguien en una fecha determinada. Por ejemplo, para felicitar un cumpleaños.


Historia

Los números de versión que se indican se refieren a "commit" en el CVS interno. El número de versión cargado en Olimpo en un momento dado es visible usando el comando "dllist".

  • 14/Mar/00 Versión 1.48

    • Los comandos deben ser case insensible. El caso de "mañana" es especial, ya que la eÑe mayúscula y minúscula no las considera equivalentes. Lo que hago es definir dos comandos, "mañana" y "maÑana", que apuntan a la misma rutina.

    • Cuando el módulo saluda, indica también el nick del usuario.

    • Conjuntamente con la versión 38 de Olimpo, reprogramo el módulo para que soporte transacciones, como forma de evitar en lo posible cualquier corrupción de la base de datos ante fallos de programación.

  • 28/Mar/00 Versión 1.66

    • Cuando se imprime una fecha, se imprime también el día de la semana y el horóscopo que le corresponde.

    • Añado tildes a los días de la semana y horóscopos.

    • Se agrupan las diferentes rutinas de gestión de días y meses, para simplificar posibles cambios futuros en el código.

    • Los meses se pueden especificar con un número entre uno y doce, o bien escribiendo su nombre. En ese caso sólo se evaluan los tres primeros caracteres. La comparación es case insensible.

    • Los espacios superfluos entre parámetros son ignorados.

    • Hace log de los comandos ANTES de ejecutarlos, de forma que si la agenda muere se sepa exactamente la última orden que se le envió.

    • La agenda es consistente, y te "tutea" siempre.

    • Cuando saluda al usuario, lo hace empleando el nick real del usuario, no el "canónico".

  • 04/Abr/00 Versión 1.66

    • Aislo las rutinas de manejo de la base de datos de lo que es el código en sí del módulo, de forma que se pueda actualizar las estructuras en la BD, por ejemplo, tocando muy poco código:

      • Migro la lectura de la estructura principal.
      • Migro la escritura de la estructura principal.
      • Migrada la estructura principal cuando se produce el "drop" de un nick.
      • Conversión implícita de la estructura principal si la versión que se está leyendo está anticuada. La librería la actualiza en memoria y en disco de forma transparente.
      • Migro la lectura de registros de día.
      • Migro la escritura de registros de día.

  • 13/Dic/01 Versión 1.66.2.12

    • Cuando se eliminaba un nick, se eliminaban sus registros en la agenda. Ello suponía eliminar 367 registros (uno maestro y otro por cada día del año, incluyendo bisiestos). "agenda" no verificaba que los registros existiesen, sino que los borraba directamente. Si no existen, no pasa nada. Perfecto.

      El problema es que ese proceso lleva su tiempo. Aunque los registros no existan, hay que buscarlos en la base de datos para borrarlos, lo que es una operación que consume recursos.

      En esta versión de "agenda", sólo se busca incondicionalmente el registro maestro. Luego se borran exclusivamente los registros de día que sí existan.

      El rendimiento ha mejorado sensiblemente cuando se realizan expiraciones de nicks.

  • 22/Jul/03 Versión 1.66.2.20

    • En contra de lo que dice la documentacion, "strftime()", "cftime()" no son "thread-safe", al menos sobre Solaris 2.5.1.

      Cambio la llamada de "cftime()" a "localtime_r()". El código incluso se simplifica:

      /**********************
      **
      ** En contra de lo que dice la documentacion,
      ** "strftime()", "cftime()" no son "thread-safe",
      ** al menos sobre Solaris 2.5.1.
      **
      ** jcea@argo.es - 20030722
      **
      ** http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fpatches/108828
      
        cftime(buf, "%d %m %w", &tiempo);
        dia = atoi(buf);
        p = strchr(buf, ' ') + 1;
        mes = atoi(p);
        p = dia_semana[atoi(strchr(p, ' ') + 1)];
      
      **
      ******************************/
      
        localtime_r(&tiempo,&tm);
        dia=tm.tm_mday;
        mes=tm.tm_mon+1;
        p=dia_semana[tm.tm_wday];
      

      Algunos enlaces relacionados:

    • Reescribo todo el sistema de gestión de fechas, para aprovechar los cambios del punto anterior.

      Como consecuencia el problema documentado de "bailes" raros de días en el comando "DIA" cuando atravesamos cambios horarios verano/invierno desaparece.

      Los nuevos algoritmos deberían ser válidos hasta 2100.

    • Solucionado un problema con el día de la semana y el comando "DIA" cuando se pide información sobre el 28 y 29 de Febrero y sobre el 1 de Marzo de años que no son bisiestos.

    • Solucionado un problema con el día de la semana y los comandos "MAÑANA" y "AYER" cuando caemos el 29 de Febrero de años que no son bisiestos.



Python Zope ©2000-2003 jcea@jcea.es

Más información sobre los OpenBadges

Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS