over 3 years ago

Favorite track from the great Passed Me By EP.

over 3 years ago

I recently had trouble getting RVM and Cron to work. The jobs always failed because RVM wasn"t loaded and thus none of the gems could be found. I found a good solution here.

This works fine. But to keep things consistent I changed it to take .rvmrc into account:

@weekly bash -l -c "cd app_root && source .rvmrc && rake do:things
over 3 years ago

I just released a little gem called TooShort (github.com, rubygems.org). (Version 0.1.3 is broken, please use >=0.1.4)

TooShort is a plugin that allows you to create persistent short URLs for your resources. And it works without any additional storage.

In this post I"d like to go into more detail about the inner workings of TooShort and short URL services in general.

tl;dr

For a basic explanation on how to use it have a look at the README.

How do URL shorteners work? (boldly simplified)

Regular URL shortening services like bit.ly or goo.gl are based on a very simple logic. The user gives them a URL and they return a short URL. I.e

http://confreaks.net/events/rubyconf2010 => http://bit.ly/cH2j2V

Since the URL needs to be as short as possible only the information that is absolutely necessary is "stored" in it. In this case the hash "cH2j2V", which is an identifier, necessary to look up the original URL from some kind of storage.

The hash is nothing more than the ID of the storage record for the original URL. Just instead of a base 10 number it is a number with base X. In the case of bit.ly it looks like base 62, which uses [0-9A-Za-z].

(Ruby only supports transformation for a maximum base of 36. I used rubyworks/radix for anything above that)

For 6 digits this gives you room for 56,800,235,583 entries. Not bad.

I first read about all of this here.

Why not use one of the existing URL shortener plugins?

The concept described above works great for publicly accessible URL shorteners since they need to shorten whatever URL comes along.

And most of the existing URL shortener plugins work the exact same way. They"ll consist of a database table to store the URLs, and a simple UI.

While this works fine it is way too much for what is essentially necessary.

In most cases where a URL shortener plugin is used the programmer just wants to provide his users with a short URL to one of his resources (profiles, posts, comments) to include in a tweet or somewhere else.

Hence, the kind of URLs that need to be shortened are not arbitrary. Most likely all of them are "identifiers" for your own resources (URI = Uniform Resource Identifier). For example: http://sens3.com/posts/tooshort-rubygem or http://sens3.com/posts/65

If the app that handles your resources is the same that handles the short URLs the process can be significantly simplified.

How does TooShort work?

This section explains the train of thought behind TooShort. If you want to know how to use it please have a look at the README.

We need to be able to identify any of our resources. So what we need to store is the class and the ID. I.e Post 64 or Comment 32

We use the same principle that all URL shorteners use to shorten the ID of our record. TooShort currently translates all IDs with base 36 which gives you room for 2,176,782,335 records for a 6-digit hash. That should be enough for most apps.

If we use TooShort for only one resource, the ID is all the information we need to look up an object.

I.e. http://2sh.de/2n9c, 2n9c translated to ID 123456. Since we know which resource we use short URLs for we can lookup the object. Done.

If we use TooShort for more than one resource we need a way to store the class in the hash as well. To do this TooShort lets you specify a scope:

As you can see, no database table is required since all the information we need is already stored in the URL. And once we have the object we can do whatever we want with it (redirect_to, render :json,....)

The second major benefit, besides not having to add another database table, is that we actually map the short URL to an object rather than another URL. That way, the short URLs are persistent even if you change your URL structure.

If you want to see TooShort in action, look right here at the bottom of this post. The short URL for it is http://sens3.com/1t .

"1t" translates to ID 65. And since we map the short URL to the actual @post object a simple redirect_to takes care of all the rest. More details on expanding short URLs can be found here.

Oh, and if you want to see the real Too $hort in action:

over 3 years ago

Really really good!

almost 4 years ago

I"m sure there are more sophisticated solutions but this one does the job.

Update: https://github.com/sens3/mewantrandom

almost 4 years ago
almost 4 years ago

Video/Music collective the29nov created a video for each song of Shed"s "The Traveller" (there"s a lot more on their YouTube page).


Here are the videos for my favorites from the album:



almost 4 years ago

I you have any uncertainty on why Node JS, Event Machine and such are so freakin" awesome WATCH THIS (only takes a minute)!

Also: Node.js is genuinely exciting

about 4 years ago
about 4 years ago