diff options
author | Nick Van Doorn <vandoorn.nick@gmail.com> | 2019-03-20 04:14:57 -0700 |
---|---|---|
committer | Nick Van Doorn <vandoorn.nick@gmail.com> | 2019-03-20 04:14:57 -0700 |
commit | cca27287285546d0a9ea8142fe4a750f6d00d3bd (patch) | |
tree | 7f5f03c48d432d8ea9eb3d306862638d87039b78 /src | |
parent | 364e1c0d5ed2be3eca9c20a7628782e378e18324 (diff) |
Content
Diffstat (limited to 'src')
-rw-r--r-- | src/pages/about.js | 18 | ||||
-rw-r--r-- | src/pages/index.js | 4 | ||||
-rw-r--r-- | src/pages/projects.js | 165 | ||||
-rw-r--r-- | src/pages/work.js | 16 |
4 files changed, 117 insertions, 86 deletions
diff --git a/src/pages/about.js b/src/pages/about.js index c8f050e..7e2c7b0 100644 --- a/src/pages/about.js +++ b/src/pages/about.js @@ -1,5 +1,5 @@ import React from 'react' -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { FontAwesome } from '../components/font-awesome' import { faHeart, faMap, @@ -26,7 +26,7 @@ export const skills = [ export const tools = [ `Languages: Expert in TypeScript/JavaScript, fluent in C, working knowledge of Python and Shell`, - 'Frontend: React, Angular, Ionic, RxJS', + 'Frontend: React, Angular, Ionic, RxJS, Redux', 'Infrastructure: Node, Firebase, Google Cloud (Cloud Functions, Pubsub, Stackdriver)', 'Embedded: Linux, Legato, Yocto, AirVantage', 'Automation: TSLint, ESLint, Prettier, clang-format' @@ -36,7 +36,7 @@ const aboutLists = [ { header: ( <> - Values and Ethics <FontAwesomeIcon icon={faHeart} /> + Values and Ethics <FontAwesome icon={faHeart} /> </> ), listItems: [ @@ -49,7 +49,7 @@ const aboutLists = [ { header: ( <> - Skills and Experience <FontAwesomeIcon icon={faMap} /> + Skills and Experience <FontAwesome icon={faMap} /> </> ), listItems: skills @@ -57,7 +57,7 @@ const aboutLists = [ { header: ( <> - Tools <FontAwesomeIcon icon={faWrench} /> + Tools <FontAwesome icon={faWrench} /> </> ), listItems: tools @@ -65,7 +65,7 @@ const aboutLists = [ { header: ( <> - Future Learning Ideas <FontAwesomeIcon icon={faFlask} /> + Future Learning Ideas <FontAwesome icon={faFlask} /> </> ), listItems: [ @@ -76,7 +76,7 @@ const aboutLists = [ helps me write better code at all levels of abstraction.`, `Implement TCP from scratch in C (bonus for x86 Assembly). We send a lot of data over the network so I want to zoom in on how it's done.`, - `Maybe write my own kernel with some basic threading (RTOS style)?`, + `Write my own kernel with some basic threading (RTOS style)?`, 'Reduce the overhead of declarative web primitives (React style API close to the metal).' ] } @@ -89,8 +89,8 @@ const personalProps = { imgUrl: profilePic, email: ( <p> - <FontAwesomeIcon icon={faEnvelope} /> nick <em>at</em> nv <em>dot</em>{' '} - delivery + <FontAwesome icon={faEnvelope} size="12px" /> nick <em>at</em> nv{' '} + <em>dot</em> delivery </p> ) } diff --git a/src/pages/index.js b/src/pages/index.js index 26c481c..b872fd8 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -1,7 +1,7 @@ import React from 'react' -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faPaperPlane } from '@fortawesome/free-solid-svg-icons' +import { FontAwesome } from '../components/font-awesome' import Layout from '../components/layout' import { Splash } from '../components/splash' @@ -12,7 +12,7 @@ const indexData = { heroBtnTo: '/about', heroBtn: ( <> - Get In Touch <FontAwesomeIcon icon={faPaperPlane} /> + Get In Touch <FontAwesome icon={faPaperPlane} /> </> ) } diff --git a/src/pages/projects.js b/src/pages/projects.js index 0c55834..77894b5 100644 --- a/src/pages/projects.js +++ b/src/pages/projects.js @@ -3,12 +3,11 @@ import React from 'react' import Layout from '../components/layout' import { Project } from '../components/project' -import functional from '../images/functional.png' import camera from '../images/camera.png' -import storageService from '../images/storage-service.png' import gpsMonitor from '../images/gps-monitor.png' import slask from '../images/slask.png' -import ie from '../images/ie.png' +import cnakedTestSuite from '../images/cnaked-test-suite.png' +import naiveChat from '../images/naive-chat.png' export const projects = [ { @@ -16,27 +15,45 @@ export const projects = [ brief: 'A Battlesnake so close to the metal, 6 CVEs have been opened while reading', date: 'Feb 2019 - Present', - desc: ( - <p> - A fast snake where everything is implemented by hand in C to perform a - fast traversal of all possible game states. The implementation is still - unfinished but I hope to enter it in the Battlesnake 2020 competition. - </p> - ), - url: '//github.com/nvandoorn/cnaked' + url: '//github.com/nvandoorn/cnaked', + projectDetails: [ + { + listItems: [ + 'Prototype for Battlesnake 2019, will be entered in contest in 2020', + `Dangerously close to the metal`, + `All in on test driven development`, + 'Likely to be re-written in Rust' + ], + images: [ + { + imgUrl: cnakedTestSuite, + caption: 'cnaked Test Suite' + } + ] + } + ] }, { name: 'naive', brief: 'A naive implementation of a NoSQL database', date: 'Jan 2019 - Present', - desc: ( - <p> - A small realtime NoSQL database that can be used locally or over a - network. The public interface for this database mimic that of the - Firebase Realtime Database and data is persisted using a static JSON - file. For that reason, I do not suggest using this in production. - </p> - ), + projectDetails: [ + { + listItems: [ + 'Designed to mimic the Firebase Realtime Database API', + 'Written in TypeScript for the browser and Node', + 'Code organized as monorepo with independent builds and integration tests', + 'Can be used with a local filesystem or remote filesystem', + `Persisted in a static JSON file (don't use this in prod)` + ], + images: [ + { + imgUrl: naiveChat, + caption: 'Chat Client Using Naive' + } + ] + } + ], url: '//github.com/nvandoorn/naive', showOnCv: true }, @@ -47,7 +64,8 @@ export const projects = [ desc: ( <p> My home internet performance is consistently below spec and my ISP never - believes me. Hopefully they will soon. Designed for maximum plug-ability + believes me. Hopefully they will soon. Designed for maximum + plug-ability. </p> ), url: '//github.com/nvandoorn/pipefitter', @@ -63,7 +81,6 @@ export const projects = [ two. In reality, a simple for loop is better, but I had fun trying this. </p> ), - imgUrl: functional, inProd: true, url: '//github.com/nvandoorn/functional' }, @@ -71,7 +88,6 @@ export const projects = [ name: 'Legato Storage Service', brief: 'Non-volatile time series data storage', date: 'Jun 2018 - Present', - imgUrl: storageService, desc: ( <p> The Legato Linux framework offers out of the box support for uploading @@ -86,15 +102,23 @@ export const projects = [ brief: 'Monitor GPS in a separate process to avoid blocking single threaded apps', date: 'April 2018', - imgUrl: gpsMonitor, - desc: ( - <p> - Instead of managing and synchronizing a thread to monitor GPS location - on embedded devices, this service asynchronously monitors the GPS - position and allows users to retrieve it using an inter process API (see - more about Legato IPC APIs here). - </p> - ), + projectDetails: [ + { + listItems: [ + 'Allow single threaded apps to read the latest position without blocking', + 'Dynamically poll and cache GPS location based on accuracy', + 'Expose GPS API as synchronous methods reading from cache', + 'Cache is updated in background using event-loop based timer (much like in JavaScript)' + ], + images: [ + { + imgUrl: gpsMonitor, + caption: 'GPS Monitor with BRNKL App', + noShadow: true + } + ] + } + ], inProd: true, url: '//github.com/brnkl/gps-monitor', showOnCv: true @@ -103,35 +127,31 @@ export const projects = [ name: 'CF3 Config App', brief: 'Automatically configure common settings for CF3 based modules', date: 'April 2018', - desc: ( - <p> - Sierra Wireless offers a range of cellular modules based on a common - socket with a common set of inputs and outputs.A range of commonly used - input / output pins and UART connections must be configured by running - an AT command over a serial connection to the CF3 based modem.Run this - app once and the CF3 based module will support the full range of GPIO - pins and UARTs in the Linux userspace. - </p> - ), + desc: <p>Automatically configure Sierra Wireless CF3 based modules</p>, inProd: true, - url: '' + url: '//github.com/brnkl/cf3-config' }, { name: 'Legato Camera Driver', brief: 'Support for the VC0706 camera on a Legato based project', date: 'Nov 2017 - Dec 2017', - desc: ( - <p> - The VC0706 camera is one of the only low power remote cameras with an - open protocol (serial port based).The seller, Adafruit, supplies open - source drivers implemented in Python and C++ with the purpose of running - on Arduino based systems. This means a dependency on certain Arduino - libraries for reading and writing to the serial port. We re-implemented - the C++ driver in C without the dependence on anything not included in - Linux (with the exception of a few Legato specific macros). - </p> - ), - imgUrl: camera, + projectDetails: [ + { + listItems: [ + 'Port of an Arduino style driver to Linux', + 'Integrated with Sierra Wireless Legato Framework', + 'In use at Sierra Wireless and with their customers (see forums)' + ], + images: [ + { + imgUrl: camera, + caption: 'Camera Driver with BRNKL App', + noShadow: true + } + ] + } + ], + inProd: true, url: '//github.com/brnkl/VC0706-cam-lib', showOnCv: true @@ -140,27 +160,30 @@ export const projects = [ name: 'ccss', brief: 'A slightly more polite variant of CSS', date: 'Jul 2017', - links: '', desc: `ccss transforms the correct spelling of colour to color in your CSS. This was intended to be part one of a series of awful CSS transforms.`, - imgUrl: '', url: '//github.com/nvandoorn/ccss' }, { name: 'slask', brief: 'A lightweight log viewer and server all in one', date: 'Mar 2017 - Present', - desc: ( - <p> - slask is designed to make remote systems debugging easy. During my time - at Forest Technology Systems (FTS), we worked on a remote weather - station based on a single board Linux computer. During the early days, I - spent large amounts of time transferring and filtering log files using a - mix of <em>scp</em>, <em>grep</em>, and <em>less</em>. - </p> - ), - imgUrl: slask, - url: '//github.com/nvandoorn/slask' + url: '//github.com/nvandoorn/slask', + projectDetails: [ + { + listItems: [ + 'Log server implemented run in Node', + 'Log client implemented with React', + 'Support for custom configs and custom log parsing' + ], + images: [ + { + imgUrl: slask, + caption: 'slask Client Screenshot' + } + ] + } + ] }, { name: 'IE Media Queries', @@ -169,8 +192,14 @@ export const projects = [ desc: `IE Media Queries is a Javascript polyfill for Internet Explorer 8's lack of media query support. IE8 is more or less dead and unsupported, but I still enjoyed re-creating unsupported functionality`, - imgUrl: ie, url: '//github.com/nvandoorn/IEMediaQueries' + }, + { + name: 'times-table-tester', + brief: 'Code is easier than mental math', + date: 'March 2007', + url: '//github.com/nvandoorn/times-table-tester', + desc: 'In 6th grade I made command line app to quiz myself on times tables.' } ] diff --git a/src/pages/work.js b/src/pages/work.js index 19cf86c..e33525d 100644 --- a/src/pages/work.js +++ b/src/pages/work.js @@ -8,6 +8,7 @@ import brnklAppMap from '../images/brnkl-app-map-iphone.png' import brnklAppAlerts from '../images/brnkl-app-alerts-iphone.png' import brnklProduct from '../images/brnkl-product.jpg' import wpModule from '../images/wp-module.png' +import raos from '../images/raos.jpg' export const workHistory = [ { @@ -44,9 +45,9 @@ export const workHistory = [ { header: <a href="https://app.brnkl.io"> App</a>, listItems: [ - 'Implemented with TypeScript, Angular, and RxJS', + 'Implemented with TypeScript, Angular, RxJS, and Redux', 'Deployed on iOS, Android, and the web', - 'Realtime data using RxJS and Firebase Realtime Database', + 'Live data using RxJS and Firebase Realtime Database', 'Push alerts implemented over Firebase Cloud Messaging' ], images: [ @@ -72,7 +73,7 @@ export const workHistory = [ ] }, { - header: 'Embedded', + header: <a href="https://github.com/brnkl">Embedded</a>, listItems: [ <> Written in C with the{' '} @@ -96,7 +97,7 @@ export const workHistory = [ header: 'Production Automation', listItems: [ 'Test circuit boards against a suite of hardware tests', - 'Automate installtion of latest firmware release for hardware', + 'Automate installation of latest firmware release for hardware', 'Automated delivery of diagnostic messages to factory workers', 'Automation of device inventory (e.g collecting board serial numbers)' ], @@ -112,8 +113,8 @@ export const workHistory = [ desc: ( <p> Barnacle Systems is a self bootstrapped company working on boat - monitoring and security. I worked as the sole implementer of the the - BRNKL app, backend, embedded firmware, and production automation + monitoring and security. I worked remotely as the sole implementer of + the the BRNKL app, backend, embedded firmware, and production automation software (with thanks to many open source authors). </p> ), @@ -152,7 +153,8 @@ export const workHistory = [ 'Implement components of embedded camera product aimed at the fire weather market (FTS RAOS)', 'Automate builds and installs', 'Integrate with user facing software as a service product' - ] + ], + images: [{ imgUrl: raos, caption: 'FTS RAOS camera system' }] } ], desc: ( |