emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* notifications for todo items
@ 2012-02-22 23:38 Peter Münster
  2012-02-23  1:28 ` Nick Dokos
  0 siblings, 1 reply; 12+ messages in thread
From: Peter Münster @ 2012-02-22 23:38 UTC (permalink / raw)
  To: emacs-orgmode

Hi,

I've written a module, that allows flexible notifications for todo items
with deadline: http://pmrb.free.fr/work/OS/org-notify.el

Feedback is welcome!

-- 
           Peter

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: notifications for todo items
  2012-02-22 23:38 notifications for todo items Peter Münster
@ 2012-02-23  1:28 ` Nick Dokos
  2012-02-23  8:36   ` Peter Münster
  0 siblings, 1 reply; 12+ messages in thread
From: Nick Dokos @ 2012-02-23  1:28 UTC (permalink / raw)
  To: =?utf-8?Q?Peter_M=C3=BCnster?=; +Cc: nicholas.dokos, emacs-orgmode

Peter Münster <pmlists@free.fr> wrote:

> Hi,
> 
> I've written a module, that allows flexible notifications for todo items
> with deadline: http://pmrb.free.fr/work/OS/org-notify.el
> 
> Feedback is welcome!
> 

I've only taken a quick glance, but the question that immediately came
to my mind was: what does this do that appt.el (and its org interface)
does not?  Note that I don't know the answer: I just have the
question :-)

BTW, there are some FAQs that address such appointment things (check the
"Appointments/Diary" section of the FAQ). Maybe you can take a look and
then come back and tell us how your package stacks up.

Thanks,
Nick

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: notifications for todo items
  2012-02-23  1:28 ` Nick Dokos
@ 2012-02-23  8:36   ` Peter Münster
  2012-02-23  9:06     ` Nick Dokos
  2012-02-25  0:08     ` Nick Dokos
  0 siblings, 2 replies; 12+ messages in thread
From: Peter Münster @ 2012-02-23  8:36 UTC (permalink / raw)
  To: emacs-orgmode

On Thu, Feb 23 2012, Nick Dokos wrote:

> what does this do that appt.el (and its org interface) does not?

Sorry, I've totally forgotten to write about my motivation, to create
such an org-notify module.

Here a summary:
- different warning periods for different todo-types
- fine grained warning periods (smallest unit is second)
- continue notifications, when deadline is overdue
- easy modification of timestamps (just one click, to say
  "let's do it tomorrow")
- switch from "todo" to "done" by clicking on the notification window
- configurable notification types (email, notifications-notify, beep,
  etc.)
- configurable notification period
- configurable notification duration
- crescendo notifications (be more aggressive, when time gets closer to
  deadline)

There was a little thread about this subject:
http://thread.gmane.org/gmane.emacs.orgmode/48832


Example usage:
  (org-notify-add 'appt
                  '(:time "-1s" :period "20s" :duration 10
                    :actions (org-notify-action-message
                              org-notify-action-ding))
                  '(:time "15m" :period "2m" :duration 100
                    :actions org-notify-action-notify)
                  '(:time "2h" :period "5m"
                    :actions org-notify-action-message)
                  '(:time "1d" :actions org-notify-action-email))

This means for todo-items with `notify' property set to `appt': 1 day before
deadline, send a reminder-email, 2 hours before deadline, start to send
messages every 5 minutes, then, 15 minutes before deadline, start to pop up
notification windows every 2 minutes. The timeout of the window is set to
100 seconds. Finally, when deadline is overdue, send messages and make
noise.

-- 
           Peter

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: notifications for todo items
  2012-02-23  8:36   ` Peter Münster
@ 2012-02-23  9:06     ` Nick Dokos
  2012-02-25  0:08     ` Nick Dokos
  1 sibling, 0 replies; 12+ messages in thread
From: Nick Dokos @ 2012-02-23  9:06 UTC (permalink / raw)
  To: =?utf-8?Q?Peter_M=C3=BCnster?=; +Cc: nicholas.dokos, emacs-orgmode

Peter Münster <pmlists@free.fr> wrote:

> On Thu, Feb 23 2012, Nick Dokos wrote:
> 
> > what does this do that appt.el (and its org interface) does not?
> 
> Sorry, I've totally forgotten to write about my motivation, to create
> such an org-notify module.
> 
> Here a summary:
> - different warning periods for different todo-types
> - fine grained warning periods (smallest unit is second)
> - continue notifications, when deadline is overdue
> - easy modification of timestamps (just one click, to say
>   "let's do it tomorrow")
> - switch from "todo" to "done" by clicking on the notification window
> - configurable notification types (email, notifications-notify, beep,
>   etc.)
> - configurable notification period
> - configurable notification duration
> - crescendo notifications (be more aggressive, when time gets closer to
>   deadline)
> 
> There was a little thread about this subject:
> http://thread.gmane.org/gmane.emacs.orgmode/48832
> 
> 
> Example usage:
>   (org-notify-add 'appt
>                   '(:time "-1s" :period "20s" :duration 10
>                     :actions (org-notify-action-message
>                               org-notify-action-ding))
>                   '(:time "15m" :period "2m" :duration 100
>                     :actions org-notify-action-notify)
>                   '(:time "2h" :period "5m"
>                     :actions org-notify-action-message)
>                   '(:time "1d" :actions org-notify-action-email))
> 
> This means for todo-items with `notify' property set to `appt': 1 day before
> deadline, send a reminder-email, 2 hours before deadline, start to send
> messages every 5 minutes, then, 15 minutes before deadline, start to pop up
> notification windows every 2 minutes. The timeout of the window is set to
> 100 seconds. Finally, when deadline is overdue, send messages and make
> noise.
> 

Thanks! That's very helpful. I'll take a look in my copious (cough!)
spare time.

Nick

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: notifications for todo items
  2012-02-23  8:36   ` Peter Münster
  2012-02-23  9:06     ` Nick Dokos
@ 2012-02-25  0:08     ` Nick Dokos
  2012-02-26  0:09       ` Peter Münster
  1 sibling, 1 reply; 12+ messages in thread
From: Nick Dokos @ 2012-02-25  0:08 UTC (permalink / raw)
  To: Peter Münster; +Cc: nicholas.dokos, emacs-orgmode

=?utf-8?Q?Peter_M=C3=BCnster?= <pmlists@free.fr> wrote:

> On Thu, Feb 23 2012, Nick Dokos wrote:
> 
> > what does this do that appt.el (and its org interface) does not?
> 
> Sorry, I've totally forgotten to write about my motivation, to create
> such an org-notify module.
> 
> Here a summary:
> - different warning periods for different todo-types
> - fine grained warning periods (smallest unit is second)
> - continue notifications, when deadline is overdue
> - easy modification of timestamps (just one click, to say
>   "let's do it tomorrow")
> - switch from "todo" to "done" by clicking on the notification window
> - configurable notification types (email, notifications-notify, beep,
>   etc.)
> - configurable notification period
> - configurable notification duration
> - crescendo notifications (be more aggressive, when time gets closer to
>   deadline)
> 
> There was a little thread about this subject:
> http://thread.gmane.org/gmane.emacs.orgmode/48832
> 
> 
> Example usage:
>   (org-notify-add 'appt
>                   '(:time "-1s" :period "20s" :duration 10
>                     :actions (org-notify-action-message
>                               org-notify-action-ding))
>                   '(:time "15m" :period "2m" :duration 100
>                     :actions org-notify-action-notify)
>                   '(:time "2h" :period "5m"
>                     :actions org-notify-action-message)
>                   '(:time "1d" :actions org-notify-action-email))
> 
> This means for todo-items with `notify' property set to `appt': 1 day before
> deadline, send a reminder-email, 2 hours before deadline, start to send
> messages every 5 minutes, then, 15 minutes before deadline, start to pop up
> notification windows every 2 minutes. The timeout of the window is set to
> 100 seconds. Finally, when deadline is overdue, send messages and make
> noise.
> 

A quick first impression: orgntf-process seems expensive. It seems
to take 100% of one core (I've got a quad-core processor) for three or
four seconds every fifty seconds. Unfortunately, the core is the same one
that's running emacs, so emacs stops responding for those three or four
seconds. I have disabled org-notify for now.

Nick

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: notifications for todo items
  2012-02-25  0:08     ` Nick Dokos
@ 2012-02-26  0:09       ` Peter Münster
  2012-02-26  2:45         ` Nick Dokos
                           ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Peter Münster @ 2012-02-26  0:09 UTC (permalink / raw)
  To: emacs-orgmode

On Sat, Feb 25 2012, Nick Dokos wrote:

> A quick first impression: orgntf-process seems expensive. It seems
> to take 100% of one core (I've got a quad-core processor) for three or
> four seconds every fifty seconds. Unfortunately, the core is the same one
> that's running emacs, so emacs stops responding for those three or four
> seconds. I have disabled org-notify for now.

How many lines do you have in your org-files?
(I've about 200 and execution time is about 100ms.)

I call now "(org-element-parse-buffer 'heading)", I hope it's faster for
you. Is it faster, when the file is byte-compiled?

Other ideas:
- I could divide orgntf-process into several tasks, so that things run
  more smoothly.
- You could call (org-notify-start -60), so the process will be called,
  when idle for one minute.

The file has a new home: https://github.com/p-m/org-notify
There is now `orgntf-verbose' to see execution time of
`orgntf-todo-list'.

Thanks for testing!
-- 
           Peter

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: notifications for todo items
  2012-02-26  0:09       ` Peter Münster
@ 2012-02-26  2:45         ` Nick Dokos
  2012-02-26  5:04         ` Nick Dokos
  2012-02-26  9:33         ` notifications for todo items Nicolas Goaziou
  2 siblings, 0 replies; 12+ messages in thread
From: Nick Dokos @ 2012-02-26  2:45 UTC (permalink / raw)
  To: =?utf-8?Q?Peter_M=C3=BCnster?=; +Cc: nicholas.dokos, emacs-orgmode

Peter Münster <pmlists@free.fr> wrote:

> On Sat, Feb 25 2012, Nick Dokos wrote:
> 
> > A quick first impression: orgntf-process seems expensive. It seems
> > to take 100% of one core (I've got a quad-core processor) for three or
> > four seconds every fifty seconds. Unfortunately, the core is the same one
> > that's running emacs, so emacs stops responding for those three or four
> > seconds. I have disabled org-notify for now.
> 
> How many lines do you have in your org-files?
> (I've about 200 and execution time is about 100ms.)
> 

Roughly 7000 - I just added a task to clean things up, so it's now 7002 :-)

> I call now "(org-element-parse-buffer 'heading)", I hope it's faster for
> you. Is it faster, when the file is byte-compiled?
> 
> Other ideas:
> - I could divide orgntf-process into several tasks, so that things run
>   more smoothly.
> - You could call (org-notify-start -60), so the process will be called,
>   when idle for one minute.
> 

This sounds promising - I'll try this out in the next iteration.

> The file has a new home: https://github.com/p-m/org-notify
> There is now `orgntf-verbose' to see execution time of
> `orgntf-todo-list'.
> 

OK - I'll try it out when I get a chance.

Thanks,
Nick

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: notifications for todo items
  2012-02-26  0:09       ` Peter Münster
  2012-02-26  2:45         ` Nick Dokos
@ 2012-02-26  5:04         ` Nick Dokos
  2012-02-26 14:06           ` optimisation of org-notify (was: notifications for todo items) Peter Münster
  2012-02-26  9:33         ` notifications for todo items Nicolas Goaziou
  2 siblings, 1 reply; 12+ messages in thread
From: Nick Dokos @ 2012-02-26  5:04 UTC (permalink / raw)
  To: =?utf-8?Q?Peter_M=C3=BCnster?=; +Cc: nicholas.dokos, emacs-orgmode

Peter Münster <pmlists@free.fr> wrote:

> On Sat, Feb 25 2012, Nick Dokos wrote:
> 
> > A quick first impression: orgntf-process seems expensive. It seems
> > to take 100% of one core (I've got a quad-core processor) for three or
> > four seconds every fifty seconds. Unfortunately, the core is the same one
> > that's running emacs, so emacs stops responding for those three or four
> > seconds. I have disabled org-notify for now.
> 
> How many lines do you have in your org-files?
> (I've about 200 and execution time is about 100ms.)
> 
> I call now "(org-element-parse-buffer 'heading)", I hope it's faster for
> you. Is it faster, when the file is byte-compiled?
> 
> Other ideas:
> - I could divide orgntf-process into several tasks, so that things run
>   more smoothly.
> - You could call (org-notify-start -60), so the process will be called,
>   when idle for one minute.
> 
> The file has a new home: https://github.com/p-m/org-notify
> There is now `orgntf-verbose' to see execution time of
> `orgntf-todo-list'.
> 
> Thanks for testing!

Profiling results after byte compiling both org-notify.el and org-element.el
(the rest of org is uncompiled code):

,----
| org-element-parse-elements                                    891         3.8462059999  0.0043167295
| orgntf-process                                                1           1.594772      1.594772
| orgntf-time-measure                                           1           1.594763      1.594763
| orgntf-todo-list                                              1           1.59444       1.59444
| org-element-parse-buffer                                      15          1.5755259999  0.1050350666
| org-element-current-element                                   876         1.5125120000  0.0017266118
| org-element-headline-parser                                   876         1.4775100000  0.0016866552
| org-entry-properties                                          1752        0.7201820000  0.0004110627
| org-element-parse-secondary-string                            876         0.4682000000  0.0005344748
| org-element-parse-objects                                     942         0.4317159999  0.0004582972
| org-element-get-next-object-candidates                        1151        0.4044249999  0.0003513683
| org-back-to-heading                                           3504        0.1251230000  3.570...e-05
| org-element-time-stamp-successor                              969         0.1206909999  0.0001245521
| org-heading-components                                        876         0.0532400000  6.077...e-05
| org-element-latex-or-entity-successor                         1884        0.0469810000  2.493...e-05
| org-end-of-subtree                                            876         0.0365460000  4.171...e-05
| org-match-string-no-properties                                4167        0.0302490000  7.259...e-06
| org-element-link-successor                                    998         0.0220160000  2.206...e-05
| org-get-limited-outline-regexp                                1676        0.0199100000  1.187...e-05
| org-element-sub/superscript-successor                         953         0.0132220000  1.387...e-05
| org-truely-invisible-p                                        876         0.0127170000  1.451...e-05
| org-get-property-block                                        876         0.0118430000  1.351...e-05
| org-element-map                                               15          0.010387      0.0006924666
| org-element-inline-src-block-successor                        942         0.0066240000  7.031...e-06
| org-element-text-markup-successor                             942         0.0061229999  6.499...e-06
| org-at-heading-p                                              1767        0.0058330000  3.301...e-06
| org-element-macro-successor                                   876         0.0053859999  6.148...e-06
| org-get-category                                              1752        0.0051480000  2.938...e-06
| org-element-link-parser                                       63          0.0046710000  7.414...e-05
| org-element-inline-babel-call-successor                       942         0.0045489999  4.829...e-06
| org-element-statistics-cookie-successor                       922         0.0031339999  3.399...e-06
| org-refresh-category-properties                               10          0.0029679999  0.0002967999
| org-element-property                                          5073        0.0028890000  5.694...e-07
| org-skip-whitespace                                           891         0.0027629999  3.101...e-06
| org-element-radio-target-successor                            876         0.0026729999  3.051...e-06
| org-outline-level                                             876         0.0018010000  2.055...e-06
| org-element-time-stamp-parser                                 93          0.0016429999  1.766...e-05
| orgntf-make-todo                                              876         0.0015790000  1.802...e-06
| org-agenda-files                                              1           0.001418      0.001418
| org-link-unescape                                             59          0.001049      1.777...e-05
| org-element-type                                              1752        0.0009170000  5.234...e-07
| org-reduced-level                                             876         0.0006700000  7.648...e-07
| org-link-expand-abbrev                                        59          0.0004410000  7.474...e-06
| org-link-unescape-compound                                    23          0.0003170000  1.378...e-05
| org-element-contents                                          891         0.0002970000  3.333...e-07
| org-trim                                                      53          0.000235      4.433...e-06
| org-element-statistics-cookie-parser                          46          0.0001809999  3.934...e-06
| org-float-time                                                2           0.000103      5.15e-05
| org-element-subscript-parser                                  7           6.3e-05       9e-06
| org-char-to-string                                            23          1.800...e-05  7.826...e-07
| org-no-properties                                             11          1.6e-05       1.454...e-06
`----


So orgntf-todo-list takes the lion's share of the time but
most of it is the 15 calls to org-element-parse-buffer (I have
15 files in my org-agenda-files list).

BTW, I think the first line of the profile must be a remnant
from before, although I did do an elp-reset-all.

Nick

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: notifications for todo items
  2012-02-26  0:09       ` Peter Münster
  2012-02-26  2:45         ` Nick Dokos
  2012-02-26  5:04         ` Nick Dokos
@ 2012-02-26  9:33         ` Nicolas Goaziou
  2012-02-26 14:07           ` Peter Münster
  2 siblings, 1 reply; 12+ messages in thread
From: Nicolas Goaziou @ 2012-02-26  9:33 UTC (permalink / raw)
  To: Peter Münster; +Cc: emacs-orgmode

Hello,

Peter Münster <pmlists@free.fr> writes:

> On Sat, Feb 25 2012, Nick Dokos wrote:
>
>> A quick first impression: orgntf-process seems expensive. It seems
>> to take 100% of one core (I've got a quad-core processor) for three or
>> four seconds every fifty seconds. Unfortunately, the core is the same one
>> that's running emacs, so emacs stops responding for those three or four
>> seconds. I have disabled org-notify for now.
>
> How many lines do you have in your org-files?
> (I've about 200 and execution time is about 100ms.)
>
> I call now "(org-element-parse-buffer 'heading)", I hope it's faster for
> you. Is it faster, when the file is byte-compiled?

I didn't look at the code but you probably mean
(org-element-parse-buffer 'headline) if you're only interested in
headline data.


Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 12+ messages in thread

* optimisation of org-notify (was: notifications for todo items)
  2012-02-26  5:04         ` Nick Dokos
@ 2012-02-26 14:06           ` Peter Münster
  2012-03-04 23:37             ` optimisation of org-notify Peter Münster
  0 siblings, 1 reply; 12+ messages in thread
From: Peter Münster @ 2012-02-26 14:06 UTC (permalink / raw)
  To: emacs-orgmode

On Sun, Feb 26 2012, Nick Dokos wrote:

> So orgntf-todo-list takes the lion's share of the time but
> most of it is the 15 calls to org-element-parse-buffer

Ok, then I could process only one file at a time. This would divide the
processing time by 15, in your case. But perhaps others would have the
7000 lines in one file only, then it would not work...
So, it is worth the effort?

Thanks for the profiling!
-- 
           Peter

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: notifications for todo items
  2012-02-26  9:33         ` notifications for todo items Nicolas Goaziou
@ 2012-02-26 14:07           ` Peter Münster
  0 siblings, 0 replies; 12+ messages in thread
From: Peter Münster @ 2012-02-26 14:07 UTC (permalink / raw)
  To: emacs-orgmode

On Sun, Feb 26 2012, Nicolas Goaziou wrote:

> I didn't look at the code but you probably mean
> (org-element-parse-buffer 'headline) if you're only interested in
> headline data.

Yes, it's "headline" in the code... :)

-- 
           Peter

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: optimisation of org-notify
  2012-02-26 14:06           ` optimisation of org-notify (was: notifications for todo items) Peter Münster
@ 2012-03-04 23:37             ` Peter Münster
  0 siblings, 0 replies; 12+ messages in thread
From: Peter Münster @ 2012-03-04 23:37 UTC (permalink / raw)
  To: emacs-orgmode

On Sun, Feb 26 2012, Peter Münster wrote:

> On Sun, Feb 26 2012, Nick Dokos wrote:
>
>> So orgntf-todo-list takes the lion's share of the time but
>> most of it is the 15 calls to org-element-parse-buffer
>
> Ok, then I could process only one file at a time. This would divide the
> processing time by 15, in your case. But perhaps others would have the
> 7000 lines in one file only, then it would not work...
> So, is it worth the effort?

The effort was quite small, so I've done it. :)

-- 
           Peter

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2012-03-04 23:37 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-22 23:38 notifications for todo items Peter Münster
2012-02-23  1:28 ` Nick Dokos
2012-02-23  8:36   ` Peter Münster
2012-02-23  9:06     ` Nick Dokos
2012-02-25  0:08     ` Nick Dokos
2012-02-26  0:09       ` Peter Münster
2012-02-26  2:45         ` Nick Dokos
2012-02-26  5:04         ` Nick Dokos
2012-02-26 14:06           ` optimisation of org-notify (was: notifications for todo items) Peter Münster
2012-03-04 23:37             ` optimisation of org-notify Peter Münster
2012-02-26  9:33         ` notifications for todo items Nicolas Goaziou
2012-02-26 14:07           ` Peter Münster

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).