Tinderbox Weekend Cambridge

Tinderbox Weekend Cambridge went unusually well. As most Tinderbox Weekends do, it generated quite a few great ideas. Some of these are big new topics, suitable for research; others are small bits of trimming and polishing on which we can get started right away.

A very interesting discussion is underway on the wiki, planning a way to move information from links to attributes. Since Tinderbox attributes can now be set, new vistas for using links have opened in front of us. Exactly how to do this is not yet clear — it's an interesting design problem — but we're confident that the community will shortly converge on a good answer.

• We've tweaked the text engine to provide better support for Bookends, the reference manager from Sonny Software. You can cmd-opt-drag from Bookends to Tinderbox views to create new notes that are linked directly to the Bookends citation, or you can cmd-opt-drag from Bookends to text windows to insert a "web" link that opens the reference in Bookends on your machine.

• The latest tweak to Tinderbox maps lets you display the text of a note along with its title.

• Want to link a file to the File Button, but don't have the file handy for drag-and-drop? We've added a Browse... item to the file button menu.

These are just a few of the small improvements planned for the next release.

 

Spreadsheet

Tinderbox's new spreadsheet import is great if you keep a lot of information in a spreadsheet just because spreadsheets are good at making tables.

But, inevitably, we run into various edge cases where Tinderbox tried to do what you want, but doesn't quite understand. For example, Tinderbox looks at each column of your spreadsheet and tries to figure out which ones are numbers. Most of the time, that's easy: 42 is a number, and frabjous is not.

But is "192.168.0.1" a number? No: it's an IP address. And 3.6.2 is not a number; it's a version code.

 

Umlaut

A German reader observes that dragging address cards into Tinderbox works fine, unless the person’s name happens to include an umlaut, So, "Mark Bernstein" is imported, but "Peter Nürnberg" winds up as Untitled.

After much sleuthing, it turns out that the data dragged from the address book is plain ascii text if that suffices, and UTF-16 unicode if it doesn’t. Tinderbox was prepared to cope with UTF-8, but found the sudden appearance of UFT-16 a little bit unnerving.

The dull corridors of release notes, such as

Address-book vcards of people whose names contain diacritics are now handled correctly when dragging into a Tinderbox view

frequently hide tales of wonder, surprise, and mystery.

 

The Multiple Column Adventure

Over on the Tinderbox Wiki, Erc Abrahamsen started a discussion about exporting things in multiple columns. Multiple columns are a nice alternative to a long linear list; for example, here are the chapters of my forthcoming book on The Tinderbox Way.,

Table of Contents

  • Introduction: The Tinderbox Way
  • Notes
  • Lists and Containers
  • Attributes and Values
  • Prototypes
  • Emergent Structure
  • Agents
  • Links
  • Sharing Lists and Outlines
  • Sharing Notes: Personal Information Pages
  • Composing Print Documents
  • Sharing Notes: Writing Weblogs
  • Sharing Notes: Weblogs and Cheese Sandwiches
  • Why Is Tinderbox So Complicated?
  • Meeting Notes
  • Information Farming
  • Planning With Tinderbox

CSS3 will include multi-column lists, but few browsers implement much of CSS3. So, that won't work today. You can achieve multiple columns by floating the list elements, but this creates other potent hangups. How might we get this done right now?

The lists above are generated by three agents, named Column 1, Column 2, and Column 3, Each of those agents extracts a few items from a master list, called List. For example, Column 1's query is

#first(../list, $ChildCount(../list)/3)

and column 3 is

#inside(../list) & (!#inside(../Column 1) & (!#inside(../Column 2)

So, each agent grabs one column, and formats it as a list. The lists, in turn, have a fixed width and are floated, so each list follows the previous one. If we add new things to the list, the list grows automatically. (Requires Tinderbox 3.6 or later)

Making it Happen

My first reaction was, "this won't work, because Tinderbox can't do division," But I was wrong: Tinderbox does do division! Tinderbox is a big program, and it offers lots of ways to get stuff done. I'd forgotten about this one.

By second reaction was, "this won't work, because the second argument to #first has to be a number. But, why not let it be an expression? Where would the harm be?

Unfortunately, we're right up against the release deadline. Could we make the change without fouling up other parts of Tinderbox? It means changing AgentQuery and AgentQueryParser, as well as building an unexpected connection from AgentQuery to ActionExpressionParser, a class that was really meant to be private to ActionParser. It's a whole bunch of complex moving parts.

It turned out to be practical, because these parts of Tinderbox have a good test vise in place. The test vise, in turn, is part of the Windows project: it makes sure agents do the same things on Macintosh and on Windows. So, the Windows port (and the big investment we've made in making Macintosh and Windows share so much code) has had nice benefits for Macintosh users — even before we've got Tinderbox for Windows to beta 1.

 

Outlines and charts

Disclosure triangles in outlines: ✓

ChartLayoutPolicy: ✓

ChartDrawingPolicy: ✓

One thing after another. ✓

 

The December 16 bug

Today, I had planned to spend most of the day fixing a problem in TinderWin map views: resizing a note also changes its position.

But, instead, I found myself deep inside Tinderbox's date manipulation code. A test suite that ran yesterday mysteriously failed today. What had changed. The code was unchanged. The test was unchanged. But today was a new day. December 16.

And, as it happens, the code as written has a single >= where it ought to have had an =. The upshot is that an exception would be thrown in a test that adds 14 days to "today", if (and only if) the code were running on Windows and today was 16 December. If I'd taken the day off, if I'd been flying somewhere today, if I were working on Tinderbox 3.6 for Macintosh today, it's likely that nobody would have known until next year.

Update: The resize issue is fixed, too. There remain some map problems, of course, but ithe map's functionality is improving daily.
 

Find updates

Observant readers of Mark's weblog will notice that Tinderbox 3.6 is now in its 11th beta. b11 is a very minor tweak; the Find window now updates automatically when notes are renamed or edited, so its results reflect exactly the state of the document.