Annie and I just put together this little WordPress site for my aunt’s new business. She takes care of inns and bed and breakfasts while the owners are away. I love the cute apron logo Annie came up with.

It’s been a while. Turns out a lot changes have hit the world of Facebook in a year and a half… I recently took another look at Where are My Friends and found it thoroughly broken. Anyway, I finally got around to fixing it and updating it a bit. Big performance improvements were done. I’m now caching popular locations so I don’t need to ask google to geocode them on every request.

What is this?

This application gets all your Facebook friends’ hometown and current locations and plots them on a map.

Why did I make this?

I created this application because I was curious where all my friends are and didn’t want to share my friends’ or my own information with third party developers. Since I’m the developer, I know exactly what’s happening with the information.

What is happening with my information?

I get the full list of your friends from Facebook using their OpenGraph API. Then, assuming you’ve given this application permission to do so, I loop through your friend list to get each friend’s current location (city) and hometown information. When this list loads, you’ll see light gray and dark gray name and location pairs. The light gray ones are people/location pairs that weren’t provided or are private. This list is below the map and will load after you successfully sign on and hit the start button.

After that, I loop through each location and ask Google’s geocoding service for the location’s latitude and longitude. You can watch this progress below the map on the right hand side. Locations will turn green as they are successfully geocoded and failed attempts will turn red. Google only receives the location, not any information about who lives there. With the latitude and longitude that Google provides, I place a marker on the map.

Information containing personal data is only stored on the client, ie. your Web browser, and is never sent to any third party. I do not save any of this information on my servers. While this is good for your privacy, it means that each time you call this page, the page needs to do a lot of work to load the information, so it may take a while.

Why are there errors getting the geocode information?

Google’s free geocode service has two quotas: One is a daily quota of 2500 geocode requests per user; the second is an unspecified limit to how quickly google allows users to make requests. I cache location information (facebook’s location ID and google’s latitude/longitude information… no personal data), but occasionally these quotas will be exceeded. When that happens, the application will be unable to map locations. The unmappable locations will be highlighted below the map.

My family and friends in the States often have a difficult time understanding my phone situation. It is time to explain.

What I’m about to describe is the process and services that enable us to keep our States-based phone number and make and receive calls on our Canadian cell service without anyone paying international fees.

Google Voice

My primary U.S. phone number is a Google Voice number. Google Voice is (currently) a free service that forwards calls to multiple numbers and transcribes voice mails, among other features. Unfortunately for people living outside the U.S., Google Voice does not allow for forwarding to non-U.S. numbers. This is where Skype comes in.

Skype

In addition to the free computer-to-computer calling and video chatting that the company is probably best known for, Skype also offers a number VoIP services. I subscribe to two additional features: Unlimited North American calls and a Skype phone number. The two services run $30 a piece on an annual basis and are both necessary.

The anatomy of an incoming phone call

From the U.S., someone dials my Google Voice number, which is in area code 202 (Washington, DC). Google forwards the call to my Skype phone number (also a U.S.-based number). Skype, enabled by my unlimited North American plan, forwards the call free of charge to my Canadian cell phone. If I don’t answer the call, my Google Voice voice mail will pick up and then send a transcription of the message to my email or via SMS. I can also listen to it online or via the Google Voice iPhone App (only available in the U.S. version of the App Store).

The anatomy of an outgoing call to the U.S.

Making calls to the U.S. from my cell phone in Canada requires internet access. Google Voice’s mobile website or iPhone App allows you to ‘dial’ any number or pick people from your Google contacts, then Google initiates the call by calling my Skype number that forwards to my Canadian cell. It shows up as an incoming call to my cell phone and thus doesn’t incur any international fees. When I pick up the call, Google then connects me to the number I dialed.

Visiting the States

With Google Voice, I can easily add numbers to have calls forwarded to. This allows me to pick up a prepaid phone and set it up to receive calls from my Google Voice number.

Making and receiving Canadian calls

Calls within Canada are much simpler. Since my cell phone has a Canadian number, that’s what I give out in Canada. When I make calls within Canada, I dial the number directly from my phone. No fancy tricks.

Applications outside North America

This same concept would work for Americans living elsewhere on the planet. The difference would be in the Skype subscription as it is necessary to have unlimited calls between the States and the place of residence.

For other global citizens that want to make and receive calls between their homeland and place of residence, the Google Voice portion is not currently an option. I suggest using Skype to purchase a number local to your homeland and forwarding calls to your place of residence. That will address the issue of incoming calls, but doesn’t help in making free outgoing calls.

Hmm. I like WordPress a lot, but after tonight, I think I need to clarify that position a bit. What you get on WordPress.com is not the same as what you get if you download and install WordPress on your own hosting service. Not even close.

The free service allows for very minimal customization beyond installing themes and editing whatever settings that come with those themes. For extra cost, you can get the ability to go without advertising, or pay a different fee to be able to edit the CSS. There are no plugins or theme editing/extending options.

I don’t mean to bash on a great free service, but rather offer a word of caution if you’re hoping to get the same great features from a WordPress.com account as you do from a WordPress installation on a third-party host.

I’ve always been interested in geospacial relationships. Last night, I was curious how my friends were distributed around the continent and world. Since I avoid allowing Facebook third-party applications to access my data wherever possible, I decided to build my own. I’m not sure if another application exists that provides similar functionality. I didn’t look.

Using Facebook’s Javascript SDK and OpenGraph API, I authenticate the user and request permission to access the user’s hometown and location as well as his/her friends’ hometown and locations. I then grab the list of friends and pull out the location names. Using Google’s Geocoding service, I ask for the latitude and longitude for each location and then place a pin on the map.

Update 2/8/2011

You can now toggle between current locations and hometowns. There’s now also information about who lives/lived on each point. I now make you wait until all the data is loaded before being able to mess with the map. This is to enable me to properly set up the toggle. Sorry.

Does anyone have particularly interesting trends you’d like to share? Here are mine:

What’s the best way to bring the primary, critical functionality of one’s website to the mobile world?

This is the question I’ve been dealing with lately for my employer. I feel that this is a particularly difficult time to make objective choices regarding mobile functionality. There are so many buzzwords and companies selling their fail-safe solutions. In addition, everyone wants an ‘app’, but, it seems, mostly just for the sake of having one. While apps have their place, I believe that often the best way to bring functionality to mobile devices is through a well designed mobile website. This is definitely the case for the Kennedy Center, which primarily wants to allow patrons to purchase tickets via their mobile phones*.

One of the many reasons a mobile site is more advantageous than an app is that it requires less active pursuit from a user. By that I mean users are not required to search the app store and then wait for the app to install in order to use it. Instead, users find your mobile site via search engine or entering the URL into their browser, which requires far less time and commitment and therefore more conversions.

Additionally, there seems to be a movement towards standards for mobile browsers, while apps themselves require different tools for each mobile phone operating system. Blackberry has recently joined both the iPhone and Android phones in using Webkit browsers. The Windows Phone is the last major hold out for utilizing a standing engine for the mobile web browser.

One of these days I’ll get into the details of creating a mobile site…

*There is also a strong desire to bring a thousand other pieces of functionality to the mobile version of the site. There’ a delicate balance between keeping the site simple and usable for the mobile environment and providing all the functionality users might be looking for.

This evening, I was hoping to write a real, hand-written message to some friends living in Scotland. While digging through Annie’s stockpile of greeting cards, I found a set of particularly interesting cards. They contained two images vertically stacked and when you “read the pictures” the card’s meaning will become apparent. These types of puzzles are one of my favorites, but this particular set challenged more than most. On the back of each card is a message that says “just read the pictures and their meanings will appear beore you very eyes. If you get stuck deciphering you card’s message, please visit www.dinnickandhowells.com“.

I was in a hurry. I really wanted to use one of these cool cards but wanted one that somewhat fit the occasion. I decoded most pretty quickly. They said things like “sweetheart”, “happy holidays”, “ho, ho, ho”, and “farewell”. Then there were a few that were taking a bit too long for my rush, so I took Dinnick & Howells’ advice and went to their website. Unfortunately, their website no longer has any reference to the Juxtapose Cards. So I asked Google.

Google had a few blogentries and a book that contained references to D&H’s Juxtapose Cards. Some contained images and meanings for a few of the cards… but they were all the easy ones. If Google doesn’t have the answer, who does? I asked archive.org.

Archive.org is home to the “wayback machine“, which allows you to visit virtually any website on any date after 1996 up until a few months ago (though it looks like they’ve stopped archiving as of mid-2009). All I needed to do was visit dinnickandhowells.com in 2005 when the cards were copyrighted.

More bad news. In 2005, like most designers’ websites, D&H’s site was in Flash. Archive.org doesn’t seem to archive the actual Flash content, just the HTML and images. So, there’s no findable record of what their site looked like in 2005. Back to the drawing board.

I decided at this point, with all this time already invested and the thought of actually writing the card fading, that I should just solve the puzzles. So I stared. In a matter of minutes I had all the solutions except one. This one with the bee.

Why was this so hard? It’s a bee. And a some sort of ball with nubs tied to a chain. It clearly says something that starts with “Be”. Be ballsy? Be bold? Be a nubby ball with a chain tied to it? Clearly I’m missing something obvious. Now what? Facebook.

I posted this picture to facebook and within a matter of minutes a friend delivered the answer (and was nice enough to not make fun).

For every problem, there’s one or more optimal way to arrive at a solution and I clearly missed the mark. I spent over an hour scouring the Internet when 5 minutes of thinking coupled with asking my friends was all I needed.

While programming, I’ve had similar difficulties in choosing the right path to a solution. I’ve worked on problems for hours only to discover that the solution was a single Google search away. I’ve also searched the Internet for hours in vain, then focused my own energy to solve a problem in a fraction of the time.

In this age when so much (and sometimes too much) information is available, how do we know where it’s best to focus our problem solving efforts? How do we know when to ask for help? Or who to ask for help? Or, in the case of search engines, how to ask for help?