Older blog entries for NickElm (starting at number 17)

Woohoo! 3Dwm 0.3.0 has been released. Granted, this was Wednesday last week, but the rest of the week was too hectic for me to be able to get a diary entry in somewhere. I'm already preparing for 0.3.1, which will be a bugfix release and will remedy some of the minor problems that have appeared since 0.3.0 hit the street.

In totally unrelated news, my girlfriend Johanna has received an Au Pair position in Milan, Italy, and will be gone for nine months. This is both good and bad news: good, since this is what she has been wanting to do for some time now, and I'll get to visit Italy for the first time ever; bad, since this means that I won't get to see her that often and I am going to miss her like crazy. Oh well.

Hacking away at 3Dwm almost feverishly now, I am just an hour or so away from release. Writing this as the system is compiling (which is taking more and more time). Everything is ready for the new release, including updated documentation, translations of most of the vital documents, some new autoconf checks, and, of course, the source itself. This is going to be a major release. Lots of stuff has been done since the last one in the beginning of June.

Other cool and important stuff is the new 3Dwm tutorial that I put together recently, and the interview that just came up on LinuxPower.

Throat a bit sore, nose a bit runny, thesis on schedule. Wait, I just realized that my diary entries tend to be a bit arrogant in tone. I'd better cut down on this high-and-mighty attitude that seems to plague some many people around here; better to walk softly and carry a big stick. :)

So, on with the updates: Tying together many parts of the 3Dwm source code in preparation for the 0.3.0 release I will be putting out shortly. I am currently looking at how to design the configuration file stuff for the display server, and XML is rather high on the list. We are also looking at texture coordinate generation and ways of doing it within the existing framework of the scene graph. Still routine stuff, but it will be nice to get a new release out the door soon(ish).

A quick update between compiles: CSG seems to be working (as can also be witnessed here, here, and here). I had just enough time to stop and congratulate myself before continuing. I need to incorporate all this cleanly under a nice and elegant interface and hide all the nasty implementation details from the client programmer.

Must. Finish. Thesis.


Away from my current CSG implementation for a quick breather. This stuff is getting pretty complex, and I'm not sure whether my solution is very efficient and/or nicely designed. My approach to software design these days is very much based on my gut feeling as opposed to sitting down for hours with UML diagrams and design guidelines before doing anything. And this is after four years of university CS training! That only proves that design is a very individual process. I prefer to sketch my designs in code in something akin to XP, while others want (need to?) work it all out on paper before they implement something.

It's funny how design patterns change your life. Not that I didn't use them even before they had a name (of course I did), but I can't for the life of me remember how I used to think about stuff like trees, traversals and factory functions and so on. Actually, by now, I'm having a hard time remembering how I used to traverse trees before visitors, decorators and composites came along!

Ahh, well, enough with this, now it's time to go back and pick up where I left off with this CSG code.

I'm still here, burning the midnight oil (well, not really) while almost everyone else here at the Medialab are off on vacation and frolicking in the sun. Lucky for me, there isn't much sun to speak of here, and the weather is actually best suited for being indoors and working.

Disappointing weather aside, what is it that keeps me working here when I really should be off on vacation? My master thesis, of course. For certain reasons (more specifically, an attractive job offer), I need to finish it this summer (I will present it at the end of September), and so here I am, toiling away at 3Dwm for at least eight hours a day. It actually is quite fun, and I am getting a lot of work done.

My current order of business is implement CSG (constructive solid geometry) support in 3Dwm and integrating it with the 3Dwm scene graph. This is an interesting problem, and I am pouring a lot of time and creativity into my solution. Currently, I am thinking of using an object-based algorithm to generate an intermediate boundary-representation (b-rep) of the CSG tree (as opposed to an image-space one where you render directly from the CSG representation), probably with the use of BSP trees. This scheme will let me use hierarchical caching of the different components of the CSG tree, something that is very important in a distributed system as the 3Dwm display server.

Anyway, back to work! There are lots of polygons to split and vertices to generate.

Well, LinuxTag 2001 is over. Me and Rob are back from Stuttgart, Germany, and resting up after four days of standing around on the show floor for eight hours talking to interested people and demonstrating 3Dwm in action. In retrospect, the show was a great success, and I think that we really showed the visitors something they had not seen before. I am anticipating that this will help spread the word on 3Dwm even further.

In addition to demonstrating the system to visitors at our booth, we also got the opportunity to discuss design and development issues with some of the Berlin developers, notably Tobias Hunger (hunger), Mourad DeClerk, and Marco Herrn. Too bad that Stefan didn't make it this year, yesterday we were able to exchange some great ideas at the exhibition.

We were also approached by a French guy who invited us to the LinuxWorld Expo Paris 2002 where we would get a free booth with furniture. Unfortunately, I am not all that sure that we will be able to get funding for going there. We'll see what turns up.

My third full week here at Chalmers Medialab, and I'm desperately trying to think of a way to avoid having this diary entry follow the normal pattern of me banging my chest about what I'm doing. Well, don't think I can help it, so here goes:

3Dwm is still my number one passion, and will likely continue to be so for a very long time. This summer marks two full years that the system has been in development. That's quite an accomplishment by someone who used to have the attention span of a moth when it came to working on projects! Earlier, projects used to be exciting the first few weeks or months, and then decline in interest before they died out altogether. Ahh, what impressive projects have died at my hands! ;) So, there must be something special about 3Dwm for me.

At the moment, I'm cutting my teeth on the event mapping in the system. The problem is rather simple: how do we map raw input events from a wide number of heterogenous input devices to input commands that the system can recognize? Also, there comes the issue of global events, i.e. events concerning system-wide things like view control and system commands that should not be possible to override. stefan has helped me gain some insight here, and my current solution involves a special-purpose logic language to perform these things. We will see how it goes.

22 Apr 2001 (updated 18 Jun 2001 at 07:35 UTC) »

Still chiselling away at the event propagation stuff in 3Dwm. I actually spent Easter in Tarnaby/Hemavan a Swedish ski resort, so I haven't had the chance to do much than work on my tan and my downhill skiing, but now I am back in front of my computer again. My current challenge is computing the bounding volumes for the scene graph nodes and making sure that changes to these are propagated correctly in the graph. When toiling away at the design for this mechanism, I realized that this, and many similar things, are actually simply events that need to be routed and handled in the scene graph.

Armed with this discovery, I am now rebuilding lots of the scene graph code to also contain a generalized event framework. This will not only make it easy to add internal events like the bounding volume computation mechanism, it will also be excellent for input events that needs to be routed and handled by controllers in the scene graph.

Me and my friend Robert Karlsson, also a member of the 3Dwm core developers, are going to be attending a press seminar at the Museum of Architecture in Stockholm on the 24th of April. We will be presenting the project and demonstrating the wearable computer that we will use as a hardware platform for the system.

Well, well, it was a while since I last posted something here, but I saw that steveh has been doing some updates, so I thought I should do, too. After all, we're both in the same boat, especially now when we are getting back into 3Dwm again.

Yes, I've been gone for a while since around Christmas, busy with personal stuff and school. A fun little incident involving an emergency operation got me hooked on the project again, though, and here I am. :) Now for some updates on 3Dwm...

3Dwm and Chalmers Medialab recently teamed up with Xybernaut, the market leader in wearable computers, to integrate 3Dwm on the wearable platform. Just a few weeks ago, we received a shipment of two wearable units complete with some very interesting peripherals, including a head tracker and a data glove. Very, very cool. We will be spending the next three months at integrating 3Dwm on the platform and adapting it to use the amazing capabilities that are available. Maybe this will be the first niche for 3Dwm that can gain widespread use of the system?

At the moment, I am looking into event propagation in the 3Dwm scene graph. Input events and intersection testing in the scene graph are the most challenging parts of this mini-project, but the technical solution is very akin to collision detection using bounding volumes and I think that a lot of my current work will be usable for view frustum culling if done right.

Anyway, enough with the updates, it's back into design and analysis for me now.

8 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!