Sunday, February 15, 2009

Social Activity Models and Metrics

For SportsFlash, we want to measure consumer/contributor (i.e. customer) awareness, engagement by the community, their intent (direct or indirect), and how are the social interactions contributing to a player's or sport team's brand or business. Social activity modeling and metrics is a subjective and constantly evolving subject which we will refine to our business and use case.

Broadly speaking, Social Media has four main core metrics:

1. Exposure: to what degree have we created exposure for users and
content?

2. Engagement: to what degree are users interacting with other users
and content in the community?

3. Influencer: the degree to which exposure and engagement has
influenced perceptions and attitudes.

4. Action: as a result of the social interactions, what actions if
any have taken place?

This leads us to describing social intelligence metrics (attributes) and the various measures we can use to quantify them. Stay tuned as we implement some of these metrics in SportsFlash to measure interesting and evolving relationships.

Monday, August 4, 2008

Reducing Soft Barriers in Mobile Apps

I got the pleasure to listen to someone talk about mobile software development and one of the things he mentioned that stuck with me is "Reducing Soft Barriers to Adoption". So in keeping this in mind, I thought I would come up with some ideas to help reduce the soft barriers of SportsFlash.
  1. Create as minimal clicks/presses to important screens where the data is targeted and minimal. In SportsFlash, one press from the home screen to see your leagues and then one click to see the team standings.
  2. Use big fields and buttons to allow people to easily see the data they input, and use a touch screen with.

  3. Give users access to community/social tools to help them learn from others. The message board is part of Version 1.0, with more to come.

Sunday, August 3, 2008

Designing Personalization in Mobile Apps

People can sometimes have a very personable attachment to their mobile devices. Whether its how its decorated, adorned, configured, it's contact list, even the phone plan, each reflect in someway it's owner. So why not it's applications as well???

With SportsFlash we tried to do this through the use of personal touches like images galleries, and then allowing these galleries to be personalized for that specific user. What this means is that the source of the images used in the image galleries are defined by the user, so that SportsFlash not only keeps them up to date on their fantasy league teams, but also it's customized with the images of their favorite players, or even their vacation shots. Version 1.0 just put into place the personalization classes (i.e. define the source of the images in a class that allows the data structures to be modified). In Version 2.0, we will create interfaces to the personalization classes to allow these data structures (i.e. the array of image sources to revolve), to be defined by the user.

As more ideas like this come to light, the end goal is to make each application of SportsFlash have a personality reflective of their owner, much like the mobile device.

Thursday, July 31, 2008

Mobile Apps New Social Community

One of the things I want SportsFlash to embrace is the intrinsic community available to it. We use mobile devices to connect and communicate with others, and for others to find us, so why shouldn't its applications take advantage of that. Web 2.0 can be characterized by many things, but one thing that has emerged is social networking. The ability to connect with friends, colleagues, people we know well, and those that maybe a few degrees of separation away to help us share pictures, look for jobs, spread news, collaborate ... etc. I believe SportsFlash offers the ability to evaluate it's social network of league members, identified by their phone number, to enable relevant information discovery, connecting players and their sports interests, ... etc using social network analysis and other approaches. Some of the things we want to do with SportsFlash to enable community include (but not limited to) the following:

  • Limit the data on the phone to only store the leagues you belong too. For information about your teams standings, the players statistics, messages being shared, ... etc, the phone will connect with the community to view/share.
  • Use message boards to communicate with the community, one to many broadcast communication.
  • Develop services (i.e. alerts, SMS, GTalk, XMPP, ... etc) to push relevant information to your phone, utilizing the relationships you create with others in the SportsFlash community, and your interactions in the league.
  • In Version 1.0, player stats will be updated, monitored and mediated by the SportsFlash user community. This way it spurs more interest in monitoring and playing with SportsFlash.

Another interesting aspect is that the content will be constantly changing, and the tone, mode, atmosphere of the SportsFlash community will also be constantly changing, in some cases, evolving. This is important, because the algorithms we use to create a relevancy model for our community could also use evolutionary computing algorithms to track how the model is changing in our network analysis.

One term that always comes to mind, Continuous partial attention. In the context of Gen Y, SportsFlash will help with continuous partial attention, at least in terms of our love affair of sports, by supplying a convenient way to participate in a fantasy sports league community when it's convenient for you, or when SportsFlash tells you something interesting is happening.

Tuesday, July 29, 2008

How do I code for Performance, Memory, ... etc in Mobile Apps

The following are just a list of running rules I'm comprising to help in developing mobile apps:

  1. Limit object creation and references. The more objects your application creates, the more that has to manage. One suggestion is to use stack based variables instead of heap based member or object instances , especially when they are referenced numerous times. For example, if I have an object variable that I reference numerous times in a for loop, copy it to a local variable and use that instead in your loop.
  2. Limit data packet size and processing. If your mobile app depends on data from an external source, try to retrieve it in as small packets as possible, and if the data can be pre-processed on the server before transmitting to the mobile app, take advantage of it. Also, if a packet is lost, it's easier to re-send a smaller packet, as opposed to a larger one encompassing all the data. These are practices we strived for in SportsFlash.
  3. Utilize PowerManagement to power down the application when not in use.
  4. Use threading to ensure that complex tasks, if they fail, don't crash the rest of your application.

Coding REST Web Services on Google Android

When looking at utilitizing a SOA architecture to support SportsFlash, I had to investigate Android's ability to work with web services. From Google Android forums, I was first pointed to KSoap2 (http://ksoap2.sourceforge.net/), with implementations described here:

However, I was a little concerned by some of the difficulties described here, and I wanted to look at REST based services, which I thought would create the simple, lightweight API to our database that we require. I credit the publication "Unlocking Android", by W.Frank Albleson, Charlie Collins, Robi Sen, and Robert Cooper and Professor Ron Czik of Boston University. Using the SAX XML Parser

(http://code.google.com/android/reference/org/xml/sax/XMLReader.html)
you can create a REST Web Service that returns xml (or JSON), which is parsed by SAX.

A template for usuage could look like this:


try {
URL url = new URL(this.query + position);
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
ObjectHandler handler = new ObjectHandler();
xr.setContentHandler(handler);
xr.parse(new InputSource(url.openStream()));
// after parsed, get record
r = handler.getRecord();
} catch (Exception e) {
Log.e(Constants.LOGTAG, " " + CLASSTAG, e);
}

where your ObjectHandler is a class that extends DefaultHandler (http://code.google.com/android/reference/org/xml/sax/helpers/DefaultHandler.html) where you override methods like startDocument(), startElement(), characters() ... etc to handle the reading and parsing of your xml stream from your REST Web Service.

My HeadAche with SVN and Tortoise (At Least till I Upgraded)

This post first came to mind after a 4 hr wrestling match with SVN and Tortoise to check in my hrs of hard work. After almost losing my work numerous times, I thought there has to be a better way. Now don't get me wrong, SVN and Tortoise on the surface are great tools, and you can't beat the price, but there something to be said for lost productivity.

So recently, I decided to read the annoying message that pops up everytime I started Tortoise, and it said I could update Tortoise to 1.5 (I was currently running 1.4). Now I've always been hesitant to upgrade software because you are always worried something that was previously working will now don't work (look at Vista for example). But after my recent overnight session with SVN and Tortoise, I thought what do I have to lose. As it turns out, so far so good. I still wish I could force certain updates as opposed to being dependent on Tortoise telling me that these files are commitable, or that the one in SVN is newer than the one I have. I come from using Borlands StarTeam for the past 5 years, and there are just times when the user knows best, and I wish the option to exercise that existed. Also, I don't like the fact that I always have to "Clean" my project, only to get back some incomprehensible message if I can't.

But upgrading Tortoise to 1.5 seems to be working out ... so far. So what have I learned?
  1. Maybe it was more Tortoise and not SVN that I was having issues with.
  2. Upgrading software can be a good thing, a great thing, sometimes.
  3. Maybe that message appearing everytime I started Tortoise wasn't so annoying after all :)

As far as free source control tools, Tortoise and SVN are by far the best products on the market, but if you are running into any problems, make sure you have the latest version.