Skip to content

Instantly share code, notes, and snippets.

@bangpound
Last active November 28, 2016 16:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bangpound/cdf1724acf7a978c83fc17ef5f2c9070 to your computer and use it in GitHub Desktop.
Save bangpound/cdf1724acf7a978c83fc17ef5f2c9070 to your computer and use it in GitHub Desktop.

Benjamin J Doherty resume.

body {
background: #fff;
font: 15px Arial, Helvetica, sans-serif;
line-height: 1.4;
margin: 50px 0;
margin-bottom: 100px;
}
em {
color: #999;
}
p {
line-height: 1.4;
}
ul {
margin-bottom: 0;
}
section {
margin-bottom: 2em;
}
blockquote {
margin: 0;
margin-bottom: 1em;
}
.item {
margin-bottom: 1em;
}
#resume {
margin: 0 auto;
max-width: 480px;
padding: 0 20px;
}
#basics {
margin-bottom: -10px;
}
#basics h3 {
margin-top: 1.5em;
}
#basics .contact strong,
#location strong {
clear: both;
float: left;
line-height: 1.3;
width: 120px;
}
#profiles,
#skills {
overflow: hidden;
}
#profiles .item,
#skills .item {
float: left;
width: 50%;
}
<div id="resume">
{{#resume.basics}}
<h1>{{name}}</h1>
<h2>{{label}}</h2>
<section id="basics">
<div class="contact">
{{#if website}}
<div class="website">
<strong>Website</strong>
{{website}}
</div>
{{/if}}
{{#if email}}
<div class="email">
<strong>Email</strong>
{{email}}
</div>
{{/if}}
{{#if phone}}
<div class="phone">
<strong>Phone</strong>
{{phone}}
</div>
{{/if}}
</div>
{{#if summary}}
<div class="summary">
<p>{{summary}}</p>
</div>
{{/if}}
{{#location}}
<h3>Location</h3>
<section id="location">
{{#if address}}
<div class="address">
<strong>Address</strong>
{{address}}
</div>
{{/if}}
{{#if postalCode}}
<div class="postalCode">
<strong>Postal code</strong>
{{postalCode}}
</div>
{{/if}}
{{#if city}}
<div class="city">
<strong>City</strong>
{{city}}
</div>
{{/if}}
{{#if countryCode}}
<div class="countryCode">
<strong>Country code</strong>
{{countryCode}}
</div>
{{/if}}
{{#if region}}
<div class="region">
<strong>Region</strong>
{{region}}
</div>
{{/if}}
</section>
{{/location}}
{{#if profiles.length}}
<h3>Profiles</h3>
<section id="profiles">
{{#each profiles}}
<div class="item">
{{#if network}}
<strong class="network">
{{network}}
</strong>
{{/if}}
{{#if username}}
<div class="username">
{{username}}
</div>
{{/if}}
{{#if url}}
<div class="url">
<a href="{{url}}">Link</a>
</div>
{{/if}}
</div>
{{/each}}
</section>
{{/if}}
</section>
{{/resume.basics}}
{{#if resume.work.length}}
<section id="work">
<h2>Work</h2>
{{#each resume.work}}
<div class="item">
{{#if company}}
<h3 class="name">
{{company}}
</h3>
{{/if}}
<div class="date">
{{#if startDate}}
<span class="startDate">
{{startDate}}
</span>
{{/if}}
{{#if endDate}}
<span class="endDate">
- {{endDate}}
</span>
{{else}}
<span class="endDate">
- Present
</span>
{{/if}}
</div>
{{#if position}}
<div class="position">
{{position}}
</div>
{{/if}}
{{#if website}}
<div class="website">
<a href="{{website}}">{{website}}</a>
</div>
{{/if}}
{{#if summary}}
<div class="summary">
<p>{{summary}}</p>
</div>
{{/if}}
{{#if highlights.length}}
<ul class="highlights">
{{#each highlights}}
<li>{{.}}</li>
{{/each}}
</ul>
{{/if}}
</div>
{{/each}}
</section>
{{/if}}
{{#if resume.volunteer.length}}
<section id="volunteer">
<h2>Volunteer</h2>
{{#each resume.volunteer}}
<div class="item">
{{#if organization}}
<h3 class="company">
{{organization}}
</h3>
{{/if}}
<div class="date">
{{#if startDate}}
<span class="startDate">
{{startDate}}
</span>
{{/if}}
{{#if endDate}}
<span class="endDate">
- {{endDate}}
</span>
{{else}}
<span class="endDate">
- Present
</span>
{{/if}}
</div>
{{#if position}}
<div class="position">
{{position}}
</div>
{{/if}}
{{#if website}}
<div class="website">
<a href="{{website}}">{{website}}</a>
</div>
{{/if}}
{{#if summary}}
<div class="summary">
<p>{{summary}}</p>
</div>
{{/if}}
{{#if highlights.length}}
<ul class="highlights">
{{#each highlights}}
<li>{{.}}</li>
{{/each}}
</ul>
{{/if}}
</div>
{{/each}}
</section>
{{/if}}
{{#if resume.education.length}}
<section id="education">
<h2>Education</h2>
{{#each resume.education}}
<div class="item">
<div class="date">
{{#if startDate}}
<span class="startDate">
{{startDate}}
</span>
{{/if}}
{{#if endDate}}
<span class="endDate">
- {{endDate}}
</span>
{{else}}
<span class="endDate">
- Present
</span>
{{/if}}
</div>
{{#if institution}}
<div class="institution">
{{institution}}
</div>
{{/if}}
{{#if area}}
<div class="area">
{{area}}
</div>
{{/if}}
{{#if studyType}}
<div class="studyType">
{{studyType}}
</div>
{{/if}}
{{#if gpa}}
<div class="gpa">
GPA: {{gpa}}
</div>
{{/if}}
{{#if courses.length}}
<ul class="courses">
{{#each courses}}
<li>{{.}}</li>
{{/each}}
</ul>
{{/if}}
</div>
{{/each}}
</section>
{{/if}}
{{#if resume.awards.length}}
<section id="awards">
<h2>Awards</h2>
{{#each resume.awards}}
<div class="item">
{{#if title}}
<div class="title">
{{title}}
</div>
{{/if}}
{{#if date}}
<div class="date">
{{date}}
</div>
{{/if}}
{{#if awarder}}
<div class="awarder">
{{awarder}}
</div>
{{/if}}
{{#if summary}}
<div class="summary">
<p>{{summary}}</p>
</div>
{{/if}}
</div>
{{/each}}
</section>
{{/if}}
{{#if resume.publications.length}}
<section id="publications">
<h2>Publications</h2>
{{#each resume.publications}}
<div class="item">
{{#if name}}
<div class="name">
{{name}}
</div>
{{/if}}
{{#if publisher}}
<div class="publisher">
{{publisher}}
</div>
{{/if}}
{{#if releaseDate}}
<div class="releaseDate">
{{releaseDate}}
</div>
{{/if}}
{{#if website}}
<div class="website">
<a href="{{website}}">Link</a>
</div>
{{/if}}
{{#if summary}}
<div class="summary">
<p>{{summary}}</p>
</div>
{{/if}}
</div>
{{/each}}
</section>
{{/if}}
{{#if resume.skills.length}}
<section id="skills">
<h2>Skills</h2>
{{#each resume.skills}}
<div class="item">
{{#if name}}
<div class="name">
{{name}}
</div>
{{/if}}
{{#if level}}
<div class="level">
<em>{{level}}</em>
</div>
{{/if}}
{{#if keywords.length}}
<ul class="keywords">
{{#each keywords}}
<li>{{.}}</li>
{{/each}}
</ul>
{{/if}}
</div>
{{/each}}
</section>
{{/if}}
{{#if resume.languages.length}}
<section id="languages">
<h2>Languages</h2>
{{#each resume.languages}}
<div class="item">
{{#if language}}
<div class="language">
{{language}}
</div>
{{/if}}
{{#if fluency}}
<div class="fluency">
<em>{{fluency}}</em>
</div>
{{/if}}
</div>
{{/each}}
</section>
{{/if}}
{{#if resume.interests.length}}
<section id="interests">
<h2>Interests</h2>
{{#each resume.interests}}
<div class="item">
{{#if name}}
<div class="name">
{{name}}
</div>
{{/if}}
{{#if keywords.length}}
<ul class="keywords">
{{#each keywords}}
<li>{{.}}</li>
{{/each}}
</ul>
{{/if}}
</div>
{{/each}}
</section>
{{/if}}
{{#if resume.references.length}}
<section id="references">
<h2>References</h2>
{{#each resume.references}}
<div class="item">
{{#if reference}}
<blockquote class="reference">
{{reference}}
</blockquote>
{{/if}}
{{#if name}}
<div class="name">
— {{name}}
</div>
{{/if}}
</div>
{{/each}}
</section>
{{/if}}
</div>
<!DOCTYPE HTML>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
<title>jQuery AutoBars Example</title>
<link rel="stylesheet" href="boilerplate.css">
<script src="https://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/2.0.0/handlebars.min.js" type="text/javascript" charset="utf-8"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="jquery-autobars.js" type="text/javascript"></script>
<script src="boilerplate.hbs" type="text/x-handlebars-template"></script>
<script type="text/javascript">
$(document).ready(function() {
$(document).autoBars(function() {
$.getJSON("resume.json", function(json) {
var data = { "resume" : json};
var $html = $.handlebarTemplates['boilerplate'](data);
$('body').append($html);
})
.fail(function(jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );
});
});
})
</script>
</head>
<body>
</body>
/*global Handlebars */
/*global jQuery */
/*
* this file is a basic helper utility for people
* using handlebars.js. it allowes you to store several
* handlebars templates seperated with
*
* <!--#?templateid-->
*
*
* <!--#?end-->
*
* Created by Peter de Croos (Cultofmetatron)
* blog.peterdecroos.com
*/
(function($) {
'use strict';
var methods;
methods = {
initialize: function () {},
parseName: function (url) {
var splitName, splitUrl, name;
splitUrl = url.split('/');
//get everything past the last slash
name = splitUrl[splitUrl.length - 1];
//strip querystring
name = name.split('?')[0];
splitName = name.split('.');
if (splitName.length > 1) {
//strip extension
splitName = splitName.slice(0, -1);
}
return splitName.join('.');
},
parsePartials: function (data) {
var endToken, separatorToken, END_TOKEN_SIZE,
templates;
//first we seperate the strings with a regular expression
separatorToken = /<!--#\?[a-zA-Z]+-->/; //matches the headers
endToken = /<!--#\?end-->/;
END_TOKEN_SIZE = 12;
templates = {};
// now we get the names of the partials
// first remove all white space characters that are in groups > 2
data = data.split('\n').join('').split(/\s{2,}/).join('');
// now that we have a whitespace stripped version,
// we loop through chunking them.
// get the first token and extract the key
while (data.match(separatorToken)) {
var token = data.match(separatorToken)[0]; //gets the first token
var name = token.match(/[a-zA-Z]+/)[0];//the name we get token
data = data.slice(token.length);
// feed in characters till you get to the end tag.
var endIndex = data.search(endToken);
var source = data.slice(0, endIndex);
// increment to the next size;
data = data.slice(endIndex + END_TOKEN_SIZE);
templates[name] = Handlebars.compile(source);
}
// register partials for use within Handlebars templates
// for usage, see https://github.com/wycats/handlebars.js/#partials
for (var key in templates) {
if (Object.prototype.hasOwnProperty.call(templates, key)) {
methods.registerPartial(key, templates[key]);
}
}
},
registerPartial: function (key, partial) {
Handlebars.registerPartial(key, partial);
},
mainTemplates: function (context) {
var pipe = [];//promise objects
context.find('[type="text/x-handlebars-template"]')
.each(function (index, element) {
var loadUrl = $(element).attr('src');
//var name = loadUrl.match(/([^\/]+)(?=\.\w+$)/)[0];
var name = methods.parseName(loadUrl);
//here we gather all our promises
pipe.push(
$.ajax({
url: loadUrl,
dataType: 'text'
}).done(function (data) {
jQuery.handlebarTemplates[name] = Handlebars.compile(data);
})
);
});
return pipe;
},
partials: function (context) {
//we take the nodes and pull out partials
var pipe = [];//promise objects
context.find('[type="text/x-handlebars-partial"]')
.each(function (index, element) {
//handlebarTemplates = Handlebars.compile($(element).html());
var loadUrl = $(element).attr('src');
//gather the promises
pipe.push(
$.ajax({
url: loadUrl,
dataType: 'text'
}).done(function (data) {
//each pageload is performed asynchronously and so the data exists only in this
//context. here we scrub the input and use it;
methods.parsePartials(data);
})
);
});
return pipe;
}
};
$.fn.autoBars = function(options, callback) {
var args = Array.prototype.slice.call(arguments, 0);
if (args.length === 1 && typeof(args[0]) === 'function') {
//checks if there's only one argument and sets the
// callback to be the first
callback = options;
options = {};
}
//so we don't overwrite it
jQuery.handlebarTemplates = jQuery.handlebarTemplates || {};
jQuery.handlebarTemplates.partials =
jQuery.handlebarTemplates.partials || {};
var settings = $.extend({
loadHandlebars : false,
}, options);
// gather all the promises from the multiple async calls
var partialPromises = methods.partials(this);
var templatesPromises = methods.mainTemplates(this);
var promises = partialPromises.concat(templatesPromises);
// we delay execution of the callback until all
// the promises are fulfilled!!
if (typeof(callback) === 'function') {
$.when.apply(this, promises).done(callback);
}
// return the original jquery object
return this;
};
})(jQuery);
{
"basics": {
"name": "Benjamin J Doherty",
"label": "Solutions Architect, Senior Developer and Agile Team Lead",
"picture": "",
"email": "bjd@pobox.com",
"phone": "(773) xxx-xxxx",
"website": "https://www.bangpound.org",
"summary": "Benjamin is a very experienced web developer with expertise in PHP, JavaScript and web standards. He is very familiar with automation, virtualization and cloud infrastructures and a specialist in helping organizations assess their information/technology needs from the ground up. He has long experience working with social justice issues, learning platforms, nonprofit organizations, social services, children's services, social activism, and cultural programs.",
"location": {
"address": "",
"postalCode": "",
"city": "Chicago",
"countryCode": "US",
"region": "Illinois"
},
"profiles": [
{
"network": "Github",
"username": "bangpound",
"url": "https://github.com/bangpound"
}
]
},
"work": [
{
"company": "Caxy",
"position": "senior web developer and product owner",
"website": "https://www.caxy.com",
"startDate": "2014-04-15",
"endDate": "",
"summary": "Developed projects independently and as part of an agile (scrum) team. Accountable for pre-sales, planning, developer recruiting and continuing education.",
"highlights": [
"The Field Museum <https://www.fieldmuseum.org> winner of Acquia 2015 Partner Site of the Year in Entertainment",
"Lead developer of Best Money Moves <https://bestmoneymoves.com>, a financial education tool built on Symfony and AngularJS, designed to support millions of users",
"Lead developer of Northwestern University Arts Circle <https://artscircle.northwestern.edu> in Drupal 7",
"Lead developer of Stock Market Game registration tool <https://http://registration.smgww.org> in Symfony and AngularJS and their curriculum search tool <http://www.smgww.org> in AngularJS, Symfony and Elasticsearch",
"Caxy.com, winner of Gold Hermes Creative Award 2016, built on Drupal 8.",
"Chicago Architecture Foundation's DiscoverDesign learning platform <https://www.discoverdesign.org> built on Drupal 8 and AngularJS"
]
},
{
"company": "Self-employed",
"position": "independent web developer",
"website": "",
"startDate": "2013-03",
"endDate": "2014-04-15",
"summary": " Work with clients to develop and maintain bespoke web applications and web sites. Usually responsible for project management and engineering. Major projects include Castle, Drufony (described in [Projects](#projects)) and an investment screening tool for socially responsible investment.",
"highlights": [
"Investigate: What are you Invested In? <http://investigate.afsc.org> A screening tool for socially responsible investment research. Users can upload a document which is scanned for hundreds of company names. This project depends on Drupal, Symfony, AngularJS, Elasticsearch and Tika. Source code and documentation is available upon request.",
"Castle Project to archive social media artifacts from public API endpoints. The application runs mulitple processes for collecting millions of posts daily from each social media service. Message queues (RabbitMQ) link the collection processes to the archive (CouchDB) and the index (Elasticsearch). Faceted search UI is built with AngularJS. Castle was developed for [R-Shief](http://r-shief.org) under the name kal3a <http://kal3a.r-shief.org> (Arabizi for \"castle\"). R-Shief is an online community-based archiving project developed by Professor Laila Shereen Sakr while she was a Ph.D. candidate at University of Southern California. This project is acknowledged in her dissertation \"From Archive to Analytics: The Making of R-Shief Media System and Live Cinema Remix.\""
]
},
{
"company": "Palante Technology Cooperative",
"position": "worker",
"website": "http://palantetech.coop",
"startDate": "2012-03",
"endDate": "2013-03",
"summary": "Develop and maintain simple Drupal and CiviCRM projects for nonprofit clients. Collaborate with worker-owners in management and growth of cooperative business.",
"highlights": []
},
{
"company": "CivicActions",
"position": "engineer",
"website": "https://civicactions.com",
"startDate": "2010-04",
"endDate": "2012-03",
"summary": "Develop large, custom web projects (Drupal 6 and 7, Ubercart, CiviCRM) that were managed in Scrum Agile software development framework. Projects included The Sedona Conference, Privacy International, Congress for the New Urbanism, National Academy of Recording Arts and Sciences.",
"highlights": [
"The Sedona Conference <https://thesedonaconference.org> developed on Drupal 6, Ubercart and CiviCRM"
]
},
{
"company": "Self-employed",
"position": "independent web developer",
"website": "",
"startDate": "2008-01",
"endDate": "2010-04",
"summary": "Work with clients to develop and maintain web sites. Train clients in PHP, Drupal 6 and 7 development, best practices (version control, coding standards, automated tests). Clients included Gate58 Marketing (Chicago, Illinois), LM Squared, LLC (Northbrook, Illinois).",
"highlights": [
"Illinois Coalition for Immigrant and Refugee Rights <http://www.icirr.org> developed on Drupal 6 (since redesigned)",
"Practice.ie <http://practice.ie> an online community supporting reflective practice for professional artists who work with children (since redesigned)",
"CompareERP <http://compareerp.com> developed on Drupal 7 as a model for other lead generation sites developed by Gate58",
"TLC Management <http://chicagorentals.com> marketing site developed on Drupal 7 for LM Squared LLC featured maps and photo galleries of buildings (since redesigned)."
]
},
{
"company": "Dartington Social Research Unit",
"position": "information designer",
"website": "https://www.dartington.org.uk/",
"startDate": "2006-09",
"endDate": "2007-12",
"summary": "Dartington Social Research Unit conducts scientific research about child development in the context of children’s services, with a view to informing needs-led, evidence-based interventions for children in need. Projects included developing online publication Prevention Action, a new journalistic-style web site about developments in children's services, prevention science; developing encyclopedic glossary of terms for the Unit's methodological tool kit \"Common Language;\" developing online resources related to children's services in Ireland, UK and United States.",
"highlights": [
"Prevention Action <http://preventionaction.org> designed to convert rigorous scientific findings into actionable information for children's services agencies and professionals"
]
},
{
"company": "Southwest Youth Collaborative",
"position": "Director of Information Technology",
"website": "http://swyc.org",
"startDate": "2005-03",
"endDate": "2006-09",
"summary": "Southwest Youth Collaborative was founded in the early 1990s as a youth development organization serving young people in Chicago's Southwest side. Responsibilities included establishing and maintaining three separate environments with a total of 30 workstations running Mac OS X, Windows 2000/XP, or Ubuntu Linux as well as 4 servers (FreeBSD and CentOS Linux) and providing technical support and training to clients and staff.",
"highlights": [
"Transitioned organization from proprietary Novell operating system and GroupWise application to open source stack"
]
}
],
"volunteer": [
{
"organization": "Drupal",
"position": "Drupal 7 maintainer",
"website": "https://www.drupal.org/u/bangpound",
"startDate": "",
"endDate": "",
"summary": "Implemented new core Field API on Taxonomy subsystem.",
"highlights": [
"Presented a session at DrupalCon DC (2009)",
"Presented a session at DrupalCon Paris (2009)",
"Taxonomy term fields in Drupal 7 core <https://drupal.org/node/491190>",
"Taxonomy term autocomplete widget in Drupal 7 core <https://drupal.org/node/526122>",
"Expose field storage details in Drupal 7 core <https://drupal.org/node/569224>",
"Semantic Views <https://drupal.org/project/semanticviews>",
"oEmbed for Drupal 7 <https://drupal.org/project/oembed>"
]
}
],
"education": [
{
"institution": "University of Chicago",
"area": "Humanities",
"studyType": "",
"startDate": "1995-09",
"endDate": "1998-06",
"gpa": "",
"courses": []
}
],
"awards": [],
"publications": [
{
"name": "TALK: Unveiling R-Shief 4.0: A Social Media Archive and Analytics System",
"publisher": "Interdisciplinary Humanities Center at University of California, Santa Barbara",
"releaseDate": "2016-01-12",
"website": "http://www.ihc.ucsb.edu/unveiling-r-shief-4-0/",
"summary": "Presentation of R-Shief social media analytics and archiving platform to students and faculty of UCSB"
}
],
"skills": [
{
"name": "Web Development",
"level": "Master",
"keywords": [
"HTML",
"CSS",
"Javascript",
"Sass",
"oEmbed",
"OpenGraph"
]
},
{
"name": "PHP",
"level": "Master",
"keywords": [
"Drupal",
"Symfony",
"Silex",
"Composer",
"CiviCRM",
"Sculpin",
"ReactPHP",
"PHPUnit",
"Behat"
]
},
{
"name": "Javascript",
"level": "Master",
"keywords": [
"AngularJS",
"Angular 2",
"Polymer",
"web components",
"jQuery",
"jQuery UI",
"Grunt",
"Yeoman"
]
},
{
"name": "Data",
"level": "Master",
"keywords": [
"CouchDB 1.6-2.0",
"MySQL 5",
"Elasticsearch 0.6-5.0"
]
},
{
"name": "System administration",
"level": "Master",
"keywords": [
"Debian",
"Ubuntu",
"OpenLDAP",
"Apache HTTPD",
"Eucalyptus"
]
}
],
"languages": [
{
"language": "English",
"fluency": "Native speaker"
}
],
"interests": [],
"references": []
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment