Как написать программу напоминалку

Таймеров и трекеров полно, но мы сделаем такой, какой нужен именно вам. Это легко.

В мире множество таймеров и трекеров продуктивности. И все они либо невозможно дорогие, либо делают миллион вещей, кроме той одной, которая реально нужна.

В этой статье мы запрограммируем очень простой, но зато ваш собственный таймер, который будет напоминать о нужном деле. Сделаем его таким, какой он действительно должен быть, и забудем о покупке дорогих трекеров.

Наш таймер будет спрашивать, о чём нам напомнить и через сколько времени. Когда выходит время, он напоминает. Всё, больше ничего от него пока не требуется.

Решение

Алгоритм решения будет таким:

  1. Спрашиваем, о чём напомнить и через сколько минут.
  2. Когда настанет нужное время — выводим напоминание и привлекаем внимание к этой вкладке.

Как и все простые программы, мы будем писать эту прямо в консоли «Инспектора». Чтобы его открыть, найдите в меню браузера пункт «Консоль» (обычно где-то в инструментах разработчика) или нажмите Cmd + Alt + I или Ctrl + Alt + I. Убедитесь, что у вас открыта консоль. Всё, что мы будем писать в ней, будет сразу исполняться браузером, а это именно то, что нам нужно.

ВСЕ ФИШКИ НАПОМИНАНИЙ на iPhone!

Приветствие и вопрос

Начнём с приветствия:

// Начало основной программы, приветствуем пользователя alert(‘Привет! Я — ваш таймер, который может вам напомнить о чём-то. Я буду работать до тех пор, пока вы не закроете эту страницу.’);

Теперь узнаем, о чём нужно напомнить и когда:

// Спрашиваем текст напоминания, который нужно потом показать пользователю var text = prompt(‘О чём вам напомнить?’); // Тут будем хранить время, через которое нужно показать напоминание var time = prompt(‘Через сколько минут?’); // Чтобы работать со временем в JavaScript, нам нужно перевести его в миллисекунды. Для этого число минут умножаем на 60 тысяч: time = time * 60 * 1000;

Теперь у нас две переменные: text и time. В одной — о чём напомнить, в другой — через сколько миллисекунд. Теперь нужно научить программу выводить text через время time.
Чтобы что-то сработало через определённое время, используем функцию setTimeout — мы про неё говорили в задаче про чат-бота:

setTimeout(function () < команды_которые_нужно_сделать >, время_в_миллисекундах_через_которое_нужно_выполнить_эти_команды );

Время у нас уже есть, остались команды, которые нужно сделать: вывести напоминание и привлечь потом внимание к окну. Сначала показываем напоминание, когда сработает таймер:

// Выводим на экран текст напоминания, который хранится в переменной text alert(text);

А чтобы привлечь внимание к окну, применим программистскую магию и возьмём функцию titleAlert() — она уже встроена в эту страницу, поэтому её можно сразу использовать.

Функция — как мини-программа внутри основной программы. У каждой функции есть имя — если его написать в теле основной программы, то она поставится на паузу, сделает всё, что написано в функции, а потом продолжит с того места, где остановилась.

Как создать программу «ЧАСЫ» в блокноте

Как использовать встроенные в страницу функции — читайте в отдельной статье.

В итоге наша функция setTimeout будет выглядеть так:

setTimeout(function () < // Выводим на экран текст напоминания, который хранится в переменной text alert(text); // Привлекаем внимание к окну мигающим заголовком titleAlert(); // В самом конце функции указываем время, через которое она должна сработать >, time)

Читайте также:
4 есть ли возможность в программе hot potatoes вывести задания на печать

Теперь собираем всё вместе:

// Спрашиваем текст напоминания, который нужно потом показать пользователю var text = prompt(‘О чём вам напомнить?’); // Тут будем хранить время, через которое нужно показать напоминание var time = prompt(‘Через сколько минут?’); // Чтобы работать со временем в JavaScript, нам нужно перевести его в миллисекунды. Для этого число минут умножаем на 60 тысяч: time = time * 60 * 1000; // Ставим таймер на нужное время с помощью функции setTimeout setTimeout(function () < // Выводим на экран текст напоминания, который хранится в переменной text alert(text); // Привлекаем внимание к окну мигающим заголовком titleAlert(); // В самом конце функции указываем время, через которое она должна сработать >, time);

Эту программу можно улучшить — например, сделать помидорный таймер, который будет напоминать о чём-то не однократно, а постоянно, с равными интервалами.

Получите ИТ-профессию

В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.

Источник: thecode.media

Как создать приложение-напоминание с помощью Python

Всем привет! Мы собираемся узнать, как создать приложение-напоминание с помощью Python. Вы можете создать приложение «напоминание о питье воды» или приложение «напоминание о перерыве». Сначала я поделюсь двумя способами: для пользователей Mac, а второй — для пользователей Windows.

Во-первых, мы увидим, как вы можете создать приложение для напоминаний, если вы пользователь Mac.

Для пользователей Mac мы собираемся использовать библиотеку pync. Мы разделим наш код на две части — в первой части мы импортируем все необходимые библиотеки, а во второй части мы напишем код для напоминания.

Шаг № 1

Во-первых, нам нужно установить pync в нашу систему. Итак, мы будем использовать следующую команду:

pip install pync

Теперь воспользуемся этой библиотекой

import pync import time

Теперь второй шаг:

Шаг 2

def reminder(): pync.notify(title = “break reminder”, message=”hello sir please take some break from work”,timeout = 1) while True: reminder() time.sleep(10)

Здесь мы создали функцию напоминания, а в этой функции напоминания мы использовали функцию уведомления. С помощью функции уведомления мы определили сообщение, а также можем определить тайм-аут (который определит, сколько времени уведомление будет оставаться на экране).

И в конце мы создали цикл while, чтобы наша программа запускалась каждые 10 секунд.

Итак, теперь для пользователей Windows.

Бот «Умный планировщик»: понимает с полуслова

Если вы когда-нибудь желали иметь личного слугу, который бы напоминал вам обо всем, о чем вы ему скажете, но не имели возможности нанять такого, то разработанный мною бот станет ему достойной заменой.

Хотите проверить функционал? Напишите в лс боту по этой ссылке и он ответит вам.

А тем, кому интересно как он работает и как 16-летний школьник смог написать его, я с удовольствием расскажу всё в подробностях в этой статье.

Предыстория

Началось все с другого моего бота для вк на node js, который расшифровывал голосовые сообщения (и так как таких ботов пруд пруди, я решил не писать статью о его разработке, хотя и он имеет несколько отличительных особенностей). После того, как я запустил его, мой отец предложил мне разработать другого бота для нашего семейного чата в телеграмме. Суть этого бота была простой – извлекать дату и время из текстового сообщения человека, и, используя телеграмовские отложенные сообщения, создавать напоминания прямо в семейном чате.

Читайте также:
Сложно ли изучить программу 1с

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

Разработка

Общие сведения

Этот бот написан на node js и живет на heroku.

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

Также он может работать в групповых беседах.

На данный момент бот распознает дату и время только на русском языке.

SmartScheduler — open source проект, доступный на моем гитхабе.

Извлечение даты и времени из сообщения

Начать я решил с самой сложной задачи: разбиения текстового напоминания на дату и на само напоминание. Для этого пришлось учесть все возможные стандарты написания даты человеком, от «в 12:00« до «в следующее воскресенье в без двадцати пяти восемь вечера«.

Была создана большая база данных (constValues.js), хранящая в себе константные выражения и их свойства, которые человек использует в своей речи. Затем были написаны функции для распознавания каждого варианта написания времени.

К примеру для распознавания даты в виде «через X %тип_времени%» используется функция FindAdditiveLiterals , а для поиска дня недели FindDayOfWeek .

Для каждого варианта обозначения времени выставлялся свой приоритет.

В итоге алгоритм работы парсера выглядит следующим образом:

  1. Исходная строка делится на слова. Слов, в которых производится поиск времени, не может быть больше 40.
  2. Массив слов пропускается через функцию конвертации слов в числа.
  3. Находятся все указания времени в сообщении, а также помечаются использованные в указаниях слова (например в указании «будильник 8 часов» отмечаются слова «8» и «часов»).
  4. Если какая-то характеристика времени не была найдена (например месяц) в текстовом сообщении, то берется текущее значение этой характеристики.
  5. Для окончательного вердикта выбираются указания времени с наибольшим приоритетом и смежные указания, имеющие одинаковое исходное слово (например в слове «10:30» одновременно указан и час, и минута).
  6. После выбора окончательных характеристик времени формируется штамп времени из выбранных минуты, часа, дня, месяца и года.
  7. Из массива слов удаляются все помеченные слова, а из оставшихся формируется текст напоминания.
  8. Если сформированный штамп времени больше текущего времени, то мы считаем что такое напоминание пригодно и функция возвращает объект типа

База данных напоминаний

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

Изначально я хотел воспользоваться библиотекой node-schedule, но отказался от этой идеи, так как я не хотел засорять оперативную память всеми напоминаниями.

Вместо этого я решил изучить принцип работы SQL баз данных и создать свою.

После прочтения множество статей в интернете я создал postgresql базу данных на платформе heroku, так как в ней можно встраивать бдшки в свои приложения, что очень удобно.

Чтобы взаимодействовать с бд я написал небольшой скрипт (db.js), в котором реализовал все необходимые функции, такие как инициализация бд, получение списка напоминаний и т.д.

В моей базе данных присутствует две таблицы: первая для хранения напоминаний, вторая для хранения часовых зон пользователей (о ней чуть позже).

После этого я реализовал сохранение распарсенного напоминания из текстового сообщения в базу данных. Проверкой времени напоминаний занимается таймер, срабатывающий раз в минуту. Если же пришло время для какого-то напоминания, то оно удаляется из базы данных, а пользователю, сделавшему его, отправляется сообщение с текстом из напоминания.

Читайте также:
Формат tif какая программа

Также я добавил отображение всех напоминаний через команду /list.

(рядом с каждым напоминанием есть кликабельная команда /N, которая удаляет его при клике на неё)

Настройка часового пояса

До того, как я решил написать эту статью и выложить её на Хабр, в переменных среды был захардкожен часовой пояс Москвы. Для пользования внутри нашей семьи этого было достаточно, но для того, чтобы воспользоваться всеми прелестями и удобствами жизни с ботом SmartScheduler мог каждый, я решил добавить индивидуальную настройку часового пояса.

Для выполнения настройки требуется написать команду /tz, о чем предупредит бот пользователя, если он еще не указал свой часовой пояс:

(из-за того что часовой пояс не указан, в ответе используется не локальное время, а гринвичское)

При вводе команды /tz запускается процесс определения часового пояса и появляется клавиатура с тремя кнопками:

  1. Использование локации пользователя.
  2. Ручной ввод.
  3. Отмена.

Пример использования

Вторая кнопка позволяет вручную ввести свою часовую зону в формате ±HH:MM,
где ± – плюс или минус, HH – часы, MM – минуты.

Пример использования

Третья кнопка отменяет процесс определения.

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

Финальные доработки

Закончив с основным функционалом, я добавил главную клавиатуры с основными функциями, откорректировал ответы для команд /start и /help, ну и по мелочам.

Также я решил заменить часовой пояс по умолчанию для всех пользователей на Московский.

Результат

Главным преимуществом бота SmartScheduler является конечно же парсинг даты, который позволяет даже в самых непредсказуемых ситуациях быстро и удобно записать нужную информацию или задачу в форме напоминания.

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

Заключение

До разработки ботов на node js я был совершенно не знаком с javascript’ом, посему все знания, которые я использовал в написании кода, брались из интернета, где зачастую можно найти не совсем то, что тебе на самом деле нужно. Из-за этого, скорее всего, где-то в моем коде встречаются очень глупые ошибки, для определения которых я еще недостаточно много знаю.

Изначально моей целью не было создание максимально продвинутого и идеального с точки зрения структуры проекта, для меня было важнее всего получить новые знания, изучить новый язык программирования для улучшения понимания информатики в целом, а также создать MVP продукт.

Но если данная разработка будет пользоваться спросом, то я с удовольствием продолжу улучшать её, а если у вас есть какие-то идеи или вы обнаружили баг, то добро пожаловать на гитхаб проекта. У меня уже есть идеи где и как что изменить (например переписать ужасный спагетти-код в модуле парсинга с использованием нормального Visitor-паттерна), а также в планах добавление поддержки английского языка.

Надеюсь, что этот бот поможет вам также, как помогает мне и моей семье в повседневных делах.

Спасибо за внимание!

UPD: По многочисленным просьбам добавлена поддержка голосовых сообщений.
UPD 2: Бот получил крупное обновление с момента публикации статьи. Список изменений.

  • JavaScript
  • Node.JS
  • API
  • Социальные сети и сообщества

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru