Monday, December 29, 2008

Flex

For those who are still in doubt about how powerful Flex/AIR are, I have here a little example that shows how to build a generic RSS reader in just about a hundred of line of code.


This program acquires the news from a user-provided RSS source, lists all the news and allows the user to dig into each news double clicking on it. It's based on the AS xml syndication library as3syndicationlib.
... I have some doubts about the feasibility of such a simple thing in JavaFX.

;-)

Monday, December 08, 2008

Why I'm perplexed about JavaFX

JavaFX 1.0 is finally out.
I took a look at the official website and I saw a lot of good-looking gadgets: a video player, a puzzle whose pieces are parts of a video, a stopwatch and a lot more.

It's seems JavaFX wants to compete with Adobe Flash in bringing some special effect to the user's desktop.

Frankly and honestly, Sun's solution doesn't impress me much: still applets are loading s-l-o-w-l-y, too slow compared with Flash counterparts. Moreover Linux is not supported yet. I see that JavaFX site shows only special effects, like rotating cubes and so on, but I don't see any "serious" component that could help the programmer to display and manage database data easily: that means, for instance, that if you want to display a resultset, JavaFX doesn't provide you with some kind of datagrid component (à la Flex) and you have to build your own by yourself.

Maybe my conclusion is too severe, but I think that from a user point of view Flash is more responsive than JavaFX and for a developer interested in building enterprise-class RIA applications JavaFX is just inadequate compared with Flex.

Sunday, November 23, 2008

How to configure ToggleNic.exe to work with Windows XP italian

ToggleNic is a useful Windows tool for enabling and disabling network connections from the command prompt. It can be downloaded here.

After installation, ToggleNic is configured (by default) to run with the english version of Windows: in other words, it doesn't work with localized Windows version, like mine (italian).

In order to let it work with a localized Windows version, all you need to do is to modify the file ToggleNic.exe.config found inside ToggleNic installation folder.

This config file is a simple XML-based configuration file. Specifically, you need to look at (and change properly) these settings:
  • NetworkConnectionsFolderName
  • EnableVerbName
  • DisableVerbName
These items respectively collect: the localized names of network connections folder, the menu item corresponding to "enable connection" and the menu item corresponding to "disable connection". Obviously, for a localized Windows version, they cannot be like those in the default configuration.

For the italian version of Windows XP, I've checked the following values work.
  • NetworkConnectionsFolderName: Connessioni di rete
  • EnableVerbName: &Abilita
  • DisableVerbName: &Disabilita

Please notice the & at the start of EnableVerbName and DisableVerbName: it's because menu items are provided with a keybord shortcut. (That's what &amp is meaning for).

A useful site for getting info on Windows processes

Sometimes it happens you don't know what a Windows running process is needed to or whether it's a normal Windows process or something different.

The Process Library site has a huge database of information about processes. So when in dubt...

When a good antivirus turns into a terrible virus

Some nights ago I was involved in an unexpected adventure: back at home after a day of work, I turned on my Windows XP laptop and after logging in I was alerted by AVG antivirus 8 Free edition that the file "user32.dll" contained a troian.

Although quite surprised, I didn't hesitate a moment and let my antivirus move the infected file into its vault.

It was a really bad move, because, after restarting, I wasn't able to start Windows XP anymore: a blue screen of death appeared regularly shortly after each restart and the computer booted up again coming at the blue screen of death and then restarting again.

I fought against this problem for about one hour, trying to find a way to get my "user32.dll" back in the right place. Finally, I came up with a solution: I booted from a Linux-live distro, then I copied the user32.dll under system32\dllcache into system32.

Now, thanks to Linux my Windows XP is back again. It's frightening to think that a good antivirus - as I consider AVG - turned suddenly into a terrible virus. For more information, check this out.

BTW during my Linux session I noticed Firefox is about 1.5x faster than the same version under Windows. I'm asking myself why I'm still using Windows...

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.

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.

Tuesday, September 30, 2008

puts "Hello world"

Hello everybody from the magical world of Ruby: that's at least the meaning of the title...

Guess what? I'm learning Ruby in my spare time and I'm having a lot of fun. Well, I find this language concise, fascinating and powerful. So I strongly suggest every programmer that codes for fun (just like me) to give it a try. See the official website for more information.

For those of you who are guessing why I came to Ruby, I have two answers. The first is funny: after watching Giles Bowkett's fantastic presentation on his project Archeopterix, I was curious about the language he used for that project. The second is more serious: I'd like to experiment all the power of Ruby on Rails, a framework for developing web applications quicky. (As you probably know, I come from J2EE). So, before learning Rails, I need to understand Ruby.

Yesterday night I was trying to do a program in Ruby that given a URL or a file finds all the Youtube videos referenced inside it. After getting these information, I then added some logic to download them automatically. BTW I learned a lot of things about downloading a video from Youtube, given his ID. Also I used Youtube Data API in order to get some info about each video.

I will post it soon. Stay tuned!