Syncing Google Contacts with iMessage (and Contacts) on OSX Mavericks

You may remember earlier in the year I took issue with the super secret hidden checkbox in the Mountain Lion’s version of Contacts which magically syncs your Google contacts with OSX Contacts and Messages. As it seems, Apple have finally fixed the SSL problem stopping you from syncing through the Google option in System Preference’s Internet Accounts setup.

Getting the sync to work now is as trivial as adding a Google account to your Internet Accounts list, log in and turn on the items you want to sync. Screen Shot 2013-11-26 at 9.46.42 pmHurray! Easy peasy.

It’s beyond me that it wasn’t like this before.


Syncing Google Contacts with iMessage (and Contacts) on OSX Mountain Lion

Being able to sync your Google Contacts with your OSX Contacts is possible – it just takes a bit of digging.

As a long-time iPhone 4 user, I was recently introduced to the wonderful OSX Messages app, which lets me read/send iMessages from my Mac, as if I had sent a text from my phone. Such an amazing thing (even if it does only work with other iPhone users). However, it only used phone numbers to identify contacts; less than ideal since I seldom reference my friends and family by their cell numbers.

I use Gmail for all my email purposes; and after loosing my completely contacts list TWICE from the failures of Windows Mobile 6, I am also a huge advocate for Google Contacts – awesome synergy between my phone list and email contacts. and while I’ve been very happy Syncing my email/calendar/contacts between Google and my iPhone; my Mac just didn’t want to come to the party and I refused to retype my contacts manually.

At first I tried syncing the contacts over Google’s Microsoft Exchange Protocol (which is actually the best way of syncing Gmail/contacts/etc onto the iPhone), however you cannot get the necessary SSL to connect to Google on Mountain Lion. Next I tried backing up my iPhone contacts into iCloud, which also failed.

I was about to give up until I discovered that the preferences for the Contacts app has an option that I didn’t know about. Carefully disguised under the “On My Mac” account, you will find the option to sync with Google.

syncing-google-contacts-in-mountain-lionHurray! Easy Peasy.

Ruby Script to Import Google Contact Photos From Gravatar

Google Contact photos are a much neglected feature of the Google Stack. It really adds to the user experience when you see each of your contact photos when you make or receive a call. However, it can be a real pain (especially if you have hundreds of contacts).

But I had an idea recently, to try and match my Google Contact emails with Gravatar and try to auto-populate some of the dozens of contacts that didn’t already have a photo (after all a Gravatar is better than nothing).

So I wrote a Ruby script to find my contacts missing a photo and try to update it with a Gravatar (wherever possible). NB: You may need to first install the GData (Google Data) gem by opening a Terminal window and issuing: sudo gem install gdata.

#!/usr/bin/env ruby

# Google Contact Photos - Gravatar Importer
# Written by Ashley Angell
# Licenced under Creative Commons with Attribution

require "rubygems"
require "gdata"
require "rexml/document"
require "digest/md5"
require "net/http"
include REXML

none = 'd5fe5cbcc31cff5f8ac010db72eb000c'
user = ARGV[0]
pass = ARGV[1]

client =
client.clientlogin(user, pass)
data = client.get("{user}/full?max-results=10000")
myxml = data.body
p "contacts"
puts "-"*70
i = 0
myxml.each_element("feed/entry") do |e|
    gd = e.elements['gd:email']
    if !gd.nil?
      email = gd.attributes['address'].downcase
      hash = Digest::MD5.hexdigest(email)
      image_src = "{hash}"
      nil_image = false
      image_element = e.get_elements("link[@rel='']")[0]
      if !image_element.nil? and image_element.attributes['gd:etag'].nil?
        data = nil
        md5 = nil
        Net::HTTP.start(URI.parse(image_src).host) do |http|
          resp = http.get(URI.parse(image_src).path)
          data = resp.body
          md5 = Digest::MD5.hexdigest(data)
"#{email}.png", 'w') do |f|
            f.puts data if md5 != none
        md5 = Digest::MD5.hexdigest(data)
        if md5 != none
          puts "#{email} > #{image_src}"
          client.put_file(image_element.attributes['href'], "#{email}.png", 'image/png')
          i = i + 1
          puts "#{email} > no match"
        puts "#{email} > skipped (already has photo)"
      File.delete("#{email}.png") if File.exists?("#{email}.png")
  rescue Exception => ex
    puts ex
puts "Updated #{i} contact photos"

To execute it, simply copy and paste this into a text editor (or download it and unzip) and from Terminal (command) window and execute the following commands:

sudo chmod +x googlegravatarimporter.rb [Enter]
./googlegravatarer.rb your_password [Enter]

It will cycle through your Google Contacts and indicate what action was taken. For me, surprisingly updated a few dozen contacts (even more than I expected).

I’ve posted this here for others that might want to do the same thing but cannot be bothered writing the script for it. Consider it posted here under Creative Commons with Attribution.

Dissolution of Social Networks

Cross-posted from the Particls blog:

My lovely wife (who is an Economics and Business teacher coincidentally) sent me a Podcast today which really blew me away. It’s an interview with Andreas Kluth (San Francisco correspondent for The Economist) talking about real and virtual campfires, and predicts the dissolution of standalone social networks as we know them.

Anyone interested in the next generation of internet technology really needs to listen to this podcast. Its clear, concise and really gets at the heart of many social graph issues and human behaviour.

From Russia with Love

Cross-posted from the Particls blog.

With some hilarity, I present: Russian computer program fakes chat room flirting.

Internet chat room romantics beware: your next chat may be with a clinical computer trying to win your personal data and not your heart, an online security firm says.I find this both hilarious on a number of levels, but it illustrates so perfectly about how valuable (as users of the interwebs) our attention data is. It’s so valuable that some smart people have written what can really only be described as a Trojan horse for attention data!

PC Tools senior malware analyst Sergei Shevchenko says the program has a “terrifyingly well-organised” interaction that could fool users into giving up personal details and could easily be converted to work in other languages. “As a tool that can be used by hackers to conduct identity fraud, CyberLover demonstrates an unprecedented level of social engineering,” he said in a statement. “It employs highly intelligent and customised dialogue to target users of social networking systems.”This is not some script kiddy. Or some backyard Javascript peddler. This is some serious hardcore natural language processing prodigy who has the temerity and the wits to make a quick buck by collecting social and personal attention metrics. I can’t condone his actions; as I do find it highly immoral (and unethical) but I can definitely see why someone would do such a thing.

This also highlights the need for the general public to be more conscious and aware of their attention data, how to obtain it, how to control it and how to move it. It clearly demonstrates the value of the data we allow companies and products to collect about us with little or no hesitation. We allow these companies to collect whatever they like, without even letting us have a glimpse of what inside their walled gardens.

It’s long past due that we all stood up and asked them to open the doors.

It’s time we all started demanding Data Portability.

Walking the Walk

Cross-posted from the Particls blog.

Creating a profile of a person’s attention is something Touchstone has been doing for some time now. Since we have launched the APML specification, we have had a lot of positive feedback about it, which has been both inspiring and reassuring. Additionally, APML addresses something I have felt for a while now; that I have grown weary of the constant “banter” about solving the Attention Deficit Problem.

One thing that we feel will make the difference, is the implementation of the APML specification into real-world (and value added) user scenarios.

Having an attention profile specification is all well and good, but if nothing useful uses it, there isn’t much point in having it. At some point, the talking has to stop, and action must (and should) always take place. In order to facilitate the widespread use of the APML specification, we have charged Michael (a member of the Touchstone Development team), to building an APML library which will consume and process APML data so other developers do not have to worry about designing/programming their own to process the format we have suggested. We understand the pressures of supporting a standard like this, so this library and it’s source is going to be free for whomever wants to use APML in their applications.

While APML is still a young format that is being discussed by the community it it will continue to change and grow – we are committed to making it the right kind of solution for storing an Attention Profile (so that end users don’t get 400 different ways of describing and profiling a person’s interests) and taking the first step by releasing these types of contributions. We will be releasing another build very soon, but we hope that within the week we will have the initial APML library ready to go for anyone who is interested in joining the “less talk, more action“ bandwagon, with Attention Meta-Data consumption.

You can read more about APML at the APML website.

I Simply Can’t Wait Any Longer

Cross-posted from the Particls blog.

I am supposed to be in my box coding but I can’t wait anymore. I have to show something off to you patient folks.

I think it’s a fair assumption to say that everyone involved in Touchstone (Chris, Mike, Me and our dedicated testers) is simply splitting at the seams anxious to release the next build.

Here is a little glimpse at what the I-AM keyword bias screen looks like so far (minus Chris’ polishing).

As you can see, we have made a conscious effort to blend the standard windows look with something that Mac users might even be happy with. It’s always a fine line between beauty and delivering what people expect from a standard windows app (beast).

While it’s been a little while since our last published build, we have taken great pains (just ask Chris) to adopt user feedback and advance the underlining technology. We have also revised parts of the framework to take advantage of .NET 2.0.Now, we just have to get it to compile ;)… Just Kidding.

This new approach has simplified the entire user experience (yes Chris, “You told me so”) and it has made for a more solid Touchstone.

Chris just MSN’ed me: “Chris: dude stop posting and code!” So I guess its back in the box I go. ‘Till next time.

iAM on my way!

Cross-posted from the Particls blog.

Up until now Chris and I have been in the nuts-and-bolts part of the project. As a consequence the app “seems” stable (/me touches wood) and we are now free to do more interesting things. So far we have been doing LOADS (and I mean LOADS!) of planning and design behind what I consider to be at the very heart TouchStone – The Attention Engine.

Now we can begin focusing on the ‘Visible Innovation’ part. Breaking down the things you care about into a single and intrinsic number. The iAM Rating.

But ranking items based on stuff I like isn’t enough! Because, for most people, just subscribing to a feed is an indication of interest. So, we have to consider other factors.

To be honest, programmatically, I have been a little frightened of the iAM binary. It’s so important to nail it! So far our plans are pretty ambitious and the basic core of iAM (processing items as they are injected into the Attention Engine based on source and keywords defined within an XML file) is functioning already – what’s been lacking has been the interface and the more advanced bias calculations. This lack of any interface has worked extremely well for me, because while there is no way to configure the XML file, I don’t have to code it!

Chris recently upset this delicate balance by actually developing the iAM interface mockups for the release of the Limited Alpha!

‘iAM’ is so exciting though, because it isn’t JUST a keyword scanner and ranking system. It’s a whole system to scrutinize the items based on:

Content (keywords and source)
Source (where it came from)
Author (who generated the item)
History of past items that got your attention (by scanning items for similarities to items marked as read in the cache file)
Buzz value (how popular is the item on the internet and to other people)
The publishers recommended importance (so publishers and bloggers could distinguish the variable importance of items they generate)
..and more.
All this is very exciting, but it’s STILL not enough. TouchStone is also about allowing the user to configure the DELIVERY of items based on the iAM determined value. So we will work on those “visualization widgets” as well.

It’s great to see all these things finally start to come together. While we are quite proud of our ticker, it’s time to move forward and finally uncomment the code that fires off the other alerts. Soon guys and gals – soon we shall be firing off SysTray, Cursor, Centre Screen Modal, and (my personal favorite) Compact SysTray alerts based on things you deem important.

Enjoy the Limited Alpha (those that have it) and those that don’t – email already!

I Think Therefore "I-AM"

Cross-posted from the Particls blog.

“I-AM” who I know.
“I-AM” what I read.
“I-AM” where I am.
“I-AM” how I work.
“I-AM” me.

During a huge Australian Summer Storm on the 8th (and the subsequent black-out), Chris and I took the down-time to fine tune and clarify some of the details about the TouchStone Attention Engine. It wasn’t like we were going to code anything.During this conversation, Chris mentioned that TouchStone embodied Intuitive Attention Management or “I-AM”. This initially was just a rather fancy nickname for the “How-Important-Is-It-Parser”, but the trouble is (despite my previous directives about what he was and wasn’t allowed to call the parsers) – I loved the name.After arguing/talking about ways of defining and encapsulating the essence of what a user does and doesn’t want to be notified about, we settled on the idea that each and every item generated by a source (be it RSS or other), has a given relevance to the user at any given time. This relevance is based on a number of internal and external factors.

By defining, naming and weighting these sources it’s possible to give each item an ‘importance value’ and then allow the user to define alert types based on value thresholds.Further, we decided, we could encapsulate this functionality its own library so that other developers and their software can tap into its power. The result is we take a source item, it’s content, it’s source, the author/publisher, key concepts/tags and apply pre-defined global and user defined “rules”. By biasing (positively or negatively) the final importance value, we can begin tuning the user experience based on relevancy.After we fleshed out the specific details on how we would accomplish this, I-AM was born. An external class library with the methods by which we should be able to determine, intuitively, the value of a piece of content to a given user. The result of this calculation should be an ‘importance’ value that is attached to an item moving through the Touchstone system. This value is then used to determine the way in which an alert is presented (i.e. level of user interruption).

I love diagrams!All values involved (we decided) should be from -5 to 5. A negative value being a vote against the relevancy of that item for the user. 1 being the least import, and 5 being the most. With a growing number of Meme Engines out there, it is clear that there is an ongoing effort to try and reduce the RSS Overload and help content rise to the top.

In essence, I-AM might be a personalized Meme engine that any feed reader could use to place a value of importance on content coming in from a user’s OPML file (for example). It is then up to the news reader to determine how to act on that value for a great user experience.I-AM is not intended to replace the existing attention ranking and suggesting methodologies, but merely to enhance the user’s ability to sort and control the flow of syndicated content on the client side.

Plus it has an awesome name – don’t you agree?