My pretty face [ László Monda's Blog ]
Exploring the cyberspace, one quadrant at a time!

Archive for the 'Ultimate Commander' Category

ultimatecommander.org: Content Migrated

Tuesday, March 14th, 2006

I've just finished migrating all the SF project web content to http://ultimatecommander.org. The site is hosted by http://mediacenter.hu, which seems to be a very good hosting provider regarding how much value it provides in exchange for only 120$ per year. Project demoing flash screencasts shouldn't be slow anymore, not even from foreign countries.

I will migrate the whole monda.hu domain to the new server as soon as they finished setting up the DNS. As a side effect of this, monda.hu will be offline for a while, so you may not be able to read my blog for a day or two. I hope you can live with that. ;-)

I'd like to thank my mother for financing the new hosting service and the ultimatecommander.org domain. I don't have any jobs right now, because I decided to work on UC, gain experience, and create something really exceptional in this respect. She's a furniture painting folk artist and you can find her home page at http://monda.hu/klara.

UC Made Coding Guidelines Compliant

Tuesday, March 14th, 2006

I've just finished editing the Coding Guidelines document and comitting the modified source that complies to the holy guidelines.

It's a small, but significiant quality improvement that should be followed by every projects.

UC Windows Port

Monday, March 13th, 2006

I’ve demoed UC to Vilmos Bilicki, who is my mentor in relation with my master thesis project (which is UC). He was very enthusiastic and told me that he’d use UC if it ran on Windows. I was thinking about porting UC to Windows even before, but he was giving me a further push, so I did a try this time.

I had a talk with Francisco T. Martinez a la Paco on #Mono. He directed me to his expermiental Windows Mono Installer which incorporates the Gnome bindings, not just Gtk# as the official installer. Using his stuff it was easy to port UC to Windows. Well I’ve not entirely ported it, just to make the GUI work, but it’s nice to see how fine it looks on Windows:

Ultimate Commander Windows port screenshot

He told me that the extra bindings of his expermental installer will be a part of the official installer soon. Very nice!

I’ll try to maintain UC in the future respecting the Windows port. I think it worths the additional maintenance burden which is not too heavy with Mono.

Ultimate Commander: Project Site Renewal

Friday, March 10th, 2006

I’ve just migrated all the content to the new project site I’ve set up on SourceForge. This was one of the subtasks I didn’t really enjoy, because these kinds of administrations generally bore and frustrate the hell out of me.

The most exciting part of this job was making a customized style for MediaWiki which powers the site. As a useful side effect, I learned CSS which I find very elegant. I used the FratMan skin as a starting point and modelled the general site layout after the Beagle Wiki. It’s a really usable and simple layout.

I’ve even put up the flash screencast and all the related media to the new site. To be honest this was the first reason I moved the site to SourceForge, because it has better bandwidth, but MediaWiki has additional virtues, of course.

To document my glorious deed for the future generations, here is a screenshot of the old site:

The old site of Ultimate CommanderAnd this is the new one:

The new site of Ultimate Commander

I honestly hope that you can feel the difference. If you can’t, then there is something wrong with you and you’re strange and weird.

Ultimate Commander: Listing Configuration Implemented

Tuesday, February 28th, 2006

It’s been a while since I’ve blogged about UC. That was because I had to do some major refactorizations which I couldn’t foresee, but I feel very satisfied with the end result even if the development progress is slower than I planned.

Let’s see some big picture things of the current state of UC:

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
laci@whisper:~/projects/uc$ wc *.cs
  137   439  4011 AttributeIcons.cs
  450  1276 10411 File.cs
   51    98   973 Frame.cs
   26    45   467 GladeContainer.cs
   19    41   464 GladeWidget.cs
   88   169  1770 MainWindow.cs
  338   753  8033 Panel.cs
   94   189  2266 PanelColumn.cs
  237   578  7873 PanelColumnInfo.cs
   30    84   732 PanelConfigurator.cs
   77   179  1424 PanelFrame.cs
  247   523  6734 PanelListingConfigurator.cs
   36    63   615 PanelSortingConfigurator.cs
  121   248  2251 Slot.cs
   29    58   629 UltimateCommander.cs
   38    73   635 View.cs
 2018  4816 49288 total

Here’s how the class hierarchy looks like:

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
+-+ Object
  |
  +-+ AttributeIcons
  |
  +-+ File
  |
  +-+ MainWindow
  |
  +-+ PanelColumnInfo
  |
  +-+ Gtk.HBox
  | |
  | +-+ GladeWidget
  | |
  | +-+ GladeContainer
  | |
  | +-+ Slot
  | |
  | +-+ View
  |   |
  |   +-+ Panel
  |   |
  |   +-+ PanelConfigurator
  |     |
  |     +-+ PanelListingConfigurator
  |     |
  |     +-+ PanelSortingConfigurator
  |
  +-+ Gtk.NoteBook
  | |
  | +-+ Frame
  |   |
  |   +-+ PanelFrame
  |
  +-+ Gtk.TreeViewColumn
    |
    +-+ PanelColumn

Wait, here comes the best part: Ladies and Gentlemen, the first screencast of the Ultimate Commander!

As a side note, UC starts up considerably faster, but capturing takes up much CPU time.

Thumbnailing Movies in the Right Way

Friday, February 3rd, 2006

About Thumbnailing in General

Thumbnailing is a very nice feature, although I think it’s not essentially usable in case of most formats. Speaking of audio files, it’s clearly impossible, of course and textual files generally don’t differ that much that one could efficiently differentiate them based on their thumbnails. Image files however, have an obvious relevance here and it’s pretty straightforward to thumbnail all of them. The last type, which really hits home for me are movies.

Why Movie Thumbnails Suck?

Movies are special kinds of animals in the context of thumbnailing, because picking up a random image out of a movie stream generally results in an irrelevant image. We cannot really associate a randomly selected image with the movie in our mind, because statistically it’s a kind of image that loosely relates to the content of the actual movie. Imagine what it’s like to see an ocean with a boat, an average american house, a city from 10 000 feet, or a cast list as a thumbnail? Could you tell me which movie it’s taken from? I can hardly think so.

Unfortunately every desktops that exist today operate by this policy. Windows XP captures the first frame of every movie file as its thumbnail. Nautilus essentially does the same, but it captures an image that is at the 1/3th of the movie, which is a smarter policy I guess considering that most movies start with black screen.

Best Case Scenario

So what would be the best scenario for thumbnailing movie files? The whole point of movie thumbnails is that the user can associate the thumbnail with the movie it belongs to, so the user must be provided with an interface which makes him able to associate a thumbnail that is actually relevant to him. I see two possibilities for achiving this goal:

  1. Implement a mini movie player that provides a way to capture a frame into a thumbnail. Unfortunately GStreamer isn’t wrapped in Mono yet, so I cannot implement this solution in UC.
  2. Randomly capture more images of the movie so that the user can choose of them the one which he likes the best. If he doesn’t like either of them, he can recapture the same number of images any time. This solution has the undisputable advantage that it can be easily implemented as a command line application as you’ll see below. I also think it’s a more convenient approach.

Thumbnailing in GNOME

Several months ago using Nautilus I was impressed by its movie thumbnailing feature considering how well it handled different movie formats. Later when I played with gconf-editor, I could easily understand the thumbnailing infrastructure of GNOME. Under the /desktop/gnome/thumbnailers gconf key, one can find all the thumbnailing applications GNOME applications fork to get the related thumbnail file of the associated MIME type.

The New Way of Movie Thumbnailing

I noticed that every MIME movie file is referenced to gnome-video-thumbnailer on my system which is symlinked to totem-video-thumbnailer. In the next moment I was fetching the source of Totem. Totem can be compiled with two backends: GStreamer and xine, but for some wicked reasons, only xine worked well for me. As soon as I saw how well it worked I started to implement the above “Best Case Scenario #2” features. So here’s what I’ve done a la ChangeLog:

  • Separate the necessary files that are required to build totem-video-thumbnailer with the xine backend and put them in one flat directory.
  • Replace configure with Makefile.
  • Fix bug in bacon-video-widget-xine.c to require glib 2.10.0 instead of glib 2.8.10 for calling g_async_queue_sort().
  • Gracefully rename totem-video-thumbnailer to depot-video-thumbnailer.
  • Remove gstreamer hacks from depot-video-thumbnailer.c since they’re not used with xine.
  • Use bilinear filtering instead of nearest neighbor sampling for resizing movie frames and images for better quality.
  • Implement randomized mass image capturing and modify the CLI accordingly.

I’ve just committed this babe to the UC CVS. You can find it in the depot-video-thumbnailer directory. If you wanna try it, install the xine-dev and totem (and probably other) packages on your Debian distribution or look for similarly-named packages on other distributions. After that use make and it should compile.

It’s pretty easy to use it actually:

lee@whisper:~/projects/uc/depot-video-thumbnailer$ ./depot-video-thumbnailer
Usage: ./depot-video-thumbnailer [-s <size>] <number-of-thumbnails>
       <input> <output-prefix> [xine backend options]

Let’s give it a try on one of my favorite movies, The Rock:

$ ./depot-video-thumbnailer -s 384x348 4 the-rock-cd2.avi rock
Capturing image 1 of 4 as rock1.png...
Capturing image 2 of 4 as rock2.png...
Capturing image 3 of 4 as rock3.png...
Capturing image 4 of 4 as rock4.png...

Wanna see how the thumbnails look like?

Thumbnail from the movie

Thumbnail from the movie

Thumbnail from the movie

Thumbnail from the movie

They seem pretty neat. Which one would you choose?

As a last note, maybe you should use depot-video-thumbnailer instead of totem-video-thumbnailer, because it uses bilinear filtering so your thumbnails won’t look that messy.

Ultimate Commander: Frame Handling Implemented

Saturday, January 21st, 2006

I’ve just committed the basic frame handling functionality to the CVS. Frame handling in UC is part of an advanced interaction design which eliminates the need of more windows.

The concept is that the applications is composed of one, and only one window. Why? Because fiddling with tons of windows is not much fun. I heard many people talking about how much burden handling many windows is and I have the same opinion on the issue.

Here is a little demonstration to show you what I’m talking about. Just to make it clear, the file operatons are not implemented yet. Here’s the initial state of UC:

Ultimate Commander screenshot

Let’s say the user wants to configure the listing of the right panel. Then (s)he presses the “Set Listing” toggle button on the right panel. Here’s what happens:

Ultimate Commander screenshot

As you can see a tabbar and the related tab appears on the left panel frame. There is no overlapping like in the case of an additional window. It’s simple and beautiful.

I’ve made many changes to the codebase in the last few days and I didn’t clean up the code so it’s a bit messy now. Apart from small refactorizations, I guess I overuse accessors a bit. I need to educate myself more on the topic.

As a last note it’s nice to see how friendly the Free Software Community really is. When I requested a logo designer in the help wanted section of SourceForge, I got many help from more people and they were very kind and willing to cooperate. I’ve experienced the same attitude on the GTK IRC channels and mailing lists also.

MediaWiki on SourceForge, Part 2

Friday, December 9th, 2005

In a previous post of mine, "MediaWiki on SourceForge", I wrote about the topic of this post and this time I wanna correct the informations I gave there.

Diego Torres Milano, developer of the JGlade project contacted me several days ago that I should update my blog mentioning that MediaWiki cannot be installed on SourceForge. He kindly pointed out to his script which is meant to install MediaWiki on SourceForge.

I couldn't use his script, because it seemed a bit buggy, I haven't had the time and I'm not so motivated installing MediaWiki on SourceForge right now since I'm using DokuWiki on monda.hu for Ultimate Commander. I recommended him to write a howto on the topic since the suckiness of bash scripts in these complex scenarios is unavoidable, but he thinks a script is a better way to do the thing.

He told me that SourceForge allows to write the /tmp/persistent/ directory. You typically wanna create your /tmp/persistent/<your-project> directory and put the related files into it. This way one can install any web application on SourceForge.

Anyways, I you wanna install MediaWiki on SourceForge you should really give his script a try. He's also helpful and very willing to improve his script so contact him if things don't go well.

Thanks Diego.

SourceForge Does Care!

Sunday, October 30th, 2005

I opened a support ticket on SourceForge on 2003-04-09. I asked them to create a new Trove category, called "File Managing" (yeah, my English sucks) or something like that. No relevant reply was made then and I also felt a bit stupid for bothering them with such an issue. Feeling stupid was definetly because of my low self-confidence at that time by the way.

I haven't tracked this ticket and only now, when I changed the project infos of Ultimate Commander, I noticed the entry "Topic :: System :: File Management" and I went after that. They closed my ticket and included my category on 2005-01-05!

It's the most exciting in the open development model. Every single individual can change this universe. 174 projects have registered themselves in my category so far.

Learning Gtk#

Friday, October 28th, 2005

I'm learning Gtk# these days. Well, I don't need to learn so much Gtk anymore, but rather C# which is very well-suited for creating GUIs. That's mainly because of several special language constructs like accessors and delegates. On the other hand it's a strict, strongly-typed language that is a little bit unusual for me after so much Python. This kind of strict nature of C# makes it able to run suprisingly fast. I cannot tell you some exact statistics on it, but some say in several cases C++ is only 2x faster than C#. I think the situation is not so ideal. I guess it's 5x or so.

I'm learning C# because I wanna rewrite Ultimate Commander in it. This has proven to be a hard task, especially because I want to make it very usable in terms of user interaction by specializing widgets to fine-tune some of their details which I think are important.

Gtk# has several nontrivial issues, so I hang out on the mailing lists regularly these times. I also began to help others as I have some experiences in Gtk. It feels good helping people.