3g2, mp4a, less/more features and what I do to keep your data safe

New audio formats

media.io now supports .3g2 and .mp4a files which means that you can now convert .3g2 to .mp3.

Less features

A while ago, I announced that I had fixed the “start over” feature that “never actually worked.” As it turns out, the new version didn’t work either and more than doubled error rates for a week.

As a consequence, I removed that feature entirely.

More features

You can now share media.io on StumbleUpon (again) and Facebook. Also, if you love media.io, please like media.io on Facebook. Thanks!

Privacy at media.io

Occasionally, I get comments like this one through the user survey:

The tool's privacy policy isn't very clear. I used it for files that aren't very sensitive, privacy wise, but I would surely hesitate for more personal stuff.

Let me explain why you can trust your files to media.io.

When you upload a file, it is stored only in memory (a RAM disk). Once your file has been converted, it is immediately deleted from memory. The file it is converted to will be deleted after one hour.

Throughout media.io, there is no place I store the names of the files you upload. Log files typically look like this:

2012-05-16 00:35:07,340 INFO  MediaHttpSessionAttributeListener D438CC05A9317EC62EE8644F9E10CC95 destroyed, uploaded 2 files, 448663676 bytes, downloaded 2 files, 29064389 bytes
2012-05-16 00:35:07,340 INFO  MediaHttpSessionAttributeListener D438CC05A9317EC62EE8644F9E10CC95 Y wav wav pcm mp3 44100 s16le 2
2012-05-16 00:35:07,340 INFO  MediaHttpSessionAttributeListener D438CC05A9317EC62EE8644F9E10CC95 Y wav wav pcm mp3 44100 s16le 2

In this case, a visitor uploaded two WAV files (427 MB total) and successfully converted them to MP3 (27 MB total).

I store the quality settings that were used, but in way that makes it impossible to associate the settings to users. In other words, I cannot tell what quality settings were chosen by this user.

Notice the D438CC05A9317EC62EE8644F9E10CC95? That’s a so-called session ID. Since it’s unique to one visit by one user, it’s nearly impossible for an attacker to gain access to your files.

On disk, the original file name is replaced with something like 257225188875a7365e0df0c4c3df2be78c30a8be.mp3. This makes it impossible for me to see what files you are converting.

As for third-party services, I take privacy just as serious. Back when I was using ShareThis, I edited their widget code to prevent it from setting behavioural advertising third-party cookies. With Google Analytics, I set the cookie’s expiration date to 60 days (down from the default of two years). Also, I tell Google to anonymize your IP address prior to storage.

Improvements for MPEG-4 files

One thing that I find very important when improving product quality is to document improvements.

On 10th of March 2012, I changed the way media.io identifies files ending on .m4a, .mp4 and .3gp – audio formats which are handled by libavcodec.

Today, I compared the conversion statistics from April with February and the results show increased success rates for all formats:

m4a files

Month Conversion attempts Successful conversions Success rate
February 2012 15149 13751 90.77 %
April 2012 16070 14879 92.59 %

mp4 files

Month Conversion attempts Successful conversions Success rate
February 2012 5673 4652 82.00 %
April 2012 5468 4529 82.83 %

3gp files

Month Conversion attempts Successful conversions Success rate
February 2012 133 96 72.18 %
April 2012 302 261 86.42 %

As you can see, this change was successful in increasing success rates. Similar changes happen about once a month.

Convert .3ga files to MP3 and other news

Support for .3ga files

Support for .3ga files was requested several times and media.io now lets you convert .3ga to MP3 (and WAV, Ogg Vorbis and WMA).

Japanese Translation

media.io is now available in Japanese.

media.io on Facebook

I have started a little Facebook page about media.io. If you love media.io, please like media.io on Facebook.

Other new Features and Bug Fixes

Here is a list of what else is new since the last post:

  • Usability improvements. While the jQuery Impromptu plugin is awesome for what it does, putting the amount of information in an overlay that media.io did had one or two usability problems.
  • Support for Internet Explorer’s partial downloads. media.io now correctly supports Internet Explorer’s partially downloaded files – files that look like foo.mp3.d1234567.partial. Support for DownThemAll partial downloads will also be implemented.
  • The “Start over” feature never actually worked. “Start over” has now been implemented in a different way that is guaranteed to work.

That’s it for this time. Let me know if you have any questions for comments. The UserVoice forum is a good place.

New Audio Formats and Less Bugs

I rolled out a new version of media.io yesterday. Here is a list of things that have changed since the last post:

  • Better performance. Recently, I’ve gained control over space time using only my thoughts. By bending time around TCP/IP packets, I’ve made media.io even faster.
  • No more ShareThis. ShareThis wasn’t used much, but, like most widgets, had to be cleaned of privacy intrusions and I grew tired of maintaining code other than my own.
  • Bug fix for overly long file extensions. media.io would remove file extensions longer than eight characters.
  • More translations. I’ve filled out some gaps in the translations of media.io. Thanks to the translators.
  • Support for Qualcomm QCELP. Supporting .qcp and .qcelp file was a user suggestion. Now you can convert QCP to MP3.

That’s it for this time. Enjoy media.io!

Happy new year from media.io!

All the best from me for 2012! Let me mention some changes I’ve made to media.io since the last post.

What’s new?

  • You can now share media.io with your friends using ShareThis. Personally, I’m not a fan of 3rd party widgets and I had to clean up ShareThis’ widget to make it less invasive to your privacy and to make it load faster.
  • Korean translation. media.io is now available in Korean.
  • Romanian translation. media.io is now available in Romanian. You might ask yourself “why Korean and Romanian?” – it’s got to do with the love media.io gets from particular countries.
  • Less resampling. To compensate for flaws in oggenc, I was resampling files to 44100 Hz on the old VPS. This has now been removed, resulting in better quality Ogg Vorbis files.
  • Performance improvements. It might seem hard to achieve, but I’ve found one or two tricks that make media.io load even faster worldwide. Every second counts.
  • 100 % uptime in December 2011. While not really a new feature, the server media.io runs on has been rock solid in December with absolutely no downtime measured by Pingdom.

That’s it for now. Enjoy converting your music files!

Media-io-uptime-december-2011

New Audio Formats and more

Yesterday, I’ve released the following changes at media.io:

New Audio Formats

media.io now supports four more audio formats. These weren’t the most requested but they were easy to add.

  • Monkey’s Audio (.ape files)
  • Shorten (.shn files)
  • TwinVQ (.vqf files)
  • TrueAudio (.tta files)

Bug fixes

  • The list of formats was incorrectly shown to mobile devices. The jQuery plugin I use to display the list of audio formats wasn’t really working for mobile devices.
  • Uploads are now ordered correctly. Previously, new uploads would be added to the file list at its end. Now, new uploads are added at the beginning. This should help on the download page.

What else is new?

  • Italian translation. I’ve had media.io translated into Italian. I like having localized versions because they make things easier to many people.
  • Improved Polish translation. I had a colleague go over the Polish translation and improve it.

More is coming. I am still working on the “email/share” feature. If you know where to look, it’s already there.

Happy Birthday, media.io!

Another year has passed and media.io is now two years old. Here’s what happened since the last update:

A Dedicated Server for media.io

On 30th of August, I moved media.io to its own, super-powerful server. Here are some examples of how the move affected the service quality of media.io:

  • media.io loads 200 ms faster worldwide. Page generation at the old VPS took a while whereas the new server generates the pages in less than 20 ms. This has a nice impact on page loading speeds, as well as reducing the bounce rate by around 1 %.
  • More than 50 % less conversion errors. On the old VPS, media.io couldn’t convert many audio files because of the very old operating system that didn’t support newer audio formats such as AMR or WMV 9. On the new VPS which runs Ubuntu 11.04, I see over 50 % less conversion errors.
  • Faster conversions. The increased CPU power also shows in the time spent waiting on the conversion page which is reduced by around 6 %.

New Audio Formats

media.io now supports the AMR (Adaptive Multi-Rate Audio Codec) and 3GP (essentially MPEG-4 or Quicktime wrapped around several low-bandwidth audio codecs) formats. AMR especially has been a long-standing issue with many people trying to convert AMR.

What’s new?

  • Improved caching. Accidentally downloading the same file again should now cause it to be served from your browser’s cache if it is stored there.
  • Regression for DNS migrations. In case of a DNS migration, visitors contacting the new server would cause errors which I would get as emails.
  • Swedish translation. Jakob von Essen has donated a translation of media.io in Swedish. Many thanks!

Future Options

Even though I find it hard to guarantee anything, what are some of the things you’d like to see at media.io? I know multiple files are very popular, as is sending the download page to someone. I played with the idea of developing Chrome and Firefox extensions. Would this be of interest to you? Please speak up in the comments. Thanks.

Fast Websites make People happy - 6 Tricks to load faster than Google

[media.io] loads many times faster than google.com; your whole homepage has fully rendered before I’ve noticed the loading wheel in Firefox starts spinning.

While it’s true that media.io loads faster than Google in Sweden where the author of this quote is coming from, it’s sadly not true for all places on Earth – media.io is 200–300 ms slower in New Zealand and here and there in the USA, too.

On the other hand, you can see that web performance has a tremendous impact on the perception of your service so it really pays to invest in web performance.

6 Tricks to load faster than Google

While I cannot afford the infrastructure Google has in place, media.io’s performance benefits from the fact that Google’s homepage isn’t what it used to be: At more than 150 KB and over 10 HTTP requests – most of which are not well cacheable –, it’s easier than ever to be faster than Google. Here are five tricks I use to make media.io really fast.

  1. Inline all Style Sheets

    Best practices say that a CSS Style Sheet should be one external file. For most sites including media.io, I don’t care. Even if you have only one Style Sheet URL (which you should), the extra HTTP request adds valuable time to the time before the browser will start rendering anything, slowing down the first page view. Plus, the loading main document might cause the browser to open another socket to load the Style Sheet which adds time.

  2. Load all widgets post onload

    To make the StumbleUpon badge that I use load faster, it is inserted on the page only once the user starts moving its mouse over the page. With jQuery, this boils down to $(document).one('mousemove', function() { $('#widgetcontainer').html('...'); }).

  3. Put all files larger than 10 KB on a CDN

    The largest files on my websites are usually the JavaScript files. Since bandwidth drops with increasing distance to the server, I keep all files larger than 10 KB on a CDN. I have done a bit of research here. Note that 10 KB is just my gut feeling since a perfect value would be very difficult to calculate.

  4. Re-use the home page connection for small resources

    After downloading the home page, I load two more small resources through the still open connection: The CSS sprite and the favicon. While I could place the CSS sprite on the CDN, it would load in parallel with the JavaScript, forcing the browser to open a new connection. By loading the CSS sprite over a lower-bandwidth connection that’s already open, I save time over opening a new higher-bandwidth connection.

  5. Load all JavaScript asynchronously

    Loading JavaScript asynchronously is now a mainstream technique which has tremendous potential of increasing parallelism in web browsers, as well as reducing time to display. All JavaScript on media.io is loaded asynchronously. Of course, it is compressed by Closure Compiler first and served GZIP compressed.

  6. Inline on-page JavaScript

    JavaScript that is needed on all main pages (think JavaScript libraries) is concatenated into one JavaScript file. Extra JavaScript that is only needed on some pages is included on the page in an inline script block.

(download)
Media-io_waterfall

Support for Speex and more Updates

Support for Speex

media.io now supports the open-source Speex low-bandwidth, voice audio codec (files ending on .spx). This was a suggestion that I actually found easy to implement for once. In other words, you can now convert Speex to MP3.

New Dedicated Server

I’m currently setting up a server dedicated to media.io. The server is very powerful with an Intel i7 950 CPU, 24 GB of RAM and two SSDs. The VPS media.io runs on the at the moment is under very high load and the new server will ensure fast conversions and will also help against people being unable to connect to the site. Downloads should be faster, too.

Bug Fixes

  • A regression in the program execution code caused very few conversions to fail. This was resolved.

Apologies for today

Because of a configuration problem, uploads and downloads were saved to directories that weren’t cleaned which caused the disk on the server to fill up. At around 19:00 CEST, the last bits were allocated and it took me about half an hour to clean up the mess.