The content of this blog is my personal opinion only. Although I am an employee - currently of Nvidia, in the past of other companies such as Iagination Technologies, MIPS, Intellectual Ventures, Intel, AMD, Motorola, and Gould - I reveal this only so that the reader may account for any possible bias I may have towards my employer's products. The statements I make here in no way represent my employer's position, nor am I authorized to speak on behalf of my employer. In fact, this posting may not even represent my personal opinion, since occasionally I play devil's advocate.

See http://docs.google.com/View?id=dcxddbtr_23cg5thdfj for photo credits.

Wednesday, September 18, 2013

Email flow with rules and labels

Email arrives.

A rule determines that it is low priority.  So I want it to be labelled Inbox/Low_Priority.

I.e. I do NOT want to see it in my normal Inbox.  Aka my priority Inbox.

But I *do* want to see it as a subfolder of my Inbox.   So, here is an example of a case where I do not want the browseable interface to the label graph to show all items with label - where the fact that it has a sublabel (of a particular type) implying that it should not be shown as the default query for Inbox.  But of course I might want to be able to see all items tagged Inbox, ewven though sublabels imply hiding.

Possibility: steal an idea from Bazaar DVCS:  Inbox/* => all items with label Inbox, but not with "masking" sublabels.   Whereas Inbox/** => all labels tagged Inbox, even with masking sublabels.

Inbox|Some_Other_Label - independent, not really path oriented

I probably won't get around to processing such Inbox/LowPriority emails very often.  But when I do, and I handle them, I probably want to change the label from Inbox/LowPriority to straight LowPriority.

I.e. LowPriority is not just a sublabel.  It is actually an independent label. But the instance on a particular item may indicate the masking sublabel relationship to Inbox.

If something gets tagged Inbox/SubLabel initially, and then just becomes SubLabel, and then is moved back to Inbox, should it go back to being Inbox/Subel?  Or should it be Inbox|SubLabel?

If Inbox/SubLabel -> SubLabel -> Inbox/SubLabe, should this be

a) because it was originally Inbox/SubLabel - i.e. based on history of the labelling?


b) because SubLabel is marked as being in a possibly subservient relationship to Inbox?

Inbox is a special case.

Monday, September 16, 2013

The next big form factor

Glasses, maybe contact lens - maybe.
Although I would bet on something related to ubiquitous flat panel displays happening first. Easier. Here now.
But more important - the above are output devices. I think what we really need is ubiquitous input. Talking to yourself at the refrigerator: I need milk and blueberries.
What would this look like?

Partially explicit sorting

A pattern I run into a lot: partially explicit sorting.

E.g. a regular linear sort - alphabetical, breadth or depth first, etc. - is okay for the "leftovers", but I have an explicit priority ordering of things I want to see at the head of the list.

More advanced, what I did for automatically deducing a print order in the Cp/PL wikified manual / specifications:

  • Create a manual table of contents
  • Attach unlinked items to where first linked to, alphabetically ordered.  
Have also played around with topological sorting, modified by the desored explicit ordering.

ISO: nice Perl / foobar language iioms to do this common pattern.

Easier to process less important stuff

Ever notice that it is easier to process less important stuff than more important stuff.

Email especially - but I have noticed the same thing with classification jobs, such as classifiying and rating patents.

Email especially - sort the email by sender, by subject, etc.   If I had the ability to cluster by keywords.

"Sorting, not searching".

On this trip I have been able to empty literally thousands of emails from my account.  But the last hundred are non-uniform, and are more of a hassle to handle.

For these last, I need an efficient manual scan - buttons for archiving, action required, deferred, etc.  The GTD stuff, maybe a few more.

Unfortunately, I don't have such a simple email scanner.

Tuesday, September 10, 2013

org-capture ... org-get-x-clipboard very slow

I enjoy org-mode, but have found "capture", aka org-capture, too slow for general use.

This has been on my to-investigate list for months, and I finally got around to it.


^c-c-t (my todo capture template) takes 10 seconds or so, no matter what the template

elp-instrument-package org

      (elp-instrument-package(quote org))


Function name                                                 Call count Elapsed Time   Average Time
org-capture                                                   1           7.4114240000  7.4114240000
org-capture-fill-template                                     1           6.6733817000  6.6733817000
org-get-x-clipboard                                           4           6.6563808     1.6640952
org-get-x-clipboard-compat                                    4           6.6563808     1.6640952
org-capture-select-template                                   1           0.7310417999  0.7310417999
org-mks                                                       1           0.7310417999  0.7310417999
org-mode                                                      1           0.0130008     0.0130008
org-install-agenda-files-menu                                 1           0.0060004000  0.0060004000
org-set-regexps-and-options                                   1           0.0060003000  0.0060003000

Basically, org-get-x-clipboard is almost all of the time.

(Verified by nulling out org-gert-x-clipboard.)

Suboptimal:   I was not asking for any template substitutions.  But org-capture-fill-template calculates every variable, whether needed or not

(defun org-capture-fill-template (&optional template initial annotation)
  "Fill a template and return the filled template as a string.
The template may still contain \"%?\" for cursor positioning."
  (setq template (or template (org-capture-get :template)))
  (when (stringp initial)
    (setq initial (org-no-properties initial))
    (remove-text-properties 0 (length initial) '(read-only t) initial))
  (let* ((buffer (org-capture-get :buffer))
(file (buffer-file-name (or (buffer-base-buffer buffer) buffer)))
(ct (org-capture-get :default-time))
(dct (decode-time ct))
 (if (< (nth 2 dct) org-extend-today-until)
     (encode-time 0 59 23 (1- (nth 3 dct)) (nth 4 dct) (nth 5 dct))
(plist-p (if org-store-link-plist t nil))
(v-c (and (> (length kill-ring) 0) (current-kill 0)))
(v-x (or (org-get-x-clipboard 'PRIMARY)
 (org-get-x-clipboard 'CLIPBOARD)
 (org-get-x-clipboard 'SECONDARY)))

(v-t (format-time-string (car org-time-stamp-formats) ct))
(v-T (format-time-string (cdr org-time-stamp-formats) ct))
(v-u (concat "[" (substring v-t 1 -1) "]"))
(v-U (concat "[" (substring v-T 1 -1) "]"))

However, although I think that I am not using a template, I get

Clipboard pasted as level 1 subtree


Making org-get-x-clipboard empty

makes capture very fast - 0.036 seconds as reportted by elp


GNU Emacs 24.3.1

org-mode 7.8./03

CYGWIN_NT-6.1-WOW64 glew-tablet 1.7.17(0.262/5/3) 2012-10-19 14:39 i686 Cygwin

Out-of-date ... updating ...