• Spatial History
    • new tools form GIS
    • new questions from cultural geography
    • maps & visualizations are rhetorical and need interpretation


  • Excursus on “Objectivity”
  • What’s Special about Oral History?

Objectivity in History

All history ultimately depends on its social purpose. (Thompson)

Oral sources are not objective. This of course applies to every source, though the holiness of writing often leads us to forget it. (Portelli)

  • What does it mean to be objective and/or neutral?
  • What happens to history that abandons or modifies this standard?


  • not untruth, but beyond truth.
  • Myths structure understanding of world, self, and events, give meaning to action, and purpose to the world.
    • Myth of Prometheus & Fire gives an account of reason & techne in Greece
    • Creation Myth of Genesis give guide to relationships among (e.g.) Man, Woman, God, Nature
    • ’Myth of Progress’ makes sense of modernity
    • George Washington & the apple tree ties virtue to the State
    • “multiculturalism” as a mythical strucutrefor Canadians

Objectivity as Founding Myth

  • fundamental to our pursuit
  • but deeply problematic
  • commitment to: fixity of the past; sharp separation between subject & object; prior nature of fact to interpretation
  • “wie es eigentlich gewesen” as bedrock
  • and then the Twentieth Century

Epistemological Challenges

  • the fact/value distinction
  • structures of knowledge
  • contexts of interpretation
  • standpoints & the view from nowhere
  • “relativism” as nemesis and saviour

Truth and Meaning in Oral History

The first thing that makes oral history different, therefore, is that it tells us less about events than about their meaning… Oral sources are credible but with a different credibility. The importance of oral testimony may lie not in its adherence to fact, but rather in its departure from it, as imagination, symbolism, and desire emerge. (Portelli)

Politics of engagement

Oral sources are a necessary (not a sufficient) condition for a history of the nonhegemonic classes; they are less necessary (though by no means useless) for the history of the ruling classes, who have had control over writing and leave behind a much more abundant written record. (Portelli)

  • New Social Movements and subversive history
  • History from Below: History Workshop; Radical History; Race Traitor
  • slow elaboration of self-aware ’engagement’ by scholars
  • oral history central to this champs de bataille
    • challenges to objectivity/fact as goal
    • growing role for empathy as technique

Oral History as Redemption

In the most general sense, once the life experience of people of all kinds can be used as its raw material, a new dimension is given to history. (Thompson, 24)

  • 1980’s: ’testimony’ in Central American solidarity movement;
  • 1990’s & later: Truth and Reconciliation Commissions (South Africa; Australia; Chile; Argentina; Guatemala; Canada)
  • tensions between truth and experience

Ethical Demands of Engagement

  • “Engagement” a terribly difficult stance to maintain
  • Not a rejection of ’objectivity’, but a refinement
  • balancing btwn epistemic virtues
  • constant vigilance!

Questions of Form

  • transcripts not the same as tape
  • tape not the same as digital media
  • there are lots of kinds of ’oral history’

Ethics of Oral History

  • historians’ responsibilities
    • respect
    • handle materials carefully
    • seek consent at all stages
  • Forms
    • ensure they understand it
    • make sure they KNOW you intend to publish on the web
      • give them MULTIPLE chances to withdraw

Active Listening

Interviewee: I practically had a nervous breakdown when I discovered my sister had cancer, you know; it was kind of like knocking the pins [out from under me] – and I had, after the second boy was born, I just had ill health for quite a few years. I evidently had a low-grade blood infection or something. Because I was very thin, and, of course, I kept working hard. And every fall, why, I’d generally spend a month or so being sick – from overdoing, probably.

Interviewer: What kind of farming did you do right after you were married?

Active Listening

  • Don’t be afraid to deviate from script
  • pay attention to what you hear

Tech Part 1: Mapping Assignment Leftovers

first: any questions?

Icon Madness 1: symbol definition

// notice how palegreenarrow is not a string value, but an object.
// we're using the symbol api:
var blueURL = "",
    redURL = "",
    paleGreenArrow  =  {
      path: google.maps.SymbolPath.BACKWARD_CLOSED_ARROW,
      strokeColor: "palegreen",
      strokeWeight: 1,
      fillColor: "palegreen",
      fillOpacity: 0.5,
      scale: 4};

Icon Madness 2: Icon Assignment

// this is an *array* that holds all the marker info
var all_my_markers =
        [{position: new google.maps.LatLng(41.9000,12.5000),
          map: my_map,
          icon: blueURL, // this sets the image that represents the marker in the map to the one
                         // located at the URL which is given by the variable blueURL, see above
          title: "first Marker",
          window_content: "


and this would be the extended description

" }, {position: new google.maps.LatLng(41.8902,12.4923), map: my_map, icon: paleGreenArrow, // this sets the image that represents the marker in the map title: "second Marker", window_content: "


and this would be the extended description

" }, {position: new google.maps.LatLng(41.8986,12.4768), map: my_map, icon: redURL, // this sets the image that represents the marker in the map title: "third Marker", window_content: '


' + '
quote quote quote quote
' } ];


var romeCircle = new google.maps.Circle({
  strokeColor: '#FF0000',
  strokeOpacity: 0.8,
  strokeWeight: 2,
  fillColor: '#FF0000',
  fillOpacity: 0.35,
  // in general, we always have to *set the map* when we
  // add features. 
  map: my_map,
  center: {"lat": 41.9000, "lng":12.5000},
  radius: 1000,
  window_content: "


This is a circle!

" }); google.maps.event.addListener(romeCircle, 'click', function (evt) { infowindow.setContent(this.window_content); infowindow.setPosition(this.getCenter());; });


var romeRectangle = new google.maps.Rectangle({
  strokeColor: 'purple',
  strokeOpacity: 0.8,
  strokeWeight: 2,
  fillColor: 'purple',
  fillOpacity: 0.35,
  // in general, we always have to *set the map* when we
  // add features. 
  map: my_map,
  bounds: {
    north: 42.685,
    south: 40.671,
    east: 12.501,
    west: 12.485
  window_content: "


This is a rectangle!

" }); google.maps.event.addListener(romeRectangle, 'click', function (evt) { infowindow.setContent(this.window_content); infowindow.setPosition(this.getBounds().getCenter());; });

Polygons (native google solution, w/ infowindow)

// add some misisng code to google! 
if (!google.maps.Polygon.prototype.getBounds) {
  google.maps.Polygon.prototype.getBounds = function () {
    var bounds = new google.maps.LatLngBounds();
    this.getPath().forEach(function (element, index) { bounds.extend(element); });
    return bounds;
var triangleCoords = [
  {lat: 25.774, lng: -80.190},
  {lat: 18.466, lng: -66.118},
  {lat: 32.321, lng: -64.757},
  {lat: 25.774, lng: -80.190} //final co-ord is same as first co-ord!
// Construct the polygon.
var bermudaTriangle = new google.maps.Polygon({
  paths: triangleCoords,
  strokeColor: '#FF0000',
  strokeOpacity: 0.8,
  strokeWeight: 2,
  fillColor: '#FF0000',
  fillOpacity: 0.35,
  window_content: "

Bermuda Triangle

This is a polygon!

" }); bermudaTriangle.setMap(my_map); google.maps.event.addListener(bermudaTriangle, 'click', function (evt) { infowindow.setContent(this.window_content); infowindow.setPosition(this.getBounds().getCenter());; });

Tech 2: Popcorn/Oral History

  • intellectual goal: think hard about the “text”
  • technical goal: think more about working with structures

Popcorn framework

  • main library
  • plugins

Plugin Structure

  start: 50,
  end: 90,
  text: "Second Footnote!",
  target: "popcorn-container"

Google sheets

Line 10 in /js/~popcorn-data-from-google.js:

var public_spreadsheet_key = '';
  • update this line (l. 10 in /js/~popcorn-data-from-google.js) & yr good to go

“Seek” function

var seek = function (time) {
 document.getElementById("media").currentTime= time;

<a href="javascript:seek(75)">seek to 1:15</a>