Friday, November 14, 2014

Off to the Nerd Ranch

Headed to the Nerd Ranch for iOS development training in Monterey, CA. Will be there from 11/14 - 11/21. I've been reading through the Swift based iOS apprentice tutorials and I am very excited. The iOS development ecosystem has come along way. It's a pleasure to develop for this platform!!

Look me up at the Nerd Ranch, Michael Droz or on Twitter @michaeldroz or GitHub @michaeldroz.

Nerd Ranch:
http://www.bignerdranch.com/



Monday, April 14, 2014

Amazon Interview Question "Writing Sample" ~ by Michael Droz

Amazon Interview Question - writing sample
I recently successfully interviewed with Amazon.com and was offered a senior program management position within their San Francisco engineer lab. As part of the interview process they asked me to submit a writing sample based on their question “What was the most inventive moment in your career?”
Below is my answer: You might find it helpful and interesting. 
TagCow.com - Image tagging problem solved    
   One of the most inventive moments in my career came just as I was about to throw in the towel on a start-up I had founded in 2006. We had been trying to bootstrap a subscription based scanning service for people’s non-digitalife ( mail, old photo albums, children’s art, etc.,) but it quickly became clear that our approach wasn't scalable so my co-founders and I were looking for a pivot. One of the byproducts of the prototyping and business process modeling we had done for the scanning service was a collection of 100,000+ digital images from my childhood. One day I was trying to find some specific photos that I had seen during the scanning of my images and realized that at scale you can’t “browse” your images you have to somehow enable search. This idea of enabling one to search their photo collections kept coming up over and over again during the following weeks. I would want to show a friend or family member a photo but they would grow bored watching me “browse” through my giant collection of photos. I was certain that there were services available to annotate one’s digital images with meaningful metadata and thus enabling one to search against their image collection so I immediately set out to identify this service and solve the problem for myself. What I found would lead me to my Eureka moment. 
     I did some research trying to find some image tagging solutions and was surprised that such a service just didn't exit. What I found was that while image recognition had come a long way it was still a long way off from being good enough for consumers. The problem was that only computer scientists were working on the problem and they were looking for a completely automated solution but I knew instantly that I could solve the image tagging problem for everyone by combining algorithms and humans! I was already an Amazon Web Service customer and was familiar with the Amazon Mechanical Turk service. I hatched a plan to license a set of image recognition algorithms called Alipir from the University of Penn State and use Amazon’s Mechanical Turk service to train the algorithms and augment the automated tags with tags generated by the human workers. I called a meeting with my co-founders and they instantly loved the idea - we had our pivot and on that night in January of 2008, TagCow.com was born.
     Three months later we completed development of a beta candidate. I was tasked with marketing the service which I had thought a lot about in the weeks leading up to our initial launch. We had no funding so I knew a massive and extensive consumer marketing plan was not an option. Luckily, I had recently read Malcolm Gladwell’s legendary book, Tipping Point. So the same night we completed our beta I scoured the internet for our mavens. Immediately I stumbled onto a gentleman named, Thomas Hawk, who at the time owned a blog focused on the popular photo sharing site, Flickr. In his bio he indicated that he currently had over a quarter-million digital photos and was aiming to shoot more than a million in his lifetime - I knew I had the perfect beta tester. I sent him a personal invite to join our little beta program. That same night he attached his massive Flickr archive to our tagging service. Within a few hours we had tagged his entire collection of images. He was so impressed that he phoned his friend Michael Arrington, editor of Techcrunch.com, and raved to him about our service. By midnight of that night I received a text from Michael Arrington asking if I was available for an interview. I knew our service wasn't prepared for the Techcrunch effect so I called my co-founders to discuss a strategy. Before we could complete our conversation I received a text from a friend of mine congratulating me for being on the front page of Techcrunch. The headline read “Image tagging problem solved”, he would go on to describe our service as “magic”. In the coming hours we would sign up tens of thousands of users and tag millions of images. Here’s a link to the article (which Michael Arrington would later edit after he realized we were using Mechanical Turk): http://techcrunch.com/2008/03/29/image-recognition-problem-finally-solved-lets-pay-people-to-tag-photos/

We would be featured in Techcrunch two more times in the coming months:

Continuous Improvement the Core Foundation of Agile ~ by Michael Droz

A blog post about the importance of continuous improvement practices.


Friday, April 11, 2014

Lexicom IS Redux

A placeholder blog for the set of services developed under the name Lexicom IS Redux a company by Michael Droz + others. This is a company inspired and named after my most successful startup Lexicom Intelligent Systems (circa 1996) - see link below.

http://michaeldroz.blogspot.com/2013/11/lexicom-intelligent-systems-by-michael.html

In August of 2012 I quit my corporate job with Visa and struck out on my own again. With a handful of ideas in my bag and a tone of talent supporting me I restarted under the name Lexicom IS Redux. Below are the prototypes and services that I developed under that working name. Unable to attract investment I ran out of money and closed up the company in December of 2013. At least one of these still lives on under a different name and under very capable hands. I won't mention them by name because I have nothing to do with the huge success that team is now on the verge of enjoying - but I was there when the seeds were planted and for me that's inspiring!

I am also still prototyping Helpiado but mostly as an exercise in learning Ruby-on-Rails. I will add links and other interesting artifacts from this experience.

Software development outsourcing: http://www.hitechito.com/
(used them since 2003).

Services Prototypes + Developed:

  • Prototypes
    • Inspired travel apps
      • Hostel management
      • Gamification of travel (Badger) 
    • fitParade (social fashion app)
    • Helpiado (mobile philanthropy app)  
      • Helpiado Cordova Mobile App on Github (add files)
  • Developed
    • Mobile Video Platform
      • Enabled live video streaming via Wowza, AWS and BitGravity. 
        • Adaptive bitrate streaming
      • Billing platform allowing members to charge for broadcasts 
      • Single page JavaScript application 
      • Spring/Hibernate backend 




Early brainstorming with potential collaborators (2011):   



fitParade Mechanical Turk Analysis (Basic Model) - Testing to see how many users we need to start getting collaborative filtering matches. 



Helpiado logo design: 

(latin) Addo - to give, bring place, inspire, cause, ad, join






fitParade Mobile App Sketches: 




















Sunday, March 16, 2014

A Process for Creating a Ruby On Rails API ~ by Michael Droz

Sprint 1: Begins February 7th, Ends March 1st

Sprint Goal: 
To develop a thin slice through the entire API including an initial production deployment. 
    Stories included:

  •     Setup development environment with Rails 4.0+ and Git
  •     Integrate local Git with GitHub and Heroku Production environment
  •     Create initial API using Rails-API gem (stripped down rails)
  •     Create initial conceptual database design 
  •     Create initial models for two *guaranteed resources
    • /people
    • /deeds
  •      Create APIgee account + spike on how to create and manage APIs
  •      Create initial API proxy with one *guaranteed policy
    • Require API::Key
  •      Validate thin slice with the following test cases
    • Can push local code to GitHub
    • Can push GitHub repository to Heroku
    • Can't access API without API Key
    • With API Key can GET people and deed resources via CURL or other web based REST Client. 
    • With API Key can Create people resource via CURL or other web based REST Client. 

Step 1: Resource Design 
In a Google spreadsheet document the following: 
1. Resources (objects)
2. URLs and HTTP methods
Application Data ModelResource ModelStandard MethodsResource Desc
API ENTRY POINThttp://helpiado-test.apigee.net/v1/helpad-production/
People/entrypoint/peopleGETReturns 20 most recent
/entrypoint/people/newPOSTCreates new user
/entrypoint/people/updatePOST
/entrypoint/people/destroyPOSTDestroys the person specified
Deeds/entrypoint/deedsGETReturns 20 most recent
People/entrypoint/deedsPOSTCreates a new deed
People/entrypoint/deedsPOST
People/entrypoint/deedsPOSTDestroys the deed specified

Step 2: Create new project and models for resources
rails-api new <project_name>
rails g scaffold <model> name
rake db migrate

Step 3: Initiate Git w/GitHub & Heroku
Create GitHub repository at www.github.com
Now initiate git locally 
git init
git commit 
git remote add origin https://gihub.com/<username>/<repositoryname.git>
heroku create
git push heroku master

Step 4: Create APIgee proxy and first policy
Create API account
Create new API Proxy
Add resources to API Proxy
Add policy: Require API::Key

Step 5: Test API using RESTful Client

Step 6: Create diagram that represents your "thin slice" topology 
Step 7: Document Sprint Results

  • Completed Stories
    • All
  • Unexpected Issues
    • Required to upgrade database from SQLite3 to PostgreSQL :: Heroku no longer supports SQLite3 in production. [impact: 6 hours]
    • Issues updating resource parameters because Rails 4 now requires you to explicitly tell it which attributes to permit and require. [impact: 16 hours]

Sprint 2: Begins March 3rd, Ends March 14

Sprint Goal: 
To develop a second thin slice through the entire API and production topology.  
    Stories included:

  • Create relationship between people/deed entities (people have many deeds) (DONE)
    • People Model: Added has_many :deedsdependent:destroy
    • Deed Model: Added belongs_to :person
    • Enforce person_id foreign key integrity (person_id being added to deed column valid)
      • Deed Model: Added validates :person:presence =>true
  • Iterate on people/deed entities (focus on attributes) (DONE)
    • Three migrations
      • AddPersonIdToDeeds
        • add_column ...
        • add_index ...
      • FixDescriptionColumn
        • rename_column ...
      • AddConstraintToDeedsPersonIdColumn
        • change_column ... :null =>false
  • Fix insecure database.yml configuration (DONE)
    • vim database.yml
    • username: ENV["PSQL_USERNAME"]
    • password: ENV["PSQL_PASSWORD"]
    • Add Unix Environment Variables via Heroku CLI (Command line interface)
      • heroku config:add PSQL_USERNAME=username_from_Heroku --app <yourapp>
      • heroku config:add PSQL_PASSWORD=password_from_Heroku --app<yourapp>
  • Iterate on resources
    • people/
      • update
      • destroy
    • deeds/
      • create
      • get
      • update
      • destroy 
  • Lock-down direct access to API and require APIgee API key for all clients. Basically force API access through API Proxy. (DONE)
    • Added Ruby's http_basic_authenticate_with method to Application Controller 
      • Had to add this module since the Rails-API framework ships without it
        • class ApplicationController < ActionController::API                                                                                                                                                                                                        
            include ActionController::HttpAuthentication::Basic::ControllerMethods
    • Added Unix environment variable for API Proxy credentials
      • http_basic_authenticate_with nameENV["BASE_AUTH_NAME"], passwordENV["BASE_AUTH_PASS"
    • Added API Proxy credentials via apigee's "assign message" policy
      • name="Authentication"
      • Basic <base64 encoded username:password>
  • Validate second thin slice through following test cases:
    • TBD
Document Sprint Results
  • Unexpected Issues
    • Unplanned vacation [impact: 24 hours]
    • Migration to Chromebox for primary development [impact: 16 hours]
    • Unable to deploy to Heroku from Nitrous.io. Had to recreate Heroku environment [impact: 2 hours] - need to track to make sure this isn't a recurring problem on Nitrous.io. 
Michael Droz Current Development Stack: End of Sprint 2

  • Dev Box: Toshiba CB35 Chromebook
  • IDE & Unix Development Environment: Nitrous.IO
  • Production Environment: Heroku w/PostgreSQL
  • API Proxy: Apigee.com 

Sprint 3: =begin March 17th, =end March 28th

Sprint Goal: 
To integrate Helpiado API with Twitter API, enable registration and login via Twitter OAUTH and develop first client using Node.js that can display the deed feed and allow a user to vote up deeds.

    Stories included: TBD 

  • Spike on Twitter API
    • Create account
    • Ruby wrappers
    • Twitter OAUTH
    • Consuming resources 
  • Enable registration and login via Helpiado API 
    • Internal API clients (website, android, iOS apps)
    • 3rd party clients via developer community
  • Spike on Node.js via Nitrous.IO
    • Get backup to speed on how to wrangle Node.js into submission
  • Implement Voting Subsystem (IN PROGRESS)
    • Create Design Proposal (DONE - 3/20)
    • Create scaffold :: rails generate scaffold Vote (DONE - 3/15)
    • Create/Update supporting entities 
      • Added accumulative_score to Deeds
      • Added vote_balance to People
      • Need to create entity to hold logs of each vote cast and each vote granted
    • Create supporting models
    • Create/Update supporting controllers
      • Added vote_balance = 50 to user.create in People Controller to grant each user 50 votes upon initial registration. 
  • Create first API client using Node.js (for internal website)
    • Internal client to use API Proxy just as any other 3rd party client 
    • Allow developer to request and receive apikey via agigee developer portal
  • Complete agigee api training 

-----------------------------------------------------------------------------------
Here's a photos of me after my father, Michael Droz Sr, first explained to me how cool APIs were going to be. I am sure I was contemplating how long it would be before we would build our first Ruby on Rails API together. At this time we weren't living in San Francisco, San Carlos nor St. Joseph, we were living in the technology hub known as Seattle. 
Michael Droz at the Seattle Center. 




Thursday, February 13, 2014

Hosting Static Site on Heroku by Michael Droz

Heroku is the preferred hosting solution for Rails apps but what about hosting static sites? No problem of course, but you do have to know the trick. I spent about 15 minutes figuring it out which is probably an indictment on me and not the good folks at Heroku. Below is a step by step guide. 

Motivation: Hosting a static site as an example of html/css skills. 

Prerequisites: 
  • Git installed and configured 
  • Heroku account
  • Heroku's Toolbelt installed 
  • SSH generated and associated with your Heroku account

Step by step guide: 
1. mkdir michael_droz_static_site
2. cd michael_droz_static_site
3. git init
4. copy files into new directory (or clone from remote)
5. (this is the trick) create simple php file named index.php with the single line 
<?php include_once("home.html"); ?>

6. rename index.html to home.html
7. git . add
8. git commit
9. heroku create
10. git push heroku
11. heroku open (this will open a browser to your new site)

If you want to rename the site you simply issue the following command:
heroku app:rename michael-droz     

Here's a link to the site I created: 

   

Friday, February 7, 2014

Free Domains for Developers ~ .tk by Michael Droz

Before I get started on a new project I like to have a real domain to deploy to. Previously, I would go to GoDaddy.com (lame) and purchase a domain for < $10.00, but recently I came across the .tk top-level domain for Tokelau, a territory of New Zealand located in the South Pacific that allows you to register a domain for up to 2 years for free. My father, Michael Droz Sr., warned me that nothing in life is free, but I am trying to change my profligate ways and pinch pennies whenever possible.

I have registered the domain philanthropyrunner.tk as a test. I have the domain pointed to a Ruby on Rails server hosted by Rackspace. So far the domain is redirecting to ads that I am sure the owner of .tk is making a nice bit of coin serving up on newly registered domains. At this point I consider the experiment a failure - if not a scam. I will update this blog if the domain actually starts to redirect to my server. 

At this point I am cautiously optimistic...

UPDATE: After 15 minutes of registering my .tk domain it has started to redirect to my dedicated ip address. I am calling this a success. Free domains for developers are real thanks to .tk ~ awesome!