Design, Development & Startups http://brandonpassley.com Brandon Passley's thoughts on technology, design and other randomness posterous.com Wed, 08 Jun 2011 15:00:00 -0700 Twitter Recipe for Hustling Startup Founders http://brandonpassley.com/twitter-recipe-for-hustling-startup-founders http://brandonpassley.com/twitter-recipe-for-hustling-startup-founders

Screen_shot_2011-06-08_at_12

A few weeks ago I launched GoodMogul, a mobile geolocation game and have been posed with the dilemma of building an engaging Twitter presence as well as building the actual company (software, designing, strategy, etc.) As of now, I don’t have the money to hire a company to run the twitter feed. I also can’t find the adequate time to deliver interesting articles, tips and quirky jokes with GoodMogul’s followers.

I created two goals for GoodMogul—each of which demand high levels of interaction and everything that goes with it:

  1. Acquire new followers 
  2. Stay engaged with them by being engaging (I know that is a horrible sentence) 

I am still experimenting with how to actually conquer these two goals, but I have created an interesting recipe using (the awesome) Bufferapp to automate tweets using a queue, and Google Reader as a discovery engine for engaging content. It’s very simple, I chose three different levels of interaction for the GoodMogul tweets:

  1. Industry specific news or content 
  2. Related but non-specific content 
  3. Non-related but still related content (focused on the GoodMogul user demographic) 

With this method, it is much easier to find single chunks of time throughout the day to build my queue in Bufferapp with the Google Reader articles. After something has been added to the queue, it gets tweeted throughout the day during designated times (8am, 12pm, 5pm, etc.) This limits the need to physically update the GoodMogul Twitter feed every few hours. It’s automatic!

Right now, my Google Reader subscriptions include design articles from Fast Company (love the infographic of the day), technology updates from the likes of Engadget and Techcrunch, gaming updates from IGN, and then non-industry specific content—but still is focused on the GoodMogul user demographic—such as Cute Overload and Design Milk.

This is obviously only one layer to running a Twitter account. But, unfortunately, running two startups (the other being the mobile design + development shop, VOKAL Interactive) limits the time I can focus on social media as a marketing tool. I would love to hear of any other busy startup founders (hustlers) tricks to building an engaging social media presence for multiple companies.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/659130/brandon_120.jpeg http://posterous.com/users/4wPvUbZn5bvb Brandon Passley brandonpassley Brandon Passley
Thu, 12 May 2011 06:00:00 -0700 GoodMogul, A New Mobile Geolocation Game http://brandonpassley.com/goodmogul-a-new-mobile-geolocation-game http://brandonpassley.com/goodmogul-a-new-mobile-geolocation-game

When I was young I used to create board games out of cardboard boxes, G.I. Joes and anything else an eight year old could get his hands on. These games always seemed to involve trap doors, wizards and/or magicians and the lack of rules. 

GoodMogul is nothing like that, but it is a game of sorts. It is a mobile geolocation game that creates a fake economy using real world places. Users can invest, own and checkin at locations around them.

Goodmogul-invest-large

On GoodMogul, a location's value is determined by its popularity on other social checkin sites—Foursquare, Gowalla and Facebook Places. So the more people that are checking in via social checkin apps to Wrigley Field, for example, the higher its value on GoodMogul… if people aren't checking into a location, the less valuable it will become. 

I am excited to be launching GoodMogul this week as an open beta. It is currently a web/browser app so it isn't in any of the app stores. All you need to do is visit http://goodmogul.com on your iPhone or Android device and start playing. All I ask is that while you play around you take a few mental notes and send them my way if you get a moment. If you don't want to, no big deal, just enjoy the game.

There are a ton more features I have planned, but I want to start getting everyone's feedback first to see what would make it even more entertaining. As with most things, it is more fun when you get friends involved, so share and be shared. 

Goodmogul-checkin-large
Goodmogul-buy-large

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/659130/brandon_120.jpeg http://posterous.com/users/4wPvUbZn5bvb Brandon Passley brandonpassley Brandon Passley
Thu, 16 Apr 2009 20:34:00 -0700 PayPal Recurring Payments http://brandonpassley.com/ruby-on-rails/paypal-recurring-payments-with-ruby-on-rails http://brandonpassley.com/ruby-on-rails/paypal-recurring-payments-with-ruby-on-rails

After finishing the majority of the development on DrawbridgeApp.com, a project proposal creator and manager, I realized other freelancers and small companies were also running into the same issues with managing the proposals they needed to deliver to clients. I decided to deliver Drawbridge to the public at a low monthly rate, jumping on the "software as a service" train. The issue with running software in return for a monthly payment is having the ability to take and, more importantly, save credit card numbers. These obviously must be saved through a third-party merchant account. After researching many options, I decided to go with PayPal — which may or may not have been the best solution, but this is about implementing the solutions. At the time I was developing Drawbridge there was plenty of documentation written about implementing a shopping cart and collecting single payments with PayPal through various means (active merchant) but there wasn't anything written on integrating recurring payments with PayPal since PayPal had just launched their recurring payment option (active merchant did not have PayPal recurring payment integration at the time). After finding and dissecting the PayPal SDK for Ruby on Rails I decided to use the callers in the SDK and tie them into the recurring payments. Download and Install the PayPal SDK You can download the full PayPal SDK to get an idea of how the basic transaction process works with Ruby on Rails, but you really only need the PayPalSDK Plugin (I couldn't find any type of gem, so I have posted the files on my server.) Onc you have downloaded the plugin, you will see three files in the "lib" folder: caller.rb – which handles the request and transactions profile.rb – which handles authentication information and end points utils.rb – which includes logging utilities The only thing I changed in these files was to move the credentials and endpoints out of profile.rb and into initializers/globals.rb, this way I can control where the transactions go depending on the environment — development environment to the PayPal sandbox for testing and the production environment to my real PayPal account and live server. Update vendor/plugins/PayPalSDK/lib/profile.rb

# specify the 3-token values.
@@credentials =  {"USER" => API_USER, "PWD" => API_PASS, "SIGNATURE" => API_SIG }
# endpoint of PayPal server against which call will be made.
@@endpoints = {"SERVER" => API_SERVER, "SERVICE" => "/nvp/"}
# Proxy information of the client environment.
@@proxy_info = {"USE_PROXY" => false, "ADDRESS" => nil, "PORT" => nil, "USER" => nil, "PASSWORD" => nil }
# Information needed for tracking purposes.
@@client_info = { "VERSION" => "50.0", "SOURCE" => "PayPalRubySDKV1.2.0"}

Add this to config/initializers/globals.rb

# ==== PAYPAL INFORMATION =====
# Depending on environment, either send to PayPal sandbox or real account
# ENVIRONMENT: DEVELOPMENT
if ENV["RAILS_ENV"] == 'production'
  API_USER = "YOUR PAYPAL API USER NAME"
  API_PASS = "YOUR PAYPAL API PASSWORD"
  API_SIG = "YOUR PAYPAL API SIGNATURE"
  API_SERVER = "api-3t.paypal.com"
# ENVIRONMENT: PRODUCTION
else
  API_USER = "YOUR SANDBOX API USER NAME"
  API_PASS = "YOUR SANDBOX API PASSWORD"
  API_SIG = "YOUR SANDBOX API SIGNATURE"
  API_SERVER = "api-3t.beta-sandbox.paypal.com"
end

CreateRecurringPaymentsProfile Now you can include caller.rb in your transactions  controller (require 'caller') which will allow you to use the "CreateRecurringPaymentsProfile" method in the "call" method. There are many options that can be included in this hash that can be found here, but the only required items for creating a new recurring profile are (or see full PayPal API list):

  • CREDITCARDTYPE
  • ACCT (credit card number)
  • EXPDATE
  • FIRSTNAME
  • LASTNAME
  • PROFILESTARTDATE
  • BILLINGPERIOD
  • BILLINGFREQUENCY
  • AMT

You can also include a trial period. I use this with Drawbridge to allow new users to have a 30 day free trial. This means they will not be charged the monthly price until after the first 30 days (see full list here

).

  • TRIALBILLINGPERIOD
  • TRIALBILLINGFREQUENCY
  • TRIALAMT
  • TRIALTOTALBILLINGCYCLES

There is much more information of what you can do on the PayPal Recurring Payments with PayPal Payments Pro page. Using the Call method Once you are familiar with what PayPal requires to create a recurring profile, using the call method in Ruby on Rails is pretty easy. Here is an example of how I use the call method and the variables I send. Obviously some of these items are sent from the form on DrawbridgeApp.com, but some are set in the hash.

def do_payment
  @caller =  PayPalSDKCallers::Caller.new(false)
  @transaction = @caller.call(
    {
      :PROFILEREFERENCE => @account.id,
      :method          => 'CreateRecurringPaymentsProfile',
      :amt             => @price,
      :currencycode    => 'USD',
      :paymentaction   => "Sale",
      :creditcardtype  => @creditCardType,
      :acct            => @creditCardNumber,
      :firstname       => @first_name,
      :lastname        => @last_name,
      :email           => @email,
      :zip             => @zip,
      :countrycode     => 'US',
      :expdate         => @expDate,
      :cvv2            => @cvv2Number,
      :ProfileStartDate => Time.now.strftime('%Y-%m-%d %H:%M:%S'),
      :BillingFrequency => 1,
      :BillingPeriod => "Month",
      :desc => "Drawbride Quote Manager",
      :note => "A note about the transaction",
      :TRIALBILLINGPERIOD => "Month",
      :TRIALBILLINGFREQUENCY => "1",
      :TRIALAMT => "0",
      :TRIALTOTALBILLINGCYCLES => "1"
    }
  )
end

You can check whether the transaction was successful by doing

if @transaction.success?
  # Do whatever
end

If everything is successful, save the returned PayPal recurring profile id to be used when referencing the account's PayPal transaction history. If there is an error, PayPal returns the reason in it's response. You can save and grab this message in a session by doing this:

# Get response from PayPal
session[:paypal_error] = @transaction.response
@response = session[:paypal_error]
@longmessage = @response["L_LONGMESSAGE0"]
# Send errors
flash.now[:warning] = @response["L_LONGMESSAGE0"]
render :action => "index"

Change Credit Card Numbers What happens when a user needs to update their credit card number? Since PayPal doesn't allow a recurring payment profile to change it's credit card number, a new profile must be created for that account. This is quite unpleasant, but understandable. Here is the process I decided was the safest and most efficient. Suspend the Current PayPal Profile First suspend the current PayPal profile by using "ManageRecurringPaymentsProfileStatus" to have an action of "Suspend"

:

@caller = PayPalSDKCallers::Caller.new(false)
@suspend = @caller.call(
  {
    :method          => 'ManageRecurringPaymentsProfileStatus',
    :profileid       => @account.paypal_id,
    :action          => 'Suspend',
    :note            => 'A note about what you are doing'
  }
)

Create a New PayPal Profile Then create a new PayPal profile for the user, using their new credit card information. It is VERY important that you update the PayPal profile id in your database and also start the new recurring date the same as the suspended account, otherwise you will charge the user again. First check that the account was suspended and then create a new PayPal profile by doing:

if @suspend.success?
  # NOW WE CREATE A NEW RECURRING PAYMENT PROFILE
  # *NOTE: USE THE CURRENT BILLING DATE AS TO NOT BILL MORE THAN ONCE IN THE MONTH
  @caller =  PayPalSDKCallers::Caller.new(false)
  @transaction = @caller.call(
    {
      :PROFILEREFERENCE => @account.id,
      :method          => 'CreateRecurringPaymentsProfile',
      :amt             => @price,
      :currencycode    => 'USD',
      :paymentaction   => "Sale",
      :creditcardtype  => @creditCardType,
      :acct            => @creditCardNumber,
      :firstname       => @first_name,
      :lastname        => @first_name,
      :email           => @email,
      :zip             => @zip,
      :countrycode     => 'US',
      :expdate         => @expDateYear,
      :cvv2            => @cvv2Number,
      :ProfileStartDate => @account.nextPayPalBillingDate.strftime('%Y-%m-%d %H:%M:%S'),
      :BillingFrequency => 1,
      :BillingPeriod => "Month",
      :desc => "Drawbride Quote Manager",
      :note => "UPDATED CREDIT CARD"
    }
  )
end

To do the above ":ProfileStartDate", you will need to get the next billing date. I created a method in models/account.rb (where I track my PayPal profile):

def nextPayPalBillingDate
  # The PayPal next billing date is based on when the account was created
  # It assumes that this was when the credit card was charged for the first time
  curdate = Time.now
  unless paypal_created_at.nil?
    accountdate = self.paypal_created_at
    new_start_date = Time.parse("#{curdate.strftime('%Yspan<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punct

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/659130/brandon_120.jpeg http://posterous.com/users/4wPvUbZn5bvb Brandon Passley brandonpassley Brandon Passley
Tue, 31 Mar 2009 04:33:11 -0700 Sparklines http://brandonpassley.com/ruby-on-rails/sparklines http://brandonpassley.com/ruby-on-rails/sparklines If you use Google Analytics, you have seen Sparklines at work. Sparklines, as described by Edward Tuft, are intense, simple word-sized graphics. These tiny, sometimes ambiguous, graphs can give a needed overview of a path of a set of numbers, even without a reference point. They look something like this
Media_httpbrandonpass_rhdvh
and they can give the user a sense of history at a quick glance… as they glaze over the list of numbers next to it. I wanted to use Sparklines on a project I had been working on in Ruby on Rails. There are plenty of resources for installing the Sparkline gem, but I couldn't find much on actually implementing them. I created a quick script that could render sparklines with variables I could send from the URL. (NOTE: This could probably be written better, but it worked for me.) You will need to get the RMagick and Sparkline gems:
$ gem install rmagick
$ gem install sparklines
Here is what your action (apps/controllers/controller_name.rb) would look like:
def sparkline
  require 'RMagick'
  require 'sparklines'
  respond_to do |format|
    data = params[:d]
    params[:h].blank? ? (height = 40) : (height = params[:h])
    params[:s].blank? ? (step = 4) : (step = params[:s])
    params[:c].blank? ? (color = "2A5DB8") : (color = params[:c])
    params[:t].blank? ? (type = "smooth") : (type = params[:t])

    data = "0" if params[:d].blank?
    format.png do
      sparkline = Sparklines.plot_to_image(
                                    data.split(",").collect { |d| d.to_i },
                                    :type => type,
                                    :upper => 0,
                                    :above_color => "##{color}",
                                    :line_color => "##{color}",
                                    :step => step,
                                    :height => height
                                    )
      send_data sparkline.to_blob,  :filename => "sparkline.png",
                                    :disposition => 'inline',
                                    :type => "image/png"
    end
  end
end
Don't forget to add the sparkline to your routes (config/routes.rb):
map.sparkline      '/sparkline', :controller => 'graphs', :action => 'sparkline'

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/659130/brandon_120.jpeg http://posterous.com/users/4wPvUbZn5bvb Brandon Passley brandonpassley Brandon Passley
Wed, 25 Mar 2009 18:01:00 -0700 Ari Hest http://brandonpassley.com/portfolio/ari-hest http://brandonpassley.com/portfolio/ari-hest

Once again working with Matthew Williams, I built a custom content management system for the new Ari Hest website. I can't claim work on any of the design or front-end flash work (I wish I could because it looks awesome). This content management system was a little easier than previous work on the William Fitzsimmons website, since it only required a simple news and tour administration and no video work. I did add a PDF tour flyer generator (which was also used for the William Fitzsimmons site) which allows users to download a flyer for any tour date. This is a great feature for colleges, or for those fans that just want to support the band and post their own flyers. I've been listening to Ari Hest for a few years now and still haven't gotten tired of his music. Make sure to check out his new site. [ Visit the Ari Hest website ] [caption id="attachment_231" align="alignnone" width="600" caption="Ari Hest Screenshot"]

Media_httpbrandonpass_uebes
[/caption]

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/659130/brandon_120.jpeg http://posterous.com/users/4wPvUbZn5bvb Brandon Passley brandonpassley Brandon Passley
Thu, 30 Oct 2008 14:28:00 -0700 Drawbridge Quote Manager http://brandonpassley.com/ruby-on-rails/drawbridge-quote-proposal-manager http://brandonpassley.com/ruby-on-rails/drawbridge-quote-proposal-manager

Drawbridge started as a way for me to experiment and learn with Ruby on Rails. It ended up turning into a fully functional online application that many users have found to be very successful. The idea of a quote and proposal manager came in a need to fullfill many requests for project quotes in my freelancing career. Drawbridge gave me a way to organize, track and manage quotes for all of my projects. If you want to learn more about Drawbridge, look at the tour to see many of the features. To get the best tour, sign-up for a free account and play around. [ Visit the DrawbridgeApp.com site ]

Media_httpbrandonpass_fxacd
Media_httpbrandonpass_dqufh

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/659130/brandon_120.jpeg http://posterous.com/users/4wPvUbZn5bvb Brandon Passley brandonpassley Brandon Passley
Sun, 28 Sep 2008 17:35:00 -0700 William Fitzsimmons http://brandonpassley.com/portfolio/william-fitzsimmons http://brandonpassley.com/portfolio/william-fitzsimmons

I can't claim any design work on this website, but I did build a custom content management system for the William Fitzsimmons website. Working with Matthew Willams on this project, I needed to integrate a system that allowed William to update his tours, news and videos quickly and easily. I built a custom CMS to do all of this, including integrating William's YouTube videos into the open source JW FLV Media Player. One other great feature I built for the site was a dynamic PDF tour flyer generator (say that a few times fast) which allows users to download a flyer for any tour date. This is a great feature for colleges, or for those fans that just want to support the band and post their own flyers. If you're in the mood for folk-ish music to ease (or not ease) the soul check out William Fitszimmons. [ Visit the William Fitszimmons site ]

Media_httpbrandonpass_ocheg

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/659130/brandon_120.jpeg http://posterous.com/users/4wPvUbZn5bvb Brandon Passley brandonpassley Brandon Passley
Fri, 23 Feb 2007 15:37:00 -0800 UIC Art & Architecture http://brandonpassley.com/portfolio/uic-art-architecture http://brandonpassley.com/portfolio/uic-art-architecture

The website was started from scratch, the design and programming were collaborative, but each member specialized in some type of aspect. The project was developed over a ten month time period. Team members: Brandon Passley, Graphic Design/Electronic Visualization; Jack Fisher, Graphic Design; Gene Parcellano, Graphic Design; Camille Mankus, Graphic Design; Anna Trzyna, Electronic Visualization; Santi Vitayaudom, Electronic Visualization; [ more information ]

Media_httpbrandonpass_cbwgc
Media_httpbrandonpass_ukgxs
Media_httpbrandonpass_afcbe

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/659130/brandon_120.jpeg http://posterous.com/users/4wPvUbZn5bvb Brandon Passley brandonpassley Brandon Passley