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

Archive for May, 2005

Living on the Edge

Sunday, May 22nd, 2005

I've installed most of the recent pieces of the Mono / GTK universe. I've been wanting to set them up for a really long time so I feel terrific now that I've made it. Just take a look at this screenshot.

Mono / GTK Small Screenshot
You gotta love a desktop like this!

Well, it was not so easy as you may think. Most new applications has some braindead idiosyncrasies. Interestingly enough, there is a common source of problems. Whenever there is a build problem it is almost always magically related to autotools.

Autotools: a set of tools designed to build applications in a crossplatform way created by some perverts out there who were so wicked to use m4, the macro preprocessor as its foundation that have the most disgusting syntax one can ever imagine! Many have realized the crapiness of these tools, but no really usable alternatives have been born yet.

Building the Gems: First Steps, General Advices

In the following paragraphs, I'll cover the installation of Beagle and Tomboy. I also wanted to build F-Spot, Muine and Monodevelop, but I couldn't make them work right now. The most recent version of Mono (1.1.7) is more standards compliant. While it's basically a good thing, unfortunately it seems that a lot of Mono applications contain nonstandard C# code that compiled well with the earlier versions of Mono that weren't so strict, but now that new version has been improved in this aspect, these application bugs were triggered and some developers need to rewrite their applications to comply to the standards. This means that one has to wait to make work some applications with Mono 1.1.7 until they get rewritten.

The first thing you need to do is to set up the most recent version of automake and aclocal. In many cases a distribution has multiple versions installed of them. These tools are accessible from /usr/bin. In Debian, they link to /etc/alternatives which in turn links to a version of the binary in /usr/bin that is currently in use. Install their most recent versions and set up your system to use them.

Another thing that you should make a mental note for: When installing GTK# (any version), if you encounter with the following error:

Unhandled Exception: System.DllNotFoundException: gnomesharpglue

you should run ldconfig (as root), and everything's gonna be fine.

Beagle

First, check out BeagleWiki. It's the most useful resource you can find on the topic. I only want to mention the things that aren't obvious.

In order to install Beagle, you'll need an inotify-enabled kernel. If you think long-term, you'll chose the latest inotify patch, because the inotify API/ABI were in constant flux during the last months so using the latest patch hopefully avoids us in the near future of compiling a new kernel when it changes again.

Pull Beagle from the CVS, because of the reason above. I've only installed vw1 and pdfinfo of its optional prerequisites. I couldn't make work the others.

Everything should be straightforward from now on unless you're a poor bastard who checks out the CVS when it's in a broken state.

Tomboy

First, edit /usr/local/lib/bonobo/servers/bonobo-activation-config.xml to include the path /usr/local/lib/bonobo/servers. The file should look like this:

<?xml version="1.0"?>
<oafconfig>
<searchpath>
    <!-- Examples: -->
    <!-- <item>/opt/gnome2/lib/bonobo/servers</item> -->
    <!-- <item>/usr/local/gnome2/lib/bonobo/servers</item> -->
    <item>/usr/local/lib/bonobo/servers</item>
    <!-- <item>/opt/gnome2/bonobo-activation/lib/bonobo/servers</item> -->
</searchpath>
</oafconfig>

Then pull the source from the CVS and you're ready to go!

Conclusion

Beagle if a fascinating piece of software, no questions. I think of Beagle much more as a system component than a regular application. The functionality it brings is very essential, powerful, and will be massively used by many applications in the future. Beagle seems to be unstable in some cases, but it's generally usable.

Tomboy, on the other hand is quite a mature piece of software.

Learning English

I've found a really usable English learning site. Since my grammar is far from perfect, I'll probably check it out several times. It's a great resource.

Silva

I've just heard about yet another Zope based CMS. It's called Silva and it's probably worth a try. It's rare to see new Zope based CMSes emerging, because Zope is rather an alien platform among web developers. Most of them do PHP, especially in the FOSS world, others from the commercial world might prefer ASP, but Zope is a strange kind of beast. However I think it's an incredibly powerful platform to build upon. Silva is available on Objectis since several weeks back so anybody can easily give it a try.

Samba Made Me Mad

Wednesday, May 18th, 2005

If you ever need to mount a Samba share of a Hungarian WinXP box, don't believe to the infos on the net. They say that you have to use

    mount -t smbfs -o password=yourpassword,codepage=852,iocharset=iso8859-2 //hostname/sharename /targetdir

But they're wrong. Maybe something has changed since then, but the correct form is now to use codepage=cp852. Learn from other's mistakes and don't waste your time as they did. Seriously. It's not funny messing around with things like that.

FUSE Owns Me

Tuesday, May 17th, 2005

FUSE - Filesystem In UserSpace. Have you ever heard of it? In case you don't, you should know what's it's all about because it's quite damn intuitive. But if you're dumb, never mind, I'll tell you anyway ;-)

FUSE basically makes one able to develop his/her filesytem in userspace (yeah, I'm a genious to comprehend its purpose and plainly translate it to you). I plan to use it in the future. You may check it out, as well as its Python and Mono bindings.

Old School Unixers

This FreeBSD dude went mad. This happens when you use a not-really-innovative-on-the-desktop OS. Read it, because it's really funny.

Object Filesystems

Sunday, May 15th, 2005

In the near past, a lot of things happened in the area that I call object filesystems. I consider a filesystem to be "objectified" if it treats its objects (i.e.: files) as entities that have a set of attributes. Of course this simple structural description has not much advantage alone.

The current solutions do the following:

1) Extract metadata from files.
2) Index the extracted metadata into some kind of database.

By indexing the metadata, one such system is able to search in a very fast manner using the indexes.

The biggest related event regarding object filesystems is the release of Mac OS X 10.4, Tiger which includes a search functionality, called Spotlight. A couple of nice reviews appeared on the net about it. I liked John Siracusa's review on Ars Technica the best. It's a fascinating read that describes the metadata aspects of the OS in depth. I especially enjoyed the parts "Spotlight analysis and potential" and "Filetypes revisited".

There are more reviews on Tiger at AndanTech, MacInTouch, OSNews, and kawiai's Blog, but compared to Ars Technica, they seemed to be rather short and unprofessional. Another good resource on Spotlight is Apple's dedicated page. It features a nice movie on the feature that you should also check out.

Another related event is that SkyFS is arrived to a usable point and getting stable soon. It's a filesystem, that improves upon OpenBFS, the open derivative of BeOS's BFS which is developed within the Haiku (formerly named OpenBeOS) project. You can watch a nice movie on SkyFS in action.

Regarding WinFS, the best article is probably Introducing Longhorn for Developers: Chapter 4: Storage on its structure.

Audioscrobbler.com

Have you ever wanted to explore some new musics of your taste, but didn't know where to look for them? In this case you should give Audioscrobbler a try. It's basically a web service which makes statistics of your musical taste and relates to other fans of the music you like. This way you can easily discover new artists. Technically, it eats the data sent by your music player's plugin (if it has one). Amarok certainly has.

Prolog Suckiness

Saturday, May 14th, 2005

I had to write a simple Pascal parser in Prolog for my programming course of this semester. The rough specification: print the names and line numbers of the procedures and functions found in the Pascal code to be parsed.

Prolog is a nightmare if you wanna write imperative code. I've came up with the following mess:

printIden(L) :-
    get_char(C),
    print(C),
    C == ';' ->
	print(' '),
	print(L),
	nl,
	parse(C, L, 0)
    ;
	printIden(L).

parse(C, L, P) :-
    (C == end_of_file ->
        !
    ;
	(C == 'n' ->
	    L2 is L + 1,
	    get_char(C2),
	    parse(C2, L2, 0)
	;
	    (C == 'p' ->
		get_char(C3),
		(C3 == 'r' ->
		    get_char(C4),
		    (C4 == 'o' ->
			get_char(C5),
			(C5 == 'c' ->
			    get_char(C6),
			    (C6 == 'e' ->
				get_char(C7),
				(C7 == 'd' ->
				    get_char(C8),
				    (C8 == 'u' ->
					get_char(C9),
					(C9 == 'r' ->
					    get_char(C10),
					    (C10 == 'e' ->
						get_char(_),
						printIden(L)
					    ;
						parse(C10, L, 1))
					;
					    parse(C9, L, 1))
				    ;
					parse(C8, L, 1))
				;
				    parse(C7, L, 1))
			    ;
				parse(C6, L, 1))
			;
			    parse(C5, L, 1))
		    ;
			parse(C4, L, 1))
		;
		    parse(C3, L, 1))
	    ;
	    (C == 'f' ->
		get_char(C3),
		(C3 == 'u' ->
		    get_char(C4),
		    (C4 == 'n' ->
			get_char(C5),
			(C5 == 'c' ->
			    get_char(C6),
			    (C6 == 't' ->
				get_char(C7),
				(C7 == 'i' ->
				    get_char(C8),
				    (C8 == 'o' ->
					get_char(C9),
					(C9 == 'n' ->
					    get_char(_),
					    printIden(L)
					;
					    parse(C9, L, 1))
				    ;
					parse(C8, L, 1))
				;
				    parse(C7, L, 1))
			    ;
				parse(C6, L, 1))
			;
			    parse(C5, L, 1))
		    ;
			parse(C4, L, 1))
		;
		    parse(C3, L, 1))
	    ;
	    (P == 1 ->
		get_char(C0),
		parse(C0, L, 0)
	    ;
		parse(C, L, 1)
	    ))))).

:-
    see('input.pas'),
    get_char( C ),
    parse(C, 1, 0).

You shouldn't see anything like this in your future life.

Incremental UI Rulez!

I've written another application. Unlike the previous one, it's a GUI application which i've made for the operational research course of the university. It features an incremental UI. I mean on this a kind of UI which the user can incrementally fill out as he/she gives more and more information during the input rather than having to handle tons of pop-ups throughout the process. I think it's a much more usable interaction model.

See it for yourself:

My application for the operational research course of the university
Plain and simple.

You can find this babe on the project section of my home page.

initng

I've been dreaming for a long time about a well designed, parallelized init system and finally it seems my dream has come true. I hadn't have the time to check it out, but the boot charts seem very promising.

Comments Disabled

I've just disabled the comments and pings in every of my posts because I got massively spammed by various WordPress worms. On the other hand it's not a real pain for me, because my blog is not really popular. Honestly I don't mind it all, since I write mainly to summarize my thoughts and make a diary of my journeys.