Tuesday, 31 March 2009

The Big Social Network Noise Pool

I cancelled my Bebo account, it was turning into a giant teenagers playground. And, I for one, wasn't wanting to sit around to watch.

I did a purge on my Twitter followers, they responded in the same fashion (as to be expected really), "if you don't follow me, I won't follow you". Fine by me.

Tonight was Facebook's turn. My original intention was to keep this one to people who I knew but as time wore on friend of friends start turning up and I blindly accepted thinking that their comments here and there may have been useful. In most cases it was a waste of time.

The signal to noise ratio is increasing at an alarming rate. Twitter's @reply is me basically shouting in a field of 100 other people with the person I'm trying to reach standing at the other side. The mere fact that @replies don't get email alerted has caused me more misses than hits. Identi.ca solves this problem (yay!) but the interface isn't very inviting to use and, finally, is treated more of a techy plaything than anything else.

Myspace is in decline, ITV are desperate for a buyer of Friends Reunited, Twitter isn't money making yet. I'm starting to wonder where this is all going. We could have the biggest set of redundant data on our hands, just waiting to be mined or searched but never quite got round to it.

While a few companies like Salesforce.com, SAP and Sysomos are trying to get sentiment out of social networks and blogs the amount of increasing noise will make their lives more and more difficult. While the ACE Conference in Northern Ireland says the province needs to concentrate on it's social applications there's a good chance that the boat has already been missed and the decline to a more normal way of doing things will start to appear.

Saturday, 28 March 2009

Twitter to Speech in Java

During the working day I glance at Twitter quite a lot to see what folk are saying. I'd personally rather have it talk to me instead, if something interests me then I can go looking on the website.

(Now I know mobiles do text to speech well already, this was more of a basic exercise to see how easy it would be in Java).

First of all we need some Tweets.
public class TwitterSpeech {
public TwitterSpeech(String username, String password){
Twitter twitter = new Twitter(username, password);
List messages = twitter.getFriendsTimeline();
for(Status s : messages){
System.out.println(s.getUser());
System.out.println(s.getText());
}
tv.closeVoice();
}
}


The Winterwell JTwitter API works really well for what we need and I don't see the point of overcomplicating the matter by reading JSON and Atom feeds. So, a username and password are passed to the method and the getFriendsTimeline() method pulls the last 20 Tweets in the timeline.

Now for some speech.

The FreeTTS project is on Sourceforge and provides a nice way to get text to speech in short space of time. Here there is another class that sets up the voice synth and gives a way of passing a text message to it to be processed.

public class TweetVoice{
VoiceManager voiceManager = null;
Voice helloVoice = null;

public TweetVoice(){
voiceManager = VoiceManager.getInstance();
helloVoice = voiceManager.getVoice("kevin16");
helloVoice.allocate();
}
public void closeVoice(){
helloVoice.deallocate();
}

public void speakTweet(String message){
helloVoice.speak(message);
}
}

Kevin16 is the voice set to be used, a bit robotic but fine for our needs. So now, back in our original code segment, it's just a case of plumbing in the speech synth and passing tweets to it.

public class TwitterSpeech {
public TwitterSpeech(String username, String password){
TweetVoice tv = new TweetVoice();
Twitter twitter = new Twitter(username, password);
List messages = twitter.getFriendsTimeline();
for(Status s : messages){
System.out.println(s.getUser());
System.out.println(s.getText());
tv.speakTweet(s.getUser() + " said " + s.getText());
}
tv.closeVoice();
}

public static void main(String[] args){
TwitterSpeech ts = new TwitterSpeech("myusername", "mypassword");
}
}

It's plain and it's simple but it works rather well and has scope for a few other applications. If you wrapped a Quartz Scheduler or a mechanism to retrigger a thread then you could leave it run and grab new tweets for you. This example will always grab the most recent 20 tweets for you, it would be easy to modify the code and get the most recent tweets by id or date.

Sunday, 22 March 2009

The great Twitter user purge

I went on a Twitter purge today. It was all down to something I noticed last night, I'd reached a tipping point where it was becoming difficult to maintain a meaningful amount of data coming in.

I'm not on Twitter to data mine, I changed my mind about that a few weeks ago. But out of the 146 people I was following, how many was I having a contract of information with? About four all in all. To be fair I've made some new contacts in Northern Ireland, creatives that I didn't know existed etc. The rest was just turning into link bait, shameless advertising and pointless content. It's creating content for contents sake.

What got me thinking? Well I had about fifteen alerts from Twitter saying that folk had added me, why had then added me? No idea, more than likely to bump the numbers up and not based on anything I was actually saying. So why am I adding folk I don't really know, what value are they adding to my knowledge? Very little, so I went on a purge.

It's not just limited to Twitter, I found the same with Facebook, LinkedIn, MySpace and Bebo. How many of these contacts are actually meaningful? How many will add value for me in the long turn?

Since the Facebook redesign I hardly log in, only to keep in touch with a handfull of folk that I'd normally talk to (ie, I have already had a face to face conversation with them BEFORE adding them on Facebook).

Back to a simple life I think. Try and reduce the paper in my office, get all the CD's on to some form of media player. Try and live a bit simpler.

Tuesday, 17 March 2009

Twitter ideas: bring back the bots.

Why can't Jetblue/Virgin America or any other airline have a crack at this? Here's the story, I want to fly from New York to San Francisco.

There's nothing to stop a direct message from Twitter to JetBlue's twitter account.

"JFK SFO 2009/3/20 2009/3/30 A2 C1"

Fly me from New York to SanFran on 20th March 2009 and return on 30th March 2009, two adult and one children are travelling. Especially handy if I can send the direct tweet from my mobile and get a dialog going.

Send me a TinyURL back with the price and where to book and I'll go for it. Even better as you have my Twitter username you can link it to my Frequent Flyer account and give me better discount for continued service to your brand.

Saturday, 14 March 2009

The last two weeks have been a blur.

I can't believe that two weeks have passed already. I'm head down into a large app for Silktide Studios. All in Java - Hibernate is taking the brunt of the db duties nicely.

Highlight of last week was STP's pointing to the direction of this blog and my minor rantet on the lack of DOB info in Twitter sign ups.

This morning was getting back up to speed with Ruby On Rails. I tend to pick it up and then put it down. In my "I must learn at least one language this year" thoughts, I really should get Ruby under my belt.

Saturday, 21 February 2009

Twitter data mining, there's one element missing.

I've been umming and ahhing over this one for a week or so and the immediate answer just wasn't in my field of vision. There's lots of talk about data mining Twitter feeds as a use for company feedback. SAP already have something called the "sentiment engine" as part of their Business Objects Text Analysis suite that was using the Twitter API's to gather information on a company or product and predict what the buzz was.

Twitter signups are lacking one major piece of information and that's an age range for user accounts. It makes slicing any form of decent information a real challenge. Facebook at least asks you for a date of birth but extracting it something I have never tried.

Tesco learned the hard way about not knowing age segmentation when the Clubcard was in its early days. Pensioners were not wanting money off vouchers for Coca Cola as they simply didn't drink the stuff. They weren't quiet about it either. Localisation would work well with Twitter analysis as you can define a geocode radius to the result set.

So we can easily find out what people think about our products but never find out what age they possibly could be.

Original blog post on the Sentiment Engine in the Insurance Technology Blog.
More on the SAP BOTA here.

Friday, 14 November 2008

US Currency fluctuations and running cloud instances.

Most of the cloud providers I have come across are based in the US. No such bad thing I know. My concern for a Eurozone or UK start up is the currency fluctations.



For example: Amazon EC2 instances are USD charged (prices calculated with Amazon's calculator).










Instance TypeTotal HoursAnnual Cost (USD)Cost at May 2008 ($2.00/£1)Nov 2008 ($1.486)/£1)Annual cost difference
Small Instance8760 hr$876£438£589.50£151.50
Med Instance8760 hr$3504£1752£2358.00£606.00
Large Instance8760 hr$7008£3504£4716.01£1212.01


Obviously currencies will fluctuate daily but it is an eye opener for a UK start to see how much the costs incurred on a larger instance will be. This doesn't take into account anything like S3 storage or SQS charges. Even if you moved S3 storage to an euro based account you have transfer costs to take into account.


So, the likes of GoGrid, Aptana, Flexiscale and Amazon all charge in USD and make the case for Cloud in the UK a cost problem if you don't financially plan properly in the start up phases.

I know the costs are purely theoretical as the $2.00/£1 exchange rate was six months ago and it's steadily slid during the course of the year. If things continue in that trend and a $1/£1 exchange rate happened (stranger things have) the costs in the Eurozone and the UK will steadily increase.



If you take a UK company for example, a single instance in its most basic form, starts costing the following:






Monthly USDMayJuneJulyAugustSeptemberOctober
Small Instance73.2£36.99£36.75£36.95£40.21£41.21£45.35
Med Instance292.8£147.96£147.00£147.78£160.85£164.85£181.39
Large Instance585.6£295.92£293.99£295.56£321.71£329.69£362.78


Learning Python and going with Google's AppEngine will start to appeal to small scale companies purely to exercise cost savings.