Geek Stuff

Upping my Game by… Running Games

Posted in Geek Stuff on July 9th, 2011 by admin – Be the first to comment

My job includes a lot of tasks.  Listing them here would probably put most of my readers to sleep.  Updating documentation, triaging bugs, writing example code – I find these things fun and engaging, but I’ve recently started doing more of the “Evangelist” part of the Developer Advocate role, and it turns out that this is a whole new type of fun to have, requiring an entirely different skill set.

Over the last couple of months, I’ve given talks to groups focused on iOS development, the Semantic Web, data visualization – and a couple of startup accelerators.  I’ve gotten gradually better each time and have come to really enjoy this part of my job.  I know the topic and I’m good at doing presentations.  But what does “good at presentations” mean, really?

Presenting to an audience of tech-interested folks (whatever their focus) requires that I know my technical topic well enough to explain it to anyone.  That’s just the beginning, though.  Telling stories helps them understand why I am there to talk to them, why I find the topic interesting.  Giving examples of things they can do helps them to stay focused and head away with something gained – they understand the technical topic I’m presenting, and they can go off and give it a try themselves.  I need to entertain and amuse them to keep their interest, create context they can relate to, and send them off with a sense that they’ve accomplished something themselves (learned how to do something with our platform).

Recently, I started running role playing games for my family and friends.  I specifically chose the Pathfinder Society modules because I like them and they’re, to me, understandable and engaging.  And after running 5 games (the same number of talks I’ve given) I find that there’s a really amazing amount of overlap in the skills I’m using.  I’m trying to provide a fun and entertaining experience for the table of players.  I’m helping them to get through a set of challenges so they leave with a sense of accomplishment.  I’m enabling an experience which they will take away with them as something they contributed to.

Running these games has actually helped with my talks. Sometimes a role player will do something completely unexpected, and you have to engage your verbal aikido to let it pass by without distracting from the story.  Similarly, sometimes an audience member will want to engage you in a discussion of how your platform doesn’t meet a very specific use case, and you want to keep the attention of everyone else.  The skills you need here are the same.  Warmly addressing the person’s concern while deflecting it from the central topic looks very similar in any context.

Both role-playing games and technical talks will have audience members who want to make themselves look good (without concern for, or even with intent for, distraction from the main topic).  Your goal is to make sure that as many audience members as possible leave the experience having gained something.  When 10% of your audience comes up to engage you in discussion afterwards, or when your players spend 2 hours discussing a particular encounter in your 4 hour game, you’ve done a good job.  Sometimes you’ll get someone who’s not happy with being thwarted from their attempts to hijack the experience, but the needs of the many outweigh the needs of the attention seeker, and your job in either case is to make sure that the majority of the attendees get what they came for.

Anticipating the unexpected is very hard.  Reacting to it gracefully, and redirecting the energy back to the main path, is also hard – but it’s a critical skill for any Developer Advocate.  Or Gamemaster.

Tagged here as Games and Geek Stuff.

In G+ this is tough.  Most of my gaming friends aren’t on G+ yet.  So I’ll post to my straggly Gamers circle as well as the APIs circle (and Friends.  My friends never get away from anything).

Targeted Sharing via Google+ Circles

Posted in API, Geek Stuff, Google+ on July 8th, 2011 by admin – 3 Comments

Like many of you, I have a Twitter account, a LinkedIn account, a Facebook account, and I have my tweets go to LinkedIn and Facebook so that I can lazily update everyone when I have something to say.  The resulting stream ends up being pretty spammy and unfocused, and so I post much less frequently than I might.  My “regular” friends feel like I’m super spammy, and my “geeky” friends complain they never hear from me.  This is exactly the kind of problem that G+ circles should be able to solve.

For this reason, and also because I love mashing stuff up, I can’t wait until G+ releases their APIs.  I want to build (or use) integrations with other systems so I don’t spend all my life bouncing from social network to social network – or pretending to engage in them by tossing messages over from other systems.

I’d love to have a LinkedIn circle, a Twitter circle, and a Facebook circle, so when I share something that I intend for my LinkedIn audience I can just add them and it’ll appear in my LinkedIn stream.   Now that I have G+ I don’t spend much time at all on Facebook (although I do on LinkedIn) and I feel a little guilty .  G+ could add this integration themselves, or third party developers (like me) could create applications that do the shuttling from place to place.  I’d love to have one place to keep my stream – and decide what other streams should get any given update.  This would make me much more likely to participate actively, because I could protect my less-geeky friends from seeing updates about semantic web visualizations.  And honestly, it’ll be a long time before everyone I know is on G+ (if ever) so I do want to make sure my Farmville-addicted friends see my updates too.

I’d also love to see incoming integration.  For instance, Runkeeper integration would totally rock.  It already takes input from my FitBit, so everything’s in RunKeeper, so I could send those updates to my Fitness circle of people-who-actually-care-about-my-training.  My Runkeeper updates go to Facebook, but again, it’s kind of spammy.  I’m generally more ok with dumping everything to Facebook because the stream is so noisy to begin with, but I’d really rather target those messages to folks who have an interest in hearing about it.

So, G+, can we have some APIs soon?

Sharing this on G+ with Friends, APIs

Tagging here as Geek Stuff, Google +, API

The 30 Day Blog Fitness Challenge

Posted in Geek Stuff, Google+ on July 7th, 2011 by admin – 1 Comment

Inspired by my coworkers, I’m going to participate in the 30 Day Blog Fitness Challenge.  In contemplating it, though, I want to add a little bit of extra interest for myself, and remind myself of the value of taxonomy and categorization.  I used to post about all sorts of things, and I find that I stick to work-related things mostly.  Why? I don’t know.  I mean, there are categories. I can use them.  People can find what they need!  But recently I’ve become super lazy and avoided any sort of tagging, just tossing things willy nilly onto the blog, and focusing mostly on work related topics.  Add to this the fact that I’ve just joined Google+ and I find myself categorizing my people into circles which I’m not exactly confident about.  Are they the right circles?  Do I need more (or less)?  Am I ever going to send messages to that group?

So not only am I going to post every day for 30 days (or more), I’m going to put meaningful categories on the blog posts.  And then I’m going to post to (and list) the Google+ Circles I’m sharing that post with.  This should actually help me get better at creating and maintaining meaningful circles for the things I want to talk about.  Fitness, entertainment, work, open source, philosophy… there is space for all of this and more in my thoughts and in my blog, but if I am talking to a specific set of people I’ve identified in Google+ as interested in the topic it may help focus the message and make it more compelling and engaging.  Otherwise I seem to soften it a bit for the general masses.

So prepare for 30 days of posts about… whatever.  Adventure racing.  Google Plus itself.  The Semantic Web.  Food.  I’ll tell you what the names of the circles I’m sharing them with are.  And they’ll be internally categorized reasonably on the blog.

Anyone else want to join me on this?  I think this will be an excellent test of those circles we’ve been making.  Are there topics that are appropriate for one or two of your circles? If not, maybe you need to adjust them?  What is the purpose of circles unless they help you target specific conversations to the right people?

This post be sent as public on G+.  It’s not a copout.  Seriously :-)

Creating Netflix Widgets from Freebase Queries

Posted in Geek Stuff on July 16th, 2010 by admin – Be the first to comment

Freebase has just finished creating a process to import Netflix film data on a daily basis. Freebase now includes in their movie metadata the key for the Netflix API. For Netflix API developers, this makes it possible to leverage Freebase’s powerful query engine and create amazing application interfaces. But even for those people who have never used the Netflix API, this functionality allows developers to leverage Netflix’ widgets to create interfaces within their existing applications, without the hassle of OAuth. I’ll walk through the process of creating a Netflix widget based on a freebase query here.

Getting the Movie

Mel Gibson is a popular guy, who’s done a bunch of movies. But what has he done for us lately? The following freebase query asks what movies he’s done since January 1, 2009. I’ll go ahead and ask for the Netflix “Tiny URL” as that’s what we’ll need to create the Netflix widget.

[{
  "name" : "Mel Gibson",
  "film": [{
    "film":  [{"initial_release_date>":"2009-01-01", "name":null,
               "key":[{"namespace":"/authority/netflix/tiny", "value":null}]}],
    "id":    null
  }],
  "type":          "/film/actor"
}]​

Turns out, he’s been taking it easy recently. There’s just a couple of movies released on DVD since the beginning of last year.

{
  "code":          "/api/status/ok",
  "result": [{
    "film": [
      {
        "film": [{
          "key": [{
            "namespace": "/authority/netflix/tiny",
            "value":     "BVmIj"
          }],
          "name": "Edge of Darkness"
        }],
        "id": "/m/04lr63t"
      },
      {
        "film": [{
          "key": [{
            "namespace": "/authority/netflix/tiny",
            "value":     "BVssN"
          }],
          "name": "The Beaver"
        }],
        "id": "/m/09vnjl6"
      }
    ],
    "name": "Mel Gibson",
    "type": "/film/actor"
  }],
  "status":        "200 OK",
  "transaction_id": "cache;cache01.p01.sjc1:8101;2010-07-16T21:13:40Z;0034"
}

Creating the Widget

Now that we have the tiny URL, we can create a widget. The Netflix widget builder can be used to create a template for the widget you want to create. When you’re done configuring your widget, you’ll end up with some Javascript code that looks like this:

<script src=”http://jsapi.netflix.com/us/api/w/s/sp100.js” settings=”id=http://movi.es/BVdT5″></script>

Once you’ve got that, it’s a simple task to create new widgets. The Tiny URL you grabbed above is used to update the ID, so in the case of “Edge of Darkness” you’d put “BVmIj” in place of BVdT5 and end up with this:

<script src=”http://jsapi.netflix.com/us/api/w/s/sp100.js” settings=”id=http://movi.es/BVmIj”></script>

Which will render on your page like so:

Once you’ve gotten this all working to your satisfaction, you can even set up the widgets to include your developer key and earn money from Netflix via the developer Affilliate Program.

Twitter badge with location

Posted in Geek Stuff on November 24th, 2008 by synedra – Be the first to comment

In my job as an elf for Santa, I frequently have to travel back to the North Pole to visit with my fellow elves, so it’s not always easy to tell where I might be.  Given that fact, and my desire to procrastinate a bit, I decided to make a handy badge for my blog that tells people where I am.  Most twitter clients allow you to throw some location information in your posts, so it’s relatively easy to make it relatively easy for someone to stalk you.

So, I started with this excellent post describing how to make a basic twitter (Javascript/HTML) badge.  That page has some handy information on how to set up a badge with no location, and if you don’t want location, you should probably follow his guide.  But if you want to add in some location information as well, then here’s the info you need.
First, you’ll need to create a local Javascript file to do your evil bidding.  I plopped mine in my mt-static directory (because I use Movable Type) but you can put it in any static spot on your server.  You can grab mine here.

Now that you’ve got that put on your server, you just need to put some code in your blog template (wherever your other badge stuff is) to get your fabulous information to show up.  The code for the HTML looks yucky in my post, but you can view source and grab the stuff marked as “TWITTER”.

The last piece is styling your box.  I have mine styled so that it matches the rest of my site, but you can make yours work however you like.
#twitter_div {
border-bottom-style: solid;
border-bottom-width: 1px;
margin-bottom: 10px;
font-family: Arial, Helvetica, sans-serif;
font-size: 0.9em;
padding-right: 5px;
padding-left: 5px;
text-decoration: none;
}
#twitter_location {
margin-left: 25px;
text-decoration: none;
margin-bottom: 10px;
}
#twitter_div ul li {
text-decoration: none;
border-bottom-style: solid;
border-bottom-width: 1px;
padding-bottom: 5px;
margin-bottom: 5px;
}
#twitter_div p {
text-align: right;
padding-right: 6px;
margin-bottom: 10px;
}

Getting something done

Posted in Geek Stuff on March 14th, 2008 by synedra – Be the first to comment

I’m sure I’m not the only one who gets periodically overwhelmed by the number of things I’m not doing right. I still shampoo my hair, my kids watch TV and play video games and despite my best efforts we still seem to end up with transfats and other evil plastic foods in my house. Every time I turn around, there’s something new to feel guilty about, and the packrat research monster inside of me insists that I need to dive deeply into every single topic to determine the truthfulness of the claim, which just increases my anxiety about my worth as a human being, while not actually giving me space in my head to contemplate anything of actual worth.
I have spent many an hour railing against the mean and nasty high bandwidth world, providing so much chaos and so few answers… but in a moment of clarity, I discovered that these gifts brought to me by the intertubes, clamoring for my attention, are not actually the main source of my anxiety. My anxiety comes from having too many things bouncing around in my brain like colored balls in a Busy Ball Popper. And I have found something that actually helps.
I read Getting Things Done a while back, and it kinda was ok, and seemed like a pretty good idea, but I wasn’t really sold. Then a few weeks ago I was pointed to OmniFocus, a GTD tracker for the Mac, and I discovered that if you wrap up a good set of ideas in a cute and sexy UI I will actually use it. And when I spend my time actually doing things instead of scrambling to remember which next thing I was supposed to be doing, things get done faster, and I am calmer. I sort of feel like I’m playing that game from ST:NG where they had the little brain game that gave you zaps of happiness whenever you make a goal. I check a box, it gets a line through it, and I feel a little swell of pride. It integrates pretty nicely with my iphone (courtesy of Toodledoo) and it allows you to see all your ‘errands’ or ‘phone things’ in a list separate from the project they’re associated with. Which is great when you’re trying to get all those lame phone calls out of the way at once.
I’m not sure if I’m really any closer to zen mastery, but I sure feel happier. Even though I’ve been battling the most rotten cold ever this week, I’ve gotten a lot done for home and work, and I don’t feel like the world is sitting on my shoulders, waiting to collapse. And now I can check off the item marked “Make blog post about OmniFocus.” Woo. That felt good. Maybe I should call and schedule that dentist appointment next.

Django is great^h^h^h^h^hfrustrating

Posted in Geek Stuff on February 27th, 2008 by synedra – Be the first to comment

Don’t get me wrong. I do like django. I’ve been working back and forth in Pylons and Django, trying to learn each of them well enough so that I can figure out which one will give the right answer when I know better what the powers that be want.
So, if you, like me, have a debian etch box upon which you want to install django, have it work with the tutorials in the book and on the site (thus needing python2.5), using mod_python so that you can work on a remote server, with postgres, do the following:

  • Use the Django from subversion. It lives in http://code.djangoproject.com/svn/django/trunk (don’t forget to uninstall python-django if you’ve already installed that.
  • It requires python2.5. The packaged version is fine. apt-get install python2.5
  • Get mod_perl as a package, because it will make all the connections correctly (but it will be linked to python2.4), and then
  • Install apache2-prefork-dev so that you have the right apxs2 to build mod_python against python2.5
  • Download mod_python from http://ftp.wayne.edu/apache/httpd/modpython/mod_python-3.3.1.tgz
  • Configure it (with –apxs=/usr/bin/apxs2)
  • Install it
  • Get psycopg from http://www.initd.org/pub/software/psycopg/PSYCOPG-2-0/psycopg2-2.0.5.1.tar.gz. Don’t get fancy and try the new one. It doesn’t work.
  • python setup.py install that sucker
  • And then restart everything and all should be lovely in the world

So that’s…

svn co http://code.djangoproject.com/svn/django/trunk django
ln -s `pwd`/django /usr/lib/python2.5/site-packages/
ln -s `pwd`/django/django/bin/django-admin.py /usr/local/bin
apt-get install python2.5 libapache2-mod-python apache2-prefork-dev
wget http://ftp.wayne.edu/apache/httpd/modpython/mod_python-3.3.1.tgz
tar xzf mod_python-3.3.1.tgz
cd mod_python-3.3.1
./configure --apxs=/usr/bin/apxs2
sudo make install
cd ..
wget http://www.initd.org/pub/software/psycopg/PSYCOPG-2-0/psycopg2-2.0.5.1.tar.gz
tar xzf psycopg2-2.0.5.1.tar.gz
cd psycopg2.2.0.5.1
sudo python setup.py install
sudo /etc/init.d/apache2 restart

I spent a good deal of today trying to find these answers. So, you’re welcome :-)

Working like Sheep

Posted in Geek Stuff on November 13th, 2007 by synedra – Be the first to comment

I have a friend who hearkens from the heartland of America, and is thus more schooled than I in the cosmic truths to be found on a farm. We were discussing the relative dimness of various farm animals, and he mentioned that sheep were pretty much the stupidest animals around. I asked why, and he said that a lamb, when confronted with a meadow full of tall grass, will eat through the grass, leaving a 1-lamb-wide path behind them. When the lamb is full, however, it is faced with a horrible situation. Walls of grass surround it on the front and the sides. After looking left and right in a panic, the lamb will start to bleat piteously, hoping for someone to rescue it from its plight, eventually sitting down to wait until it’s hungry again so that it can extend the path further. I’m not sure how true the story is, but it makes for a compelling mental image.
I was having lunch with my friend Eugene yesterday, and we started talking about my last post on making space, and about the sheep analogy, and I realized that in fact the two are very related. I frequently find myself in a position where I am trying to solve a difficult problem. The more I push, the more the answer eludes me, but I have this underlying fear that if I break away and come back to the problem with fresh eyes, I’ll lose the context I’ve worked so hard to achieve. The reality is that I’m just like the lamb. The answer I need will only be clear when I back up. The context I’ve built up is *broken*, which is why I’m not finding the answer.
I spent a lot of yesterday working like a lamb, pounding my head against a problem which turned out to be fairly simple to solve after I returned from lunch. Chastised by the universal forces, I meekly turned off the computer at 5 so that my brain cells could recharge before I tackle the next problem this morning.

Creative Space

Posted in Geek Stuff on November 3rd, 2007 by synedra – Be the first to comment

So I’ve now been at my new job for about 2 months, and there’s a major contrast between my last job and this job.
We’ll start with the negatives because there aren’t many. I’m a remote worker at a company that does most of its collaboration and communication in person, so I’ve had to work hard at staying in touch with the people at the office. It helps that I go down there at least once a month to touch base, and I’m getting to know the folks (and they me) so remote communication is more effective. Also, without anyone checking in with me every day it takes more discipline to buckle down on days when my motivator unit is broken. And I’m currently the only person on my ‘team’ which makes it a little hard to get traction. And I miss all my ex-coworkers.
Now, the positives. Unlike the company I came from, there is no drama here. Of course, it’s replaced by its own special type of politics, of a grown-up type I’m somewhat unaccustomed to. Fortunately I seem to be negotiating these new waters fairly well, and the end result of this environment is that my job is much, much less stressful. Being the only remote worker also means that I’m almost never interrupted for anything, and my velocity when I’m writing code or reading documentation is generally quite high. And working somewhere that brainstorming is a valued activity has given me the opportunity to discover that in fact I’m good at thinking up ideas, when I have some time to do so.
All in all, the positives far outweigh the negatives, and I feel like I’m learning, contributing, and working in a positive environment. It’s still hard to get out of the habit of feeling horribly guilty if I’m out of contact for a bit, but I’m slowly becoming more relaxed and just enjoying the work I’m doing. It seemed very odd to me, coming from a place of such urgency to a place that seems so much more laid back, but the folks at AMI have the space to think up cool stuff – without that space it’s so much harder to let the magic happen.
I know that small startups have less space to allow their employees to stop and think and explore, but I wonder if sometimes the need to rush creates more need to rush, and squelches the innovative ideas best suited to an agile, entreprenurial company. I was reminded of this several times when working at Socialtext, when I stopped rushing around for a few days and as a result found the solutions to the problems that had been pestering me for weeks.
Companies need to create space for their employees, especially when the employees aren’t good at doing so for themselves. People need to create space for themselves. All of us, all programmers, have found ourselves staring intently at the screen, the zone long past, trying to find the solution to a problem… and then flash on the solution as soon as we step away to feed ourselves and look at the sky. Make space for yourself, and try to help others around you find space for themselves as well.

Perl Makes Good Programmers

Posted in Geek Stuff on October 18th, 2007 by synedra – Be the first to comment

I bet you think that I’m kidding, right? Perl allows programmers to build extremely bad habits, doesn’t force discipline, encourages shortcuts that simply aren’t possible in other languages. But I’m actually serious.
I had a conversation with my new boss a few weeks ago that went something like this:
Boss: Do you know what data driven design is?
Me: No.
Boss: (google it if you don’t know :-)
Me: Oh. That’s how I code.
Boss: Good
So it occurred to me to wonder why it was that I code that way, what with my lack of formal education and all. I went to the Pittsburgh Perl Workshop last weekend (my OpenID presentation went great, thanks for asking – I used sock puppets to describe the user/website/server interaction) and spent a great deal of time thinking about how perl people write code and why, and I realized that I code this way (with reusable, modular, configurable code) *because* I work in Perl.
The easiest way to get started doing something with Perl is to pull down some helper code from CPAN. All of that code (ok, not all of it, but most of it… well, ok, the parts I actually use) was written in a modular way, designed to be configured to work for multiple applications. The more time someone spends writing Perl code, the more likely they are to approach each new problem in a modular way (I need something to do A and B, and then C to tie them together) – this makes it easier to use CPAN to reduce your workload, but also means that when you write the code you’re likely to avoid hard coding anything in the program itself.
When I started working in Flex, I was a little frustrated that it was so difficult to find examples where developers had pulled the configuration information out into a separate file, but the truth is that’s not terribly surprising. First, there simply aren’t nearly as many examples of Flex code out there, so it’s harder to find any specific thing. Second, without the external community pushing developers to think beyond their current application, it’s easy to fall into the habit of taking the shortest path to “done.” Working with Perl (and some seriously critical programmers) for (ack!) thirteen years has given me an allergy to hard coding *anything* in my programs. Which makes it harder for me to spit out something quick and dirty, but makes the things I *do* make much more powerful.