Sunday, February 15, 2009
Social Activity Models and Metrics
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
- 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.
- Use big fields and buttons to allow people to easily see the data they input, and use a touch screen with.
- 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
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
- 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
- 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.
- 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.
- Utilize PowerManagement to power down the application when not in use.
- 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:
- http://groups.google.com/group/android-developers/browse_thread/thread/9b246db7d612a6b5/44bb777f03c5c8ac?
- http://groups.google.com/group/android-developers/browse_thread/thread/9b246db7d612a6b5/0f75e1da6be54209?lnk=gst&q=soap#0f75e1da6be54209
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)
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?
- Maybe it was more Tortoise and not SVN that I was having issues with.
- Upgrading software can be a good thing, a great thing, sometimes.
- 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.