Thunderdell and BusySponge

Joseph Reagle

Would you like a bibliographic system that was a simple and powerful complement to the way you take notes? The Thunderdell scripts are intended to make sure the important task of engaging a text is not hindered by bibliographic constraints. Using the power of the Freeplane (1.5.x) mindmap application you can quickly tag and outline a source and trivially indicate annotations, paraphrases, and excerpts with simple keyboard shortcuts; you can outline, link to Web resources, and include images and tables—anything you can do with a mindmap and HTML. The underlying data is accessible XML and Thunderdell transforms this into pandoc’s citeproc yaml, biblatex, or Wikipedia’s citation template.

Thunderdell is written in Python and requires some familiarity if only to specify the location of your root mindmap. I’ve used this on Linux and Mac, but I believe it could be made to work on any platform as all dependencies (including lxml, dateutil, and requests) are cross-platform. The scripts are available for download. The command-line BusySponge micro-blogger and Web scraper is also included and can be used to populate your mindmap with bibliographic data about Web resources.

(Thunderdell is the name of the “simple and powerful” giant from Jack and the Beanstalk who would declare “Fee-fi-fo-fum.” What I used to call “Freeplane Extract” is is just a collection of tersely named scripts, such as “fe.py”. BusySponge is just that, a way to quickly capture, log, and annotate things on the Web.)

Thunderdell Features

Thunderdell's underlying and export data are both in open formats.

It takes advantage of powerful mindmap functionality:

Bibliographic maps are searchable from the command-line or via the Web. Results of queries include the appropriate citation with year and page number.

Using fe.py

╰─➤  fe -h
usage: fe [-h] [-a] [-b] [--bibtex] [-c] [-D] [-i FILENAME] [-k] [-F] [-l]
          [-o] [-p] [-q QUERY [QUERY ...]] [-s BST] [-T] [-u] [-V] [-L] [-w]
          [-y]

usage: %prog [FILE.mm] [options] Outputs YAML/CSL bibliography. Note: Keys are
created by appending the first letter of first 3 significant words (i.e., no
WP:namespace, articles, conjunctions or short prepositions). If only one word,
use first, penultimate, and last character.

optional arguments:
  -h, --help            show this help message and exit
  -a, --author-create   create author for anon entries using container
  -b, --biblatex        emit biblatex fields
  --bibtex              emit bibtex fields rather than biblatex
  -c, --chase           chase links between MMs
  -D, --defaults        chase, output YAML/CSL, use default map and output
                        file
  -i FILENAME, --input_file FILENAME
                        mindmap to process
  -k, --keys            show bibtex keys in displayed HTML
  -F, --fields          show biblatex shortcuts, fields, and types used by fe
  -l, --long-url        use long URLs
  -o, --output-file     output goes to FILENAME.bib (boolean)
  -p, --pretty          pretty print
  -q QUERY [QUERY ...], --query QUERY [QUERY ...]
                        query the mindmaps
  -s BST, --style BST   use bibtex stylesheet (default: apalike)
  -T, --tests           run tests
  -u, --urls_online_only
                        emit URLs for online resources only
  -V, --verbose         Increase verbosity (specify multiple times for more)
  -L, --log-to-file     log to file fe.log
  -w, --WP-citation     emit Wikipedia {{citation}} format which can be cited
                        via {{sfn|Author2004|loc=p. 45}}. See:
                        http://en.wikipedia.org/wiki/Template:Cite
  -y, --YAML-CSL        emit YAML/CSL for use with pandoc [default]

Thunderdell relies upon a particular patterns.xml and certain conventions in the mind-map to create biblatex.

A citation node looks like “d=2000 p=Basic Books a=New York, NY”.

biblatex output

  @book{Lessig2000col, 
     annotation = {A seminal work that identifies the authority of software code}, 
     author = {Lessig, Lawrence}, 
     shorttitle = {Code}, 
     title = {{Code:} {And} Other Laws of Cyberspace}, , 
     year = {2000}, 
     address = {New York, NY}, 
     publisher = {Basic Books}, 
  }

YAML output:

- id: Lessig2000col
  type: book
  publisher-place: "New York, NY"
  abstract: "A seminal work that identified the authority of software code in social structure"
  author:
  - family: "Lessig"
    given: "Lawrence"
  custom2: "neutrality.mm"
  issued:
    year: 2000
  publisher: "Basic Books"
  title-short: "Code"
  title: "Code: and other laws of cyberspace"

Wikipedia output:

{{ citation
| ref = {{sfnref|Lessig 2000col}}
| publication-place = New York, NY
| first1 = Lawrence
| last1 =  Lessig
| date = 2000
| publisher = Basic Books
| title = Code: and other laws of cyberspace
}}

Busysponge Features

BusySponge permits me to easily log and annotate a URL, DOI, or ISBN to various loggers (e.g., mindmap, blogs) with meta/bibliographic data.

Using b.py

╰─➤  b -h
usage: b [options] [URL] logger [keyword] [text]

    nifty:         b n TAGS URL|DOI COMMENT
    work plan:     b j TAGS URL|DOI COMMENT
    mindmap:       b m TAGS URL|DOI ABSTRACT
    console:       b c TAGS URL|DOI COMMENT
    blog codex:    b o [pra|soc|tec] TAGS URL|DOI TITLE. BODY
    blog goatee:   b g URL|DOI TITLE. BODY

positional arguments:
  text

optional arguments:
  -h, --help            show this help message and exit
  -T, --tests           run doc tests
  -K, --keyword-shortcuts
                        show keyword shortcuts
  -p, --publish         publish to social networks
  -L, --log-to-file     log to file b.log
  -V, --verbose         Increase verbosity (specify multiple times for more)
  --version             show program's version number and exit