Showing posts with label cloud computing. Show all posts
Showing posts with label cloud computing. Show all posts

Tuesday, June 19, 2012

The @FindMyPlane bot

A few days ago I wrote about the Genexus Challenge developer edition and my first Smart Devices app, Find my Plane. Once I get, what I think is, a good idea in my head I get around it a lot to improve it in every possible way. But this is not the case, sort of.

Right after I deployed the app to the Apple’s app store, I thought “how can I advertise it, without paying for advertising of course”, I needed people to find out about the app and download it, and a good word about it would be awesome too. So I thought about social networks… Facebook is for friends and I already told them to download it (did I mentioned it’s free?!) so twitter came to mind… but what can I do to promote my app from twitter, other than twitting about it of course.

So I thought of the @FindmyPlane bot and this post will tell you how I did it, not that it’s rocket science, but I found an interesting use of Windows Azure’s Worker Roles*. Wait, what?! you’re gonna tell people how to build a twitter spammer bot? No, let me get into that.

The @FindMyPlane twitter account works like this. You send a twit to @FindMyPlane with your flight number and find my plane will answer that tweet with useful info about it, the same kind of info you’d get in the Find My Plane app, but of course, only the info that fits in 140 characters.

So this is how it works. There’s a worker role (called Receiver) that every ten seconds access the twitter api looking for mentions for the @FindMyPlane account. Once it gets the list of tweets (if any of course) it saves them to a Table from Azure Storage and saves the latest tweet id in a Queue (also from Azure Storage) so the next time it just asks from that tweet on.

This is pretty much the code:

string lastTweet = "";
string previousMessageId = "";
foreach (CloudQueueMessage message in Queue.GetAllMessages(Constants.AZURE_STORAGE_ACCOUNT, Constants.AZURE_STORAGE_KEY, Constants.AZURE_QUEUE))
{
previousMessageId = message.Id;
lastTweet = message.AsString;
}

bool first = true;
foreach (Status status in Mentions.GetMentions(fmp, lastTweet))
{
try
{
Table.Insert(Constants.AZURE_STORAGE_ACCOUNT, Constants.AZURE_STORAGE_KEY, Constants.AZURE_TABLE, TweetEntity.FromStatus(status).ToString());
}
catch { }

if (first)
{
lastTweet = status.Id;
first = false;
}
}

if (!first)
{
Queue.DeleteMessage(Constants.AZURE_STORAGE_ACCOUNT, Constants.AZURE_STORAGE_KEY, Constants.AZURE_QUEUE, previousMessageId);
Queue.CreateMessage(Constants.AZURE_STORAGE_ACCOUNT, Constants.AZURE_STORAGE_KEY, Constants.AZURE_QUEUE, lastTweet);
}




And there’s a second Worker Role (called Replier) that every ten seconds queries the table where the tweets were saved for those that have not been replied yet and don’t have errors. For every tweet I try to get info of the flight number sent, if I do find info, I reply the tweet with that info and update the record on the table as replied. If I can’t find info, let’s say you tweeted “@FindMyPlane is awesome!” I update the record as ‘with errors’. This is just a way for me to know when I couldn’t reply because of an error on the system or because what I got was not a valid flight number.



Code here:



string query = "Replied eq 'False' and Error eq 'False'";
foreach (TableEntity entity in Table.Query(Constants.AZURE_STORAGE_ACCOUNT, Constants.AZURE_STORAGE_KEY, Constants.AZURE_TABLE, query))
{
string flightNumber = entity["Text"].ToUpper().Replace("@FINDMYPLANE ", "");
try
{
FlightInfo info = FlightStatus.GetFlightStatus(flightNumber);
string tweet = string.Format("@{0} {1}", entity["UserScreenname"], info);
Update.UpdateStatus(tweet, fmp, entity["Id"]);
entity["Replied"] = "True";

Table.UpdateEntity(Constants.AZURE_STORAGE_ACCOUNT, Constants.AZURE_STORAGE_KEY, Constants.AZURE_TABLE, entity);
}
catch
{
try
{
entity["Error"] = "True";
Table.UpdateEntity(Constants.AZURE_STORAGE_ACCOUNT, Constants.AZURE_STORAGE_KEY, Constants.AZURE_TABLE, entity);
}
catch
{
Table.DeleteEntity(Constants.AZURE_STORAGE_ACCOUNT, Constants.AZURE_STORAGE_KEY, Constants.AZURE_TABLE, entity.PartitionKey, entity.RowKey);
}
}
}



Cool uh?!



Here’s how all this works together



image



(*) for a good read on the Azure platform, Worker Roles and Storage (Table, Queues & Blobs) go to: http://bit.ly/SGAzure



You can download the ‘Find my Plane’ for Android and for iPhone.

Saturday, June 09, 2012

Find my Plane

At Genexus we had a little contest. We had a few contest before where we asked customers and friends to create a cool app for Smart Devices with our brand new Smart Devices generator. Of course we could not participate, it would be unfair… (or at least that’s what they thought).

So a month ago, Gastón told us we would have an internal contest, it was called “GX Challenge (Developer Edition)” in which whoever wanted to participate had to build an app. Who wins? whoever gets the most downloads per app.

The most difficult thing is of course to come up with a good/cool idea, and I’m not saying that I finally came to a real good idea, with it was something that I’d definitely enjoy doing. So that’s how Find my Plane appeared.

Find my Plane is a simple app where you enter a flight number and the app would give you info about the flight. From where to where, terminal and gate (where available) and if the flight is on time or delayed, and even as Nicolás found out, if the plane was diverted to a different location.

But it was still too simple. Who would download an app like that if you can get that info and more from other apps? So I added a few things. First, thanks to wunderground.com API I added the weather of both departure and arrival airports of the flight, plus another small feature that is being able to listen to the air traffic controllers available from the mentioned airports. You can get all that from different apps, but I haven’t seen one with all those features combined so I thought it would be a cool app, and fun to develop.

It’s been on the Android Marketplace (AKA Google Play) for over 2 weeks now with a little over 100 downloads plus 200+ downloads from the Apple Marketplace in less than a week.

Here’s a little video of what the app looks like (on the Android emulator)


Like what you see? Download it now!

http://bit.ly/FMPAndroid

http://bit.ly/FMPiOS

p.s: Did I mention it is FREE!

Friday, August 06, 2010

Annoy Smarx from Windows Phone 7

Annoy Smarx is a web app that Steve Marx showed in Windows Azure Firestarter event. It is a web app that once you clicked on an image, Steve’s notebook wallpaper would change to the selected image. It was a pretty cool demo cause it showed you a good practical sample of AppFabric ServiceBus.

Last week I started playing around with the new Windows Phone 7 SDK, and I faced the problem I do when I start something new, “what should I code”? I t has to be simple cause I’m new to this stuff (I’m no too familiar with silverlight either) but not too simple… I hate the “Hello World!” sample. So I thought maybe I can create a client for the AnnoySmarx sample and so I did.

I liked it cause it a simple project, yet it has many cool features, like downloading blobs from Azure Storage, using a ListBox to show the images, handling the double tap event on Windows Phone 7 (there’s no OnDoubleTap event, so it might be a little more complicated than you think), and calling a rest service on ServiceBus which is actually running on my computer.

You’ll find all the resources you need at Steve’s post and the code for this client here.

I recorded a video of the app running on the emulator…

pretty cool uh?!


works-on-my-machine-starburst_3_thumb[1]

Wednesday, December 16, 2009

Windows Azure Web Storage Explorer

A few days ago I posted about my first useful Azure application, which is hosted on here http://storageexplorer.cloudapp.net http://azurestorage.azurewebsites.net. Today I just wanted to announce I just uploaded the code to a Google Code project called windowsazurewebstorageexplorer :)
It is a good (I think is good) example of both programming for the Windows Azure platform and programming against the Windows Azure Storage client API.
So feel free to download it and let me know what you think. (Make sure you download the Windows Azure tools for Visual Studio 2008 first)
As usual, this code is certified to apply every “works on my machine” standard :)
works-on-my-machine-starburst_3
Note: Too bad the December 2009 Windows Azure-Related Developer Challenges are for US only :(

Thursday, November 26, 2009

Mi first useful Azure application

Azure I’ve been plying around with Windows Azure for over a year now, I started with the CTP Microsoft showed at PDC 2008 and played with SQL Azure (FKA: SDS) and Windows Azure ever since.
But today I uploaded my first useful application. I’m currently working the on Genexus deployment project which includes being able to deploy Genexus-generated applications to every supported platform (including of course Windows Azure). More on that in a future post.
So, to deploy an application to Windows Azure programmatically, you have to tell Azure where your package is (by its url) so the best choice is to upload you package to the you Azure storage account. But the storage does not have a nice UI, so I thought first on creating an application to actually see what’s in my storage account and then decided to make it a web application, and allow other to use it.
I know, it does not have a great user interface. I’m not good at it, and I didn’t care for it at all for this version. But I’ll promise I’ll add some functionality and improve the user experience.
If you want to check it out go to http://storageexplorer.cloudapp.net http://azurestorage.azurewebsites.net enter your account name and your access key and see what’s in your storage account. (Read only, for now!)
So I’m happy to announce that this application not only “Works on my Machine” but it also does on the Windows Azure platform :)
WorksOnAzure
Edit: now with improved UI :)

Thursday, September 24, 2009

Great simple explanation on Windows Azure

During the last GeneXus International Meeting held in Montevideo, I had the chance to talk for a few minutes with Steve Marx from the Windows Azure team. Milano and I were telling him what we expect to do with GeneXus and the Windows Azure platform.

The first scenario is having a one-click deployment to the cloud (Windows Azure platform) of the GeneXus generated applications. Since the SQL Azure is now a relational database (good old SQL Server) our reorganization programs can generate the tables in the cloud. Also, our applications are 100% compatible with the Azure environment so you could upload you application to the Azure platform today.

The other scenario is running GeneXus Server from the Azure platform. In this scenario we still have a “little” work to do. So we were asking Steve about the worker roles since we want to be able to specify and generate in the Azure platform and I have doubts about what could actually run in this “cloud”, so Steve explained it to me in a great simple way. He said, imagine I have a Windows Server 2008 installed out of the box with the .net framework 3.5 and all the latest service packs. Everything you could put on a portable USB drive and run from there will run on the Azure platform. He added, everything that needs a setup wizard, writing on the registry, and stuff won’t work.

As I said, great yet simple explanation of what you could run on the Azure platform.

Friday, September 04, 2009

Microsoft .net Framework 2.0 Configuration missing?

SDKAfter my Windows7 install I needed to modify some of the machine.config properties thru the .net configuration utility and I could find it. It wasn’t where it used to be (Administrative Tools) and even the Snap-in on the MMC was not present.

After a little bit of search I realize I had to install the .net framework 2.0 SDK. I guess I did it a long time ago cause I don’t remember even doing it.

Here are the links.

http://www.microsoft.com/downloads/details.aspx?FamilyID=fe6f2099-b7b4-4f47-a244-c96d69c35dec&displaylang=en (32bits)

http://www.microsoft.com/downloads/details.aspx?familyid=1AEF6FCE-6E06-4B66-AFE4-9AAD3C835D3D&displaylang=en (64 bits)

We’re welcome :)

P.S: I needed it in order to deploy a web app to the Azure platform, that’s why I’m tagging this post as “cloud computing” related

Thursday, March 12, 2009

Forget what I said about SQL Data Services :(

Remember my two posts about Microsoft Sql Data Services (Starting Up With SDS and Writing Data To The Cloud)?, well, they are both wrong now. Not wrong but old.

This week I read on the SDS blog that they will introduce relational data base features (which I think it’s great) but also that they are removing the good old ACE model.

Read the original post here

Edit: I just read a new post from the SDS team were they answered a few questions from developers.

This is what I asked them and what they answered:

You say, you will no longer support the ACE model since Windows Azure has the same data model. If I’m going to put my application in Windows Azure (as I did) my best option for data is SDS, right? As I understood, Microsoft’s approach for cloud computing was Windows Azure as the platform for developers and SDS to store the data. And now you say I can use Windows Azure storage… what’s the difference? What’s the path to follow?

The best storage option for an Azure Services Platform application depends on your application. At a very high level, if you require the features of a relational database, use SDS. If you require basic blob or “schemaless” storage, then Windows Azure Storage is for you. Both will be key capabilities available to developers in the overall Azure Services platform.

Read the whole Q&A session here.