Garbage Burrito

Blog

August 2009

Comments: 1
Last Comment: 03/17/2010 04:34:26

I recently got the E-Mail Marketing itch. I realized we have a great email list that we haven't tapped into at all. The thing is I don't want to just blast the same email to everyone, I want the email to be semi-intelligent, ie. 2 days after someone signs up they get an email with helpful tips.

Enter Mad Mimi's new Mailer API. This is just brilliant IMO, exactly what I was looking for. Basically they have a simple API to send out one-off or "Transactional" emails through their system. What are the benefits?

  • Create Beautiful E-Mails through their awesome promotion builder
  • Track Views, Clicks, Bounces, etc.
  • Automatically adds new E-Mails to your audience for other promotions
  • Ability to change your emails live, without deploying
  • Offload Mail Server resources to their systems

Now when a customer signs up, or their credit card is declined or whatever, instead of getting dry ugly text they get a rich friendly looking email. Plus I can track what's happening and improve the emails as time goes by.

I can also create a system where I choose when to send other promotions based on the user's behavior. This sort of personalized response is the best way to get through with E-Mail Marketing these days.

It's not necessary to go into a full-tutorial here, simply because Mad Mimi's developer center covers it well, and it's not that complicated in the first place. But I will cover the basics.

First install the gem. Make sure you've added github to your list of gem repositories.

$ gem sources -a http://gems.github.com (you only have to do this once)
$ sudo gem install mad_mimi_mailer

I had a version conflict with ActiveSupport so I froze the gem, but that's up to you.

What they've done is extend ActionMailer, so changing your emails to Mad Mimi is stupid simple. Essentially you put in your api creds, change the base class and add mimi_ to the front of all the methods. You'll also need to specify the name of the promotion.

MadMimiMailer.api_settings = {
:username => 'ben@doodlekit.com',
:api_key => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
} class BillerMailer < MadMimiMailer def mimi_suspended(customer_site)
settings = SystemSetting.find(:first)
promotion "Account Suspended"
@subject = 'Doodlekit Alert - Your Website Has Been Suspended'
@body = {}
@recipients = customer_site.email_address
@from = settings.admin_email @body[:customer_name] = customer_site.full_name
@body[:site_title] = customer_site.site_name
@body[:site_url] = customer_site.url
end

This mailer is using a promotion called "Account Suspended", so there must be a promotion with that name in my Mad Mimi account. The elements in the @body hash are mapped to variables in your Mad Mimi Promotion. :customer_name maps to {customer_name}.

Then just change your deliver call to include mimi_

BillerMailer.deliver_mimi_suspended(customer_site)

That's it!

One quick helpful tip. If your having issues and would like to see what's going on between you and the API you can enable HTTP debugging by adding the following line in the post_request method in mad_mimi_mailer.rb.

http.set_debug_output $stdout

Kind of Hackish, but good if you're in a bind.

I'm super happy about how this turned out, and plan to explore the other area's of Mad Mimi's API. And of course it's always great for sending out regular promotions to your email list.

Comments: 1
Last Comment: 03/17/2010 04:34:26
Comments: 1
Last Comment: 03/20/2010 12:05:36

Tried starting my development environement after installing Snow Leopard and got this error about the MySql gem not being included with Rails anymore.

!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.

Tried to install the gem and got this.

ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h

Found a post that said to install the latest 64-bit MySql, got the same error. Found this thread that said to install XCode from the Snow Leopard disk and run this command and we're back in business.

sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

 

Comments: 1
Last Comment: 03/20/2010 12:05:36
Ben Kittrell - 08/28/2009 16:43:00
Comments: 0

One of the earlier projects we did was replacing the old cast iron sewer stack. For those not familiar, this is a 4" diameter cast iron pipe. My Dad came up to help with this one.

The first question was, how are we going to cut through this stuff? After deciding a hacksaw wasn't going to work we went to the Home Depot rental department so see what we could find. We came looking for a sawzall, but thankfully the guy there asked what we needed it for. After we told him he said "No no, I have what you need". He brought out what looked like a giant bicycle chain attached to a handle. He explained how you wrap the chain around the pipe, which had little sharp disks on it, and tightened it until the pipe snapped.

It worked beautifully. Aside from the pipe being heavy as crap, the job was super easy thanks to this tool. That's all the tool was made for, that one specific purpose.

That's when I realized how incredibly important it is to have the right tool for the right job. It can save you time, money, effort and most importantly sanity. Time and time again I've found ways to make projects easier just by looking for a better tool.

I've carried this over into my professional career as well. Java and Ruby both have their place in my toolbox, as well as many other tools I find make my job easier.

If you find yourself beating your head against the wall, take a step back and make sure you're using the right tool.

Comments: 0
Ben Kittrell - 08/25/2009 10:43:00
Comments: 0

Yesterday we pushed out the new Doodlekit Billing System that consolidated our user accounts. Before we had one user account for every website. Now a user account can have multiple websites. This allows them to use a single credit card for all their websites, or to use multiple cards to separate charges (if they had a business website and a personal website for example). Read more about Doodlekit's User Consolidation Project on our blog.

Comments: 0
Ben Kittrell - 08/24/2009 12:45:00
Comments: 0

Google Wave looks awesome. If you haven't seen the demo, check it out, this is definitely the future of Internet communication. The operative word being Future. Most people that come across this blog may be ready, but the general public is not. This is to be expected of course.

When I was watching the demo and they showed the Google Search plugin, a "wave" of ideas hit me. I thought of all the things I could do, especially for Doodlekit. But the thing is all of these things could be helpful in GMail too.

The problem is that I don't expect that 90% of our customer base will know what Wave is for at least a year. This plugin functionality could be so powerful in GMail.

I'm excited about the possibilities with Wave, but I hope it doesn't draw attention away from the best email client on the Net.

Comments: 0
Ben Kittrell - 08/18/2009 13:47:00
Comments: 0

Problem

We've been using Paypal's Website Payments Pro for a few years and the ROR::Paypal has been working just fine for our purposes, until I changed things up a bit. I wanted to make the signup more atomic in case of a failure but had trouble when I tried to use the DoCapture method. Looking at the code it actually says in the comments that they couldn't get it to work, awesome right?

First I tried out ActiveMerchant. It looked great and was super easy to implement. Unfortunately it did not work in my app for reasons that are too embarrassing to publicly admit.

Solution

After effin around for awhile I found an alternate solution. Apparently there's a Paypal Ruby SDK that uses their NVP or Name Value Pair protocol. I didn't even know the used NVP until now. What a relief, SOAP is so crappy.

The best part is it's super easy to implement. The SDK download is a sample Rails app. To use it yourself all you need to do is copy the PayPalSDK plugin from the vendor directory and paypal.yml from config.

If your currently using a certificate you'll want to switch to a signature, another welcome change. The signature is just a string you pass to the web service, instead of a stupid cert file you have to load up. You can get the signature from the API Settings in your Paypal account. Once you have that info copy the API Username, Password and Signature into the paypal.yml file.

Then look at the controllers in the sample app for examples of how to call it. The basic gist is something like this.

require 'caller'
caller =  PayPalSDKCallers::Caller.new
transaction = caller.call(
  {
:method => 'DoDirectPayment',
:amt => total.to_s,
:currencycode => 'USD',
:paymentaction => 'Authorization',
:creditcardtype => card.type_code,
:acct => card.card_number,
:firstname => name[0],
:lastname => name[1],
:street => address.address1,
:city => address.city,
:state => address.state,
:zip => address.zipcode.to_s,
:countrycode => address.country,
:expdate => card.card_expiration.strftime("%m%Y"),
:cvv2 => TEST_MODE ? "000" : card.security_code
}
)
if transaction.success?
return transaction.response["TRANSACTIONID"]
else
raise PaymentException, transaction.response["L_LONGMESSAGE0"]
end

 

I really like this approach because it's a super thin layer that just does what it needs.

 

Comments: 0
Ben Kittrell - 08/07/2009 16:36:00
Comments: 0

Permission Marketing - Seth Godin

Permission MarketingSo much marketing today is wasted on trying to interrupt a consumer's busy day and shove something they don't need in their face. Of course we're all victims of name brands. We've all purchased one product over another because of some subconscious opinion formed by too many ads thrown our way. That works great for Coke and Nike, but it's not going to work for the small business trying to sell a product based on quality and good customer service.

Permission Marketing talks about how to establish a more personal relationship with your prospects and getting their permission before you start talking business. Seth talks about offering incentives over time to keep attention, gaining trust, and ultimately turning an stranger into a friend, and a friend into a customer. He also covers how to leverage existing customers by offering them more services to purchase.

Halfway into this quick read I had to grab some paper and start writing down ideas. These are things I can implement very easily and will turn into a solid increase in sales. Best of all they are not cheap tricks. This is real, down to earth marketing that you can feel good about.

Simply put, anyone that is interested in marketing what-so-ever should read this book.

Reality Check - Guy Kawasaki

Reality CheckHonestly I was disappointed by this book. It's not that it wasn't well written or that it didn't have good information. In my opinion this book is meant for people that are starting at zero. More specifically people that want to move to the Valley, get funded and be the next Facebook. I didn't find any specific strategies or new ideas that would help somebody that's been in the trenches for a few years. It did however have a funny Foreward by Fake Steve Jobs.

Heath and I have worked hard for a long time to build Doodlekit. Not that VC's are knocking down our door, but we've stayed away from the idea because we want to be in control and we want to reap the full rewards of our work. Now we're in a great position, we have a solid product with a great customer base that belongs to the two of us.

Comments: 0
powered by Doodlekit™ Free Website Builder by Doodlebit™ Website Company