Manifold Geometry // Многообразная Геометрия

Методология

Подписаться на эту рубрику по RSS

Методология геометрического моделирования.

Напоминания

На работе часто возникает потребность напомнить самому себе о необходимости что-то сделать «такого-то числа». Наверняка у каждого программиста есть свой отработанный подход для решения этой задачи. Здесь я опишу ту элементарную «напоминалку», которой пользуюсь сам.

Требования просты. Когда поступает очередная задача «не забыть про...», вводим текст напоминания в специальную утилиту, назначаем дату и регистрируем напоминание. В назначенный день мы ожидаем получить письмо, содержащее список текущих напоминаний.

Наш подход функционально ничего не добавляет к привычным методам напоминания о событиях, например, через мобильный телефон. Однако мы ожидаем получить в результате удобный web-интерфейс для быстрого ввода событий. На мой взгляд, «пропускная способность» такого интерфейса несравненно выше мобильного. Так, например, за полчаса интенсивной работы с заказчиком (выяснение требований), можно «накидать» с десяток напоминаний, в то время как регистрация мобильных событий быстро становится утомительной.

Что должно быть под рукой

  • PHP-сервер — будем отправлять письма сами себе, т.е. пользоваться функцией mail();
  • Сервер MySQL — напоминания будем хранить как запись «событие» в БД;
  • Cron — диспетчер запуска для ежедневной проверки событий, требующих отправки.

Перейдем к деталям.

Детали

На словах идея довольно проста. В базе данных хранятся записи типа «событие» — в простейшем случае это время возникновения плюс сообщение (собственно напоминание). Формат события приведен ниже:

EVENT_N_ID | EVENT_T_DATE | EVENT_V_MESSAGE

Свойство EVENT_N_ID определяет уникальный идентификатор события. EVENT_T_DATE — дата возникновения с точностью до дня (такой гранулярности достаточно, чтобы каждое утро посылать себе, например, список дел на день). EVENT_V_MESSAGE — собственно текст напоминания.

Напишем пару скриптов. Первый (reminder_push.php) занимается наполнением событийной базы через интерфейс для ввода даты и текста сообщения. Второй (reminder_pop.php) итерирует событийную таблицу и отправляет все те сообщения, дата которых совпадает с текущей. Используя планировщик cron, мы настраиваем выполнение reminder_pop.php на каждое утро рабочего дня.

Детали (еще подробнее)

Принцип работы «напоминалки» представлен на схеме ниже:

Зелеными кружками на временной оси отмечены периодические срабатывания скрипта reminder_pop.php, который запланирован через cron. Во время каждого запуска, скрипт проверяет все события в базе, выбирая те из них, дата которых совпадает с текущей.

Реализовать такую систему практически ничего не стоит. Суммарные затраты на написание кода и организацию web-интерфейса составили около 4 часов, включая время на написание этой заметки.

Развитие подхода

При активном использовании описанного механизма сразу становятся очевидны его критические недоработки.

Во-первых, нет возможности запускать циклические напоминания — однажды активированное напоминание больше никогда не повторится. Во-вторых, работая в команде, желательно уметь адресовать напоминания не только себе, но и коллегам.

Тем не менее, описанные недостатки легко разрешимы и не являются принципиальными.