├── .firebaserc ├── .github └── workflows │ └── main.yml ├── .gitignore ├── README.md ├── database.rules.json ├── firebase.json ├── firestore.indexes.json ├── firestore.rules ├── functions ├── .eslintrc.json ├── .gitignore ├── index.js ├── package.json ├── resume.html ├── resume.json ├── screenshots │ ├── .DS_Store │ ├── ace.png │ ├── apage.png │ ├── class.png │ ├── classy.png │ ├── cora.png │ ├── crispy-potato.png │ ├── dave.png │ ├── elegant.png │ ├── elite.png │ ├── eloquent.png │ ├── flat.png │ ├── kards.png │ ├── keloran.png │ ├── kendall.png │ ├── kwan.png │ ├── latex.png │ ├── mantra.png │ ├── mocha-responsive.png │ ├── modern.png │ ├── onepage.png │ ├── onepageresume.png │ ├── orbit.png │ ├── paper.png │ ├── papirus.png │ ├── pumpkin.png │ ├── rocketspacer.png │ ├── short.png │ ├── simple-red.png │ ├── slick.png │ ├── spartan.png │ ├── srt.png │ ├── stackoverflow.png │ ├── verbum.png │ └── wraypro.png ├── template.html └── yarn.lock └── public └── index.html /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "prod": "jsonresume-registry" 4 | } 5 | } -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: CI 4 | 5 | # Controls when the action will run. Triggers the workflow on push or pull request 6 | # events but only for the master branch 7 | on: 8 | push: 9 | branches: [ master ] 10 | 11 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 12 | jobs: 13 | # This workflow contains a single job called "build" 14 | build: 15 | # The type of runner that the job will run on 16 | runs-on: ubuntu-latest 17 | env: 18 | NODE_ENV: production 19 | # Steps represent a sequence of tasks that will be executed as part of the job 20 | steps: 21 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 22 | - uses: actions/checkout@v2 23 | - uses: actions/setup-node@v2 24 | with: 25 | node-version: '16' 26 | #- name: Authenticate to Google Cloud 27 | # uses: google-github-actions/auth@v1 28 | 29 | # Runs a set of commands using the runners shell 30 | - name: Attempting to install npm packages 31 | run: | 32 | echo Installing 33 | cd functions 34 | npm i -g yarn && yarn install 35 | 36 | - name: Deploy to Firebase 37 | uses: w9jds/firebase-action@master 38 | with: 39 | args: deploy 40 | env: 41 | FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} 42 | GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS}} 43 | FIREBASE_PROJECT: jsonresume-registry 44 | NODE_ENV: production 45 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | creds.json 2 | # Logs 3 | logs 4 | *.log 5 | npm-debug.log* 6 | yarn-debug.log* 7 | yarn-error.log* 8 | firebase-debug.log* 9 | 10 | # Firebase cache 11 | .firebase/ 12 | 13 | # Firebase config 14 | 15 | # Uncomment this if you'd like others to create their own Firebase project. 16 | # For a team working on the same Firebase project(s), it is recommended to leave 17 | # it commented so all members can deploy to the same project(s) in .firebaserc. 18 | # .firebaserc 19 | 20 | # Runtime data 21 | pids 22 | *.pid 23 | *.seed 24 | *.pid.lock 25 | 26 | # Directory for instrumented libs generated by jscoverage/JSCover 27 | lib-cov 28 | 29 | # Coverage directory used by tools like istanbul 30 | coverage 31 | 32 | # nyc test coverage 33 | .nyc_output 34 | 35 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 36 | .grunt 37 | 38 | # Bower dependency directory (https://bower.io/) 39 | bower_components 40 | 41 | # node-waf configuration 42 | .lock-wscript 43 | 44 | # Compiled binary addons (http://nodejs.org/api/addons.html) 45 | build/Release 46 | 47 | # Dependency directories 48 | node_modules/ 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Optional REPL history 57 | .node_repl_history 58 | 59 | # Output of 'npm pack' 60 | *.tgz 61 | 62 | # Yarn Integrity file 63 | .yarn-integrity 64 | 65 | # dotenv environment variables file 66 | .env 67 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Registry Functions 2 | 3 | This repository is responsible for our free community hosting. 4 | 5 | It currently runs on Firebase. 6 | 7 | -------------------------------------------------------------------------------- /database.rules.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | ".read": "auth != null", 4 | ".write": "auth != null" 5 | } 6 | } -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "database": { 3 | "rules": "database.rules.json" 4 | }, 5 | "functions": { 6 | "predeploy": ["echo no predeploy"] 7 | }, 8 | "hosting": { 9 | "public": "public", 10 | "ignore": ["**.png", "firebase.json", "**/.*", "**/node_modules/**"], 11 | "rewrites": [ 12 | { 13 | "source": "**", 14 | "function": "registry" 15 | } 16 | ] 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /firestore.indexes.json: -------------------------------------------------------------------------------- 1 | { 2 | "indexes": [], 3 | "fieldOverrides": [] 4 | } 5 | -------------------------------------------------------------------------------- /firestore.rules: -------------------------------------------------------------------------------- 1 | rules_version = '2'; 2 | service cloud.firestore { 3 | match /databases/{database}/documents { 4 | match /{document=**} { 5 | allow read, write; 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /functions/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "parserOptions": { 3 | // Required for certain syntax usages 4 | "ecmaVersion": 2017 5 | }, 6 | "plugins": [ 7 | "promise" 8 | ], 9 | "extends": "eslint:recommended", 10 | "rules": { 11 | // Removed rule "disallow the use of console" from recommended eslint rules 12 | "no-console": "off", 13 | 14 | // Removed rule "disallow multiple spaces in regular expressions" from recommended eslint rules 15 | "no-regex-spaces": "off", 16 | 17 | // Removed rule "disallow the use of debugger" from recommended eslint rules 18 | "no-debugger": "off", 19 | 20 | // Removed rule "disallow unused variables" from recommended eslint rules 21 | "no-unused-vars": "off", 22 | 23 | // Removed rule "disallow mixed spaces and tabs for indentation" from recommended eslint rules 24 | "no-mixed-spaces-and-tabs": "off", 25 | 26 | // Removed rule "disallow the use of undeclared variables unless mentioned in /*global */ comments" from recommended eslint rules 27 | "no-undef": "off", 28 | 29 | // Warn against template literal placeholder syntax in regular strings 30 | "no-template-curly-in-string": 1, 31 | 32 | // Warn if return statements do not either always or never specify values 33 | "consistent-return": 1, 34 | 35 | // Warn if no return statements in callbacks of array methods 36 | "array-callback-return": 1, 37 | 38 | // Require the use of === and !== 39 | "eqeqeq": 2, 40 | 41 | // Disallow the use of alert, confirm, and prompt 42 | "no-alert": 2, 43 | 44 | // Disallow the use of arguments.caller or arguments.callee 45 | "no-caller": 2, 46 | 47 | // Disallow null comparisons without type-checking operators 48 | "no-eq-null": 2, 49 | 50 | // Disallow the use of eval() 51 | "no-eval": 2, 52 | 53 | // Warn against extending native types 54 | "no-extend-native": 1, 55 | 56 | // Warn against unnecessary calls to .bind() 57 | "no-extra-bind": 1, 58 | 59 | // Warn against unnecessary labels 60 | "no-extra-label": 1, 61 | 62 | // Disallow leading or trailing decimal points in numeric literals 63 | "no-floating-decimal": 2, 64 | 65 | // Warn against shorthand type conversions 66 | "no-implicit-coercion": 1, 67 | 68 | // Warn against function declarations and expressions inside loop statements 69 | "no-loop-func": 1, 70 | 71 | // Disallow new operators with the Function object 72 | "no-new-func": 2, 73 | 74 | // Warn against new operators with the String, Number, and Boolean objects 75 | "no-new-wrappers": 1, 76 | 77 | // Disallow throwing literals as exceptions 78 | "no-throw-literal": 2, 79 | 80 | // Require using Error objects as Promise rejection reasons 81 | "prefer-promise-reject-errors": 2, 82 | 83 | // Enforce “for” loop update clause moving the counter in the right direction 84 | "for-direction": 2, 85 | 86 | // Enforce return statements in getters 87 | "getter-return": 2, 88 | 89 | // Disallow await inside of loops 90 | "no-await-in-loop": 2, 91 | 92 | // Disallow comparing against -0 93 | "no-compare-neg-zero": 2, 94 | 95 | // Warn against catch clause parameters from shadowing variables in the outer scope 96 | "no-catch-shadow": 1, 97 | 98 | // Disallow identifiers from shadowing restricted names 99 | "no-shadow-restricted-names": 2, 100 | 101 | // Enforce return statements in callbacks of array methods 102 | "callback-return": 2, 103 | 104 | // Require error handling in callbacks 105 | "handle-callback-err": 2, 106 | 107 | // Warn against string concatenation with __dirname and __filename 108 | "no-path-concat": 1, 109 | 110 | // Prefer using arrow functions for callbacks 111 | "prefer-arrow-callback": 1, 112 | 113 | // Return inside each then() to create readable and reusable Promise chains. 114 | // Forces developers to return console logs and http calls in promises. 115 | "promise/always-return": 2, 116 | 117 | //Enforces the use of catch() on un-returned promises 118 | "promise/catch-or-return": 2, 119 | 120 | // Warn against nested then() or catch() statements 121 | "promise/no-nesting": 1 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /functions/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /functions/index.js: -------------------------------------------------------------------------------- 1 | const _ = require("lodash"); 2 | const axios = require("axios"); 3 | const express = require("express"); 4 | const cors = require("cors"); 5 | const resumeSchema = require("resume-schema"); 6 | const fs = require("fs"); 7 | const qr = require("qr-image"); 8 | const app = express(); 9 | app.use(cors({ origin: true })); 10 | 11 | const packages = JSON.parse( 12 | fs.readFileSync(__dirname + "/package.json") 13 | ).dependencies; 14 | 15 | const themes = _.filter(_.keys(packages), (p) => { 16 | return p.indexOf("theme") !== -1; 17 | }); 18 | 19 | const makeTemplate = (message) => { 20 | const template = fs.readFileSync(__dirname + "/template.html", "utf8"); 21 | return template.replace("{MESSAGE}", message); 22 | }; 23 | const getTheme = (theme) => { 24 | try { 25 | return require(__dirname + "/node_modules/jsonresume-theme-" + theme); 26 | } catch (e) { 27 | return { 28 | e: e.toString(), 29 | error: 30 | "Theme is not supported please visit -> https://github.com/jsonresume/registry-functions/issues/7", 31 | }; 32 | } 33 | }; 34 | 35 | app.get("/themes", (req, res) => { 36 | res.send(themes); 37 | }); 38 | 39 | app.get("/theme/:theme", (req, res) => { 40 | const resumeJson = JSON.parse(fs.readFileSync(__dirname + "/resume.json")); 41 | const theme = req.params.theme.toLowerCase(); 42 | const themeRenderer = getTheme(theme); 43 | if (themeRenderer.error) { 44 | return res.send(themeRenderer.error + " - " + themeRenderer.e); 45 | } 46 | const resumeHTML = themeRenderer.render(resumeJson, {}); 47 | res.send(resumeHTML); 48 | }); 49 | app.get("/", (req, res) => { 50 | res.send("Visit jsonresume.org to learn more"); 51 | }); 52 | 53 | app.post("/theme/:theme", (req, res) => { 54 | console.log("Rendering theme"); 55 | const resumeJson = req.body.resume; 56 | var start = new Date(); 57 | const theme = req.params.theme.toLowerCase(); 58 | const themeRenderer = getTheme(theme); 59 | var end = new Date() - start; 60 | console.info("Execution time getTheme: %dms", end); 61 | if (themeRenderer.error) { 62 | return res.send(themeRenderer.error + " - " + themeRenderer.e); 63 | } 64 | start = new Date(); 65 | const resumeHTML = themeRenderer.render(resumeJson, {}); 66 | end = new Date() - start; 67 | console.info("Execution time render: %dms", end); 68 | console.log("finished"); 69 | res.send(resumeHTML); 70 | }); 71 | 72 | app.get("/:username.:ext", async (req, res) => { 73 | const username = req.params.username.split(".")[0]; 74 | const parsedFormat = req.params.ext.split("."); 75 | console.log("parsed", req.params.ext, parsedFormat); 76 | console.log("shit", req.params.ext, parsedFormat); 77 | if (parsedFormat[0] === "png") { 78 | var code = qr.image("https://registry.jsonresume.org/" + username, { 79 | type: "png", 80 | ec_level: "S", 81 | size: 60, 82 | margin: 1, 83 | }); 84 | res.setHeader("Content-type", "image/png"); 85 | code.pipe(res); 86 | } else { 87 | res.send( 88 | "Must be in the format of registry.jsonresume.org/thomasdavis.qr.png" 89 | ); 90 | } 91 | }); 92 | 93 | app.get("/:username", async (req, res) => { 94 | const username = req.params.username; 95 | if ( 96 | [ 97 | "favicon.ico", 98 | "competition", 99 | "stats", 100 | "apple-touch-icon.png", 101 | "apple-touch-icon-precomposed.png", 102 | "robots.txt", 103 | ].indexOf(username) !== -1 104 | ) { 105 | return res.send(null); 106 | } 107 | 108 | let gistId; 109 | console.log("Fetching gistId"); 110 | console.log(`https://api.github.com/users/${req.params.username}/gists`); 111 | let gistData = {}; 112 | try { 113 | gistData = await axios.get( 114 | `https://api.github.com/users/${req.params.username}/gists`, 115 | { 116 | headers: { 117 | Authorization: "Bearer " + process.env.GITHUB_TOKEN, 118 | }, 119 | } 120 | ); 121 | } catch (e) { 122 | return res.send(makeTemplate("This is not a valid Github username")); 123 | } 124 | if (!gistData.data) { 125 | return res.send(makeTemplate("This is not a valid Github username")); 126 | } 127 | const resumeUrl = _.find(gistData.data, (f) => { 128 | return f.files["resume.json"]; 129 | }); 130 | if (!resumeUrl) { 131 | return res.send(makeTemplate("You have no gists named resume.json")); 132 | } 133 | gistId = resumeUrl.id; 134 | const fullResumeGistUrl = 135 | `https://gist.githubusercontent.com/${username}/${gistId}/raw?cachebust=` + 136 | new Date().getTime(); 137 | let resumeRes = {}; 138 | 139 | try { 140 | resumeRes = await axios({ 141 | method: "GET", 142 | headers: { "content-type": "application/json" }, 143 | url: fullResumeGistUrl, 144 | }); 145 | } catch (e) { 146 | // If gist url is invalid, flush the gistid in cache 147 | return res.send( 148 | makeTemplate("The gist couldnt load, we flushed the cache so try again") 149 | ); 150 | } 151 | 152 | if (!resumeRes.data) { 153 | return res.send(makeTemplate("Something went wrong fetching resume")); 154 | } 155 | 156 | resumeSchema.validate(resumeRes.data, async (err, report) => { 157 | console.log("validation finished"); 158 | if (err) { 159 | console.log(err); 160 | return res.send( 161 | makeTemplate( 162 | "Resume json invalid - " + 163 | JSON.stringify(err) + 164 | " - Please visit https://github.com/jsonresume/registry-functions/issues/27" 165 | ) 166 | ); 167 | } 168 | let theme = 169 | req.query.theme || 170 | (resumeRes.data.meta && resumeRes.data.meta.theme) || 171 | "flat"; 172 | theme = theme.toLowerCase(); 173 | const themeRenderer = getTheme(theme); 174 | if (themeRenderer.error) { 175 | return res.send(themeRenderer.error + " - " + themeRenderer.e); 176 | } 177 | const resumeHTML = themeRenderer.render(resumeRes.data, {}); 178 | // if (!resumeHTMLRes.data) { 179 | // res.send("There was an error generatoring your resume"); 180 | // } 181 | res.set("Cache-control", "public, max-age=90"); 182 | res.send(resumeHTML); 183 | }); 184 | }); 185 | 186 | app.listen(80); 187 | -------------------------------------------------------------------------------- /functions/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "functions", 3 | "description": "Cloud Functions for Firebase", 4 | "scripts": { 5 | "lint": "eslint .", 6 | "serve": "firebase serve --only functions", 7 | "shell": "firebase functions:shell", 8 | "start": "npm run shell", 9 | "deploy": "firebase deploy --only functions", 10 | "logs": "firebase functions:log" 11 | }, 12 | "engines": { 13 | "node": "16" 14 | }, 15 | "dependencies": { 16 | "@godraadam/jsonresume-theme-minyma": "0.0.1", 17 | "axios": "^0.21.1", 18 | "cors": "^2.8.5", 19 | "even": "^0.1.1", 20 | "express": "^4.17.1", 21 | "firebase-admin": "^11.4.1", 22 | "firebase-functions": "^4.1.1", 23 | "jsonresume-theme-ace": "^1.1.0", 24 | "jsonresume-theme-actual": "^0.1.4", 25 | "jsonresume-theme-apage": "^1.0.1", 26 | "jsonresume-theme-autumn": "^1.0.1", 27 | "jsonresume-theme-caffeine": "^1.2.3", 28 | "jsonresume-theme-class": "^0.1.2", 29 | "jsonresume-theme-classy": "^1.0.9", 30 | "jsonresume-theme-cora": "^0.1.1", 31 | "jsonresume-theme-dave": "^1.0.1", 32 | "jsonresume-theme-elegant": "^1.16.1", 33 | "jsonresume-theme-elite": "^1.2.0", 34 | "jsonresume-theme-eloquent": "^4.1.0", 35 | "jsonresume-theme-el-santo": "^0.0.3", 36 | "jsonresume-theme-even": "^0.5.2", 37 | "jsonresume-theme-flat": "^0.3.7", 38 | "jsonresume-theme-flat-fr": "^0.0.1", 39 | "jsonresume-theme-full": "0.0.4", 40 | "jsonresume-theme-github": "0.0.5", 41 | "jsonresume-theme-jacrys": "1.0.2", 42 | "jsonresume-theme-kards": "^1.0.2", 43 | "jsonresume-theme-keloran": "^1.0.2", 44 | "jsonresume-theme-kendall": "^0.2.0", 45 | "jsonresume-theme-kwan": "0.0.2", 46 | "jsonresume-theme-kwan-linkedin": "0.0.2", 47 | "jsonresume-theme-latex": "^0.1.1", 48 | "jsonresume-theme-macchiato": "^1.1.0", 49 | "jsonresume-theme-mantra": "^0.2.0", 50 | "jsonresume-theme-mocha-responsive": "^1.0.0", 51 | "jsonresume-theme-modern": "0.0.18", 52 | "jsonresume-theme-msresume": "^0.1.0", 53 | "jsonresume-theme-one": "^0.0.1", 54 | "jsonresume-theme-onepage": "0.0.3", 55 | "jsonresume-theme-onepageresume": "^0.0.6", 56 | "jsonresume-theme-orbit": "^1.0.3", 57 | "jsonresume-theme-paper": "^0.5.0", 58 | "jsonresume-theme-paper-plus-plus": "^0.5.0", 59 | "jsonresume-theme-papirus": "0.0.5", 60 | "jsonresume-theme-pumpkin": "^1.0.1", 61 | "jsonresume-theme-rocketspacer": "^1.2.2", 62 | "jsonresume-theme-short": "^0.1.7", 63 | "jsonresume-theme-simple-red": "^1.0.4", 64 | "jsonresume-theme-slick": "^0.1.16", 65 | "jsonresume-theme-spartan": "^0.3.0", 66 | "jsonresume-theme-srt": "^0.1.3", 67 | "jsonresume-theme-stackoverflowed": "^1.1.2", 68 | "jsonresume-theme-stackoverflow": "^2.0.0", 69 | "jsonresume-theme-standard-resume": "^1.3.0", 70 | "jsonresume-theme-tachyons-clean": "0.0.9", 71 | "jsonresume-theme-tan-responsive": "0.0.4", 72 | "jsonresume-theme-techlead": "^1.0.1", 73 | "jsonresume-theme-verbum": "0.0.5", 74 | "jsonresume-theme-wraypro": "0.0.5", 75 | "lodash": "^4.17.19", 76 | "qr-image": "^3.2.0", 77 | "resume-schema": "1.0.0", 78 | "superagent": "^5.2.2" 79 | }, 80 | "devDependencies": { 81 | "eslint": "^7.1.0", 82 | "eslint-plugin-promise": "^4.2.1", 83 | "firebase-functions-test": "^0.2.1" 84 | }, 85 | "private": true 86 | } 87 | -------------------------------------------------------------------------------- /functions/resume.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Richard Hendriks 9 | 10 | 11 | 12 | 13 | 191 | 192 | 193 | 194 | 195 | 209 |
210 | 211 |
212 | 215 |
216 |
217 |
218 | Email 219 | 220 |
221 |
222 | Phone 223 |
(912) 555-4321
224 |
225 |
226 | Website 227 | 230 |
231 |
232 |
233 |
234 |
235 | 238 |
239 |

Richard hails from Tulsa. He has earned degrees from the University of Oklahoma and Stanford. (Go Sooners and Cardinals!) Before starting Pied Piper, he worked for Hooli as a part time software developer. While his work focuses on applied information theory, mostly optimizing lossless compression schema of both the length-limited and adaptive variants, his non-work interests range widely, everything from quantum computing to chaos theory. He could tell you about it, but THAT would NOT be a “length-limited” conversation!

240 |
241 |
242 |
243 | 246 |
247 |
248 |
249 | 250 | Twitter 251 | 252 |
253 | neutralthoughts 254 |
255 |
256 |
257 | 258 | SoundCloud 259 | 260 |
261 |
262 | dandymusicnl 263 |
264 |
265 |
266 |
267 |
268 |
269 | 270 |
271 | 274 |
275 |
276 |
277 |

278 | Pied Piper 279 | 280 | 2013-12-01 — 2014-12-01 281 | 282 |

283 |
284 | http://piedpiper.com 285 |
286 |
287 | CEO/President 288 |
289 |
290 |

Pied Piper is a multi-platform technology based on a proprietary universal compression algorithm that has consistently fielded high Weisman Scores™ that are not merely competitive, but approach the theoretical limit of lossless compression.

291 |
292 |

Highlights

293 |
    294 |
  • Build an algorithm for artist to detect if their music was violating copy right infringement laws
  • 295 |
  • Successfully won Techcrunch Disrupt
  • 296 |
  • Optimized an algorithm that holds the current world record for Weisman Scores
  • 297 |
298 |
299 |
300 |
301 |
302 | 303 |
304 | 307 |
308 |
309 |
310 |

311 | CoderDojo 312 | 313 | 2012-01-01 — 2013-01-01 314 | 315 |

316 |
317 | http://coderdojo.com/ 318 |
319 |
320 | Teacher 321 |
322 |
323 |

Global movement of free coding clubs for young people.

324 |
325 |

Highlights

326 |
    327 |
  • Awarded 'Teacher of the Month'
  • 328 |
329 |
330 |
331 |
332 |
333 | 334 |
335 | 338 |
339 |
340 |
341 |

342 | University of Oklahoma 343 | 344 | 2011-06-01 — 2014-01-01 345 | 346 |

347 |
348 | Information Technology 349 |
350 |
351 | Bachelor 352 |
353 |

Courses

354 |
    355 |
  • DB1101 - Basic SQL
  • 356 |
  • CS2011 - Java Introduction
  • 357 |
358 |
359 |
360 |
361 |
362 | 363 |
364 | 367 |
368 |
369 |
370 |

371 | Digital Compression Pioneer Award 372 |

373 |
374 | Awarded 375 | 2014-11-01 376 |
377 |
378 | by 379 | Techcrunch 380 |
381 |
382 | There is no spoon. 383 |
384 |
385 |
386 |
387 |
388 | 389 |
390 | 393 |
394 |
395 |
396 |

397 | Video compression for 3d media 398 | 399 | 2014-10-01 400 | 401 |

402 |
403 | 404 |
405 |
406 | Published by 407 | Hooli 408 |
409 |
410 |

Innovative middle-out compression algorithm that changes the way we store data.

411 |
412 |
413 |
414 |
415 |
416 | 417 |
418 | 421 |
422 |
423 |
424 |
425 |

Web Development

426 |
427 |
    428 |
  • HTML
  • 429 |
  • CSS
  • 430 |
  • Javascript
  • 431 |
432 |
433 |
434 |
435 |

Compression

436 |
437 |
    438 |
  • Mpeg
  • 439 |
  • MP4
  • 440 |
  • GIF
  • 441 |
442 |
443 |
444 |
445 |
446 | 447 |
448 | 451 |
452 |
453 |
454 |
455 | English 456 |
457 |
458 | Native speaker 459 |
460 |
461 |
462 |
463 |
464 | 465 |
466 | 469 |
470 |
471 |
472 |
473 |

Wildlife

474 |
475 |
    476 |
  • Ferrets
  • 477 |
  • Unicorns
  • 478 |
479 |
480 |
481 |
482 |
483 | 484 |
485 | 488 |
489 |
490 |
491 |
492 |

It is my pleasure to recommend Richard, his performance working as a consultant for Main St. Company proved that he will be a valuable addition to any company.

493 |

494 | — Erlich Bachman 495 |

496 |
497 |
498 |
499 |
500 |
501 | 502 |
503 | 504 | 505 | 506 | -------------------------------------------------------------------------------- /functions/resume.json: -------------------------------------------------------------------------------- 1 | { 2 | "basics": { 3 | "name": "Richard Hendriks", 4 | "label": "Programmer", 5 | "picture": "", 6 | "email": "richard@valley.com", 7 | "phone": "(912) 555-4321", 8 | "website": "http://richardhendricks.com", 9 | "summary": 10 | "Richard hails from Tulsa. He has earned degrees from the University of Oklahoma and Stanford. (Go Sooners and Cardinals!) Before starting Pied Piper, he worked for Hooli as a part time software developer. While his work focuses on applied information theory, mostly optimizing lossless compression schema of both the length-limited and adaptive variants, his non-work interests range widely, everything from quantum computing to chaos theory. He could tell you about it, but THAT would NOT be a “length-limited” conversation!", 11 | "location": { 12 | "address": "2712 Broadway St", 13 | "postalCode": "CA 94115", 14 | "city": "San Francisco", 15 | "countryCode": "US", 16 | "region": "California" 17 | }, 18 | "profiles": [ 19 | { 20 | "network": "Twitter", 21 | "username": "neutralthoughts", 22 | "url": "" 23 | }, 24 | { 25 | "network": "SoundCloud", 26 | "username": "dandymusicnl", 27 | "url": "https://soundcloud.com/dandymusicnl" 28 | } 29 | ] 30 | }, 31 | "work": [ 32 | { 33 | "company": "Pied Piper", 34 | "position": "CEO/President", 35 | "website": "http://piedpiper.com", 36 | "startDate": "2013-12-01", 37 | "endDate": "2014-12-01", 38 | "summary": 39 | "Pied Piper is a multi-platform technology based on a proprietary universal compression algorithm that has consistently fielded high Weisman Scores™ that are not merely competitive, but approach the theoretical limit of lossless compression.", 40 | "highlights": [ 41 | "Build an algorithm for artist to detect if their music was violating copy right infringement laws", 42 | "Successfully won Techcrunch Disrupt", 43 | "Optimized an algorithm that holds the current world record for Weisman Scores" 44 | ] 45 | } 46 | ], 47 | "volunteer": [ 48 | { 49 | "organization": "CoderDojo", 50 | "position": "Teacher", 51 | "website": "http://coderdojo.com/", 52 | "startDate": "2012-01-01", 53 | "endDate": "2013-01-01", 54 | "summary": "Global movement of free coding clubs for young people.", 55 | "highlights": ["Awarded 'Teacher of the Month'"] 56 | } 57 | ], 58 | "education": [ 59 | { 60 | "institution": "University of Oklahoma", 61 | "area": "Information Technology", 62 | "studyType": "Bachelor", 63 | "startDate": "2011-06-01", 64 | "endDate": "2014-01-01", 65 | "gpa": "4.0", 66 | "courses": ["DB1101 - Basic SQL", "CS2011 - Java Introduction"] 67 | } 68 | ], 69 | "awards": [ 70 | { 71 | "title": "Digital Compression Pioneer Award", 72 | "date": "2014-11-01", 73 | "awarder": "Techcrunch", 74 | "summary": "There is no spoon." 75 | } 76 | ], 77 | "publications": [ 78 | { 79 | "name": "Video compression for 3d media", 80 | "publisher": "Hooli", 81 | "releaseDate": "2014-10-01", 82 | "website": "http://en.wikipedia.org/wiki/Silicon_Valley_(TV_series)", 83 | "summary": 84 | "Innovative middle-out compression algorithm that changes the way we store data." 85 | } 86 | ], 87 | "skills": [ 88 | { 89 | "name": "Web Development", 90 | "level": "Master", 91 | "keywords": ["HTML", "CSS", "Javascript"] 92 | }, 93 | { 94 | "name": "Compression", 95 | "level": "Master", 96 | "keywords": ["Mpeg", "MP4", "GIF"] 97 | } 98 | ], 99 | "languages": [ 100 | { 101 | "language": "English", 102 | "fluency": "Native speaker" 103 | } 104 | ], 105 | "interests": [ 106 | { 107 | "name": "Wildlife", 108 | "keywords": ["Ferrets", "Unicorns"] 109 | } 110 | ], 111 | "references": [ 112 | { 113 | "name": "Erlich Bachman", 114 | "reference": 115 | "It is my pleasure to recommend Richard, his performance working as a consultant for Main St. Company proved that he will be a valuable addition to any company." 116 | } 117 | ] 118 | } 119 | -------------------------------------------------------------------------------- /functions/screenshots/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/.DS_Store -------------------------------------------------------------------------------- /functions/screenshots/ace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/ace.png -------------------------------------------------------------------------------- /functions/screenshots/apage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/apage.png -------------------------------------------------------------------------------- /functions/screenshots/class.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/class.png -------------------------------------------------------------------------------- /functions/screenshots/classy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/classy.png -------------------------------------------------------------------------------- /functions/screenshots/cora.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/cora.png -------------------------------------------------------------------------------- /functions/screenshots/crispy-potato.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/crispy-potato.png -------------------------------------------------------------------------------- /functions/screenshots/dave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/dave.png -------------------------------------------------------------------------------- /functions/screenshots/elegant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/elegant.png -------------------------------------------------------------------------------- /functions/screenshots/elite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/elite.png -------------------------------------------------------------------------------- /functions/screenshots/eloquent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/eloquent.png -------------------------------------------------------------------------------- /functions/screenshots/flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/flat.png -------------------------------------------------------------------------------- /functions/screenshots/kards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/kards.png -------------------------------------------------------------------------------- /functions/screenshots/keloran.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/keloran.png -------------------------------------------------------------------------------- /functions/screenshots/kendall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/kendall.png -------------------------------------------------------------------------------- /functions/screenshots/kwan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/kwan.png -------------------------------------------------------------------------------- /functions/screenshots/latex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/latex.png -------------------------------------------------------------------------------- /functions/screenshots/mantra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/mantra.png -------------------------------------------------------------------------------- /functions/screenshots/mocha-responsive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/mocha-responsive.png -------------------------------------------------------------------------------- /functions/screenshots/modern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/modern.png -------------------------------------------------------------------------------- /functions/screenshots/onepage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/onepage.png -------------------------------------------------------------------------------- /functions/screenshots/onepageresume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/onepageresume.png -------------------------------------------------------------------------------- /functions/screenshots/orbit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/orbit.png -------------------------------------------------------------------------------- /functions/screenshots/paper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/paper.png -------------------------------------------------------------------------------- /functions/screenshots/papirus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/papirus.png -------------------------------------------------------------------------------- /functions/screenshots/pumpkin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/pumpkin.png -------------------------------------------------------------------------------- /functions/screenshots/rocketspacer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/rocketspacer.png -------------------------------------------------------------------------------- /functions/screenshots/short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/short.png -------------------------------------------------------------------------------- /functions/screenshots/simple-red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/simple-red.png -------------------------------------------------------------------------------- /functions/screenshots/slick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/slick.png -------------------------------------------------------------------------------- /functions/screenshots/spartan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/spartan.png -------------------------------------------------------------------------------- /functions/screenshots/srt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/srt.png -------------------------------------------------------------------------------- /functions/screenshots/stackoverflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/stackoverflow.png -------------------------------------------------------------------------------- /functions/screenshots/verbum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/verbum.png -------------------------------------------------------------------------------- /functions/screenshots/wraypro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsonresume/registry-functions/b275c45dcd63f590d1a5c19083c6341e23eb6ae1/functions/screenshots/wraypro.png -------------------------------------------------------------------------------- /functions/template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | JSON resume 8 | 9 | 10 | 11 | 12 | 29 | 30 | 31 | 32 |

JSON Resume

33 |

{MESSAGE}

34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | ://github.com/jsonresume/registry-functions/ 2 | --------------------------------------------------------------------------------