Facebook Timeline and the Open Graph API

16 Jan

[This was an unfinished draft from September 2011. I don't know why I didn't finish and publish it. I've publishing an unedited version now because, why not?]

Early last week, I was laying in bed imagining how I wanted a solar-powered wireless access point and web server built into my tombstone someday. I was imagining hosting a version of the data I get from Facebook when I download all my data from them. I wanted a way to share a look into my life with the people who come after me. This excursion through my imagination faded as I fell to sleep.

I’ve been on Facebook for almost five years, since October 2006, and when ever since I joined I have used the little “Adam is …” box to post status updates multiple times a day. I didn’t join Twitter for another year and a half, but since then I’ve tweeted almost 12,000 times. Around 3500 tweets, I started using BackupMyTweets.com so I could maintain access to more than just my most recent 3200 tweets that Twitter lets us access.

I exported those tweets to CSV, imported them to a MySQL database, and wrote a simple PHP browser so I could easily jump to any date from the past three and a half years and read what was on my mind. I can go back and find my first day at ISU, my first date with my first serious girlfriend (and a year later, a tweet about the breakup). Like an automatic journal updating about ten times per day, Twitter has archived the last three and a half years of my life.

The problem was, my browser was ugly. It was a quick hack — I planned to add features like starring important tweets and adding a way for me to add annotations to the tweets giving a bit more background in case 140 characters failed to provide sufficient context. I never got around to adding these features.

On Thursday, all my dreams came true.

Facebook Timeline

On Thusday, I watched the F8 keynote when Mark Zuckerberg came out and gave the overview of Facebook Timeline. This total revamp of the Facebook profiles makes it easy to browse all the way through my history through a beautiful interface that calls out important events, going all the way back to the day I was born. Since I didn’t join Facebook until October 2006, the real data didn’t start until then, but Facebook makes it easy to add events to the timeline. I scrolled through this presentation of my past, seeing events such as when I started at a new job, my graduations, and siblings’ births.

Facebook didn’t just throw up 15000+ data points on my screen: they curated the data, presenting information they thought was important. As I scrolled through, becoming friends with some people was marked as important, usually because my relationship with that person was more than a casual friendship. Statuses that generated a lot of discussion popped up in my timeline, often related to important things.

Photos I took popped up as I browsed my history. I saw some numbers recently that estimated that 20% of all photos taken this year will end up on Facebook. Almost every photo I take ends up there; as of May 14th, I have 2,375 photos and 35 videos — and that was before I got my DSLR. My history is very visual.

I wanted a way for someone to be able to view the story of my life and Facebook Timeline solved that.

(Dear Facebook: please give us a way to buy a printed archival version of our timeline, preferably in full-color annual editions at $10-20.)

Open Graph API

The Open Graph API, the added “frictionless sharing” features didn’t agree with as many people as the Timeline did. Some called thees new features an invasion of privacy or “really scary and virus-like.” People called it the final straw and started deleting their Facebook accounts.

The Open Graph API allows for apps to, once given permission, begin publishing actions you perform within the app without requiring individual approval for each post. Some examples were listing to music on Spotify or Rdio, watching a movie on Hulu or Netflix, or reading a news article. If I listen to a song, it gets shared instantly in the new Facebook Ticker and people can join in listening to that song with me. If I’m watching a show on Hulu, my friends can watch with me. As I read news I’m interested in, those articles are posted for others to see and browse.

The big objection here is some people don’t want everything shared. My response: fair enough, but I’m not some people.

When I check-in on Foursquare, it posts to Twitter. When I like a YouTube video, it posts to Twitter. In my perfect world, there are a thousand other actions that I want to be shared automatically and without any action by me. I currently post a few to Twitter because it’s the only real option available for consolidating my online activity in one place.

[Abrupt end, consequence of being an unfinished draft.]

My 1st Tech Job Offer

31 Oct

I got this e-mail out of the blue on April 6, 2006.

Hi Adam,

Saw on your xanga you enjoyed doing PHP programming. My name is Jeremiah Terhark and I work full time doing web dev/php programming. I am currently finishing up college down in springfield, MO, but am moving up to and going to be working out of Urbandale here in May (looks about 45 mins from boone?) and am looking for someone good at PHP/MySQL work to potentially hire on at some point this summer. Most of the work involves content management and building custom shopping carts. You can check out my business site at webspecdesign.com for some examples of work. The pay would be decent for the area depending on the skill level. If you’re still working on learning the language or probably not quite able to do work in this area, I would be interested at some point in the future should your skill level develop. (If you had any friends in central Iowa that were skilled in this and wanted to refer them that would be great also!)

If you are interested in this I would like to get a few samples of your work. I can also send over a sample project quote with the hour budget included to see how long a particular project might take you.

Look forward to your response, thanks!
Jeremiah Terhark

I built a simple demo of a CD store website (I still have the code, eventually on GitHub) and became Jeremiah’s first “real” employee (he had a contractor out of state, but that doesn’t count). The rest is history. I left in February 2009 after working remotely wasn’t working out too well as I split my attention between school and work. Thanks for the amazing opportunity, Jeremiah!

Summer-y: 12 Weeks in Test

13 Aug

Disclaimer: I work at Microsoft, but my opinions are my own. I do not speak on behalf of the company.

I should probably write this before I find out if I’m coming back next summer. Plus I won’t have time next weekend or for a while thereafter as school immediately gears up.

I arrived in Seattle on May 27th after driving 7260 miles across the country. I came to Seattle to intern for Microsoft as an SDET intern in Visual Studio and, before I got here, all I knew was that my team did something with JavaScript. I showed up for work on the day after Memorial day. The first day was orientation, the second day I was given my first task: close bug #47 of Test262, a test that verifies a browser’s implementation of the JavaScript specification. I don’t remember offhand if closing bug #88 was assigned, but closing it was a natural part of the changes I was making. The changes are summarized here if you’re interesting in reading the message that was pushed to the mailing list with my commits.

The rest of the internship took a different turn. My team works on Chakra, the JavaScript engine that powers Internet Explorer 9 and newer, and they’re very passionate about making Chakra the best JS engine out there. However, I didn’t work Chakra. I assume space and resource issues placed me on that team, but I worked on testing another project across the hall. Considering my background is in web application development, my skills and creativity were quite stretched as I worked at a much lower level this summer.

Speaking about stretching my skills and creativity, let me diverge for a second to talk about testing at Microsoft. If you apply for an internship, you rank three roles by your desire to work in them: Software Development Engineer (SDE), Software Development Engineer in Test (SDET), and Project Manager (PM). If you’re like me, or like any student who has heard horror stories of how boring testing is, you’ll rank SDET 3rd and your personal preference will determine ranking SDE and PM 1 or 2. I’ll say this from my first-hand experience: testing at Microsoft isn’t boring. You’re not a “2nd class citizen” because you’re a tester. SDE, SDET, and PM are all equals. PMs organize the projects and coordinate and plan work, SDEs implement the specification for the project, and SDETs find creative ways to test the project to verify it’s correctness to the spec.

Working as an SDET this summer required me to be creative while giving me tons of freedom in how I went about tackling my assignment. I don’t think I would have had that kind of freedom in another role or needed to be as creative with my task.

I think I’ll stop for tonight with that aside. Look for another Summer-y post about 12 weeks as an intern coming sometime this week.

Olympic Complaints

30 Jul

Dear NBC, you’re doing the Olympics wrong.

If you’ve followed any of the discussion online this weekend, you can probably ignore this post since I’ll just be reiterating much of what has already been said and probably missing great points that others have made.

NBC’s coverage of the Olympics has failed twice. (Three, if you count Ryan Seacrest.)

Streaming Online. I’m lucky this summer to live in a place with cable, so I can find Olympic coverage on several channels, I think. Sadly, somebody else set up the cable and pays the bill, so I can’t sign up for NBC’s LIVEEXTRA coverage because they need subscriber information that I don’t have. Really? Isn’t my IP address enough to identify me as a Comcast cable subscriber?

I’m especially annoyed because I watch a lot of sports online: I use ESPN3.com all the time to find coverage of the ISU Cyclones teams competing in football and basketball and this past spring, I paid $4 to stream all the NCAA Mens’ Basketball Tournament games online. Why can’t I pay to stream the Olympics?

Tape Delay. I’m on the west coast this summer: Pacific time. Two hours behind Iowa, 8 hours behind London. I spend my life on social media and news sites, places where time is global. If it happened somewhere, it isn’t fresh 8 hours later, it’s 1/3rd of the way to being yesterday’s news. Results from events that I’m excited about can be spoiled 8 hours early and when talking to friends back in Iowa during primetime, I have to remember that I’m watching something they saw two hours ago.

I understand the need to reach the masses who care little for realtime results or delayed recordings. I get that. Just give me a way to watch what I want, when I want. There are masses that want that too.

My final complaint would be to have the commentators be a little less noisy. We’re in the world of two screens. Either display info in a ticker or run in on a second screen. Better yet, display both the video feed and text facts side by side in my browser. That would deserve a gold medal.

But for now, sorry NBC, you don’t even make the podium in my book.

Ride Report: Saint Helens and Rainier

22 Jul

Date: Saturday and Sunday, July 14-15, 2012
Distance: 500 miles
Route: Day 1, Day 2

I’d wanted to ride down to Mount Saint Helens and Rainier, so when Microsoft scheduled an intern hike on Rainier, I figured the timing was perfect, so I suggested the ride to Garrett (another intern) and he did the work of planning a route, finding more riders, and leading the ride over the weekend. This trip became my 3rd multi-day trip, coming in quite short of my previous trips, but it also was my first extended trip with a passenger.

I’d met my passenger, Barbara, two weeks before and she’d mentioned that she really wanted a motorcycle but had never ridden one. I took her for a fun ride through the countryside east of Redmond the following weekend and she really enjoyed it. When this trip came together, I invited her along. The additional challenge was raised since we would be camping overnight, we needed gear for two people. Thankfully, everything fit on my bike, which is encouraging for any future long distance 2-person rides.

We left on Saturday morning with five motorcycles and had a pretty uneventful ride to the visitors’ center on the west side of Mount Saint Helens. We stopped for lunch at a small burger shack somewhere remote that was actually surprisingly good.

We arrived at Mount Saint Helens midway through the afternoon and got some great pictures. It’s incredible how much of the mountain is just missing. Two of the five motorcycles left here and headed back. The remaining three of us headed around the south side of the mountain and north along the east side towards Mount Rainier. I forget exactly where we made camp, but we got the last campsite available. The previous occupants didn’t want to pay for a second night, so they split when they realized the campground host wasn’t going to let them freeload.

Making camp was pretty hilarious. It took us forever to get a fire going strong  and Garrett’s tent with it’s built-in inflatable poles seemed to be more trouble than it was worth. It was a good night though. We got up around 8 and were on the road around 9, I think. We grabbed breakfast at a gas station and the 3rd bike split, leaving just me, Garrett, and Barbara, all Microsoft interns. We headed up to Paradise Visitors’ Center on Rainier to meet up with the interns coming from Seattle for the hike.

The hike was quite challenging for someone as out of shape as I am: up to Panorama Point was four miles, round trip, with a 1700 foot elevation gain. The trail was about 3/4ths covered in snow, making for a slippery climb up. At the top of our hike, it was probably about 45 degrees with a strong, chilly, cloudy wind.

The ride back was uneventful as well. We got rained on for about 5-10 minutes, just enough to make us stop and get out the rain gear and generally be annoying. Supper was at Chipotle, a delicious end to a fantastic weekend.

View my photos on Facebook.

Six Weeks in Seattle

9 Jul

Friday marked the end of my sixth week interning at Microsoft in Seattle. Sadly, I can’t talk about what I’m working on, so instead I’ll talk about other stuff. (Disclaimer: My opinions are not my employers, they are my own.)

The Location
If I told you that I live in Seattle, I apologize for lying. I actually live in Kirkland and work in Redmond, both parts of the greater Seattle metropolitan area and in the area commonly known as Eastside.  It’s called Eastside because it’s, well, on the east side of Lake Washington, a 15 mile tall lake that splits the metro in half. My commute is 20-30 minutes, depending on traffic, taking 405 and 520. I live and work right off the highways and thankfully motorcycles are allowed in the carpool lanes, making it a very painless commute.

The Weather
In a word, Seattle’s weather is perfect. The first month was really wet and very cool. Temperatures topped out in the 60’s and it would rain almost every day. Unlike Iowa rain though, this was mostly light rain that would come and go frequently. Also crazy is that in the whole six weeks, I only heard one rumble of thunder, once. The clouds cleared away this past week, giving us a beautiful week of sun with highs in the mid 70’s.

The Interns
I was chatting with an intern from Stanford a few weeks ago and he made a comment that really floored me: “I know other students from Stanford who interviewed here and didn’t get offers.” It makes sense but really caught me off guard. The intern team constructed by Microsoft really do represent the some of the best collegiate tech talent in the world.

The Experiences
All work and no play makes Adam a dull boy. And I just won’t settle for that. I’ve kept crazy busy outside of work, taking advantage of the many opportunities around Seattle. I’ve ridden the motorcycle into the Cascades. I went snowboarding for the first time (Crystal Mountain) and fell a ton. There were two awesome “morale events” at work: my team went bowling and my whole division went out for a cruise on Puget Sound. I’ve been to a roller derby and a professional baseball game. I saw the Seattle Symphony twice: once playing the soundtrack to The Matrix accompanying the movie and conducted by the composer and once when they played suites from Disney films. And today I spent two hours rafting the fantastic whitewater rapids of the Skykomish River.

The Work
I was assigned to a project that took my background and applied it in a new way. I can’t say much other than I’m super excited about the project. The work is great, the problems are challenging, and the contribution I’m making is meaningful.

All in all, these first six weeks at Microsoft have been fantastic and my positive performance review indicates that the feeling so far is mutual. These next six weeks will fly by and before I know it, I’ll be saying goodbye to Seattle. Stay tuned to see if that goodbye will be only a temporary separation!

Sell Privacy, Buy Happiness

2 Apr

I just finished reading a paper a friend wrote comparing two writer’s views of Mark Zuckerberg and the direction he is taking Facebook and our privacy, so I figured this was a good time to share my thoughts on the growing lack of privacy online.

If my nearly 14,000 public tweets haven’t given away my opinion already, let me share it: I don’t mind.

Why? Nobody cares WHO I am, they care about WHAT describes me. I’m a number on a spreadsheet, just a line in a database. They know my age, where I live, what I buy, where I go, what I like to watch, eat, listen to, and play. When companies know this, they can process these facts with an algorithm and make suggestions.

Coming from a Christian, this may sound odd, but I want buy happiness. We live in a consumer culture and we all want to buy it. It comes in many different forms (Android vs. iPhone, Windows vs. Mac, beef vs. chicken vs. pork, Beiber vs. Adele) and answers the question, “Out of all the options available, what do I want most?” Since I can only draw on my experiences and knowledge, my answer to that question may be incomplete. If something exists that offers more happiness to me than the options I am considering, I want to know what that option is. I have a limited amount of time and money and therefore I want to maximize the happiness that I’m buying.

Before computers, you gave up privacy to friends: “Hey Joe, I like X, but I want to try something different tonight. Thoughts?” or “I’m new in town and like Mexican. What’s a good place for supper?” Why would you trust a friend with your preferences but not a company? What makes that the line that people won’t cross? Because companies are trying to make a profit? Companies want nothing more than to maximize the happiness of their customers, because a happy customer comes back. By sharing my preferences with companies, I’m enabling them to help make me happier, just as my friends did before.

A Friendlier “Words With Friends”

28 Feb

So, I’m late to the game but I just started playing Words With Friends yesterday. The first thing that I noticed was how little social activity there was in this game that “With Friends” as part of the title. Here are eight ways I’d improve the game:

  1. Create profiles for my friends that I can view to see their activity: recent games, achievements, high scores.
  2. Let people create games with multiple people. This seems like one of the most obvious ones. Without this, you could go ahead and call it “Words With Friend”.
  3. Let people mark themselves as “Looking To Play”. This status would last a few hours and make it easier to find friends who currently are interested in playing.
  4. Color code the tiles so you can see who played which tiles.
  5. Make a list of ten or so “Words of the Week” to teach new vocabulary (with definitions). With the list, show friends who have successfully played those words in games and award achievements for playing all of them.
  6. Add leaderboards with statistics like average points per word, average points per tile, highest scoring [1-7] tiles, and more.
  7. Some people cheat. You can’t remove that but you could build in a dictionary to let people look up questionable words and provide an accessible list of the two letter words. Take advantage and make this a learning opportunity.
  8. Build a newsfeed into the front page of the app to list friends’ recent plays. Engage me in their games.

Can you think of any more?

Color fading with CSS3

12 Sep

I’m using an anchor tag as a button in one of my apps when, on mouseover, the color changes. This change is rather abrupt, but by simply adding a transition CSS tag, it becomes much smoother. Here’s a demo:

http://jsfiddle.net/fg9TL/

Quote from Dan Harmon’s blog

1 Aug

“Moths circle porch lights because they think it’s the moon. They fly in a straight line by keeping the moon in a fixed position to one side of their vision, so, if they get close enough to a light bulb, their desire to fly straight results in a spiral that eventually fries them to death. I know, from a lifetime of observation, that I am capable of spirals and frying, unless I keep something big and glowing to the side of my vision.”
Dan Harmon. Source

I love this sentiment. Human nature is the same way. If the wrong thing catches our attention and we depend on that as our guide, we’re bound to crash and burn. Make sure you’re following the right thing.