Why I never use URL shorteners on Twitter

When we told our guide that we didn’t want to go to all the tourist places he took us instead to the places where they take tourists who say that they don’t want to go to tourist places. These places are, of course, full of tourists. Which is not to say that we weren’t tourists every bit as much as the others, but it does highlight the irony that everything you go to see is changed by the very action of going to see it, which is the sort of problem which physicists have been wrestling with for most of this century.

— Douglas Adams in Last Chance to See

I am no scientific in any way, but still remember the importance of the above statement from my chemistry classes. As an example, when you want to test the pH of a liquid using a piece of litmus paper, you have to make sure that the amount of liquid is large enough to eliminate the effects of the pH change inducted by the piece of litmus paper. In other words, using litmus paper to test the pH degree of a drop of liquid has a huge error margin.

I have this principle in mind with most things I measure. The inclusion of a piece of JavaScript on the pages of my web site in order to have Google Analytics collect data about my visitors has an effect on the user experience: the page loads a little bit slower. However, Google’s infrastructure is fast enough so that the increase in load time is hardly noticeable.

URL shorteners

Many Twitter users also want to measure the efficiency and popularity of their tweets. The most common method of doing this is by using an intermediate server, the ‘URL shortener’, which registers each visit to the destination site.

In the first years of Twitter, URL shorteners such as bit.ly were necessary to prevent long URLs from using too many of the available 140 characters in a tweet. However, in 2011Twitter implemented their own URL shortener inside their service so that each URL, including the ones passed through another shortener, only use 20 characters. Therefore, URL shorteners are no longer necessary to actual shorten url’s, though I meet many Twitter users who believe it still is needed to prevent links from using too many characters.

Another false believe about URL shorteners is that it’s the only method to get metrics about the popularity of each tweet. Once again, this was true in the past, but nowadays Twitter gives excellent statistics about the number of favourites, retweets and answers to each tweet on their statistics page.

The biggest difference between Twitter’s own shortener and external services is transparency. When you see a tweet with a link in it, it will show (the beginning of) the URL of the shortening service in case of external shorteners and the URL of the actual page you’re linking to if you don’t use an external shortener — and therefore just Twitter’s service. See the two test tweets further below in this article for the actual differences.

On a side note, using a URL shortener is adding an additional Single Point of Failure as each visitor clicking a link inside your tweet has to make two hops: first he visits Twitter to obtain the shortened URL, then he visits the site of the URL shortener’s service in order to get the actual address of the page you’re linking to and finally he visits the actual site. Without a shortener, the middle step is skipped.

Since tweets are so short and give little context, I assumed that the actual link people see in tweets makes a lot of difference when deciding to click or not. My expectation was that tweets with shortened links get clicked less than tweets showing the original link. To confirm this hypothesis, I decided to craft an experiment.


For conducting the test, I selected a page with a nice viral title that I published a few years ago. I use Google Analytics on my site to measure traffic and labelled the link with campaign parameters, so I could separate the visitors clicking the links in the tweets from the regular visitors: ?utm_source=twitter&utm_medium=social&utm_content=NoShortener&utm_campaign=TestShortener

I prepared two versions of my tweet: one with the link shortened by bit.ly and another one linking directly to the article.

I decided that I had to publish the tweets multiple times over the course of a week in order to maximise exposure and got a significant number of clicks. For that purpose I used the Tweko service, which was invoked by adding the #tweko hashtag to the tweet. Previously I had configured Tweko for the two twitter accounts used in this test to repeat each tweet nine times with a ten hour interval betuneen each tweet.

Of course, the likelihood of receiving clicks decreases each time the tweet is published, as many followers will already have seen the tweet before. I decided to give the expected underdog in this experiment — the tweet with the shortened URL — a small advantage by starting the publishing schedule with the shortened version of the tweet.

Tweet 1 — Shortener:

Tweet 2 — No Shortener:

The results

After a few weeks I decided to have a look at the statistics in Google Analytics. I went to the report that shows the visits per campaign, and clicked on the campaign named ‘TestShortener’ to focus only on the visits originating from my test. Then I configured the field ‘ad content’ as the secondary dimension of the report, to get the numbers for each of the two versions. These are the results I found:

Ad content Visits
Shortener 382
NoShortener 438
Total 820

Clearly, the tweets that did not use a URL shortener received more visits that the shortened version, but is this a significant difference? Is it possible that this difference is caused by random fluctuations? In statistics, this question is usually answered by running the Chi-squared test. This test gives a confidence level, which is the percent of the time each sample’s success rate will fall within the reported confidence interval if the experiment is repeated many times. It is also the percent of the time no difference will be detected between the two groups, assuming no difference exists.

In order to calculate the confidence level, I need two numbers for each sample: the number of successes and the total number of trials. I already have the number of successes, the number of visits I received on my page shown in the table above. The total number of trials is the number of people who received the tweets. Since I have sent the two different tweets to exactly the same group, I can assume that the sample size is the same for both samples. The few people who started following me or who left me in the hours between the tweets can safely be ignored. So we can say that the total number of trials is the sum of the followers of both Twitter accounts used in the experiment. Lets calculate:

Ad content # successes # trials Confidence interval
Shortener 382 7000 4.9% – 6%
NoShortener 438 7000 5.7% – 6.8%

The verdict is that the ‘NoShortener’ sample group is more successful (p = 0.0439).

My conclusion

For me the results are clear, this small test confirmed my hypothesis. Since using a URL shortener does not have any benefits for me and it even reduces clicks on the links I tweet, I will not use them anymore.

Why I never use URL shorteners on Twitter

Hidden configuration options for Omnifocus 2

Version 2 of the popular OS X task management application Omnifocus is about to be released today. I have been testing the beta versions for some time and have seen how the software matured little by little.

Version 2 defers from the previous version in almost every aspect; it contains new features such as the review and forecast perspectives and also the user interface has been modernised. Especially the latter gave rise to many discussions on the support forums about the data density of the new design. Eventually, the Omni Group published a hack to change the layout of the task list back to a table of tasks more similar to Omnifocus 1.

This made me wonder what other ‘secret’ configuration options exist. So far, I have been able to compile the following list.

All configuration options are activated by opening a special URL starting with omnifocus:///change-preference in your browser, which opens Omnifocus and applies the configuration. The URLs in the list are clickable to apply the configuration directly form this post.

Alternate layout

Use omnifocus:///change-preference?ContentLayout=compact to switch to the compact layout, which only uses one line per task. Note that this layout is experimental and still has some issues. To return to the default layout you can use omnifocus:///change-preference?ContentLayout. The alternative layout looks like this:

Alternative layout for Omnifocus

Hide empty contexts in the main outline

If you’re in a perspective grouped by context, you’ll see that empty perspectives will also show up in the main outline, to mike it easier to reassign tasks by dragging them to another context. If you would rather not see them, you can remove the empty contexts from the main outline with omnifocus:///change-preference?MainOutlineIncludesEmptyContexts=false. You can also pass the parameter true to reactivate the empty contexts.

Hide On Hold projects in forecast view

If you put a project on hold, it’s tasks will still show up in the forecast view. The reasoning is that even though the project is on hold, its tasks still have a due date. If you prefer not to see those tasks on the forecast view, disable them using omnifocus:///change-preference?ForecastIncludesProjectsOnHold=false. Use omnifocus:///change-preference?ForecastIncludesProjectsOnHold to restore the default setting.

Reorganise the side bar

This ‘hack’ is a little bit more complicated. The issue was that the order of the perspectives in the sidebar could not be reorganised. Note that in the final release the default perspectives behave just like any other perspective, and can be organised in any way you like it. However, if you want to freak out with URL schemes, this is the way:

The default perspectives are on top (Inbox, Projects, Contexts…), followed by any starred perspectives. To add another perspective, you first have to star the perspective and open the URL omnifocus:///change-preference?SidebarTabs to get a list of the current tabs. Note the ID of the starred perspective, hdDT8UyDkVe in this case:

Omnifocus tab listing

Once you know the ID of your custom perspective, you can define the order of the tabs with omnifocus:///change-preference?SidebarTabs=(hdDT8UyDkVe,ForecastTab,InboxTab)

Send clippings directly to the inbox

Whenever you clip something from another application, the Quick Entry window shows up so you can specify some further meta-information about the task — project, context, dates… — and change the task description. If you would rather send the clipped information directly to the Omnifocus inbox, use the configuration URL omnifocus:///change-preference?ClippingsGoToQuickEntry=false.

Sync settings

There are two setting for configuring the synchronisation interval. First, you can set the maximum sync time –in seconds — with omnifocus:///change-preference?MaximumTimeBetweenSync=600 (this sets the maximum to 10 minutes). Use omnifocus:///change-preference?MaximumTimeBetweenSync to restore the default setting of one hour.

The other option is for setting how long after making an edit Omnifocus should synchronise. The URL is omnifocus:///change-preference?TimeFromFirstEditToSync=15 and omnifocus:///change-preference?TimeFromFirstEditToSync to get back to the default setting of one minute.

Toolbar colour

If you have setup your mac to use the ‘Graphite’ appearance instead of the default ‘Blue’ theme, Omnifocus will have black and white icons in the toolbar instead of the modern coloured icons. If you prefer this to be different, you can use omnifocus:///change-preference?ToolbarItemTint=aqua to force the use of coloured buttons or omnifocus:///change-preference?ToolbarItemTint=graphite to get the black and white icons in the toolbar. As usual, with omnifocus:///change-preference?ToolbarItemTint you’ll go back to the default setting.

Set defer date when dragging a task in Forecast view

This option was contributed by Colter in the comments of this post. When in Forecast view, you can drag a task to another date in the calendar to change its due date. You can change the defer date instead by holding the ⌘ key. If you would like to change the defer date by default, you can use the URL omnifocus:///change-preference?ForecastDragSetsDeferDate=true.

Change the project hierarchy separator character

If you’re using folders, OmniFocus will show the complete path in the project selection drop-down list using a colon as the hierarchy separation character, e.g. Personal : Finance. You can configure the character used to separate the project hierarchy with the URL omnifocus:///change-setting?OFMNamedObjectHierarchicalNameSeparator=%20:%20 (note that %20 is the code for a space).

Please leave a comment if you know of any other configuration option for Omnifocus 2; I will keep this post up-to-date.

Hidden configuration options for Omnifocus 2

Concerns about my iCloud account

In preparation for the iCloud launch in autumn, I have been thinking about its impact on my use of Apple services. Our family uses several iDevices and the better syncing options offered by iCloud will be very welcome. However, I have some concerns about purchasing and synching.

At this moment I use two different accounts to access Apple’s services: I have a regular Apple ID which I use for purchasing Apps and home sharing media, and I also have a MobileMe account for synching data between my Macbook and the iPhone. The MobileMe account is used just by me, while all iDevices share the same Apple ID for the obvious reason that I don’t want to purchase apps twice. Furthermore, by using two separate accounts we are able to access all iTunes libraries from the AppleTV, without being obliged to synchronize calendars as well, as those are being synched using another account. In short: the Apple ID identifies the family/home, while MobileMe is used to identify a person.

When Apple activates iCloud, my Apple ID will also become the token for synching information, which is a problem for me. I would like to continue using the Apple ID to make purchases for the whole family and stream media between the devices of our family, while on the other hand each member needs a personal ID for synching calendars, mail accounts and other personal data. When Apple closes MobileMe I will be forced to sync my calendar through iCloud, but my wife has no interest at all in my appointments (and vice versa).

As far as I have been able to find out, iCloud will not offer such granularity. I assume that my situation is quite common and that many families with several devices will face the same issue. Does anybody know a solution for this problem, or do we simply have to wait for the final version of iCloud and hope that Apple has already a solution?

Concerns about my iCloud account

Google’s 2-step verification horror

Google has released a new security measure to help you protect your ever increasing amount of data stored on their servers. This 2-step authentication means that when you log in to your Google account with your username and password, you will receive a code by SMS message. Only after entering this code you will be able to get to your data.

Even though I don’t have a lot of data on Google’s servers (I hardly ever use Gmail or Google Docs, mainly just Google Reader) I thought that it was a good idea to activate this service — better safe than sorry, right?

Activating 2-step verification

So I went ahead and activated the service. The procedure is fairly easy: First you switch the service on, then you configure your mobile phone number and activate it with the code you receive by SMS. Finally you have the possibility to print out a list of backup verification codes. Google advices you to keep this list in your wallet, which I found very strange: if you loose your wallet, you give the lucky ‘finder’ the possibility to get into your Google account without needing the SMS confirmation.

I immediately tried it out by opening Google Reader, and yes: after I gave my Google credentials I received a SMS message with a new code from Google. They appear to be sending them from the UK, which means that –with the current roaming rates in Europe– they are willing to spend a small fortune on better security. When I entered the verification code I noticed that fortunately there is a possibility to remember the verification on a computer for 30 days. It worked!

External applications

Satisfied I closed the browser Window and went on with other issues. Later that day I opened Reeder on my iPhone to read some news, but got an error. It appears that by activating the 2-step verification all access from external applications is blocked automatically. To re-enable access to your Google account from a third-party application, you will have to generate a special password for that application only:

Some mobile or desktop applications that work outside of a browser aren’t yet compatible with 2-step verification. These applications are hard-coded to ask for a username and password, and do not prompt for a verification code. If you want one of these applications to access your Google Account, you must enter an application-specific password, not your Google Account password, when asked for a password.

I went ahead and generated passwords for IMAP access, Reeder for iPhone, FlipBook, Reeder for iPad, Feedly, Google Earth and a bunch of other applications. After generating each password, Google warns you that you will not be able to see the password anymore once you close the screen, so I made sure to configure each application immediately and test it before going on with the next application.

Does it make sense?

After a while I started wondering what the heck I was doing. On one side I had made my account more secure, because whenever I access my account through the browser I have to give the SMS verification code. However, if instead of the browser I access my data through an external application, I can choose from a whole list of valid passwords for my account. API access went from a single username/password combination to a whole bunch of passwords valid for the same username.

I know that Google sees the browser window as the principal interface to their services, and for users who work that way, the 2-step notification process is quite an improvement. However, I see the browser as just one of the many interfaces/applications I use to access my data on Google’s servers. To me it makes no sense that –even though one application increased its security– the security level for all other applications is significantly lowered.

I finally disabled the 2-step notification for my Google account, when I found out that I can’t use Google anymore as my OpenID provider, since I am required to generate a new password for each blog or web –those that require registration– I want to comment on. Too much of a hassle to be functional…

Google’s 2-step verification horror

Welcome back to brain tags!

After some weeks of work –though I only spend 1-2 hours every week on this project– I am re-releasing brain tags. I have lost the count of the version numbers of this blog, but is should probably the 6th or 7th overhaul. I am very excited about it, as I see it as a fresh start with some important changes:

A new CMS

After many, many years, I have exported all data from my old Movable Type Pro installation, and installed a fresh copy of Melody on a fresh new account. For those who are not familiar with those two applications, Melody is a fork Movable Type version 4.

I choose to move to Melody for several reasons. First of all, I was not completely happy with the latest versions of Movable Type, which added a lot of unneeded bloat, such as the possibility to create sites. In fact, Movable Type obliges you to first create a site to be able to create a weblog. But the biggest reason is the fact that support for Movable Type is decreasing, now that the owner is focussed on advertising, and development on Movable Type takes place in Japan.

Melody was created by two former employees of Six Apart –one of them was product manager for Movable Type– and a very active community member. They have already been able to solve a lot of the main issues in Movable Type in Melody, and I simply trust more in them than in the current developers of Movable Type.

A final note on the change: while both Melody and Movable Type can handle multiple blogs and I traditionally have managed all my blogs from a single installation, I am now separating them again. This way I can make my customizations without making my other blogs more complex. It also gives me a way to test out things.

A new theme

Melody comes with a very nice minimalistic theme as the default theme, DePo Clean, and I decided to keep it. For the moment I haven’t personalized the templates, though I did fix some minor bugs in the theme. Once I figure out how to make diff files, I will probably submit the patches to the Melody developers.

I do have a list of wishes and desires for the theme, so don’t be surprised when things change over time.

Comments are disabled

Even though the combined Akismet and Typepad spam filters are very effective, I still had to deal with several comments in the moderation queue every week. Since nowadays there are plenty of other ways to express your opinion, I have disabled the comments function. If you want to share your opinion, feel free to send me a 6 or mail.

Less images, more text

When importing the old entries, I left out all decorational images. In the last years, I always accompanied each post with an image to make the post more attractive. Those images are now gone, you will only find images which help making my point. I want the focus to be on my words, and will also try to write longer, more thoughtful posts from now on.

I am very excited about this new start. What do you think?

Welcome back to brain tags!

Brain Tags migration

Starting Monday May 23rd I will be moving this blog to a [new platform][1] on a new server. This migration serves as a test for the migration of [El Canasto][2] and I will be trying out many different things in order to make the migration of [El Canasto][2] run smoothly.
Since my available time is limited and I can only dedicate a few hours per week to this test, I expect **Brain Tags** to be down during a significant period of time (read: days).
The reason for moving from my beloved [Movable Type Pro][3] to [Melody][1] (a fork of MT) is simply the fact that most of the community effort has moved to Melody and I expect a better support in the future now that the development of MT only takes place in Japan.
[1]: http://openmelody.org/
[2]: http://canasto.es/
[3]: http://movabletype.com/

Brain Tags migration

On files and applications

The mobile revolution is shaking up the software market. Old paradigms (bigger is better) disappear and new ones are created.
One area where these changes are specifically noticeable is the relation between applications and the file system.
Most computing environments are in what I call the second generation, where the file system is the dominant part of this relation. The file is the centre of our activities. To start working we open a file and the associated application is automatically launched. We only start application directly when we want to create a new file.
This has not always been like this: in the past (first generation) the applications were the core, where applications gave access to data on the mainframe or in databases. There are some situations where we work in applications without having any idea of the underlying file- or database structure. E-mail is one of the uses of this system.
Like I said, the mobile revolution is changing this again. Mobile operating systems as iOS, Symbian and Android give very limited access to the file system and force us back to the mainframe era. Even the _desktop_ operating systems don’t give you direct access to the file system anymore, but rather a virtual system mounted on top of the real file system.
It looks like file system abstraction is the future, but I don’t think that applications will be the centre of our universe. The operating system of the future won’t be centred on files or applications, but will use processes and tasks as the leading parameter.
In the operating system of the future, you will be able to say that you want to write, and a simple text editor will open. The moment you access more advanced editing functions, the application will automatically switch to another editing engine. Of course, you text is automatically saved and can be used in many ways.
In the future, operating systems will actually help you being productive. Trust me.

On files and applications