Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

QuickReminder v0.5


  • Please log in to reply
104 replies to this topic
jballi
  • Members
  • 1029 posts
  • Last active:
  • Joined: 01 Oct 2005
--------------------
Notice: Updates on this topic have been moved here.
--------------------

Introduction
There are a lot of time management programs out there. In the past, I used Microsoft Outlook to manage my general calendar and for general-purpose task management. I currently use a freeware program called Personal Reminder for general-purpose daily, weekly, and monthly reoccurring reminders.

What is missing from my time management arsenal is a tool to quickly set up same-day, one-use-only, reminders. For my 6-year-old computer, Microsoft Outlook is a resource behemoth and I don't use it anymore. Personal Reminder is OK but it has several idiosyncrasies that make it difficult to tolerate as a short-term reminder program. I created QuickReminder to fill the gap.

QuickReminder
Key features:
  • Quick Add. New reminders can be quickly added by using a global hotkey (default hotkey is Ctrl+Alt+R) or by double-clicking on the tray icon. Although the mouse can be used, the dialog was designed for quick keyboard entry and navigation. Reminder time can be entered as a countdown (hours, minutes, seconds) or as a date/time.
  • Friendly alarms. Yes, the alarms do take up screen real estate and they do make a noise but the alarm windows are relatively small and they don't steal focus when displayed. If desired, the alarm text will be spoken to you when the alarm goes off.
  • Snooze. Reminder alarms can be snoozed to a future time. You can select from a list of snooze times or enter your own custom snooze time.
  • Reminder List. To help manage pending reminders, a Reminder List window is provided. From this window you can hold, edit, restart, and delete individual reminders.
Screenshots
QuickReminder_Add%20Reminder4.jpgQuickReminder_Alarm4.jpg
QuickReminder_Reminder%20List5.jpg
QuickReminder_Options_Notes2.jpg


The Code
The pertinent files are as follows:Requirements
To use the Text-To-Speech (TTS) feature, Microsoft Speech SDK 5.1 must be installed if using any Windows version earlier than Windows XP.
http://tinyurl.com/yptaoo

Note: The Microsoft Speech SDK 5.1 installation includes two additional voices (Microsoft Mike and Microsoft Mary) so it should be worth the trouble to install it even if you are using Window XP+.


Usage Notes
No formal documentation (yet) but here are a few notes...
  • Snooze
    When an alarm window is displayed, the user can enter (or select from a list) a snooze value that will reschedule the reminder to a future date/time. The Snooze field can contain two types of values:
    • Time Period. This is amount of time from the current time. The format is any number optionally followed by the letters "s" (seconds), "m" (minutes), "h" (hours), "d" (days), or "w" (weeks). Spaces and additional characters are ignored. If no letters are included, minutes are assumed. The following are valid snooze time periods:
      • 10s
        90 seconds
        45
        37.5 mins
        23 h
        12.75 hours
        2 days
        6 weeks
    • Clock Time. This is the actual clock time and can be entered in the 12-hour or 24-hour format. The 12-hour format is HH:MM.SS AM|PM and the range is 12:00 AM (midnight) to 11:59.59 PM. The 24-hour format is HH:MM.SS and the range is 00:00 (midnight) to 23:59.59. Many components of the format are flexible/optional. As long as program identifies the snooze value as a clock time and can interpret the value, it can be used. The following are valid snooze clock times:
      • 12:39.23 AM
        15:23.57
        4:11.37 Post Meridiem
        2a
        00:7
        10 P.M.
        6:2p
      A few additional "Clock Time" considerations:
      • A clock time is always considered to be a time in the future. If it is currently 4 PM on Monday and snooze is set to 3 PM, the alarm will be set to 3 PM on the following day (Tuesday).
      • The total amount of time that can be set using this option is 24 hours (less 1 second). To snooze to a specific clock time that is more than 24 hours from the current time, edit the reminder by clicking on the "Edit" button.
    Text-To-Speech (TTS)
    Things to know about Text-To-Speech:
    • Optional. The option to speak the note text when an alarm is raised is not enabled by default. Go to the Options window ("TTS" tab) to enable or change this option.
    • Priority. The Priority level defines the order in which the TTS engine processes speech requests. There are three TTS priorities:
      • Normal. This is the standard TTS priority used by most applications.
      • Alert. If this priority is used, the alarm will interrupt (pause) any other normal TTS voices. After the TTS engine has finished speaking, any interrupted voices will resume speaking. This is the recommended priority for this program.
      • Over. If this priority is used, the alarm voice will speak simultaneously with any other TTS voices.
    • XML. The alarm note text can include XML which can be used to instruct the TTS engine to change speed, volume, pronunciation, etc. If unsure about the capabilities or the syntax, the following is an XML TTS Tutorial (SAPI 5.3):Be sure to test the XML code before using it in an active alarm. If the XML contains syntax errors, it may cause the script to fail (unlikely) or it may generate a COM error.
    • Voices. A specific TTS voice (Ex: Microsoft Mike) can be selected for the application. Go to the Options window ("TTS" tab) to select a voice. Individual voices for each alarm is not supported, however, the note text can include XML instructions to indicate which voice is to be used.
    • Metadata. The Note text can contain date/time metadata which is converted in real-time for the TTS engine when the alarm window is displayed. The format is {$Date$X} or {$Time$X} where X is an AutoHotkey date/time format. See the AutoHotkey documentation (keyword: FormatTime) for a list of date/time formats.

      Note: If X is blank/null when using the $Date$ key, Ex: {$Date$}, normal formatting rules are observed. However, if X is blank/null when using the $Time$ key, Ex: {$Time$}, the "Time" date/time format is automatically used, i.e. {$Time$Time}. The "Time" format is a time representation for the user's locale, such as 5:26 PM.

      A few usage examples:
      • Today is {$Date$LongDate}.
        The time is {$Time$}.
        The current month is {$Date$MMMM}.
        It is the {$Date$d}th day of the month.
        The year is {$Date$yyyy}.
Issues/Considerations
  • External functions. This script uses a number of external functions which have been included in a "_Function" folders. Some of the functions are mine and should be clearly marked and documented. Functions written by others should be clearly marked but may contain custom modifications. Thanks to the original authors for sharing their work.
  • Limited locale support. A few of the program's date/time fields support the user's locale settings but most use a static format. Sorry 'bout that.
  • Limited documentation. With the exception of the information in this post, documentation/help is currently limited to a few tooltips and a Help button in the Options window ("Notes" tab). Be sure to read the release notes for additional documentation/tips.
  • AutoHotkey v1.1+. Since the release of AutoHotkey_L, I've tried to write scripts that will work with all versions of AutoHotkey -- Basic, L-ANSI, L-Unicode, L-64bit. Lex has not made it easy. New features are a usually not a problem but changes that break backward compatibility to AutoHotkey Basic do create a challenge. QuickReminder is one of few scripts out there where converting the code to work with AutoHotkey v1.1+ will break the code for Autohotkey Basic. I've made some changes that will allow it work with AutoHotkey v1.1+ ANSI but there are a few include functions that have not been converted and/or tested yet. I'm not a full-time AutoHotkey v1.1+ user yet so converting this script to only work on AutoHotkey v1.1+ is not a high priority right now.
---------------------------------------------------------------------------
Release Notes

v0.1 (Alpha/Preview)
Original release.

v0.2 (Preview)
Changes to the Add/Edit Reminder window:
- Added Hold button. This button adds a Reminder but does not start it.
- Added Sound DropDownList control to allow the user to select a custom sound file per Reminder.

Changes to the Reminder List window:
- Renamed the Stop All Reminders button to Delete All Reminders. This button deletes all Reminders regardless of status.
- The Note field can no longer be modified from this window.
- Removed the DateTime field for each Reminder.
- Removed the Stop button for each Reminder.
- The Status field has been enlarged. The script now displays more information in this field for the "Active" and "Hold" modes.
- Added Hold button for each Reminder. This button changes the status of a Reminder from "Active" to "Hold". This button has a similar function as the former Stop button.
- Added Edit button for each Reminder. This button changes the status of a Reminder from "Active" to "Hold" and then opens the Edit Reminder window so that the Reminder can be modified.
- Added the Delete button to remove a Reminder.

General:
- Added more sample Alarm sound files.

Installation notes:
- Delete all files from older version (if any) before installing new version.

v0.3 (Preview)
Changes to Alarm windows:
- Snooze button set as the default control (activates with the Enter key). (thanks HotKeyIt)
- Snooze period can now include days and weeks. Ex: 2 days, 1 week

Changes to the Add/Edit Reminder window:
- The Note field is now multi-line Edit field to match the Alarm and Reminder List windows. (thanks HotKeyIt)
- Added hotkey (F2) to pop-up the list of pre-defined notes (See the Options window)
- DateTime field has now been split up into separate Date and Time fields. (thanks SoggyDog)
- Added hotkey (Ctrl+T) to jump directly to the Time field.

Changes to the Reminder List window:
- If there are any active reminders, the request to "Delete All Reminders" is confirmed before proceeding.

General:
- Added Options (aka "Preferences") window. Many program options can now be set/changed using this feature.
- Added About window to display the current program version.

v0.4 (Preview)
New Features:
- Added Text-To-Speech (TTS) option that will speak the text note when the reminder window is displayed. (SAPI5 required)
- The Note text can now contain date/time metadata. See the Usage Notes section for more information..

Changes to the Add/Edit Reminder window:
- Added hotkey (Ctrl+S) that will add the current note to the end of Note List. Blank and duplicate notes are automatically discarded. The Note list can be edited from the Options window.
- Added confirm dialog when entering more than 99 hours or 199 minutes or 199 seconds.
- Added button to display the list of user-defined notes.
- Added button to speak/stop speaking the note text.
- Added button to play/stop playing the selected alarm sound.
- The selected alarm sound file is automatically played when changed by the user. (thanks ScottMattes)
- Added tooltips for the buttons that don't have readable labels (thanks Drugwash)

Changes to the Reminder List window:
- Fix: Changes to resolve minor button focus problems.
- "Hold" sound is now played when "Edit" button is pressed to indicate that the reminder is on hold until the start button is pressed.

Changes to the Options window:
- Fix: Minor display issues fixed in the HotkeyGUI window (thanks Drugwash)
- Added options for "Play alarm sound", "Play alarm nag sound", and "Alarm nag sound interval".
- Added "Speak note text on Alarm" option. If selected, the contents of the note text will be spoken using the Text-To-Speech engine when the alarm window is displayed.
- Added "Voice" option. This option allows you to choose the Text-To-Speech voice that will be used when speaking the note text.
- Added "Priority" option that will allow you to chose the priority that is used when speaking the note text.

General:
- Added option to start QuickReminder when Windows starts. This option is only available if running the compiled script.
- Tray tooltip is now updated to reflect the current number of reminders.

v0.5
- Update: Limit of concurrent reminders increased to 20. (thanks HotKeyIt and daorc)
- Update: Reminder List window redesigned. Although the functionality is similar to the old version, it's now easier to make changes to multiple reminders.
- Added "Edit" button to all Alarm windows. Please note that an alarm can not be be edited if any other alarm is being edited or if the Add Reminder window is open.
- Update: All windows redesigned to support large system fonts.
- Update: Help for the Note List Editor updated to use the "HTML DialogBox" function. (thanks SKAN)
- Added a "NoSound.wav" file to the list of sound files. (thanks daorc) This option allows the user to turn off the alarm sound for a single alarm.
- Update: The Snooze period can now contain a clock time. See the Usage Notes section for more information.

Installation instructions (required to save your current alarms and settings):
  • Make a backup copy the "QuickReminder.ini" file from your current installation.
  • Delete old version.
  • Install new version.
  • Copy backup copy of the "QuickReminder.ini" file to the new version.
  • You're done!


Red Hat Boy
  • Members
  • 121 posts
  • Last active: May 02 2014 06:44 PM
  • Joined: 10 Apr 2008
Very nice! I had considered making something like this, but haven't found the time.
Things you (or I) might consider adding:
Option to have an alarm go off every hour, or every x minutes, x being user-specified.
An "Every Day" or "Every Sunday/Monday" option, so that a message will pop up every day at the specified time or every specified weekday, or something similar.

If I have time, I might tinker with it.
Thanks.

You do not have permission to read this signature...


Klaus
  • Members
  • 333 posts
  • Last active: Feb 17 2015 09:31 AM
  • Joined: 12 May 2005
Hi, jballi,
thanks for this nice and very useful little helper. Funny coincidence, I just started planning an app just like yours.
My plans grew out of a request of my wife, she would like to have a customizable egg-timer with multi alarms for kitchen purposes: get the roast out of the oven in 10 minutes, vegetables finished in 3 minutes and so on.
You have saved a lot of time for me!

Here some suggestions:
1. For my purposes from above I would like to enter some alarms, but start all of them at the same time, not having each one starting at the end of its editing.
2. I would like to have the option to choose for each alarm between several sounds, thus I could hear which alarm has reached its time, useful if I don't have eye contact with the screen. So you could create your own .WAV-files and the Reminder could talk to you: "Eggs are ready now!"

What do you think of that?
Thanks again,
Klaus

jballi
  • Members
  • 1029 posts
  • Last active:
  • Joined: 01 Oct 2005

Things you (or I) might consider adding:
Option to have an alarm go off every hour, or every x minutes, x being user-specified.
An "Every Day" or "Every Sunday/Monday" option, so that a message will pop up every day at the specified time or every specified weekday, or something similar.

As a "tool to quickly set up same-day, one-use-only, reminders", reoccurring reminders are out of scope but there might be a way of doing it without redesigning the approach or doubling/tripling the size of the code. Let me put some brain power into it.

On a side note, Hezzu released a utility called Cola that creates a single reoccurring voice alarm. This might be of interest to you. Check it out...
<!-- m -->http://www.autohotke...pic.php?t=34545<!-- m -->


1. For my purposes from above I would like to enter some alarms, but start all of them at the same time, not having each one starting at the end of its editing.

I'm not entirely sure what you mean by "not having each one starting at the end of its editing." but I think that you just want to be able to start more than one alarm at a time. The "Alarm List" window can be used to do that (see the screenshot on the top post). Just set the note and DateTime field and press the "Start" button next to each reminder to start the Reminder timer. What is missing from this screen is a Countdown option for each reminder but I'm not sure if that would be helpful or not. Let me know.

2. I would like to have the option to choose for each alarm between several sounds, thus I could hear which alarm has reached its time, useful if I don't have eye contact with the screen. So you could create your own .WAV-files and the Reminder could talk to you: "Eggs are ready now!"

Choosing different alarm sounds should be a fairly easy addition but using your cooking/baking example, a voice alarm might make more sense if the reminder text changes frequently. What are your thoughts? Anybody?

Klaus, nli
  • Guests
  • Last active:
  • Joined: --
Hi, jballi,
thanks for taking time for my proposals.
Let me explain my first suggestion in detail:
When I open the "Add Reminder"-dialogue, fill out the reminder text and the countdown time and leave the dialogue by pressing the "add"-button, the reminder already starts to count down. I would prefer just to insert the new reminder into the list and cause its start with the "Start"-button.
Thus I could add some reminders and start them by clicking their "Start"-buttons to achieve a simultaneous start of all reminders.

Let me add another point:
When I add a new reminder, it will overwrite the first "stopped" reminder in the list instead of looking for the first free position. The new one will reside on the next free position, when all existing reminders are running.

One last suggestion:
What about a "remove"-button for each reminder in the list? The reminder should disappear with rest remaining reminders moving up.

Thanks for your attention,
Klaus

jballi
  • Members
  • 1029 posts
  • Last active:
  • Joined: 01 Oct 2005

Let me explain my first suggestion in detail:
When I open the "Add Reminder"-dialogue, fill out the reminder text and the countdown time and leave the dialogue by pressing the "add"-button, the reminder already starts to count down. I would prefer just to insert the new reminder into the list and cause its start with the "Start"-button.
Thus I could add some reminders and start them by clicking their "Start"-buttons to achieve a simultaneous start of all reminders.

I suspect that you set most of your reminders, as I do, by entering the desired countdown hours, minutes, and/or seconds. Unfortunately, the "Countdown" fields are for convenience purposes only. These values are converted to a DateTime value when the "Add" button is clicked. This DateTime value is what is used to determine if a reminder alarm should be shown. This design allows the program to be closed and restarted without losing the accuracy of the reminder alarm time.

As I mentioned earlier, adding "Countdown" fields to each reminder in the "Reminder List" window would probably solve your problem. That way you could set all of reminders using the countdown method and then start them all at once (relatively speaking) by quickly clicking on the "Start" button next to each of the reminders. Let me know if this is what you need.

Let me add another point:
When I add a new reminder, it will overwrite the first "stopped" reminder in the list instead of looking for the first free position. The new one will reside on the next free position, when all existing reminders are running.

This is by design but I can understand how this can create design/logic conflict.

When you use the "Stop" or "Stop All Reminders" buttons on the "Reminder List" window or the "Stop All Reminders" menu item while the "Reminder List" window is showing, the associated Reminder(s) are deleted but the Note and DateTime fields on the window are purposely left intact to allow you make minor modifications to the reminder(s) and then click on the "Start" button to add it back to the land of the living. The only way to keep a "stopped" reminder from being overwritten on the "List Reminder" window is to re-"Start" it before adding a new reminder.

One last suggestion:
What about a "remove"-button for each reminder in the list? The reminder should disappear with rest remaining reminders moving up.
Klaus

This might be a little tricky with the design/convenience issue I described in the previous note but I'll take a look see.


Thank you for your feedback.

Klaus. nli
  • Guests
  • Last active:
  • Joined: --
Hi again, jballi,

1. adding countdown fields for each reminder in the reminder list would be nice, but doesn't this cause the special window with the "Add Reminder"-dialogue to be obsolete?

2. I understand your explanations about overwriting stopped reminders, but I estimate it as a little circumstantial that I have to restart a reminder to protect it from being overwritten. But I have to confess that it's manageable.

3. Customizable sounds would be a real blast!
Regards,
Klaus

jballi
  • Members
  • 1029 posts
  • Last active:
  • Joined: 01 Oct 2005
Project updated to v0.2. See the end of the first post for a complete list of changes.

Klaus, nli
  • Guests
  • Last active:
  • Joined: --
Hi, jballi,
only a quick response:
As a terrible flu struck me down I had no change to follow Autohotkey-forum's activities. but here's a quick one:
Wonderful additions, where I can find some of my suggestions. I'll have a look at it when feeling 'active' enough again!
Regards,
Klaus

jballi
  • Members
  • 1029 posts
  • Last active:
  • Joined: 01 Oct 2005

As a terrible flu struck me down I had no change to follow Autohotkey-forum's activities. but here's a quick one:
Wonderful additions, where I can find some of my suggestions. I'll have a look at it when feeling 'active' enough again!

I'm sorry to hear that you're under the weather. The flu can be a bitch! Take care of yourself. Better yet, find someone to take care of you!

Many of the enhancements were made to reflect your requirements although they may not have been implemented in the same manner as discussed. I tried to design the changes so that they 1) would not change the original requirements of a "tool to quickly set up same-day, one-use-only, reminders" and 2) would be useful to more people, including myself.

When you get a chance to play with the script, I hope you'll find that you can do everything you need to do. The Hold button will allow you to add a Reminder without starting it and the Start button on the "Reminder List" window will allow you to start several Reminders at the same time. The Edit button will allow you to make any modifications to the Reminder, including resetting the Countdown. If you have any questions, find any bugs, have more suggestions for improvements, etc., let me know.

I hope you feel better. Get well soon!

Klaus, not logged in
  • Guests
  • Last active:
  • Joined: --
Hi, jballi,
thank you very much for you friendly words, today I am among the living again and I found time to examine carefully your application!
And thank you as well for taking into account my suggestions.
I think you did a very good job!
I hope you will continue the development of your QuickReminder!
Regards,
Klaus

Charon the Hand
  • Members
  • 8 posts
  • Last active: Feb 24 2010 02:16 AM
  • Joined: 07 Aug 2007
This is a cool little application. I also made something similar, but not as complex. This blows mine out of the water. I haven't started tinkering with the guts yet, but I will soon: I want to see what tricks you used to get around a couple problems my script had. Thank you very much for a splendid addition.

SoggyDog
  • Members
  • 803 posts
  • Last active: Mar 04 2013 06:27 AM
  • Joined: 02 May 2006
I made only a cursory scan of the other posts on this thread, so forgive me if this has already been suggested, but it appears that this is only a countdown timer... I would find it beneficial to be able to set a specific time. Barring that one suggestion, I like this a lot. It's very robust.

anonfriese2
  • Guests
  • Last active:
  • Joined: --
nice thing, it would be cool if i can do more than play a song, something like running my own ahk commands

jballi
  • Members
  • 1029 posts
  • Last active:
  • Joined: 01 Oct 2005

I made only a cursory scan of the other posts on this thread, so forgive me if this has already been suggested, but it appears that this is only a countdown timer... I would find it beneficial to be able to set a specific time. Barring that one suggestion, I like this a lot. It's very robust.

You might want to take another look. The ability to set an alarm for a specify date/time has always been available. Let me know if this doesn't do it for you.

nice thing, it would be cool if i can do more than play a song, something like running my own ahk commands

Running a program (or script) when an alarm expires is a bit out of scope for this mini-project but I'll keep it in mind. Thanks for the suggestion.