Recent Articles

Entries in Research (16)

Monday
Feb152010

Searching for the Hundred Year UI

Of the many thought-provoking essays written by Paul Graham, his Hundred Year Language thought experiment has always struck me as fascinating. Unlike Graham’s conclusion—in which he concludes that a language described in 1958 would provide the basis for the Hundred Year Language—I think user interface design provides a wide scope for invention and reinvention.

What’s inspirational about Graham’s challenge, is his notion that perhaps by looking out a hundred years, we can begin adopting approaches that will prove to be fruitful in moving us toward the hundred year mark right now. 

How could we possibly see a hundred years out?

It’s important to remember that the GUI is 30+ years old. The visionaries who foresaw our present—Vannevar Bush, Douglas Englebart, Ted Nelson, Alan Kay—needed a view that stretched 40 to 50 years in advance of the state of art. If they could see to the 40 or 50 year horizon, why shouldn’t we, equipped with additional information drawn from the history of computing, aim to shoot for a hundred? By combining our historical understanding with a creative vision, why shouldn’t our vision reach ahead that far?

Principles in our search

I would like to propose some principles that should stand us in good stead.

  1. Human cognition will change only gradually over the next hundred years.  Jakob Nielsen reports that conclusions from interaction research performed twenty and thirty years ago are still valid. There’s no reason to believe these results will change (much, if at all) over the next hundred years.
  2. Culture may change significantly. Any study of modern history demonstrates the significant cultural changes that can occur over the course of a hundred years. Whether that is due to economic, industrial, technological, political or philosophical causes, cultural attitudes and outlooks can change substantially.
  3. Technology development will continue unabated. Unless our economic system is systemically interrupted by drastic events (think: peak oil), technological development will increase the capabilities of our machinery to virtually unimaginable levels. (Paul Graham’s thought is that the lower bound of computational performance over the next hundred years is a million times faster. Now, he might be able to imagine that, but I’d consider the experience of a million-times faster computer to be virtually unimaginable. Let us try, though.)
  4. Programming will still be hard. Fred Brooks won’t be disproven in the next hundred years: there will still be no silver bullet. Programming is an unnatural act—asking humans to be purely logical when we are designed for emotional response—and the rate of progress in programming productivity won’t be any greater than that demonstrated by the last thirty years.

 

As we progress on this search, we may very well decide that there are other principles we can treat as axiomatic. When we do, it will mightily assist our capacity to envision the future.

Now let’s get creative! How about joining me in envisaging what our UIs may be like in a hundred years?

Sunday
Feb072010

Fact-checking Nick Carr's ass

Nick Carr really needs a fact checker. He recently opined:

“Never before in history have people paid as much for information as they do today.”

He challenges his readers to:

“Do the math. Sit down right now, and add up what you pay…”

So I did. And I found Nick to be wrong. Quite wrong.

Problematic aspects of Carr’s piece

It’s a delicious irony that the man who asserts that the internet is shallowing our brains demonstrates his thesis with a slap dash thought piece rife with holes. Here are just some of the holes in Carr’s piece:

  1. Carr fails to define his terms. Is he talking about inflation-adjusted pricing relative to any time in history? Or as a percentage of income? For an average individual in society? Relative to annual income? Or relative to bit of information?
  2. Carr lumps together the cost of information, information access, communications and entertainment as if each of these quite distinct items are all “information.”
  3. While Carr is happy to include the cost of subscription services, he excludes information purchased directly (books, music, software etc).
  4. While he includes internet access, he excludes the cost of the computing devices themselves.
  5. Carr assumes “us,” “we,” and “you” are always information consumers. He doesn’t include the cost of acquiring, producing, publishing or communicating information.
  6. He makes no allowance for forgone information. For example, I remember my mother limiting the photographs she took because it would cost too much to develop them; whereas my family now snaps hundreds of photographs every year. Cost is no longer a factor.
  7. Carr provides absolutely no evidence to support his assertion. (Although he links to a dodgy bit of analysis from Gizmodo.)

So, I’ve taken up Nick’s challenge. I compared my “information expenditure” in 2009 with my father’s “information expenditure” in 1985. When I did, I found Carr’s assertion mistaken. Information expenditure is significantly less than it was 24 years ago. 

Evidence

Subjects: Loryn Jenkins (2009), Elwyn Jenkins (1985)

I have interpreted Carr’s assertion opening assertion as meaning: “As a proportion of gross annual income, never before in history have people paid as much for information as they do today.”

I chose to compare my family’s 2009 “information expenditures” with my parental family in 1985. While any single point-in-time comparison is merely anecdotal, this is as valid a single-point comparison can be due to similarity in our respective stages in life, responsibilities in life, level of education and mental outlook.

  • In 1985, my father was a 32 year old high-school teacher. Our family was single income, with three children (ages 11, 9, 7) and a mother preparing to re-enter the workforce. We lived in Albany, Western Australia. My father was pursuing a Bachelor of Education (Honours) at Murdoch University, and was an avid consumer and producer of information, and a computing afficionado. He spear-headed introducing computers into the class-room, achieving a 2:1 student:computer ratio because he believed that computing would significantly enhance a student’s education. Dad self-published some student’s fiction that year, enlisting students to sell the book door-to-door around town.
  • In 2009, I was a 34 year old CTO in a software development company. My family is single income, with two children (ages 12, 11) and a wife preparing to re-enter the workforce. We lived in Sydney, New South Wales. I hold a Bachelor of Arts (Honours) degree from Macquarie University. I introduced significant improvements into my employer’s software development process, drawing both from experience and knowledge acquired from software development and applied psychology literature. I began publishing a small blog, read by 2,000 people originating from 70 different countries.

Scope

Carr’s claim is about the cost of information, but his summary challenges the reader only to calculate subscription costs. Despite including information access costs, he doesn’t include the costs of the computer hardware or software with which that information is also accessed. Nor does he include information products directly purchased. 

While I would argue that information per se excludes information access, communication and entertainment, I have opted to follow Carr’s challenge and include them all:

  • information access - computer, software, telecommunications, travel-to-get-information
  • entertainment - books, music, movies, tv shows
  • communications - email, instant messaging, blogs, rss
  • information - web, rss, books

Information gathering

My information comes directly from my family’s Quicken record of expenditures from 2009. My father’s information comes from his recollection of expenditures and income in 1985, gathered during a telephone call this evening.

The data

In 1985, Elwyn Jenkins’ family spent around 32% of gross annual income on “information;” whereas in 2009, my family spent around 10% of gross annual income on “information.” Here’s what the break-down looks like.

From Nick Carr’s original list of categories, I don’t subscribe to Cable TV, Satellite radio, Netflix, wifi hotspot access or TiVO. Additionally to his list, I included the purchase of books, movies (theatre), DVDs, computer hardware and peripherals, computer software, hand-held game consoles, fax, domain names, website and children’s books. Here’s the break-down as a percentage of my gross annual income.

Information Expenditures by Loryn Jenkins’ Family, 2009, as a percentage of gross income

  • Internet service - 0.63%
  • Cell phone service - 2.08%
  • Landline phone service - 0.32%
  • Desktop computer - 1.91%
  • Online computer backup - 0.16%
  • 1200 DPI Color Laser Printer - 0.26%
  • Hand-held game consoles - 0.44%
  • Console games - 0.42%
  • Music, TV Shows, Movies, Apps - 0.53%
  • Movie Rentals - 0.60%
  • DVD Rentals - 0.12%
  • Fax - 0.29%
  • Professional Books - 0.84%
  • Children’s books - 0.26%
  • Domain name purchases - 0.18%
  • Website operating costs - 0.07%
  • Total “Information” Expenditure - 10.09%

The information categories in my father’s 1985 expenditure have been selected to be analogous with the classes of expenditure in my 2009 data.

Information Expenditures by Elwyn Jenkins’ Family, 1985, as a percentage of gross income

  • Landline phone and long distance - 8.31%
  • Postage - 0.02%
  • Desktop Computer - 2.31%
  • Modem purchase - 1.23%
  • Dot Matrix Printer - 2.46%
  • Word Processing Software - 0.62%
  • VHS Tape Rental - 0.40%
  • Encyclopaedia Britannica - 0.65%
  • Newspaper subscription - 0.22%
  • Children’s books - 0.18%
  • Professional Books - 5.91%
  • Fuel Expenditure, drive to uni - 9.23%
  • Total “Information” Expenditure - 30.53%

Commentary - Elwyn Jenkins’ expenditure

I now know why my mother and father knelt beside their bed every week, with hand-written family budget and cash projections, identifying which bills to pay and which expenditures to make. After taking taxation into account, the family in which I grew up spent an astounding 45% of disposable income on “information.”

Long distance calling in Australia in the mid-1980s was very expensive. My family had a rather outsized budget for that because my father organised weekly conference calls, frequently including long-distance guest speakers. Moreover, bulletin board services being accessed induced timed long-distance calls.

In 1985, my father’s computing purchases included a “high-resolution” dot matrix printer, a Commodore 128D which had a 64-character wide color screen. In 1985, Dad purchased the Commodore 128D for himself, handing down to me and my brother the Commodore 64. (Hey, we had fun typing in machine code from magazine print-outs to get our own games.)

I recall the evening an Encyclopaedia Britannica sales rep called on my parents. He explained the educational value of the Encyclopaedia Brittanica; and my father choosing the three-year subscription plan to pay for the enormous cost of those books, so that his children could access the information to support our education. At the time, an encyclopedia set was an essential investment for any educated family.

My father reports purchasing an absurdly high number of books: two to three per week. I suspect this data may be inflated somewhat. Nevertheless, even if he only purchased half the reported volume, it doesn’t materially affect this analysis. 

You may have cause to question the inclusion of fuel in this list. Living in Albany, Western Australia, my father was 4.5 hours drive from the nearest university. In pursuing his B.Ed. (Honours) course, he was forced to drive to university weekly. In following Nick Carr’s inclusion of information access costs, it’s only fair to include my father’s information access costs too.

Commentary - Loryn Jenkins’ expenditure

My list of “information expenditure” includes many more categories than does my father’s, and a few categories that are absent.

The most notable absent category is the encyclopedia—I will simply never purchase an encyclopedia for my family. Not because my family is less well educated; on the contrary, my children have far greater access to information than I ever did as a child.

Also absent is postage. While my mother sent a letter to her mother every week—she couldn’t often afford to place an international call to her mother in New Zealand—she compensated by sending letters. If I want to communicate now, I can quite freely afford to call anyone, anywhere in the world via phone or Skype or email; as I have done in communicating with my brother, who lived in Atlanta, GA from 1998 through 2009.

Categories that did not exist on my father’s list include cell phone services, online computer backup, music, hand-held game consoles, console games, fax, domain name purchases and website operating costs.

Analysis

The 1985 expenditures and the 2009 expenditures have been reported as a percentage of gross family income. You might wonder whether the comparison is distorted by a CTO (of a small software development company) pulling in greater income than a high-school teacher in the mid-1980s.

To answer that question, I quickly Alt-tabbed to Safari, and entered a google search, “cpi index australia 1985”. The search page returned me a link to a website that allowed me to specify my starting and ending years, and then produced the CPI inflation index (quarterly and annually) plotted between 1985 and 2009. (Something my father would never have attempted to do on a rainy Saturday evening in 1985.)

The answer is that in inflation-adjusted terms, my father’s reported 1985 income is 35% greater than my 2009 income. In comparing costs in inflation-adjusted terms, my father’s 1985 expenditures are 421% of my 2009 expenditures. Turning that around, I spend only 24% of what my father did on “information expenditure” at the same stage in life.

So whether you examine it as a percentage of gross annual income, or in inflation-adjusted terms, my father out-spent my purchase of information between 3 and 4 times.

While my father lived in a small country town in the most isolated state in Australia, and needed to drive to the nearest city for his education, I live in a far-flung city on the global stage. I mean this in physical, psychological and communication terms. Psychologically and in communication terms, I’m closer to Mark Bernstein (Boston), Mark Anderson (London), Dave Winer (Berkely, California), Joel Spolsky (New York), Paul Graham (Boston) and Slava Pestov than I do my brother-in-law who lives just two hours drive from my house and works in the mining industry. In terms of my capacity to gain knowledge, I can acquire university-level information from MIT OpenCourseWare, iTunesU, Google Scholar and Google Books. I can reach out and communicate with researchers and programmers and authors and other knowledge creators regardless of where they are located.

Conclusion

Given that my father, at the same stage in life, outspent me between 3 and 4 times in his purchase of information, information access, information-based entertainment and communications, Nick Carr’s charge that we spend more on information than ever before is proven false.

Furthermore, the quality of information, information access, information-based entertainment and communications is far greater in 2009 than in 1985. My father in 1985 had limited capacity to communicate with peers internationally. He had no capacity to publish information to thousands of people in 70 different countries. He had no capacity in 1985 to pull CPI indexes at will on a Saturday evening. He had no accounting software with which to summarise his expenditure. He had no spreadsheet software with which to calculate the numbers I’m marshalling here. He had no capacity to stroll down memory lane by looking through a satellite view of his home-town, like I’ve just done (my bike route from home to school). And he certainly had no capacity to communicate this all directly to you, gentle reader.

So I agree with Carr that the quantity of information available, being consumed, and being produced, is much greater now. But I thoroughly disagree that with the assertion that “Never before in history have people paid as much for information as they do today.” Wrong. Quite wrong.

My father paid 3 to 4 times more, for more limited access to information in 1985 than I do in 2009; and no capacity to unilaterally publish information like I’m doing right now. Information abounds.

Monday
Aug032009

Slicing through the Knowledge Café

Many knowledge management programs seek to gain ideas, insight and feedback from diverse members of the workforce. One type of exercise designed to generated diverse ideas is the Knowledge Café.

In the Knowledge Café, people from diverse areas of the business sit themselves around a table and engage in a conversation about a particular topic. Ideas that are stimulated by the discussion are captured by the moderator, written on the table cloth, or inscribed by participants on post-it notes and stuck to a wall. An exercise of this nature can rapidly generate many hundreds of comments.

Once the event is successfully concluded, and the human resources department have more than a thousand responses, a range of questions naturally emerge:

  • What do we do with the comments?
  • How can we possibly get a handle on them all?
  • How can we give feedback to busy managers?
  • How do we characterise the results of the discussion?
  • What is the general mood of the organisation?

 

What not to do

Many corporates have fallen prey to consultancies who sell them on the idea of having their experts interpret the results of the knowledge café. The reports come back with fancy language and heatmaps and recommendations that generally necessitate further study. And the organisation, whether actively or passively, resists.

Self-interpretation is a better approach

It is far better to allow staff and management to interpret the results of a knowledge café. Not being analysts, staff and management obviously cannot get their heads around the entire corpus. What they need is a way to slice through the corpus to access the comments relevant to the person, the role or the current need.

How to build a knowledge slicing machine with Tinderbox

My approach is to build a mechanism to slice the comments into multiple vectors. With those vectors, I generate HTML pages that enable staff and management to access the cluster of topics that interest them.

To build a knowledge slicing machine:

  1. Using a concordancing tool, generate a list of all words included in the comment. Exclude common words with a stoplist. Cluster multiple word forms (stemmatization). Sort by frequency of usage.
  2. Import these words into Tinderbox and throw them onto a map sorted alphabetically. Cluster the words into groups semantically-related sets.
  3. For each set, construct an agent that returns all comments containing the key terms in the semantic set.
  4. Import into Tinderbox the comments themselves, storing the comments themselves in a carefully marked container. Watch as the agents suddenly cluster their underlying comments.
  5. Sort the agents by number of children. Take the largest result sets and begin to construct agents that cluster sub-topic. Structure a range of sub-topics.
  6. Having sliced and diced the comments a hundred different ways, export it into HTML for general sharing back to the organisational community.

 

Example from a large government trading organisation

The example presented here consists of 1042 comments that have been clustered into 249 semantic sets. I'm not at liberty to actually show you the comments themselves, but whenever you see the disclosure triangles you can be sure the comments are lurking just a click away.

Semantic sets, sorted by volume of comments.

These terms are not simple word searches, as they cluster a range of words that signify a particular meaning. For example, the staff query is written to aggregate comments with the words staff, employee and people.
$Prototype=Comment&(Text(staff)|Text(employee)|Text(people))

In this organisation, "people" is a synonym of employee; never of passenger. Here's the comparison with the passenger query.
$Prototype=Comment&(Text(customer)|Text(passenger)|Text(crowd))


One of the major topics in this discussion surrounded incidents. The incident topic consists of a range of sub-topics, which are ordered in this image by the number of comments within the sub-topic.

Major topics structured into sub-topics.
Again, each of these groupings are powered by queries that build on the initial semantic sets. Here's the query for "incident alerting".
inside(incident)&Text(report)

One of the key needs of the Knowledge Management function within the Human Resources department of this organisation was to get a handle on natural language in context. To assist in this, I structured various key terms into a thesaurus-like outline.

Top level of the Thesaurus outline.
The image that follows shows a subset of the unfurled ‘people’ outline.

The ‘people’ branch of the thesaurus outline.
Not only is it useful to identify a structure of the nouns in the language, but also of the verbs, modal auxiliaries and key objects that signify change, as shown below.

Just one screenful of the ‘change’ thesaurus outline.
The terminology used as signifiers of change was interesting enough to classify semantically; separators group related usages.

The analysis for the thesaurus outline was all performed manually. But including it within the tool enables people to link across to the comments that embody the term.

HTML Export
All images in this article represent views of the Tinderbox work environment. In order to share the ideas freely across the organisation, the data is exported into HTML pages. The HTML captures all the views of the data shown in this article. Each semantic set and topic structure is presented with word clouds auto-generated into each major grouping.

Sample word cloud auto-generated into the HTML output.

Analytical Reuse

In addition to the inherent usefulness for slicing through the mass of data in order to derive meaning, a major benefit of this approach is the analytical reuse. Subsequent knowledge cafés in this organisation already have a pre-built analytical framework. Leveraging this framework for further knowledge café events involves:

  1. Pouring the comments into the tool.
  2. Testing for unique terms not yet covered; extending as needed.
  3. Automatic generation into HTML.

Because of this approach to dynamically building result sets based on a domain-specific semantic analysis, further knowledge cafés have been processed within a few hours. Virtually all of those hours are spent performing step 2.

Tinderbox performs admirably running a document containing ~300 agents. When you consider the minimal time for constructing the initial analysis, the opportunities for reuse, and the flexibility in constructing solutions to new challenges that may arise, you realize that Tinderbox provides an ideal base for building custom, domain-specific knowledge management applications.

Sunday
Jul262009

Coding with Footnotes and Links—The Mechanics

Introduction


The GettysburgCFL design target enables the coding of texts in a range of humanities disciplines, particularly targeting sociological and linguistic textual analysis. While the GettysburgCFL is not completely generalised, it forms a well-conceived prototype that can be adapted to fit a range of textual coding needs. It demonstrates the Tinderbox community's current known best-practice in the coding of texts within Tinderbox.

You can download the GettysburgCFL Tinderbox document.
You can read the user documentation.

This article describes the design of the mechanisms so that you can adapt it to your own textual coding needs. It is part of a larger series exploring the range of practices involved in textual analysis, the extent to which the current Tinderbox affordances support the required practices, and what further affordances may benefit textual analysts involved in analyzing legal and literary texts.

Footnote tool


GettysburgCFL anticipates analysts importing the text into Tinderbox as a single note. That single note is decomposed into constituent parts (paragraphs, sentences, clauses, phrases, words, morphemes) using a combination of Tinderbox Explode tool (for paragraphs), and the Tinderbox Footnote tool.

See the user documentation for details.

Codes


The codes with which you wish to assign to units of text should be created as notes inside the Codes section. Each code consists of:

  1. Name attribute: Set to the human-readable name of the code.
  2. CodeName attribute: Set to the machine-readable name of the code. In my case, I'm outputting HTML-like code fragments, so the machine-readable names conform to the subset of characters that are valid in HTML codes.
  3. Prototype: For the subset of your codes that are mutually exclusive, you may optionally choose to make the note realizing your code a prototype. If you do choose to use a prototype, assign a Color or BorderColor that visually represents the code in your mind.

Codes can form a hierarchy. You can see the way I have formed a hierarchy within the Ideational set of codes.

You may only use prototype inheritance when your codes are mutually exclusive. If a subset of codes are mutually exclusive, you can use prototype inheritance on that subset; don't apply inheritance to the remainder. If your mutually exclusive subset forms the dominant coding priority, then it definitely makes sense to use prototype inheritance.

Prototype inheritance is achieved by using both links and rules, as described below.

Links


GettysburgCFL uses several typed links. The link-types are leveraged by rules to automate assignment of prototypes and code fragments to the notes. Because of this, the name of the typed link and must match naming within the rules.

GettysburgCFL uses the following typed links:

  • •Ideational—the dominant coding priority in GettysburgCFL.
  • •CodeLink—all codes that are not guaranteed to be mutually exclusive with the dominant coding priority are assigned using the type CodeLink.
  • •StartCodes—the beginning of a code assigned to a note where the closing code for the syntagm does not exist within the note. This allows for decomposition of the document to suit the dominant coding priority, while allowing other codes to be assigned across multiple notes.
  • •EndCodes—used to link the note that ends the coded syntagm that was begun using the •StartCodes link type assigned to a different note.
  • •ContainedCodes—used to indicate that the syntagm held by the note participates in a syntagm that spans notes, but this particular note neither begins nor ends the syntagm.


You may wish to generalize the •Ideational name, which is specific to a coding system derived from Systemic Functional Linguistics. If you do, it should probably be called something like: •PrototypedLink. If you do change the name of this link type, you also have to change the rules written in the note named TextPart. (The rules are in the note, not in the note's Rules attribute.)

Rules


All the rules that activate the links are stored in a single note: TextPart. Here's an explanation of each rule.

$Prototype=links.outbound.•Ideational.$Name;

This rule takes the name of the Code, and assigns it as the Prototype of the note being coded. It assumes that the codes to which •Ideational links are assigned are Prototypes.

$Codes=$Codes+links.outbound.•Ideational.$CodeName;
$Codes=$Codes+links.outbound.•CodeLink.$CodeName;

These rules find the machine-readable code fragment held by the Code and assigns it to the set attribute $Codes held in the coded note. The first statement does it for the dominant coding priority; the second statement for all other codes.

$StartCodes=$StartCodes+links.outbound.•StartCodes.$CodeName;
$ContainedCodes=$ContainedCodes+links.outbound.•ContainedCodes.$CodeName;
$EndCodes=$EndCodes+links.outbound.•EndCodes.$CodeName;

These rules take the codes assigned through each of the typed links, and assign it to the set attribute held by the note.

$AllCodes=$StartCodes+$Codes+$ContainedCodes+$EndCodes;

This is a convenience function for the analyst. It combines all the different types of codes into a single set attribute.

Rule Assignment


It is essential that the rules encoded in TextPart are assigned to all the notes containing source text fragments. GettysburgCFL achieves this through the AssignTextPartRule agent. The agent's query is:

descendedFrom(Gettysburg Address)

Unless you're analyzing the Gettysberg Address, you will have to change the name of the note, and therefore the name of the text pattern in this query. If you have multiple documents, you will need to change the scope of the query to ensure that all notes containing text fragments are retrieved by the query.

The agent's action is:

$Rule=$Text(TextPart)

which simply means to take the text from the TextPart note and assign it to the Rule attribute for all the notes retrieved by the query.

Why didn't I just use prototype inheritance?
When I perform textual analysis using Tinderbox, I typically assign the decomposed text notes a Prototype named something like, "SourceText." I use it to hold attributes that I want all my source notes to share.

GettysbergCFL does not conform to that pattern, because I am concerned that the assignment and reassignment of prototypes may cause inconsistent inheritance across all the syntagm fragments. Should that occur, the mechanism is likely to break down.

Notionally, this shouldn't occur if all code-prototypes inherited from the SourceText. (Much like all Smalltalk classes inherit from Object.) But I hadn't conceived of that design in time to apply it to this document; and, one might still run into problems, especially if you get adventurous trying to automate additional facets of the analytical mechanism. Also, I have no particular default Prototype set in this document, which would be essential were you wanting to use prototype inheritance.

Cleanup


When you code a note, then change your mind about the applicability of the coding, you potentially leave the old code recorded within the note's attributes, even though you've removed the links. To clean these up:

  1. Enable the Cleanup_RunOnceThenSwitchOff agent.
  2. Select File > Update now.
  3. Switch off the agent.

The agent completely clears out all code fragment fields in all source text notes. This allows the code fragment fields to be rebuilt from the current links only.

Nakakoji template


This is the Nakakoji template I'm using to export the text.

^value(format($StartCodes, "", "<", ">", ""))^^value(format($Codes, "", "<", ">", ""))^^if(^children^)^^children(/TEMPLATES2/•LGOutput)^^else^ ^title^^endIf^^value(format($Codes, "", "</", ">", ""))^^value(format($EndCodes, "", "</", ">", ""))^

It creates text output along these lines:

<Clause_Independent> <Circumstance_Temporal><Theme> Fourscore and seven years ago</Circumstance_Temporal></Theme><Rheme><Nominal_Actor> our fathers</Nominal_Actor><Process_Relational_Existence> brought forth</Process_Relational_Existence><Circumstance_Locative> on this continent</Circumstance_Locative><Nominal_Goal> a new nation</Nominal_Goal></Rheme> </Clause_Independent>

The core of the Nakakoji template is this decision:

^if(^children^)^^children(/TEMPLATES2/•LGOutput)^^else^ ^title^^endIf^

It asks: "Are you a leaf node, or not? If you have children, I'll go and see what they want me to do. But if you're a leaf node, I'll output your text."

The wrapping code before the core decision is:

^value(format($StartCodes, "", "<", ">", ""))^^value(format($Codes, "", "<", ">", ""))^

It says: "Let me format all your StartCodes and Codes fragments as HTML-like tags." The matching segment at the back does the same thing, excepting that it issues the closing HTML-like tags.

Template Summary: The template says, "I will descend the Tinderbox outline containing the text. All the codes assigned at any level of rank are output into the Nakakoji, but only leaf nodes emit text."

For this reason, a text can be coded at varying levels of depth, but any one branch must be coded at the same level of depth to ensure no text is skipped.

 

Next article: Visualising Textual Analyses

Saturday
Jul252009

Coding with Footnotes and Links

On the Tinderbox forum, Jean Goodwin inspired Paul Walters to demonstrate a technique by which text can be broken down using the footnote tool and codes assigned by creating a link to notes representing individual codes within the coding system. Jean then demonstrated how rules can be used to aggregate the codes and assign prototypes. I've refined their demonstrations, overcoming several limitations with respect to coding and output.

Feel free to download the Tinderbox file illustrating these techniques.

This article describes how to use the Tinderbox file. It covers:

  1. An overview of the analytical workspace.
  2. A walk-through as to how to code using the mechanism.
  3. Adding new codes.
  4. Changing the coding.
  5. Coding from multiple dimensions.
  6. Coding disjoint syntagms.
  7. Assumptions.

The mechanics are described in this followup article.

The Workspace


This is my preferred workspace.

Preferred workspace for textual analysis coding.

The outline contains my Prototypes, Agents and Templates sections, which I have come to adopt as a standard for all my Tinderbox projects. The Gettysburg Address note introduces the text itself, and could very easily contain the entire text. (It doesn't in my example file, but to be fully consistent with the logic I'm describing here, it could be.)

The Gettysburg Address text is presented hierarchically, starting with the overall text itself (Gettysburg Address), then showing paragraphing (Paragraph 1, Paragraph 2, Paragraph 3), then each sentence, followed by each clause, with phrases below that.

The Codes Outline is really a subset of the initial outline. I've opened this additional outline so that the Codes will always be available, which is extremely important in making this technique work productively.

The Map view allows for additional visualisation opportunities. In this case, I've purposely aligned the Process (i.e. verbal phrase) in each clause. The fact that the map provides for additional juxtapositional possibilities represents a significant benefit relative to the map-based coding system illustrated in my previous article.

How to code with footnotes and links


This text is only partially coded. I'm going to navigate to a section of text that is not yet coded, and then begin the coding process. I'll walk you through the process step by step. You'll find the system pretty easy to use.

Partially analysed text, prior to coding.

Paragraph 2 has previously been broken into sentences (represented by the code ClauseComplex). The sentence starting "We have come…" has also been broken down into clauses. The first clause's phrases have been analysed. So, I'll continue by analysing the phrases in the projected clause "to dedicate…".

Select the note "to dedicate…" and click <space>. The note appears. (Ignore the thicket of attributes for now. Each one will be explained shortly.)

The note representing a clause, prior to any additional coding.

Mark out the next phrase.

Verbal phrase highlighted within the clause.

Then execute the Add Footnote As Child command by pressing Command+Shift+F. A second note appears on the screen.

Note representing the verbal phrase "to dedicate," popped up over top of its parent clause.

Now press the link icon and select the target code. The link window appears, and I choose the •Ideational link-type.

The • in •Ideational is a handy way of identifying the special link types in this application. The identifier •Ideational signifies that links of this type represent codes from the Ideational metafunction. Systemic Functional Linguistics posits that there are three metafunctions in language: Experiential, Interpersonal and Textual. Of these, the Experiential metafunction has two sub-components, Ideational and Logical. Hence my terminology.

NOTE: I've coded it as a Mental process (Process:Mental), because that's in my currently-available code-set, even though I suspect it should probably be coded as Process:Verbal. I'll return and clean this up soon.

Selecting an •Ideational link type.

Now close the note representing the new phrase. The original note now has a text link it. If you click on the text link (Command+Option+click) it will open the child note representing the phrase we've just coded.

The clause with the linked verbal phrase.

Notice the change in the map view. The verbal phrase "to dedicate" now appears within the clause. More than that, the Process:Mental prototype has been automatically applied to the phrase. (Magic? No: But, like any sufficiently advanced technology, it is indistinguishable from magic until you're trained in the art: Read on.)

Map showing the results of the coding.

Now I'm going to quickly repeat this process to code the nominal and circumstantial phrases. Look at the outline view to see the effect.

Outline view showing the newly-coded phrases.

The outline view is the easiest means of traversing the rank hierarchy. It provides a random-access entry point to the text being coded, whereas the map view provides a visually stimulating means for considering the outcome of the coding. By careful arrangement of the inside container views on the map, the analyst can see two levels of rank at a time, giving reasonable context for the analyzing the subsequent coded text.

So that's the basic coding process. To see what the final coded output looks like:

  1. Select the Gettysburg Address note.
  2. Create a New Nakakoji View.
  3. Choose the option Selected notes.
  4. Choose the Text export template /TEMPLATES2/•LGOutput


Now you can see the marked up text using an HTML-inspired coding representation.

Nakakoji output of the Gettysburg Address. Text is unevenly analysed, resulting in only a portion of the speech being visible.

Adding new codes


It's easy to expand the codes while the coding is in progress. Previously, I really wanted a Process:Mental code. So, let's add it now.

Simply locate the Process hierarchy in the Codes window. Select Process:Mental and duplicate it (Command+d). Press the space bar, and change:

  1. Name from Process:Mental to Process:Verbal.
  2. CodeName from Process_Mental to Process_Verbal.


There we have it. A new code. Now it's just a matter of changing the original coding.

Changing the coding


Changing the coding is slightly more complicated than you'd imagine. What you have to do is this:

  1. Locate the note and open it.
  2. Delete the existing link. (Within the note, open the links window, highlight the link, press delete.)
  3. Create a new link to the code.


And then, just before you're ready to generate your Nakakoji view, you should switch on the agent Cleanup_RunOnceThenSwitchOff. The agent scavenges of the remnants of old codes and gets rid of them. (Remember to switch it off. Unpredictably nasty things will appear in your Nakakoji if you leave it enabled. You're warned.)

Coding from multiple dimensions


As I've mentioned previously, Systemic Functional Linguistics calls for coding text from multiple perspectives. Many coding systems do. The mechanisms within this approach allow for multiple codes to be attached to any fragment of text.

Although the sample file allows for multiple codes, the Ideational perspective is privileged over Logical, Intepersonal, Textual or Cohesion codes in two ways:

  1. By being the only code hierarchy that are Tinderbox prototypes.
  2. By forming the principle by which the text is decomposed into finer levels of rank.

When you link a syntagm with an ideational code using the •Ideational link, the code is added to the coded note's Prototype attribute.

So, to code from multiple parts of the hierarchy:

  1. Use at least one Ideational code, marked with an •Ideational link-type.
  2. Any other codes must be assigned using the •CodeLink link-type.

(Unpredictable things happen if you have multiple links typed as •Ideational.)

Coding disjoint syntagms


In the sample file, in all the areas I've finished coding, I've finished at the phrase rank. Each phrase attracts opening and closing HTML-style tags in the Nakakoji view. Because the text is decomposed according to the ideational perspective, neither the phrase level nor the clause level represents the starting and ending of some tags. Paragraph 1 illustrates this.

The phrase, "Fourscore and seven years ago," can be linked to the Textual code of Theme. But the textual Rheme consists of the remainder of the phrases. We want output Nakakoji output like this:

<Clause_Independent> <Circumstance_Temporal><Theme> Fourscore and seven years ago</Circumstance_Temporal></Theme><Rheme><Nominal_Actor> our fathers</Nominal_Actor><Process_Relational_Existence> brought forth</Process_Relational_Existence><Circumstance_Locative> on this continent</Circumstance_Locative><Nominal_Goal> a new nation</Nominal_Goal></Rheme> </Clause_Independent>

Not with repeating <Rheme> and </Rheme> tags like this:

<Clause_Independent> <Circumstance_Temporal><Theme> Fourscore and seven years ago</Circumstance_Temporal></Theme><Rheme><Nominal_Actor> our fathers</Rheme></Nominal_Actor><Process_Relational_Existence> <Rheme> brought forth</Rheme></Process_Relational_Existence><Circumstance_Locative> <Rheme> on this continent</Rheme></Circumstance_Locative><Nominal_Goal> <Rheme> a new nation</Rheme></Nominal_Goal></Clause_Independent>


So, to code disjoint syntagms:

  1. Select the opening note, and link it to the desired code using the •StartCodes link-type.
  2. Select the closing note, and link it to the desired code using the •EndCodes link-type.
  3. Select each intervening note, and link it to the desired code using the •ContainedCodes link-type.


That will generate the desired output.

Assumptions


Be aware of these assumptions:

  1. While you can code at multiple levels of detail through a document, at any one branch you need to code at a uniform level. So, if you code an individual word within a phrase, then all the words in that phrase need to be represented at the word level. (Sibling phrases need not be analysed at the word level.)
  2. Because prototypes are assigned through the primary code hierarchy, the primary hierarchy of codes must be mutually exclusive.
  3. StartCodes, ContainedCodes, EndCodes do not communicate prototype inheritance. Only the primary coding system communicates prototype inheritance.

Oops

There is one mistake I keep making: frequently forgetting to create the footnote prior to linking it. This results in me marking out the text in the clause, then immediately linking that text to a code. It's visually similar to the result I want, but the mechanics relies on coding each phrase separately. When I do make that mistake, I have to delete the link, and then remember to run the Cleanup_RunOnceThenSwitchOff agent prior to generating the Nakakoji.


Next Article: Coding with Footnotes and Links—The Mechanics