
Сегодня
я расскажу о небольшой, но очень полезной и удобной программе – XMinder. Программа
представляет из себя простой список задач, или напоминаний, с удобным способом
ввода.
Автор: xeon |
Добавлено: 22 Января, 2010 | Много комментариев |
Просмотров: 844
П
ожалуй, у каждого возникала ситуация, когда нужно не забыть сделать что-то через 10 минут. И если сидишь за компьютером, то часто бывает сложно вовремя оторваться. Так и получается подгоревшее мясо в духовке и выкипевшая вода. Или обязательно не забыть что-то сделать с утра, а вспоминаешь об этом уже днем. Конечно, подобное встречается и в офисе, когда нужно перезвонить человеку минут через 5-10, т.к телефонный номер занят. Так что часто есть задачи быстрого и удобного добавления напоминаний. Осталось всего лишь найти нужную программу. А вот здесь возникают сложности. Есть много программ, но они или сложные или с нечеловеческим интерфейсом. Мне не нужны категории, периодичности, флажки и пометки, и куча других настроек, я хочу подобные простые вещи добавлять с клавиатуры. Это быстро и удобно. Outlook 2010 – отличная программа, но добавление новой задачи – это 2 клика, ввод названия, 10 табов и ввод даты в 2х отдельных полях в формате чч:мм. Ага, конечно. Если мне нужно через 5 минут, то это нужно еще и знать текущее время. В общем, Outlook – это не для быстрого добавления задач. И после поиска достойной программы, я решил написать свою, самую удобную. И назвал её XMinder.
Основное требование к программе – быстрый и простой ввод даты напоминания и его текста. И все это реализовано в одном поле ввода без всяких кнопок, выподающих списков, флажков и прочих сложностей.
Конечно, программа должна понимать фразу «через 5 минут», а еще лучше «через 5 м». Нет, много букв и пробелов. Может быть «ч5м»? Уже лучше! А еще лучше так: «ч5м выключить пельмени». Идем дальше и добавляем «через час», «через полчаса» или «через 1 час 30 минут». А можно проще: «ч1ч30м» или «ч1:30».
В реальных задачах часто нужно еще указывать точное время, поэтому такая возможность есть и в XMinder. «в 15 часов 30 минут», «в15ч30м», «в15:30», «в16:00» или проще «в16». Вообще замечательно, только неудобно вечером оставлять себе напоминания на утро. Так и появилась конструкция «завтра» - эквивалентно 00:00 завтрашнего дня. «завтра утром» - 7:00 завтрашнего дня. «завтра вечером» - 20:00 завтрашнего дня. А можно еще проще «утром взять на работу фильмы». Конечно, работает и «завтра в 15:00» или чуть проще «завтрав15».
Таким образом, любое напоминание должно начинаться с блока описания времени. Это может быть относительное указание времени («через») или точное («в», «завтра», «утром», «вечером»). После задания времени может следовать текст комментария, который будет отображен в заданное время.
Программа после запуска сворачивается в системный трей и доступна из меню или с помощью горячих клавиш. Для добавления нового напоминания достаточно нажать Ctrl+Shift+X или дважды кликнуть по значку в трее. Enter завершает ввод напоминания, Esc – отменяет.

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

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

При откладывании достаточно указать новую дату, текущее название напоминания автоматически переносится.

Если на момент возникновения напоминания компьютер был выключен, то оно будет воспроизведено при старте XMinder.
XMinder может устанавливаться в автозагрузку и раз в неделю проверять наличие обновлений.
Для работы требуется Windows 2000/XP и выше, а также Microsoft .Net Framework 2.0
Программу можно взять здесь:
http://xminder.heliohost.org/XMinderUpdates/xminder1.2.5.msi
Жду ваших предложений, замечаний и просто комментариев.
Самой интересной частью программы является движок распознавания ввода. Написан он был за один вечер с целью узнать, можно ли такую штуку реализовать на LL(n)-грамматике или нет. Оказалось, что можно :) Я использую генератор компиляторов (compiler compiler) COCO/R для C# с предпросмотром на 1 лексему вперед, так что моя грамматика равносильна LL(2). Грамматикой описываются допустимые входные данные, часть проверок выполняется в управляющем модуле.
Часть грамматики:
XMinder = TimeType [Comment].
TimeType = TimeInGeneral
| Future [TimeInGeneral]
| ("через" | "ч") TimeVia (. offset = true; .)
.
TimeInGeneral = ["в"] number (. hour = t.val; offset = false; .) [TimeIn]
| TimeInShort
.
Future= ("завтра" | "з") (. isTomorrow=true; .)
.
Программа написана на C# 2.0 + Winforms. Несмотря на то, что C# приложения могут работать под Linux и Mac, и я знаю что и как делать, XMinder работает только под Windows. Я использую Win32API функции для работы с горячими клавишами, и отображением окна с напоминанием. Раньше использовал также для воспроизведения звуков. Если будет большой интерес – подумаю о кросплатформенной версии.
Кстати, мне интересно, насколько стойкий код получился после прохода XMinder обфускатором и можно ли за небольшое время получить компилируемый исходный код. Если есть желающие попробовать – буду раз посмотреть результаты. Сборка не подписана.