Lonely Gamer Protocol

Lonely Gamer Protocol, Projects 3 Comments »

There are a handful of websites that have sprung up to help gamers find each other. It’s a great idea, and was one of our original motivations for creating Obsidian Portal. At the time, I didn’t know about the other player matching sites, and I was too scared to ask, thinking someone would steal my awesome idea. ;)

Unfortunately, most of these sites just don’t have the critical mass necessary to make them useful. I have signed up on a few, and I have never received any sort of response. Seeing as how I live in Atlanta, that’s a bad sign. If I can’t get matched up with players in a big city, there’s no way people in rural areas are getting any use out of it.

What if there were a way to combine and aggregate all the data from all the sites into a single index of gamers? In this day and age of web services and mashups, there is no reason that this should be impossible. So, for your consideration, I am proposing a communications protocol that will allow all the player matching sites to interoperate for the purpose of providing more results to their users. I am calling this the Lonely Gamer Protocol, or LGP.

Update 2007-11-06 I’m looking at using Google’s OpenSocial as a possible alternative to Atom. OpenSocial’s people element has almost all the necessary fields, and the gd:ExtendedProperty might be sufficient for the rest.

Motivations

Of course, the main motivation is to provide a better experience to our users. By sharing our data with each other, we will beef up the number of results returned to our users, thereby greatly increasing their chances of getting a hit.

However, at least in my case, there is a secondary, more commercial motivation. With Gleemax breaking onto the scene, Wizards of the Coast has become the 800 pound gorilla in the room that none of us small timers can compete with in terms of marketing or exposure. Unfortunately for the users, Gleemax just isn’t that great, at least not right now. They have a lot of promises, but very little in the way of actual features.

If we all try to compete directly with Gleemax, we will probably fail. They have an established userbase and a war chest they can dip into for advertising and paying their employees. However, if we band together and attempt to make interoperable services, we’ve got a shot. Pretty much any of the current gamer-finder sites is already 1000x better than Gleemax, and working together will only strengthen that lead.

Of course, Gleemax is free to support LGP as well, and this would be a great boon to the entire community. However, given its current state and their speed of resolving issues and feature requests, I don’t see this happening for a looong time. ;)

Goals

  • Free and open
  • Game and system neutral
  • Low barrier to adoption / easy to implement
  • Simple and lightweight
  • Language, culture, and country neutral

Please comment below if there are goals I should add or remove. Please note, however, that projects that are able to condense their goals down to a short list do better than ones that throw in everything and the kitchen sink.

Technical Specifications

LGP consists of a communication protocol along with a simple REST API for retrieving the data from participating providers.

Fields and Schema

The actual data involved in such an exchange should be very simple. Shooting from the hip, here are the fields I could come up with:

  • Player name
  • Geographic location (lat/lng)
  • Games interested in playing
  • Looking for game and/or Looking for players
  • Link to a profile page (w/ contact info)
  • Last update / login

XML is the obvious choice for the data exchange. That’s a no-brainer. Further, in order to further lower the barrier of entry, I suggest that we use a preexisting XML protocol as a base layer. Most of the fields I’ve suggested could be easily stuffed into an RSS or Atom feed.

LGP Field Atom Field Comments
Name title This would be the username, nickname, or campaign name
Geographic Location georss:point We can use the GeoRSS standard for Atom feeds to encode the user’s location. It would be encoded as a simple point element.
Preferred Games category Cram all the games you want to play in as category elements. For bonus points, we can define a closed vocabulary for the more popular games. Of course, this would be in addition to an open, free-tagging scheme.
Looking for game ?? A flag to indicate that a player is looking for a game to join.
Looking for players ?? A flag to indicate that an existing group or campaign is looking for more players.
Link to profile link This would be a link to a profile page for the user. Following this link would be the primary way of finding contact info for the player. Note: This link would probably also be used for the id field required by an Atom feed.
Last update / login updated This field indicates the last time the user updated their profile or logged in or something similar. The main goal is to let the stale entries settle to the bottom while the active, searching players can be easily found.

Looking back on that list, there are a few fields that need to be fleshed out and some formats need to be agreed upon, but the core functionality easily fits. Using Atom as the base for this protocol provides a lot of great benefits. As I mentioned before, most languages will have an Atom parser, making feed consumption that much easier. In addition, many will have tools to help construct feeds. Finally, it will be possible for the data to be made available to individual users, if they wish, just by subscribing with an Atom feed syndication tool. It might strip out some of the additional fields that we add, but if you provide filtering at the upstream level (ie. “Subscribe to a feed of all the gamers within 50 miles”) then it shouldn’t matter.

Query API

I’ll be the first to admit that I’m not really sure what’s required here. There needs to be a way to harvest the data from the individual sources. Further, there will need to be a way to filter the results, both in order to save on bandwidth, but also to make the results useful.

The following parameters allow for filtering based on set size, preffered games, and the last time a player’s profile was updated.

Parameter Required Comments
limit N The maximum number of entries to return. Defaults to something reasonable, like 100.
start N The index of the first record to receive. Manipulating start and limit allows a client to iterate through a result set. Defaults to 0.
categories N A comma separated list of categories. This allows for filtering based on which games a client is interested in.
last_update N A date field (what format does Atom use?) indicating that you only want results that have been updated after the specified date.

Filtering on geographic location would probably also be incredibly useful, but it’s not nearly as trivial as the previous parameters listed. Some tools make geocoding and “within X miles of Y” type searching very easy. Still, this would raise the barrier of entry. Perhaps it could be an optional filtering scheme that individual sites could implement, but was not required in order to be compliant with the protocol.

Issues

Adoption

Probably the largest hurdle to LGP would be getting the individual sites to share their data. For the larger sites, their userbase is their most valuable asset. Making it freely available might not seem in their best interests. However, it’s obvious that from the users’ perspective, LGP makes a lot of sense. Once the user data becomes a commodity, the sites will be forced to differentiate themselves based on their other features. For Obsidian Portal, that should be easy.

Still, joining up and sharing your data should generate a lot of traffic back to your site, and therefore signups or purchases or whatever else you count as a conversion. This is because the primary way of contacting a user will be through their profile page, which most likely exists on the site that provided the data. You could even require that someone sign up for your site before they can contact anyone, although that might be sort of a jerky thing to do.

Privacy

Everyone implementing LGP as a provider would need to make this very clear to their userbase and give them the ability to opt-out. In fact, perhaps opt-in would be a better policy, forcing users to specifically elect to be include. Still, why would they sign up on a player matching site in the first place unless they wanted to be found? I imagine most users would jump at the chance to be included.

The main issue with privacy that I can see is related to the geographic data that is passed with the feed. Giving out your address on the Internet is generally considered a Bad Thing, and this is no different. To that end, here are a few approaches.

First, you could restrict the lat/lng to a city area only. Therefore, you pass nothing more specific than a user’s city. The obvious downside is that for a city like New York there would be thousands of identically located entries. If you tried to map them, it would end up a mess, with all stacked one on top of the other.

Second, it might be possible to include an intentional error into the geographical data. Instead of feeding out the user’s exact coordinates, the system could give a random point within X miles of the user’s actual location. This would effectively mask their exact location, but would probably be very complicated to implement. Further, users would jump around on a map every time it was refreshed. Not a great solution.

Finally, the solution I propose is to pass the onus of anonymity on to the users. When asking them for address info, make it clear that they are not to enter their exact, home address. Instead, ask for nearby landmarks or street intersections. The Google Maps geocoding API is good enough to translate such strings into lat/lng coordinates. This would allow the users to accurately place their location, while at the same time assuring their anonymity.

Duplicate Entries

I am already signed up on multiple sites, and I imagine there are others as well. So, if all the data were aggregated, I would appear multiple times.

For now, we’ll punt on this issue from the LGP perspective. Individual consumers are free to try whatever de-duping mechanism they think will work best, or just forget about it. I imagine that even very dumb de-duping (ie. throw away all hits with the same name within 1 mile of each other) would be pretty good. Plus, unless people routinely sign up on 50 different sites, it won’t be a huge problem.

Ultimately, it would be nice to have a central registry that assigns unique identifiers, but trying to establish such a registry would probably be more work than it’s worth at this point.

Feedback

I’d love to hear feedback from anyone interested. Protocols like this only succeed if they achieve wide adoption and serve everyone’s needs. So, if I’m unfairly excluding someone, or I’ve missed something from the main list of goals, let me know in the comments. I will update this post over time as we come up with new ideas.

Throwing down the gauntlet

By no means is this document meant to be an academic discussion or pointless pontification. This is a very rough draft of what I hope will be an actual service that users can interact with very soon. So, I will go ahead and make a challenge to my fellow site owners: Let’s finalize a spec for LGP by December 2007, and have it implemented on our sites by Christmas (Dec 25th). If we could help our users find someone to game with over the break, it would be quite a present.

For my end, I solemnly swear to have Obsidian Portal implement at least the provider side within 2 weeks of the spec being finalized. I feel comfortable making this promise because I know just how easy it will be to do. Heck, it will probably take less than 3-4 hours to do the actual programming.

To any actual gamers reading this, you have a job too. Go back to the sites that you’ve registered on, post some links to this article, and demand that they support LGP. Tell them that by supporting and participating in the network, they will greatly enhance the user experience on their site. Believe me, once the users start demanding things, it gets very hard to ignore.

References

Atlanta Ruby Users Group

Ruby on Rails No Comments »

The Atlanta Ruby Users Group (ATLRUG) recently moved their meetings to a much friendlier location for me. Rather than heading up into the forbidden north of Atlanta, it is now being held in the convenient location of Tech Square in Midtown. Of course this probably means nothing to anyone reading this from outside Atlanta.

In any case, it was a really great group, and they were very welcoming to new people, of which there were very many. Following the free pizza and pre-meeting chit-chat, we saw two presentations.

Metaprogramming

First up was Stephen Touset with a talk on metaprogramming. This is what is going on behind the scenes with all the method_missing stuff. Probably the most well known example would be the dynamic finders (ie. “find_by_email_and_username”). Stephen delved deep into metaclasses, and it was fairly confusing. I’ve dealt with class_eval and such before, but mainly from a “copy someone else’s stuff and modify to suit” sort of way. As I said during the meetup, “It’s possible to do metaprogramming without knowing what you’re doing.”

Nginx

Mark Percival followed Stephen with a presentation on Nginx, a fast little web server. I’ve always been a fan of Apache, but mainly because I felt safe with it. Even though it was a pain to configure, I knew that if I ever had to ask “How do I do X on the web?” then the answer would be in Apache language.

However, it never occurred to me that it might be overkill. As Mark explained, if all your Apache server is doing is proxying to mongrel, then it’s a big hammer for a tiny problem. The memory footprint is fairly high, and the configuration is a pain. Face it, Apache is not very friendly.

Mark claimed that Nginx was friendlier. To be fair, the config file was shorter. However, it still looked fairly arcane to me. I guess easy is in the eyes of the beholder.

Still, the memory issues are something I can’t ignore. Obsidian Portal runs on a VPS from Rimuhosting, so memory is a scarce resource. If I can reclaim enough memory to run another mongrel instance, that would be quite a coup. However, the real offender on my VPS is Tomcat. What!?! Tomcat!?! Well, I needed something to run Solr, and Tomcat is the only servlet container I’m familiar with. So, even though it’s a memory hog, it’ll have to stay for now.

Overall thoughts

All in all, the meetup was great. As I said, everyone was very nice, and all seemed fairly down to earth. There were no pissing contests over who was the better hacker, and newbie questions were answered honestly and humbly. I can’t wait until next month’s meeting. Maybe I’ll even try to scrape something together to present.

Battling pingomatic, Technorati, and the other XML-RPC ping services

Promotion, Ruby on Rails 5 Comments »

So you want on Technorati, huh? You’ve got a website with blogs or at least something that could be loosely considered a blog, and you want more exposure? Well, you’ve come to the right place! Step on in and I’ll tell you all my secrets of getting XML-RPC pinging to work for you, driving the hordes of the Internet to your doorstep! *

Getting onto the syndication services is not that hard. Or, at least that what’s they say. I have had a devil of a time getting the Obsidian Portal adventure logs to show up. By any standard definition they are blogs, and therefore should not be excluded from the syndication services. Still, here I am after a month with very little to show for it. Worst of all, it’s extremely difficult to track down where I’m going wrong.

Under the assumption that someone out there is in the same boat, here are a few tips to help out. I’ve grouped my tips into two categories. “Concrete Advice” covers tips that could definitely make a difference and should be attempted first. “Shots in the Dark” are some ideas I had that may or may not do anything at all. But if you’re desperate…

Concrete Advice

Targets

Rather than searching out all the services, just use pingomatic. You can add any additional ping targets if you wish, but pingomatic has found some pretty good ones.

Testing

Actually testing your pinging is probably the hardest part. You send a ping out into the ether, get a response like “Thanks for the ping!” and then you wait. And wait. And wait.

Sometimes you will have to wait several hours for the blog or post to show up on Technorati. Sometimes it won’t even show up at all. Not knowing if the ping is working is the most frustrating part of the entire experience. That’s where weblogs.com comes in.

Weblogs.com is your testing buddy!

Ever hear of weblogs.com? Neither had I, until I started this journey. Apparently, they’re the wackos who came up with this crazy pinging idea in the first place. To boot, they provide the best way of testing whether or not your ping service is working. They have a list of the most recent pings they’ve received available as an XML file. So, here’s how the testing works:

  1. Send a ping to pingomatic. Verify that pingomatic responds correctly (ie. “Forwarding your ping to 16 services”).
  2. Get a cup of coffee or something.
  3. Download shortChanges.xml (use wget to avoid caching by your browser).
  4. grep for the URL of the blog you pinged.

Note: shortChanges.xml seems to be cached on the server side and updated every couple minutes or so, so keep checking if you’re not there right away. After 5-10 minutes, you should either be listed or your ping never made it.

If it’s there, then you can be absolutely sure of 2 very important things:

  1. Your ping to pingomatic was successfully received.
  2. Pingomatic forwarded your ping to 1 other service successfully.

That may not seem like much, but we can infer (ie. assume) a lot more, namely that pingomatic is forwarding your pings to all the other services. This means that whatever problems you’re having getting registered with the syndication services, it’s not related to your pinging process. So, if you’re still not showing up on Technorati, it’s time to do some more digging.

Are you valid?

Ok, now your ping is working, what’s next? Validate your site and your feed!

The first thing a syndication site will do is pull down your feed and spider your site. You want to be as welcoming as possible when that happens. That means having valid, well-formed XHTML for your site and a valid RSS/Atom feed. Both of these are easy enough to check:

They will tell you what’s wrong with your site. Get it whipped into shape so the syndication spiders find what was promised by your ping.

Extend your best foot forward

Since we’re using pingomatic, we have our choice of a regular ping or an extendedPing. Just go whole-hog and send the extendedPing. It allows you to specify both the site URL and the associated RSS/Atom URL. Send all the info you can to pingomatic, and let them decided what to forward on to the other guys, depending on who can accept it.

“Ping Test” is a crappy post title

When looking for your posts on the syndication sites, make it easier on yourself, and use a test post with easy to search for text. “Ping test” is going to lump you in with all the other people doing the exact same thing. Instead, stick in a string of nonsensical text like “flatly waking Oberon” that doesn’t show up in a Google phrase search. This will make your tests just a little bit easier to find.

Shots in the Dark

Tag, you’re it!

Add a few categories to your post in the RSS feed. A lot of spiders and search engines (as well as blog apps) seem to treat the category field as a place to dump social tags. So, you should too! Even if you have to hard code a few categories in there, go ahead and do it. For the Obsidian Portal adventure logs, every post is tagged with ‘games’, ‘gaming’, ‘rpgs’, and ‘roleplaying.’ Does it help them get picked up? I don’t know. That’s why it’s a shot in the dark.

Check your title tag for your blogs

For a while, I was adding “Obsidian Portal” to the title tag of every adventure log. For the fleeting moments when they were showing up on Technorati, it looked terrible. Suddenly, they all disappeared. It occurred to me that they might have been flagged as duplicates or too similar. Same domain and similar titles. Is that the case? Who knows?

Parting thoughts

I have not had much luck getting listed with Technorati or any of the other services. Sometimes it works, sometimes it doesn’t. After about a month of trying, I’m about ready to throw in the towel. I’ll keep the pings going, but I’m not going to devote much more time to testing and analyzing whether or not they’re working.

If you do manage to find the secret to getting listed, please speak up in the comments or write a blog post of your own!

References

*Author is full of crap and is still unable to get his site’s blogs listed on Technorati. If you know what he’s doing wrong, please post a comment!

Good luck to MyNextDive

Promotion, Ruby on Rails No Comments »

In an earlier post on the Atlanta Web Entrepreneurs meetup group, I mentioned that I had met some fellow Ruby on Rails hackers from here in Atlanta. They were working on a secret project and didn’t want to publicize it. I can definitely understand the feeling.

Fast forward a few months and now they’re tired of working in the dark. At a certain point, you just have to push it out there and sink or swim. In fact, their business depends on both sinking and swimming. Ha ha, lame. Anyways, if you’re a scuba diver or were ever interested in being one, check them out:

From the guys here at AisleTen, we wish the best of luck to MyNextDive May you find your niche and get your user base!

References

The search for credit card processing part 1 – TrustCommerce

Business, Plugins, Ruby on Rails 3 Comments »

We have finally gotten to the point where we are ready to start offering subscriptions to Obsidian Portal. We don’t expect there will be a lot of interest, but it’s always a sort of chicken v. egg problem. If you don’t have paying subscribers, then it’s not worth the effort to make the features. Conversely, without the features, no one is going to pay. On second thought, I guess it’s not chicken and egg, it’s pretty clear: you need features or no one will pay. ;)

Asking for payment means you will need to be able to accept it. Currency on the web is passed almost exclusively via credit cards (except for PayPal…), so that’s the direction we need to go in. That requires us to select a credit card processor. For today, we will be looking at TrustCommerce.

I won’t go into the details of how credit card processing works, mainly because I don’t really understand it myself. Suffice it to say, there are a lot of middle-men, and they are all trying to take a cut. Each cut is either a percentage of the total charge or a flat fee or both. So, a typical fee structure might be $0.30 flat fee plus 2.5% of the total transaction.

Note: If you don’t care about the analysis and just want to see a rundown of their prices, then jump to the pricing.

Go easy on me; it’s my first time

When selecting a processing agent, our first priority right now is ease of use. We don’t expect there will be a lot of people signing up for our premium service, so we don’t want to expend a lot of effort on a payment system only to never see it used. Also, we’re willing to pay a higher rate to the processor since 3% of $30/month is a lot different than 3% of $30,000/month. I’ll pay 3% vs 2.5% if the 3% service takes 2 hours to implement and the 2.5% service takes 10. So, for us, ease of use trumps competitive pricing.

Since we’re talking about subscriptions as opposed to purchases, there is a recurring element to the payments. Since we want easy-to-implement solutions, we are scoping our search to only include the payment processors that offer a recurring service. This is a very important thing to note, especially if you’re in the same boat. A 1-time payment processor model (like Google Checkout) just will not work if you want to do subscriptions. The main reason is that you will have to store the users’ credit card info on your server in order to pass it to the payment processor each billing cycle. Do not do this! There are actual laws and regulations detailing what sort of security procedures you have to maintain in order to hold that sort of sensitive data. It’s much easier to simply pay someone else to deal with that crap. If you do choose to store their info in your database, you should be looking for a lawyer right now, not a payment processor.

Just plug in your credit card info

In Rails, ease of use means finding a plugin. I write a lot about plugins on this blog, so why should credit card processing be any different? Doing a quick Google search led me to the TrustCommerce subscription payment plugin.

Finding this bit of code brought a smile to my face, as I thought I had just finished 90% of the work. Sign up for an account, drop in the plugin, and wait for the money to roll in. Too bad there were a few red flags that derailed the money train.

Sitting by the phone

TrustCommerce does not list any pricing on their website. Instead, they say you have to sign up for a test account, and then you’ll be contacted. Not a big deal, I guess. So, I signed up for a test account.

The first red flag went up when I did not get an immediate callback. Sure, I signed up at 11:00pm Eastern Time, but that’s normal business hours in Internet time. In other words, if you’re an Internet company that requires phone contact, you had better have someone manning the phone at all hours. A lot of Web jockeys like me have a regular 9-5 job that precludes us from doing our business dealings during normal business hours. I want to deal with companies that understand this and have staff available during my normal business hours.

Red flags: 1

The ball sits in my court

The second red flag went up at their lackluster eventual response. My cell is in a dead zone at work, so whenever I leave for lunch, I get all my messages. On the day after requesting contact, I had a voicemail message from TrustCommerce. Still no pricing info, just a short message to call them back. Seeing as how I was busy, I couldn’t do it right away. Then I forgot. Dead silence on their end. No e-mails, no more calls, nothing.

Now a lot of people may disagree with me on this, but I think they should have been hitting my inbox and voicemail pretty hard. “Mr. Wedemeyer, we’re still interested in talking to you about blah blah.” or “Send us an e-mail with the best time to call you.” That’s how the mortgage people behaved when I used LendingTree. Sure, it was annoying, but you knew they wanted your business. To me, an anemic response indicates that someone isn’t really serious about recruiting me as a customer.

Red flags: 2

Little fish: prepare to get fried

When I finally did get in touch with someone from TrustCommerce, he was quite happy to answer my pricing questions. I don’t know if I’m allowed to post that info, but since they didn’t expressly forbid it, here you go:

Basic pricing

  • $95 1-time fee
  • $20 / month
  • $0.20 / transaction

Citadel (recurring payments)

  • $145 1-time fee
  • $10 / month
  • $0.10 / month / billing id (ie. subscription)

Holy crap! $240 just to get started, plus an additional $30 per month, just to be allowed to use their service? Seeing as how I expect Obsidian Portal to be making around $10 / month, at least until we can recruit more people, this is insane! I politely said thank you to the salesman, hung up the phone, and started writing this post.

I guess I see these huge front-loaded fees like this: If you’re making enough money that the fees don’t matter, then you already have a lot of subscribers, which means you’re already handling credit cards. Maybe their service is so great compared to the competition that it’s worth it for the big boys. But, if you’re a small time operator like me, forget about it.

Red flags: 240 + 30 / month

The search continues

Although I said pricing was not our top priority, the front loaded fees with TrustCommerce completely invalidate them as a viable option. It would be a very long time before we paid off the initial investment, and with our none-to-clear business prospects with Obsidian Portal, that’s a gamble I’m not willing to take.

In the next exciting chapter we will be looking at Amazon Flexible Payment System (FPS). This new web service from Amazon is meant to rival Google Checkout and PayPal. I’ve been extremely pleased with S3, and maybe they can do one better with FPS. Stay tuned to find out.

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in