Introduction of new members (everyone is welcome, no experience required)
Go through Agenda: Discussion, questions, answers, review, demo, exercises
Tentative Agenda Topics†
Topics from last week’s and previous week’s meetups include:
More on linking
Constructing and working with queries
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
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.
@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?
@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.