Archive for the 'General' Category

Page 2 of 13

Migrating Rules From Microsoft Exchange to Google Apps

Recently I was part of transitioning the email system of a 20+ employee business off of a Microsoft Exchange 2003 server to Google Apps. Moving close to half a million emails to a new email service was a big decision. The transition tools that Google has in place are pretty good, albeit slow for that many emails, Google throttles email transfer to one each second after the first 500. However, the one piece that was missing was a good tool to transition outlook server rules. Many employees used those rules extensively and many had 50-100 rules. Outlook does not have any method in place for extracting those rules. There is no built in way to getting any sort of list or descriptions of the rules, if one wanted to transition the rules manually they would have to click on a rule, look at the pop-up window, and recreate the rules in Gmail using the filters functionality – repeating this two step process for each rule. Horrible.

This would waste many hours of valuable time so I started hunting for a better solution. There is an API in Outlook 2007 or higher that enabled access to rules. There isn’t much example code available, and to my surprise I couldn’t find any VB script to export a CSV of all the rules associated with an outlook account! I hacked together a really rough VB script which exports Outlook rules (only one rule type right now, thats all I needed for my use case) as a CSV and then wrote a small ruby script to generate a XML doc of the rules for import via Gmail’s import / export available through Gmail labs. It works fairly well assuming you have an updated version of Outlook 2007 or higher.

Google Apps Transition Notes

  • The server migration tool pulled in some calendar events that employees claimed they deleted long ago.
  • The Google Mail Uploader application for Mac is not consistent. It wouldn’t pickup mail on some computers. Doesn’t handle folder hierarchy (flattens everything). Use the server migration tool instead.
  • folder doesn’t update folder’s unread count immediately. This might be an isolated issue with Lion.
  • I had a problem with one Mac machine (10.6) where the inbox would randomly appear blank. Clearing all support / cache files and adding the mailbox with message + attachment cache disabled fixed the issue (after mail downloaded I enabled cache again).
  • Gmail doesn’t seem to handle lots of folders (labels) well. seems to be a lot slower with multiple folders.
  • Hiding the automatic All Mail, Misc, Follow-up, etc folders was helpful for those who were not familiar with gmail.
  • Changing some of the local settings on makes Gmail play a bit nicer.
  • Still can’t find a good solution to allowing a user that is an administrator of another user’s calendar to create an event with the organizer being marked as the calendar’s creator. Use case: administrative assistant managing an executive’s calendar.

MacRuby Deployment + Load Order

After reading the official MacRuby docs on deployment, I read over this guide. Although the deployment build seemed to be working fine on my local machine when I dropped it on my laptop with a standard Lion install it crashed, claiming that there was an defined constant – but that constant was a class. How could it be undefined if it ran fine locally?

Looking into it a bit more the class that was undefined was being used as a superclass for another ruby class. Taking a look at rb_main.rb revealed that there is no specific load order. Since the load order was undefined, the class requiring the other ruby class as a superclass was being loaded before the superclass was loaded. I ended up tweaking the rb_main.rb file to allow for a manual load order, followed by the standard automatic load.

# Loading the Cocoa framework. If you need to load more frameworks, you can
# do that here too.
framework 'Cocoa'

# Loading all the Ruby project files.

# manual load allows up to specify the load order for some of the classes
manualLoad = ["VTiTunesHeader"]
for file in manualLoad
require file

manualLoad < < File.basename(__FILE__, File.extname(__FILE__))

# Auto load the direct of the files in the dir
dir_path = NSBundle.mainBundle.resourcePath
Dir.glob(File.join(dir_path, '*.{rb,rbo}')).map { |x| File.basename(x, File.extname(x)) }.uniq.each do |path|
if not manualLoad.include? path

# Starting the Cocoa main loop.
NSApplicationMain(0, nil)

You can grab the gist here.

Cocoa Resources

Some Cocoa libraries / snippet repos that I found during my latest dev session.

Random Tidbits

  • Although old news to most, you can grab the the last n bytes of a file using tail -c. Very useful for cutting down on the size of large text log files.
  • I pulled the build versioning code out from a project I was working on. Take a look at this build numbering gist, provides source to pull version number from git or svn and write it in your Info.plist
  • The Ruby logging class is more robust than the Log4r class and the built in logger class.
  • attr_accessor :variable makes a instance variable Key Value Coding compliant. Just set @variable in your initializer.
  • Awesome side-by-side reference sheet for PHP, Ruby, Perl, and Python. Handy reference to python to ruby conversion.
  • Obj-c blocks in MacRuby
  • Although you can `macgem install json`, macruby comes with a json library built in that seems to have tweaks for deployment. Don’t install the json gem
  • The Open3 Ruby library does not return subprocess status correctly when using MacRuby
  • Online version of “MacRuby: The Definitive Guide”
  • PyObjc on Lion is dead. Although you might get an application to run, there are so many bugs it really isn’t usable for production
  • Although macrubyd exists, it doesn’t seem to work with full-fledged Cocoa + MacRuby apps. There isn’t any Xcode integration. Ruby-Debug also doesn’t seem to be compatible with MacRuby. Bottom line: no strong debugging tools for MacRuby… yet.
  • The “throw your dotfiles on github” trend has been an interested learning experience for me

TextMate 2 Alpha Before Christmas

Just saw this on the macromates twitter today:

@kylefox It does however work better in 2.0 provided soft-wrap is on, there will be a public alpha before Christmas.

I’ve been a long time TextMate user anxiously awaiting a new version (Allan did such a great job with V1, I’m curious to see what he will come up with for V2).

Couple new TextMate related links / things I’ve found recently:

Lion, SMTP Postfix Relay, and Dreamhost

When developing web-apps locally it is useful to have a fully functional smtp server to test automated emails associated with your application. Many times the network you are developing on will not allow you to simply start up postfix and and run your own local smtp server. However, this doesn’t imply that you can’t use postfix – modifying postfix to relay all outgoing mail to an external / offsite smtp server that you have control of will enable you to develop & test the parts of your application that require a local outgoing smtp server without an issue.

Many times port 25 (the default smtp port) will be blocked somewhere along the line in your network connection. You can figure out if your network configuration or ISP is blocking port 25 by running

telnet 25.

Edit /etc/postfix/

relayhost = []:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes

Create/edit /etc/postfix/sasl_passwd


Run this command in your shell once the above two files are created/modified:

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo launchctl stop org.postfix.master
sudo launchctl start org.postfix.master

# test postfix, cmd+d after typing message content to send message
mail -s "Testing, Testing"


Part 2: Thoughts on Buzzmarketing

Empowered Interactivity

A while ago I read an article on the lessons to learn from the DropBox marketing model. After reading the chapter on empowered interactivity I immediately recalled that article and how incentivizing referals increased signups by something like 60%. People generally want to share what is useful to them, and they really want to share something if it can benefit them in someway. When thinking of what the word ‘benefit’ (or more specifically, economic incentive) means to a given person I immediately think of the RSA Animate video about what motivates us and the example they give about Wikipedia: experienced professions and academics who could easily use hours spend researching and writing Wikipedia articles working for sizable monetary reward instead choose to work for free. Why? Because it is satisfying: there is a social currency that one receives when achieving something that a community of persons respects and affirms. This is why the FAQ model that Stackoverflow employs works so well (although the model has changed a bit since they tied site reputation to the ability to interact with the Careers site).  This is why monetary referrals without social recognition don’t always work so well.


These couple lines rung true with a couple recent products / marketing efforts I’ve seen:

Secrets are currency. Revealing a secret is a definite conversation starter… Limit those in the know of a secret, those not in the know want the currency of knowing – they want to be part of the exclusive circle. (Buzzmarketing, P.37)

Push Pop Press immediately came to mind while reading this. They haven’t released anything yet, they have only demoed the product to a select few, and there are no publicly available demo videos. They are near 6,000 followers on twitter and really haven’t put any money into marketing their product. I’m interested in what they are coming out with, and I’m sure many others are too. They are definitely playing the secrecy card correctly. The MacHeist bundle was successful because of exclusivity and secrecy that they built up around the bundle. Apple (obviously) does this with almost all their product releases. Gmail did this with the invite system when gmail originally launched. Being in the know is attractive, and people will ‘spread the word’ if they know something others don’t.

Thoughts on Buzzmarketing

I’m currently reading Buzzmarketing by Mark Hughes, a book about word-of-mouth advertising. I’m only about a 1/4 way through the book but as I’m reading through the book I keep comparing the ideas that he is presenting to experiences in my own life in order to understand the practical application of his ideas. I’m not a marketer by trade, this book is the first step in my goal to achieve a better understanding of marketing methods (especially marketing via social networking channels).

The two key concepts I’ve pulled from the first section of the book are: 1) the human desire of having something worthy of the interest of others 2) the effectiveness of creating a ‘pre-packaged conversation’ that people want to share with others. As I was reflecting on these two key concepts I’ve thought of a couple examples which show how these concepts play out in the ‘real world’.

The ‘Bed Intruder’ Song

The bed intruder song, virtually overnight, became the funniest most watched “have you see this?” video on YouTube pushing the song to the top 100 chart in iTunes. This video definitely pressed the ‘hilarious button’ that Mark talks about in his book.

Failed Door-to-Door Marketing

Open Range is a new internet service being rolled out in the town I’m currently living in. I don’t know much about the service other than it is lest costly than the standard cable + internet combo offered by Comcast. There is a door-to-door marketing effort going on in our neighborhood. I don’t like door-to-door marketers, I don’t want to talk to them and avoid conversation if at all possible. Mark recounts a story about a car company that used a ‘moose button’ to start the conversation between store employees and customers about a new brake product / sale. Each employee had a big button with the image of a moose pinned to their shirt. Something wierd or different that inspires the customer not the sales person to start the conversation. If this open range salesman had something interesting or weird to attract me to him I probably would of asked him what was going on, instead he approached me with the classic boring line “Have you heard of open range?”.

Having something worth sharing makes you feel as though you have some sort of unique worth, giving others this worth or ‘buzz currency’ in a way that is connected to what you are marketing seems to be the key to effective social / word-of-mouth marketing. The interesting thing about this marketing model is it preys on the insecurity of the human race, it assumes that people want to be noticed and approved of by others.