First Draft Podcast: Liberation Technology →

This week: We talk about the accessibility of computational tools, systems, networks, data-driven decision making, neotopology, and pushback from specialists.

First Draft Podcast: Humanities Savior Narrative →

Friend of the show Glen Worthy joins us to talk about DH14, the popularity of digital humanities projects, the humanities savior narrative, and ‪#‎dhsheep‬.

Environmental History at the 2014 Western History Association Conference

I’m stealing an idea from my friend and fellow Husker Brenden Rensink. Brenden just wrote a post summarizing borderlands and transnational history panels – his area of study – at the Western History Association Conference this year. I thought I’d do similar with environmental history.

To reiterate from Brenden’s post, the Western History Association is meeting in Newport Beach, California, between October 15 to October 18 with the theme “The West & the World.” Like Brenden, I’m listing any panel that includes some theme on environmental history even if that only includes a single paper. If I’ve missed a panel or paper, let me know on Twitter.

Thursday, October 16 8:30am-10:00am

Conquering the Meat Frontier: North American Ranching in the Nineteenth Century

  • Chair: Jeff Roche, College of Wooster
  • Nicholas Foreman, University of Florida - The Irish Face of American Expansion: Philip Nolan and the Stealing of New Spain
  • Michael M. Miller, University of North Texas - The XIT Ranch of Montana: Experiments in Imperial Ranching, 1889-1909
  • Matt Todd, University of Saskatchewan - World Diseases and New World Curses: The (Misleading) Creation of a Ranching Eden in the Canadian West
  • Comment: Jon Coleman, University of Notre Dame

The Legal and Physical Infrastructure of Southern California Water

  • Chair & Comment: Donald J. Pisani, University of Oklahoma
  • Tanis C. Thorne, University of California-Irvine - Settling with Indians: Phil Swing and the Scattering Policy at El Capitan
  • Jason A. Robison, University of Wyoming College of Law - Another Frontier of the Evolving Law of the River: The Quantification Settlement Agreement and its Discontents
  • Peter L. Reich, Whittier Law School - The All-American Canal and Civil-Common Law Divide

Thursday, October 16 10:15am-11:45am

The West and the World: Pacific Connections, Pacific Possibilities

  • Chair: Jennifer Thigpen, Washington State University
  • Adria Imada, University of California, San Diego - Visual Cultures of Leprosy: Pacific Tropicality, Disease, and Embodiment
  • Josh Reid, University of Massachusetts, Boston - Comekala, Indigenous Explorer of the North Pacific
  • Matt Basso, University of Utah - Land or Labor: The Fracture of Pacific Settler Masculinity in the United States and New Zealand
  • Comment: David Igler, University of California, Irvine

Western History in the Imagination and on the Landscape

  • Chair: Sherry Smith, Southern Methodist University
  • Cody H. Smith, Oklahoma State University - Reiten mit dem Teufel (Riding with the Devil): German Heavy Metal Music and Representations of the Dalton Gang
  • Cathleen D. Cahill, University of New Mexico – “The West of the Indian…and white, of jazz and airplanes”: The Albuquerque First American Pageant, 1929-1931
  • Alexandra Ritter, University of Arizona - Making Waves: Southern California Surfers’ Developing Relationship with Nature from the 1950s to the 1980s
  • Comment: Susan Sessions Rugh, Brigham Young University

Friday, October 17 8:30am-10:00am

Teaching “America’s Best Idea”: Lessons from a Century (and More) of National Parks: A Roundtable Discussion with Images and Documents

  • Chair: Char Miller, Pomona College
  • Participants:
    • Jonathan Foster, Great Basin College
    • Jeffrey Shepherd, University of Texas at El Paso
    • Eric Nystrom, Rochester Institute of Technology
    • Michael Childers, University of Northern Iowa
    • Michael Welsh, University of Northern Colorado
    • Comment: Kenneth Orona, Longmont, Colorado

Borderlandscapes of the Rio Grande

  • Chair: Sterling Evans, University of Oklahoma
  • Timothy Paul Bowman, West Texas A&M University - “Goodbye, Great River”: A Transnational History of the Rio Grande’s Destruction
  • Peter A. Kopp, New Mexico State University - Fabian Garcia: Borderland Horticulturalist
  • Jerry D. Wallace, University of New Mexico - “All Over New Mexico”: Dale Bellamah and the Reshaping of the Southwest’s Built Environment in the Early Cold War Era
  • Comment: Benjamin Johnson, Loyola University Chicago

How Labor Shapes the West

  • Chair: Leisl Carr Childers, University of Northern Iowa
  • Joel Zapata, Southern Methodist University - Women’s Transnational Response to the North American Free Trade Agreement
  • Tom Fujii, California State University, Fullerton - Planting Our Roots: Nikkei Labor and Business in Orange County, California
  • Bernadette Jeanne Pérez, University of Minnesota, Twin Cities - Sugar Beet Fields, Agribusiness, and the Negotiation of Political Difference in the Upper Arkansas River Valley, 1900-1924
  • Comment: Erik Loomis, University of Rhode Island

Friday, October 17 10:30-Noon

Nature, Science, the West, and the World

  • Chair: Sterling Evans, University of Oklahoma
  • Adrian Howkins, Colorado State University - A Northward Course of Empire? Alaska, the Arctic, and the Globalization of Western History
  • Jeremy Vetter, University of Arizona - The American West as a Region in World Science: Colony, Frontier, or Emerging Center?
  • Karen Lloyd D’Onofrio, University of Colorado Boulder - Bringing the World to Denver: An Investigation of the Pacific Rim Natural History Explorations and Displays at the Denver Museum of Nature and Science
  • Comment: Kathleen Brosnan, University of Oklahoma

Friday, October 17 2:30pm-4:00pm

Rethinking the “Colossus of Roads”: Transportation Infrastructure and the Development of British Columbia

  • Chair: Frank Leonard, University of Victoria
  • Frank Leonard, University of Victoria - Unromancing the Road: The Cariboo Wagon Road as British Columbia’s First Mega-Project
  • Ben Bradley, University of Toronto - British Columbia’s Premier Drive Through the Past: Cultivating a Canadian Frontier Heritage Along the Cariboo Highway, 1925-1960
  • Philip Van Huizen, University of Alberta - Resource Roads, Wilderness Recreation, and the Paradox of Multiple Use Planning in British Columbia and Washington
  • Comment: Ted Binnema, University of Northern British Columbia

Saturday, October 18 10:30am-12:00pm

The Mining West and the World

  • Chair: Liping Zhu, Eastern Washington University
  • Emmanuelle Perez Tisserant, Ecole des Hautes Etudes en Sciences Sociales, Paris - Too Lazy to Find El Dorado? A Spatial and Political History of Finding Gold in California
  • Jeremy Mouat, University of Alberta - The St. Eugene Arbitration of 1907, Western Mines, and the World of Ideas
  • Brian Leech, Augustana College - Gentle Destruction: Mining Subsidence, Sinking Houses, and Property Protests in Butte, Montana, and around the World
  • Steven Danver, Walden University - Uranium Mining and Native Communities in Southwestern United States, Canada, and Niger
  • Comment: Eric Nystrom, Rochester Institute of Technology

Saturday, October 18 2:30pm-4:00pm

Rethinking Nature with Boom: A Journal of California

  • Chair: Jon Christensen, UCLA, Editor, Boom: A Journal of California
  • Participants:
    • Peter Alagona, University of California, Santa Barbara
    • Glen MacDonald, University of California, Los Angeles
    • Rue Mapp, Outdoor Afro
    • Amy B. Scott, Chief Curator and Marilyn B. and Calvin B. Gross Curator of Visual Arts, Autry National Center of the American West, Los Angeles.

Remembering Norris Hundley – Pioneer Scholar, Mentor, Teacher, and Editor of the Pacific Historical Review

  • Participants:
    • Albert Camarillo, Stanford University
    • Carl Abbott, Portland State University
    • Ernesto Chávez, University of Texas, El Paso
    • Miroslava Chávez-Garciá, University of California, Santa Barbara
    • David Johnson, Portland State University

And of course, I would be remiss if I didn’t point out digital history sessions. The Technology Committee, of which I am a part, is sponsoring another Six Shooters lightning session this year on Thursday 2:30pm-5pm. There’s rumors of a cupcake reception afterwards. Presenters are limited to six minutes and six slides. We have some great speakers lined up already and we will be announcing them soon.

Finally, I am also chairing the panel “Western Encounters, Alliances, and Experiences: Mormons, Indians, and U.S. Federal Law” on Saturday, 8:30am-10:00am. The full program is here.

If you’re going to be at the Western, get in touch and let’s go grab coffee. Or the beach.

First Draft Podcast: The Pragmatic Tyranny of Building Digital Artifacts →

This week: we discuss my experiences working on the Geography of the Post, D3.js, and the challenges of designing, and critically engaging with, interactive scholarly works.

Simple Parsing CSV to JSON

I took a moment yesterday morning to start work on a Ruby script to convert CSV files to JSON. My main motivation for writing the script was to get data into a format that more easily works with D3.js.

D3 has two main ways to load data: JSON or CSV. Although CSV has its benefits, the data is untyped. Because of that, D3 loads all the data as strings rather than differentiating between strings and integers. I could do the conversion on the fly with D3 pretty easily using built-in functions or coerce the data with JavaScript. But sometimes I like prepping data before I begin working with it.

The script builds JSON using the first line of the CSV file to determine the appropriate elements and the corresponding data, as well as checking that integers and strings are converted to their appropriate (typed) formats. And the script seems fairly robust; I noticed hardly a pause when throwing a 14,000-line CSV file at it. There are no built-in specifics to the data mapping; you’ll need to handle that either by modifying the script or handling it in D3.

The script:

#!/usr/bin/env ruby

# Parse CSV files and convert them to JSON.
# Mostly used for preparing data for D3.js. I don't like using untyped
# CSV files, so this script begins to clean things up for me.

# Usage: ./parse.rb /path/to/input.csv /path/to/output.json

# Jason A. Heppler | |
# MIT License <>
# Created: 2014-07-10

require 'rubygems'
require 'json'
require 'csv'

def is_int(str)
  # Check if a string should be an integer
  return !!(str =~ /^[-+]?[1-9]([0-9]*)?$/)

lines =[0]).readlines
keys = lines.delete lines.first[1], "w") do |f|
  data = do |values|
    is_int(values) ? values.to_i : values.to_s
  f.puts JSON.pretty_generate(data)

Say I give it an input like this (postwar population of Bay Area cities):

date,San Jose,Palo Alto,Sunnyvale,Mountain View,Santa Clara

And in return I get this:

    "date": "1940",
    "San Jose": "68457",
    "Palo Alto": "16774",
    "Sunnyvale": "4373",
    "Mountain View": "3946",
    "Santa Clara": "6650"
    "date": "1950",
    "San Jose": "95280",
    "Palo Alto": "25475",
    "Sunnyvale": "9829",
    "Mountain View": "6563",
    "Santa Clara": "11702"
    "date": "1960",
    "San Jose": "204196",
    "Palo Alto": "52287",
    "Sunnyvale": "52898",
    "Mountain View": "30889",
    "Santa Clara": "58880"
    "date": "1970",
    "San Jose": "445779",
    "Palo Alto": "55966",
    "Sunnyvale": "95408",
    "Mountain View": "51092",
    "Santa Clara": "87717"
    "date": "1980",
    "San Jose": "629442",
    "Palo Alto": "55225",
    "Sunnyvale": "106618",
    "Mountain View": "58655",
    "Santa Clara": "87746"
    "date": "1990",
    "San Jose": "782225",
    "Palo Alto": "55900",
    "Sunnyvale": "117229",
    "Mountain View": "67460",
    "Santa Clara": "93613"
    "date": "2000",
    "San Jose": "894943",
    "Palo Alto": "58598",
    "Sunnyvale": "131760",
    "Mountain View": "70708",
    "Santa Clara": "102361"
    "date": "2010",
    "San Jose": "945942",
    "Palo Alto": "64403",
    "Sunnyvale": "140081",
    "Mountain View": "72510",
    "Santa Clara": "112466"

Note that the data transformation for this particular example probably isn’t the best. A more useful JSON construction would group the data together with child nodes, for example:

    "name": "San Jose",
    "values": [
        "date": 1940,
        "population": 945942
        "date": 1950,
        "population": 95280

But if you need a simple CSV to JSON transformation, the script starts getting you there.

Editorial is a Powerful, Flexible iOS App for Text Editing

[This post originally appeared at ProfHacker on 2014-06-30.]

The overall view of Editorial for iPad

There are a plethora of text editors on iOS. Just once glance at Brett Terpstra’s list of markdown editors can attest to the range of offerings available on the platform.

Editorial stands above the rest. Combined with a well designed interface and incredibly powerful workflows built on Python and snippets, Editorial redefined the way I edit text on the iPad. More and more I find myself reaching for Editorial for text editing over anything else, including any apps on my Mac. And pairing it with a Bluetooth keyboard has, with the exception of Scrivener, made Editorial the most productive writing environment I’ve used. Editorial changed how I thought about my iPad. It had largely been about consumption – gaming, reading books and PDFs, catching up on RSS – but Editorial made the iPad a production device for me as well.

Previewing the Markdown of this document

Editorial is the brainchild of Ole Zorn, who was also behind the stellar Pythonista iOS app. Pythonista is a Python interpreter for iOS that takes advantage of iOS’s built-in functionality all while working with Python. Zorn has an eye for design and really seems to test the boundaries of what can be done on iOS. This shines through with Editorial. He leverages the same Pythonista environment combined with an Automator-like GUI that allow for building incredibly powerful workflows for writers.

The left-side navigation of Editorial

Editorial is a Markdown text editor that supports Dropbox syncing, a built-in browser, a Markdown previewer, a Python console, and TextExpander-like snippets that allows you to automate tasks within the app. The interface is excellent. To the left is a sidebar for viewing local files and Dropbox synced files. Along the top is a bookmark bar for quick access to Workflows, and the wrench icon gives you access to the Workflow menu. Tapping the left arrow in the upper right gives you access to the browser, Markdown previewer, and Python console. The keyboard also comes with an extra bar along the top for accessing snippets, an undo button, and common Markdown characters.

They keyboard interface includes access to undo, snippets, and common Markdown characters

The editing interface can be tweaked to your liking. Editorial comes with a light and dark theme, and you have control over font family, font size, line spacing, and text width. You can also display a live word count in the upper right.

Comparison between the light and dark theme


The list of snippets installed in my Editorial

Editorial comes with support for custom snippets that act much like TextExpander. Following my preference of appending snippets with special characters (on Mac I use a semicolon, on iOS I use a comma because it’s easier to access), the snippet will pop in the text I want to call up. Editorial also has a useful completion bubble that appears when you begin to type a snippet, allowing you to touch and complete a snippet.

The auto-complete bubbles for snippets


Editorial can store files in two locations. First, they can be stored locally. I often use local storage for scrap notes and temporary files. Second, files can be synced through Dropbox. I’ve never had any problem with sync, and it has always seemed quite fast. Sync happens automatically, and within the Dropbox menu you can select multiple files or sort files by date or name.

Viewing the list of versions in Editorial

Because it uses Dropbox sync, Editorial also provides document versioning. You can select a Dropbox version from a drop down menu to compare a past version with the current version, restore a document to a previous version, or restore only segments of text.

TaskPaper Mode

I’m a devoted OmniFocus user, but those who use Jesse Grosjean’s TaskPaper will be delighted to see Editorial’s new TaskPaper mode. I’m not a TaskPaper user and can’t point to any workflows that integrate with this, but the mode reads a .taskpaper extension and enters a custom mode that provides checkboxes for tasks, highlights projects and tags, supports drag and drop of tasks, due dates, and done tags. You can adjust the coloring of tags within Editorial’s settings. If you’re looking for a lightweight plain text to-do system, I would check it out.

TaskPaper mode in Editorial allows for plain text task management

iPhone App

Another big update that came with Editorial 1.1 released at the end of May was an iPhone version of the app. Far from just a simple port of the iPad version to the iPhone, the implementation feels well-designed for the smaller screen. The layout is familiar to those using Editorial on the iPad, whether editing text or working with Workflows, and uses the three pane navigation of the iPad version. There are some limitations due to the smaller screen, such as the lack of a bookmarks bar, but accessing Workflows and snippets are still relatively smooth. For me, the iPhone app was among the most exciting new features – I can edit text within my favorite editor from anywhere. That, to me, is the benefit of a writing workflow that revolves around iOS. Anytime the Muse strikes, I can write.

Previewing the iPhone home screen icon, text editing pane, and navigation pane


I hope I’ve made the case that, up to this point, Editorial is already incredibly useful and powerful. But it gets better.

The user interface for building Workflows

At the heart of Editorial is Workflows. Workflows are sequences of actions run from top to bottom – similar to OS X’s Automator – and completely customizable for the user. Most of the actions built into Editorial are meant to work with text, but you don’t need to. You could build Workflows to upload images, access Evernote tags and notebooks, open URLs, or augment any of this with custom Python scripting. There’s no need to know Python to get started with Workflows – the number of actions available means you can begin crafting workflows easily. Editorial makes automation on iOS a breeze.

Accessing all installed Workflows from the wrench icon

With the release of Editorial 1.1 at the end of May, Workflows got even more powerful. The app now includes sub-workflows and x-callback-url actions. What this means is if you execute a workflow that contains a sub-workflow, the workflow will pause at the sub-workflow and call up another workflow, run it, and carry the results back to the main workflow. Frederico Vittici explains sub-workflows in more detail and uses a demonstration with Evernote to help make things clearer.

Workflows you create can be easily shared to Editorial’s workflow directory. Several workflows exist that help me in automating scholarly tasks in Editorial. A while ago I created a workflow for accessing a list of BibTeX citekeys for generating Pandoc citations. Matt Burton has created two workflows for inserting BibTeX citations and another for searching your Zotero library. Caleb McDaniel has created a workflow for sending documents to Docverter to convert documents to Markdown, LaTeX, PDF, EPUB, or DOCX. There are many workflows out there already. Spend some time with the Editorial workflows site to see what’s available.


There are many more features within Editorial, including new features with Editorial 1.1 such as the new user interface Python module for creating custom UI within workflows (see, for example, Frederico Viticci’s reminders workflow). For a deeper look at Editorial’s capabilities, I would recommend reading Gabe Weatherhead’s and Frederico Vittici’s reviews of Editorial.

Editorial has become my go-to app for working with text on iOS and has changed the way I think about automation, production, and consumption on my devices. If you’re considering a mobile-centric writing workflow, give Editorial a shot!

Use Copy for Cloud Storage Backup and File Sharing

[This post originally appeared at ProfHacker on 2014-06-23.]

Recent announcements are showing a trend in cheaper storage solutions and cloud backups. Google recently updated its pricing for Drive storage and now offers 15 gigabytes for free and incredibly cheap prices for 100 GB, 1 TB, and 10TB+. At WWDC, Apple announced changes to its iCloud service towards a more Dropbox-like experience and revealed a new pricing model that includes a baseline 20 GB for $0.99 per month. And just this week, Amazon revealed its plans for unlimited storage for photographs for those purchasing the new Fire Phone. Cloud storage, it seems, is everywhere and dirt cheap.

Allow me to throw another one on your desk to review. Among the newer cloud-based storage offerings is a service called Copy. I’ve been trying it out for the last few weeks, and so far I’ve found a lot to like. Similar to Dropbox, Copy syncs files from a local folder on your desktop to its cloud servers. So far, I haven’t noticed Copy being significantly slower than Dropbox. But the great advantage of Copy over Dropbox? You get 15 GB of space for free versus Dropbox’s 2 GB. And referrals grant you a whopping 5 GB per referral (versus Dropbox’s 500 MB) and, at least as of this writing, has no max bonus for referrals. If you need more storage, Copy’s paid plans start at $99 per year for 250 GB.

Copy local

Copy has many similar features to Dropbox, including easy folder and file sharing with collaborators. However, unlike Dropbox where shared folders within your Dropbox account also count against your storage quota, Copy has implemented what they call “fair share.” Fair share splits the size of a shared folder evenly across the number of people you’ve shared with. For example, a 5 GB folder synced between you and a collaborator counts at 2.5 GB per person.

Copy actions

And like Dropbox, Copy syncs across various devices. Copy can be installed on iOS, Android, Mac, Windows, and Linux. Dropbox currently has the market cornered on integration with mobile applications, but hopefully Copy will soon come to other applications. On top of that, Copy also has a web interface that is well designed and easy to use.

Copy web

If you’re in the market for a new cloud storage service, I would give Copy a chance!

What does Missile Command have to do with Digital History?

I am spending the week at the University of Victoria for this year’s Digital Humanities Summer Institute (DHSI). I was here last year and had the chance to make a lot of new friends – indeed, I think one of the most powerful experiences of attending DHSI is the engagement with the people and the community. The people here are awesome.

I’m in the physical computing course with Jentery Sayers, Bill Turkel, and Devon Elliott. We’re getting introduced to a variety of technologies – 3D printing, Arduino boards, Raspberry Pi, Max, and Makey Makey. One of the projects a group of us are working on is reviving a 1983 gaming desk that originally played Missile Command. Missile Command was a 1980 game published by Atari where the game player had to aim three anti-missile batteries at incoming missiles and bombs. (Want to play? It’s online.)

The one question that I keep returning to: why build this? Well, if you are an historian of technology, or game culture, or want to understand something about the design decision that went into the production of Missile Command, or you’re thinking about the historical preservation of video games and the devices they were originally played on, then engaging with physical computing makes good sense. After all, the process of of recreating the system may lead to understanding the decisions that went into the circuit design, wiring, and programming of the game itself in ways that reading primary sources may not. It strikes me how often we’ve had to think about certain design decisions for our own technological limitations. For example, the Raspberry Pi only had fifteen pins open that we could interact with, but the controls and other features we were adding on required more than what was available. Our solution was to pair Makey Makey to handle the controls, and feed that into the Raspberry Pi. That left enough pins to control coin detection, audio, a way to escape the emulator, and a way to select the number of players. If we’re running into design and technology considerations with modern computing devices, what sort of things did the original game designers run in to? And how do their decisions reflect something about the technological history of the 1980s?

But I don’t study those questions. Maybe they’re obvious questions to those who do. So why am I interested in creating a game emulator within a 1983 gaming desk? As a teaching tool, I find physical computing immensely compelling. I could envision a course on the history of computing or the history of electronics that asks undergraduates to re-create historical objects using modern-day technology. But our technology today – like any technology – carries limitations of function, energy, availability, affordability, and so on. Design decisions are made throughout the process. As they ask questions about their current technology, that opens up an opportunity to ask questions about historical technology. With those questions in mind, plus their physical
interaction with the device, we could turn students towards primary sources to understand the historical limitations of technology. We come to understand the past through a material engagement with the present.

And as a public history tool, physical computing likewise holds promise. I could envision an opportunity to use such devices to prompt users to think about the historical preservation of electronics, electronic media, and games. Or, to completely repurpose something like a gaming cabinet as an alternative interaction device. You could, for example, set up the cabinet to run Google Earth and allow the game controls to be a method of guiding yourself through historically-recreated virtual worlds. Or replace the cabinet with a physical globe that controls Google Earth. What other perspectives could physical computing lend to the ways that we appreciate electronics or interact with explanatory devices?

Anyway, some initial thoughts about the intersection of physical computing with digital history. We’re doing a lot more in the courses and I have many more ideas swirling about – 3D printing, historical reconstruction of electronics and devices, and so on – but those will come later.