Michelangelo never saw a lump of marble.
Strong Engineering Skills
Currently, I wax poetic with Ember.js and Node as a software developer on the BrowZine Front-End Engineering Team. BrowZine is a remote distributed startup in the academic and commercial research space.
Previously, I shipped critical components on both Respoke’s Community Team and Respoke’s Front-End Team. At its height, Respoke was a remote distributed startup in the telecommunication space, specifically WebRTC and Asterisk.
Prior to that, I shipped as a Tech Lead at Nationwide and as a consultant in various industries from banking to education to medical to military simulation and training.
I’ve been fortunate, really fortunate, that my startup experience has been shaped with some of the most talented engineers and business leaders I’ve ever worked with.
BrowZine.com: Mobile Responsive
Worked with a talented team of co-founders and engineers, leading the retrofitting of our existing Ember.js desktop web application with a mobile responsive UI/UX. Resize your browser to try it out live. :)
BrowZine is built using Ember CLI, Sass and QUnit for testing on the frontend, running atop a Node Express JSON API spec and Mocha for testing on the backend with CircleCI for continuous integration.
Automated acceptance tests are challenging for desktop layouts alone and they are exponentially challenging for responsive layouts, but we’ve succeeded in running our existing automated acceptance tests against our new mobile responsive user interface. Learn more about how we got our responsive user interface under test using our existing, mature Ember acceptance tests.
Discovery Service Adapters
In the academic and commercial research space, students and scientists use a variety of tools and discovery services to stay connected with new research findings, follow journals and discover research articles that may impact their work. One of the cool things BrowZine does is enhance those various discovery service platforms to provide a better research experience.
I play my part by leading BrowZine’s software integration into various third-party discovery services, of which there are many. Today, the browzine-discovery-service-adapters collection of adapters integrate with Primo, Summon and 360 Core (EJP).
The most exciting aspect of this project was working with the MutationObserver browser interface. The MutationObserver interface provides the ability to watch for changes being made to the DOM tree. Using MutationObserver allowed us to build adapters that could operate independent of the discovery service’s framework.
The result is we’re able to add links to Journals and Articles in BrowZine, as well as enhance search results with BrowZine Journal Covers. The project is well tested using the Karma test runner and Jasmine for Unit and Acceptance Tests to guard against regressions. This project also integrates with CircleCI for continuous integration.
Ember CLI Upgrades
One of the most frustrating pieces of Ember is upgrading to the latest versions of ember-cli. Lead the BrowZine upgrade to Ember 2.10.0 (Glimmer 2) and Ember 2.12.0 LTS. Additionally, lead the Ember Grand Testing Unification migration, the async/await updates and the upgrade plan to Ember 2.18.0 LTS, including the plan to refactor private API use out of our Acceptance Tests.
Sometimes you get the chance to write the best code of your life when you least expect it. I got that chance at Respoke, a communication PaaS startup built on WebRTC.
And with these, we built Apollo - A powerful Slack competitor that enables team collaboration with chat, screen sharing, live video and voice.
Respoke Server Libraries
Wrote Respoke PHP and Respoke Java server-side libraries.
respoke-php - PHP serverside library for the Respoke REST API
respoke-java - Java serverside library for the Respoke REST API
Open Source Contributions (OSS)
While working through the BrowZine Discovery Service Adapters deployment strategy, we realized we’d want to make the TTL for each adapter configurable.
We were already using a library called deploy-web-to-s3 to deploy the adapters to S3, but the library didn’t expose a method to make the S3 Cache-Control header configurable. So went ahead and created a PR to expose the Cache-Control header using an environment variable called AWS_CACHE_CONTROL.
A tool for easily recursively uploading a directory with client-side files to S3
During an ember-cli upgrade for BrowZine, found a critical bug in a major ember addon called ember-component-css. Analyzed the bug and submitted a PR to fix the same. We found the root cause to be in a dependency of ember-component-css called ember-cli-saas, but this PR helped folks make progress until we could get a fix upstream.
An Ember CLI addon which allows you to specify styles for individual components
Contributed a critical bug fix to Respoke.js which prevented screen sharing from working in Firefox and Chrome.
Contributed fixes to the respective browser plugins.
respoke-firefox-screen-sharing-extension - A base Firefox extension for enabling screen sharing from your domain using respoke
Lead the reorganization and documentation of the Respoke docs to what you see today.
Contribute to docs development by creating an account on GitHub.
Extracted Caramel from a Respoke internal tool I built to facilitate cross-platform rendering of Respoke’s responsive transactional emails in the various email clients (Gmail, Outlook, Yahoo, Mobile, etc).
caramel - Caramel: A responsive HTML email framework
Contributed Yahoo email client fixes upstream to Salted which eventually became the baseline for Respoke’s and Caramel’s responsive email framework.
salted - Salted: A responsive email template
I believe in servant leadership and have always served the developer community first and my interests second.
Demonstrated both patience and empathy while managing external contributors to both Respoke’s open source chan_respoke library and developer documentation.
Added Channel Variables and AMI Event for Respoke Session by gcareri · Pull Request #9 · respoke/chan_respoke
Added two new features: Set of Asterisk Channel Variables related to the Respoke Session AMI (Asterisk Manager Interface) new Event 'respoke_session' in order to show the Respoke Session informat...
Toured the east coast, introducing developers to WebRTC - a powerful HTML5 API for encrypted peer-to-peer Voice, Video and Data communications.
You probably don't know WebRTC as much as you think. I'm not surprised. WebRTC is both amazing and terrifying. No real standards exist between browser vendors. How to integrate WebRTC the right way? WebRTC is but one ingredient to a successful real-time web recipe.
Along with the talk, distributed a small sample signaling app using Node, Socket.IO showing developers how to get started with WebRTC quickly.
native-webrtc-node-socket.io-signaling - Sample app showing how to use the HTML5 WebRTC API
Strong technical writing skills
Take a look at a few screencasts and blog posts I produced along the way.
I'm currently working on a conference talk about WebRTC. One of the foundations of any WebRTC library is some form of Google's original adapter.js, which seeks to normalize the WebRTC API across various browsers. As I was about to build this particular slide, one question started to whisper in my ear, "Is adapter.js a shim or a polyfill?"
Google search result rank number three for the topic.
“@corgrath: The best article I have read so far regarding the shim vs polyfill terminology. Thanks :-)”
Fun technical blog post written for blog.respoke.io mashing up two popular concepts: WebRTC and Instagram Filters.
With more than a $1 Billion valuation and over 75 million daily users, Instagram is arguably one of the most popular social networks today. Did you know more than 55 million photos are posted daily on Instagram? Or that the platform sees over 8,500 likes per second?
In his seminal work, "The Hero with a Thousand Faces", Joseph Campbell put forth the idea of The Monomyth. The idea is based on the observation that a common pattern exists beneath the narrative elements of most great myths, regardless of their origin or time of creation. Simply put, all of mankind's myriad myths are but variations of a single great story. This is the monomyth and is most commonly expressed as a hero's journey....
What’s next exactly…?
I’d love to learn more about the position, the team and the company. Go ahead, email me and we’ll continue the conversation.