Software

The End of Programming

I was going to brush up on my COBOL, but maybe not:

In this new computer science—if we even call it computer science at all—the machines will be so powerful and already know how to do so many things that the field will look like less of an engineering endeavor and more of an an educational one; that is, how to best educate the machine

Matt Welsh, “The End of Programming

On the other hand, isn’t “educating the machine” what we’ve been doing all along?

DEVONthink or EagleFiler (or Finder?)

One of the many things I waffle about is the choice of software for managing my many PDFs and other files. I often wish I could just keep everything in organized folders and use my Mac’s Finder to manage it all. That sounds great on paper, but never sticks.

I’ve used DEVONthink for years because it is so mature and powerful. I continue to find new features or techniques even after all this time. It does everything!

EagleFiler comes into play when I’m feeling overwhelmed by DEVONthink. EagleFiler is much closer to the metal, so to speak. It’s basically a thin, smart layer over a set of folders. Everything is accessible “natively” and its capture and organizational features are simple and useful.

But after using EagleFiler for a while, I start to wonder why I’m not just doing everything in Finder. I mean, if we’re going to mess about with files in the filesystem, why not just do that then? What was EagleFiler offering me, again?

After a short time, I end up back with nicely organized files and folders and it’s such a relief not needing to deal with databases or any of that nonsense!

Except it’s harder to get things into the right place using just Finder. It requires me to, for example, save a PDF to my Desktop then find and open the destination folder, then drag it on in. This makes quickly capturing stuff cumbersome. Search is fine, but harder to use than in the other apps. And I miss the way DEVONthink would intelligently sort and rename files for me. So always return to using DEVONthink, until I end up back at the beginning.

Where are we today, then? Today, it’s DEVONthink. My feeling right now is that if I’m going to abstract myself away from the actual files, I may as well use the tool with the coolest, fanciest ways to do that.

However, I can feel the pull of a simple set of folders and files. I am thinking about ways of making 2023 the Year Of Less Software, so stay tuned. 🙂

DevUtils for macOS

DevUtils is an “All-in-one Toolbox for Developers” available for macOS.

This thing has everything. I might regularly use only a handful of the available tools, but DevUtils sure makes them handy. It’s $29 for a license and is also available via SetApp.

Tinderbox 9.5

Eastgate has released a nice update to Tinderbox. Version 9.5 has some nifty features:

Automatically add a Prototype or Place when adding notes. Naming a note something like “John Smith#Person” will create the note titled John Smith and automatically apply the “Person” prototype. I use a lot of prototypes so this is handy

Geographic Adornments. “If any adornment has an Address, Tinderbox will figure out the corresponding latitude and longitude and display a map of the region.”

Preview and Export: Sensible default templates and prototypes have been added and are configured automatically. Tinderbox’s export features are deep and powerful, but can be tricky to grasp. This helps get things rolling.

View and edit multiple notes. This is great! Select a bunch of notes and then read and edit them together as one document, but they remain separate notes also.

Another useful update to one of my all-time favorite apps.

What’s good about the Arc browser

“Command – Shift – C”

This is so silly. It’s a keyboard command to copy the URL. Why do I need that? I can tell you that I’ve used it one billion times now, so apparently, I do need this. If you’re worried about the URL bar being tucked away, I have a hunch that what you actually miss is an easy place to copy and paste the URL, and once you know if you have a keyboard command for it (plus clickable icon), you don’t miss it anymore. If you really do miss the full-width URL bar, you can activate “Developer Mode” and it comes back.

But there is a bonus!

It automatically removes cruft from URLs!

Chris Coyier, What’s Good About the Arc Browser

I’ve been a hardcore Safari die-hard since the beginning. Over the past several months, I’ve become a die-hard Arc lover.

MarsEdit 5.0

I can`t even tell you how long I’ve loved MarsEdit for posting to WordPress blogs. It’s been a while since I’ve used it as I’ve mostly been off WordPress. Now that we’re back on WordPress, the announcement of MarsEdit 5.0 is welcome.

I’m most curious to try the new syntax highlighting for Markdown as well as the microblogging features. And the new icon is nice, too.

You’re soaking in it.

Keeping my Org Agenda updated based on Denote keywords

I’ve recently switched from using Org-roam to using Denote for my notes. Org-roam is powerful and cool, but I prefer the more straightforward approach of Denote.

I keep all my notes in Denote, including notes about current projects. For example, we’re planning to remodel our kitchen. This is a project and so I have a Denote file named “20221130T130143–kitchen-remodel-2023__house_project.org”. In this file, I keep a list of TODOs. In order to see these TODOs in my Org Agenda, I need to add the file to org-agenda-files. This can be done a few ways, but all are manual. I am forgetful, so I wanted a more automated way to keep my org-agenda-files up to date with Denote projects.

David of System Crafters created a video about hacking Org-roam containing something like what I was looking for in the show notes, but for Org-roam not Denote.

I took the idea and implemented it for Denote instead. All it does is search denote-directory for files with a specific pattern and append the results to my default list of org-agenda-files. It looks like this:

;; Add all Denote files tagged as "project" to org-agenda-files
(defun jab/denote-add-to-agenda-files (keyword)
  "Append list of files containing 'keyword' to org-agenda-files"
  (interactive)
  (jab/init-org-agenda-files) ;; start over
  (setq org-agenda-files (append org-agenda-files (directory-files denote-directory t keyword))))

(jab/denote-add-to-agenda-files "_project")

That’s it. Now I can keep my project TODOs in the project Org files and view them in the Agenda. You’ll notice that there’s nothing in there that actually depends on Denote. It’s all just basic Emacs stuff. That’s one of the reasons I love Denote so much; even I can riff off it. I haven’t found a good way to add newly-created project files to the agenda without reloading Emacs or calling the function manually, but I’ll get to that later.

Later: Protesilaos Stavrou (known as “Prot”), the author of Denote, was kind enough to send me the following code for helping automatically maintain the list of org-agenda-files…

    (defvar my-denote-to-agenda-regexp "_project"
      "Denote file names that are added to the agenda.
    See `my-add-denote-to-agenda'.")

    (defun my-denote-add-to-agenda ()
      "Add current file to the `org-agenda-files', if needed.
    The file's name must match the `my-denote-to-agenda-regexp'.

    Add this to the `after-save-hook' or call it interactively."
      (interactive)
      (when-let* ((file (buffer-file-name))
                  ((denote-file-is-note-p file))
                  ((string-match-p my-denote-to-agenda-regexp (buffer-file-name))))
        (add-to-list 'org-agenda-files file)))

    ;; Example to add the file automatically.  Uncomment it:

    ;; (add-hook 'after-save-hook #'my-denote-add-to-agenda)

    (defun my-denote-remove-from-agenda ()
      "Remove current file from the `org-agenda-files'.
    See `my-denote-add-to-agenda' for how to add files to the Org
    agenda."
      (interactive)
      (when-let* ((file (buffer-file-name))
                  ((string-match-p my-denote-to-agenda-regexp (buffer-file-name))))
        (setq org-agenda-files (delete file org-agenda-files))))

This works great. Thanks, Prot!

Blogging with Curio

I’ve used Zengobi Curio for many years when I needed a visual system for managing projects and associated files. In a recent version, Curio gained a Journal feature. It’s fairly rudimentary compared to dedicated journal apps, but I recently started testing it as a way to create a sort of scrapbook each day. It works pretty well for that. I export a PDF of the day’s entry, print it, and put it in a binder.

While farting around with Curio exports, I tried exporting a few entries as HTML and was surprised how much fidelity is maintained when exporting. For giggles, I uploaded a few days’ exports to a web server. I had a crazy idea that this could be a daily blog. Here is my test site.

Continue reading…