Tinderbox Meetup Sunday, February 26, 2023

Looking forward to this weekend’s meetup.

Time: Sunday, Feb. 26, 2023 12:00 noon Eastern Time (US and Canada).

9 AM Pacific Time
Noon Eastern time
1300 São Paulo
1600 UTC
1700 London (1600 summer time)
1800 Paris
2130 Dehli

Zoom link for the meetup: https://us02web.zoom.us/j/8850659900?pwd=ZE9ROUs1czNiK2FTTStjTUJuVkIydz09

Meeting Format

  • Introduction of new members (everyone is welcome, no experience required)
  • Agenda Creation
  • Go through Agenda: Discussion, questions, answers, review, demo, exercises
  • Wrap-up

Tentative Agenda Topics†

Topics from last week’s and previous week’s meetups include:

  1. More on linking
  2. Constructing and working with queries
  3. Writing function to determine with attributes associated with a note have a value, need a method for pulling all system attributes, and review of an existing method for pulling user generated attributes G
  4. Review of Apple Script to export notes from Drafts to a TBX Inbox, see Tinderbox Training Video 63- Export Drafts Note to Tinderbox
  5. Berstein function porting demo
  6. @archurhh process review

Does anyone have any topics they’d like to suggest? Please comment below? Up vote or down the topics above.

†Comment to add proposed agenda topics. We’ll adjust in realtime on the day.

Are these recorded?

1 Like

Most meetups are recorded; you can find them at Mark Bernstein’s Videos on Vimeo

1 Like

Matt, you’ll also find a list of all the videos here:

For the ones I facilitate, along with my own training, I’ve started to do a write-up of what we talk about.

1 Like

We last met on Saturday the 28Th. As the pattern is alternating Sat/Sun (as some can’t do Saturdays) is there reason we’re meeting on Sat 25 and not Sun 26?

Not that I mind. I’ll always attend if I can. i know we joke about out meeting “being alternating Saturdays and Sundays, except when it isn’t”. Still, if we change to out-of pattern it might help in the calling notice to state:

  • the next meeting is out of sequence
  • whether this change rolls forward (i.e. update your calendars!) or this a one-off move and previous alternation remains in force.

Sorry, my mistake, I’ll fix it.

Here’s the Tinderbox Plugin Installer Tinderbox I plan to talk about at today’s meetup.

It demonstrates some useful ways to add functionality to a Tinderbox document.

Tinderbox Plugin Installer.tbx (693.8 KB)


And here’s the Installer I create in this talk. It adds MathJax support to Tinderbox previews.

MathJax Installer.tbx (148.2 KB)

Once installed (it’s easy!), you can write easy-to-type expressions in your notes like this:

It’s easy to write H_2SO_4 , Psi^2, or sin(theta).
sum_(i=1)^n i^3=((n(n+1))/2)^2

In the Preview pane, they are formatted like this:


I’ve uploaded the random note display demo file to this thread: Random Note Speed-dating - #23 by mwra

Chat log: meeting_saved_chat.txt.zip (2.7 KB)

(kudos to @archurhh for supplying)

1 Like

@eastgate. Great session yesterday. Can you provide more detail on this comment “Want to automatically update a library? Use AutoFetch!” Can you give an example on how tis works? What the steps would be to make this work?

Great meetup yesterday. Thanks guys!

1 Like

@eastgate, would you mind explaining how this, in your demo, works? You’ve included two functions in an $Edict, rather than in the hints folder. Since these functions are in the $Edict, may I presume that they are immediately executed? In the exists function, what attribute or variable is the $Path being returned to? It is not clear to me what thee are doing in the $Edict.

I’m guessing, but imagine you have a library note with function code. That library note could autofetch from a (web) resource holding the current version. OW, the local note would always hold $Text taken form the external source. Update your function and all your docs using that library could update automatically. IOW, the $Text of the note is updated to the new function code (the source would need to cover all functions in the note not just the one(s) changed).

But, as someone somewhere once said: “with much power comes much responsibility”. If the source changes in a way tgat need changes elsewhere in order to work (or worse, not break badly), extra info would need to be supplied. If re-using your own work, no foul as you’re responsible either way. In a public use, more care is needed. I think we’ll find the edges of this as we begin to make use of such affordances.


OK. exists() and isInstalled() are not used by the demo. Think of them as extra affordances if needed (outside the installation).

As adding a stamp/prototype/template to the right path doesn’t generate container OnAdd code as in the app installed version of /Hints, etc. I’d advise checking/manually adding all those three before using the above demo. No critique there, this is early stage exploration; there are inevitably dependencies to discover. At present, there is no way bar using AppleScript or Keyboard Maestro, or such, to drive the menu to add those feature.

The action() lines was explained to me thus (separate convo) by @eatgate:

Normally, editing a library note recompiles its contents. But “editing” the note by setting its $Text doesn’t do this. The action() operator recompiles the functions in the library so they’re immediately available to the following line, which calls one of them.

IOW, this call ensures the app ‘knows’ these function exist. In context, it makes sure the next line—a call to a function in the new library note’s text—is understood.

AutoFetch copies the contents of an online resource into the $Text of a note.

Conceivably, you could set (for example) /Hints/Library/Megacorp to auto fetch the most recent version of the Megacorp library from https://example.com/Megacorp/Library.txt . If MegaCorp posts a new version of the library, it will be downloaded automatically the next time you open the document.


The two functions, exists() and isInstalled(), aren’t used in the installer and could be removed. I left them behind as a reminder: when writing the bootstrap part of installers, think about what you want to do if this has already been installed, or something else has created a note you plan on creating.