Wednesday, October 22, 2008

Android is now open source

Android is now available as open source. Check this site for more details.

It's worth nothing that, at the moment, Windows is not supported, while both Linux (Ubuntu) and Mac OS (running on Intel x86) are.

Monday, October 20, 2008

Red rose from my parents' garden


Sunday, October 12, 2008

youtube-leecher

Here we go! youtube-leecher has just landed on SourceForge and now it's available for download here.

But what's youtube-leecher actually? Well, youtube-leecher is a simple yet powerful Ruby program to download all YouTube videos found inside video containers.

So now what's a "video container"?
From youtube-leecher perspective, a video container can be basically a HTML page or a text file that contain references to YouTube videos.

Now, let's imagine you are surfing the Net and then you come up to a page that contains a lot of YouTube videos you are interested in. Let's say the page you are visiting is a video container. Now what if you need to download them all?

I know there are a lot of YouTube video downloaders all around, but in situations like those described above, well... downloading each video separately can be just time-consuming. So here started my work.

The idea was to have a tool that, given a list of video containers, could display the basic info about each video found and then proceed to download. Therefore, I developed youtube-leecher, devoting some hours of spare time to it. I worked on it mainly during the night, from 10pm to 2am, when a lot of silence boosts my focusing. After about a week, the first promising results came out.

It was an interesting experience for some reasons I'm going to tell you: first off, Ruby. Ruby is a concise and powerful language. It's funny to solve problems using it. It gives you... excitement.
Another reason that caught me was I discovered the way to download a YouTube video, given its ID. (If you don't know it, downloading a YouTube video is not just a matter of right-clicking on it and choosing the option "save as", like for an image).
Finally, I found the way to query YouTube using Data API to obtain basic info about a video. Now it's the time to share these info with you.

Let's start from downloading a YouTube video.

Just suppose you want to download a video whose ID is video_id. Firstly, you need to access to the web page that allows you to watch the video. This page corresponds to URL:
http://www.youtube.com/watch?v=video_id
Then you have to look inside the Javascript code of that page searching for the definition of object swfArgs (var swfArgs = ...). As you will see, this object has several members. The most important for our purposes are: l, sk, fmt_map, t. Take notice of the value assigned to each of them inside the Javascript object definition statement. (In the following, we will refer to them in boldface). To download the video, all you need to do is calling a URL composed this way:
http://www.youtube.com/get_video?video_id=video_id&l=l&sk=sk&fmt_map=fmt_map&t=t
If a parameter value is set to null, just don't express the corresponding pair parameter name=parameter value inside the URL: so, if for instance fmt_map is null, don't write the part fmt_map=fmt_map.

Note that the aforementioned URL allows you to get a video in flv (Flash) format. Sometimes the mp4 version of it is available too. Currently the program doesn't allow you to download videos in this format, but just for your information, to get a video as mp4 (when available) just append to URL the parameter fmt=18.

What about getting info on a specified YouTube video?

It’s very easy: given a video whose id is
video_id, just call the following URL:
http://gdata.youtube.com/feeds/api/videos?vq=video_id

As the reference documentation for Data API says, this URL will provide you with a RSS that contains all the info about videos that satisfy the query condition (in our case just a video: the one with with id = video_id)

Beware of videos whose ids start with the character – (dash). Calling the previous URL as stated before doesn’t work. To have info about these videos, you have to call the Data API URL without providing the first character (the dash).

Now... what's about the program?

Let's imagine you have downloaded it right now and you want to get all YouTube videos from http://www.xy.com. All you need to do is writing:
youtube-leecher http://www.xy.com
Of course, you can specify several options, such as the directory where to place downloaded videos, or the video naming, just to name a few.

... I don't want to bore you anymore. If you are interested in, you'll find all these info inside the full package.

Saturday, October 11, 2008

It is not enough for code to work

In my remaining spare time, I'm reading the book Clean Code by Robert C. Martin.

At the end of chapter 14, the
Conclusion states:

"
It is not enough for code to work. Code that works is often badly broken. Programmers who satisfy themselves with merely working code are behaving unprofessionally. They may fear that they don’t have time to improve the structure and design of their code, but I disagree. Nothing has a more profound and long-term degrading effect upon a development project than bad code. Bad schedules can be redone, bad requirements can be redesigned. Bad team dynamics can be repaired. But bad code rots and ferments, becoming an inexorable weight that drags the team down"

It happens that some programmers are motivated only by money and aren't really interested in doing a good job. As a result, these people are a kind of cancer for every project they work on: everytime they solve problems in quick and dirty ways, producing a lot crap and hiding themselves behind a lot of excuses. The truth is they are just
unprofessional.

Also, it happens that some project leaders are just ignoring these aspects and focusing mostly on evident short-term results, because only here and now count for them, as they are only interested to get a good appearance now: they don't solve problems really, they just paint a thin technological layer over problems and delude people with good-looking masquerades. As the time goes on, their projects become messes and they reveal themselves either
blind or unprepared at all, trying to carry on, day by day, without facing problems seriously.

Personal considerations aside... Clean Code is a must-read-book for all programmers and project leaders who want to invest in their professionality .

Javascript frameworks: Microsoft's and Nokia's choice

Ther's a lot of Javascript frameworks out there: Prototype, script.aculo.us, Dojo, YUI, Ext, Pi, MooTools, jQuery just to name a few.

I personally don't have any preference about them, but it's clearly an important signal the choice Microsoft and Nokia did recently: JQuery.

It's worth remembering that jQuery is not the only sponsored js framework: previously, IBM, Sun and Bea expressed their preference for Dojo, as you can see looking at the sponsor and partner mention in Dojo Foundation info page.

Xebia Web Framework Contest

What's the best Web Framework for developing RIA applications?

That's the question people at Xebia France tried to answer through their contest

Competitors were:
  • Flex 3
  • Silverlight beta 2
  • Google GWT
  • Echo 3
  • Java FX
The clear winner was Flex 3. It's worth noting that at the moment Java FX is still immature.