Skip to content

Map of my repositories, and source code for portfolio site.

Notifications You must be signed in to change notification settings

sentientforest/portfolio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Portfolio - Michael Graham

If you want details of closed-source projects I developed for my employer, see Professional Projects. For open source examples of small tools and projects I have built in my spare time, scroll down to Personal and Side Projects.

Professional Projects

I built, launched, and maintain the below administrative user interface tools for HighWire Press. The applications that are accessible over the public internet all require logins, so as long as I've done my job there isn't much to see without valid credentials. But here they are, with descriptions that hopefully help illustrate some of my past experience.

  • Data Supplement Manager - An update to a tool originally built in the 90s, this 2.0 version was built from the ground up using Node.js and AngularJS 1.x in 2014. It allows users to browse or lookup their existing content (journal articles, issues, books, etc) and attach data supplement packages. These data supplements can each contain one to many files, with metadata fields for each. For legacy / compatibility reasons, the uploaded files are streamed via the Node.js layer into a packaged file/xml metadata zip and deposited in the FTP space of HighWire's content processing system. This functionality uses the Node.js streams API, receiving the files and metadata as streams which are streamed into packages for archiving and FTP, effectively not writing to the Node server's filesystem.
  • Intelligent Commerce - HighWire's adminsitrative user interface for publishers to set prices for their content hosted on the HighWire Open Platform. Fullstack Node.js / AngluarJS applications integrated with internal platform services. Uses d3 to display some charts and graphs for sales data.
  • Direct Publishing - Originally developed by a contractor, I extensively refactored the codebase (starting by adding lots of tests) over time to make the application more resilient. This tool allows publishers to upload ad hoc content (news stories, blogs, text/images/metadata) into HighWire's Open Platform.
  • External Links Manager - Also originally developed by the same contractor as the Direct Publishing tool. I have fixed bugs, added features, done refactoring, and added tests suites for this application.
  • Custom Collection Toolkit 2 - Another older application, built to allow publishers to quickly aggregate related content (journal articles, books, news stories, etc) into collections which can be published to their own landing pages. A typical use case might be pulling together related research from various journals in reaction to a major news event (like COVID-19). The actual landing pages are embedded on journal sites on the publishers own domains, using a special web component created using Polymer. The administrative UI, like the others above, is a fullstack Node.js / AngluarJS application.
  • Taxonomy UI - This application was started in Angular v5 and migrated to v6 during initial development. Then customer requirements changed, and it was shelved by our Product Team for two years. Earlier in 2020 it was revisited and upgraded to Angluar 9. The interface can display tree data structures such as subject categories or discipline-specific thesauri. To handle one very large customer tree, I had to leverage a third party library and implement the tree outside of the Angluar scope - this improvement allowed the tree (containing several thousand nested categories) to be fully expanded and collapsed in less than 2 seconds, down from 8 seconds in the Angular component implementation.
  • React Component Libary - For several internal services (links not available / unreachable on the public internet), I developed a React Component Library, which encapsulates reuseable functionality for quickly developing UIs hosted directly on the service endpoints. The goal was to better assist non technical internal staff with configuring various customer settings for given services. Development began in 2018.
  • Free Access Management Utility - (development completed, but to be released; not live on the public internet yet as of Sept 2020). This application is built in React with a Node.js backend. It allows publishers to quickly and easily find or lookup publications which they want to grant free access to. The Node.js backend integrates with several different internal REST based services.
  • Reporting API - This is a headless Node.js API that integrates with internal services while mediating access. It provides a cross-domain point of contact for integration with report viewing on various journal sites. This architecture was chosen due to a need to continue supporting certain legacy access mechanisms. It was intended to eventually be its own standalone interface, however due to time constraints that project was never undertaken.
  • Custom Animated Loading SVG - While the interfaces above are not accessible without a login, there is a publicly available asset I designed myself that can be viewed. I made this loading icon as my own idea. Looking at the HighWire company logo, I always thought it should have an animation like this to represent things loading. This is an example of what I can do with SVGs.

Personal and Side Projects

Many of these are work-in-progress. In most cases they have lots more work to do, but they at least are open source and can display some code samples. Links go to github repositories.

  • AI-Assisted Chess UI - This project is a work in progress as of September 2020, but is intended to become a basic Gatsby UI backed by a Node / GraphQL server that will allow humans to play each other with an AI assist. My intent is to embed two chess boards in the UI, one for the player to control and a second one to display moves recommended by an AI chess engine. This is inspired by research described in the book Race Against the Machines, where the combination of human and AI player is stated to be superior to either human or AI alone. The chess engine is Stockfish, and will be leveraged client side in the browser via Web Assembly / wasm.
  • pixelartpad - This project was started in 2019 in my spare time and then put aside for a while. I was looking to experiment with React and Redux. Currently, it displays a pixellated pad for drawing pixel-by-pixel, and a color set to select the current color. Eventually it needs to implement a way to save / export files and import existing files.
  • map-blueprint-template - I started this template project as a way to try out the Blueprint UI framework. The project uses TypeScript, and is intended to eventually serve satellite map tiles I generated myself several years ago (by downloading USDA public ortho imagery data, compiling GDAL from source with the MrSID plugin, and generating tiles).
  • mirrim - A simple Rust command line tool with a specific use case: generating the mirror image of an image file and displaying it alongside the original. I'm left handed, and write my personal notes in mirror writing, which of course is unreadable by almost everyone. So I wrote this tool to reverse my backwards writing from my own notebooks.
  • exifgs - Simple command line tool written in Node.js that can be used to verify an image does not contain GPS coordinates. For security reasons, it can be useful to run this against a set of photographs to make sure you don't leak coordinates to a sensitive location (like from a picture you took at home). It returns proper error codes and could in theory be integrated into some kind of automated check system, but I haven't gotten around to testing that out.
  • svg-dev - Just a personal svg playground that I use to test out SVG display in a web browser. It is simply a static page I run using http-server.
  • Photo site - wanderlust.reisen - Built a few years ago, this is a static site I built to host vacation photographs. I used it to try out Vue and Webpack, by building a pagination component. Live site is at wanderlust.reisen. The top level domain "reisen" is German for "to travel".
  • Tutorials - I started a mono-repo to track progress and various tutorials. Currently just gatsby, graphql-node, and wasm.
  • Notes repo - Sylvanomicon - My notes "grimoire" that I call the Sylvanomicon. I'm starting to collect notes acculated over the years. This includes my notes on tress, growing, gardening, homesteading as well as coding, technology, computer hardware, etc. Inspired by the meta-knowledge list I came across on github.

About

Map of my repositories, and source code for portfolio site.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published