Random Note Speed-dating

A view that puts two (or more?) random notes together (potentially ones in a specified prototype) and prompts you to reflect on how they might connect to one another.

You can link the notes together or make new notes that connect them.

You can then “refresh” it to get another pairing (both or just one, in this sketch I refreshed “peripheral reach” but kept “willpower”):

Meh, I am not inspired, so I refresh both:

And I have two new topics to connect, or keep refreshing.

1 Like

This will be easier to do in Tinderbox 8. But here’s a related approach you might enjoy.

  1. Start with a container of IDEAS with names like “willpower” and “fascination”.

  2. Create an agent LEFT that chooses one item from IDEAS, and sets the agent’s subtitle to that note’s name.

  3. Use the Dashboard prototype, or your own, to emphasize the subtitle.

  4. Create a second agent, RIGHT, that chooses one item from IDEAS that is not the same item that is currently displayed in LEFT.

For extra credit: allow both agents to refer to a known time — perhaps $StartDate(/config). After running, the agents set this to the current time, and then won’t change their value again for a fixed period, perhaps 5 minutes.

Then, create a handy way to set $StartDate(/config) to some past time, allowing both agents to update again.

1 Like

Maybe the answer is a bit of both, but for now, I really am wanting random just to go to one end of how “true” randomness can spark connections I would never have otherwise made.

Thanks, Mark. This project will require me to up my programmatic use of TBX as almost everything you’ve asked me to do is a level above what how I’m using it (very manually) now.

To start, is it okay if my “container of IDEAS” is actually an agent that aliases everything of a given prototype? I have an agent that does this already and the notes in it (my zettels for my zettelkasten) are just the ones I’d want to randomly pair.

I’ll move onto step two once I’m sure my starting point won’t break everything. If it will, I’ll try this with a “container of IDEAS” that is truly just that.

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)

5 Likes

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

Yes!

@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!

2 Likes

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.

2 Likes

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.

3 Likes

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.

HTH

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.