Tinderbox Meetup - Saturday, May 13, 2023

I’ll reach out to Harlan and ask him.

1 Like

Jerry in @mdubnick is Jerry Michalski if I’m not mistaken, who @satikusala probably knows! He might be a really fine speaker, too.

1 Like

I actually don’t know him. Can you give me a URL for him and I’ll chase him down.

1 Like

Another possible topic for the meetup just popped up with Google’s announcement of Project Tailwind — here is link to Steven Johnson’s blogpost on it: Project Tailwind - by Steven Johnson - Adjacent Possible

1 Like

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

The circular layout I posted uses this code (it’s for a map and used on all items in the map):

var:number vItems = $ChildCount(parent);
var:number vOffset = ceil(vItems*0.75)-$SiblingOrder;
var:number vSpread = 40;
var:number vTheta;
vTheta = (vOffset*3.1415927)/(vItems/2);
$Xpos = vSpread*cos(vTheta);
$Ypos = vSpread*sin(vTheta);

No user attributes needed. Altering vSpread alters how close/loose the items are around the circle. My example had 58 notes and my hunch is that a good default vSpread is c. 70% of the value of vItems. You could try:

var:number vSpread = vItems*0.7;

That way vSpread will alter if the number of items alters.

2 Likes

I’ll post a more described version of this in due course but no time to write fully scripted demo right now.

Other trick on display. I made only a few link typed visible see the Links tab of the Inspector. For the remaining visible link types (here, two) I gave each a different colour, hid the link type label and set them the use straight lines not curves (again see the Links Inspector). All though link settings can be changed so when done they can as easily be reset to default style/colour.

For a few setting changes, we can now easily see which items are getting more interconnections, i.e. emergent structure. In this project, at early stage, those notes might be ones to polish up earlier than others.

3 Likes

Here are the notes, example file, and video.

Tinderbox Meetup - Saturday May 13, 2023 Video: Using TBX as a CRM, Email and Social Media Posts from TBX

@mdubnick - have you considered the possibility of exporting your TheBrain corpus as a Markdown or other file, and importing the works into a Tinderbox project file? You might then use Explode to break it down again into atomic Notes in Tinderbox.

Markdown adapts well to Explode command in Tbx. Not sure how internal links would fare through the breach. That may be a challenge or an opportunity for a fresh outlook, depending.

There is some info on exporting TheBrain data files here:
Exporting a Brain to a Markdown document - TheBrain Forums.

If nothing else, may be a useful exercise in seeing your brain in a different setting, so to speak. Am also reminded of @mwra’s recent comment about Tinderbox’s dexterity in assisting primary quantitative analysis on big data; any database with 10’s of thousands of Notes seems fair game for Tbx :slight_smile:

2 Likes

Thanks!
Giving it a try with test brain – will report back…

2 Likes

I assume this mean intra-brain links. The Markdown [ ]( ) link mark-up is an easy pattern to detect so if Brian-notes exported with the name of the Brain note (i.e. $Name equivalent) as either both part(s) of the Markdown link it ought to be possible to recreate the links.

That said, IIRC action code linking tools make Tinderbox basic (note-to-note) links. Making text (in-$Text-anchor-to-note) links automatically might be harder.

1 Like

@archurhh That works!

Exactly… My objective is not to replace TheBrain and its mind map plex, but to use TBX as part of my workflow; in short, getting me from Bookends references and DevonThink through the plex (where I can work “visually” on the relationships via links) to TBX where I can creatively apply the actions, etc. I’m learning (via atbxref, tutorials and meetups) to specific projects. It is quite a different learning experience when I can deal with my idiosyncratic “notes”. I needed a way to view all those items in the TBX setting and the fact that the plex links are absent is actually helpful.

Thanks again.

1 Like

BTW. Jerry Michalski has agreed to join our June 10 meetup.

Michael

2 Likes

In the meeting showed through a scenario where I had a research file where notes had data in $URL, some user URL-type attributes plus weblinks in $Text. In some cases, due to drag-drop into $Text of notes, the same URL may be both in $URL and a weblink. This code addresses that issue to avoid an over-count:

$URLCount = $WebLinkCount;
if($URL){
   $URLCount+=1;
   eachLink(aLink){
      if(aLink["url"]==$URL){
         $URLCount -=1;
      }
   }
};
if($SpecURL){$URLCount+=1;};
if($SourceURL){$URLCount+=1;};
if($XSDSpecURL){$URLCount+=1;};
if($JSONSpecURL){$URLCount+=1;};

$WebLinkCount holds the number of out-of-Tinderbox links, whereas $OutboundLinks is the total of Tinderbox basic/text links that start in the current note. So our count starts with $WebLinkCount . Then we check if we have a value in $URL. If we do, we cycle though the note’s link looking for any any links (those with a link url value) that match $URL. For any matches (there could be more than one), we decrement the text weblink count before adding a 1 count back for the $URL. The other lines of code refer to some user URLs where I know there is no chance of duplication.

Of course the latter might, in another scenario, have possible duplication with $URL or weblinks as well, but the about example has the building blocks of which a more complex de-dupe might work.

So, the above is simple but an immediate upside, my list of URLs to review/validate shrank from 1,400, to 1,100 so a c.20% ‘saving’, though the next task is annotating the duplicate items. Anyway, I hope the general pattern may help others.

I used the above in an agent action but it works as a rule/edict/stamp if such is your need. Note too that the per-link dictionaries (e.g. such as aLink["url"] above) are read-only (see more on eachLink())—at least in v9.5.2 as at time of writing.

HTH others.

Further to the last, as any URL might be a duplicate, this is a more thorough test:

var:set vLinkSet;
eachLink(aLink){
   if(aLink["url"]){
      vLinkSet += aLink["url"];
   }
};
vLinkSet+=$URL;
vLinkSet+=$SpecURL;
vLinkSet+=$SourceURL;
vLinkSet+=$XSDSpecURL;
vLinkSet+=$JSONSpecURL;
$URLCount = vLinkSet.count;

It doesn’t tell you which occurrences ate duplicates 9or discrete sets of duplicates) but it does give an accurate count of discrete URL for a given note.

Got a sort of similar situation where you want to iterate through a list of attributes (i.e. Displayed Attributes)? Then see the recent post on Constructing $-references from loop variables - #4 by mwra, whereby you could turn all those per-attribute tests at the end above into a loop through a list of attribute names. I mention this as an example of seeing how you can leverage yourself from code with lots of hard-wired values (e.g, references to specific attributes) into a list of attributes that might be derived from (and changed by) other action code.

Sorry, late to the game. What is a SpecURL? SoruceURL? XSDSpecURL? JSONSpecURL?

As explained, user (URL-type) attributes. the point being URLS can be in any of:

  • weblinks in $Text
  • system URL-type attributes
  • user URL-type attributes

any of which might be duplicates. The code covers all 3. You can leave out the extra user attribute tests but the code won’t fail if they aren’t there.

The example is just that rather than a precise fix to a bounded problem, as likely we don’t all use the same set of attributes. Doing version 1 then made me realise that a simpler way is to add all the possible URLs (link or attribute derived) to s Set, as that automatically de-dupes so the number of items in the set is the number of discrete URL attributes/links in the note.

Essentially, version #2 makes a set type variable, then adds to it the URLs of all weblinks in the note’s $Text (weblinks are always from $Text, or they need to be URL-type attributes). Then add each URL-type attribute you (think you) will use to make a de-duped list whose item count you can then record.

Thanks. I get it now, for example I have me $URLEmail, i.e., a URL to diggera a mailto. Can you share an example of a SpecURL, SOureceURL, XSDSpecURL and JSONSpect URl and how they may look or act differently from other kinds of URLs.

The only example is my current research TBX which i can’t share as it’s designed for me and would need lots of description for others to use it. But to answer the other part of the question, they don’t look any different—or they look like any other URL-type attribute (system or user). The attribute names are simply to remind me of the purpose of the various URLs, plus I need to store more than one URL in an attribute , per note… I’m using $SourceURL for the resource main page, $SpecURL for the specification or API for that resource, $JSONSpecURL for a JSON-based resource. So, there are just URLs, albeit with different nuance and in some cases linked to particular formats (XSD, JSON). The formats don’t matter to anyone but the maker, so it’s best not to be too literal in interpretation.

But, recall the starting premise. An unexpected side-effect of how the data for >6 notes was generated resulted in a lot of duplicate URLs and some hard to tell by eye as they were weblinks using anchor text (IOW you need to open Browse Links to see the actual URL). The code shows how I was quickly able to ascertain I had a 20% duplication rate. The exercise was worth it for that alone. Beyond that the code has no particular purpose but it does offer a generalisable example for those who have a similar issue albeit with different attributes, data, etc.problem.

Making it a formal demo would confuse and get people in process-fixation, i.e. trying to follow the process without understand, rather then seeing the pattern and using the understanding to improve processes in other contexts.

1 Like