Programmable Notes
maggieappleton.com
maggieappleton.com
Beside that, I find these features pretty intriguing, but I wonder if I would want that inside a tool, or rather externally. Like a set of individual scripts, that operate on defined folders of text files, and then make use of the OS notification system to communicate, or along these lines.
The blog itself is also very interesting imo, subscribed to the feed.
For instance I want to take notes about a contact, for instance a colleague with whom I have work and friendship relationships, so I want to have in a single place contacts details like phone numbers, addresses, perhaps birthday and other anniversary reminders in my agenda, projects we are involved included eventual reports, mails, with some relevant/on-the-table easy reachable/highlighted etc. For what masochistic reason I can't have all those things together on my desktop? For what masochistic reason I can't have also others views of similar information together on my desktop, like see grouped all issues of a project coupled with relevant peoples involved, personal notes etc? Why I have to find "dedicated" apps for anything, non integrated, sometimes almost impossible to integrate, with duplicated and separated contents if for me, for what I do, for my brain all information are the same?
That's my complaint. An OS must be a single "application", under it's own user control, flexible, moldable, easy to bend to our desire without demanding a gazillion SLoC for anything. Emacs offer that. Classic SmallTalk workstations the same, modern systems do not. They are just cargo ship for individual containers, because that's positive to sell individual container, service etc, while depriving the user to handle and manage his/shes own personal information.
Unix already offer a small flexibility, thanks to CLI/scripting composability of individual simple commands, but graphic systems on unix have essentially a sole IPC: manual cut&paste. Nothing more, so even early unix GUIs violate unix principles. That's why unix is limited and limiting respect of classic Xerox workstations or LispM or modern Emacs. Emacs itself is a GUI, but being text based that GUI can be manipulated as the user want, easily, at runtime, modern widget-based GUIs or WebUIs can't, WebUIs can be customized a bit injecting js/css etc but that's not that "easy" nor "live", nothing a casual user can do.
I used shell scripts because I was already very familiar with them. I use Linux because I find it to be the OS that's the least terrible of the big three that are usable for everyday tasks. It could be a lot better, but I'll still take it any day over Windows.
I appreciate the integration of Emacs, but I don't know Lisp, and dislike the idea of living inside a single monolithic program. I prefer to create my own (usually graphical and text-oriented) tooling where I can even if it's very hacked together and limited, because I'm very opinionated on how I want things to behave and present.
Personally I'm born on unix, I'm still far more familiar and quick scripting things in zsh than in elisp, still using zsh on a real terminal emulator for many things, because of habits, but Emacs have completely change for good my digital life and that in a super-short period of time.
A stupid personal example: for more than a decade I've kept my files in a hyper-curated home taxonomy with relevant symlinks, even TMSU as an experiment, in just few months (and with big hesitations) I wipe out that taxonomy for a cache-like storage accessed via org-mode (org-attach + linkmarks at firs, then org-roam), now accessing (almost) anything is just hit-a-key, type something, tab/enter to open. Not only: thanks to the fact that org-mode notes, accessed normally via search&narrow UI (like modern "dash-like" menus / google search in the end) act as a kind-of metadata super-rich directories I can select them via org-ql queries constructing different views of my files like putting paper files on a physical desk in a snap. Anything is integrated, now I open my landline provider note and there I have all monthly bills BUT also recorded bank transactions, longs (for instance about outages) so I immediately see why a month have an unusually high or low price, I can easily craft things like a quick graph of price evolution etc. Being on mostly textual storage means being on a kind-of data lake more or less easy to process in countless forms.
Another example: for many years (unfortunately not anymore) few utilities have sent me invoices as pdf attachments, they are auto-paid by the bank so normal procedure is just archiving and casually check that anything is ok. With Emacs (and a bit of scripting) my MailDrop pipe those utilities messages to uudeview that extract the attachment, save it with a proper name in a proper place (that's the unix part) AND add an entry to my org-agenda witch are my entire note collection, that means adding in the relevant heading in for instance my electricity utility an entry like:
* WAITING month X, amount Y, invoice xxxxxxxxx
Received via mail on <yyyy-mm-dd>, due for <yyyy-mm-dd>
the "mail" is an actual notmuch: link to the relevant message I can open in a click, forward it, reply to if (ok, are all noreply but you get the idea), dates are "active dates" that means my org-agenda show the entry at that date in log mode.A day after the due date if the relevant transaction does not appear in my ledger an entry get automatically added to my agenda "something is wrong" with all details. That's automatic. In Emacs is easy to do since anything is exposed, accessible and moldable in unix the easy part is mostly limited to extracting and archiving the attachment. At maximum I can craft a check script with ledger (CLI version) that update my motd on a certain day but it's not the same thing and not as easy.
Slides? Well the linked videos in my precedent post show how easy they are, no need to work with modern GUIs for hours just to get something nice and inside the presentation I have my fully integrated environments, for instance adding a link that change my windows layout, run some software, ... it's immediate and simple, no need to "switch app" and "switch back" etc. And I can go on for long.
That's why we need a single, graphical, open and fully moldable environment for end users.
You might find this community resource for navigating plugins by category helpful: https://publish.obsidian.md/hub/02+-+Community+Expansions/02...
- inserting headings click on an org-mode elisp: link, like a note for a retail order, like
* orders (new)
where new is the link- inserting elisp: links for org-ql queries, like in book notes, a book a note (all org-roam managed), with queries per author, publisher etc using org-mode drawers as key-value meta-info storage
In the past I've done a bit more, but it prove to be too long to maintain: since until recently my ISP was sending regular monthly bill as a pdf attached to a notification email I've crafted a script (run by MailDrop) what extract (uudeview) the attachment putting it in a relevant dir (I have almost all files org-attached) and adding it to the relevant org-mode note. Unfortunately they choose to send just notification emails without attachments just saying "go to your profile page to download it" and at that point automation is simply too long to be maintained. I've tried a bit https://woob.tech but just for a monthly bill it's not worth the effort.
However my notes are not just notes, are the entry point to all my digital information:
- almost all my files are now org-attached, so to access anything instead of traversing a tree with a filemanager I just hit a key (bound to org-roam-node-find) few relevant chars, tab/enter and the relevant org heading link specific files, or are linked inside or I can run org-attach-reveal case-by-case depending on what I'm looking for;
- I access my mails, partially, via notmuch: and notmuch-search: link types, again in org-roam managed "notes", partially in the sense that a single key bring me to notmuch for tag:unread (unified inbox) and shift+the key bring a new mail composition buffer (notmuch-mua-new-mail), in notes I link relevant threads, individual messages etc;
- notes themselves are almost my documents, they act as metadata-rich directories with a search&narrow UI (both org-roam-node-find, org-ql-view, org-agenda views etc) but are also meaningful by themselves, for instance I have a note per contact, that note link relevant files, mails, logs anything else about a contact, inside the note I can compose a new mail to the contact on click (elisp:(message-mail again)
Emacs/EXWM (like the web + a browser) offer the environment, org-mode the textual language (like html+CSS), elisp and countless packages offer the user-programming language (like js) and the mix my desktop, a poor man's modern classic desktop.
I really like Howard’s tone (and emacs knowledge!) when he’s sharing knowledge (eg the video linked in the linked article).
It was really fascinating when I found his videos the first time a few years ago - very recommendable!
It's super interactive because you're executing code on the very same file where it's written, but tightly couples the functionality Emacs, and adds irrelevant content (code) into the file. It also requires you debug, which can become a huge distraction from what is a simple goal. You also have to remember to run the sync code block, unless you have a method of auto-running the code or use another mechanism to remind yourself. Auto-sync is a whole other exercise.
The workflow stuff in the OP article looks completely doable in org-mode, but if we can see the difficulty in engineering the workflow system directly in emacs-lisp, and good choices exist for developing the system separately, then all of a sudden you're left wondering if Emacs + org-mode is actually the best client.
So now I mostly write markdown. That said, adding markdown code-fence execution to Emacs is surprisingly simple... you can send it to org's evaluate!
You can substitute for instance
(push '("#+BEGIN_SRC" . "↦" ) prettify-symbols-alist)
(push '("#+results:" . "") prettify-symbols-alist)
(push '(":PROPERTIES:" . "") prettify-symbols-alist)
(push '(":END:" . "") prettify-symbols-alist)
you can avoid tags using in-property-drawer kev/value tagging, that's also easy to query with org-ql. A code block is run by a function as pretty anything and a function in Emacs can be called in countless way, like:- hitting a key
- on file save with a hook
- when certain conditions happens with a hook
And that's in a global or file/buffer-local approach
I'm currently exploring what the ideal end-user-programming environment for this could look like https://www.loom.com/share/6fd5637254584cfea8de315f0f3b532c. I'd love to see end-user programmable applications that can be customized like described in the blog - in an environment that reacts as spreadsheet software (immediate results, no need to fire up an external editor or wait for a build-loop).
The problem is that poor/random suggestions are worse than no suggestions, because instead of helping they'll take you out of flow.
The ideal solution would have contextual awareness - not just smart enough to understand what you're working on, but to know you well enough to accurately predict what you're thinking about and the kind of help of you need.
That seems like a tall order with current technology.
For instance https://youtu.be/B6jfrrwR10k but also, https://youtu.be/5ViUBaarsbw a bit exaggerated but nice. Notes are just personal documents, text means information, and automation on information means IT. Actually a notes-based computer system/environment is a desktop, is what we need and miss today.
Crappy compartmentalization of modern "apps" is the opposite, is the need for business against the user need and interest. Personally I have in "notes" essentially anything thank to the Emacs ecosystem:
- my files are org-attached, accessed via search&narrow thanks to org-roam
- links in notes point to pretty anything, mails threads, specific messages or mail search queries (all local, locally indexed maildir by notmuch, something better than GMail and under my total control), feeds (posts I decide to keep), bank transactions (any kind, from transfer to stocks passing through grocery expenses)
- notes form my agenda with SCHEDULED, DEADLINE, TODOs meta-information adding to a heading, org-agenda scan all notes to form a view, a single page or more than one, letting me selecting what I want to see (look for) or not
- queries on notes (org-ql) and transclusion means the ability to form/see my web of information "putting on the desk" (screen) just what I want in a semi-automated manner
- notes are also literate programming environments, spreadsheets, slides, all integrated with all meta-information I might want to add, I can place, link-to-execute, pass data from a code block to another, with code blocks of various languages, like pipes in the shell, but in a 2D environment instead of the CLI, I can create a table with all "formulae" I want like a spreadsheet but without the need to open separate tools and with the ability to use any language for them (included the built-in "calc" CAS)
Peoples these days use Google search and the modern web just because they are unable to make their own, collaboration included, notes with desktop computer environments are the tools need to substitute the centralized web of the giants to a web of personal information network shared as we want.
The best way I know to simulate a very complex system is randomness :P. Turn your notes into a fortune file [1] and have those fortunes displayed where you look often (e.g. your browser's new tab page).
I've got a Shortcut which surfaces 10 random links from Pocket (which haven't already been surfaced - they get tagged) to the top because I am woeful at remembering to read things I've bookmarked.
(Unfortunately it also relies on having your Pocket links as a text file because their API doesn't have a way to find out how many URLs you've saved which means you need to download the entire set if you want to make a random selection...)
A format that lets us do all of those things with just one document (not duplicating things everywhere) would be great.