<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' />
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,600,700' rel='stylesheet' type='text/css'>
font-family: 'Source Code Pro', ;
@-webkit-keyframes blinker {
-webkit-animation-name: blinker;
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: cubic-bezier(1.0,0,0,1.0);
-webkit-animation-duration: 800ms;
<script type='text/javascript'>
window.onload = function() {
var s = document.getElementsByTagName('div'), cur = 0, ti;
var i = 1e3, e = s[n], t;
document.body.className = e.dataset.bodyclass || '';
for (var k = 0; k < s.length; k++) s[k].style.display = 'none';
e.style.display = 'inline';
e.style.fontSize = i + 'px';
if (e.firstChild && e.firstChild.nodeName === 'IMG') {
document.body.style.backgroundImage = 'url(' + e.firstChild.src + ')';
e.firstChild.style.display = 'none';
if ('classList' in e) e.classList.add('imageText');
document.body.style.backgroundImage = '';
document.body.style.backgroundColor = e.style.backgroundColor;
if (ti !== undefined) window.clearInterval(ti);
t = parseInt(e.dataset.timeToNext || 0, 10);
if (t > 0) ti = window.setTimeout(fwd, (t * 1000));
e.offsetWidth > window.innerWidth ||
e.offsetHeight > window.innerHeight) {
e.style.fontSize = (i -= 2) + 'px';
e.style.marginTop = ((window.innerHeight - e.offsetHeight) / 2) + 'px';
if (window.location.hash !== n) window.location.hash = n;
document.title = e.textContent || e.innerText;
document.onclick = function() { go(++cur % (s.length)); };
function fwd() { go(Math.min(s.length - 1, ++cur)); }
function rev() { go(Math.max(0, --cur)); }
document.onkeydown = function(e) {
if (e.which === 39 || e.which === 34 || e.which === 40) fwd();
if (e.which === 37 || e.which === 33 || e.which === 38) rev();
document.ontouchstart = function(e) {
var x0 = e.changedTouches[0].pageX;
document.ontouchend = function(e) {
var x1 = e.changedTouches[0].pageX;
return Math.max(Math.min(
parseInt(window.location.hash.substring(1), 10)), 0);
if (window.location.hash) cur = parse_hash() || cur;
window.onhashchange = function() {
<div><h1 id="github-for-geodata">Github for geodata</h1>
<p>by Bill Morris for <a href="https://vcgi.vermont.gov/">VCGI</a>
<div><p>A practical guide to web-based version control and collaboration for the GIS-inclined</p>
<li>Hosting an application</li>
<div><p>Why use github? What's wrong with ArcSDE/ PostGIS/ Thatendlessbunchoffoldersonmydesktop?</p>
<div><p>Collaborative</p>
<li>Hosting an application</li>
<li><a href="https://github.com/">Sign up for a github account</a></li>
<div><p>That's it!</p>
<div><p>(not really; we have some work to do. But is <strong>is</strong> that easy to get started.)</p>
<li><em>First Light</em></li>
<li>Hosting an application</li>
<div><p>Create a repository</p>
<div><p>Add a dataset</p>
<div><p>geojson and topojson - shapefiles for the web</p>
<div><p>View it in the browser</p>
<li><em>Editing Data</em></li>
<li>Hosting an application</li>
<div><p>A few options:</p>
<div><p>Tiny data (<8MB): Use <a href="https://geojson.io">geojson.io</a></p>
<div><p>Bigger data (8MB - 100MB): Edit locally and sync using the github app (<a href="https://mac.github.com/">for mac</a> & <a href="https://windows.github.com/">for windows</a>)</p>
<div><p>Big data (>100MB): We're not really there yet. </p>
<li><em>Hosting an application</em></li>
<div><p>github pages - web apps, hosted for free</p>
<div><p>updates to data are immediately available in the app </p>
<div><p>(this can get a lot more complicated, but it doesn't need to)</p>
<div><h1 id="thanks-">Thanks!</h1>
<div><p>Get in touch with any questions:
<a href="https://twitter.com/vtcraghead">@vtcraghead</a></p>