>X
Released
>X
Beta 5
>X
Repeating is broken after the first attempt (sometimes?)
*X
Alarm is being moved to expired list on expiration, then when app is restarted, it gets reactivated
*X
If I turn on NSZombieEnabled it doesn't happen.
V
*X
Correct behavior:
17:34:56.702 timer set: <PSAlarm: 0x1a9180>: type PSAlarmSet date 17:34:58 -0600 interval 2.0 repeating
timer: <PSTimer: 0x1a1670>: at 17:34:58 -0600 do _timerExpired: on PSAlarm retainCount 3
17:34:58.702 expired: 17:34:58 -0600; now 17:34:58 -0600
17:34:58.702 timer expired: <PSAlarm: 0x1a9180>: type PSAlarmExpired date 17:34:58 -0600 interval 2.0 repeating retainCount 5
17:34:58.703 expired alarms: {(
<PSAlarm: 0x1a9180>: type PSAlarmExpired date 17:34:58 -0600 interval 2.0 repeating
)}
17:35:16.922 removed: <PSNotifierAlert: 0x1bc050>; still pending: {(
)}
17:35:16.922 alarm: <PSAlarm: 0x1a9180>: type PSAlarmExpired date 17:34:58 -0600 interval 2.0 repeating retainCount 3
17:35:16.923 timer set: <PSAlarm: 0x1a9180>: type PSAlarmSet date 17:35:18 -0600 interval 2.0 repeating
timer: <PSTimer: 0x15e1aa40>: at 17:35:18 -0600 do _timerExpired: on PSAlarm retainCount 5
17:35:16.931 <PSAlarmAlertController: 0x15e08f30> dealloc
17:35:18.923 expired: 17:35:18 -0600; now 17:35:18 -0600
17:35:18.923 timer expired: <PSAlarm: 0x1a9180>: type PSAlarmExpired date 17:35:18 -0600 interval 2.0 repeating retainCount 5
17:35:18.925 expired alarms: {(
<PSAlarm: 0x1a9180>: type PSAlarmExpired date 17:35:18 -0600 interval 2.0 repeating
)}
V
VX
Incorrect behavior:
17:51:42.213 timer set: <PSAlarm: 0x1a9390>: type PSAlarmSet date 17:51:43 -0600 interval 1.0
timer: <PSTimer: 0x15e1b300>: at 17:51:43 -0600 do _timerExpired: on PSAlarm retainCount 3
17:51:43.214 expired: 17:51:43 -0600; now 17:51:43 -0600
17:51:43.214 timer expired: <PSAlarm: 0x1a9390>: type PSAlarmExpired date 17:51:43 -0600 interval 1.0 retainCount 6
17:51:43.216 expired alarms: {(
<PSAlarm: 0x1a9390>: type PSAlarmExpired date 17:51:43 -0600 interval 1.0
)}
17:51:43.558 removed: <PSNotifierAlert: 0x1bc260>; still pending: {(
)}
17:51:43.558 alarm: <PSAlarm: 0x1a9390>: type PSAlarmExpired date 17:51:43 -0600 interval 1.0 retainCount 3
17:51:43.560 <PSAlarmAlertController: 0x114990> dealloc
*X
Alarm never marked as repeating—this is PEBKAC?
*X
Can't seem to reproduce any more.
*X
Check that debug symbols are present
*X
Tag in Subversion
*X
Fix NSRemoveTemplate causing duplicate icon drawing
*X
Check for memory leaks
>X
Incorporate Sparkle
*X
Put in svn:externals
*X
Check in diff and add it to the build
*X
Redo packaging
*X
Bump version to 19 (that's what the appcast thinks it is)
*X
Fix calendar button bezel style in snooze box to match
>X
Date parsing needs reimplementing
VX
Can we get natural language date parsing from somewhere?
>X
chronic.rubyforge.org—MIT licensed, English only
*X
jchronic.dev.java.net—Java version of above
*X
Perl's Date::Manip—looks like the best, supports many languages
*X
Remove parsing debugging
*X
Disable menu if we can't get Perl to work (not naturalLanguageParsingAvailable)
*X
Can make text in path button menu smaller, to match
>X
Date generation needs changing
*X
Can we get weekdays without AD? Yes.
*X
The first time you bring up the Preferences, nothing appears instead of "none assigned"
*X
NJRFSObjectSelector needs upgrading (emailed Joey)
>X
Sound selection was using SPI, and broke
>X
Memory leak switching back and forth between View and Edit modes
*X
Fixed, was not freeing the alerts dict
>X
Very slow memory leak on idle
*X
Comes from +[QTMovie idleAllMovies:] leaking NSDate objects very slowly (?)
*X
No, this was just NSZombieEnabled
>X
Crash in [PSAlarmNotifierController close:] => [PSAlert completedForAlarm:].
*X
This was a retain-release bug, fixed
>X
PSAlarm retain behavior is broken
VX
Fixed for nonrepeating case
>X
Non repeating alarm on same launch
*X
Initial set (for repeating alarm): 3
*X
Timer expired: 5
*X
Then gets deallocated. This is fine.
>X
Non repeating alarm on next launch
*X
Timer expired: 7
*X
NO deallocate.
VX
Retained one more time at timer set/expiration time when read from defaults on launch (6) than it is otherwise (5).
*X
Properly deallocated in repeating case too.
>X
Beta 6
*X
Use the same alert we use when the alarm interval fails to validate for the playback count
>X
Retest adding version 1 alarms, errors therewith; I've rearranged code
*X
Alarms import twice!
>X
Possible to break "Play alert sound" count
*X
Need superclass of NJRIntervalField to do arbitrary validation
*X
If you change it and immediately quit, for example
VX
Alert sound count should not validate as empty (default to 1 in that case)
*X
Can't do this, but instead PSMediaAlert just clamps to 1..99
VX
Then recheck -[PSAlarmSetController inAtChanged:]
*X
Behaves differently in 'in' vs. 'at' scenarios, (# beeps, activation) but still works
*X
cmd-shift-T doesn't commit field editing; try hitting it after typing in "x minutes"
*X
Default voice isn't restored properly if it wasn't set
*X
Remove unneeded custom list drawing
*X
Table view tooltips broke in Leopard
>X
Repeating alarms are becoming not-repeating on restore if they haven't expired
*X
…even though they're correct in the plist
*X
Switch to new-style ObjC exceptions
*X
Change package-Pester.sh so it does atomic replacement via mv on ainaz
V
>X
Aborting speech too early causes crashes, sometimes hangs too
2007-11-22 18:00:53.191 Pester[91411:10b] *** -[SUSpeaker respondsToSelector:]: message sent to deallocated instance 0x16ff79c0
*X
Replace SUSpeaker with NSSpeechSynthesizer
>X
Get speech working
*X
Possible to set alarm with voice set to «unknown» (== nil); you get an exception in the status area if you do
*X
Just change the exception for now
*X
Prune nib
>X
Beta 7
*X
Snooze until is broken with DST
*X
Speech voices are not showing their names
*X
Crashes on PowerPC Leopard
>X
Beta 8
*X
Update release notes, etc.
*X
Fix Sparkle.
*X
VersionTracker.
>X
Wait for idle (optional) - downloaded
>X
Audio device selection for movies, NOT speech, WITHOUT override option and with RELATIVE volume
*X
Duh. I'm always using the system default output device.
*X
Should be using kAudioDevicePropertyDeviceUID instead of a string.
*X
Works!
*X
Put some text on top of the override option
*X
Add relative volume control, only affecting movie ("Override volume control" option off).
*X
Preview needs to go through the right device, too.
*X
Don't do anything if you press the activation hotkey while the preferences panel is key.
>X
When we're responding to the AppleDatePreferencesChangedNotification, [NSLocale currentLocale] isn't updated yet. We can register for NSCurrentLocaleDidChangeNotification (kCFLocaleCurrentLocaleDidChangeNotification) in 10.5+, which hopefully occurs afterward, but... can we get this or an equivalent notification on 10.4?
*X
The formatters are successfully updating, except when the field is disabled
*X
This *is* the same problem: we're not waiting for the locale to update
*X
Post to Stack Overflow
>X
Non-US (non-English?) localized date formats don't work.
*X
We are not initializing Date::Manip with the correct locale. We need to detect the date format and use it (not necessarily the same as the UI language).
>X
We're not passing non-ASCII characters correctly to Date::Manip.
*X
-CSD means we assume stdin/out is UTF-8.
*X
But Date::Manip doesn't do Unicode; we use ISO-8859-1 instead.
*X
Pass correct value for DateFormat to Date::Manip.
>X
Formatter updates fail (and focus gets confused) if the field is currently editing
*X
You can't replace the field editor while it's editing! Either we refocus it or don't discard the field editor.
*X
Propagate changes to snooze until
>X
Fix things that don't update when language formats change
*X
Alarm time in alert? Actually, no: it's a point in time; don't bother.
*X
Repeats: "every one second" should be "every second", etc.
>X
Handle time zone changes.
*X
Reinitialize Date::Manip.
*X
Fix the formatters and/or NSDate objects being passed to them.
*X
Remove the time zone logging from Date::Manip once Siddharth Patil gets back to you.
*X
Time zone info fails? Consider providing it to Date::Manip in Date_Init.
>X
Fix Perl embedding issues so we can build on 10.6 for 10.5/10.4
*X
boot_DynaLoader is in libperl.dylib for 10.6. It isn't for 10.5 and earlier.
*X
Need to test on 10.4.
*X
Why are there 2 blue dates in the popup calendar?
>X
Sound repetition field should default to 1 or cancel editing if no valid entry
VX
Better idea: why do we even allow entry of nonnumeric items into this field?
*X
This is fixed with NJRIntegerFilter, just like every other field.
*X
Popping up calendar when no date is entered gives me June 2030437302. Gah.
>X
Snow Leopard compatibility
V
*X
No more selectedRowEnumerator—was deprecated in 10.3 (use selectedRowIndexes instead)
Sep 1 21:46:23 babs Pester[198]: *** WARNING: Method selectedRowEnumerator in class NJRTableView is deprecated. It will be removed in a future release and should no longer be used.
>X
Finish up date completion: don't try to override user-specified capitalization (e.g. if trying to type "Thursday week")
*X
Or, just add weekdays by themselves to autocomplete list.
>X
Can we switch back to a real combo box? If not, can we autocomplete anyway? This will fix the "today" problem, I think, much more easily. (I tried implementing command-T = today. This was an unmitigated failure: it is a bad, bad UI design.)
*X
What we've got is better than a real combo box, I think.
*X
The tab order is a bit messed up since we replaced the disclosure button. Fix this.
*X
Tab order is borken even with tab-to-everything not enabled. We should wrap.
>X
Display relative dates for today/tomorrow (is there an API for this?)
*X
Apparently not, but we can steal /System/Library/Frameworks/Carbon.framework/Frameworks/HIToolbox.framework/Resources/*.lproj/BrowserControl.strings
*X
Just replace "on" with "today," or "tomorrow,".
*X
For saving/restoring focus: SetFrontProcessWithOptions ( &psn, kSetFrontProcessFrontWindowOnly )?
*X
Switch to tomorrow automatically if necessary when tabbing into "on", just like hiptop Pester
*X
Huh, we still have a NSMovieView in MainMenu.nib?! This shouldn't be, and is breaking SL's IB.
>X
"12p" => 9pm, oddly
*X
So, special-case numbers + a single character in AM/PM
V
*X
Use something else for the expando button
Sep 1 21:19:45 babs Pester[198]: Instantiating NSNavExpansionButtonCell (superclass of the also dead NSDisclosureButtonCell), which is a private class not used by the AppKit and will be removed. Use an NSButton with NSRoundedDisclosureBezelStyle instead. You can drag one out in IB. Break on _NSInstantiatingDeadDisclosureButton to debug. This will be logged only once. This may break in the future.
*X
Volume adjustment breaks on Snow Leopard
*X
Should special-case individual numbers in the time to mean an hour
*X
Also, special-case 4 numbers to mean 24-hour time
>X
Individual numbers plus "a" or "p" to mean AM/PM. (We can use AMSymbol, PMSymbol)
*X
Issue here is that single letters are being used for time zones.
*X
Allow (shift-)tabbing out of "set key" box in Pester, or just switch to Shortcut Recorder (code.google.com—)
V
*X
Repeat info can be messed up
V
>X
NSMovieView crashes in QuickDraw code; we really need to not use it unless we have a video to play
511 +[NSMovieView _idleMovies]
511 CFSetApplyFunction
511 -[NSMovieView _movieIdle]
511 MoviesTask_priv
511 TaskMovie_priv
511 SetGWorld
511 SetGWorld
VX
Convert to QTMovie
V
*X
Crash when switching alert sounds when the sound hasn't finished playing. Need to fix.
Thread 0 Crashed:
0 com.apple.QuickTime 0x922ecb27 QTGetMovieRestrictions_priv + 20
1 com.apple.QuickTime 0x922ecb02 QTGetMovieRestrictions + 36
2 ...ickTimeComponents.component 0x918d25ba _MCGetControllerInfo + 313
3 ...ickTimeComponents.component 0x918d1881 _MCComponentDispatch + 118
4 ...ple.CoreServices.CarbonCore 0x951609c9 CallComponentDispatch + 29
5 com.apple.QuickTime 0x922ec84c MCGetControllerInfo + 43
6 com.apple.QuickTime 0x922040a9 QTOMovieObject::GetProperty(unsigned long, unsigned long, void const*) + 1029
7 com.apple.QuickTime 0x92203742 DispatchQTMsg(void const*, unsigned long, unsigned long, unsigned long, QTOGenericObject*) + 762
8 com.apple.QuickTime 0x92203381 QTObjectTokenPriv::SendMessageToObject(QTMessagePriv*, unsigned long) + 183
9 com.apple.QuickTime 0x92202952 QTObjectTokenPriv::DispatchMessage(QTMessagePriv*, void const*, __CFAllocator const*, unsigned long, unsigned long, ComponentMsgParam*, unsigned long, unsigned long) + 1404
10 com.apple.QuickTime 0x9220235e QTSendMessageToObject + 166
11 com.apple.QuickTime 0x922015ea QTGetObjectProperty + 252
12 com.apple.QTKit 0x974912a7 -[QTMovie isPlaying] + 83
13 com.apple.QTKit 0x9748cf14 -[QTMovieView setMovie:] + 483
14 net.sabi.Pester 0x0000655a -[NJRQTMediaPopUpButton _validateWithPreview:] + 386 (NJRQTMediaPopUpButton.m:389)
15 net.sabi.Pester 0x000068a5 -[NJRQTMediaPopUpButton _systemSoundSelected:] + 77 (NJRQTMediaPopUpButton.m:415)
*X
Migrate validation code.
*X
Sound repetitions appear for video-only media
*X
Replace NJRCenteringMovieView with something? (Yes, QTMovieView does this by default.)
*X
Pester is keeping various files open when it shouldn't. Rewrite PSMovieAlert so it creates QTMovie on demand.
*X
Volume button isn't in the right place in the control hierarchy (see when switching editability).
*X
Migrate playback code—partially done, search for "theMovie" usage.
*X
999 week interval.
*X
2h repeat time says "120 minutes" in alarm list tooltip
VX
We're not properly uniquing media items. Bleah.
*X
Switch from BDAlias to NDAlias?
*X
Alerts will bring set window to the front; should they?
>X
"All Alarms" in dock menu won't switch Spaces yet "Set Alarm" does; why?
*X
No, this doesn't seem to be the case.
>X
And ouch, if new alarm window is in another Space, activation will pop up the alarm window in this Space and switch to the other Space for the new alarm. Yikes.
*X
Here's my basic rationale for the current behavior: choosing "Set Alarm" or using the keyboard equivalent means you want to set an alarm with minimal intrusion. Clicking on the Dock icon means you want to use Pester as a whole, therefore it should switch to whatever Space is appropriate. People can always add Pester to all Spaces if desired.
>X
Fix - button
*X
It should validate, not be active unless necessary
*X
(use bindings?)
VX
Dock icon bouncing is broken
*X
It only appears to bounce if Pester is in the background
*X
Fixed with NMInstall
*X
Somehow "today" is missing from the date menu now
*X
Horizontal resizing problems with the Alarms window
>X
Figure out Sparkle file in use stuff
*X
Can we just quit relaunch.app at startup? Heh.
*X
Updated from [65] to [73]. Done.
>X
Beta 9
*X
You can set =, `, etc., as key chars. Not in punctuationCharacterSet.
*X
Readd "– All" via Option key
>X
"Wait for idle" option doesn't work as expected. When the dock icon starts bouncing, Pester comes to the front (because of [PSAlarmAlertController performAlertsForAlarm:]).
*X
PSAlarmNotifierWaitForIdle should act on PSAlarmAlertController as well.
*X
Now, Pester coming to the front stops dock bouncing.
>X
Make Dock bouncing more reliable.
VX
Reproduced 4/2010
VX
Dock icon bounce only works *once* (with bounce, movie, speech only)
*X
Yes, because we never call NMRemove if the alarm isn't dismissed another way
VX
With Pester in front, it bounces forever
*X
But sometimes it doesn't.
*X
With movie alert alone (try still photo), it bounces forever
V
>X
Switch PSSpeechAlert to AUSpeechSynthesis audio unit (10.5+ only)
augn ttsp appl - Apple: AUSpeechSynthesis
*X
Speech preview (means we need to factor code out of PSSpeechAlert)
*X
Change the text in Preferences depending on whether you're on 10.4
>X
If you have no snooze time set, then choose 'until', then cancel, it doesn't go back to the previously selected item
*X
Consider hiding the snooze time field when you choose "until", too.
*X
Integrate Dutch & German DateCompletions.strings
*X
Fix some keyboard focus issues with alerts in the Set Alarm window.
*X
Keyboard navigation for Read Me.
*X
Fix launching on machines without English as the preferred language (sorry!)
>X
We may need to change "Default Output Device" to "Alert Device" or something
*X
kAudioUnitSubType_SystemOutput is the alert device; kAudioUnitSubType_DefaultOutput is the actual default output.
*X
Need to get notified when default device changes, too.
>X
Beta 10
>X
Dock icon timings round up, dock menu timings round down
*X
Dock displayed time is a minute off dock menu displayed time
*X
Perhaps this was intentional... but does it explain the following?
*X
62 second timer never updated properly. Oops.
*X
Probably related: Alarm times can be off by up to one second in certain cases. (Yup, this is true.)
*X
Possible solution:
*X
Remove debug logging.
*X
NJRHotKeyField doesn't reset when you switch away from the window (via Spaces or cmd-`); also, it was left justifying when we activated prefs
>X
We need to disable the hotkey while editing; otherwise, you can't assign a superset of that hotkey (setShortcutsEnabled: why don't we use it?)
*X
Enabling shortcuts also seems rather broken right now.
*X
Handle audio devices being plugged/unplugged while Pester is running.
>X
Activation isn't working properly on 10.5 (window is in front, but app is not)
*X
I'm abusing performSelector:withObject:; I can't give it a NSNumber.
>X
Beta 11
*X
Preferences were broken on 10.4.
*X
Italian, Swedish, French & Croatian date completions.
>X
Voice matching was broken on 10.5+, sometimes caused the wrong voice to play
>X
Thought it was something else, turned out not to be.
*X
Race condition with preview voices if you select from the menu too quickly: sometimes it doesn't change.
>X
Growl support for alarms, too.
*X
Remove the Core Animation stuff and just use Growl to display the alarm name and time remaining.
*X
Check how I do it in NCIDpop (enabling, etc.)
*X
When you click, it should highlight the alarm.
>X
The Growl notification retains the alarm and it doesn't get rescheduled when slept.
*X
We need to unregister the Growl handler on PSAlarmAlertStopNotification.
>X
Beta 12
*X
Couldn't define a shortcut with the "A" key.
*X
Send null event to wake machine up with notifier.
*X
Define another method of formatting relative dates.
>X
Beta 13
*X
defaults write net.sabi.Pester PesterAlarmAlertWaitForIdleTime
*X
Fix for Lion (Perl 5.10)
>X
Beta 14
*X
Still some issues with timing with large #s of hours (1 week, etc. needs fixing)
>X
Lion issues
*X
Non-new speech voices don't work (gone in 10.7.2)
VX
Can widen date popup so it looks like a real combo box
*X
Do this on Lion only (currently it's unconditional)
*X
Fix (revert?) Perl build paths so we can still build on 10.6
>X
Beta 15
*X
930 doesn't work for 9:30
*X
Fix developer.apple.com—mac#//apple_ref/doc/uid/DTS40010791
>X
ML signing
>X
More dock time remaining issues
VX
We can just use ceil(...) for generating output but we should not use it for the timer. Go back to fractional seconds and solve the problem.
*X
Actually, no.
*X
Basic issue, just as Peter identified: ceil(...) works fine for <1m, but there's the specific case where we've got a time between x:00 and x:01 instead of x:59 and x:00, the timer goes off, it's set for 60 seconds and the problem just gets perpetrated forever. Maybe just set for slightly more than 60 seconds.
*X
Looks like just not using fractional sections *does* work.
>X
Beta 16
>X
Expand the alarm window if the alarm message is too long (within reason); ellipsize? what about the dock menu?
*X
Ellipsize: done.
*X
Remove "Do It" from Edit menu (oops!)
>X
Retina volume icons
*X
Steal from iTunes (10.7!): stackoverflow.com—11784713
*X
Retina calendar & arrow icons
*X
930a too
*X
Fix the "Expression result unused" stuff; it looks like it could be a legitimate bug
>X
Fix languages with Date::Manip; can just upgrade since we are 10.6+ now
*X
Encodings reset
*X
Are weekdays doing the same thing as in 5? Lots seem to refer to the past. (Yup.)
*X
See if we can delete the TZ data — on the other hand, never mind.
*X
Growl tooltip mentions the prefpane but it's an app in 2.0
>X
Stop truncating our own alarm messages
*X
Ellipsization in Alarms window breaks if you rearrange the columns
*X
"on in 2 days", etc. is crazy — what was I thinking? — easiest to just get rid of the word "on"
>X
Fix time zone handling with Date::Manip
*X
We're using defaultTimeZone, this may not change.
*X
Use NSCurrentLocaleDidChangeNotification
*X
Integrate patch to disable dock icon (github.com—11)
*X
Need to document user default PesterLogAlarmTimerExpired
>X
Growl-only notifications never finish when set to repeat. Oops.
V
*X
Actually, this is a bug in Growl; everything still works fine in Growl 1.x.
"the clicking of the notification having no effect is a known issue that we haven't fully solved, but is slated for a release after 2.1.": groups.google.com—forum
*X
Can test with NSRunningApplication
*X
Repeating icon in alarm list
>X
Use a different set of names for the output devices ("name" instead of "type"), as in the sound effects tab of Sound System Preferences?
*X
Or both for deduplication purposes? Consider the case of a Bluetooth device which is both "Bluetooth Headset" and "Bluetooth Headphones". OTOH, Sound menu extra / System Preferences popup doesn't get this right either.
*X
Now just doing what the Sound menu extra does; happy for now.
>X
Notification Center in addition to Growl
*X
Save/restore selected notification system in defaults
*X
Popup is too narrow on Snow Leopard
*X
“Stop Repeating”, not “Stop Alerts”: better idea
*X
Support this on startup, too
*X
In 10.9, calling -removeDeliveredNotification: and -removeAllDeliveredNotifications: will now remove notifications that are displayed. Make "Stop All Alerts" (probably not dismissal?) do this.
V
>X
Auto-move to apps folder?
*X
Code needs work — blindly interpolates into sh scripts, uses non-absolute paths, guesses as to being on a DMG when it could use lower-level API
*X
Also need to delete rather than trash to avoid breaking Hazel
>X
Playing speech through the correct device broke; it seems to go through whatever device we specified *first*, but not update when changed. 10.8 bug?
*X
No, the problem is that we only change the device when recreating a NJRSpeechSynthesizer; we don’t do that for the NJRVoicePopUpButton.
V
>X
Handle alarm—mostly alert—restoration failure
PSAlerts => can't restore one or more alerts, keep the rest
Need to add error to initWithPropertyList: protocol, otherwise we can't get back partially-formed objects.
- (id)initWithPropertyList:(NSDictionary *)dict error:(PSException **)exception;
VX
Two places:
*X
-[PSAlarmSetController awakeFromNib] reading default alert information
>X
-[PSApplication finishLaunching] / [PSAlarms setUp] reading alarms
*X
Test GUI recovery
*X
Localize
*X
Handle issue when something serious happens with the complete alarm list; starting over or quitting are the only options
>X
Three options at the alarm level:
*X
Remove the alarm.
*X
Partial alert restoration; should mention which alerts we *could* successfully restore
*X
Replace alerts with default alerts.
*X
Integrate with objectForRequiredKey: or exceptions, or just leave things as they are with asserts?
*X
Tests, too! Just use SenTestingKit for now.
*X
Dirty the alarms immediately after we've finished messing with them; they aren't getting written back. In +[PSAlarms setUp] perhaps.
*X
Merge JRErr changes
>X
Check with App Nap on our timer accuracy on 10.9
*X
Nope, the default tolerance is 0; we're fine.
*X
Update Read Me
*X
The Sparkle alert sets SUEnableAutomaticChecks but the Preferences checkbox sets SUCheckAtStartup. These should be consistent, somehow.
*X
Get a new Mac developer account
*X
Sign
*X
Test updating
*X
Ship!
>X
Beta 17
*X
32→64 transition (-DNS_BUILD_32_LIKE_64).
*X
Make updates.xml be generated by a script that delivers a different version for pre-1.1b15 versions
*X
Remove the "Thanks" stuff.
*X
Remove volume setting code
*X
Fix the beep preview (NJRQTMediaPopUpButton.m) to work like the actual beep
*X
Perl 5.12 for 10.7–10.9
>X
Beta 18
>X
Stack traces when changing output devices
*X
Broke something in cleanup of canSetVolume: NSArrayController references it
*X
Vestiges of volume overriding, which we don't do because hog mode is unsuitable
*X
Just take it out
>X
Speech voice selection isn't working at *all* on Mountain Lion; it just uses the system default voice all the time
*X
Will soOutputToAudioDevice work instead (simpler for 10.6+)? Yes.
*X
Test on 10.9/10.6/10.7, then ship it
*X
Switch to the 10.8 SDK for Xcode 5 compatibility
*X
Check that it works on 10.6 still
*X
Fix countdown shadow drawing; it's ugly particularly on Retina displays
>X
Finish documentation
*X
More alerts
*X
Audio output discussion
*X
Notifications
*X
Time remaining is not showing up in the Dock initially (not matching Preferences configuration) — this is a timing related issue, probably (check for release notes)
V
*X
Countdown is not being drawn in Retina resolution (because the icon isn’t)
Doing the best we can for now, short of switching to NSDockTile and a view. Revisit when we have a higher-resolution icon.
*X
"0" does not work for midnight, even in 24-hour time (but "00" does)
*X
Bigger default size for Read Me window (check 11ʺ MacBook Air resolution). Make the sidebar wider too since the cropping/ellipsization seems annoyingly flaky.
>X
Ellipsization is an issue in Read Me. Can’t this be automatic?
*X
Retina displays have issues with the read me (10.8, maybe 10.7.4?)
>X
Beta 19
*X
Display message in notifier in tooltip (if it’s too long)
>X
Alarm list initial scrolling porsition is broken in 10.10
*X
This is an OS X bug; same happens with Rules in Mail.app.
*X
Worked around.
*X
10.10 compatibility for Perl
>X
Speech voices are displayed if they're not enabled
*X
Seems like no API for this
*X
What I did is broken on 10.9 (and maybe earlier) — not actually, just if System Prefs not opened
*X
Sizes for PSTimeDateEditor are wrong on Yosemite, again (test in 10.7–10.9)
*X
Check out "Message:" vertical alignment in 10.9 vs 10.10
*X
If you add a new voice while Pester is running, it doesn't show up in the menu (is there a notification we can use? Can we just watch /System/Library/Speech/Voices?)
*X
Fix code signing for embedded frameworks for 10.9.5/10.10 compatibility: furbo.org—code-signing-and-mavericks
*X
Upgrade nibs and project file to Xcode 6.1
*X
Test that Sparkle still works
*X
Build on 10.9.5 so we can keep 10.7 compatibility (this will be the last version supporting 10.7).
*X
Build 59: correctly link Perl on 10.8
>X
Build 61: finally fix the voice handling
>X
Enabled voices selection changed — we get no (or all?) available voices now
*X
Yeah, seems that 0/1/2 no longer do what we're expecting. May have to remove this feature entirely.
*X
Can I use GetVoiceInfo with soVoiceFile? No.
V
*X
We have another infinite recursion in voice list creation?!
508 net.sabi.Pester 0x0007b485 -[NJRVoicePopUpButton _invalidateVoiceSelection] + 35
509 net.sabi.Pester 0x0007b4ea -[NJRVoicePopUpButton setVoice:] + 68
510 net.sabi.Pester 0x0007b240 -[NJRVoicePopUpButton _refreshVoiceList] + 1084
511 net.sabi.Pester 0x0007b485 -[NJRVoicePopUpButton _invalidateVoiceSelection] + 35
*X
Release build 61 with *just* this changed, since it's such a showstopper; will need to rebuild on 10.9.5 with the 10.10 SDK to do this, so we can still support back to 10.7.
>X
Beta 20
*X
Drop 10.7
*X
Drop 10.8 (no need to compile on 10.9 any more)
*X
The media open sheet didn't display if the alert sound was selected.
>X
“Play sound through:” reverts to “Default alert device” when refreshing list
*X
Fixed.
>X
Sound output target reverts to [something else] when changing default output device
*X
The whole flow here is really a mess. We're conflating the *system* default output device with Pester’s default output device for many purposes.
>X
Work on startup time — slow even with SSD (fewer time zones? compare ± Perl)
*X
Need to refresh -[PSTimeDateEditor _update] when loading complete (add completions, etc.)
*X
Likely use something like NJRNaturalLanguageDateParsingAvailableNotification.
*X
Deadlock issue with parsing nil to check whether parsing works (yet).
*X
By Instruments, looks like about 0.5s for +[NJRDateFormatter initialize], or about 50% of startup time
*X
We can *delay* Perl startup entirely, halving startup time from about 0.9 to about 0.45 seconds.
*X
With async initialization being triggered from when the software needs it versus on library initialization, startup time decreases less, to about 0.6 seconds.
*X
Starting the async init from the main runloop, we can do as well as 0.4 seconds.
*X
It doesn't help initializing the queue as QOS_CLASS_BACKGROUND — it's 10.10-only in any case.
*X
Still need to check into ownership/leakage issues and test time zone/locale changes.
*X
2014-12-13 11:35:03.019 Pester[46856:13484177] Failed to connect (contentsBox) outlet from (NJRReadMeController) to (NSBox): missing setter or instance variable
*X
Update Sparkle acknowledgement
>X
Pester 1.1b19 introduced voice loading infinite recursion in certain cases (thanks, João Nelas)
*X
Need to verify this; waiting for him to get back to me.
V
*X
Use Data Detectors!
>X
10.11 issues — work around or document
*X
Help window width — seems a beta bug, fixed
*X
Check choosing “Other…” — did I already fix this? It’s crashing.
>X
San Francisco changes for 10.11
*X
Dock icon
*X
“Alarm will be set for…”
*X
“Next alarm:”
*X
Consider using a larger font in the notifier
V
*X
Double-clicking to collapse split view doesn't work any more (filed a Radar)
*X
More voice changes (Scottish; #16).
>X
Use NSSound where we can — it lets you set a playbackDeviceIdentifier
*X
Duplication of PLAlertRepetitions and kVolumeWhatever needs fixing
*X
Leaking seems to not actually be an issue. Never mind.
VX
AirPlay doesn't show up always: forums.developer.apple.com—17664
*X
Disable AirPlay entirely on 10.11 (figure out what the bizarro names show up as so we can filter them)
*X
Check tests still work
*X
Test on 10.9 too
*X
Analyze and make sure everything is OK
*X
Fix Date::Manip mention in release notes
*X
Remove "time to -applicationDidFinishLaunching:…" NSLog before release
>X
Beta 21
>X
See if we can stop the hang-on-alarm-set when system output device is set to AirPlay (and there is no current AirPlay output) — it is the case even if it's not the device being used by Pester!
*X
Even with AirPlay is not in use, we sometimes get a hang on window close.
*X
Apple may have just given up on this entirely as of 10.11, so it may not be worth fixing
>X
Incorporate new icon from José Manuel Sánchez (josema@vitaminew.com)
*X
Done (v2).
*X
Still need to put the minute hand back in
*X
Fix crash on startup when default voice is premium (#20; thanks to Sven-S. Porst)
>X
Growl and Sparkle framework headers are being shipped. Thought these were being stripped — something wrong with build process?
*X
No, just Xcode being inscrutable. stackoverflow.com—6372
V
*X
SSL for sabi.net and appcast
>X
Auto-tomorrow *is* misbehaving.
*X
Somehow, the date gets set to a prior date and then everything just breaks. Not sure how this happens.
*X
Problem seems to be setting auto-tomorrow when the window first opens, *not* when tabbing into the field.
*X
Proposed fix: make the auto-tomorrow actually be auto-*today*.
*X
But we also may have an issue where it's advancing an extra day.
>X
Idea: use cmd-J to highlight it when it changes.
*X
Tried it; this requires we keep the selection intact for the period of the highlight.
>X
Beta 22
*X
64-bit, finally!
*X
Update Perl for 10.12
>X
Ugly artifacts when dragging the split bar on 10.11 (report a bug)
*X
Fixed in 10.12; updated Web page
*X
Get rid of tab-specific menu items when alarm list is visible
*X
No more custom Sparkle
*X
Hot keys are broken (no 64-bit refCon)
>X
QuickTime → AVFoundation for videos
V
>X
References
Movist migration from QT to AVFoundation: github.com—0552ed927a28ad7c6583393943c101faf5085493
*X
AVFoundation for movies; Quick Look (!) or PDFKit for still images/PDFs.
*X
AVAudioPlayer won't work well enough — openradar.me—22873794
>X
AVPlayer is suboptimal for video
>X
Redirecting audio is impossible — forums.developer.apple.com—59178
*X
File a bug
*X
May need to stay off the main thread: forums.developer.apple.com—39798
*X
Likely just drop support for non-audio formats; too much trouble.
*X
qtmodernizer(1)
>X
Things that don’t work any more: PDFs, images
*X
Will get bugs if people view images/PDFs, I guess
*X
Remove the hidden preview QTMovieView
>X
Do some more testing with [NJRQTMediaPopUpButton setOutputVolume:withPreview:]
*X
It's going to go away, but if it's fixed in 10.9/10/11, reenable it
*X
Seems fixed with move to AVFoundation.
*X
Wow, this was *already* broken. As long as a movie had a soundtrack, we could create a PSSoundAlert with it. Whoops.
*X
Test repetition
V
*X
Filter with AVURLAsset.audiovisualTypes, or you get lots of logging on 10.10
[09:44:54.920] <<< FFR_Common >>> FigFormatReaderCreateForStreamReturningMatchingContainerLabelType: *** Could not find format reader for URL ".DS_Store" path "/Users/nicholas/Library/Sounds/.DS_Store" extension "DS_Store" FileType '' MIMETYPE "(null)" SuggFileName "(null)" SuggNameExtension "(null)"
V
*X
Lots of logging when closing the movie controller window on 10.10
[10:00:07.596] itemasync_CopyProperty signalled err=-12785 (kFigBaseObjectError_Invalidated) (invalidated) at /SourceCache/CoreMedia/CoreMedia-1562.240/Prototypes/Player/FigPlayer_Async.c line 2088
*X
Shouldn't be able to drag onto disabled NJRMediaPopUpButton
*X
Fix up Read Me
>X
Better handle no-longer-supported image types
*X
When it's in an alert being restored on startup, it seems to hang sometimes (wrong thread) and needs a better message which suggests you contact me if needed
*X
Can't display All Alarms window after clicking “Use Defaults”.
V
*X
When we select and remove an item from the menu because it isn't valid any more, we don't update the list of aliases properly and fail to validate
2016-09-18 08:11:25.580 Pester[28057:3010113] *** Assertion failure in -[NJRMediaPopUpButton _validateRecentMedia], /Users/nicholas/Documents/Development/Pester/Source/NJRMediaPopUpButton.m:102
2016-09-18 08:11:25.580 Pester[28057:3010113] An uncaught exception was raised
2016-09-18 08:11:25.580 Pester[28057:3010113] Counted 2 recent menu items, 3 of alias data
2016-09-18 08:11:25.591 Pester[28057:3010113] (
0 CoreFoundation 0x00007fff958f54f2 __exceptionPreprocess + 178
1 libobjc.A.dylib 0x00007fff930cbf7e objc_exception_throw + 48
2 CoreFoundation 0x00007fff958fa1ca +[NSException raise:format:arguments:] + 106
3 Foundation 0x00007fff94d36856 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198
4 Pester 0x00000001000133df -[NJRMediaPopUpButton _validateRecentMedia] + 1023
5 Pester 0x0000000100019228 -[NJRMediaPopUpButton _aliasSelected:] + 2568
6 libsystem_trace.dylib 0x00007fff9300e07a _os_activity_initiate + 75
7 AppKit 0x00007fff967d1dbd -[NSApplication sendAction:to:from:] + 460
8 AppKit 0x00007fff967d1b57 -[NSMenuItem _corePerformAction] + 336
9 AppKit 0x00007fff967d18b7 -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] + 114
10 libsystem_trace.dylib 0x00007fff9300e07a _os_activity_initiate + 75
11 AppKit 0x00007fff96863e54 -[NSMenu performActionForItemAtIndex:] + 131
12 AppKit 0x00007fff96863dc7 -[NSMenu _internalPerformActionForItemAtIndex:] + 35
13 AppKit 0x00007fff96863c1f -[NSCarbonMenuImpl _carbonCommandProcessEvent:handlerCallRef:] + 107
14 AppKit 0x00007fff96708fd9 NSSLMMenuEventHandler + 708
15 HIToolbox 0x00007fff974fe7be _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec + 1231
16 HIToolbox 0x00007fff974fdc48 _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec + 404
17 HIToolbox 0x00007fff975139e6 SendEventToEventTarget + 40
18 HIToolbox 0x00007fff9755d99a _ZL18SendHICommandEventjPK9HICommandjjhPKvP20OpaqueEventTargetRefS5_PP14OpaqueEventRef + 411
19 HIToolbox 0x00007fff97588d5b SendMenuCommandWithContextAndModifiers + 59
20 HIToolbox 0x00007fff97588d0c SendMenuItemSelectedEvent + 188
21 HIToolbox 0x00007fff97588be8 _ZL19FinishMenuSelectionP13SelectionDataP10MenuResultS2_ + 96
22 HIToolbox 0x00007fff97567b81 _ZL19PopUpMenuSelectCoreP8MenuData5PointdS1_tjPK4RecttjS4_S4_PK14__CFDictionaryPK10__CFStringPP13OpaqueMenuRefPt + 1794
23 HIToolbox 0x00007fff97566c5c _ZL26_HandlePopUpMenuSelection8P13OpaqueMenuRefP14OpaqueEventRefj5PointtjPK4RecttS6_S6_PK14__CFDictionaryPK10__CFStringPS0_Pt + 610
24 HIToolbox 0x00007fff97566853 _HandlePopUpMenuSelectionWithDictionary + 287
25 AppKit 0x00007fff9685ac6c _NSSLMPopUpCarbonMenu3 + 6168
26 AppKit 0x00007fff96859442 _NSPopUpCarbonMenu3 + 153
27 AppKit 0x00007fff9685939a -[NSCarbonMenuImpl popUpMenu:atLocation:width:forView:withSelectedItem:withFont:withFlags:withOptions:] + 356
28 AppKit 0x00007fff968dc0df -[NSPopUpButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 559
29 AppKit 0x00007fff967e0ae8 -[NSControl mouseDown:] + 669
30 AppKit 0x00007fff96d353c9 -[NSWindow _handleMouseDownEvent:isDelayedEvent:] + 6322
31 AppKit 0x00007fff96d363ad -[NSWindow _reallySendEvent:isDelayedEvent:] + 212
32 AppKit 0x00007fff96775539 -[NSWindow sendEvent:] + 517
33 AppKit 0x00007fff966f5a38 -[NSApplication sendEvent:] + 2540
34 AppKit 0x00007fff9655cdf2 -[NSApplication run] + 796
35 AppKit 0x00007fff96526368 NSApplicationMain + 1176
36 Pester 0x0000000100077d12 main + 34
37 libdyld.dylib 0x00007fff936f65ad start + 1
38 ??? 0x0000000000000003 0x0 + 3
)
*X
Recent media validation may not be working at all; the method looks unfinished (see Clang Analyzer results).
*X
"Can't reserve hot key equivalent" panel doesn't block main thread?
*X
Hot keys are not getting deregistered appropriately (if you reset with the same hot key, it activates Pester twice)
*X
Fix signing for Xcode 8
*X
Fix width/height of alert view text field (things got cut off)
V
*X
Test on 10.9 (and desupport if it's buggy)
Error with labelColor but I can't find it in any of the nibs — compilation error?
*X
Test on 10.10
*X
Test on 10.11
*X
Test on 10.12
>X
Beta 23
*X
About panel workaround breaks on 10.12 (seems fixed in 10.12.2, never mind)
*X
Path is not shown in help tags for custom media (unlike built-in sounds)
V
>X
Speech voice storage changed again in 10.12, is causing crashing and incorrect voice lists
Crashes on startup (#22)
Even in default US English list, Samantha is still incorrectly omitted.
*X
Give up trying to match Apple’s logic — just use SpeechObject
*X
Still figure out why we are crashing in 10.12 — wrong is one thing, crashing is another
>X
Figure out what is going on with the split view in the Read Me. Things are very broken.
*X
Need to migrate to Auto Layout.
*X
Also — we’re trying to access NSProgressIndicator from a background thread. That is not OK.
*X
When resizing Read Me, sidebar can become wider than maximum width, which looks ugly. (Try starting with no defaults then zooming. Bleah.)
*X
Update to Perl 5.18 for macOS 10.13
*X
Update Sparkle
*X
Keyboard focus in Read Me is broken (worst on 10.12, but more generally too)
>X
Test on 10.9 through 10.13
*X
See if the display artifacts are fixed on 10.11?
*X
Remove the ‘visible voices:’ debug info
*X
Test speech voices (again!) in 10.13
*X
Update Read Me
*X
Update Web page listing of bugs I can’t work around
>X
Beta 24
*X
Drop support for pre-10.12
*X
Upgrade to current Growl framework as the old one just stopped working at some point
V
*X
Update Sparkle and fix deprecation warnings
2018-06-02 08:42:58.354477-0400 Pester[16590:1111497] Scheduling the NSURLDownload loader is no longer supported.
*X
NJRHotKeyField
*X
Read Me — vibrancy and background color
*X
Volume icon
*X
Calendar text
*X
Calendar icon
>X
Control metrics changed? Remove pre-10.10 adjustments and make corresponding changes in the nib
*X
Search for NJROSXMinorVersion
*X
Check alignment of date popup menu on Retina displays
*X
Fix date combo box in sheet too
*X
LetsMove uses aliases too? — update to newer version modified from NewsBlur Helper
>X
Update build process with archiving and signed disk images (crib from NewsBlur Helper)
*X
Figure out a way to generate and archive dSYMs (we do it for Shroud).
*X
Test Sparkle updating to 1.1b24
*X
Test Sparkle updating from 1.1b24
*X
Test on 10.13
*X
Test on 10.12
V-
Beta 25
*X
Replace “OS X” via ”macOS” in notification preferences
*X
Remove Growl support
*X
Drop support for 10.14 and earlier
*X
“Unable to restore alerts” alert stuck on screen
*X
Neither alarms list nor notifier display after dismissing “Unable to restore alerts” (with either option)
V-
10.15 updates
*X
Perl
*X
Hardened runtime
*X
Sparkle 1.26.0 (for hardened runtime)
*
Notarization
*
Migrate to EdDSA signatures?
*
Time remaining drawing at incorrect text size
V-
1.1 final
*
Use a monospaced digits font variant in the Alarms window table
V
10.14+ updates
V
*
Can we do what we do with Growl with the UserNotifications framework in 10.14?
*
Should we set up notification triggers so they’ll run when Pester isn’t? May need an extension.
V
*
Is there any point in supporting localized date formats any more?
*
Alarms window sizing needs some help
*
Alarms table displays a vestigial focus ring only in the light appearance
V
Aliases & paths → bookmark URLs (last major deprecation area, aside from NSCalendarDate)
V
More QuickTime conversion?
*
Remove NJR_isStatic? It is no longer relevant because we don't handle images any mosre
*
The “–” button doesn't work reliably (the item gets reinserted at the top of the list).
>
Persist notifier position (partially implemented)
*
Add a hidden pref
*
If no saved position, default to centering
*
Add some kind of removal hook to PSAlerts
*
Adjust relative positioning for movie view
*
Document in release notes
*
Migrate PSMovieAlert to PSSoundAlert as possible
>-
Update (or remove) Date::Manip — looks like some UTF-8 changes have been made
*X
Automate this testing based on the plists
>X
Weekday support failures — needed patch in prior version
*X
Finnish
*X
Portuguese
*X
Turkish
>X
Full support failures — needed patch in prior version
*X
French
*X
Swedish
>X
Weekday supported languages (may work fully — no translations available)
*X
Catalan
*X
Danish
*X
Polish
*X
Romanian
*X
Russian
>X
Fully supported languages
*X
English
*X
German
*X
Dutch
V
Could not figure out how to fix fully in prior version — still broken
*
Italian
*
Spanish
*
Profile slow changing between Edit and View when sounds are enabled, but only in 1.1b20; can sometimes delay for over a second. Not just actionDescription.
*
Incorporate SFBCrashReporter (now it's 10.8+ and trivial to do)
*
Fix or annotate away (not possible?) Clang analyzer issues so we can build cleanly
*
Differential drawing behavior in dock icon seems to potentially be a bug
*
Somehow undoing a delete can sometimes turn a repeating alarm into a non-repeating one. Huh?
*
Update images in Read Me
*
Blog it.
*
More than 4 years, sadly. njr.sabi.net—pester-11b5-released
*
Launching with Gatekeeper alert doesn't activate Pester (any more?) on launch — since 10.11
>
Deprecations
*
Perl will no longer be bundled sometime after 10.15. Try looking for a native natural language date parser.
*
NSSplitViewController for NSReadMeController
*
Is the original reason we use a popup menu as opposed to a combobox for the date fixed? That is, can formatters work on a combobox yet?
V
*
NSCalendarDate (deprecated) ⇒ NSCalendar + NSCalendarComponents + NSDate
Prior to 10.9, NSCalendar was not thread-safe, which required the +currentCalendar and -copy/-copyWithZone: methods to make time consuming full copies. This has been improved so that expensive copy operations will be deferred until the object is mutated. If you can avoid calling setter methods on NSCalendar instances, you'll likely get better performance.
*
NSDateComponentsFormatter / NSDateIntervalFormatter
*
Don't need [NSUserDefaults synchronize] everywhere — it is really a no-op in 10.14
>
Localize everything
*
Consider CHLayoutManager: github.com—CHLayoutManager
*
VoiceOver support (accessibility descriptions)
*
Get rid of my custom typeahead in the alarm list
>
Dock plugin so alarms go off/time updates when Pester is not running
*
Tried this with Shroud; too many problems. We *could* try to use timed alerts in Notification Center for some of it, but probably not worth it.
V
*
What I promised in the Read Me from long ago
• Better repeating alarms, such as a “real time” option so you can schedule an alarm to go off every hour, on the hour, for example.
• Better handling of non-repeating expired alarms—offer the option to have the alarms go off when Pester is restarted?
• Notifications before an alarm goes off, as in xalarm.
• Full localization of all text in the application, not just date and time formats.
• User interface overhaul (Philippe, I am not forgetting :-)
*
Make the interface simpler, less cluttered.
V
*
Automate $CFLAGS/$LDFLAGS generation
/usr/bin/perl -MExtUtils::Embed -e ccopts (or ldopts), but REMOVE -lutil
*
Switch to NSPathControl
*
Switch to NSPredicateEditor
>
High
>
Common user requests
>
Repeat every day if date is omitted (#19)
*
This is a lot of work. Probably several days' worth. Probably want to migrate off NSCalendarDate first. Some early attempts are in a branch on mary.
>
Arbitrary repeats [Vicki Brown, others]
*
After we modernize date classes? some way to use ICU or CalendarStore?)
*
Could do the Due thing of just days of week.
>
Ability to pause/resume interval alarms. I'd use it.
V
Interval alarms don't get saved as interval + date; this is a difference from the hiptop Pester
*
Do this early before people starting using the app much
*
In particular, make sure we can support everything the hiptop alarm format does
*
It's weird how this interacts with snooze, so be careful
*
Do we need two intervals? I think I've thought through time resetting interaction more carefully on the hiptop version.
>
Macworld requests
>
Editable alarms (move the alarm window into another nib)
*
Initially modally with sheet on all alarms window.
*
We have an implementation of interval->time conversion in "snooze until".
>
Show alarm list window at startup/wake if there are any expired alarms
*
Add "trigger" button to list in addition to "delete"
*
Or…trigger expired alarms at launch?
*
Color expired alarms red (italicize too?)
*
Auto-snooze (seems like an interesting idea) — see Due
>
Have a status stack: if there are any pending messages from the alerts, then display those instead of the alarm time and don't permit the "Set" button to be used.
*
Also: if there are no alerts, don’t allow setting the alarm.
>
Medium
*
Better handling of expiring alarms; should be possible to delete them
>
Support *time* changes (different from time zone changes). Be careful: if an alarm expires, don't delete it.
*
Use NSCalendarDayChangeNotification?
*
Display time until next alarm for "at", not just an expanded date.
>
And finally, special-case time in 12-hour formats to mean the next occurrence of h:mm
*
...or does that interfere with tab-to-increment-date? How about making command key necessary for +/-? Then no autoincrement.
>
Power manager interface
*
Huh, it seems we never cancel wakeup ever ([PSPowerManager clearWakeTime]). This is dumb.
*
Requires authorization? See developer.apple.com—BetterAuthorizationSample if so (will have to deal with multiple users, networked home directories, and even versioning, too. This is really complicated.).
*
Replacement for BetterAuthSample in 10.6: ServiceManagement developer.apple.com—mac#//apple_ref/doc/uid/DTS40010071
V
*
«expired» sorts weirdly by date
>-
Low
*
If you enter a h:m:s interval, only h:m is saved
>-
Get scripting working again
>
Switch scripting to use OSAKit (10.4+)
V
Run script in a separate process (LSUIElement), that way you can kill it when alerts are stopped.
*
Or consider using an XPC service for this on 10.7+.
*
See has's comment on how to call handlers by using objc-appscript
*
Great use case: sending multiple Growl/Prowl notification (see email from Dennitzio dennitzio@yahoo.com)
V
*
In order to support stopping the script, we need to set an active proc and a send proc. From Chris Page:
This is what the "active proc" is for. It is called periodically during script execution and can return an error to stop execution (usually -128).
Note that sending an Apple event can take arbitrarily long amounts of time, and the active proc is not called while waiting on replies. To cancel waiting for the reply, install "send proc" that calls AESend() and passes in an idle proc that checks for cancellation.
*
Got a simple example of aborting scripts in Beep.xcodeproj.
V
OAOSAScript has an ActiveProc but no SendProc (or IdleProc).
*
It seems to try to give events to Cocoa, though.
V
So does NDAppleScriptObject, which is what I was using until I stopped... Gah.
*
code.google.com—NDClasses looks like the newest place for this stuff.
*
But this code is very ugly
*
ASTranslate has a SendProc: osdir.com—msg00065.html
>
Use multiple handlers running in a separate thread (or not?)
*
Perhaps one handler when the alarm stops going off; one when it's going off.
*
We can make these standard handlers with "using terms from app..." - see MultiAd Creator Pro.
>
Do script button is disabled by default the first time I try to use it
*
(need to clear prefs)
*
Default script picker to ~/Library/Scripts (if it exists) or /Library/Scripts
*
Support more AppleScript file types (scpt, scptd?); use UTIs?
>-
Crash on setting alarm with "Do script" if sheet cancelled
*X
Exception problem, fixed
V
Also issues switching to view mode
*
Error only shown for ≤1s though
*
The real solution is to rearchitect so the checkbox disables itself if no script
*
Reevaluate default Read Me window size (1024×768 is minimum screen size)
>
Fix saving/restoring read me divider width; autosave isn't working properly
*
Probably the +25 padding we're adding or similar
V
*
Remove button has click-through. Don't.
>
Relative date formatting (in list) via NSDateFormatter setDoesRelativeDateFormatting?
*
[shortDateFormatter setDoesRelativeDateFormatting: YES];
*
This may not actually be what we want; it looks weird in the list, particularly right-justified.
>
Try to get hog mode working? Probably not.
>
If hog mode won't work, add a "warning: if other audio is playing through this device, it will get louder while the alarm sound is playing."
*
Or not; just dump it.
>
While we're playing, set to hog mode, and set volume to 100%. We can overlap alerts at will with this and don't have to worry about the volume stack.
V
*
To release hog mode you set the Hog mode PID to -1.
See /Developer/Examples/CoreAudio/PublicUtility/CAAudioHardwareDevice.cpp: CAAudioHardwareDevice::ReleaseHogMode()
*
Or rely on it to happen automatically? See kAudioHardwarePropertyHogModeIsAllowed.
*
One thing to worry about, however: can we affect the volume of speech the way we do with a movie? Yes, there's setVolume: in 10.5+. Just don't make the volume control affect speech on 10.4 (or just use AUSpeechSynthesis, for which we can use kSpeechVolumeProperty)
*
But even if we do this, there's no sound with hog mode enabled. WTF.
*
Hog mode (may?) take a while to set up. We (may?) need to preload it.
*
Ideally, we could quickly reduce volume to 0 before setting hog mode and put it back afterward.
*
Looks like this will not work. See here: can't redirect QuickTime/NSSpeech audio...or can we?
*
However: "NewMovieFromProperties also supports an audio context (kQTContextPropertyID_AudioContext). This allows you to specify an audio output device, set up a channel configuration, assign particular sound tracks to particular channels, and generally make use of the features of Core Audio, bypassing the limitations of the old Sound Manager. If no audio context is specified, the default output device and channel configuration are used."
*
If we're going to be doing this, need to factor more between the alert and the preview movie view. Perhaps allow PSMovieAlertController to handle previews too.
>
Reference counting a given output device should work fine.
*
Need to consider speech (and beep?) as well: don't want to change volume during speech.
*
Maybe volume should be a property of the alarm (or the alert stack) rather than an individual alert.
*
So, we need: (a) multi-alert volume handling; (b) an alarm stack to prevent audio alerts from overlapping.
*
Don't forget that you could change the default audio device while Pester is playing.
*
Investigate MTCoreAudio? Yes, somewhat useful for sample code, but overkill.
*
But also new HAL APIs: developer.apple.com—tn2223.html
*
Make speech through selected device optional? (May not want it to go to everyone.)
*
We can move the calendar window by dragging on the calendar itself. Should not be possible (was it always?)
*
Intercept -/+/= (except where part of localized strings) and use it to change date/time
*
Really need an "in XX minutes" thing
*
Seems that message history isn't aging properly
*
Don't autohide Pester when brought to the front if there are other outstanding undismissed alarms
*
Check—do all the windows have defaultButtonCell set properly?
V
>
Sparkle update.xml: update pubDate, lastBuildDate (Shroud does this already, too?)
python -c 'import email; print email.Utils.formatdate(localtime=True)'
>
Sparkle dynamic release notes (easier now everything's on osric)
*
Sparkle periodic checks
*
Stop A/V alerts on keystroke/click (just like in hiptop Pester)
*
"Stop Alerts" menu item should validate
>-
"Stop Repeating" is broken too; sometimes it doesn't
>-
Alarm is not being removed from list of expired alarms when you click this button
*X
...but then, if you create a new alarm, it DOES get removed. Not flushing prefs?
*
Ouch, but then at this point, "expired alarms:" lists the alarm but it is not written to disk. WTF?
*
Sometimes validation breaks with the “–” button. Not sure why or when.
*
Fix highlight appearance with play/script buttons: either use dark blue/light blue stuff from tables, or darken entire button
*
Fix baseline in script button; it was fine in 10.2 (njr.sabi.net—)
*
Add donation link
>X
Report bug - tooltips on table cells show the table's tooltip followed by the cell's tooltip.
*X
Yes, this applies to either the table view or the scroll view.
*X
Remove the scroll view tooltip?
*X
I don't think this is a bug any more.
>
Enhancements
>
Remember default alarm time/interval, like hiptop Pester
*
Also: save the relative date (i.e., "next Thursday"); will have to do it along with the locale
*
When adding/resuming a time-based alarm, first try the saved date, then try the saved relative date, then try the next occurrence of the time (today or tomorrow)
V
*
Better, remember alarm time/interval/alerts with combo box contents
I would have two suggestions: The first would be to store the timing and other settings along with the timer’s title and fill those parts out as well. I could imagine this working well without introducing new UI and like the simplicity of such an approach. But I also see the danger of it being unexpected/confusing. The other would be having a menu. I could imagine either a favourites menu there or a history menu, not really sure which one gives the better tradeoffs (control vs needing an editor window).
One possibility I thought of was having some kind of "lock" or "link" control which would keep the settings associated with the name and prevent editing.  A history option for the selected alerts would make sense too.
Another detail that irks me (even though I can understand how the behaviour is perfectly logical in itself) is how Pester reliably remembers the last snooze interval I used. That’s a good thing in itself. However, it does make me think »stupid computer« when I am offered a 10 minute snooze after a 90 second timer. Again, not a real problem as it doesn’t really make sense to snooze after the 90 second timer anyway, but perhaps an interesting detail to share.
It'd be perfectly reasonable and non-confusing, I think, to save a snooze interval per timer, along with the alerts described above.  Will add it to the list.
*
UI cleanup: the creation window is too cluttered. Also, maybe use some shading?
*
Dispay time remaining for every alarm, not just the next one (list? HUD? widget?)
*
Save alert info even if the alert is disabled
*
Can't undo deletion of an expired alarm (by design?)
*
Allow drag and drop of .ics, import and export of alarms
*
Watch system sound folders for changes (github.com—VDKQueue)
>
Cleanup
V
Stop abusing NSAssert — chanson.livejournal.com—170068.html
>
PSCalendarController interface is pretty bizarre.
*
Eliminate duplication in showCalendar: methods (everything under #pragma mark calendar, actually)
*
OACalendarView: replace with newer version? Not using current stuff.
*
NSViewAnimation for animating main window?
V
*
Need to redo the Git repository to fix some authors, but we can't rewrite history once it's pushed to GitHub. Will need to reset it and push:
git filter-branch -f --commit-filter 'case ${GIT_AUTHOR_NAME} in
nicholas) n="Nicholas Riley"; m="pester@sabi.net" ;;
esac
export GIT_AUTHOR_NAME=$n
export GIT_AUTHOR_EMAIL=$m
export GIT_COMMITTER_NAME=$n
export GIT_COMMITTER_EMAIL=$m
git commit-tree "$@"
' 701ef749615858bb33f60c2f7dbe7e0eab70b615..HEAD
*
Why are we not sharing the same menu between "snooze until" and the main window? Dumb.
*
Switch to getObjectValue:forString:range:error: — meh, no need
>
Sort out the release notes / documentation duplication issue (perhaps with reST)
*
Or port Help to OmniOutliner/Helpify.
>-
Can’t reproduce
*
Stuck in repeat field if alarm time (or duration?) is invalid
>
Sometimes, alarms stay as expired, end up in the 'expired' section of the alarm list, and never get removed.
*
Not seen this in a very long time, probably fixed.
V
Extremely delayed alarm times can be huge (4....... years)
*
Not seen this in a very long time, probably fixed.
V
>X
Crash on speech stopping: I fixed one, but there's another?
Process: Pester [16435]
Path: /Users/nicholas/Documents/Development/Pester/Source/build/Debug/Pester.app/Contents/MacOS/Pester
Identifier: net.sabi.Pester
Version: 1.1b8 (32)
Code Type: X86 (Native)
Parent Process: launchd [102]
Date/Time: 2010-04-15 22:09:30.925 -0500
OS Version: Mac OS X 10.6.3 (10D573)
Report Version: 6
Interval Since Last Report: 394136 sec
Crashes Since Last Report: 1
Per-App Interval Since Last Report: 334976 sec
Per-App Crashes Since Last Report: 1
Anonymous UUID: 630AEAD2-3C8D-438C-BEEA-B1209416C67A
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000004
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 ....speech.synthesis.framework 0x90b87c9a StopSpeechChannel(SpeechChannelRecord*, long, bool) + 100
1 ....speech.synthesis.framework 0x90b87daa StopSpeech + 21
2 net.sabi.Pester 0x0002e59c -[NJRSpeechSynthesizer stopSpeaking] + 30 (NJRSpeechSynthesizer.m:165)
3 net.sabi.Pester 0x0000b69b -[NJRVoicePopUpButton stopVoicePreview:] + 41 (NJRVoicePopUpButton.m:119)
4 net.sabi.Pester 0x00014ca9 -[PSAlarmSetController silence:] + 86 (PSAlarmSetController.m:546)
5 net.sabi.Pester 0x00014f30 -[PSAlarmSetController(NSWindowNotifications) windowWillClose:] + 44 (PSAlarmSetController.m:607)
6 com.apple.Foundation 0x957a11cb _nsnote_callback + 176
7 com.apple.CoreFoundation 0x9563b3f9 __CFXNotificationPost + 905
8 com.apple.CoreFoundation 0x9563ae2a _CFXNotificationPostNotification + 186
9 com.apple.Foundation 0x95796098 -[NSNotificationCenter postNotificationName:object:userInfo:] + 128
10 com.apple.Foundation 0x957a3475 -[NSNotificationCenter postNotificationName:object:] + 56
11 com.apple.AppKit 0x91816b0a -[NSWindow _close] + 239
12 net.sabi.Pester 0x00014bee -[PSAlarmSetController setAlarm:] + 497 (PSAlarmSetController.m:538)
13 com.apple.AppKit 0x916455c6 -[NSApplication sendAction:to:from:] + 112
14 com.apple.AppKit 0x91724d41 -[NSControl sendAction:to:] + 108
15 com.apple.AppKit 0x917207f2 -[NSCell _sendActionFrom:] + 169
16 com.apple.AppKit 0x917e4396 -[NSButtonCell performClick:] + 707
17 com.apple.AppKit 0x9173f2cb -[NSButton performKeyEquivalent:] + 378
18 com.apple.AppKit 0x9173f13b -[NSControl _performKeyEquivalent:conditionally:] + 165
19 com.apple.AppKit 0x9173f007 -[NSView performKeyEquivalent:] + 367
20 com.apple.AppKit 0x9173f007 -[NSView performKeyEquivalent:] + 367
21 com.apple.AppKit 0x9173ed7a -[NSWindow performKeyEquivalent:] + 245
22 com.apple.AppKit 0x9179e9a8 -[NSTextField textDidEndEditing:] + 823
23 com.apple.Foundation 0x957a11cb _nsnote_callback + 176
24 com.apple.CoreFoundation 0x9563b3f9 __CFXNotificationPost + 905
25 com.apple.CoreFoundation 0x9563ae2a _CFXNotificationPostNotification + 186
26 com.apple.Foundation 0x95796098 -[NSNotificationCenter postNotificationName:object:userInfo:] + 128
27 com.apple.AppKit 0x917f9f36 -[NSTextView(NSPrivate) _giveUpFirstResponder:] + 553
28 com.apple.AppKit 0x917f9d02 -[NSTextView(NSKeyBindingCommands) insertNewline:] + 531
29 com.apple.AppKit 0x917f9a3c -[NSResponder doCommandBySelector:] + 77
30 com.apple.AppKit 0x917f9357 -[NSTextView doCommandBySelector:] + 240
31 com.apple.AppKit 0x917e82ab -[NSKeyBindingManager(NSKeyBindingManager_MultiClients) interpretEventAsCommand:forClient:] + 1911
32 com.apple.AppKit 0x917ebb3b -[NSTextInputContext handleEvent:] + 1604
33 com.apple.AppKit 0x917e7914 -[NSView interpretKeyEvents:] + 209
34 com.apple.AppKit 0x917eb3c1 -[NSTextView keyDown:] + 751
35 com.apple.AppKit 0x9171c618 -[NSWindow sendEvent:] + 5757
36 com.apple.AppKit 0x916351af -[NSApplication sendEvent:] + 6431
37 com.apple.AppKit 0x915c8c4f -[NSApplication run] + 917
38 com.apple.AppKit 0x915c0c85 NSApplicationMain + 574
39 net.sabi.Pester 0x0001d2e3 main + 24 (main.m:14)
40 net.sabi.Pester 0x0000283f _start + 209
41 net.sabi.Pester 0x0000276d start + 41
Thread 1: Dispatch queue: com.apple.libdispatch-manager
0 libSystem.B.dylib 0x91355b42 kevent + 10
1 libSystem.B.dylib 0x9135625c _dispatch_mgr_invoke + 215
2 libSystem.B.dylib 0x91355719 _dispatch_queue_invoke + 163
3 libSystem.B.dylib 0x913554be _dispatch_worker_thread2 + 240
4 libSystem.B.dylib 0x91354f41 _pthread_wqthread + 390
5 libSystem.B.dylib 0x91354d86 start_wqthread + 30
Thread 2:
0 libSystem.B.dylib 0x9132f2fa mach_msg_trap + 10
1 libSystem.B.dylib 0x9132fa67 mach_msg + 68
2 com.unsanity.ape 0x002d79a5 __ape_agent + 279
3 libSystem.B.dylib 0x9135ca19 _pthread_start + 345
4 libSystem.B.dylib 0x9135c89e thread_start + 34
Thread 3:
0 libSystem.B.dylib 0x9132f35a semaphore_timedwait_signal_trap + 10
1 libSystem.B.dylib 0x9135cea1 _pthread_cond_wait + 1066
2 libSystem.B.dylib 0x9138ba28 pthread_cond_timedwait_relative_np + 47
3 ...ple.CoreServices.CarbonCore 0x95bb5465 TSWaitOnConditionTimedRelative + 242
4 ...ple.CoreServices.CarbonCore 0x95bb51a3 TSWaitOnSemaphoreCommon + 511
5 ...ickTimeComponents.component 0x968d991d ReadSchedulerThreadEntryPoint + 4698
6 libSystem.B.dylib 0x9135ca19 _pthread_start + 345
7 libSystem.B.dylib 0x9135c89e thread_start + 34
Thread 4: JavaScriptCore: FastMalloc scavenger
0 libSystem.B.dylib 0x9135d262 __semwait_signal + 10
1 libSystem.B.dylib 0x9135cf1e _pthread_cond_wait + 1191
2 libSystem.B.dylib 0x9135ebb8 pthread_cond_wait$UNIX2003 + 73
3 com.apple.JavaScriptCore 0x98bca3e6 WTF::TCMalloc_PageHeap::scavengerThread() + 614
4 libSystem.B.dylib 0x9135c89e thread_start + 34
Thread 5:
0 libSystem.B.dylib 0x91354bd2 __workq_kernreturn + 10
1 libSystem.B.dylib 0x91355168 _pthread_wqthread + 941
2 libSystem.B.dylib 0x91354d86 start_wqthread + 30
Thread 6:
0 libSystem.B.dylib 0x9132f35a semaphore_timedwait_signal_trap + 10
1 libSystem.B.dylib 0x9135cea1 _pthread_cond_wait + 1066
2 libSystem.B.dylib 0x9138ba28 pthread_cond_timedwait_relative_np + 47
3 com.apple.audio.CoreAudio 0x97594965 CAGuard::WaitFor(unsigned long long) + 219
4 com.apple.audio.CoreAudio 0x97597997 CAGuard::WaitUntil(unsigned long long) + 289
5 com.apple.audio.CoreAudio 0x97595294 HP_IOThread::WorkLoop() + 1892
6 com.apple.audio.CoreAudio 0x97594b2b HP_IOThread::ThreadEntry(HP_IOThread*) + 17
7 com.apple.audio.CoreAudio 0x97594a42 CAPThread::Entry(CAPThread*) + 140
8 libSystem.B.dylib 0x9135ca19 _pthread_start + 345
9 libSystem.B.dylib 0x9135c89e thread_start + 34
Thread 7:
0 libSystem.B.dylib 0x91354bd2 __workq_kernreturn + 10
1 libSystem.B.dylib 0x91355168 _pthread_wqthread + 941
2 libSystem.B.dylib 0x91354d86 start_wqthread + 30
Thread 8:
0 libSystem.B.dylib 0x9135d262 __semwait_signal + 10
1 libSystem.B.dylib 0x91388e44 nanosleep$UNIX2003 + 188
2 libSystem.B.dylib 0x91388d82 usleep$UNIX2003 + 61
3 com.apple.AppKit 0x91770885 -[NSUIHeartBeat _heartBeatThread:] + 2039
4 com.apple.Foundation 0x957a18dc -[NSThread main] + 45
5 com.apple.Foundation 0x957a188c __NSThread__main__ + 1499
6 libSystem.B.dylib 0x9135ca19 _pthread_start + 345
7 libSystem.B.dylib 0x9135c89e thread_start + 34
Thread 9:
0 libSystem.B.dylib 0x91354bd2 __workq_kernreturn + 10
1 libSystem.B.dylib 0x91355168 _pthread_wqthread + 941
2 libSystem.B.dylib 0x91354d86 start_wqthread + 30
Thread 10:
0 libSystem.B.dylib 0x9132f35a semaphore_timedwait_signal_trap + 10
1 libSystem.B.dylib 0x9135cea1 _pthread_cond_wait + 1066
2 libSystem.B.dylib 0x9138ba28 pthread_cond_timedwait_relative_np + 47
3 ...ple.CoreServices.CarbonCore 0x95bb5465 TSWaitOnConditionTimedRelative + 242
4 ...ple.CoreServices.CarbonCore 0x95bb51a3 TSWaitOnSemaphoreCommon + 511
5 ...ple.CoreServices.CarbonCore 0x95c0fa50 AIOFileThread(void*) + 1127
6 libSystem.B.dylib 0x9135ca19 _pthread_start + 345
7 libSystem.B.dylib 0x9135c89e thread_start + 34
Thread 0 crashed with X86 Thread State (32-bit):
eax: 0x00000000 ebx: 0x90b87c44 ecx: 0x00000001 edx: 0x00000008
edi: 0x0b2b8e40 esi: 0x00000000 ebp: 0xbfffe648 esp: 0xbfffe5f0
ss: 0x0000001f efl: 0x00010246 eip: 0x90b87c9a cs: 0x00000017
ds: 0x0000001f es: 0x0000001f fs: 0x00000000 gs: 0x00000037
cr2: 0x000000040 libSystem.B.dylib 0x9695f262 __semwait_signal + 10
1 libSystem.B.dylib 0x9695ef1e _pthread_cond_wait + 1191
2 libSystem.B.dylib 0x96960bb8 pthread_cond_wait$UNIX2003 + 73
3 ...thesis.MacinTalkSynthesizer 0x0f402c42 MTMBSelectUnits::DeletePhrase(MTFESpeechElement*, MTBEPersistentParam*, bool) + 134
4 ...thesis.MacinTalkSynthesizer 0x0f3d9d3d MTMBPhraseProcessor::~MTMBPhraseProcessor() + 113
5 ...thesis.MacinTalkSynthesizer 0x0f3b11ff MTBEPhraseProcessor::~MTBEPhraseProcessor() + 123
6 ...thesis.MacinTalkSynthesizer 0x0f3d9d4c MTMBPhraseProcessor::~MTMBPhraseProcessor() + 128
7 ...thesis.MacinTalkSynthesizer 0x0f3aab05 MT3BEngineTask::~MT3BEngineTask() + 271
8 ...thesis.MacinTalkSynthesizer 0x0f3aa336 ClearSpeechProcessing(SpeechChannelManager*) + 136
9 ...thesis.MacinTalkSynthesizer 0x0f3add6e SpeechChannelManager::UseVoice(VoiceSpec*, __CFBundle*) + 64
10 ...thesis.MacinTalkSynthesizer 0x0f3d6b27 SEUseVoice + 85
11 ....speech.synthesis.framework 0x94789a25 SetSpeechInfo + 431
12 ...e.audiounit.speechsynthesis 0x0a8a0318 0xa89f000 + 4888
13 ...e.audiounit.speechsynthesis 0x0a8a3c60 AUSpeechSynthesisEntry + 13647
14 ...e.audiounit.speechsynthesis 0x0a8a15f7 AUSpeechSynthesisEntry + 3814
15 ...e.audiounit.speechsynthesis 0x0a8a08e8 AUSpeechSynthesisEntry + 471
16 ...ple.CoreServices.CarbonCore 0x923a5d87 CallComponentDispatch + 29
17 ...apple.audio.units.AudioUnit 0x98d3a2fc AudioUnitSetProperty + 67
18 net.sabi.Pester 0x0002eb7b -[NJRSpeechSynthesizer NJR_setVoice:] + 350 (NJRSpeechSynthesizer.m:53)
19 net.sabi.Pester 0x0002f0ea -[NJRSpeechSynthesizer setVoice:] + 53 (NJRSpeechSynthesizer.m:156)
20 net.sabi.Pester 0x0000b8fc -[NJRVoicePopUpButton _previewVoice] + 150 (NJRVoicePopUpButton.m:93)
*X
Haven’t been able to reproduce this in ages; probably fixed.
>X
The [-] and calendar buttons don't line up vertically
*X
We can’t do anything about this and keep the icon/– equally centered.