Ben Watts

Web Developer | ben@benjaminclaywatts.com

ABOUT

I'm a software developer with a background in Web Development (Ruby, Rails and JavaScript) and iOS (Rubymotion). I'm interested in contributing to healthy teams who are working on challenging, meaningful problems.

I care deeply about my work environments. I consistantly work my best in spaces where I am fully engaged, where I can contribute in multiple ways to the product, and where the culture respects the need for a full and complex life.

DOWNLOAD RESUME


EDUCATION

BA Economics
Seattle University



WORK

Software Developer
Fandor

I'm involved in both the Web and iOS team. On the web team, I'm managing the paying down of tech-debt, including splitting our monorail application into service-oriented system. On the iOS team, I'm part of a small team re-writing the app from scratch using RubyMotion.

SUMMER 2014 - CURRENT

Software Developer
Inkshares

I worked as a full stack engineer on a Rails application, involved in every aspect of the codebase, as well as the architecting and design of the product. My abbreviated time at Inkshares was due to lack of funding.

WINTER 2014 - SUMMER 2014

Technical Research Analyst
Comr.se

I led the first-stage research for our devevelop team as we begun the process of integrating with eCommerce API's. My work allowed the VP of Engineering to effectively plan out and prioritize how the technical team spent the following months.

FALL 2013

Health IT Primary
CyberStreams Inc.

In a multifacited role, I directly advised clients on Regulatory Compliance and Data Security. I also led the planning, management, and implementation of a variety of IT projects, from Email Migrations to Network configurations.

WINTER 2012 - SUMMER 2013


SKILLS

Javascript


Ruby on Rails


RubyMotion


SQL


Git


Object Oriented Design



PORTFOLIO

Port01

ENSŌNG.US

Ensōng is an ambient music creation tool based on user-uploaded audio files.


Live | Github
Rails Backbone.js jQuery

Port02

HANDCAR & MONORAIL

Handcar and Monorail are light-weight duplications Active-Record and Rails.


Handcar Github | Monorail Github
Ruby Rails SQLMeta-programming



LATEST BLOG
ON BEAUTY IN CODE

Code should feel good

One of the pleasures of working with RubyMotion is the frequent occurrence of wrapping obtuse Objective-C code within abstractions. If we do our job right, these abstractions will be helpful. The sheer number of letters that your mind has to parse to read code is lowered, which is usually a win. However, this gain only materializes if your abstraction is any good.

Consider the following module:

module StoredObject

  SERVICE = 'YOUR_SERVICE'

  def save(key, val)
    storage[key] = val
  end

  def secure_save(key, val)
    SSKeychain.setPassword(val, forService: SERVICE, account: key)
  end

  def val(key)
    storage[key]
  end

  def secure_val(key)
    SSKeychain.passwordForService(SERVICE, account: key)
  end

  def delete(key)
    storage[key] = nil
  end

  def secure_delete(key)
    SSKeychain.deletePasswordForService(SERVICE, account: key)
  end

  def nil?(key)
    storage[key].nil? 
  end

  def secure_nil?(key)
    secure_val(key).nil?
  end

  private

  def storage
    @storage ||= NSUserDefaults.standardUserDefaults
  end

end

This code feels good to me.* I like the following things about this code:

How an object is stored is abstracted away from the logic of whatever is doing the storing.
The DSL feels more intuitive than the library it wraps around. It does what you would expect it to do, which is aspect of the beauty of code.

The 'Hash' like quality of NSUserDefaults has been hidden behind messages. This prevents the user from interacting with the information in NSUserDefaults like a specific data-type. We could change the implementation of NSUserdfaults without includers of this module caring.

Things worth considering:

Separating out Secure Saving into a separate module. I'm not feeling the pain of secure storage being included right now, but we should pay attention to that if it were to arise.
Test our memoization of @storage. Is it actually faster than calling NSUserDefaults.standardUserDefaults directly?
Is the secure_nil? method superfluous? Should we change that to just .nil?

*...right now. This might change the next time I look at this.

CONTACT

Email
ben@benjaminclaywatts.com

Location
San Fransisco, CA

SOCIAL LINKS