Brent Simmons, in his latest blog post talked about how iPad apps could work together, just like on Mac Os, apple scripts, services and apple events to allow applications to basically communicate with each others. The funny thing is this is actually possible on iPhone OS, but apparently not popular enough among developers to take advantage of that. This is even quite easy to do, as explained for example here. The idea is that an application can decide to open a URL, using the following method of UIApplication:
What is even funnier is that this method is the one used to give calls, access maps, open URL in browser etc. The part not very well explored is that any application can register a particular URL scheme so that it can also respond to the above method when called from another application. Brent Simmons thesis is that this technology could be used by applications to become real services that other applications can used. For example, according to him, you can decide to subsribe to a blog via NetNewsWire from a tweet you read in Twitterrific app. All of this looks very nice but what popped up in my mind is that this technlogy could be used in some major processes. I will only cover one in this post: Authentification
With Facebook recent support that they now support OAuth 2.0 and Twitter announce to discontinue Basic Authentification as of June 2010 in order to support only OAuth, it seems that this mode of authentification will be used by more and more apps. For those not familiar with the subject:
Basic Authentification on Twitter:
- You just give your Twitter username and password to an Tweeter app so that it can access twitter APIs
- The client will just use them to send GET requests to twitter with your username and password as arguments
- The limit of this is that you must trust this application (or a web application) to give it your password.
- When the app tries to connect to Twitter, it sends an access request to twitter
- The user is sent to “the real twitter” with a message like “thisapp wants to have access to your twitter account”
- Then the user tells twitter that thisapp is granted access or not to your twitter account
- Then twitter sends a message back to thisapp with an access token, in case the users accepts it.
- The access token is then used by the thisapp to access twitter, and the user can remove this access directly in twitter if needed
Oauth or similar authentification stuff have the great advantage that you don’t need to give away your password to any app because twitter is the only access authority.
On iPhone, OAuth is always a bit heavy because of the process itself of 1.connecting to the target site, 2. log in, 3.then grant access or not. For example, facebook has implemented a very nice library that allows any app to access facebook using facebook connect following OAuth scheme. iShareTunes uses this (but also shazam), and it looks like this:
- It can very well be falsified so that you think this is facebook but you are actually giving your password to the [malicious] app. Don’t forget that this happens within the application and you cannot be sure that the app uses the Facebook code as is.
- It is sooooo frustrating to have to type your username password all the time. Keyboard on mobiles are really not comfortable to use, and it is really important to minimize the usage of keyboard input from a user
The solution would be really simple! What if facebook implemented this inside its own application ? The process would them be:
- The user clicks on “post to Facebook” for example
- If signing in is necessary, the app calls Facebook using a URL scheme and its app_id already registered on Facebook (which is the case today)
- Facebook app launches and asks you to grant or not access to iShareTunes
- There is no doubt on the fact that you are actually asked by Facebook to grant access to iShareTunes, which is great.
- When you have accepted, Facebook launches iShareTunes with a URL specified in the original call.
All of this is actually not a protocol, it would just be an implementation of current login protocols like OAuth. The only thing facebook would need to do is to wrap this within its Facebook iPhone SDK.
Imagine that this logic could be implemented by major companies, like facebook, twitter itself (this can be done using a webapp interface with no problem), and also Google. Personally I am fed up with given my google account password to newsrack and google docs clients, because I would really not like to have my gmail account hacked. I would prefer having google managing this using OAuth.
To close this post I will formulate my own wishes regarding this question:
- Apple should just communicate much more on URL scheme for third part applications, even though it is already in the iPhone Programming Guide. This is really part of the multitasking story.
- Facebook, twitter, google to implement it ?
- Why not having a built in “apple connect” available using OAuth (or whatever), so that you don’t need to type your passwords all the time, they are just stored once and for all in keychain or more probably in the cloud.
A topic not so often elaborated about the app store is the effect of ranking. This post is only intended to emphasize this fact, and of course it is not sure that apple could find a better solution. The funny thing is that the success of an app (at least in the short term) depends much more on its ranking than on its quality. The app store as become such a big store that it is easy not to find the best app you are looking for, because no one will check all 50 or 100 results he will get. The page 1 effect (similar to being/not being on page 1 on google search results) is actually the main driver of the success of an app. To give an example, I am one of the developers of Virtual Metronome, which currently appears as 3rd result when you type metronome on French app store. We see big changes in our sales when the position of the app change from 7 to 6 (appearing in results for iPhone apps in iTunes) or 6 to 5 (when searching apps from the iPhone, you see 5 results without scrolling). What makes it a funny experiment is that our situation on US app store is radically different. We just don’t appear in any main results and our current position is rank 43.
As in many markets, this situation is in favor of:
- Pioneers: It is easy to get a good rank at the moment you are the first one on a given segment
- People already having a good rank: when your app already has a good ranking, the app store will automatically continue to offer your app with a much better visibility
An economist would tell you that this is common sense and that this effect is linked to several points:
- Such markets have increasing returns to scale. It becomes easier and easier to expand your market share when it is already big. The app store is quite similar to electricity or oil companies markets. As long as you become bigger, your costs decrease because it becomes very cheap (it is expensive to develop a web site, but it is almost free to offer it to a lot of users) to enhance you offer. These markets tend to become monopolies, as it is more optimal to have one company than two (the society has to pay fixed costs only once). Similarly, in any segment of the app store, big apps will become very big and eventually kill the others
- In a segment of the app store, if it reaches the equilibrium (no more new apps, stabilized offer), the best app for this segment will eventually have the first rank. But the app store has not reached any equilibrium, and it will probably not in the next few years.
So if you release an app on the app store and you believe it to be better than other competing ones, you have no other choice than trying to have a famous website make a buzz about your app. So in some way it must be revolutionary (relatively of the possibilities of the segment of metronomes for iPhone ;)) to be quickly powered on first page thanks to a lot of downloads in a short time.
A few weeks ago I introduced openpivot on this blog. It is a powerful command line utility to build pivot tables. Assume you have the following simple file :
company Name;year;NbEmployee;profit;sector Microsoft;2001;30000;1.5;IT Microsoft;2003;33001;1.5;IT Apple;2001;23001;1.5;IT Apple;2003;23001;1.5;IT Google;2001;43001;1.5;IT Google;2003;43001;1.5;IT
What a complex data set ! Pivot tables are very powerful tools allowing you to make summary of your data from the point of view of your choice. Suppose you want to have per year and per sector, the average number of employees accross all entries. Here it is implicit that these entries will be only different companies as here there is 1 line per company/year. Note also that there is only 1 sector. So as there are 2 different years represented, and only 1 sector, you will get 2 statistics. Doing this with openpivot is simple. You only need to describe what pivot table you want in an xml file configuration and it will look like this:
<?xml version="1.0" encoding="UTF-8"?> <problem> <defaultaccumulation value="sum"/> <columnlist> <col id="NbEmployee" accumulation"average"/> <col id="profit"/> <!-- will use default accumulation --> </columnlist> <rowsequence> <row id="year"/> <row id="sector"/> </rowsequence> </problem>
This configuration is almost the pivot table we want for our example, except that there is an additional column we want to have a statistics for. Note that what we call row here the variable sequence from which you want to pivot. There are taken into account in the order specified. Just like in excel, changing the order of variables will offer a diferent view on your data. You are now ready to have your pivot table, all you need is to call openpivot to compute this from your sample data :
% openpivot -p configfile.xml -o outputfile.csv inputfile.csv
Et voila ! This will write your pivot table in the outputfile.csv. Please drop me a line if you have problem to build openpivot. I have tested it on mac os 10.6 and various linux distribution, and it seemed to work
I am pleased to announce the release of my first open source project . Openpivot is designed to efficiently reproduce the functionality of MS excel pivot tables. The problem of MS excel is that old versions (priori to 2007) cannot deal files larger than 65 000 rows. At work a lot of people are always writing scripts to pre-aggregate the data they have to then be able to play with it in excel.
Openpivot was written in c++ an I have been focusing on performance so that it can been used in large amount of data processing.
The principle is that you have a [large] csv file with headers and you would like to have an aggregated view of this file. You may want to aggregate a certain column or see the sum of a certain columns by entry of another column.
Check it out on google code :
I will post a tutorial in a few days to show how to use it, and you will see that it is simple. So far it is a command line tool and only works on mac os and linux. I will try to have it compatible with windows when I get to a stable point