Nathan Friedly
  • Home
  • About
  • Portfolio
  • Tech blog

Portfolio

Portfolio Part 2

Back to part 1


Dips and Domes

Dips and Domes is an alternative theory to dark energy. It proposes that a large-scale gravitational lens is responsible for the apparent discrepancy between luminosity and red shift of distant galaxies.

I designed and built a website to detail and explain the theory, and provide contact information for the author.

Tagged Jekyl, Ruby, Bootstrap, SASS, HTML, Continuous Integration, Mobile First

Company Insights

I worked with a small team to create a sample application that uses a number of Watson services to show how your company stacks up against the competition in the news and on twitter.

Backend uses a fairly simple Express server with Redis caching on all public API endpoints. Frontend uses AngularJS and Sass with Gulp scripts to wire everything up and speed up development.

I also setup one-click deployment to Bluemix including an automatic DevOps Pipeline setup that automatically compiles all front-end assets and then deploys on each git push.

Tagged JavaScript, Node.js, Express, Redis, AngularJS, Gulp, Continuous Integration

Unblocker

After seeing significant interest in using my Node Unblocker website's source as the basis for other projects, I reworked it into an express-friendly node.js module.

I added an API to allow custom middleware to be easily inserted into the processing and re-wrote nearly all of the internals to use the new API.

Other notable changes included re-writing the cookie-handling to not require a database, reworking the charset decoding for greater speed and reliability, and even more automated tests.

In addition to code changes, I worked with the project's other contributors to enable an alternate licensing option for businesses that cannot comply with the projects AGPL license.

Unblocker on NPM Unblocker downloads Unblocker's build status Tagged Node.js, JavaScript, Open Source, Continuous Integration, Express

running-average

Simple module to accept an unlimited quantity of numbers and provide the average of all numbers received so far. Implements an extremely memory-efficient algorithm that only stores two numbers between calls.

Can be used in Node.js and in browsers.

running-average on NPM running-average downloads running-average on Bower running-average's build status Tagged JavaScript, Node.js, npm, Bower, Open Source

ESP8266 ESP-01 Dev Board

I've been playing with the ESP8266EX modules that include WiFi, CPU, RAM, and Flash all in one. The ESP-01 variant is by far the cheapest and easiest to find, but it's pin layout is awkward to say the least. I built this motherboard to make it easy to power and program from a standard FTDI USB/Serial-TTL programmer and then put together a writeup to make it easy for others to follow.

Tagged Arduino, C++, hardware, Open Source, IoT, ESP8266

Speaker at RoboUniverse 2015

I was invited to speak at the RoboUniverse 2015 conference; I hosted a workshop titled "Knowledge Engines – Building Smart Applications that Learn":

The field of robotics is closely aligned with the work in Artificial Intelligence or AI. The brains of a robotic system can be cloud based and used in the operation of a robot, or could become an independent, stand alone system itself. The knowledge engines acquire information from natural language interfaces, perception, haptic interfaces, non-structured data and more. Knowledge Engines collect, organize, filter, and perform predictive analytics to provide guidance for future actions. In this workshop you’ll learn:

  • Research work in building generic Knowledge Engines with broad applicability to a variety of robots and intelligence systems
  • How to get started with Knowledge Engine tools to build your own Intelligence Systems
  • How the digital brains are used to connect with the physical world of robotics

My portion of the workshop covered a number of IBM Watson Services, and focused on showing demos and real-world use cases. The slides are on slideshare.

Tagged Presentation, IoT, hardware, Arduino

Personality Insights Badge

My second Watson/IoT demo, this one uses an Arduino Yún to pull my recent tweets, run them through the IBM Watson Personality Insights service, and display the "Big 5" personality traits on a LCD.

The Arduino calls a Python script on the Linux side of the Yún to connect to Watson and Twitter (mainly for https support), and then cycles through the results on the screen.

Can be powered from battery and tethered to a cellphone for complete portability.

Tagged Python, Arduino, C++, IoT, hardware, Open Source, Twitter

Cloudant plugin for DocPad

Imports documents from a Cloudant database to a DocPad collection.

(Cloudant is IBM's hosted CouchDB solution.)

Written in CoffeeScript and tested with DocPad's built-in test tools on Travis CI.

Cloudant plugin for DocPad on NPM Cloudant plugin for DocPad downloads Cloudant plugin for DocPad's build status Tagged DocPad, CoffeeScript, Continuous Integration, npm, Open Source, CouchDB

Time and Weather Announcer

My first in a series of Watson/IoT demos, this one employs a Raspberry Pi that announces the current time and weather over the system speakers at the press of a button. Uses Node.js and the newer Linux userspace GPIO support to avoid needing to run as root.

This design focused on energy and bandwidth efficiency: it uses interrupts rather than polling the GPIOs, it uses omxplayer to ensure the audio is decoded in hardware, and it caches the audio files to disk for potential reuse later.

Tagged JavaScript, Node.js, IoT, hardware, Open Source

Express Rate Limit

I needed a simple rate-limiter for a project and I didn't see anything that fit the bill, so I put this one together.

It's fairly flexible, however it does not share any state across processes/servers due to the complexity that adds.

Express Rate Limit on NPM Express Rate Limit downloads Express Rate Limit's build status Tagged JavaScript, Node.js, npm, Express, Open Source, Continuous Integration

Arduino IR Blaster

I used an Arduino and an IR Shield to fix a major annoyance with my TV: it would turn the sound bar off but wouldn't turn it back on. Now the Arduino is powered up whenever the TV comes on, and it in turn signals the sound bar to turn on.

I later rebuilt it with a Digispark to reduce free up my Arduino for other projects.

Tagged Arduino, C++, hardware, Open Source

Space Jump

Fun little browser-based game, sort of a cross between Doodle Jump and Moon Lander. I put it together over my Christmas vacation with the primary goals of having some fun and getting more experience rendering 2d graphics.

While I'm normally a big proponent of building on top of existing tools and frameworks, I decided to go "bare metal" with this one: the game itself is written in vanilla JavaScript with no dependencies whatsoever.

The background image is from NASA; all graphics are either hand drawn or prodecuraly generated. The levels themselves are procedurally generated.

On a desktop browser, the game uses arrow keys to navigate. However, on a mobile device, it use touch + tilt controls via the HTML5 touchstart/touchend and deviceorientation APIs.

Renders at a smooth 60 FPS on every device I've tested on.

Space Jump's build status Tagged JavaScript, Canvas, gulp.js, Mobile First, Continuous Integration

grunt-swf

Grunt plugin that uses the Apache Flex SDK to automatically compile ActionScript files (.as) into Flash files (.swf).

Built to support automated compilation of SwfStore (my JavaScript Flash Cookies library)

grunt-swf on NPM grunt-swf downloads Tagged JavaScript, Node.js, npm, Flash / ActionScript, Open Source

What's my User Agent? v2

I simplified the app, switching from Ruby on Rails to single-page app and from a complete breakdown of every detail to a no-nonsense identification of the browser and OS. I also updated the design to use the Bootstrap CSS framework.

So far, the new site has achieved 2x and then 2.5x year-over-year growth, reaching the top position in Google for "whats my user agent", and third place for "user agent".

In early 2017, I sold the original url (whatsmyua.com) and moved the site to it's current url: user-agent.io

Tagged Bootstrap, JavaScript, HTML, SEO

Your Celebrity Match

I worked on a small team to build this app as a demo to show how to use some of the Watson services. My primary contribution was to the initial UI shown below, although I also did some performance work on the back-end.

Tagged Node.js, MongoDB, Twitter, Express, HTML, CSS

approximate-number

~Converts large numbers into a more human-friendly format, similar to ls -lh or Stack Overflow's reputation numbers. For example, 123456 becomes '123k'.

Can be used in Node.js, in browsers, or as a command-line utility.

approximate-number on NPM approximate-number downloads approximate-number on Bower approximate-number's build status Tagged JavaScript, Node.js, npm, Bower, Open Source

node-bestzip

I needed a simple zip command that worked both on Windows and Mac. Windows has no native zip command, so bestzip uses a Node.js implimentation there. However, Mac OS X includes a native zip command that is both faster than the Node.js implementations and produces smaller files, so bestzip will use that one whenever possible.

node-bestzip on NPM node-bestzip downloads Tagged JavaScript, Node.js, npm, Open Source

MongoDB plugin for DocPad

Imports a collection of documents from a MongoDB collection to a DocPad collection.

Written in CoffeeScript and tested with DocPad's built-in test tools on Travis CI.

MongoDB plugin for DocPad on NPM MongoDB plugin for DocPad downloads MongoDB plugin for DocPad's build status Tagged DocPad, CoffeeScript, Continuous Integration, npm, Open Source, MongoDB

WDC Website Management Tool

A tool to make life easier for our documentation writers and translators - automates website deployment, including internal builds from different branches/content sources.

Also automates most of a public deployment, and performs extensive logging for later auditing.

Tagged Node.js, Express, LESS, DocPad, CouchDB, MongoDB, CoffeeScript, ECO

IBM Watson Developer Cloud Website v1

My first project at IBM was getting the WDC website ready for launch. This included some design changes and a range of enhancements for performance, usability, accessibility, analytics, etc.

The site was a multi-page AngularJS with significant performance issues when I arrived.

My initial improvements to launch the site included script bundling and minification, a custom AngularJS directive for analytics, syntax highlighting, and automatic ToC generation.

Post-launch on I was able to use DocPad to statically generate the entire site, making it both more flexible, and significantly faster to load.

Tagged AngularJS, SASS, HTML, ECO, Require.js, gulp.js, DocPad, CouchDB, MongoDB, SEO, JavaScript, CoffeeScript

Elance Automatic Withdrawal Bot

I occasionally take on side projects via Elance, and their payment system is really great at reliably getting funds into my Elance account. And then they just sit there until I remember to withdrawal them to my bank. So, I built this bot.

The bot uses CasperJS to log into the site as me, check if I have any available funds, and immediately transfer them to my bank if I do.

It runs on Heroku once per day and gives me one less thing I have to remember to do.

Elance Automatic Withdrawal Bot on NPM Elance Automatic Withdrawal Bot downloads Tagged JavaScript, CasperJS, Heroku, Open Source, npm

True Tile

True Tile is a local (Dayton / Troy, Ohio) tile installation service. They wanted a website where they could show off their work and also have a centralized source for services and contact information.

I assisted the owner in building the website and setting up email at the domain. We designed the site to be to be fast and responsive, optimized for both humans and Search Engines, and easy to maintain. After building the initial site, I handed it off to the business owner who filled in additional content and now maintains it.

Built with Bootstrap & Bootswatch, hosted on GitHub Pages.

Tagged HTML, CSS, Bootstrap, Mobile First, SEO

Pleasant Hill, OH Police Dept: Permanently Closed

The little town that I live near closed their Police Department a few years before I moved in. I ended up with the old non-emergency phone number as my new home phone number :(

So, I set up a quick little website to help people searching for the number get the correct information for local services.

Tagged HTML, Bootstrap

Bloko Sports Proxy

The Bloko Sports Proxy allows you to browse the internet without fear of "spoilers" telling you the final score of a game you were looking forward to watching later.

I was brought into the Bloko project a little late into the game. Most of the functionality was built, but it was extremely disorganized, very slow, and full of bugs. The back-end was built around Sails.js + my node-unblocker project, and the front-end was a single gigantic "spaghetti code" file of jQuery selectors, repeated AJAX calls, multi-purpose methods, and unmanaged global data structures.

I set to work fixing a large number of broken / unreliable features. In the process, I added some basic testing and code quality checks, organized the front-end into a Backbone.js app split into logical components, automated the deployment process, removed a ton of dead code and unused libraries, and made the entire project considerably more reliable and performant.

Tagged JavaScript, Node.js, Sails.js, Backbone.js, AJAX, AWS

Posture Reminder

A little web app that I put together one morning to annoy myself into having better posture. It asks how your posture is every so often. If it's good, then it waits a little longer before asking you again. But if your posture isn't so great, then it asks you much sooner the next time.

Built with jQuery, Bootstrap, Bootswatch, and Font Awesome. Hosted on GitHub Pages, Bootstrap CDN, and CDNJS.

Tagged HTML, CSS, Bootstrap, JavaScript, jQuery, Mobile First, Open Source

Coin Allocator: Bitcoin & Altcoin algorithmic trading

A low-frequency trading tool, taking the principles from The Intelligent Asset Allocator and applying them to Bitcoin and altcoins. Currently running on Heroku: it checks the markets every 10 minutes and trades coins every day or two.

Currently supports only the Cryptsy exchange, however it was designed to be able to easily support additional exchanges in the future; I'm planning on adding BTC-e when I have time available.

Coin-Allocator can be run via the command-line, or included as a Node.js module to build larger projects on top of (I'd like to build a web interface.)

Continuously integrated & deployed with JSHint and a suite of Jasmine tests that are executed after each GitHub push via Travis CI. If the tests pass, it is automatically deployed to my personal instance on Heroku. Tagged commits are also published to NPM automatically.

Coin Allocator: Bitcoin & Altcoin algorithmic trading on NPM Coin Allocator: Bitcoin & Altcoin algorithmic trading downloads Coin Allocator: Bitcoin & Altcoin algorithmic trading's build status Tagged Bitcoin, Node.js, JavaScript, Open Source, Continuous Integration, npm, Heroku

Meteor ODB-II Engine Diagnostic Code lookup tool

I built this to look up ODB-II diagnostic codes from my phone. (And also because I wanted to learn Meteor a bit better.)

The tool searches through a database of codes as you type and also gives some general information about ODB-II and how to acquire the tools.

Continuously integrated with a suite of CasperJS (PhantomJS) tests and continuously deployed to Meteor's infrastructure after each GitHub push via Travis CI.

Meteor ODB-II Engine Diagnostic Code lookup tool's build status Tagged Meteor, JavaScript, Bootstrap, CSS, Handlebars.js, Open Source, MongoDB, Mobile First, Continuous Integration, CasperJS

Gatling: Node.js app server

I built Gatling to abstract some of the repetitive work I saw myself doing with each Node.js project I deploy: setting up a cluster server to use all available CPU cores, adding domains to prevent errors in one request from killing other request, setting up monitoring, and a few other small things.

It's designed to play nice with Connect / Express-style apps as well as simple http.createServer(myServer) sort of applications.

Runs a Mocha-based suite of unit tests on every git push.

Gatling: Node.js app server on NPM Gatling: Node.js app server downloads Gatling: Node.js app server's build status Tagged Node.js, JavaScript, Open Source, Continuous Integration

nfriedly.com, v5

I rebuilt my personal website from scratch with a state of the art mobile-first design made for speed and usability. I like to say that I have more taste than skill when it comes to design, so I'm really happy with myself when I can build something that I think looks good, and I think I did that here.

The homepage starts out with a photo I took of my grape arbor in my back yard; this photo is the basis for the color scheme on the rest of the site. I put a lot of time into choosing the fonts - I wanted something that is easy to read and light-weight, but doesn't stand out too much, and I think the Raleway / Nobile combination did a great job. Also, check out how the footer appears when you scroll down (the effect is only enabled on modern browsers with relatively large displays.)

On the technical side, I actually simplified things a lot compared to the last version of my site: It now uses DocPad to convert markdown files to html for the blog and portfolio, and the site's completely static, allowing it to be hosted on GitHub pages. Every git push causes the site to be re-generated and deployed by GitHub Actions. The site pulls in a little bit of live content from GitHub and Instagram on each visit.

Tagged HTML, Bootstrap, DocPad, Node.js, LESS, CSS, AWS, Continuous Integration, JavaScript, Mobile First, Open Source

Open Source Contributions

I frequently make small improvements to Open Source projects that I work with. Here's a not-quite-comprehensive list:

  • AwsSum: Added support for streaming uploads to Amazon S3.

  • base64codec: Fixed an error when used client side with jam.js / require.js.

  • connect-memcached: Improved documentation.

  • curated-hn-hiring: Added source link.

  • DocPad: Several feature enhancements, bug fixes, and documentation improvements to both DocPad core, and plugins including:

    • sunny
    • cleanurls
    • ghpages
    • minicms
    • multiplelayouts
    • coffeelint
    • jshint
    • basicauth
    • partials
  • ejs-mate: Added support for blocks and improved the documentation.

  • Firefox: Supplied bug reports with narrowed-down test cases.

  • generator-node (Yeoman): Fixed a bug when generating CLI modules.

  • grunt-browserify2: Improved documentation.

  • Jasmine: Improved documentation.

  • jQuery.highlightRegex: Fixed a couple of bugs to allow it to work cross-browser and support multiple runs on the same text.

  • Masonry: Fixed some accidental global variable references.

  • Node.js: Fixed several issues in REPL, HTTP, tests, etc.

  • node-memwatch: Improved documentation.

  • Prism: Added Ruby support to the File Highlighter plugin.

  • request: Fixed a filename/mimetype bug.

  • require-handlebars-plugin: Modified plugin to be compatible with the jam.js package manager, improved i18n code.

  • sitemap.js: Fixed a bug with URLs that contain the string 'http', added unit tests, improved performance by ~4%.

  • string.js: Added suport for padding with numbers and associated unit tests.

Tagged Open Source, JavaScript, CoffeeScript, Node.js, npm, DocPad, AWS, Require.js, Browserify, jQuery, Ruby, Bower, DocPad

Sociable Labs

I Joined Sociable Labs in 2010 as one of the first engineers and went on to lead the front-end engineering team. I worked on every layer of the technology stack and helped the system grow to handle billions of requests, peaking at nearly 10,000/second.

Responsibilities included:

  • Leading a team of ~5 engineers building and supporting the front-end framework and apps
  • Full-stack JavaScript/Java/PostgreSQL app creation and support
  • Extensive analytics, A/B testing, and data analysis
  • Setting up automated code linting and unit testing
  • Recruiting, training, and mentoring team members
  • Supporting customer deployments written in Node.js, C#, Java, Ruby, Python, etc.

Tagged JavaScript, Java, Node.js, C#, Ruby, Python, AngularJS, Require.js, Jasmine, Handlebars.js, jQuery, CORS, AJAX, LESS, PostgreSQL, Memcached

Viral Ninjas

Sociable Labs joined forces with Viral Ninjas, and I began working on their node.js / AngularJS application.

Initially I was on the Apps team doing customer-driven feature development, and then I later transitioned to the Optimization team where I did data-driven enhancements and development.

Tagged CoffeeScript, AngularJS, Node.js, Express, Browserify, CORS, AJAX, email

Redirector plugin for DocPad

Creates the static equivalent of 301/302 redirects for static websites (0-second meta refreshes) via configuration.

One of my major goals for v5 of nfriedly.com was a completely static website. This meant that all of the dynamic portions of my website had to be moved offsite (heroku was a big help here). At the time, DocPad didn't have a plugin to redirect certain urls to offsite locations, so I built one.

Written with CorreeScript and Cake and tested with Chai and DocPad's built-in test system (standard DocPad conventions).

Redirector plugin for DocPad on NPM Redirector plugin for DocPad downloads Tagged DocPad, CoffeeScript, Continuous Integration, npm, Open Source

JS Mini-Shell

A super-lightweight interactive JavaScript shell that fits in a bookmarklet and and runs everywhere, including older versions of IE.

Buit to help me debug some things in IE 8 where turning on developer tools changes the behavior of the page in subtle ways.

Website is a mobile-first design that opens with some fun CSS animations if your browser supports them unprefixed.

Tagged JavaScript, Bootstrap, Mobile First, Open Source

Facebook Event Updater

Facebook broke part of their website a while back such that app admins could no longer edit events that were created by their apps. We reported this to them and they admitted it was a bug, but decided not to fix it.

After going through several rounds of manually updating events via curl, I put together this little web app to make the job easier.

Built with jQuery, Bootstrap, Bootswatch and Font Awesome. Hosted on GitHub Pages, Bootstrap CDN, and CDNJS.

Tagged HTML, CSS, Bootstrap, JavaScript, jQuery, Mobile First, Open Source

Tipp JS / Gem City JS

After moving to Tipp City and not finding any local JavaScript User Group, I founded Tipp JS and started hosting meetups. I later joined forces with Sparkbox in Dayton to create Gem City JS.

I've given a variety of presentations at these and other meetups, including:

  • Intro to Node.js
  • Unit testing with Jasmine
  • Controlling physical hardware with Node.js (both RaspberryPi and Arduino)
  • Building RESTful websites with Express.js
  • Building interactive websites with Meteor
  • Dependency management with require.js
  • Better CSS with LESS
  • Intro to CoffeeScript
  • Building static websites with DocPad

Tagged Node.js, Jasmine, Arduino, Express, Meteor, Require.js, LESS, CoffeeScript, DocPad, Presentation

Temp-O-Matic

A digital thermometer that varies the color of the backlight from green for "just right" to blue for cold and red for hot. This allows for users to get a rough idea of the temperature from across the room.

Built with an Arduino-clone that I put together to learn how it works.

Tagged Arduino, hardware

Google PageRank Lookup Tool v2

A Google PageRank tool uses my node-pagerank library. Allows the visitor to lookup the PageRank of one or more sites and stores the results for later use. Also includes a bookmarklet for easy access. This node.js version replaces my previous php-based app.

Built on the Twitter Bootstrap CSS foundation and Backbone.js and Browserify for the front-end. Uses node.js Express.js, and Redis for the back-end. Static assets are served through Amazon's CouldFront CDN while the dynamic portions are hosted on Heroku. Uses Stripe used for paid accounts.

Tagged Node.js, JavaScript, Backbone.js, Bootstrap, Redis, AWS, Heroku, Browserify, Express, SEO, Open Source, e-Commerce

node-pagerank

Node.js library that fetches the Google PageRank of a given site. Serves as the basis of pagerank.nfriedly.com.

(PageRank represents Google's view of how popular and authoritative a website is. It's one of a number of data points that go into ranking search results.)

node-pagerank on NPM node-pagerank downloads node-pagerank's build status Tagged Node.js, JavaScript, npm, Open Source, Continuous Integration

GET method override middleware for Connect / Express

Takes an HTTP GET request such as GET /foo/1234?method=PUT&data=... and causes the rest of the system to treat it as if it were the method named in the querystring (PUT in this case).

Tagged JavaScript, Express, npm, Open Source

Whats my IP API

Super-simple service I built to inform visitors what their internet-facing IP is. Supports HTML, Text, JSON, JSONP, and CORS (Cross-Origin Resource Sharing).

Also shows a fun CSS Animation when you first open the page. Hosted on Heroku.

Tagged Node.js, CORS, Heroku, Open Source

PicSync

PicSync automatically uploads photos you take on your Android phone to a private album. It will then remind you about the photos the next time you log into Facebook allowing you to review and post your favorites.

PicSync is no longer under active development as it failed to find much traction. The source code is available on Github: client, server

Tagged Node.js, Java, Android, Heroku, AWS, Express, Bootstrap, LESS, Jade, JavaScript, Open Source

Bible People

My Senior Project at the University of Cincinnati, Bible People is a website that indexes people in the bible and generates family trees. Other features include automatic Wikipedia-style disambiguation pages when two or more people have the same name, and a list of verses where the person is mentioned, including hyperlinks to other people when they are mentioned. Was one of my first Ruby on Rails projects

Tagged Ruby on Rails, CSS, HTML, MySQL, Open Source

Sociable Labs encryption and signing examples

We accept signed and/or encrypted data from our customers and we provide example code in a variety of languages. I Wrote example code in C# and Node.js, and also published a SLSignPageData library to NPM to enable easy data signing in node.js projects.

Sociable Labs encryption and signing examples on NPM Sociable Labs encryption and signing examples downloads Tagged C#, Node.js, npm, Open Source

Backyard Sports Sandlot Sluggers

I built a custom Drupal module and an Actionscript 3.0 flash loader for the Rookie Arcade section of BYS's new website. These worked in concert to bring together a series of minigames written in Actionscript 1.0, 2.0, and 3.0, record the scores, and display the high scores at the end.

I worked with two different studios on this project to bring the new site and games online in an extremely tight schedule. This included learning all three versions of ActionScript in a single week.

Tagged Drupal, Flash / ActionScript

Turtle St. Bed and Breakfast & Extended Stay

Launched a WordPress site with a customized template for the Turtle St. B & B to use as blog and contact site advertising their Bed and Breakfast and Extended stay offerings as well as other attractions local to Syracuse, NY.

Site included information for both business and tourists, a Google map with directions to their location, and a blog that receives frequent updates about local events.

Tagged WordPress, SEO

One Touch Art

I assisted in the sites development, providing various tweaks, bug fixes, and performance optimizations.

I implemented JavaScript event delegation on the front-end and back-end Apache configurations including rate limiting, caching with mod_expires, and gzip compression with mod_deflate.

Tagged JavaScript, CSS, Apache

Veryfine Products

I built the Veryfine product database and search system including the Nutrition Facts CSS. I also enhanced the site's design to include support for older browsers.

Tagged PHP, MySQL, jQuery, JavaScript, CSS, Flash / ActionScript

Node Unblocker

My second web proxy, this one built in Node.js and designed from the ground up to be faster and compatible with more sites - try out Google Instant Search for an example.

It uses Node.js Streams to modify the data on the fly and store almost nothing in buffers. This is considerably more performant than the traditional method of downloading the entire page before parsing it and passing it along to the user.

Cookies are stored in a Redis database to prevent different sites from clobbering each other.

Was originally built on Node.js 0.4, and has since been updated to take advantages of changes introduced in 0.6, 0.8, 0.10, and soon 0.12.

Continuos Deployment: After each GitHub push, Travis CI automatically runs the tests and deploys to Heroku if everything passes. Application is then monitored by New Relic, and reportedly serving upwards of 1200 requests per minute on a single Heroku instance.

Node Unblocker on NPM Node Unblocker downloads Node Unblocker's build status Tagged Node.js, JavaScript, Heroku, Open Source, Continuous Integration, Redis, Mobile First

SunnyD Book Spree

SunnyDI built their backend to record user submissions and made the front-end display a printable form with the user's information pre-filled.

Tagged PHP, MySQL, CSS, HTML

SwfStore - a JavaScript Library for Cross-Domain Flash-Cookies

This is a library that allows JavaScript to read and set cookies cross-domain by using flash.

We needed this for one of my projects and I was surprised to find that no such library already existed. So I created it and, with my employer's permission, released it under an MIT license.

Runs a suite of Jasmine-based tests on more than a dozen browsers after every GitHub push via Travis CI and Selenium:

Selenium Test Status

SwfStore - a JavaScript Library for Cross-Domain Flash-Cookies on Bower SwfStore - a JavaScript Library for Cross-Domain Flash-Cookies's build status Tagged JavaScript, Flash / ActionScript, Open Source, Jasmine, Continuous Integration, Bower

Elations GeoIP and Costco store locator

I worked with the MaxMind GeoIP service to customize the Elations home page based on your location. Also built a store locator that integrates with Google Maps.

Tagged JavaScript, PHP

What's my User Agent? v1

Reports the visitors UserAgent string and also breaks it down and explains each portion of the string. The site also provides simple, user and search-engine friendly links to view or share the breakdown of other UA strings.

Designed to be friendly on mobile browsers and other small screens. Built in two days using Ruby on Rails and the Blue Trip CSS framework.

Tagged Ruby on Rails, BlueTrip, SQLite

Joel Friedly

Joel's personal website that I assisted with polishing. Built with WordPress and a few plugins including WP Super Cache and BackUpWordPress.

Tagged WordPress, CSS

Embeddable Twitter & Facebook Posting and Interaction Tool

I built a tool for updating Facebook and Twitter pages that also helped find and respond to posts from fans. It has been used by several businesses and sports teams.

The tool is entirely JavaScript based, and can thus be easily embedded into various websites regardless of the backend technology.

Tagged JavaScript, Twitter, CSS

Google Pagerank Lookup Tool v1

7
I needed a reliable pagerank lookup tool and all of the existing ones were unreliable and/or spammy. I built myself a clean, straightforward pagerank lookup tool that allows for multiple urls to be checked at once and also offers a JavaScript bookmarklet to check any individual page.

The tool stores results in an SQLite database to avoid repetedly hitting Google's servers and keeps a "recent history" in the user's session.

Tagged CodeIgniter, JavaScript, SEO, HTML, CSS, SQLite

Duck Duck Go + Google Suggest OpenSearch Plugin

An OpenSearch plugin that allows visitors to add option to their browser's built-in search bar that uses Google Suggestions but performs the searches on Duck Duck Go.

It also supports encrypted searches, and has a proxy built with node.js that corrects !bang's that Google removes from it's suggestions.

The proxy originally sat behind a high-performance Nginx server, but has since been moved to Heroku.

Duck Duck Go + Google Suggest OpenSearch Plugin's build status Tagged Node.js, JavaScript, Open Source, HTML, CSS, Heroku, Continuous Integration

Backyard Football '10 Promotion

I created the MySQL database and updated the PHP / AJAX registration process for the Football 2010 GameStop promotion. Includes some very slick jQuery / ThickBox popups.

Tagged jQuery, AJAX, JavaScript, PHP, MySQL

Wealth Innovations

We built a new website for Wealth Innovations using embedded OpenType fonts (.otf & .eot), AJAX navigation, and an animated user interface to create a standards-based experience on par with flash websites.

Tagged jQuery, AJAX, JavaScript, HTML, PHP

Standard Publishing

I updated their Flashed based header and image-rotator to a Search-Engine-Friendly, easier to manage version build with jQuery, HTML, and CSS.

Tagged jQuery, JavaScript, CSS, HTML

RSS XSLT Theamer

I researched how different browsers handle RSS feeds and found work-arounds to display RSS with XSLT stylesheets in Firefox and Internet Explorer.

Read more about it on the tech blog: How to use XSLT to style an RSS feed

Tagged JavaScript, CSS, PHP

Lavish Giving

I worked with Apache mod_rewrite and Pinnacle Shopping Cart to give the site search-engine friendly urls. I also edited the WordPress template.

Tagged e-Commerce, SEO, Apache, WordPress

nfriedly.com v4

I built the previous version of my website with a PHP/CodeIgniter core and a custom theme designed by Charley Skira.

The site served to introduce and support myself and my freelance business. Features included:

  • Accounts management system where clients could view past and current invoices and pay any balance due via a fully secured and PCI-compliant credit card processing system.
  • WordPress-based technical blog with a custom theme and a small plugin that I built to seamlessly unite it with the rest of the site.
  • Portfolio and several SEO-optimized pages highlighting the various services I offered.
  • YUI-based "Instant Estimate" form that gave a hassle-free way of estimating a project's cost.
  • Spam-proof contact form
  • Technical demos of working with various APIs from Google, Twitter, Facebook, etc.

Tagged CodeIgniter, WordPress, HTML, CSS, e-Commerce, SEO, PHP, JavaScript, YUI

African Design / Theme

A design I put together (with a bit of help from a tutorial.) Free for anyone to use, although I do request that a credit link is kept.

Tagged Photoshop, HTML, CSS, Open Source

Twitter @Mention Monitor

A service I put together to monitor the user's @mentions and forward them to the user as a Direct Message (DM) for faster notification. Built using Ruby on Rails and Twitter's OAuth authentication.

Taken down and released as Open Source after twitter added the same functionality - https://github.com/nfriedly/Twitter-Mention-Monitor

Tagged Ruby on Rails, Twitter, BlueTrip, Open Source

BMW Invoice

I created a web app for customized orders that included an index of what was available, pricing options, and images. Also included a back-end inventory management system.

Tagged PHP, JavaScript, CodeIgniter, jQuery, MySQL

Portfolio for Christopher S.

I took his photoshop design and coded it into clean XHTML & CSS

Tagged HTML, CSS, Photoshop

iBoomerang Email Template Tool

I created a complete end-to-end system for managing agent->client business emails. AJAX-driven interface loads templates and sender information, allows you to modify the template, then sends the email.

Includes a modified Rich Text Editor that recognizes existing template variables and provides a live preview of what the email will look like.

Manages images and other attachments and tracks opening rate when possible. Also supports schedule e-mails to be sent in the future, including pre-packaged series of emails.

Try it out at http://my.iboomerang.com/email
Username: demo
Password: demo

Tagged PHP, JavaScript, AJAX, YUI

Wealth Management Partners LLC

I built this website from scratch. The home page imports the owners twitter and blog RSS feed. The site also features a complex menu, integrated google search, an amazon.com library, and a client area where the owners can provide private information.

Tagged PHP, CodeIgniter, JavaScript, Twitter

Account Auto-Setup from Shopping Cart

The automatic setup system I built for iBoomerang. When a customer signs up for a new tool, if they are a current customer, it adds the tool to their account, otherwise it creates them a new account.

The Cart32 shopping cart system is a closed source system, so the auto-setup system works entirely through javascript in the templates that scrapes the users information and submits it to a PHP API I built.

You can see it live, but only if you buy something.

Tagged e-Commerce, PHP, JavaScript, jQuery, AJAX

Large Clay Products Website

I oversaw a five-man team that rebuilt the shopping cart and database of a major clay products website.

The cart was built as a front-end to the Cart32 shopping cart system. It was designed from the ground up to handle their catalogue of over 10,000 products. It included a powerful meta-data based search engine, automatically generated navigation, and a full-featured administration area.

During construction we upgraded the servers from IIS 6.0 to IIS 7.0 to enable clean urls with Microsoft's URL Rewrite module 2.0.

Tagged e-Commerce, PHP, JavaScript, jQuery, MySQL, CodeIgniter

USA Benefits Group Agent Back Office & Sales Tracker

A comprehensive agency management system with extensive sales tracking and reporting. The sales numbers are also used regularly for contests and rewards.

Tagged PHP, JavaScript, AJAX, YUI

Instant Domain Name Availability Lookup

Searches as you type. Uses an in-house lookup system, but could easily be adapted to a 3rd party API.

Tagged PHP, JavaScript, AJAX, jQuery

Agent Supplies

Zen Cart based website with a customized template. I handled instillation, security, and maintenance and also moved the site from it's original Linux/Apache server to a Windows/IIS for the client.

Tagged e-Commerce, Apache

Rack n More

Racn n' More sells new and used industrial shelving and storage equipment including pallets and forklifts. I did marketing and SEO consulting.

Tagged e-Commerce, SEO

Youman's Construction Services

YCS does customized new home construction preforming some of the work directly and overseeing contractors for the reaming portion. I supported their email and contact form.

Tagged email, HTML

Greenweavers Organics

Shopping cart and email instillation and maintenance. Site was based on the Zen Cart open source shopping cart system with a custom theme.

Tagged e-Commerce, email

Outreach for Animals

I designed and built a custom Content Management System (CMS) for OfA that included rich text editing, a Lightbox Photo Gallery, and a shopping cart with Paypal integration.

I also added some animations to the existing design with the Prototype.js library.

Tagged PHP, e-Commerce

Fellowlaborers

I set up and managed the blog for the ministry/mentoring/leadership training program I was a part of during 2008-2009.

Tagged WordPress

Contact Nathan

  • nathan @ (this website)

Site Map

  • Home
  • About
  • Portfolio
  • Tech blog

Website by Nathan Friedly

Creative Commons License Content licensed under Creative Commons Attribution.

Source code available on Github under a MIT License

Built with DocPad, Bootstrap, and Node.js.