Random Note Speed-dating

I hope I’m not stealing your coding thunder but I couldn’t resist giving it a try, it’s a cool idea.

speed-dating.tbx (67.3 KB)


To start, is it okay if my “container of IDEAS” is actually an agent that aliases everything of a given prototype?


@pat - Amazing! Thanks for doing this.

Thanks to your video, I’ve got what you built figured out and now I’m going to try it out with my ZKN to see if it’ll randomly pair things. Stay tuned… :eyes:

1 Like

THIS IS SO COOL. It works!!!

How very neat to have my ideas pop up in juxtaposition like this. And it’s even neater bc each of these ideas is presented w/enough context to connect them bc I’m only choosing ones that are of the zettel prototype.

Thanks again @Pat!


what’s the goal?

this seemed to be a way towards idea generation

i wanted to see how the conversation developed,

the main use case that i could think of: when there was an extremely large amount of disconnected info

  • when you look at philosophy and philosophers, all the info is connected even tho it’s a large amount

  • philosophers like many connect info in their heads, after thought and other analysis, and im sure many drafts

i was just wondering what the use or overall use of this would be

when we look at info, info is typically connected because they make sense for the info to be connected. i was unsure how such a random way of showing unrelated ideas would be helpful?

  • this would seem helpful when ml has advanced far enough to show ideas that should be connected, but that would take a very long time most likely

    • also it’d seem that the human brain does this much better when it comes to ideas
1 Like

The overall use case for this is to stretch my mind, wrestle with how two ideas I have mapped in a specific way might chart new connections and understandings, and then to document that 1) so that I don’t forget I made the connection; and 2) so others might build upon it.

For example, I might not ever think to connect [running the code] “active user involvement,” which I learned from reading about positive design (a theory where the user must be actively involved in creating a positive experience and not just feel positive emotions from passive engagement) and “civility,” a virtue ethic (a concept I read about in an online context, specifically, where it means to work to understand and co-construct a good life with others online e.g. this very effort to answer you respectfully when you have aggressively graffitied a convivial online space that I value and protect).

Because of this code, I can put the two ideas in the same thought experiment. I can ask myself questions about how civility might inform how we design positively, how civility is or is not active/passive, what it might look like to design something to cultivate civility, how that would benefit (or not) from a positive approach, and so on.

And I can do this over and over again with every concept I’ve added to my tinderbox file. It might inform my understanding and also contribute unanticipated and interdisciplinary connections to my respected fields.

1 Like

this very effort to answer

to take those 2 ideas which you’ve mentioned and to put the combinatorics of those into practise:

  • what comes to your mind when i (initially) replied to this topic of discussion without any characterisation of it

  • while on the other hand, the op described my view and my opinion and my thoughts that i shared as ‘aggressively graffitied’

how would that allow or welcome anyone to speak anything of facts or opinions given the array of interpretations out there on the web?

is it, i wonder, up to any given users to interpret ‘aggressively graffitied’ as positive when they themselves made no characterisations of the topical discussion (initially or subsequently)? and yet the reply has been characterised in that way?

The first thing to note is that it’s not entirely random. Yes, the algorithm selects a random note – but the set of notes it chooses from is not random. Using Tinderbox agents, you can define the set of notes to explore. This could be notes from a book you’ve read, a specific topic, whatever. Presumably Beck’s set of notes are things that interest her and have potential to be connected in some way.

If you shuffle a deck of cards and pick one, you don’t somehow end up with a receipt from the grocery store.

To me, Tinderbox excels at supporting the thinking involved in connecting ideas. It doesn’t make the connections automatically – something that other software purports to do.

Here’s an example: if I create two notes, “dog” and “wolf” and place them in a new DEVONthink database, DEVONthink will never identify them as connected. As I add more notes to it, it might eventually find the connection. It might be a direct connection like adding a note “dog wolf”, or less direct by adding two notes “dog canine” and “wolf canine”.

Tinderbox also will not make that initial connection between “dog” and “wolf”. And as far as I know, it won’t be able to bridge “dog” -> “dog canine” -> “wolf canine” -> “wolf” (it does have a similar notes feature, which is not as sophisticated as DEVONthink’s similarity search).

So, why use Tinderbox? Well, my experience is that the act of identifying relationships and making connections is as or more valuable than the connections themselves. In other words, DEVONthink can tell you that something is connected, but it can’t tell you how or why it’s connected.

Say I add another note: “I can really wolf down a hot dog.” Any time I explore my notes for stuff about dogs, DEVONthink will show it to me. And I might like that – one time. I can link it to notes about American idioms and cuisine. But once I’ve made that connection, and I’m looking for stuff about dogs, I really don’t care to see that note anymore.

I can’t speak for Beck, but to me, the “things between the things” are very interesting. Given two different ideas, what is their relationship? Are they directly related? Are they distantly related, and if so, what is the chain of ideas that connect them? Do the ideas agree with one another, or contradict? The human brain can ask these questions and explore their implications. I don’t think computers can.

With Tinderbox, I can gradually add indicators to my notes to indicate meaning and relationships. This might be adding them to a container, or adding tags, or making one note bigger than another, or positioning them closer or farther apart, giving them colors and flags. These are completely arbitrary indicators of meaning that make sense to me, and perhaps to nobody else. They aid me in my thinking.

I think there’s value in using software like DEVONthink to find connections that I wouldn’t ordinarily see. But more important than that, I need to understand the meaning of the connections, which is something that software can’t do. And as I think through the meaning of those connections, I want to codify it in some way. Tinderbox provides an open toolkit for doing just that.


It is, you’re right. It seemed to me that you were acting like a troll and I used those words to indicate that I noticed that and didn’t welcome it. If I have misunderstood your presence here, I owe you an apology.

If you are here to learn and question, well that’s what I’m here for, too. And I apologize for misinterpreting and possibly insulting you.

FWIW, I did appreciate the exercise in articulating what I find useful about this, so in hindsight I’m glad you asked.


im not the kind of person that gets insulted by any assumptions of any persons for the reasons i’ve already indicated of the wide range of interpretations, and w/e else was said

for me, what i merely take away from my experience thus far is how ppl are (some) of the times

regardless of perceived intentions, i find that to be fascinating in itself

@eastgate – follow up question, since you alluded to TBX8 and it’s now out: how would you suggest approaching this idea in a Tinderbox 8 fashion? Would it be using AppleScript?

No; AppleScript is certainly not what I had in mind here.

I don’t recall immediately what I did have in mind! I think it may have involved the new create() and delete operators, though I’m still not at sure you need delete here.

Hi Beck. I’m really really sorry to do this to you (I know you’re busy), but would you mind demo-ing what you’re talking about here? Even just a brief GIF would do. Thanks so much. But don’t stress if it’s not possible. Just thought I’d try my luck and ask :slightly_smiling_face:

This is my contribution to this conversation. It’s might not do exactly what you need it to do, but it comes close, I think, to the end goal…of juxtaposing notes side by side randomly. I built this because the previous examples were beyond me. Where I’d need help though would be with cycling through one option for each group. For example: let’s say I want to lock off “bacon” under proteins, but want the rest to randomly change, because I want to compare and contrast combinations. I don’t know how I would do that. The Tinderbox way I guess would be to export different combinations, but it would be nice to be able to view different combos side-by-side without exporting.
Breakfast Randomizer.tbx (109.3 KB)

I’d do about this by giving each group note code to store the path (or ID or Name) a random child of that group set via the group container’s rule or edit. Show that information as a Displayed Attribute in the group container (a prototype might make this easier to set up fro several groups at once). The main random agent then collects this value for each group.

So we might make a String attribute SelectedChild and have this edict (or rule) in Group container notes:

$SelectedChild = $Path(randomChild)

If you wish to ‘lock’ that group, you disable the rule/edict: see its Inspector tab - or make the attribute for that, e.g. $RuleDisabled) a Displayed Attribute for group contains). Now set the desired locked value in the group’s $SelectedChild attribute. The main agent will now keep getting the same contributor from that group’s $SelectedChild until you turn the rule/edict on again.

Conversely, if you want to exclude a group member from the random, add a new Boolean attribute IsExclude. You can add that as a Displayed Attribute to the prototype(s) for the child notes of your group containers. To exclude a note from the randomiser process, tick its $IsExclude (i.e. set a true value). Now amend your group container’s edict to:

// get a list of non-excluded child notes' paths
var:list vChildList = collect_if(children,$IsExclude==false,$Path);
// get the number of items in that list 
var:number vListSize = vChildListCount;
// get a random list position
var:number vRandomItem = round(rand() * vListSize);
// set selected note
$SelectedChild = $Path(vChildList.at(vRandomItem))

N.B. last not tested (not enough free time) but should work or be close enough to the solution.


To compare different combinations side by side you’d want to store each combination in a variable and then use a template. If you want the suggestions to be persistent you’d store them in an attribute. I’ll play around with this later.

Ok, the solution was not quite as I thought. But this works for the basic case: Breakfast Randomizer-v2.tbx (202.3 KB)

Locking a value in—or out—is problematic dues to some unexpected edge cases in action code support of variables (which I’ve reported) directly.

Open the TBX, select the “Random Combiner” and apply the stamp “Reset Random Combo” to see a new set of comparisons. Sometimes you may also need to use File → Update Agents Now. For reasons I don’t understand, such a small file can take unusually long to update.

OK, as promised at the meet up, here’s my improved random note suggester solution: Breakfast Randomizer-v3.tbx (255.2 KB)

New here is a method to either exclude a note within a group from consideration (i.e “don’t use me in this group”) or another to force inclusion for a group (“only use me for this group”). Both methods are reversible and stamps are provided for that task.

There is a ‘read me’ which I recommend skimming. Once you know how things work, you don’t need the outline column view ‘on’, but it can be handy to help understand how things work.

Is the TBX only for breakfast combo suggestions? No, absolutely not. Look at the general pattern and take for your own use. I suspect that with a bit more thought, it might be possible to reduce the number of user attributes needed (I use 4: a string and 3 booleans). But, don’t worry about that, a few extra attributes won’t tax Tinderbox. It’s just that if you want to re-use the concept and code as-is you’ll need to make those attributes.

I hope this is of use. :slight_smile:


Wow! This is of great use. For the longest time I’ve been looking for a brainstorming assistant with my storyforming / conceptforming phase of my writing. Say I want to toy with 4 or 5 different possibilities for story climaxes, and see how they align with other parts of the story that are “fixed”. Now I can. Thanks @mwra ! This is awesome.


My pleasure. As said at the meet-up, working on other people’s problems is quite freeing as the (notional) boundaries are set. I loved the fact that the first comment in the meet-up was for using the idea for a completely different purpose, e.g. prompts for what to work on today (not the interrelation of the suggestions, just some suggestions).

This exemplifies the joy of a toolbox [sic] for thought as opposed to a tool for thought: I don’t want to be told my new writing tool only writes vowels. Sense-making is all about careful colouring outside the lines. A bounded tool doesn’t offer that flexibility (other than by moving the area of interest ‘inside the lines’) is far less powerful. Of course ‘flexibility’ and ‘complexity’ are two sides of the coin, which side we fall is subjective. :slight_smile: