Understanding Cocktail Rating Distribution

Something interesting with my facebook application is that in the past week I have gathered >1000 ratings on the cocktails in my database from 745 unique users of my cocktail making application. This is a fairly small number for data analysis but 3 things stood out:

The most votes were given in the bucket of "10" - people seem to tend to vote on the cocktails they like.

The cocktails that were rated 10 tended to get more votes in general i.e. 3 votes per cocktail and not the average 1.5

When looking just at the users who gave a ten and what % of each voting bucket they made up it became clear that these users were pretty much all or nothing guys relative to the crowd, either they gave a cocktail a 10 or they gave it nothing.

More to come on user voting behaviour over time I am sure and also on the most popular cocktails, cocktail ingredients, favourite cocktails lists and so on... I now have far too much data to work through and that is great!

Over 10 000 Users on my Facebook App

Wow in under one week I have added 10 000 users to my cocktail recipes application which is totally amazing. I am still getting c. 1000 signing up a day and that's fantastic. One of the things that makes me most happy about this is the fact my application was the second mover in the market and that the message board/review board for my app is not crowded with complaints about how it is broken and doesn't work. Instead it is full of cocktial recommendations.

This week I will add the ability for users to add their own cocktails via this app but until then hopefully the app will continue to be useful to users just at a base level. Also look out for more stats and some how to information on how I have created some of the cooler features of the application.

In the Facebook Directory

So I have been working on my facebook cocktail application for a little over a week now having started it on the memorial day weekend. It allows you to do everything my cocktail site does and a little bit more including recommending a cocktail to a friend and seeing the most recently popular cocktails and the top 12 users yesterday. I actually have a bunch more ideas of what it could do like little graphs of the popularity of the cocktail over time and so on.

What is exciting is that in 3hrs I have added 300users to the application, now obviously rates won't stay that high but realistically most of the east cost wasn't browsing facebook when the app was approved and neither was the UK. It will be really interesting to see how things go over the next 24hrs.

The best news is I have log files tracking everything going on so I will be able to note down and describe what the growth of a facebook application looks like!

More posts to come down the line but I want to leave you with a thought. For my cocktail recommendations engine I now have a track... at a user level... of every cocktail viewed and rated, and at what level (pretty much tied to demographic too if I can get my ass in gear and pull that data). This recommendation engine can get much, much smarter :D

Free Gifts - Another Viral Facebook App

I am really enjoying the phenomenon of Facebook apps and totally loving the way they have exploded from zero to infinity and beyond so quickly! The arguement that facebook just added a quarter of a billion dollars of RnD to their platform is looking more and more realistic to me.

The apps I like the best are the ones that have exploded without the help of the directory and hardly surprisingly these have exploded because of interpersonal activity. The latest great app I wanted to show case is Free Gifts. The Facebook Gifts product is really cool and not too dissimilar to the ze frank concept of gimme some candy. The 2 mistakes I feel facebook made was making all gifts the same value (since surely if there were expensive and cheap gifts you'd give your girl/boyfriend a more expensive one) and not expiring the gifts after a given time (i.e. flowers might last a week, a teddy for a month etc...). Differentiation is key in many things.

 

Well the app above is giving away gifts for free and when you send a gift to someone they have to add the app to display it... how perfectly viral I really love it!

The image above shows the current user base and all without the use of the facebook directory, pretty incredible stuff, keep it up Zachary. I am excited to see how far this one goes!

eBay Related Searches through Get Search Results

Ok I am simply blown away by the latest offering from the eBay API as an awesome way to make a bunch of money. eBay is now revealing (without the data + formula behind it of course) the results of their related searches algorithm. When you search on eBay for "tmx" on eBay at the moment it will give you 937 items but just above that it will give you the following related searches: ps3,   wii,   tmx elmo,   tickle me elmo,   playstation 3

This is really useful information you can use to determine (as a paid search advertiser for example) hey I don't want to buy keyword "tmx" it's too pricey but keyword "tickle me elmo" is closely related... I will buy that instead and send the clicks to the same page as TMX. This data is quite simply awesome and exposed world wide for free. Make use of it and you'll do great, esp. as an ebay affiliate and you can access it via the REST API, I am playing with this and a little bit of MAA right now :)

Skype4Com - Create Chat with VBS

I have spent a lot of the last week hacking about with the Skype api and vbs. I have wscript on my computer and wanted to open a skype chat window and send a message to the user based on the content of an API call response. Here is the code I used with the Skype4Com dll to do the skype call adapted from some JS API call code already available online. As always this is a true hack and so may not be 100% stable or great code it is offered as is for you to play with.

 

' // Create a Skype4COM object:
Set oSkype = WScript.CreateObject("Skype4COM.Skype")

' // Create a UserCollection object and add the multichat users to this collection:
Set oMembers = WScript.CreateObject("Skype4COM.UserCollection")
oMembers.Add(oSkype.User("alexapitest"))

' // Create a multichat:
Set oChat = oSkype.CreateChatMultiple(oMembers)

' // Open a chat window:
oChat.OpenWindow()

' // Send a chat message:
Set oMsg = oChat.SendMessage("Greetings!")

Running a PHP script with a Cron job in 1and1

Following on from running my first cron job with 1and1 hosting what I really wanted to do was to be able to run a php script, perl script or some other form of script on a timed basis. This article is a description of setting up a cron job on 1and1 hosting to run a simple "hello world" style example. I have the 1&1 linux business hosting package so can only confirm this example works with that.

First I set up my helloworld.php script, this was a simple script to create a file called helloworld.txt and write the words "hello world" to that file and save it.

<?php

// the filename
$filename = 'helloworld.txt';

// the content
$content = 'hello world';

// create the file
$f=fopen($filename, "wb");
fputs($f, $content);
fclose($f);

// now done

?>

I tested this file by running it on my server and it worked fine. I would recommend you do the same.

The next thing I had to do was log on to my 1and1 server using SSH, the program I use for this is PuTTY which I have been using since university and works well. You enter the username and password for FTP and SSH access to your site in the PuTTY command prompt and then are logged into the site. The next two steps you have to go through are:

  1. to find the location of your current directory: enter "pwd" to find this... mine was: "/kunden/homepages/XX/dXXXXXXXX/htdocs"
  2. to find the location of php on your machine to do this I entered the command "php -info" in the command prompt and looked for the location in the output which was: "/usr/local/bin/php" however due to the nature of 1and1 hosting the full path was actually "/kunden/usr/local/bin/php"

Now I had to create my crontab file. In the file below the 14 refers to the 14minutes past the hour, you can find out about the 4 *'s from the crontab page on wikipedia. So I entered the command "crontab -e" (which means edit crontab) and came to the VI editor which 1and1 use on their debian linux installation. In that line I entered the command: "14 * * * * /kunden/usr/local/bin/php /kunden/homepages/XX/dXXXXXXXX/htdocs/helloworld.php > /dev/null" all on one line. This command means at 14minutes past every hour on every day using the program found at /kunden/usr/local/bin/php execute the file found at /kunden/homepages/XX/dXXXXXXXX/htdocs/helloworld.php and send the output to the location /dev/null (which means get rid of the output). Using this command I found that on 1and1 hosting my helloworld.txt file was updated between 14 and 18minutes past every hour.

I know this description would have helped me had it been available when I was looking for information on running a php file through a cron job on 1and1. I hope it helps you.

PHP mySQL close connection

So I have been creating lots of new features for me to maintain my cocktail making website. One feature has involved me setting up a new mySQL 5.0 database (with cool stored procedures I am only starting to understand now) in order to do some tracking of what is happening on the site and with my widget. This has required me to use two databases at once for the first time. One to check if a user is signed in with admin rights and the other to check the tracking out of the other database (php security is really tricky so I am slightly nervous posting even this here :s ).

However I did want to note how you close a connection with a mysql database using PHP in order to open one with another mysql database since it's really simple but I found it hard to get info. Here is an example (with $hostname, $username, $password and $databasename containing what they are named):

<?php$link = mysql_pconnect("$hosturl", "$username", "$password")

               or die("Could not connect: " . mysql_error());

$db = mysql_select_db($databasename,$link)

               or die ("Couldn't select database");

mysql_close($link);

?>

So when you open databases try closing them, I know I will in future for good practice, it makes everything much simpler if you add another database at a later stage.

Graphing Search Result Numbers Over Time

So I have had a random idea for a little project that could be fun. We all know about Google Trends, eBay Pulse, the Overture Search Suggestion tool. Now I think all of these are truly amazing tools. Something we don't neccessarily know about is the supply side of this equation. All of a sudden that is really interesting me. It would be relatively simple to set up a CRON job that runs once daily and pulls the abundance through the various API's available. It could also be really fun to see how trends shift over time (perhaps looping in Technorati and a couple of other sources). It could even be a fun tool for an eBay seller to help me monetize it a little bit... hmm I think I may build this at the weekend and if I do I will post the resulting graphs on this blog as well as on a little site I recently purchased with 1 and 1. YAY!

How to use the Typepad Widget API with PHP

The Typepad Widget API is awesome. The concept is that you have a great widget you want users to add to their sidebar. Typepad want this to be a small self contained piece of DHTML code and want to be able to do all the verification of the user on their side without giving the widget owner any access to the user's account.

Browser based authentication used at both the eBay and Yahoo! developer programs (and explained beautifully in diagram form on the Yahoo! site) simply won't work for this since it gives the programmer access to your eBay/Yahoo/Typepad account (were they to use it). So Typepad found a solution to the problem that is really simple and elegant.

All data is sent to the API in a POST command along with redirecting the user themselves (rather than just a server to server POST call). Typepad's Widget API requires fields identifying you as a developer, your application, what it is called, verifying you are who you say you are (with a token) and finally containing the FULL HTML you want inserted in the user's sidebar to be sent to them through the POST command.

The user then lands at a Typepad log in page and all the data is carried through with them to a page where they can effectively suggest whether or not to keep the Typepad widget. GREAT!

I love this method, it's secure, clever, simple and behaves exactly as you would expect... Having worked with Google AdWords/Base/Adsense APIs, Yahoo! APIs, eBay APIs and a fair few others I have to say this Typepad Widget API has been the simplest yet. Well done Typepad!

My Photo

Recent Posts

Blog powered by TypePad

my flickr tag cloud