Sam Burden

PhD candidate in EECS at Berkeley

cell:  206.384.6942
skype: sburden
desk:  #13 in 337 Cory Hall
mail:  University of California at Berkeley
       205 Cory Hall
       Berkeley, CA 94720-1772
CV | Calendar | Papers | Talks | Code | Outreach

Brief bio

Sam Burden is a PhD candidate in EECS at UC Berkeley advised by Prof. Shankar Sastry. He studies locomotion and manipulation in robotics and biomechanics using novel tools from hybrid systems theory.

Loading full site . . .

You must have JavaScript enabled.
Sam Burden - PhD candidate in EECS at Berkeley
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

Also see [[AdvancedOptions]]
<div class='header' role='banner' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div id='mainMenu' role='navigation' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' role='navigation' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' role='complementary' refresh='content' force='true' tiddler='SideBarTabs'></div>
<div id='displayArea' role='main'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {color:[[ColorPalette::PrimaryDark]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox where print preview displays the noscript content */
<div class='toolbar' role='navigation' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
List of coursework completed & TA'd at Berkeley.

Helpful info & documents for ~PhD students preparing for the qual.
|''Description:''|Very incomplete BibTeX implementation to work with bibliographic references|
|''Author:''|Paulo Soares; some tweaks by sburden|
|''Documentation:''|[[BibTeXPlugin Documentation|BibTeXPluginDoc]]|
|''License:''|[[Creative Commons Attribution-Share Alike 3.0 License|]]|
if(!version.extensions.BibTeXPlugin) { //# ensure that the plugin is only installed once
version.extensions.BibTeXPlugin = {installed: true};

(function($) {
config.macros.cite = {
  noReference: "(??)",
  refreshTiddler: Story.prototype.refreshTiddler

config.macros.cite.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
  var pos, cmb = config.macros.bibliography;
  if(params.length==0) return;
  var entry = params[0];
  var args = paramString.parseParams(null,null,false);
  var title = getParam(args,"bibliography",null);
  if(title) {
    this.biblioTiddler = title;
  } else {title = this.biblioTiddler;}
  title = getParam(args,"thisBibliography",title);
  var format = getParam(args,"format",null);
  if(format) {
    this.format = format;
  } else {format = this.format;}
  format = getParam(args,"thisFormat",format);
  var argsArray = paramString.readMacroParams();
  var showAll = ($.inArray('showAll',argsArray) > -1);
  if(title && store.tiddlerExists(title)) var bib = cmb.extractEntry(title, entry);
  if(bib.content) {
    var entries = this.entries;
    if($.inArray(entry, entries)==-1) this.entries.push(entry);
    entries = this.entries;
    pos = $.inArray(entry, entries)+1;
    var author = cmb.processNames(bib.content.extract("author"), showAll);
    var year = bib.content.extract("year");
    var citation = format.replace("author", author);
    citation = citation.replace("year", year);
    citation = citation.replace("number", pos);
    wikify(citation, place);
  } else {
    wikify(this.noReference, place);

Story.prototype.refreshTiddler = function(title,template,force){
  config.macros.cite.biblioTiddler = null;
  config.macros.cite.format = "author (year)";
  config.macros.cite.entries = [];
  var tiddler = config.macros.cite.refreshTiddler.apply(this,arguments);
  return tiddler;

config.macros.bibliography = {
   article: {fields: ["author", "year", "title", "journal", "volume", "pages"], format: "author. title. //journal// volume:pages, (year)."}, 
   book: {fields: ["author", "year", "title", "publisher"], format: "author (year). //title//. publisher."},
   inproceedings: {fields: ["author", "year", "title", "booktitle"], format: "author. title. //booktitle//, year."},
   incollection: {fields: ["author", "year", "title", "editor", "booktitle", "pages", "publisher"], format: "author (year). title. In editor //booktitle//, pages. publisher."},
   techreport: {fields: ["author", "year", "title", "institution"], format: "author. title. institution, year."},
   manual: {fields: ["author", "year", "title", "organization"], format: "author (year). //title//. organization."},
   unpublished: {fields: ["author", "year", "title"], format: "author (year). //title//. Unpublished."}

config.macros.bibliography.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
        var cmc = config.macros.cite;
	var title = (cmc.biblioTiddler) ? cmc.biblioTiddler : params[0];
	if(!title || !store.tiddlerExists(title)) return;
        var argsArray = paramString.readMacroParams();
	var i, entryText;
	var entries = [];
	if($.inArray('showAll',argsArray) > -1) {
		entryText = this.extractAllEntries(title);
		for(i=0; i<entryText.length; i++) {
			entries[entries.length] = this.processEntry(entryText[i], i);
	} else if ( argsArray.length > 1 ) {
          for ( i=0; i < argsArray.length; i++) {
            entryText = this.extractEntry(title, argsArray[i]);
            if(entryText) {
              entries[entries.length] = this.processEntry(entryText, i);

        } else {
		for(i=0; i<cmc.entries.length; i++){
			entryText = this.extractEntry(title, cmc.entries[i]);
			if(entryText) {
                                entries[entries.length] = this.processEntry(entryText, i);
        wikify(entries[0] , place);
	for (i=1; i < entries.length; i++) {
		wikify("\n\n" + entries[i] , place);
	return true;

config.macros.bibliography.processNames = function(names, showAll) {
	var i, authors = names.split(" and ");
	var entry = authors[0];
	var numAuthors = authors.length;
	var fullEntry = entry;
	if (numAuthors==2) {
		entry += " and " + authors[1];
		fullEntry = entry;
	if (numAuthors>2) {
		fullEntry = entry;
		for (i=1; i < numAuthors; i++) {
			if (i==numAuthors-1) {fullEntry += " and "} else {fullEntry += ", "};
			fullEntry += authors[i];
		if(showAll) {entry = fullEntry;} else {entry += " et al.";}
	return entry;

config.macros.bibliography.processEntry = function(entry, pos) {
  var field, text=entry.content;
  var fields={};
  fields.number = pos+1;
  var type = this[entry.type];
  var output = type.format;
  for(var i=0; i<type.fields.length; i++){
    field = type.fields[i];
    case "author": = this.processNames(text.extract("author"), true);
    case "title":
      var url = text.extract("url");
      fields.title = text.extract("title");
      fields.title = (url=='') ? fields.title : "[[" + fields.title + "|" + url + "]]";
    case "editor":
      var editor = text.extract("editor");
      fields.editor = (editor=='') ? editor : this.processNames(editor,true) + " (Eds.), ";
      fields[field] = text.extract(field);
    output = output.replace(field, fields[field]);
  return output;

config.macros.bibliography.extractEntry = function(title,entry) {
    var bib = {type: null, content: null};
    var text = store.getTiddlerText(title);
    var re = new RegExp('\\s*@(\\w+?)\\{\\s*' + entry + '\\s*,\\s*(.[^@]+)\\}','mi');
    var field = text.match(re);
    if(field) {
        bib.type = field[1].toLowerCase();
        bib.content = field[2];
    return bib;

config.macros.bibliography.extractAllEntries = function(title) {
    var bib, field, entries = [];
    var text = store.getTiddlerText(title);
    var bibs = text.match(/\s*@(\w+?)\{\s*(.[^@]+)\}/mgi);
    for(var i=0; i<bibs.length; i++){
        bib = {type: null, content: null};
        if(field) {
            bib.type = field[1].toLowerCase();
            bib.content = field[2];
            if(bib.type!='string' && bib.type!='preamble' && bib.type!='comment') entries.push(bib);
    return entries;

config.macros.bibliography.extractField = function(field) {
    var text = "";
    var re = new RegExp('\\s*'+field+'\\s*=\\s*[\\{|"]\\s*(.+?)\\s*[\\}|"]','mi');
    var fieldText = this.match(re);
        text = fieldText[1].replace(/\{|\}/g,'');
        if(field!='url') text = text.replace(/-+/g,"—");
    return text;

String.prototype.extract = config.macros.bibliography.extractField;

config.shadowTiddlers.BibTeXPluginDoc="The documentation is available [[here.|]]";

[<img[Sam Burden|img/sam_burden_.png]]
!!!Sam Burden
I am a ~PhD candidate in Electrical Engineering and Computer Sciences at UC Berkeley. My training is in dynamical systems and control theory, and my interests lie at the intersection of dynamic and dexterous robotics, neuromechanical motor control, and cyberphysical systems theory. My thesis advisor is [[Prof. Shankar Sastry|]], and I actively collaborate with [[Prof. Bob Full|]], [[Prof. Shai Revzen|]], [[Prof. Dan Koditschek|]], and [[Prof. Aaron Hoover|]] on a [[variety of projects| Collaborations]]. I am funded by an [[NSF fellowship|]] and the [[MAST|]] project.

Together with [[Matt Spencer|]], I have helped run a [[K-12 engineering outreach| Outreach]] program in Bay Area schools, and I have presented to large groups of high school students at [[UW MathDay|]] in Seattle.

My academic career started at a [[math camp|]] at the University of Washington, where I have had the honor of [[teaching robotics| Outreach]].

As an undergraduate at [[UW|]], I worked with [[Prof. Eric Klavins|]] in the [[Self-Organizing Systems|]] lab and spent a summer at [[Penn|]] working with [[Prof. Dan Koditschek|]] and [[Prof. Jon Clark|]] in [[KodLab|]].

|''desk:''|#13 in 337 Cory Hall|
|''mail:''|University of California at Berkeley<br />205 Cory Hall<br />Berkeley, CA 94720-1772|
!!!Brief Bio
Sam Burden earned his BS with Honors in Electrical Engineering from the University of Washington, Seattle.  Currently, he is a ~PhD candidate in Electrical Engineering and Computer Sciences at the University of California, Berkeley and expects to graduate in May of 2014.  He is broadly interested in applying control and dynamical systems theory to study neuromechanical and cyberphysical systems.  Specifically, he focuses on discovering and formalizing principles that enable dynamic locomotion and dexterous manipulation in robotics, biomechanics, and human motor control.  He is a recipient of the NSF Graduate Research Fellowship and collaborator in ARL's Micro Autonomous Systems and Technology CTA.  In his spare time, he teaches robotics to students of all ages in K-12 classrooms, Maker Fairs, and campus events.

[[All blog entries| index.html#tag:blog]]

!!![[Folk Theorems|]]
[[Logitech M570]]
!!!Dec 3, 2012
This evening [[Dorsa Sadigh|]], [[Sam Coogan|]] and I visited [[Boost! Oakland|]], a non-profit 1-on-1 K-5 tutoring program.  Consider [[volunteering with them|]] if you'd like to mentor a student!
!!![[Numerical Integration of Hybrid Dynamical Systems via Domain Relaxation| pubs/BurdenGonzalez2011.pdf]]
To generate the schematic and plots in the paper:
$ hg clone cdc2011
$ cd cdc2011/simulation
$ matlab
>>> dpsch
>>> dpplots

{{{mercurial matlab}}}

!!![[Dimension Reduction Near Periodic Orbits of Hybrid Systems| pubs/BurdenRevzen2011.pdf]]
To generate the schematic and plots in the paper:
$ hg clone cdc2011
$ cd cdc2011/reduction
$ ipython 
ipy$ run

Links: [[slides| talks/2011cdc.pdf]], [[paper| pubs/BurdenRevzen2011.pdf]]

{{{mercurial python ipython numpy scipy matplotlib}}}
I co-organized a workshop on [[Control Systems in the Open World|]] at [[CDC 2012|]] in Maui, HI, USA.  A video of my talk and the accompanying slides are available below.

<iframe width="640" height="360" src="" frameborder="0" allowfullscreen></iframe>
[[Reduction and Robustness via Intermittent Contact| talks/2012cdc.pdf]]
<iframe src=";mode=WEEK&amp;height=600&amp;wkst=1&amp;bgcolor=%23FFFFFF&amp;;color=%23125A12&amp;;color=%2328754E&amp;;color=%23AB8B00&amp;;color=%232F6309&amp;;color=%232952A3&amp;;color=%23BE6D00&amp;;color=%23A32929&amp;ctz=America%2FLos_Angeles" style=" border-width:0 " width="800" height="600" frameborder="0" scrolling="no"></iframe>

|Author|Eric Shulman|
|Description|Add checkboxes to your tiddler content|
This plugin extends the TiddlyWiki syntax to allow definition of checkboxes that can be embedded directly in tiddler content.  Checkbox states are preserved by:
* by setting/removing tags on specified tiddlers,
* or, by setting custom field values on specified tiddlers,
* or, by saving to a locally-stored cookie ID,
* or, automatically modifying the tiddler content (deprecated)
When an ID is assigned to the checkbox, it enables direct programmatic access to the checkbox DOM element, as well as creating an entry in TiddlyWiki's config.options[ID] internal data.  In addition to tracking the checkbox state, you can also specify custom javascript for programmatic initialization and onClick event handling for any checkbox, so you can provide specialized side-effects in response to state changes.
>see [[CheckboxPluginInfo]]
2008.01.08 [*.*.*] plugin size reduction: documentation moved to [[CheckboxPluginInfo]]
2008.01.05 [2.4.0] set global "" to current checkbox element when processing checkbox clicks.  This allows init/beforeClick/afterClick handlers to reference RELATIVE elements, including using "story.findContainingTiddler(place)".  Also, wrap handlers in "function()" so "return" can be used within handler code.
|please see [[CheckboxPluginInfo]] for additional revision details|
2005.12.07 [0.9.0] initial BETA release
version.extensions.CheckboxPlugin = {major: 2, minor: 4, revision:0 , date: new Date(2008,1,5)};
config.checkbox = { refresh: { tagged:true, tagging:true, container:true } };
config.formatters.push( {
	name: "checkbox",
	match: "\\[[xX_ ][\\]\\=\\(\\{]",
	lookahead: "\\[([xX_ ])(=[^\\s\\(\\]{]+)?(\\([^\\)]*\\))?({[^}]*})?({[^}]*})?({[^}]*})?\\]",
	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			// get params
			var checked=(lookaheadMatch[1].toUpperCase()=="X");
			var id=lookaheadMatch[2];
			var target=lookaheadMatch[3];
			if (target) target=target.substr(1,target.length-2).trim(); // trim off parentheses
			var fn_init=lookaheadMatch[4];
			var fn_clickBefore=lookaheadMatch[5];
			var fn_clickAfter=lookaheadMatch[6];
			var tid=story.findContainingTiddler(w.output);  if (tid) tid=tid.getAttribute("tiddler");
			var srctid=w.tiddler?w.tiddler.title:null;
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
} );
config.macros.checkbox = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		if(!(tiddler instanceof Tiddler)) { // if no tiddler passed in try to find one
			var here=story.findContainingTiddler(place);
			if (here) tiddler=store.getTiddler(here.getAttribute("tiddler"))
		var srcpos=0; // "inline X" not applicable to macro syntax
		var target=params.shift(); if (!target) target="";
		var defaultState=params[0]=="checked"; if (defaultState) params.shift();
		var id=params.shift(); if (id && !id.length) id=null;
		var fn_init=params.shift(); if (fn_init && !fn_init.length) fn_init=null;
		var fn_clickBefore=params.shift();
		if (fn_clickBefore && !fn_clickBefore.length) fn_clickBefore=null;
		var fn_clickAfter=params.shift();
		if (fn_clickAfter && !fn_clickAfter.length) fn_clickAfter=null;
		var refresh={ tagged:true, tagging:true, container:false };
	create: function(place,tid,srctid,srcpos,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter) {
		// create checkbox element
		var c = document.createElement("input");
		c.srctid=srctid; // remember source tiddler
		c.srcpos=srcpos; // remember location of "X"
		c.container=tid; // containing tiddler (may be null if not in a tiddler)
		c.tiddler=tid; // default target tiddler 
		c.refresh = {};
		c.refresh.container = refresh.container;
		c.refresh.tagged = refresh.tagged;
		c.refresh.tagging = refresh.tagging;
		// set default state
		// track state in config.options.ID
		if (id) {; // trim off leading "="
			if (config.options[]!=undefined)
		// track state in (tiddlername|tagname) or (fieldname@tiddlername)
		if (target) {
			var pos=target.indexOf("@");
			if (pos!=-1) {
				c.field=pos?target.substr(0,pos):"checked"; // get fieldname (or use default "checked")
				c.tiddler=target.substr(pos+1); // get specified tiddler name (if any)
				if (!c.tiddler || !c.tiddler.length) c.tiddler=tid; // if tiddler not specified, default == container
				if (store.getValue(c.tiddler,c.field)!=undefined)
					c.checked=(store.getValue(c.tiddler,c.field)=="true"); // set checkbox from saved state
			} else {
				var pos=target.indexOf("|"); if (pos==-1) var pos=target.indexOf(":");
				if (pos==0) c.tag=target.substr(1); // trim leading "|" or ":"
				if (pos>0) { c.tiddler=target.substr(0,pos); c.tag=target.substr(pos+1); }
				if (!c.tag.length) c.tag="checked";
				var t=store.getTiddler(c.tiddler);
				if (t && t.tags)
					c.checked=t.isTagged(c.tag); // set checkbox from saved state
		// trim off surrounding { and } delimiters from init/click handlers
		if (fn_init) c.fn_init="(function(){"+fn_init.trim().substr(1,fn_init.length-2)+"})()";
		if (fn_clickBefore) c.fn_clickBefore="(function(){"+fn_clickBefore.trim().substr(1,fn_clickBefore.length-2)+"})()";
		if (fn_clickAfter) c.fn_clickAfter="(function(){"+fn_clickAfter.trim().substr(1,fn_clickAfter.length-2)+"})()";
		c.init=true; c.onclick(); c.init=false; // compute initial state and save in tiddler/config/cookie
	onClickCheckbox: function(event) {;
		if (this.init && this.fn_init) // custom function hook to set initial state (run only once)
			{ try { eval(this.fn_init); } catch(e) { displayMessage("Checkbox init error: "+e.toString()); } }
		if (!this.init && this.fn_clickBefore) // custom function hook to override changes in checkbox state
			{ try { eval(this.fn_clickBefore) } catch(e) { displayMessage("Checkbox onClickBefore error: "+e.toString()); } }
		if (
			// save state in config AND cookie (only when ID starts with 'chk')
			{ config.options[]=this.checked; if (,3)=="chk") saveOptionCookie(; }
		if (this.srctid && this.srcpos>0 && (! ||,3)!="chk") && !this.tag && !this.field) {
			// save state in tiddler content only if not using cookie, tag or field tracking
			var t=store.getTiddler(this.srctid); // put X in original source tiddler (if any)
			if (t && this.checked!=(t.text.substr(this.srcpos,1).toUpperCase()=="X")) { // if changed
				if (!story.isDirty(t.title)) story.refreshTiddler(t.title,null,true);
		if (this.field) {
			if (this.checked && !store.tiddlerExists(this.tiddler))
				store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
			// set the field value in the target tiddler
			// DEBUG: displayMessage(this.field+"@"+this.tiddler+" is "+this.checked);
		if (this.tag) {
			if (this.checked && !store.tiddlerExists(this.tiddler))
				store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
			var t=store.getTiddler(this.tiddler);
			if (t) {
				var tagged=(t.tags && t.tags.indexOf(this.tag)!=-1);
				if (this.checked && !tagged) { t.tags.push(this.tag); store.setDirty(true); }
				if (!this.checked && tagged) { t.tags.splice(t.tags.indexOf(this.tag),1); store.setDirty(true); }
			// if tag state has been changed, update display of corresponding tiddlers (unless they are in edit mode...)
			if (this.checked!=tagged) {
				if (this.refresh.tagged) {
					if (!story.isDirty(this.tiddler)) // the TAGGED tiddler in view mode
					else // the TAGGED tiddler in edit mode (with tags field)
				if (this.refresh.tagging)
					if (!story.isDirty(this.tag)) story.refreshTiddler(this.tag,null,true); // the TAGGING tiddler
		if (!this.init && this.fn_clickAfter) // custom function hook to react to changes in checkbox state
			{ try { eval(this.fn_clickAfter) } catch(e) { displayMessage("Checkbox onClickAfter error: "+e.toString()); } }
		// refresh containing tiddler (but not during initial rendering, or we get an infinite loop!) (and not when editing container)
		if (!this.init && this.refresh.container && this.container!=this.tiddler)
			if (!story.isDirty(this.container)) story.refreshTiddler(this.container,null,true); // the tiddler CONTAINING the checkbox
		return true;
	refreshEditorTagField: function(title,tag,set) {
		var tagfield=story.getTiddlerField(title,"tags");
		if (!tagfield||tagfield.getAttribute("edit")!="tags") return; // if no tags field in editor (i.e., custom template)
		var tags=tagfield.value.readBracketedList();
		if (tags.contains(tag)==set) return; // if no change needed
		if (set) tags.push(tag); // add tag
		else tags.splice(tags.indexOf(tag),1); // remove tag
		for (var t=0;t<tags.length;t++) tags[t]=String.encodeTiddlyLink(tags[t]);
		tagfield.value=tags.join(" "); // reassemble tag string (with brackets as needed)
*Fall 2008
**EE 221: Linear Systems
**EE 226: Stochastic Processes
*Spring 2009
**EE 222: Nonlinear Systems
**EE 291E: Hybrid Systems
**BIO 135L: Mechanics of Organisms Laboratory
*Fall 2009
**EE 227A: Convex Optimization
**MATH 214: Differential Geometry
**(TA) EE 221: Linear Systems with Prof. Claire Tomlin
*Spring 2010
**MATH 240: Riemannian Geometry
*Fall 2010
**MATH 202A: Real Analysis
**MATH 219: Dynamical Systems
*Spring 2011
**MATH 202B: Real Analysis
*Fall 2011
**(TA) EE 125/215: Introduction to Robotics with Prof. Ruzena Bajcsy
*Spring 2013
**CS 294P: Active Perception
**~CogSci 290Q: Computational Models of Cognition
!!![[All code| index.html#tag:code]]
!!!Nov 21, 2013
[[Sam Coogan|]], Aaron Bestick, and I visited [[Coliseum College Prep Academy|]] in East Oakland to teach Mrs. Sawczuk's 10th grade Chemistry classes about the relationship between electricity, magnetism, and motion.

!!!Nov 20, 2013
Jessica Lee and I visited [[Coliseum College Prep Academy|]] in East Oakland to teach Mrs. Sawczuk's 8th grade Physical Science classes about designing biologically-inspired robots.

!!!Nov 2, 2012
[[Dorsa Sadigh|]], Dan Calderone, Sana Vaziri, [[Robert Matthew|]] and I visited [[Coliseum College Prep Academy|]] in East Oakland.  We presented to a whopping 10 classes of ~30 6th-12th graders!

!!!March 3, 2012
[[Kevin Peterson|]], Andre Zeumault and I visited [[Coliseum College Prep Academy|]] in East Oakland.  We presented to 6 classes of ~30 9th-12th graders!
!!!Probing neuromechanical control architecture in running cockroaches
''Participants:'' [[Prof. Robert Full|]], [[Prof. Shai Revzen|]], and [[Talia Moore|]]

''Press:'' [[UMich press release|]] featured in [[ScienceDaily|]], [[Discovery News|]], [[Wired UK|]], [[Popular Science|]]

<<bibliography inprep.bib MooreBurden2013>>

<<bibliography journal.bib RevzenBurden2013>>

<<bibliography conference.bib BurdenRevzen2013 MooreRevzen2010>>

!!!Bio-inspired design and control of a minimally-actuated milliscale hexapedal robot
''Participants:'' [[Prof. Aaron Hoover|]]

<<bibliography conference.bib HooverBurden2010>>

!!!Robust limit cycles in hybrid systems with simultaneous transitions
''Participants:'' [[Prof. Daniel Koditschek|]], [[Prof. Shai Revzen|]]

<<bibliography inprep.bib BurdenRevzen2013multi>>

!!!Numerical Methods for Hybrid Dynamical Systems
''Participants:'' [[Prof. Humberto Gonzalez|]], [[Dr. Ram Vasudevan|]]

<<bibliography submitted.bib BurdenGonzalezVasudevan2013>>

<<bibliography conference.bib BurdenGonzalez2011>>
|>|>|SiteTitle - SiteSubtitle|
|~|~|<<tiddler Configuration.SideBarTabs>>|

''StyleSheet:'' StyleSheetColors - StyleSheetLayout - StyleSheetPrint



Extensive StartupParameters to control the startup beahviour of ~TiddlyWiki through specially crafted ~URLs
Revived for Fall semester 2013, this 1-unit series (CCN 25779) will focus on theory and applications of control. Specific areas of interest include robotics, civil infrastructure, computer vision, verification, networked and hybrid systems, and game theory.  

More information is [[available online|]]. We encourage interested graduate students to enroll in the seminar and welcome attendees from across campus.
Control Theory Seminar (EE 298 P 004, CCN 25779)
Prof’s Arcak, Bajcsy, Sastry, and Tomlin
Mon 4 -- 5pm in 540AB Cory
!!!Grade Option
Satisfactory / Unsatisfactory
<iframe src=";mode=AGENDA&amp;height=600&amp;wkst=1&amp;bgcolor=%23FFFFFF&amp;;color=%2328754E&amp;ctz=America%2FLos_Angeles" style=" border-width:0 " width="400" height="600" frameborder="0" scrolling="no"></iframe>
While helping organize a [[workshop at CDC2012|]] in Maui, I helped [[Shai Revzen|]] collect some specimens of  native Hawaiian crab.  The animals exhibit fast and robust locomotion over highly fractured, slippery terrain -- a fact that makes them very interesting to study, but difficult to capture.  This page documents our experience in the hopes that it may assist other intrepid researchers.

!!!a'ama crab
[img[a'ama crab| aama/DSC00021.JPG]][img[a'ama on water's edge| aama/DSC00065.JPG]][img[a'ama on slippery cliff| aama/DSC00051.JPG]]
The a'ama crab (//[[Grapsus tenuicrustatus|]]//?) is native to the rocky intertidal shores of Hawaii.  The terrain is extremely challenging to traverse -- hard, slippery, and highly fractured. 

<html><iframe width="560" height="315" src="" frameborder="0" allowfullscreen></iframe></html>
As illustrated in the video, the a'ama crabs nimbly negotiate this complex environment at high speed, sprinting across uneven surfaces to avoid potential predators while ocean waves crash over them.

We found the crab species on essentially every part of Maui we visited regardless of whether the area was inhabited by humans.  Most of our video was collected at the volcanic rock field on La Perouse Bay just south of [[Ahihi Kinau|]], where there was an abundance of rock outcroppings with severe inclines.  The specimens that were shipped back to Ann Arbor were all collected near our hotel in Wailea.

<iframe width="425" height="300" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src=";msid=210136531334088769950.0004d681f0744c019579c&amp;gl=us&amp;hl=en&amp;ie=UTF8&amp;ll=20.764004,-156.417724&amp;spn=0.8,0.9&amp;t=m&amp;output=embed"></iframe><br /><small>View <a href=";msid=210136531334088769950.0004d681f0744c019579c&amp;gl=us&amp;hl=en&amp;ie=UTF8&amp;ll=20.764004,-156.417724&amp;spn=0.332027,0.538083&amp;t=m&amp;source=embed" style="color:#0000FF;text-align:left">A'ama crabbing locations</a> in a larger map</small>

The locals informed us that a'ama are edible and make good bait for larger fish, and they have [[techniques|]] to capture the animals using poles, hooks, and possibly bait.  However, these methods generally damage the animals, hence they were not appropriate for our purposes.

As suggested both by local fishermen and [[online|]], we successfully caught intact animals using a bright flashlight at night.  Our technique:
# Quietly crawl to the edge of the rocky coast in the dark.  
# Slowly stand up and hold the flashlight above your head.  
# Turn on the light and watch for crabs darting away.  
# Choose one animal to chase, ideally away from the water's edge.  
# Once cornered and blinded with the flashlight, the crab will usually freeze in place, allowing you to:
## slowly bring your hand near; then 
## quickly snatch it.
equipment photo
equipment: [[rubberized gloves|]]; plastic bucket; [[head-mounted flashlight|]]

As anticipated by the local fishermen, the first batch of crabs we caught performed poorly in captivity.  In fact, they died within hours of being captured.  Folk wisdom suggested the animals secrete a chemical that poisons them.  We hypothesized that the toxic chemical was ammonia from the  animals' urine, so we tried packing the second batch with pellets designed to fix ammonia in aquariums.  The crabs traveled safely for nearly 48 hours from Maui, HI to Ann Arbor, MI.  Our preparation:
# Cut circular respiration holes in the plastic container.
# Fill the bottom of the container with a single layer of ammonia fixation pellets.
# Fill the rest of the container with peat moss.
# Close the lid and submerge the container in fresh (i.e. aerated) seawater.
# Open the lid and transfer the crab on top of the bed of peat moss.
# Place a piece of food (e.g. calamari) inside the container in front of the animal's mouth.
preparation photo
equipment: perforated [[plastic containers|]]; seawater-soaked [[peat moss|]]; [[ammonia fixation pellets|]]

(instructions from Olivia)
For the uninitiated:
A digital object identifier (DOI) is a character string (a "digital identifier") used to uniquely identify an object such as an electronic document.
> [[Wikipedia|]]
Given a DOI, say 10.1007/s00422-012-0545-z, simply navigate to [[|]]; you will be redirected to the official website for the article.

Filipe Fernandes has a [[great script|]] for fetching a ~BibTeX entry using a DOI.  This is far superior to the alternative (navigating journals' aggravatingly cryptic websites, selecting `Export to ~BibTeX' from a drop-down menu, downloading and opening a file), and it has worked for me in cases where the journal itself doesn't provide ~BibTeX!

You'll need some extra Python libraries; using ~MacPorts:
sudo port install py27-httplib2 py27-beautifulsoup
[[carpal tunnel|]]
[[focal dystonia|]]

[[Logitech M570|]] wireless ball mouse
[[Goldtouch|]] adjustable keyboard
[[external monitor|]]
[[small, light computer|]]
[[| ]]
(if you see raw LaTeX rather than formulas below, you need [[MathJax|]])

I recently had a great deal of trouble solving what I regarded as a fairly simple physics problem that required transforming forces through a change of coordinates.  The solution is straightforward once we recognize that ''forces are [[covariant|]]''.

If $p = \phi(q)$, then the chain rule yields $\dot{p} = D\phi(q) \dot{q}$ where $D\phi(q)$ is the Jacobian linearization of the coordinate transformation $\phi$ (in manifold lingo, $D\phi:TQ\rightarrow TP$ is the pushforward).  Since the instantaneous power $F^T \dot{p}$ associated with a force $F$ represented in the $p$ coordinates is frame-invariant, direct substitution yields $F^T \dot{p} = F^T D\phi(q) \dot{q}$.  Since $\dot{p}$ is arbitrary, the equivalent force represented in the $q$ coordinates must be $F^T D\phi(q)$.  In differential-geometric terms, if we regard forces as covectors so that $F\in T^*P$, this is simply the pullback $\phi^* F\in T^*Q$.  Therefore ''forces are (naturally) covariant''.

One potential point of confusion: if the coordinate change is an isometry, i.e. $\phi(q) = R q + a$ for some orthogonal matrix $R$ and vector $a$, then forces can also be transformed by the pushforward of the inverse transformation.  Specifically, let $\psi(p) = R^T(p - a)$ so that $\phi\circ\psi = \text{id} = \psi\circ\phi$.  Then $D\phi = R$, and $D\psi = R^T = (R)^{-1} = (D\phi)^{-1}$.  Therefore $F^T D\phi = (D\psi F)^T$, so in this case $F$ may be "pushed forward" and it appears that forces are [[contravariant|]].  I cannot emphasize enough that ''this formula does not hold unless $\phi$ is an isometry''.
|''bold''|{{{''bold''}}} - two single-quotes, not a double-quote|
|''//bold italics//''|{{{''//bold italics//''}}}|
|{{{plain text}}}|{{{ {{{PlainText No ''Formatting''}}} }}}|
|/%this text will be invisible%/hidden text|{{{/%this text will be invisible%/}}}|
I finally put [[all my code on github|]].

!!!Acquiring code
!!!!Clone the repositories
cd ~/your/src/dir
mkdir sburden && cd sburden
git clone
git clone
git clone
git clone
git clone
git clone
!!!!Add sburden directory to PYTHONPATH
echo "export PYTHONPATH=~/your/src/dir/sburden:$PYTHONPATH" >> ~/.bash_profile
!!!!Import code in ipython shell
$ ipython
ipy$ import opt,rbt,sim,uk,util,vid

!!!uk: Unscented Kalman filtering
A few simple tests are included with the code to illustrate its application to track rigid bodies and particles using either motion capture (mocap) data or camera observations from multiple (calibrated) cameras.
$ cd ~/your/src/dir/sburden/uk
$ ipython
ipy$ run body
ipy$ run pts
This is the PRE-RELEASE build of ~TiddlyWiki v<<version>>, and incorporates all changes currently committed to the [[TiddlyWiki source repository|]], including several enhancements to key functions and objects, as well as an internal update to use a newer revision of jQuery (now v1.8.1)

~TiddlyWiki "Classic" uses ~TiddlyWiki5-based tools to assemble and output the core system, rather than the Ruby-based ginsu/cook utilities that were previously used.  The ability of ~TiddlyWiki5 to directly create ~TiddlyWiki Classic documents ensures a robust and reliable future for the existing "installed base" of ~TiddlyWiki, even as the community migrates to using the new power and flexiblity of ~TiddlyWiki5.

You can view/download versions of ~TiddlyWiki from the following locations:
|current release of ~TiddlyWiki Classic||
|latest pre-release of ~TiddlyWiki Classic||
|latest pre-release of ~TiddlyWiki5||
!!!April 3, 2013
This evening [[Dorsa Sadigh|]], Duncan Haldane and I visited Science Night at Joaquin Miller Elementary in the Oakland Hills.  It was a large and stimulating crowd, with many exciting demonstrations!
I use the wonderful [[atchange|]] to automatically recompile my LaTeX document using the equally wonderful [[rubber|]] any time my .tex, .bib, or figures change.  A typical configuration looks like:
  bibtex doc
  rubber --pdf doc.tex

  bibtex doc
  rubber --pdf doc.tex

  bibtex doc
  rubber --pdf doc.tex

My preferred tool for illustrations is [[Inkscape|]].  In addition to being [[FOSS|]], it is drivable from the command line!  For instance, to export a .pdf,.pdf_tex pair on OSX:
/Applications/ fig/fig.svg --export-pdf=fig.pdf --export-latex --export-area-page --without-gui

!!!Spell check
For LaTeX--sensitive spell checking from the commandline:
aspell --mode=tex -c yourfile.tex

!!!Font Begone
I use ''.pdf''+''.pdf_tex'' pairs for illustrations in LaTeX documents.  To export the compiled figure (e.g. for inclusion in a poster), I found [[FontBegone|]], an OSX .app that re-exports the pdf using [[GhostScript|]] and [[ps2pdf|]].  The .app didn't work for me, but the script it is based on can be saved and added to your ''$PATH'':
gs -sDEVICE=pswrite -dNOCACHE -sOutputFile=- -q -dbatch -dNOPAUSE -dQUIET "$1" -c quit | ps2pdf - "`echo $1 | cut -f1 -d'.'`"-nofont.pdf

Although ~FontBegone yielded a vector graphics file with outlined fonts, importing the output into Inkscape gave an un-editable mess.  Subsequent searching turned up [[pdf2svg|]], which is a more direct route.  It yields a gross rasterized version of the illustration, but the fonts are correctly outlined, so I can now composite my original ''.svg'' with the output of ''pdf2svg''.
10am Mon -- Thu the week of July 23 -- 26 in 337 Cory.

!!!Recommended Reading / Prerequisites
Working knowledge of [[topology|]] and [[analysis|]] on the level of MATH 202A/B.

Familiarity with basic [[finite-dimensional optimization theory|]], for instance from [[convex optimization|]] or EE 227.

The lecture material will be drawn largely from [[Prof. Polak's book|]].
Aggravatingly, after two years the left-click button on my [[wireless trackball mouse|]] began behaving erratically: inserting extra clicks, failing to maintain contact during a click-and-drag, etc.  A cursory search turned up [[a forum post|]] that suggested a fix: simply unplug the battery and click the buttons for a minute or so.  This (so the theory goes) relieves built-up charge on capacitors.  Worked for me so far.

[[CV| cv.pdf]][[Bio]][[Papers]][[Talks]][[Code]][[Blog]][[Outreach]][[Mentees]][[Calendar]]<<tiddler ToggleRightSidebar##show with: {{config.options.chkShowRightSidebar?'►':'◄'}}>>
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />

<style type="text/css">#contentWrapper {display:none;}</style>
<style type="text/css">
body { margin:0;padding:10px; }
a { color: #fff; font-weight:bold; }
#SplashScreen {width:600px; text-align:left; font-family:monospace; background-color:#666; color:#fff; padding:10px; position:center; display:block; margin: 50px auto;}
<div id="SplashScreen">
<img src="img/sam_burden_.png" style="border:2px solid #000;float:left; margin-right:10px;" />
<h1 style="margin:0">Sam Burden</h1>
<h4 style="margin:0">PhD candidate in EECS at Berkeley</h4>
cell:  206.384.6942
skype: sburden
desk:  #13 in 337 Cory Hall
mail:  University of California at Berkeley
       205 Cory Hall
       Berkeley, CA 94720-1772

<a href="cv.pdf">CV</a> | 
<a href="sch.html">Calendar</a> | 
<a href="papers/">Papers</a> | 
<a href="talks/">Talks</a> |
<a href="">Code</a> |
<a href="">Outreach</a>

<br /><br /><br />
<h4 style="margin:0">Brief bio</h4>
Sam Burden is a PhD candidate in EECS at UC Berkeley advised by Prof. Shankar Sastry. He studies locomotion and manipulation in robotics and biomechanics using novel tools from hybrid systems theory.

<br /><br /><br />
<h4 style="margin:0;text-align:left">Loading full site <blink>. . .</blink></h5>
You must have JavaScript enabled.

|''Description:''|Enable LaTeX formulas for TiddlyWiki|
|''Date:''|Feb 11, 2012|
|''Author:''|Guy Rutenberg|
|''License:''|[[BSD open source license]]|
!! Changelog
!!! 1.0.1 Feb 11, 2012
* Fixed interoperability with TiddlerBarPlugin
!! How to Use
Currently the plugin supports the following delemiters:
* """\(""".."""\)""" - Inline equations
* """$$""".."""$$""" - Displayed equations
* """\[""".."""\]""" - Displayed equations
!! Demo
This is an inline equation \(P(E)   = {n \choose k} p^k (1-p)^{ n-k}\) and this is a displayed equation:
\[J_\alpha(x) = \sum_{m=0}^\infty \frac{(-1)^m}{m! \, \Gamma(m + \alpha + 1)}{\left({\frac{x}{2}}\right)}^{2 m + \alpha}\]
This is another displayed equation $$e=mc^2$$
!! Code
config.extensions.MathJax = {
  mathJaxScript : "",
  // uncomment the following line if you want to access MathJax using SSL
  // mathJaxScript : "",
  displayTiddler: function(TiddlerName) {
    config.extensions.MathJax.displayTiddler_old.apply(this, arguments);
    MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
jQuery.getScript(config.extensions.MathJax.mathJaxScript, function(){
      tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]},
      extensions: ["tex2jax.js"],
      "TML-CSS": { scale: 100 }
    config.extensions.MathJax.displayTiddler_old = story.displayTiddler;
    story.displayTiddler = config.extensions.MathJax.displayTiddler;
	name: "mathJaxFormula",
	match: "\\\\\\[|\\$\\$|\\\\\\(",
	//lookaheadRegExp: /(?:\\\[|\$\$)((?:.|\n)*?)(?:\\\]|$$)/mg,
	handler: function(w)
		switch(w.matchText) {
		case "\\[": // displayed equations
			this.lookaheadRegExp = /\\\[((?:.|\n)*?)(\\\])/mg;
		case "$$": // inline equations
			this.lookaheadRegExp = /\$\$((?:.|\n)*?)(\$\$)/mg;
		case "\\(": // inline equations
			this.lookaheadRegExp = /\\\(((?:.|\n)*?)(\\\))/mg;
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			w.nextMatch = this.lookaheadRegExp.lastIndex;
!!!Evelyn (Fifi) Yeung (Summer 2013 -- Present, [[KodLab|]], University of Pennsylvania)
''now:'' Picking up where Mike Choi left off, Fifi is running gait tuning experiments on the [[X-RHex|]] class of robots.
!!!Michael Kling (Summer 2013, Autonomous Systems Lab, UC Berkeley)
''then:'' Encouraged by his older sister's experience working in our lab, Michael contacted me as a rising High School Senior to request a summer research internship in our group.  I mentored him on a project involving [[humanoid robots|]] instructing each other to perform Tai Chi exercises.
''now:'' pursuing a diploma from the [[Harker School|]], applying to college
!!!Justin Starr (Spring 2013, [[KodLab|]], University of Pennsylvania)
''then:'' As a Sophomore studying Electrical and Systems Engineering, Justin implemented and tested modifications to gait controllers for the [[X-RHex|]] class of robots.
''now:'' pursuing a BS in Electrical and Systems Engineering at the University of Pennsylvania
!!!Mike Choi (Fall 2012 -- Summer 2013, [[KodLab|]], University of Pennsylvania)
''then:'' As a Sophomore studying Mechanical Engineering, Mike ran gait tuning experiments on the [[X-RHex|]] class of robots.
''now:'' pursuing a BS in Mechanical Engineering at the University of Pennsylvania
!!!Ashley Kling (Summer 2011, Autonomous Systems Lab, UC Berkeley)
''then:'' As a rising High School Senior, Ashley precociously contacted my ~PhD advisor, [[Dean Shankar Sastry|]], to request a summer research internship in our group.  I mentored her on a project involving pursuit-evasion between a [[humanoid robot|]] and a [[small legged robot|]].
''now:'' pursuing a BS in Computer Science at Columbia University
!!!Jonathan Glidden (Fall 2010 -- Summer 2011, Autonomous Systems Lab, UC Berkeley)
''then:'' I recruited Jonathan during the 2010/2011 academic year while he was a Senior Mathematics major studying Linear Systems Theory in the graduate course I TA'd as a third year ~PhD student at Berkeley, to study differential geometry, dynamical systems, robotics, and computer vision in the Autonomous Systems Lab.
''now:'' Statistician at [[salesforce|]]
!!![[Talia Moore|]] (Spring 2009 -- Summer 2010, [[Poly-PEDAL Lab|]], UC Berkeley)
''then:'' I mentored Talia on digitization and analysis of biomechanical data collected in an experiment probing the neuromechanical response to lateral perturbations in rapidly-running cockroaches.
''now:'' pursuing a ~PhD in Evolutionary Biology at Harvard University
!!!Alex Leone (Fall 2007 -- Summer 2008, [[SOSLab|]], University of Washington)
''then:'' I recruited Alex while he was a Freshman Electrical Engineering major studying calculus and differential equations in the honors mathematics sequence I TA'd as a Senior at UW to study self-assembly of robots and E. coli in the [[SOSLab|]].
''now:'' Software Engineer at [[ExtraHop Networks|]]
I discovered [[tiddlyWiki|]] earlier this week, and quickly became so enamored that I decided to rewrite my web page using the tool -- if you're reading this, you have witnessed the results.

I can whole-heartedly recommend the tool for building an academic web page (with support for [[blogging| #tag:blog]] and [[RSS| index.xml]]) and maintaining an electronic lab notebook; for instance, check out [[BibTeXPlugin]] and [[MathJaxPlugin]] to see how easy it is to integrate citations and equations.  [[CheckboxPlugin]] makes it perfect for to-do lists.
Install & configuration notes for [[NPSOL|]].  Note that [[I abandoned Matlab|]] long ago, so I didn't try to build the ''.mex'' wrapper.

First, ensure you have a FORTRAN compiler.  Using Macports:
sudo port install gcc46 +gfortran
Add the following to your ''~/.bash_profile'':
export F2C="/opt/local/"
Then, add a symbolic link to ''f77'':
sudo ln -s /opt/local/bin/gfortran-mp-4.6 /opt/local/bin/f77
To build only the examples and libraries, modify the ''~GNUMakefile'' entry for ''libraries'':
libraries: $(OSDIR)/optimized
	cd src; \
	cd csrc; \
	cd examples; \
	$(MAKE) LIBDIR=$</lib EXEDIR=$</examples   FFLAGS="$(FFLAGS_G)"
By default the library will be installed in ''~/npsol''; I modified the value of ''NPDIR'' in ''~GNUMakefile'':
NPDIR = $(HOME)/cloud/src/npsol
Now follow the instructions in ''README.install'':
cd npsol
gmake libraries > npsol.out
If you run into problems, compare with my [[npsol.out| npsol/npsol.out]].

Then you can follow the instructions in ''README.install'' to run the examples.  On my machine:
cd examples
./run lsmain /Users/sburden/cloud/src/npsol/Darwin-x86_64/optimized/examples/
./run npmain /Users/sburden/cloud/src/npsol/Darwin-x86_64/optimized/examples/
./run nlmain /Users/sburden/cloud/src/npsol/Darwin-x86_64/optimized/examples/
Compare with my [[lsmain.out| npsol/lsmain.out]], [[npmain.out| npsol/npmain.out]], and [[nlmain.out| npsol/nlmain.out]].
March 2014: to appear in [[IFAC 2014|]]: [[Adaptive piecewise-affine inverse modeling of hybrid dynamical systems| papers/ElhamifarBurden2014ifac.pdf]], co-authored with [[Ehsan Elhamifar|]]

Feb 2014: to appear in [[ACC 2014|]]: [[Genericity and Structural Stability of Non-Degenerate Differential Nash Equilibria| papers/RatliffBurden2014acc.pdf]], co-authored with [[Lillian Ratliff|]]

Jan 2014: presented a unified approach to [[optimization for models of legged locomotion| talks/2014sicb.pptx]] applicable to parameter estimation, gait synthesis, and experiment design at [[SICB|]] in Austin, TX, USA.  As a bonus, [[Shai Revzen|]] presented our joint work attempting to answer the question [[why trot?|]]

Dec 2013: attended [[CDC 2013|]] in Florence, Italy; [[Insoon Yang|]] presented our paper on infinitesimal interconnection variation in nonlinear networked systems ([[paper| | papers/YangBurden2013.pdf]]).

Nov 2013: led a variety of [[science outreach lessons| Outreach]] around Oakland: bio-inspired robotics at [[Coliseum College Prep Academy]]; electromagnetism at [[Bentley School|]] and [[Coliseum College Prep Academy]]; and the physics of sound at [[Lincoln Elementary|]].

Oct 2013: presented at the Robotics seminar at the University of Maryland in College Park, MD, USA ([[announcement| UMD2013]]) ([[slides| talks/20131024umd.pdf]]).  Thanks to [[Sarah Bergbreiter|]] for inviting me, and to all the UMD folks for exciting conversations and provocative questions!

Oct 2013: attended [[Allerton 2013|]] in Monticello, IL, USA; [[Lillian Ratliff|]] presented our paper on characterization and computation of local Nash equilibria in continuous games ([[paper| papers/RatliffBurden2013.pdf]]) ([[slides| talks/2013allerton.pdf]]) ([[code|]]).

Sep 2013: I started maintaining a [[list of the students I have mentored| Mentees]] (former mentees:  please keep me updated as your careers progress!)

Sep 2013: the [[Control Theory Seminar]] has been revived for Fall 2013, co-organized by [[Sam Coogan |]] and myself -- we meet at 4pm on Mondays in 540AB Cory.

Aug 2013: pre-print on model reduction for rhythmic hybrid phenomena available (arXiv: [[1308.4158|]]) ([[pdf| papers/BurdenRevzen2013.pdf]]).  This is the archival manuscript corresponding to a conference paper that appeared at [[CDC2011]], and provides the theoretical foundation for the parameter identification work I presented at [[SysID2012]], as well as the presentations I gave at [[SICB2013]], [[SPIE2013]], and Dynamic Walking 2013.

July 2013: accepted to [[CDC 2013|]]: [[Infinitesimal interconnection variation in nonlinear networked systems| papers/YangBurden2013.pdf]], co-authored with [[Insoon Yang|]]

June 2013: presented on [[reducing templates to anchors|]] in the 2013 [[Dynamic Walking|]] meeting at CMU in Pittsburgh, PA, USA.  As a bonus, [[Shai Revzen|]] presented our joint work on [[robust stability arising from simultaneous transitions in hybrid systems|]]

May 2013: presented invited paper on [[reduction and identification of hybrid dynamical models for terrestrial locomotion| SPIE2013]] at [[ARL|]] in Adelphi, MD, USA and [[SPIE DSS|]] in Baltimore, MD, USA ([[slides| talks/2013spie.pdf]]) ([[paper| papers/BurdenSastry2013.pdf]]); thanks to Chris Kroninger and Will Nothwang for organizing the invited session and hosting the group at ARL!

April 2013: [[featured maker| Open Make]] of tiny tech at the [[Lawrence Hall of Science|]] ([[photos|]])

March 2013: presented at the Controls seminar at the University of Michigan in Ann Arbor, MI, USA ([[slides| talks/20130322umich.pdf]]); thanks to [[Shai Revzen|]] for inviting me, and all the ~U-M folks for stimulating conversations!

Feb 2013: pre-print on metrization and simulation of hybrid control systems available (arXiv: [[1302.4402|]]) ([[pdf| papers/BurdenGonzalezVasudevan2013.pdf]])

Feb 2013: article investigating neuromechanical response of running cockroaches to large lateral perturbations to appear in Biological Cybernetics (doi: [[10.1007/s00422-012-0545-z|]]) ([[pdf| papers/RevzenBurden2013.pdf]]); [[UMich press release|]] featured in [[ScienceDaily|]], [[Discovery News|]], [[Wired UK|]], [[Popular Science|]], [[NSF Science360|]]

Jan 2013: presented a technique for [[using reduced-order models to study dynamic legged locomotion| SICB2013]] at [[SICB|]] in San Francisco, CA, USA

Dec 2012: co-organized and [[presented| CDC2012]] at a workshop on [[Control Systems in the Open World|]] at [[CDC|]] in Maui, HI, USA
Minor tweaks and bugfixes for OSX.
!!!Disable Adobe Updater
I have tried many different "solutions" with varying degrees of success:

!!!![[This blog|]]
cd ~/Library/LaunchAgents
launchctl remove `basename com.adobe.ARM.* .plist`
rm com.adobe.ARM.*

!!!![[Adobe Itself|]]
Make a file called  com.adobe.~AdobeUpdater.Admin.plist  with the following text:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">
then save it to /Library/preferences.
!!![[Force font smoothing on non-Apple monitors|]]
defaults -currentHost write -globalDomain AppleFontSmoothing -int 2

Available [[here|]]
!!!Nov 9, 2012
I visited the honors chemistry class at [[Oakland Technical High School|]] in East Oakland.  We had a great discussion about the defining properties of robots -- information processing, physical embodiment, and mechanical work -- I look forward to returning!
The [[Lawrence Hall of Science|]] partnered with the [[Maker Education Initiative|]] to run a series of "Open Make" events targeting young makers.  After seeing the [[press coverage|]] for our [[Biological Cybernetics paper|]], they invited me to be a "featured maker" and teach kids how to build robotic cockroaches.

[[Photos from the event|]] are available; here are a few featuring my demonstration:
<a href="" title="DSC_9082 by LHS Ingenuity Lab, on Flickr"><img src="" width="400" height="267" alt="DSC_9082"></a>
<a href="" title="DSC_9081 by LHS Ingenuity Lab, on Flickr"><img src="" width="400" height="267" alt="DSC_9081"></a>

Video discussing the motivation for the event:
<html><iframe width="560" height="315" src="" frameborder="0" allowfullscreen></iframe></html>
Command-line server for streaming 2D data from [[OptiTrack Camera SDK|]] over a socket.  Python script provided to save & load data.
hg clone

{{{mercurial OptiTrackCameraSDK python numpy}}}
To download and test the optimization code:
$ git clone
$ cd opt
$ mkdir ex
$ cp ex/
$ ipython
ipy$ run opt ex/
The file '''' specifies the cost function, parameters, and initial guess for the minimizer.
I am dedicated to broadening awareness of and participation in engineering, science, and mathematics.  

[[Link to all outreach activities| index.html#tag:outreach]]

!!![[Open Make @ the Hall| Open Make]]
2013/04/20: Thanks to the [[Maker Education Initiative|]] and the [[Lawrence Hall of Science|]] for inviting me to be a featured maker at [[Open Make: Tiny Tech|]]!  
<a href="" title="DSC_9082 by LHS Ingenuity Lab, on Flickr"><img src="" width="400" height="267" alt="DSC_9082"></a>
<a href="" title="DSC_9081 by LHS Ingenuity Lab, on Flickr"><img src="" width="400" height="267" alt="DSC_9081"></a>

!!!K-12 Classrooms
Together with [[Kevin Peterson|]] and the [[EEGSA Outreach|]] organization I designed a ~1hr robotics activity for K-12 classrooms that combines [[lecture material| talks/or/2012robotics.pdf]] with hands-on robot design.

2013/11/21: [[Coliseum College Prep Academy]] in East Oakland, CA

2013/11/20: [[Coliseum College Prep Academy]] in East Oakland, CA

2013/11/13: [[Lincoln Elementary|]] in Oakland, CA

2013/11/06: [[Bentley School|]] in Oakland, CA

2013/10/12: [[Lawrence Hall of Science|]] in Berkeley, CA

2013/04/03: [[Joaquin Miller Elementary School]] in Oakland, CA

2012/12/03: [[Boost!]] in West Oakland, CA

2012/11/27: [[Pittsburg High School]] in Pittsburg, CA

2012/11/09: [[Oakland Technical High School]] in North Oakland, CA

2012/11/02: [[Coliseum College Prep Academy]] in East Oakland, CA

2012/03/22: [[Coliseum College Prep Academy]] in East Oakland, CA

!!![[Summer Institute for Mathematics at the University of Washington|]]
I regularly run a [[short course in robotics| talks/or/2009simuw.pdf]] at the [[Summer Institute for Mathematics at the University of Washington|]].  This is a particular pleasure since I participated in the inaugural (2003) cohort of this program.

!!![[UW MathDay|]]
From 2009 -- 2012 I delivered a [[robotics presentation| talks/or/2012mathday]] at the University of Washington's huge [[MathDay|]], an annual event that draws thousands of high school students to campus.
<div class='header'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>

<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
<<bibliography submitted.bib showAll>>

!!!In preparation
<<bibliography inprep.bib showAll>>

<<bibliography journal.bib showAll>>

<<bibliography conference.bib showAll>>
!!!Nov 27, 2012
Sana Vaziri, [[Kevin Peterson|]] and I visited 2 robotics and 2 architectural design classes at [[Pittsburg High School|]].  These students devised several unique designs, including a sideways wall-follower!
When, upon my graduation and departure from UW EE, my [[undergraduate research advisor and mentor|]] gave me Stephen Jay Gould's memoir about (one of) his biggest scientific achievement(s), I was perplexed. I felt that Eric and I bonded over many shared intellectual interests, but the historical development of evolutionary paleobiology was not one of them. Where was the obscure mathematics textbook on Morse theory? Or the seemingly far more apt pop sci bio-inspiration book by Vogel?

Needless to say, I didn't finish the book that summer. I was overwhelmed by Gould's florid academese, but mostly //I didn't get it//. It wasn't until 5 years later, having read [[Kuhn's classic essay| Structure-of-Scientific-Revolutions]] and struggled most of the way through a ~PhD, that I returned to the book and realized what a gem it really is.

!!!For the uninitiated
Eldredge and Gould presented a now-seminal paper in an annual paleobiology meeting touting the ubiquitous stasis of species in the paleontological record as strong evidence against the view (dating back to Darwin himself) that evolution is a continual gradual process. Controverting this paradigm of phyletic gradualism, Eldredge and Gould argued that species persist in equilibrium for long spans of geological time, undergoing (relatively) rapid periods of punctuational change. Contrary to the prevailing view that the apparent stasis of species was merely symptomatic of an incomplete paleontological record, they asserted that “stasis //is// data”, and that the burden of proof for phyletic gradualism now rested on its proponents.

!!!A case study in //paradigm shift//
The dissemination and adoption of punctuated equilibrium, as documented in Gould's 2007 book, is a classic example of Kuhn's theory of punctuational change characterizing scientific progress (//paradigm shift// being Kuhn's term). In addition to four solid chapters spent motivating, articulating, and defending the scientific theory, Gould devotes a final chapter and appendix to broader interpretations and implications for punctuational modes of change, as well as an anecdotal and subjective account of the less-than-scientific resistance and critique rendered by his colleagues in the 30+ years that elapsed between the original conference paper and this monograph.

!!!Lessons for revolutionaries
Although [[normal science|]] can be rewarding, I posit that the majority of scientists (a label I surreptitiously ascribe to engineering researchers as well as the biologists and physicists I collaborate with) are in this game for the revolutions. Specifically: I would venture that most of us dream of someday (soon) finding ourselves at the tempestuous vortex of serendipity and insight resulting in an impulsive, lurching shift of conceptual inertia that defines a scientific epoch. [[Black swans|]] are rare, but they are not chimeras; one should prepare to readily identify the errant bird. 

I derive the following lessons from Gould's example:
# question assumptions, particularly the most obvious
# read broadly (across disciplines), and ask experts naïve questions
# do not be afraid to be tenacious, and stubborn, and (ultimately) annoying
# accept all scientific criticism; reject ad hominem attacks

<<bibliography gould.bib showAll>>
First, [[install MacPorts|]].  Then:
sudo port install python27 py27-ipython py27-numpy py27-scipy py27-matplotlib

If you're recovering from [[Matlab|]], note that there isn't a standard IDE for Python.  Instead, you'll open an [[IPython|]] shell that is more flexible and informative than the Matlab shell, generate superior 2D plots using [[Matplotlib|]], and easily modify source files using [[your favorite text editor|]].

I prefer the following default options for the [[IPython|]] shell:
alias ipython="ipython --automagic --pdb --no-confirm-exit --no-banner"
Put this in your ~/.bash_profile to make the settings permanent.

By enabling the Python debugger (''pdb'' flag, above), you can insert janky breakpoints by putting 
(that's right, a divide-by-zero) into your code.

To ensure output .pdf and .eps files conform to IEEE and arXiv standards, add the following to ~/.matplotlib/matplotlibrc:
pdf.fonttype : 42
text.usetex : True

To support animations and enable easy window manipulation (see tk post below), also add:
backend : TkAgg
interactive : True

!!!Tk figure size & position
[[Shai Revzen|]] showed me these great functions for manipulating figure position and size (note that you likely need the TkAgg backend for these to work):
import pylab as plt

def get_geom(fig=None,n=None):
  Get figure geometry string. 
  if fig is None:
    if n is None:
      fig = plt.gcf()
      fig = plt.figure(n)
  # Access the Tk interface for the canvas
  win = fig.canvas.manager.window
  return win.geometry()

def fig_geom(geom="WxH+0+0",fig=None,n=None):
  Set figure geometry.
  The magical constants W and H can be used for screen width and height
    fig -- Figure object or None to use current figure
    geom -- Tk window geometry string
  if fig is None:
    if n is None:
      fig = plt.gcf()
      fig = plt.figure(n)
  # Access the Tk interface for the canvas
  win = fig.canvas.manager.window
  wid = win._w
  Tk =
  # Get screen and window dimensions
  if "W" in geom:
    geom = geom.replace("W",str(Tk("winfo","screenwidth",wid)))
  if "H" in geom:
    geom = geom.replace("H",str(Tk("winfo","screenheight",wid)))

Here are some instructions for profiling Python code collated from a [[few|]] [[posts|]] on [[stackoverflow|]].

To generate a text summary sorted by time:
python -m cProfile -s time arg1 arg2 > test.txt
To save a .pstats file from within Python:
import cProfile as profile"test()", "test.pstats")
To save a .pstats file from the command line:
python -m cProfile -o test.pstats arg1 arg2
To generate a graph in .svg format:
{{{ -f pstats test.pstats | dot -Tsvg -o test.svg
(this will require [[graphviz|]] and [[Gprof2dot|]]; using macports on OSX you can run:
sudo port install graphviz
git clone ~/src/gprof2dot
ln -s ~/src/gprof2dot/ ~/bin/
to get these packages)
[[Materials| talks/qual/]]
For the uninitiated, [[Radiolab|]] is a fantastic science podcast.  As I work my way through [[their free back-catalog|]] I'll highlight some of my favorites.

!!![[A 4-Track Mind|]]
Focusing on `national treasure' [[Bib Milne|]]'s ability to play several pieces of music simultaneously (both manually and mentally), there are some striking connections with the memory segment of the [[Limits|]] podcast.

!!![[A War We Need|]]
Though the drama is a little overwrought, imagining the incredible complexity & importance of the life of [[phytoplankton|]] was very compelling.

Possibly one of my favorite episodes -- fascinating anecdotes about limits on mind & body.  I especially enjoyed thinking about [[Steve Strogatz's|]] concern that we may (soon? eventually?) reach the limit on our ability to obtain scientific insight.

Fascinating anecdotes about the role of psychology in medicine.

!!![[Unraveling Bolero|]]
It's a bit of a reach when they retroactively diagnose Ravel with a very specific neurological disorder, but the vignettes in this podcast emphasize the dominion the language centers in the brain have over our consciousness.
[[This article|]] (recommended to me by [[Prof. Gonzalez|]]) advocates imbuing robots with ethical principles.

I found the article timely, less because of the potential danger of [[autonomous car crashes|]] than the [[controversy|]] surrounding our [[increased deployment|]] of [[UAVs|]] in countries we have not declared war on.
I have been using the [[Rosetta Stone|]] software for the past few months to start learning Spanish. My goals include expanding my [[outreach|]] efforts to [[ESL|]] students, comfortably traveling in Latin America, and reading --[[the Quixote|]]-- --[[2666|]]--  any Spanish book written above a fifth grade reading level.

Having only studied [[ASL|]] in high school to satisfy the “foreign language” requirement for college admissions, I am starting from no experience learning to speak another language. Though many debate the [[efficacy|]] / [[price|]] ratio of the software,  I have found it to be a useful tool to begin learning vocabulary, pronunciation, and listening skills (the latter two of which are notoriously difficult to learn without a human instructor). 

Since I found very little information online describing how to use Rosetta Stone (RS) in an effective and comprehensive self-study program, I will post my techniques here.

RS divides its course into multiple Levels, each comprised of four Units, which are themselves comprised of four main Lessons and multiple reinforcement lessons spaced out (logarithmically?) between the main lessons. Devoting 30 -- 60  minutes per day, I was easily able to get through one Unit per week, and hence Levels 1 -- 3 ([[bundled together|]] for ~$400) in approximately 3 months.

I am in full agreement with [[this YouTube video|]] -- it is very difficult to learn grammar from RS. After the first few Levels you will start to intuit when a verb must be conjugated, but I am still unable to consistently recall the correct conjugation. I think an effective strategy is to buy the workbook from a first-year college-level Spanish course and do the exercises in parallel with RS.

RS eases you into every new word & phrase gradually, so the lessons can quickly become tedious and repetitive. To make the Listening exercises more challenging, I close my eyes, visualize what is being said,  and try to repeat it aloud before looking at the screen. This practice also seems to help me directly connect the Spanish language to my cognitive states, i.e. I do not need to first translate Spanish to English to understand what is being said.
!!Presentation Information
<<bibliography conference.bib BurdenRevzen2013>>

Links: [[slides| talks/2013sicb.pptx]], [[abstract|]]

As a one-sentence summary to anyone who missed the talk: we propose a computationally-tractable nonlinear regression algorithm to estimate unknown parameters and states in reduced-order dynamic models from empirical time-series data (e.g. body or limb kinematic data collected from high-speed video or motion capture).

!!Theoretical and Computational Tools
The underlying approach appeared in two control theory conference publications: one describing the `smoothing' construction for piecewise-defined (or //hybrid//) dynamical models, and the other applying the construction to enable implementation of first-order (gradient descent) algorithms to estimate unknown model parameters and states.

The notation will be somewhat dense to someone outside the control theory community -- please feel free to contact me with any questions or requests for clarification.  The sourcecode to generate the plots in the papers is available on the CDC2011 and SysID2012 pages.

''-- Smoothing piecewise-defined (//hybrid//) models:''
<<bibliography submitted.bib BurdenRevzen2013floq>>

<<bibliography conference.bib BurdenRevzen2011>>

Theorem 1 contains the full statement of the result: under a non-degeneracy condition on the [[Poincaré map|]] associated with a periodic orbit in a hybrid dynamical system, one can extract a (generally lower-dimensional) smooth dynamical system whose dynamics are `equivalent' to that of the hybrid system after a finite amount of time has elapsed.  This result is just a collation of Lemmas 1 -- 3 (applicable to smooth systems) interpreted in the context of hybrid dynamical systems.

''-- Estimating parameters and states in models of legged locomotion:''
<<bibliography conference.bib BurdenOhlsson2012>>

Section 4 contains the formulation of the prediction error minimization problem we aim to solve; Section 4.5 in particular provides details of the coordinates we actually search over and the algorithm we implement to do so.  For my SICB talk I used a [[general-purpose least-squares solver|]].

''-- Numerical simulation for models of legged locomotion:''
<<bibliography submitted.bib BurdenGonzalezVasudevan2013>>

<<bibliography conference.bib BurdenGonzalez2011>>

As a final note: if you have ever tried to implement a simulation of legged locomotion, you likely came up against the difficult problem of accurately detecting and handling the discrete `events' that occur when limbs touch down or lift off from the substrate.  In another series of papers we proposed a method that does not require root-finding or time-stepping and hence is particularly easy to implement; the details and simulation code are available on the CDC2011 page.

Aside from the simplicity of implementation, we also provide the first formal proof of convergence for a numerical simulation algorithm applied to piecewise-defined (//hybrid//) models -- no other piece of code (MATLAB, I'm looking at you!) has such a guarantee.
!!!A First Course in Robotics
Long relegated to performing menial jobs on assembly lines, robots are now poised to infiltrate our homes and classrooms. The introduction of automated vacuum cleaners and a host of programmable interactive toys witness this migration and give clues as to the roles robots will inevitably fill in our daily lives. During this short course, we'll discuss potential applications for this emerging robotic presence and explore some of the challenges facing engineers trying to build these systems. In particular, we'll learn fundamental principles of robot design and apply these ideas to build maze-navigating robots.
!!![[Reduction and Identification for Hybrid Dynamical Models of Terrestrial Locomotion| pubs/BurdenSastry2013.pdf]]

''To generate the schematic and plots in the paper:''
$ hg clone spie2013
$ cd spie2013
$ ipython 
ipy$ run hop --fp
ipy$ run -i hop --sch
ipy$ run -i hop --ic

Links: [[conference|]]; [[paper| pubs/BurdenSastry2013.pdf]]; [[slides| talks/2013spie.pdf]]

{{{mercurial python ipython numpy scipy matplotlib}}}
!!!Checklist from Wilson //et al.// 2012
The paper by <<cite WilsonAruliah2012 bibliography:computing.bib>> provides a cogent and comprehensive review of proven techniques to improve coding outcomes.  Their checklist reference is particularly valuable, so I've reproduced it here and marked which tenants I already adhere to.

1. Write programs for people, not computers.
[ ] A program should not require its readers to hold more than a handful of facts in memory at once.
[ ] Make names consistent, distinctive, and meaningful.
[x] Make code style and formatting consistent.
2. Let the computer do the work.
[x] Make the computer repeat tasks.
[x] Save recent commands in a file for re-use. (c) Use a build tool to automate workflows.
3. Make incremental changes.
[x] Work in small steps with frequent feedback and course correction. (b) Use a version control system.
[x] Put everything that has been created manually in version control.
4. Don’t repeat yourself (or others).
[x] Every piece of data must have a single authoritative representation in the system.
[x] Modularize code rather than copying and pasting. (c) Re-use code instead of rewriting it.
5. Plan for mistakes.
[ ] Add assertions to programs to check their operation. (b) Use an off-the-shelf unit testing library.
[ ] Turn bugs into test cases.
[x] Use a symbolic debugger.
6. Optimize software only after it works correctly.
[x] Use a profiler to identify bottlenecks.
[x] Write code in the highest-level language possible.
7. Document design and purpose, not mechanics.
[x] Document interfaces and reasons, not implementations.
[ ] Refactor code in preference to explaining how it works.
[x] Embed the documentation for a piece of software in that software.
8. Collaborate.
[ ] Use pre-merge code reviews.
[x] Use pair programming when bringing someone new up to speed and when tackling particularly tricky problems.
[ ] Use an issue tracking tool.

<<bibliography computing.bib showAll>>

<<closeAll>><<permaview>><<newTiddler>><<newJournal "MMM DD YYYY" "blog">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
~PhD candidate in EECS at Berkeley
Sam Burden
~TiddlyWiki uses several "special tiddlers" to perform a number of essential functions as follows:
*[[Configuration]] tiddlers configure the layout of the page, including the MainMenu, the SiteTitle, the SiteSubtitle and other features. 
*A tiddler called DefaultTiddlers is used to list the tiddlers that are shown at startup. 
*A tiddler called SaveChanges is automatically displayed if there's a problem with saving. Any of them can be edited with the changes taking effect immediately.
* MoreTab, MissingTiddlers, OrphanTiddlers

''Inspired by [[TiddlyPom|]]''

|Created by|SaqImtiaz|
|Version|0.21 |
Provides a simple splash screen that is visible while the TW is loading.

Copy the source text of this tiddler to your TW in a new tiddler, tag it with systemConfig and save and reload. The SplashScreen will now be installed and will be visible the next time you reload your TW.

Once the SplashScreen has been installed and you have reloaded your TW, the splash screen html will be present in the MarkupPreHead tiddler. You can edit it and customize to your needs.

* 20-07-06 : version 0.21, modified to hide contentWrapper while SplashScreen is displayed.
* 26-06-06 : version 0.2, first release


function pausecomp(ms) {
ms += new Date().getTime();
while (new Date() < ms){}

window.restart = function()
{   if (document.getElementById("SplashScreen"))
        document.getElementById("SplashScreen").style.display = "none";
      if (document.getElementById("contentWrapper"))
        document.getElementById("contentWrapper").style.display = "block";

    if (splashScreenInstall)
        displayMessage("TW SplashScreen has been installed, please save and refresh your TW.");

var oldText = store.getTiddlerText("MarkupPreHead");
if (oldText.indexOf("SplashScreen")==-1)
   {var siteTitle = store.getTiddlerText("SiteTitle");
   var splasher='\n\n<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>'+siteTitle +'</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>';
   if (! store.tiddlerExists("MarkupPreHead"))
       {var myTiddler = store.createTiddler("MarkupPreHead");}
      {var myTiddler = store.getTiddler("MarkupPreHead");}
      var splashScreenInstall = true;
Here's a [[Folk Theorem|]] whose formal justification eluded me for an aggravating span of time (if you have a reference, please send it my way!):

''Thm:'' (//Folk//) The solution of $n$ "linearly independent equations" in $n$ unknowns "varies continuously" as the equations are "perturbed".

Thus the solution of a generic set of equations is "structurally stable".  There are several undefined terms in the statement of this Thm; here's a reformulation that's slightly sharper:

''Thm:'' (//Informal//) Suppose for $h\in C^r(R^n,R^n)$ that there exists $z\in R^n$ such that $h(z) = 0$ and $Dh(z)$ is invertible.  Then for all functions $\tilde{h}$ "sufficiently close to $h$", there exists a unique solution $\tilde{z}$ "near $z$" to the equation $\tilde{h}(x) = 0$.

This sounds more authoritative, but still requires a formal notion of "closeness" in the space of smooth functions.  If we restrict our attention to parameterized perturbations, we obtain an easy version of the result using the (classical, finite-dimensional) Implicit Function Theorem (IFT in the sequel; see Theorem 7.8 in Lee, 2002):

''Thm:'' (//Parameterized//)  Suppose for $h\in C^r(R^d\times R^n,R^n)$ that there exists $(\zeta,z)\in R^d\times R^n$ such that $h(\zeta,z) = 0$ and $D_z h(\zeta,z)$ is invertible.  Then there exists a function $\sigma:U\rightarrow V$ from a neighborhood $U\subset R^d$ of $\zeta$ to a neighborhood $V\subset R^n$ of $z$ such that for all $\tilde{\zeta}\in R^d$ the we have $h(\tilde{\zeta},\sigma(\tilde{\zeta})) = 0$ and for all $x\in V\setminus\{\sigma(\tilde{\zeta})\}$ we have $h(\tilde{\zeta},x) \ne 0$.

This is workable for most purposes, but it's dissatisfying that the perturbation must be finitely parameterized.  However, reliance on IFT is suggestive since there exist extensions to Banach spaces (proofs in both finite and infinite dimensions make use of the Contraction Mapping Principle; see for instance Theorem 4.E in Zeidler, 1995).  Restricting our attention to a compact neighborhood of the equation's solution, the uniform norm gives the space of smooth functions the structure of a Banach space (see Chapter 2 in Hirsch, 1976)!  This yields the following:

''Thm:'' Suppose for $h\in C^r(R^n,R^n)$ that there exists $z\in R^n$ such that $h(z) = 0$ and $Dh(z)$ is invertible.  Then there exists $\alpha,\beta > 0$ and a function $\sigma\in C^r(B_\alpha(h),B_\beta(z))$ such that for all $\tilde{h}\in B_\alpha(h)$ we have $\tilde{h}(\sigma(\tilde{h})) = 0$ and for all $x\in B_\beta(z)\setminus\{\sigma(\tilde{h})\}$ we have $\tilde{h}(x) \ne 0$.

This is satisfying for several reasons:
# it is valid for ''any'' smooth perturbation;
# the solution depends ''smoothly'' on the perturbation;
# there is a ''uniform bound'' on the allowed perturbation size (i.e. the result does not depend on the "direction" in which you perturb).
<<bibliography geometry.bib Lee2002 Hirsch1976>>

<<bibliography analysis.bib Zeidler1995>>
I just discovered [[Kuhn's classic essay|]]. Though many of the ideas have been assimilated into academic culture -- the phrase “[[paradigm shift|]]” and [[science as a social phenomenon|]] -- I found the piece informative and highly relevant. It helped clarify and contextualize some frustrations I have as a student and researcher, and provoked more fundamental questions about the purpose and goal of academic research in engineering.  This post will evolve as I discuss the ideas with colleagues.

!!!Narrative fallacy in science curriculum
Kuhn observes that the main pedagogical apparatus of a typical [[R1 university|]] -- textbooks -- efficiently indoctrinate students with the tools and perspectives of the dominant scientific paradigm while suppressing competing interpretations:
Because they aim quickly to acquaint the student with what the contemporary scientific community thinks it knows, textbooks treat the various experiments, concepts, laws, and theories of the current normal science as separately and as nearly seriatim as possible.
> <<cite Kuhn1970 bibliography:kuhn.bib>>, pg. 140
I found this narrative structure of physics and chemistry textbooks extremely misleading and difficult to follow as an undergraduate.  Though difficult to implement, it strikes me that a better curriculum could be crafted around more open-ended exploration and assimilation of results of laboratory experiments.

!!!The human condition corrupts scientific progress
[[Resistance by scientists to scientific discovery|]] is an acknowledged phenomenon.  Kuhn contributes the observation that this resistance is necessary for the progress of [[normal science|]], rather than a psychological failing attributable to ego or cognitive bias:
Though the historian can always find scientists who were unreasonable to resist for as long as they did, they will not find a point at which resistance becomes illogical or unscientific.  At most one may wish to say that the person who continues to resist after the whole profession has been converted has //ipso facto// ceased to be a scientist.
> <<cite Kuhn1970 bibliography:kuhn.bib>>, pg. 159
This is refreshing since it redirects frustration one may feel when a progressive paper is rejected away from unproductive bitterness toward renewed progress.

!!!Open questions
*Does engineering research (an enormous enterprise today compared to the 1960's) fit Kuhn's `Structure` ?
*Regardless, does engineering research qualify as a `science` (either under Kuhn's definition or another) ?

Kuhn wrote in a time when academia was utterly dominated by men; I elected to sanitize the gender bias in the quotes above.

The essay is a goldmine of landmark papers in the history, philosophy, psychology, & sociology of science -- many such citations are included below even if I haven't been able to assimilate them above.

<<bibliography kuhn.bib showAll>>
/*Blackicity Theme for TiddlyWiki*/
/*Design and CSS by Saq Imtiaz*/
/*Version 1.0*/
body{	font-family: Monaco, Courier New, monospace, "Neue Helvetica", Helvetica, "Lucida Grande", Verdana, sans-serif;
	background-color: #fff;
	color: #333;}

img{ border: 2px solid #666; margin: 10px 10px 10px 10px }

.header { background: #000; color: #fff; }

.viewer table.bd0,
.viewer table.bd0 * { border:0;padding:0 4px 4px 0;vertical-align:top; }

#topMenu {position:relative; background:#282826; padding:10px; color:#fff;font-family:Monaco, Courier New, monospace,'Lucida Grande', Verdana, Sans-Serif;}
#topMenu br {display:none;}

#topMenu a{			color: #999;
			padding: 0px 8px 0px 8px;
			border-right: 1px solid #444;}
#topMenu a:hover {color:#fff; background:transparent;}

#displayArea {margin-left:1em; margin-bottom:2em; margin-top:0.5em;}

text-decoration: none;   background:transparent; 

text-decoration: none;   background:transparent; 

.viewer a, .viewer a:hover {border-bottom:1px dotted #333; font-weight:bold; text-decoration:none}

.viewer .button, .editorFooter .button{
color: #333;
border: 1px solid #333;

.viewer .button:hover,
.editorFooter .button:hover, .viewer .button:active, .viewer .highlight,.editorFooter .button:active, .editorFooter .highlight{
color: #fff;
background: #333;
border-color: #333;

.tiddler .subtitle { display:none; } 

.tiddler .viewer {line-height:1.45em; padding: 0px 0px 0px 20px}
.title {color:#222; border-bottom:2px solid#222; font-family:Monaco, Courier New, monospace,'Lucida Grande', Verdana, Sans-Serif; font-size:1.45em; margin-bottom: 10px}
.subtitle, .subtitle a { color: #999999; font-size: 0.85em;margin:0.2em;}
.shadow .title{color:#999;}

.toolbar {font-size:90%;}
.selected .toolbar a {color:#999999;}
.selected .toolbar a:hover {color:#333; background:transparent;border:1px solid #fff;}

.toolbar .button:hover, .toolbar .highlight, .toolbar .marked, .toolbar a.button:active{color:#333; background:transparent;border:1px solid #fff;}

#sidebar { margin-bottom:2em !important; margin-bottom:1em; right:0;

#sidebarOptions { padding-top:2em;background:#f3f3f3;padding-left:0.5em;}

#sidebarOptions a {
                        border:1px solid #f3f3f3;
			text-decoration: none;

#sidebarOptions	a:hover, #sidebarOptions a:active {
			background-color:#fff;border:1px solid #fff;

#sidebarOptions input {border:1px solid #ccc; }

#sidebarOptions .sliderPanel {
	background: #f3f3f3; 	font-size: .9em;

#sidebarOptions .sliderPanel input {border:1px solid #999;}
#sidebarOptions .sliderPanel .txtOptionInput {border:1px solid #999;width:9em;}

#sidebarOptions .sliderPanel a {font-weight:normal; color:#555;background-color: #f3f3f3; border-bottom:1px dotted #333;}

#sidebarOptions .sliderPanel a:hover {
background-color: #f3f3f3;
border-bottom:1px dotted #111;
 .listTitle {color:#222;}
#sidebarTabs {background:#f3f3f3;}

#sidebarTabs .tabContents {background:#cfcfcf;}

#sidebarTabs .tabUnselected:hover {color:#999;}

#sidebarTabs .tabSelected{background:#cfcfcf;}

#sidebarTabs .tabContents .tiddlyLink, #sidebarTabs .tabContents .button{color:#666;}
#sidebarTabs .tabContents .tiddlyLink:hover,#sidebarTabs .tabContents .button:hover{color:#222;background:transparent; text-decoration:none;border:none;}

#sidebarTabs .tabContents .button:hover, #sidebarTabs .tabContents .highlight, #sidebarTabs .tabContents .marked, #sidebarTabs .tabContents a.button:active{color:#222;background:transparent;}

#sidebarTabs .txtMoreTab .tabSelected,
#sidebarTabs .txtMoreTab .tab:hover,
#sidebarTabs .txtMoreTab .tabContents{
 color: #111;
 background: #f3f3f3; border:1px solid #f3f3f3;

#sidebarTabs .txtMoreTab .tabUnselected {
 color: #555;
 background: #AFAFAF;

.tabSelected{color:#fefefe; background:#999; padding-bottom:1px;}
 .tabSelected, .tabSelected:hover {
 color: #111;
 background: #fefefe;
 border: solid 1px #cfcfcf;

 .tabUnselected {
 color: #999;
 background: #eee;
 border: solid 1px #cfcfcf;
.tabUnselected:hover {text-decoration:none; border:1px solid #cfcfcf;}
.tabContents {background:#fefefe;}

.tagging, .tagged {
border: 1px solid #eee;
background-color: #F7F7F7;

.selected .tagging, .selected .tagged {
background-color: #f3f3f3;
border: 1px solid #ccc;

.tagging .listTitle, .tagged .listTitle {
color: #bbb;

.selected .tagging .listTitle, .selected .tagged .listTitle {
color: #333;

.tagging .button, .tagged .button {
.selected .tagging .button, .selected .tagged .button {

.highlight, .marked {background:transparent; color:#111; border:none; text-decoration:none;}

.tagging .button:hover, .tagged .button:hover, .tagging .button:active, .tagged .button:active {
border: none; background:transparent; text-decoration:none; color:#333;

.popup {
background: #cfcfcf;
border: 1px solid #333;

.popup li.disabled {
color: #000;

.popup li a, .popup li a:visited {
color: #555;
border: none;
text-decoration: none;

.popup li a:hover {
background: #f3f3f3;
color: #555;
border: none;
text-decoration: none;

#messageArea {

border: 4px dotted #282826;
background: #F3F3F3;
color: #333;

#messageArea a:hover { background:#f5f5f5; border:none; text-decoration: none; }

#messageArea .button{
color: #333;
border: 1px solid #282826;

#messageArea .button:hover {
color: #fff;
background: #282826;
border-color: #282826;

.tiddler {padding-bottom:10px;}

.viewer blockquote {
border-left: 5px solid #282826;

.viewer table, .viewer td {
border: 1px solid #282826;

.viewer th, thead td {
background: #282826;
border: 1px solid #282826;
color: #fff;
.viewer pre {
border: 1px solid #ccc;
background: #f5f5f5;

.viewer code {
color: #111; background:#f5f5f5;

.viewer hr {
border-top: dashed 1px #222; margin:0 1em;

.editor input {
border: 1px solid #ccc; margin-top:5px;

.editor textarea {
border: 1px solid #ccc;

h1,h2,h3,h4,h5 { color: #282826; background: transparent; padding-bottom:2px; font-family:Monaco, Courier New, monospace, Arial, Helvetica, sans-serif; }
h1 {font-size:22px;}
h2 {font-size:14px;}
h3 {font-size: 14px;}

Just a quick script to streamline the creation of playlists on the [[SwiMP3|]] waterproof mp3 player.  The player sorts songs alphabetically, so simply dragging files from your filesystem or iTunes will usually yield an incorrect order.  Instead, create .m3u playlists directly on the USB device, then execute the following Python code in the same directory.

import os
from glob import glob

sfx = '.m3u'
lis = glob('*'+sfx)

for li in lis:
  l = li.strip(sfx)
  if not os.path.exists(l):
    cmd = 'mkdir "{l}"'.format(l=l)
    print cmd
    fis = open(li,'r').readline().split('\r')[::2][1:]
    for n,fi in enumerate(fis):
      f = fi.split('/')[-1]
      cmd = 'cp "{fi}" "{l}/{n:04d}_{f}"'.format(fi=fi,l=l,n=n,f=f)
      print cmd

If you update a playlist, simply delete the corresponding folder and re-run the script.
!!![[Parameter Identification Near Periodic Orbits of Hybrid Dynamical Systems| pubs/BurdenOhlsson2012.pdf]]

''To generate the schematic and plots in the paper:''
$ hg clone sysid2012
$ cd sysid2012
$ ipython 
ipy$ run hop --fp
ipy$ run -i hop --sch
ipy$ run -i hop --ic
ipy$ run -i hop --icpar

Links: [[slides| talks/2012sysid.pdf]], [[paper| pubs/BurdenOhlsson2012.pdf]]

{{{mercurial python ipython numpy scipy matplotlib}}}
chkAnimate: false
chkToggleLinks: false
txtBackupFolder: tmp
[[Optimization for models of legged locomotion: parameter estimation, gait synthesis, and experiment design| talks/2014sicb.pptx]] ([[abstract|]])
Society for Integrative and Comparative Biology
Austin, TX, USA, 2014

[[Bio-Inspired Reduction and Robustness of Dynamic Robot Gaits| UMD2013]]
University of Maryland, College Park, MD, USA, 2013

[[Reduction and Identification for Hybrid Dynamical Models of Terrestrial Locomotion| talks/2013spie.pdf]]
SPIE Conference on Defense, Security, and Sensing (DSS)
Baltimore, MD, USA, 2013
Army Research Labs (ARL)
Adelphi, MD, USA, 2013

[[From Templates to Anchors: Exact and Approximate Reduction in Models of Legged Locomotion| talks/2013dw.pdf]] ([[abstract|]])
Dynamic Walking
Pittsburgh, PA, USA, 2013

[[Using reduced—order models to study dynamic legged locomotion: Parameter identification and model validation| SICB2013]] ([[slides| talks/2013sicb.pptx]]) ([[abstract|]])
Society for Integrative and Comparative Biology
San Francisco, CA, USA, 2013

[[Reduction and Robustness via Intermittent Contact| talks/2012cdc.pdf]]
Workshop: [[Control Systems in the Open World|]]
IEEE Conference on Decision and Control (CDC)
Maui, HI, USA, 2012

[[Parameter Identification Near Periodic Orbits of Hybrid Dynamical Systems| SysID2012]]
IFAC Symposium on System Identification (~SysID)
Brussels, Belgium, 2012

[[Reduction and Identification for Hybrid Dynamical Models of Terrestrial Locomotion| talks/20130322umich.pdf]]
Johns Hopkins University, University of Pennsylvania, University of Delaware, 2011
University of Maryland, Massachusetts Institute of Technology, Harvard University, University of Washington, 2012
SRI International, University of Michigan, 2013

[[Dimension Reduction Near Periodic Orbits of Hybrid Systems| CDC2011]]
IEEE Conference on Decision and Control / European Control Conference (CDC/ECC)
Orlando, FL, USA, 2011

[[On State Estimation for Hybrid Abstractions of Legged Locomotion| talks/2010hscc.pdf]]
Hybrid Systems: Computation and Control (HSCC)
Stockholm, Sweden, 2010

[[A First Course in Robotics| talks/or/2009simuw.pdf]]
University of Washington [[Summer Institute for Mathematics|]] (SIMUW)
Seattle, Washington, USA, 2009, 2010, 2011, 2012

[[Robots that run, climb, flap, and swim| talks/or/2012mathday.pdf]]
University of Washington [[MathDay|]]
Seattle, Washington, USA, 2009, 2010, 2011, 2012 (plenary -- ''1000+ attendees!'')

Mathematical Contest in Modeling (MCM)
University of Washington [[Summer Institute for Mathematics|]] (SIMUW)
Seattle, Washington, USA, 2007, 2008

Heterogeneous Leg Stiffness and Roll in Dynamic Running
International Conference on Robotics and Automation (ICRA)
Rome, Italy, 2007

Pull Yourself Together: Creating Robots that ~Self-Assemble
University of Washington NASA Space Grant Reception
Seattle, Washington, USA, 2007
|Author|Eric Shulman|
|Description|show/hide right sidebar (SideBarOptions)|
<<tiddler ToggleRightSidebar>>
<<tiddler ToggleRightSidebar with: label tooltip>>
Try it: <<tiddler ToggleRightSidebar##show
	with: {{config.options.chkShowRightSidebar?'►':'◄'}}>>
copy/paste the following settings into a tiddler tagged with <<tag systemConfig>> and then modify the values to suit your preferences:
<<tiddler {{
	var co=config.options;
	if (co.chkShowRightSidebar===undefined) co.chkShowRightSidebar=true;
	var sb=document.getElementById('sidebar');
	var da=document.getElementById('displayArea');
	if (sb) {'block':'none';'':'1em';
'';}}>><html><nowiki><a href='javascript:;' title="$2"
	var co=config.options;
	var opt='chkShowRightSidebar';
	var show=co[opt]=!co[opt];
	var sb=document.getElementById('sidebar');
	var da=document.getElementById('displayArea');
	if (sb) {'block':'none';'':'1em';
	var labelShow=co.txtToggleRightSideBarLabelShow||'&#x25C4;';
	var labelHide=co.txtToggleRightSideBarLabelHide||'&#x25BA;';
	if (this.innerHTML==labelShow||this.innerHTML==labelHide) 
	this.title=(show?'hide':'show')+' right sidebar';
	var sm=document.getElementById('storyMenu');
	if (sm) config.refreshers.content(sm);
	return false;
%/<<tiddler {{
	var src='ToggleRightSidebar';
}} with: {{
	var co=config.options;
	var labelShow=co.txtToggleRightSideBarLabelShow||'&#x25C4;';
	var labelHide=co.txtToggleRightSideBarLabelHide||'&#x25BA;';
}} {{
	var tip=(config.options.chkShowRightSidebar?'hide':'show')+' right sidebar';
!!!4pm on Thu Oct 24 in 2164 Martin Hall at UMD College Park
([[announcement|]]) ([[slides| talks/20131024umd.pdf]])
~Bio-Inspired Reduction and Robustness of Dynamic Robot Gaits
Compared to robots, animals are remarkably adept at rapid locomotion on challenging terrain.  Although a rich sensor suite and sophisticated neural circuitry must contribute, the skill exhibited across scale and taxa suggests there are unknown passive mechanisms contributing to performance.  Multi-legged animals coordinate their limbs in unexpected ways: they effect tight synchronization that dramatically reduces their effective mechanical degrees-of-freedom; and they utilize gaits wherein multiple legs impact the terrain nearly simultaneously.  Studying these puzzling phenomena, in this talk I derive new principles for model reduction and robust stability arising from the intermittent contact of limbs with terrain.  Aside from providing theoretical explanations for surprising properties of animal gaits, these results suggest novel mechanisms for design of dynamically-stable robot gaits.
Sam Burden is a ~PhD candidate in Electrical Engineering and Computer Sciences at UC Berkeley advised by Prof. Shankar Sastry.  He is broadly interested in discovering and formalizing principles that enable dynamic locomotion and dexterous manipulation in robotics, biomechanics, and human motor control.  In experimental studies with robots and animals, he adopts a comparative approach that enables demonstration and translation of these principles across scale, material, and morphology.  He is a recipient of the NSF Graduate Research Fellowship and actively contributes to the Army Research Lab's MAST CTA.
The following is a summary of notable user-level feature changes in ~TiddlyWiki v<<version>>:
*''FireFox "privilege" handling''<br>Catch and supress "privilege" error messages in the TWCore backstage Import functions that use FireFox local file I/O or "ajax" remote (http) file access.
*''TiddlySaver''<br>Changes in handling for filenames with Unicode/UTF-8 characters.  Updated new signed security certificate.
*''backstage import''<br>Fixes for importing tiddlers from local files (must be in same directory as current document)
	Author = {Zeidler, E},
	Publisher = {Springer--Verlag},
	Title = {Applied functional analysis and its applications},
	Year = {1995}}
	Author = {Greg Wilson and D. A. Aruliah and C. Titus Brown and Neil P. Chue Hong and Matt Davis and Richard T. Guy and Steven H. D. Haddock and Katy Huff and Ian M. Mitchell and Mark Plumbley and Ben Waugh and Ethan P. White and Paul Wilson},
	Title = {Best Practices for Scientific Computing},
        Institution = {arXiv:1210.0530v4},
        url = {},
	Year = {2012}}
	Author = {Elhamifar, E and Burden, S A and Sastry, S S},
	Title = {Adaptive piecewise-affine inverse modeling of hybrid dynamical systems},
	Booktitle = {IFAC World Congress},
        url = {papers/ElhamifarBurden2014ifac.pdf}
	Year = {2014}}

	Author = {Ratliff, L J and Burden, S A and Sastry, S S},
	Title = {Genericity and structural stability of non-degenerate differential Nash equilibria },
	Booktitle = {American Control Conference},
        url = {papers/RatliffBurden2014acc.pdf},
	Year = {2014}}

	Author = {Burden, S A and Sastry, S S and Full, R J},
	Title = {Optimization for models of legged locomotion: Parameter estimation, gait synthesis, and experiment design},
	Booktitle = {Society for Integrative and Comparative Biology},
        url = {talks/2014sicb.pptx},
	Year = {2014}}

	Author = {Revzen, S and Burden, S A and Kvalheim, M D},
	Title = {Why the trot?},
	Booktitle = {Society for Integrative and Comparative Biology},
        url = {},
	Year = {2014}}

	Author = {Yang, I and Burden, S A and Sastry, S S and Tomlin, C J},
	Title = {Infinitesimal interconnection variation in nonlinear networked systems},
	Booktitle = {IEEE Conference on Decision and Control},
        url = {papers/YangBurden2013.pdf},
	Year = {2013}}

	Author = {Ratliff, L J and Burden, S A and Sastry, S S},
	Title = {Characterization and computation of local Nash equilibria in continuous games},
	Booktitle = {Allerton Conference on Communication, Control, and Computing},
        url = {papers/RatliffBurden2013.pdf},
	Year = {2013}}

	Author = {Burden, S A and Revzen, S and Sastry, S S},
	Title = {From anchors to templates: Exact and approximate reduction in models of legged locomotion},
	Booktitle = {Dynamic Walking},
        url = {papers/BurdenRevzen2013dw.pdf},
	Year = {2013}}

	Author = {Revzen, S and Burden, S A and Koditschek, D E and Sastry, S S},
	Title = {Pinned equilibria provide robustly stable multilegged locomotion},
	Booktitle = {Dynamic Walking},
        url = {papers/RevzenBurden2013dw.pdf},
	Year = {2013}}

	Author = {Burden, S and Sastry, S S},
	Title = {Reduction and identification for hybrid dynamical models of terrestrial locomotion},
	Booktitle = {SPIE Conference on Micro-Nanotechnology Sensors, Systems, and Applications},
        url = {SPIE2013},
	Year = {2013}}

	Author = {Burden, S A and Revzen, S and Moore, T Y and Sastry, S S and Full, R J},
	Title = {Using reduced-order models to study dynamic legged locomotion: Parameter identification and model validation},
	Booktitle = {Society for Integrative and Comparative Biology},
        url = {SICB2013},
	Year = {2013}}

	Author = {Burden, S A and Ohlsson, H and Sastry, S S},
	Title = {Parameter identification near periodic orbits of hybrid dynamical systems},
	Booktitle = {IFAC Symposium on System Identification},
        url = {SysID2012},
	Year = {2012}}

	Author = {Burden, S and Gonzalez, H and Vasudevan, R and Bajcsy, R and Sastry, S S},
	Month = {dec.},
	Pages = {3958--3965},
	Title = {Numerical integration of hybrid dynamical systems via domain relaxation},
	Booktitle = {IEEE Conference on Decision and Control},
        url = {CDC2011},
	Year = {2011}}

	Author = {Burden, S A and Revzen, S and Sastry, S S},
	Month = {dec.},
	Pages = {6116--6121},
	Title = {Dimension reduction near periodic orbits of hybrid systems},
	Booktitle = {IEEE Conference on Decision and Control},
        url = {CDC2011},
	Year = {2011}}

	Author = {Hoover, A and Burden, S A and Fu, X and Sastry, S S and Fearing, R},
	Title = {Bio-inspired design and dynamic maneuverability of a minimally actuated six-legged robot},
	Booktitle = {IEEE Conference on Biomedical Robotics and Biomechatronics},
        url = {papers/HooverBurden2010.pdf},
	Year = {2010}}

	Author = {Moore, T Y and Revzen, S and Burden, S A and Full, R J},
	Title = {Adding inertia and mass to test stability predictions in rapid running insects},
	Booktitle = {Society for Integrative and Comparative Biology},
        url = {},
	Year = {2010}}

	Author = {Napp, N and Burden, S A and Klavins, E},
	Title = {Setpoint regulation for stochastically interacting robots},
	Booktitle = {Robotics: Science and Systems},
        url = {papers/NappBurden2009.pdf},
	Year = {2009}}

	Author = {Burden, S A and Clark, J and Weingarten, J and Komsuoglu, H and Koditschek, D E},
	Number = {605},
	Title = {Heterogeneous leg stiffness and roll in dynamic running},
	Booktitle = {International Conference on Robotics and Automation},
        url = {papers/BurdenClark2007.pdf},
	Year = {2007}}

	Author = {Klavins, E and Burden, S A and Napp, N},
	Title = {The statistical dynamics of programmed robotic self-assembly},
	Booktitle = {International Conference on Robotics and Automation},
        url = {papers/KlavinsBurden2006.pdf},
	Year = {2006}}

	Author = {Klavins, E and Burden, S A and Napp, N},
	Title = {Optimal rules for programmed stochastic self-assembly},
	Booktitle = {Robotics: Science and Systems},
        url = {papers/KlavinsBurden2006a.pdf},
	Year = {2006}}

	Author = {Bishop, J and Burden, S A and Klavins, E and Kreisberg, R and Malone, W and Napp, N and Nguyen, T},
	Organization = {IEEE},
	Pages = {3684--3691},
	Title = {Programmable parts: A demonstration of the grammatical approach to self-organization},
	Booktitle = {International Conference on Intelligent Robots and Systems},
        url = {papers/BishopBurden2005.pdf},
	Year = {2005}}


	Author = {Lee, J M},
	Publisher = {Springer--Verlag},
	Title = {{Introduction to smooth manifolds}},
	Year = {2002}}

	Author = {Hirsch, M W},
	Publisher = {Springer--Verlag},
	Title = {{Differential topology}},
	Year = {1976}}


	Author = {Darwin, Charles},
	Publisher = {Murray},
	Title = {On the Origin of Species by Means of Natural Selections: Or the Preservation of Favoured Races in the Struggle for Life},
	Year = {1859}}

	Author = {Milnor, J.W.},
	Publisher = {Princeton University Press},
	Title = {{Morse theory}},
	Year = {1963}}

	Author = {Eldredge, Niles and Gould, Stephen Jay},
	Editor = {Schopf, T. J. M.},
	Pages = {82--115},
	Title = {Punctuated equilibria: an alternative to phyletic gradualism},
	Booktitle = {Models in Paleobiology},
	Year = {1972}}

	Author = {Gould, Stephen Jay and Eldredge, Niles},
	Journal = {Systematic Zoology},
	Number = {1},
	Pages = {143--148},
	Title = {Punctuated Equilibrium at the Third Stage},
	Volume = {35},
	Year = {1986}}

	Author = {Gould, Stephen Jay and Eldredge, Niles and others},
	Journal = {Nature},
	Number = {6452},
	Pages = {223--227},
	Title = {Punctuated equilibrium comes of age},
	Volume = {366},
	Year = {1993}}

	Author = {Vogel, Steven and Davis, Kathryn K},
	Publisher = {WW Norton & Company},
	Title = {Cats' paws and catapults: Mechanical worlds of nature and people},
	Year = {2000}}

	Author = {Gould, Stephen Jay},
	Publisher = {Harvard University Press},
	Title = {Punctuated equilibrium},
	Year = {2007}}

	Author = {Taleb, Nassim Nicholas},
	Publisher = {Random House},
	Title = {The black swan: The impact of the highly improbable},
	Year = {2007}}
	Author = {Burden, S A and Revzen, S and Koditschek, D E and Sastry, S S},
	Title = {Stability of hybrid periodic orbits undergoing simultaneous transitions},
	Booktitle = {In preparation},
        Year = {2014}}

	Author = {Moore, T Y and Burden, S A and Revzen, S and Full, R J},
	Title = {Adding inertia and mass to test stability predictions in rapid running insects},
	Booktitle = {In preparation},
        Year = {2014}}
	Author = {Revzen, S and Burden, S A and Moore, T Y and Mongeau, J M and Full, R J},
	Title = {Instantaneous kinematic phase reflects neuromechanical response to lateral perturbations of running cockroaches},
	Journal = {Biological Cybernetics},
        Volume = {107},
        Number = {2},
        Pages = {179-200},
	Year = {2013},
        Doi = {10.1007/s00422-012-0545-z},
        url = {papers/RevzenBurden2013.pdf}}

	Author = {Napp, N and Burden, S A and Klavins, E},
	Journal = {Autonomous Robots},
	Pages = {57-71},
	Title = {Setpoint regulation for stochastically interacting robots},
	Volume = {30},
	Year = {2011},
        doi = {10.1007/s10514-010-9203-2},
        url = {papers/NappBurden2011.pdf}}

	Author = {Barber, B.},
	Journal = {Science},
	Pages = {596--602},
	Title = {Resistance by Scientists to Scientific Discovery},
	Volume = {134},
	Year = {1961}}

	Author = {Bruner, J. S. and Postman, L.},
	Journal = {Journal of Personality},
	Number = {2},
	Pages = {206--223},
	Title = {On the perception of incongruity: a paradigm},
	Volume = {18},
	Year = {1949}}

	Author = {Kubie, L. S.},
	Journal = {American Scientist},
	Number = {4},
	Pages = {pp. 596-613},
	Title = {Some unsolved problems of the scientific career},
	Volume = {41},
	Year = {1953}}

	Author = {Kuhn, T.S.},
	Edition = {Second},
	Publisher = {University of Chicago Press},
	Title = {The structure of scientific revolutions},
	Year = {1970}}

	Author = {MacIver, R. M.},
	Journal = {Proceedings of the American Philosophical Society},
	Number = {5},
	Pages = {pp. 500-505},
	Title = {Science as a Social Phenomenon},
	Volume = {105},
	Year = {1961}}

	Author = {Schagrin, M. L.},
	Journal = {American Journal of Physics},
	Pages = {536-547},
	Title = {{Resistance to Ohm's Law}},
	Volume = {31},
	Year = {1963}}

	Author = {de Solla Price, D. J.},
	Journal = {Science},
	Number = {3683},
	Pages = {510-515},
	Title = {Networks of Scientific Papers},
	Volume = {149},
	Year = {1965}}

	Author = {Burden, S A and Gonzalez, H and Vasudevan, R and Bajcsy, R and Sastry, S S},
	Title = {{Metrization and simulation of controlled hybrid systems}},
	Institution = {arXiv:1302.4402},
        url = {},
	Year = {2013}}

	Author = {Burden, S A and Revzen, S and Sastry, S S},
	Title = {Model reduction near periodic orbits of hybrid dynamical systems},
	Institution = {arXiv:1308.4158},
        url = {},
	Year = {2013}}
	Author = {Burden, S A and Revzen, S and Sastry, S S},
	Institution = {arXiv:1109.1780},
	Title = {Dimension reduction near periodic orbits of hybrid systems},
        url = {},
	Year = {2011}}
There are many reasons [[vim|]] is my preferred text editor.

!!!Remap ~CAPS-LOCK to ESC
Operating system dependent: [[on OSX|]]; 

Although I'm happy using vim in a terminal when SSH'd, on OSX I prefer the graphical [[MacVim|]] for native copy + paste and simply a different set of windows from my terminal.

My configuration files are available: [[vim|]]; [[vimrc|]]; [[gvimrc|]].

You'll want the following from MacPorts:
sudo port install py-ctags

!!!Find and replace in selection
After using ''Shift + v'' or ''v'' to make a selection, press '':'' to get '':'<,'>'', add ''s/old/new/gc'' to get '':'<,'>s/old/new/gc''

!!!Search only in LaTeX math mode

Egregious? Perhaps.  But the ability to [[access gmail from vim|]] has its purposes.  For one, it lets you compose emails in plain text and subsequently send in a batch.