git ssb

0+

Zach! / coolguy.website



Tree: 89e5d04cd5d9b6af6ceef244711b1d38c5ddcd46

Files: 89e5d04cd5d9b6af6ceef244711b1d38c5ddcd46 / cv.html

46138 bytesRaw
1<!DOCTYPE html>
2
3<html lang="en">
4
5<head>
6 <meta charset="utf-8">
7 <meta http-equiv="X-UA-Compatible" content="IE=edge">
8 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
9 <meta name="apple-mobile-web-app-capable" content="yes">
10 <meta name="apple-mobile-web-app-status-bar-style" content="black">
11 <meta name="mobile-web-app-capable" content="yes">
12 <title>
13 Zach Mandeville, Web Developer for an Optimistic Future - HackMD
14 </title>
15 <link rel="icon" type="image/png" href="https://hackmd.io/favicon.png">
16 <link rel="apple-touch-icon" href="https://hackmd.io/apple-touch-icon.png">
17
18 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha256-916EbMg70RQy9LHiGkXzG8hSg9EdNy97GazNG/aiY1w=" crossorigin="anonymous" />
19 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha256-eZrrJcwDc/3uDhsdt61sL2oOBY362qM3lon1gyExkL0=" crossorigin="anonymous" />
20 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css" integrity="sha256-3iu9jgsy9TpTwXKb7bNQzqWekRX7pPK+2OLj3R922fo=" crossorigin="anonymous" />
21 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/octicons/3.5.0/octicons.min.css" integrity="sha256-QiWfLIsCT02Sdwkogf6YMiQlj4NE84MKkzEMkZnMGdg=" crossorigin="anonymous" />
22 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.5.1/themes/prism.min.css" integrity="sha256-vtR0hSWRc3Tb26iuN2oZHt3KRUomwTufNIf5/4oeCyg=" crossorigin="anonymous" />
23 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/styles/github-gist.min.css" integrity="sha256-tAflq+ymku3Khs+I/WcAneIlafYgDiOQ9stIHH985Wo=" crossorigin="anonymous" />
24 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/emojify.js/1.1.0/css/basic/emojify.min.css" integrity="sha256-UOrvMOsSDSrW6szVLe8ZDZezBxh5IoIfgTwdNDgTjiU=" crossorigin="anonymous" />
25 <style>
26 @import url(https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400italic,600,600italic,300italic,300|Source+Serif+Pro|Source+Code+Pro:400,300,500&subset=latin,latin-ext);.markdown-body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body:after,.markdown-body:before{display:table;content:""}.markdown-body:after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#c00}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:none}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e7e7e7;border:0}.markdown-body blockquote{padding:0 1em;color:#777;border-left:.25em solid #ddd}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body .loweralpha{list-style-type:lower-alpha}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 code,.markdown-body h1 tt,.markdown-body h2 code,.markdown-body h2 tt,.markdown-body h3 code,.markdown-body h3 tt,.markdown-body h4 code,.markdown-body h4 tt,.markdown-body h5 code,.markdown-body h5 tt,.markdown-body h6 code,.markdown-body h6 tt{font-size:inherit}.markdown-body h1{font-size:2em}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol.no-list,.markdown-body ul.no-list{padding:0;list-style-type:none}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before,.markdown-body tt:after,.markdown-body tt:before{letter-spacing:-.2em;content:"\A0"}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code:after,.markdown-body pre code:before,.markdown-body pre tt:after,.markdown-body pre tt:before{content:normal}.markdown-body .csv-data td,.markdown-body .csv-data th{padding:5px;overflow:hidden;font-size:12px;line-height:1;text-align:left;white-space:nowrap}.markdown-body .csv-data .blob-line-num{padding:10px 8px 9px;text-align:right;background:#fff;border:0}.markdown-body .csv-data tr{border-top:0}.markdown-body .csv-data th{font-weight:700;background:#f8f8f8;border-top:0}.markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.news .alert .markdown-body blockquote{padding:0 0 0 40px;border:0 none}.activity-tab .news .alert .commits,.activity-tab .news .markdown-body blockquote{padding-left:0}.task-list-item{list-style-type:none}.task-list-item label{font-weight:400}.task-list-item.enabled label{cursor:pointer}.task-list-item+.task-list-item{margin-top:3px}.task-list-item-checkbox{float:left;margin:.31em 0 .2em -1.3em!important;vertical-align:middle;cursor:default!important}.markdown-body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Helvetica,Arial,sans-serif;padding-top:40px;padding-bottom:40px;max-width:758px;overflow:visible!important}.markdown-body .emoji{vertical-align:top}.markdown-body pre{border:inherit!important}.markdown-body code{color:inherit!important}.markdown-body pre code .wrapper{display:-moz-inline-flex;display:-ms-inline-flex;display:-o-inline-flex;display:inline-flex}.markdown-body pre code .gutter{float:left;overflow:hidden;-webkit-user-select:none;user-select:none}.markdown-body pre code .gutter.linenumber{text-align:right;position:relative;display:inline-block;cursor:default;z-index:4;padding:0 8px 0 0;min-width:20px;box-sizing:content-box;color:#afafaf!important;border-right:3px solid #6ce26c!important}.markdown-body pre code .gutter.linenumber>span:before{content:attr(data-linenumber)}.markdown-body pre code .code{float:left;margin:0 0 0 16px}.markdown-body .gist .line-numbers{border-left:none;border-top:none;border-bottom:none}.markdown-body .gist .line-data{border:none}.markdown-body .gist table{border-spacing:0;border-collapse:inherit!important}.markdown-body code[data-gist-id]{background:none;padding:0}.markdown-body code[data-gist-id]:after,.markdown-body code[data-gist-id]:before{content:""}.markdown-body code[data-gist-id] .blob-num{border:unset}.markdown-body code[data-gist-id] table{overflow:unset;margin-bottom:unset}.markdown-body code[data-gist-id] table tr{background:unset}.markdown-body[dir=rtl] pre{direction:ltr}.markdown-body[dir=rtl] code{direction:ltr;unicode-bidi:embed}.markdown-body .alert>p{margin-bottom:0}.markdown-body pre.abc,.markdown-body pre.flow-chart,.markdown-body pre.graphviz,.markdown-body pre.mermaid,.markdown-body pre.sequence-diagram{text-align:center;background-color:inherit;border-radius:0;white-space:inherit}.markdown-body pre.abc>code,.markdown-body pre.flow-chart>code,.markdown-body pre.graphviz>code,.markdown-body pre.mermaid>code,.markdown-body pre.sequence-diagram>code{text-align:left}.markdown-body pre.abc>svg,.markdown-body pre.flow-chart>svg,.markdown-body pre.graphviz>svg,.markdown-body pre.mermaid>svg,.markdown-body pre.sequence-diagram>svg{max-width:100%;height:100%}.markdown-body pre>code.wrap{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}.markdown-body .alert>p,.markdown-body .alert>ul{margin-bottom:0}.markdown-body summary{display:list-item}.markdown-body summary:focus{outline:none}.markdown-body details summary{cursor:pointer}.markdown-body details:not([open])>:not(summary){display:none}.markdown-body figure{margin:1em 40px}.vimeo,.youtube{cursor:pointer;display:table;text-align:center;background-position:50%;background-repeat:no-repeat;background-size:contain;background-color:#000;overflow:hidden}.vimeo,.youtube{position:relative;width:100%}.youtube{padding-bottom:56.25%}.vimeo img{width:100%;object-fit:contain;z-index:0}.youtube img{object-fit:cover;z-index:0}.vimeo iframe,.youtube iframe,.youtube img{width:100%;height:100%;position:absolute;top:0;left:0}.vimeo iframe,.youtube iframe{vertical-align:middle;z-index:1}.vimeo .icon,.youtube .icon{position:absolute;height:auto;width:auto;top:50%;left:50%;transform:translate(-50%,-50%);color:#fff;opacity:.3;transition:opacity .2s;z-index:0}.vimeo:hover .icon,.youtube:hover .icon{opacity:.6;transition:opacity .2s}.slideshare .inner,.speakerdeck .inner{position:relative;width:100%}.slideshare .inner iframe,.speakerdeck .inner iframe{position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%}.MJX_Assistive_MathML{display:none}.ui-infobar{position:relative;z-index:2;max-width:758px;margin-top:25px;margin-bottom:-25px;color:#777}.ui-toc{position:fixed;bottom:20px;z-index:10000}.ui-toc-label{opacity:.3;background-color:#ccc;border:none;transition:opacity .2s}.ui-toc .open .ui-toc-label{opacity:1;color:#fff;transition:opacity .2s}.ui-toc-label:focus{opacity:.3;background-color:#ccc;color:#000}.ui-toc-label:hover{opacity:1;background-color:#ccc;transition:opacity .2s}.ui-toc-dropdown{margin-top:23px;margin-bottom:20px;padding-left:10px;padding-right:10px;max-width:45vw;width:25vw;max-height:70vh;overflow:auto;text-align:inherit}.ui-toc-dropdown>.toc{max-height:calc(70vh - 100px);overflow:auto}.ui-toc-dropdown[dir=rtl] .nav{padding-right:0;letter-spacing:.0029em}.ui-toc-dropdown a{overflow:hidden;text-overflow:ellipsis;white-space:pre}.ui-toc-dropdown .nav>li>a{display:block;padding:4px 20px;font-size:13px;font-weight:500;color:#767676}.ui-toc-dropdown .nav>li:first-child:last-child > ul,.ui-toc-dropdown .toc.expand ul{display:block}.ui-toc-dropdown .nav>li>a:focus,.ui-toc-dropdown .nav>li>a:hover{padding-left:19px;color:#000;text-decoration:none;background-color:transparent;border-left:1px solid #000}.ui-toc-dropdown[dir=rtl] .nav>li>a:focus,.ui-toc-dropdown[dir=rtl] .nav>li>a:hover{padding-right:19px;border-left:none;border-right:1px solid #000}.ui-toc-dropdown .nav>.active:focus>a,.ui-toc-dropdown .nav>.active:hover>a,.ui-toc-dropdown .nav>.active>a{padding-left:18px;font-weight:700;color:#000;background-color:transparent;border-left:2px solid #000}.ui-toc-dropdown[dir=rtl] .nav>.active:focus>a,.ui-toc-dropdown[dir=rtl] .nav>.active:hover>a,.ui-toc-dropdown[dir=rtl] .nav>.active>a{padding-right:18px;border-left:none;border-right:2px solid #000}.ui-toc-dropdown .nav .nav{display:none;padding-bottom:10px}.ui-toc-dropdown .nav>.active>ul{display:block}.ui-toc-dropdown .nav .nav>li>a{padding-top:1px;padding-bottom:1px;padding-left:30px;font-size:12px;font-weight:400}.ui-toc-dropdown[dir=rtl] .nav .nav>li>a{padding-right:30px}.ui-toc-dropdown .nav .nav>li>ul>li>a{padding-top:1px;padding-bottom:1px;padding-left:40px;font-size:12px;font-weight:400}.ui-toc-dropdown[dir=rtl] .nav .nav>li>ul>li>a{padding-right:40px}.ui-toc-dropdown .nav .nav>li>a:focus,.ui-toc-dropdown .nav .nav>li>a:hover{padding-left:29px}.ui-toc-dropdown[dir=rtl] .nav .nav>li>a:focus,.ui-toc-dropdown[dir=rtl] .nav .nav>li>a:hover{padding-right:29px}.ui-toc-dropdown .nav .nav>li>ul>li>a:focus,.ui-toc-dropdown .nav .nav>li>ul>li>a:hover{padding-left:39px}.ui-toc-dropdown[dir=rtl] .nav .nav>li>ul>li>a:focus,.ui-toc-dropdown[dir=rtl] .nav .nav>li>ul>li>a:hover{padding-right:39px}.ui-toc-dropdown .nav .nav>.active:focus>a,.ui-toc-dropdown .nav .nav>.active:hover>a,.ui-toc-dropdown .nav .nav>.active>a{padding-left:28px;font-weight:500}.ui-toc-dropdown[dir=rtl] .nav .nav>.active:focus>a,.ui-toc-dropdown[dir=rtl] .nav .nav>.active:hover>a,.ui-toc-dropdown[dir=rtl] .nav .nav>.active>a{padding-right:28px}.ui-toc-dropdown .nav .nav>.active>.nav>.active:focus>a,.ui-toc-dropdown .nav .nav>.active>.nav>.active:hover>a,.ui-toc-dropdown .nav .nav>.active>.nav>.active>a{padding-left:38px;font-weight:500}.ui-toc-dropdown[dir=rtl] .nav .nav>.active>.nav>.active:focus>a,.ui-toc-dropdown[dir=rtl] .nav .nav>.active>.nav>.active:hover>a,.ui-toc-dropdown[dir=rtl] .nav .nav>.active>.nav>.active>a{padding-right:38px}.markdown-body[lang^=ja]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Helvetica,Arial,Hiragino Kaku Gothic Pro,\\30D2\30E9\30AE\30CE\89D2\30B4 Pro W3,Osaka,Meiryo,\\30E1\30A4\30EA\30AA,MS Gothic,"\FF2D\FF33 \30B4\30B7\30C3\30AF",sans-serif}.ui-toc-dropdown[lang^=ja]{font-family:Source Sans Pro,Helvetica,Arial,Meiryo UI,MS PGothic,"\FF2D\FF33 \FF30\30B4\30B7\30C3\30AF",sans-serif}.markdown-body[lang=zh-tw]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Helvetica,Arial,PingFang TC,Microsoft JhengHei,\\5FAE\8EDF\6B63\9ED1,sans-serif}.ui-toc-dropdown[lang=zh-tw]{font-family:Source Sans Pro,Helvetica,Arial,Microsoft JhengHei UI,\\5FAE\8EDF\6B63\9ED1UI,sans-serif}.markdown-body[lang=zh-cn]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Helvetica,Arial,PingFang SC,Microsoft YaHei,\\5FAE\8F6F\96C5\9ED1,sans-serif}.ui-toc-dropdown[lang=zh-cn]{font-family:Source Sans Pro,Helvetica,Arial,Microsoft YaHei UI,\\5FAE\8F6F\96C5\9ED1UI,sans-serif}.ui-affix-toc{position:fixed;top:0;max-width:15vw;max-height:70vh;overflow:auto}.back-to-top,.expand-toggle,.go-to-bottom{display:block;padding:4px 10px;margin-top:10px;margin-left:10px;font-size:12px;font-weight:500;color:#999}.back-to-top:focus,.back-to-top:hover,.expand-toggle:focus,.expand-toggle:hover,.go-to-bottom:focus,.go-to-bottom:hover{color:#563d7c;text-decoration:none}.back-to-top,.go-to-bottom{margin-top:0}.ui-user-icon{width:20px;height:20px;display:block;border-radius:3px;margin-top:2px;margin-bottom:2px;margin-right:5px;background-position:50%;background-repeat:no-repeat;background-size:contain}.ui-user-icon.small{width:18px;height:18px;display:inline-block;vertical-align:middle;margin:0 0 .2em}.ui-infobar>small>span{line-height:22px}.ui-infobar>small .dropdown{display:inline-block}.ui-infobar>small .dropdown a:focus,.ui-infobar>small .dropdown a:hover{text-decoration:none}.unselectable{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}@media print{blockquote,div,img,pre,table{page-break-inside:avoid!important}a[href]:after{font-size:12px!important}}.markdown-body.slides{position:relative;z-index:1;color:#222}.markdown-body.slides:before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1;background-color:currentColor;box-shadow:0 0 0 50vw}.markdown-body.slides section[data-markdown]{position:relative;margin-bottom:1.5em;background-color:#fff;text-align:center}.markdown-body.slides section[data-markdown] code{text-align:left}.markdown-body.slides section[data-markdown]:before{content:"";display:block;padding-bottom:56.23%}.markdown-body.slides section[data-markdown]>div:first-child{position:absolute;top:50%;left:1em;right:1em;transform:translateY(-50%);max-height:100%;overflow:hidden}.markdown-body.slides section[data-markdown]>ul{display:inline-block}.markdown-body.slides>section>section+section:after{content:"";position:absolute;top:-1.5em;right:1em;height:1.5em;border:3px solid #777}body{font-smoothing:subpixel-antialiased!important;-webkit-font-smoothing:subpixel-antialiased!important;-moz-osx-font-smoothing:auto!important;text-shadow:0 0 1em transparent,1px 1px 1.2px rgba(0,0,0,.004);-webkit-overflow-scrolling:touch;font-family:Source Sans Pro,Helvetica,Arial,sans-serif;letter-spacing:.025em}.focus,:focus{outline:none!important}::-moz-focus-inner{border:0!important}body.modal-open{overflow-y:auto;padding-right:0!important}
27 </style>
28 <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
29 <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
30 <!--[if lt IE 9]>
31 <script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js" integrity="sha256-3Jy/GbSLrg0o9y5Z5n1uw0qxZECH7C6OQpVBgNFYa0g=" crossorigin="anonymous"></script>
32 <script src="https://cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js" integrity="sha256-g6iAfvZp+nDQ2TdTR/VVKJf3bGro4ub5fvWSWVRi2NE=" crossorigin="anonymous"></script>
33 <script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.5.9/es5-shim.min.js" integrity="sha256-8E4Is26QH0bD52WoQpcB+R/tcWQtpzlCojrybUd7Mxo=" crossorigin="anonymous"></script>
34 <![endif]-->
35</head>
36
37<body>
38 <div id="doc" class="markdown-body container-fluid" style="position: relative;"><style>
39
40strong {
41background: lavender;
42color: darkolivegreen;
43padding: 0.5em;
44}
45
46.accent-box {
47 display: grid;
48 grid-template-columns: 1fr 1fr;
49 text-align: center;
50 font-size: 1.1em;
51 background-color: lavender;
52 color: darkolivegreen;
53 padding: 0.5em;
54}
55 @media (max-width: 667px){
56 .accent-box{
57 grid-template-columns: 1fr;
58 }
59 }
60
61.accent-box p {
62margin: 0.25em;
63text-align: center;
64font-size: 1.1em
65}
66
67.resume{
68margin-top: 1em;
69}
70</style><h1 id="Zach-Mandeville-Web-Developer-for-an-Optimistic-Future"><a class="anchor hidden-xs" href="#Zach-Mandeville-Web-Developer-for-an-Optimistic-Future" title="Zach-Mandeville-Web-Developer-for-an-Optimistic-Future"><span class="octicon octicon-link"></span></a>Zach Mandeville, Web Developer for an Optimistic Future</h1><div class="accent-box">
71<p>webmaster@coolguy.website</p>
72<p>+22 406 7787</p>
73<p>My git|<a href="https://github.com/zachmandeville/" title="github of zach" target="_blank">hub</a>|<a href="https://gitlab.com/zachmandeville" title="github of zach mandeville" target="_blank">lab</a></p>
74<p><a href="https://coolguy.website" title="home page of Zach Mandeville" target="_blank">My Website</a></p>
75</div><h1 id="Personal-Statement"><a class="anchor hidden-xs" href="#Personal-Statement" title="Personal-Statement"><span class="octicon octicon-link"></span></a>Personal Statement</h1><p>I am a curious and creative developer who integrates empathy and communication as fundamental tools of my coding practice. I believe technology is most helpful when people are empowered to understand and use it creatively. I am passionate about building software for an abundant future, where everyone is invited to build tools for their communities, and to discover their own bright paths. This is why I am so active in the emerging p2p community— building apps for <a href="https://scuttlebutt.nz" target="_blank">Scuttlebutt</a> and <a href="http://datproject.org/" target="_blank">Dat</a>.</p><p>I started my professional life as a barber, then moved into a tech support role at a local startup. Over 5 years that startup grew from a team of 20, to a team of 100 to a global company with over 500 employees. Over this time, I grew too, from support, to sales engineering, to a product manager for an emerging product line. This path helped me discover a deep love of technology and the expressive possibilities of code. After discovering and joining a tech community that started in New Zealand, I decided to move here and attend Enspiral Dev Academy.</p><h1 id="Skills"><a class="anchor hidden-xs" href="#Skills" title="Skills"><span class="octicon octicon-link"></span></a>Skills</h1><p>Javascript, Node, React, Redux, <a href="https://choo.io" target="_blank">Choo</a>, <a href="https://scuttlebutt.nz" target="_blank">Secure Scuttlebutt</a>, P2P <a href="https://datproject.org" target="_blank">Dat apps</a> for the <a href="https://beakerbrowser.com" target="_blank">beaker browser</a>, non-technical documentation, storytelling, product management, building digital infrastructures for cross-team collaboration, explaining complex technology through simple stories, launch planning, HTML/CSS, fades and scissor cuts.</p><h1 id="Projects"><a class="anchor hidden-xs" href="#Projects" title="Projects"><span class="octicon octicon-link"></span></a>Projects</h1><p><strong><a href="https://gitlab.com/zachmandeville/dat-zine-library" target="_blank">Dat Zine Library</a></strong></p><p>This is a self-mutating and self-replicating website built for the dat protocol and Beaker browser. It lets the library owner add new zines they find on the decentralized web to their library, and lets visitors easily fork the site and create their own library branch. This is a work-in-progress that I started to better learn the dat protocol, practice different javascript frameworks, and help translate my enthusiasm for this decentralized web.</p><p><strong><a href="https://gitlab.com/zachmandeville/wheat-paste" target="_blank">Wheatpaste: Party Posters For Future Folks</a></strong></p><p>This is a similar work in progress, that utilizes cutting edge technology (the dat protocol and the beaker browser) to help people quickly make good old fashioned show posters and party invites.</p><p><strong><a href="" target="_blank">Atua Web</a></strong></p><p>Our final project for Enspiral Dev Academy, envisioned and built over one week. I worked on the web-supplement to an AR app that put the god Tāwhirimātea on top of Mount Victoria. Our site transmitted the spirit of the project by being fully bilingual with Te Reo is the primary text and English only revealing itself through active participation of the viewer. It is built on top of a database designed for translators, where the person submitting new writing can submit the original and translated text simultaneously, giving them more control for how the text is read.</p><p><strong><a href="https://scuttlebutt.nz" target="_blank">Scuttlebutt</a></strong></p><p>I contribute to the work and culture of <a href="https://scuttlebutt.nz" target="_blank">Scuttlebutt</a>, a decentralized protocol and social network that points towards a more optimistic future. I fell in love with this project before I knew how to code, and so contributed to the documentation first. I helped write the <a href="https://www.scuttlebutt.nz/faq/channels/channels.html" target="_blank">FAQ on scuttlebutt.nz</a>, and made a short video (<a href="https://vimeo.com/236358264" target="_blank">SSB: A Love Story</a>) that explained how Scuttlebutt worked using the metaphor of a love story.</p><p>My contributions led to me being awarded a grant to create more non-technical and cultural resources. During the grant period, I wrote <a href="https://coolguy.website/the-future-will-be-technical" target="_blank">The Future Will be Technical</a>, An inspirational guide to the developers and community members of Scuttlebutt.</p><h1 id="Experience"><a class="anchor hidden-xs" href="#Experience" title="Experience"><span class="octicon octicon-link"></span></a>Experience</h1><h2 id="Enspiral-Dev-Academy-March-2018-to-May-2018"><a class="anchor hidden-xs" href="#Enspiral-Dev-Academy-March-2018-to-May-2018" title="Enspiral-Dev-Academy-March-2018-to-May-2018"><span class="octicon octicon-link"></span></a>Enspiral Dev Academy, March 2018 to May 2018</h2><p>I attended this intensive and immersive coding school created by the Enspiral Network. The course offered technical training in full-stack web development, but also trained in the more human skills of empathy, team-building, communication, and feedback. The goal of the school was to empower your passion in code by training you how to collaborate better with others. Each week had a different group project that exemplified our training so far, culminating in one final group project and presentation. I also started and helped maintain the wiki for our class, to help share knowledge better among our classmates.</p><h2 id="Product-Manager-Lightspeed-Point-of-Sale-July-2016-to-February-2018"><a class="anchor hidden-xs" href="#Product-Manager-Lightspeed-Point-of-Sale-July-2016-to-February-2018" title="Product-Manager-Lightspeed-Point-of-Sale-July-2016-to-February-2018"><span class="octicon octicon-link"></span></a>Product Manager, Lightspeed Point of Sale, July 2016 to February 2018</h2><p>I helped the design, development, implementation, and launch of a new product, Lightspeed Analytics. Analytics started as a bespoke reporting tool made by a small group of former Lightspeed developers. So my work included not just helping transform the technology, but also building communication tools between this external team and our larger company.</p><p>This was a pleasant period as my team was quite small and we were working in an entirely new space for our market, and so my role required flexibility and many different tasks. These included:</p><p><strong>Product Planning and Team Vision</strong></p><ul>
76<li>I helped refine the Analytics product to be more accessible to our customers and wrote customer documentation that showed how to not just navigate the software, but to use its findings to make better real-life decisions in your store.</li>
77<li>We used agile methodology and continuous delivery to keep our team (and product) robust and adaptive.</li>
78</ul><p><strong>Communication and Coordination</strong></p><ul>
79<li>I built an integrated communication infrastructure between this external team and our larger company, so that both sides could stay informed on the activity and needs of the other without having to upset their personal workflows.</li>
80<li>I also nurtured a a group of enthusiastic customers, holding regular check-ins to better see how our app was being used in their stores and what could be improved.</li>
81</ul><p><strong>Launching the Product</strong></p><ul>
82<li>I led the planning of the product’s launch, which was done holistically. I drafted broad company strategies, copy for marketing, and internal resources for the sales team. I organized and nurtured a customer success team, and travelled to the different offices to do in-depth in-person training.</li>
83</ul><p><strong>Support and Documentation</strong></p><ul>
84<li>I built out a rich wiki for the support team to learn, debug, and grow their skills with Analytics and handled support for our early customers while the rest of the company was being trained.</li>
85</ul><p>I had to use compassion and adaptive communication to fill these roles, and the work of my team led to the most successful launch of a product in Lightspeed’s history and one of my proudest accomplishments.</p><h2 id="Sales-Engineer-Lightspeed-Point-of-Sale-September-2013-to-July-2016"><a class="anchor hidden-xs" href="#Sales-Engineer-Lightspeed-Point-of-Sale-September-2013-to-July-2016" title="Sales-Engineer-Lightspeed-Point-of-Sale-September-2013-to-July-2016"><span class="octicon octicon-link"></span></a>Sales Engineer, Lightspeed Point of Sale, September 2013 to July 2016</h2><p>I assisted Sales people in closing deals by offering technical assistance and deep demonstrations of our software. Each potential customer had a different background, and unique needs, and so the way I assisted was equally varied.</p><p><strong>Technical Demos</strong></p><ul>
86<li>I ran tailored demos for customers, and represented Lightspeed at different conventions around the united States.</li>
87<li>I designed and ran webinars to show our product to potential customers or to demonstrate new features to our existing customers.</li>
88<li>I helped the technical teams of larger customers better understand our API to guide their integrations.</li>
89</ul><p><strong>Documentation</strong></p><ul>
90<li>I wrote product marketing articles, videos, and guides, to help our sales team (and network of resellers) learn our new features.</li>
91<li>I did regular competitive research, then translated this research into tools for the sales team, and reports for the product team.</li>
92</ul><p><strong>Beta Planning and Management</strong></p><ul>
93<li>
94<p>When our company acquired an eccomerce platform from the Netherlands, I was put in charge with establishing a beta program to see how the product could be localized to our North American Market. The beta program involved setting up a cross-department team to evaluate how the product was performing from development, to sales, to onboarding, to support.</p>
95</li>
96<li>
97<p>I also established tools and workflows for better asynchronous communication, as our team included members from multiple offices in multiple continents. I worked with the product team in the Netherlands, designing new user stories based on customer feedback, and prioritizing the features needed for successful localization.</p>
98</li>
99</ul><p>It was this latter work that got me excited to be a Product Manager, and led to my role change outlined above.</p><h2 id="Support-and-Training-MerchantOS-August-2012-to-September-2013"><a class="anchor hidden-xs" href="#Support-and-Training-MerchantOS-August-2012-to-September-2013" title="Support-and-Training-MerchantOS-August-2012-to-September-2013"><span class="octicon octicon-link"></span></a>Support and Training, MerchantOS, August 2012 to September 2013</h2><p>I joined a small retail Point-of-Sale startup in Olympia, Washington as a Customer Hero. The company had a flat structure, with only two roles-- customer hero and developer-- so I had a diverse set of responsibilities.</p><ul>
100<li>I handled customer support for current customers and curious potential customers.</li>
101<li>I helped run daily webinars about our product.</li>
102<li>I designed a training manual for new customer heroes that transmitted both technical training and company culture. This manual took the form of a Dungeons and Dragons campaign, where new hires helped save a village of retail-store owning minotaurs through the smart use of our Point of Sale software.</li>
103</ul><p>MerchantOS was acquired by Lightspeed Point of Sale, with the intent to transform our software into Lightspeed’s primary offering. During the acquisition, my role expanded to include broader company training to get Lightspeed’s existing sales and support team up-to-date with how our software worked. This expansion led to my changing roles into Sales Engineering and Training, outlined above.</p><h2 id="Barber-Self-Employed-April-2006-to-September-2012"><a class="anchor hidden-xs" href="#Barber-Self-Employed-April-2006-to-September-2012" title="Barber-Self-Employed-April-2006-to-September-2012"><span class="octicon octicon-link"></span></a>Barber, Self-Employed: April, 2006 to September, 2012</h2><p>I worked as an independent barber in two different shops in my hometown of Olympia. I started the job because I was young and romantic and wanted to live as a folk tale–but it ended up teaching me valuable skills that I’ve used in all subsequent work.</p><p>For one, I regularly interacted with a deep cross-section of people from a diverse set of backgrounds. I developed skills to communicate and connect with people, regardless of how different our lives were, and find the common point of bonding–whether that’s hair that needs to be cut or code that needs to be made.</p><p>The best skill I developed was how to listen well. There’s a difference between what people say and what people intended to say, and barbers are keenly aware of that gap (it is felt anytime someone says ‘I want a medium trim’ and you have a different understanding of the words medium and trim). I learned to quickly find a shared language with any person, listen well to their needs and the stories they wanted to give me, and deliver them the exact haircut and experience they wanted. This instilled communicable empathy as the most crucial aspect of my professional life.</p><p>While barbering, I cut the hair for most of a small startup who were doing exciting things, were fun to be around, and who invited me to be a part of their team. This led to all the work outlined above.</p><h1 id="Education"><a class="anchor hidden-xs" href="#Education" title="Education"><span class="octicon octicon-link"></span></a>Education</h1><p><strong>Enspiral Dev Academy</strong></p><p>I took an 18 week intensive web development bootcamp, with an emphasis on Node.js, React, and Redux. The tenor and shape of this work is outlined above in my experience section…</p><p><strong>The Evergreen State College, September 2003 to April 2006</strong></p><p>I studied writing, Irish literature, and bookbinding at this radically run state university. I graduated with a Bachelor of Arts in Writing.</p></div>
104 <div class="ui-toc dropup unselectable hidden-print" style="display:none;">
105 <div class="pull-right dropdown">
106 <a id="tocLabel" class="ui-toc-label btn btn-default" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false" title="Table of content">
107 <i class="fa fa-bars"></i>
108 </a>
109 <ul id="ui-toc" class="ui-toc-dropdown dropdown-menu" aria-labelledby="tocLabel">
110 <div class="toc"><ul class="nav"><li><a href="#Zach-Mandeville-Web-Developer-for-an-Optimistic-Future" title="Zach Mandeville, Web Developer for an Optimistic Future">Zach Mandeville, Web Developer for an Optimistic Future</a></li><li><a href="#Personal-Statement" title="Personal Statement">Personal Statement</a></li><li class=""><a href="#Skills" title="Skills">Skills</a></li><li><a href="#Projects" title="Projects">Projects</a></li><li><a href="#Experience" title="Experience">Experience</a><ul class="nav"><li><a href="#Enspiral-Dev-Academy-March-2018-to-May-2018" title="Enspiral Dev Academy, March 2018 to May 2018">Enspiral Dev Academy, March 2018 to May 2018</a></li><li><a href="#Product-Manager-Lightspeed-Point-of-Sale-July-2016-to-February-2018" title="Product Manager, Lightspeed Point of Sale, July 2016 to February 2018">Product Manager, Lightspeed Point of Sale, July 2016 to February 2018</a></li><li><a href="#Sales-Engineer-Lightspeed-Point-of-Sale-September-2013-to-July-2016" title="Sales Engineer, Lightspeed Point of Sale, September 2013 to July 2016">Sales Engineer, Lightspeed Point of Sale, September 2013 to July 2016</a></li><li><a href="#Support-and-Training-MerchantOS-August-2012-to-September-2013" title="Support and Training, MerchantOS, August 2012 to September 2013">Support and Training, MerchantOS, August 2012 to September 2013</a></li><li><a href="#Barber-Self-Employed-April-2006-to-September-2012" title="Barber, Self-Employed: April, 2006 to September, 2012">Barber, Self-Employed: April, 2006 to September, 2012</a></li></ul></li><li><a href="#Education" title="Education">Education</a></li></ul></div><div class="toc-menu"><a class="expand-toggle" href="#">Expand all</a><a class="back-to-top" href="#">Back to top</a><a class="go-to-bottom" href="#">Go to bottom</a></div>
111 </ul>
112 </div>
113 </div>
114 <div id="ui-toc-affix" class="ui-affix-toc ui-toc-dropdown unselectable hidden-print" data-spy="affix" style="top:17px;display:none;" >
115 <div class="toc"><ul class="nav"><li><a href="#Zach-Mandeville-Web-Developer-for-an-Optimistic-Future" title="Zach Mandeville, Web Developer for an Optimistic Future">Zach Mandeville, Web Developer for an Optimistic Future</a></li><li><a href="#Personal-Statement" title="Personal Statement">Personal Statement</a></li><li class=""><a href="#Skills" title="Skills">Skills</a></li><li><a href="#Projects" title="Projects">Projects</a></li><li><a href="#Experience" title="Experience">Experience</a><ul class="nav"><li><a href="#Enspiral-Dev-Academy-March-2018-to-May-2018" title="Enspiral Dev Academy, March 2018 to May 2018">Enspiral Dev Academy, March 2018 to May 2018</a></li><li><a href="#Product-Manager-Lightspeed-Point-of-Sale-July-2016-to-February-2018" title="Product Manager, Lightspeed Point of Sale, July 2016 to February 2018">Product Manager, Lightspeed Point of Sale, July 2016 to February 2018</a></li><li><a href="#Sales-Engineer-Lightspeed-Point-of-Sale-September-2013-to-July-2016" title="Sales Engineer, Lightspeed Point of Sale, September 2013 to July 2016">Sales Engineer, Lightspeed Point of Sale, September 2013 to July 2016</a></li><li><a href="#Support-and-Training-MerchantOS-August-2012-to-September-2013" title="Support and Training, MerchantOS, August 2012 to September 2013">Support and Training, MerchantOS, August 2012 to September 2013</a></li><li><a href="#Barber-Self-Employed-April-2006-to-September-2012" title="Barber, Self-Employed: April, 2006 to September, 2012">Barber, Self-Employed: April, 2006 to September, 2012</a></li></ul></li><li><a href="#Education" title="Education">Education</a></li></ul></div><div class="toc-menu"><a class="expand-toggle" href="#">Expand all</a><a class="back-to-top" href="#">Back to top</a><a class="go-to-bottom" href="#">Go to bottom</a></div>
116 </div>
117 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script>
118 <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha256-U5ZEeKfGNOja007MMD3YBI0A3OSZOQbeG6z2f2Y0hu8=" crossorigin="anonymous" defer></script>
119 <script src="https://cdnjs.cloudflare.com/ajax/libs/gist-embed/2.6.0/gist-embed.min.js" integrity="sha256-KyF2D6xPIJUW5sUDSs93vWyZm+1RzIpKCexxElmxl8g=" crossorigin="anonymous" defer></script>
120 <script>
121 var markdown = $(".markdown-body");
122 //smooth all hash trigger scrolling
123 function smoothHashScroll() {
124 var hashElements = $("a[href^='#']").toArray();
125 for (var i = 0; i < hashElements.length; i++) {
126 var element = hashElements[i];
127 var $element = $(element);
128 var hash = element.hash;
129 if (hash) {
130 $element.on('click', function (e) {
131 // store hash
132 var hash = this.hash;
133 if ($(hash).length <= 0) return;
134 // prevent default anchor click behavior
135 e.preventDefault();
136 // animate
137 $('body, html').stop(true, true).animate({
138 scrollTop: $(hash).offset().top
139 }, 100, "linear", function () {
140 // when done, add hash to url
141 // (default click behaviour)
142 window.location.hash = hash;
143 });
144 });
145 }
146 }
147 }
148
149 smoothHashScroll();
150 var toc = $('.ui-toc');
151 var tocAffix = $('.ui-affix-toc');
152 var tocDropdown = $('.ui-toc-dropdown');
153 //toc
154 tocDropdown.click(function (e) {
155 e.stopPropagation();
156 });
157
158 var enoughForAffixToc = true;
159
160 function generateScrollspy() {
161 $(document.body).scrollspy({
162 target: ''
163 });
164 $(document.body).scrollspy('refresh');
165 if (enoughForAffixToc) {
166 toc.hide();
167 tocAffix.show();
168 } else {
169 tocAffix.hide();
170 toc.show();
171 }
172 $(document.body).scroll();
173 }
174
175 function windowResize() {
176 //toc right
177 var paddingRight = parseFloat(markdown.css('padding-right'));
178 var right = ($(window).width() - (markdown.offset().left + markdown.outerWidth() - paddingRight));
179 toc.css('right', right + 'px');
180 //affix toc left
181 var newbool;
182 var rightMargin = (markdown.parent().outerWidth() - markdown.outerWidth()) / 2;
183 //for ipad or wider device
184 if (rightMargin >= 133) {
185 newbool = true;
186 var affixLeftMargin = (tocAffix.outerWidth() - tocAffix.width()) / 2;
187 var left = markdown.offset().left + markdown.outerWidth() - affixLeftMargin;
188 tocAffix.css('left', left + 'px');
189 } else {
190 newbool = false;
191 }
192 if (newbool != enoughForAffixToc) {
193 enoughForAffixToc = newbool;
194 generateScrollspy();
195 }
196 }
197 $(window).resize(function () {
198 windowResize();
199 });
200 $(document).ready(function () {
201 windowResize();
202 generateScrollspy();
203 });
204
205 //remove hash
206 function removeHash() {
207 window.location.hash = '';
208 }
209
210 var backtotop = $('.back-to-top');
211 var gotobottom = $('.go-to-bottom');
212
213 backtotop.click(function (e) {
214 e.preventDefault();
215 e.stopPropagation();
216 if (scrollToTop)
217 scrollToTop();
218 removeHash();
219 });
220 gotobottom.click(function (e) {
221 e.preventDefault();
222 e.stopPropagation();
223 if (scrollToBottom)
224 scrollToBottom();
225 removeHash();
226 });
227
228 var toggle = $('.expand-toggle');
229 var tocExpand = false;
230
231 checkExpandToggle();
232 toggle.click(function (e) {
233 e.preventDefault();
234 e.stopPropagation();
235 tocExpand = !tocExpand;
236 checkExpandToggle();
237 })
238
239 function checkExpandToggle () {
240 var toc = $('.ui-toc-dropdown .toc');
241 var toggle = $('.expand-toggle');
242 if (!tocExpand) {
243 toc.removeClass('expand');
244 toggle.text('Expand all');
245 } else {
246 toc.addClass('expand');
247 toggle.text('Collapse all');
248 }
249 }
250
251 function scrollToTop() {
252 $('body, html').stop(true, true).animate({
253 scrollTop: 0
254 }, 100, "linear");
255 }
256
257 function scrollToBottom() {
258 $('body, html').stop(true, true).animate({
259 scrollTop: $(document.body)[0].scrollHeight
260 }, 100, "linear");
261 }
262 </script>
263</body>
264
265</html>
266

Built with git-ssb-web