Archive for 2006

XULRunner Updates

Tuesday, August 22nd, 2006

I’ve been busy, but I’ve got some good XULRunner announcements:

  • XULRunner 1.8.0.4 Released. Get it while it’s hot, it’s a security/stability update of the developer preview.
  • With the XULRunner released, we’ve finally pushed out a Gecko 1.8 release of the Gecko SDK. Thanks for being patient.
  • Darin’s machine that was hosting a number of XULRunner examples including MyBrowser and XULMine has died. He sent me the files and I am hosting them on this site for the time being, until the Mozilla Developer Center gets example-hosting capabilities.
  • preed has agreed that it would be good to get a release of XULRunner 1.8.1 out, and he’s going to try to arrange for some build-team time to get tinderboxes set up for that. The schedule is going to be “sometime after Firefox 2”, but it will happen. Continued thanks to the build team for their efforts, and welcome TR to the vortex!
  • Javier and I have finally fixed a couple bugs that make it possible to do universal builds of XULRunner. I expect that, build-vortex willing, XULRunner 1.8.0.7 will be a universal release, as well as the 1.8.1 release.

MacOS 10.5 “Spaces” Question

Thursday, August 10th, 2006

I’ve seen articles about the new “Places” feature in MacOS 10.5. I’ve even seen videos. But I still have one question that is make-or-break for me: is this per-window or per-app? Can I put one Firefox window in my “communcation” place and one in my “development” place? If not, this feature is worthless.

Of course, the most annoying thing about MacOS in general is how app-centric it is. I don’t usually care what application a window belongs to: I care what logical task it belongs to. This is one of the reasons I still find the Windows desktop most usable, for all of its flaws.

Update: it’s “Spaces”, not “Places”. Thanks, blogosphere.

Breasts in Public

Monday, August 7th, 2006

BabyTalk magazine Cover

I frequently disagree with Glazou’s politics, but here we agree: the majority of the American public who are against breast-feeding in public are woefully misguided. What reasonably sensible person would feel intensely uncomfortable about seeing somebody breast-feeding in public? The female breast is not an inherently sexual thing: it’s a wonderful part of human anatomy that evolved (or was intelligently designed, depending on your world view) for feeding children. Of course, the female breast can give sexual pleasure, but so can many other parts of the human body. You don’t see people in a stitch about uncovered earlobes on magazine covers, do you?

Update: my wife disagrees.

OSCON 2006: Thursday

Friday, July 28th, 2006
Keynote: 5 a Day, and Session: Failing to Succeed

I know that Robert Lefkowitz has a following, but I had never seem him talk before. He is a dynamic speaker, fun to listen to, and obviously knows his stuff. The keynote was an extended metaphor about how open source is like tomatoes. I cannot possibly give it justice in a blog post, so I won’t. The session on failure was also very interesting (and packed); it is important to note that he’s not giving the trite “failure is ok” mantra that I sometimes hear from some speakers. It was a much more nuanced “failure is ok, as long as you identify and acknowledge the failure quickly, and learn from it”. I’ll try to blog more about this later.

Session: Python in Mozilla

Mark Hammond gave a straightforward summary of how Python could be used in Mozilla. There wasn’t really anything I didn’t know: basically the deployment problem is mostly unsolved, but there is at least a plan to have a single, separate Python install for the Mozilla runtime. We’ll have to figure out how to make this work in practice.

Lunch: Mark Hammond and other Python developers

I didn’t realize the extent to which, among some, python is a religion, not just a programming language. I must say I’m not impressed. Mark had a much more pragmatic approach than others at the table. And the animosity towards JavaScript was astounding, considering the extent to which, when coded properly, Python and JavaScript have common design patterns and object orientation.

Session: Building Internet Applications with Mozilla XULRunner

My own talk went well; there was a good and varied crowd, and they asked good questions.

BOF about the Mozilla platform

We had a small group of people interested in Mozilla, conversation wandered from Calendar and email apps to the use of the JavaScript language.

OSCON 2006: Wednesday

Friday, July 28th, 2006
Session: Handling Cross-domain XMLHttpRequests

This session wasn’t what I thought it was going to be. It was about how, in today’s browsers, to retrieve data from “other” websites. A range of techniques were discussed, including cooperative techniques like JSON and server proxying using Apache.

Session: Embedding a Database in The Browser

This session discussed techniques to use Java to embed the Apache Derby engine in browsers for client-side database transactions. To actually make this useful, the Derby engine needs to write the database to the local disk, which requires a signed JAR and asking the user for enhanced privileges. For the vast majority of web use this seems unacceptable… it might work in some intranet environments. The speaker, David van Couvering, was unaware of the WhatWG specifications for persistent client storage, and we had a brief conversation after the talk about whether Derby could be used to implement the WhatWG spec in older browsers that don’t have a native implementation. But it still seems that Flash client storage would be as least as useful to provide a compatibility layer.

Session: The Atom Publishing Protocol as Universal Web Glue

The Atom publishing protocol is not the same thing as the atom data format. It is a protocol layered on top of HTTP that allows applications to publish data to the web using a standardized format. It looked like a well-designed protocol, but not especially useful for me personally, since I don’t mind typing my blog posts into wordpress. I’m still annoyed that the atom data format hasn’t standardized a way to aggregate posts and responses (or threaded conversations, or references to external feeds to be incorporated as responses to a post)… if somebody posts an interesting entry, I don’t want to have to manually add the comments feed for that entry to my feed reader.

I meant to attend Extending Ruby with C, but lost track of time while talking to somebody in the hallway. It seems to me, now that Mark Hammond has implemented the work for DOM Scripting Agnosticism, that RubyXPCOM wouldn’t be hard to implement.

OSCON 2006: Tuesday

Friday, July 28th, 2006
Tutorial: Leveraging Mono for Cross-platform Development

I only went to half of this tutorial. It was targeted at people who may not know or have used Mono or C# before (I’ve read books and done some security-oriented programming in C#, but no GUI development). It was quickly clear to me that Mono suffers from the same deployment issues that have plague .NET in the GUI realm: it is painfully difficult to deploy a .NET/Mono client application targeted at “ordinary end users”. This is especially true if the app uses the GTK# GUI framework.

Dinner: Shane Caraveo and David Ascher

Very interesting conversation about how Komodo uses the Mozilla platform, and how me might be able to work together in the future. ActiveState has an internal testing tool written which records DOM events over a series of actions, which could be very useful for unit-testing. ActiveState is going through some exciting changes and I hope to see some new and exciting innovations from the company in the future.

Dictionaries in Firefox/Thunderbird 2

Wednesday, July 26th, 2006

I recently committed a patch which allows spellchecker dictionaries to be packaged up as extensions in Firefox 2. To test this patch, I created (by hand) a French dictionary extension, but never really posted how to create this kind of extension in general. To rectify this, and promote creating this new kind of extension for inclusion on addons.mozilla.org, I have created a simple webtool that will create an extension from uploaded dictionary files: dictionary-packager. Source is available if you want to run it on your own server.

I chose to write this as a webtool instead of a XULRunner app because we don’t have zipwriting capabilities yet in the Mozilla platform, and I was lazy and knew how to do this easily in PHP ;-).

OSCON: Face 2 Face

Wednesday, July 26th, 2006

I’m at OSCON, and going to try to blog regularly about the sessions that I found interesting. Monday afternoon I went to a tutorial led by Kaliya Hamlin about organizing face-to-face meetings in open source communities, especially “open space” conferences.

I must admit I was skeptical when I went to the meeting: it sounded like a very “warm and fuzzy” topic, and I thought I was unlikely to get specific techniques to improve communication. I was quite wrong! The tutorial was very interesting and thought-provoking. I learned a lot more about the techniques of organizing “open space” conferences; previously I had only been exposed to open space as a scheduling technique for Mozilla all-hands meetings. Particularly important is the invitation phase of the meeting, which fundamentally shapes the attendance and scope of discussion.

What was even more interesting, though, were the communication techniques in the second half of the tutorial that the entire group used to talk about communication. (A rather mind-bending arrangement, but it worked!) I was especially impressed by “the fishbowl”, a technique of arranging space for a group meeting where a large group of people is able to discuss a (potentially controversial) issue without constant interruption, and without allowing the people with the loudest voice or most dominating personality to control the discussion:

  1. Have the participants arrange the chairs in the room in concentric circles. The “inner ring” consists of 6 (or so) chairs; the next ring perhaps 12, and the remaining “cloud” of people around the edges.
  2. Select 5 people (or ask for volunteers) to begin the discussion; there is one empty chair in the inner ring. Everyone else finds a seat in the outer rings.
  3. Only people who are in the inner ring are allowed to talk. If somebody on the “outside” feels a strong need to talk, they take the empty seat in the inner ring. One of the other people in the inner ring then stands up to leave (so that there is always an empty chair).
  4. Occasionally, the moderator of the discussion may choose to invert the relationships; the inner ring goes silent, and the members of the second ring are asked to voice their thoughts/opinions.

    There were other techniques, such as creating a human spectrograph of opinion along a line on the floor, that were good too (though less interesting to me). I know that this was Kaliya’s first time doing a tutorial like this, but I’d encourage others to attend a workshop if/when she does one in the future.

    Update: need to investigate Appreciative Inquiry as a large-scale community building technique.

freetype-config x86-64 suckage

Sunday, July 23rd, 2006

Where in the world do I submit this patch, so that mozilla doesn’t have (bad) hardcoded rpaths the libraries, when linked on x86_64 Linux distros that use /usr/lib64 for 64-bit libraries?

Update: This was redhat bug 139199, fixed on rawhide and in freetype’s trunk sources.

--- /usr/bin/freetype-config~   2005-03-04 13:47:22.000000000 -0500
+++ /usr/bin/freetype-config    2006-07-22 16:13:39.000000000 -0400
@@ -3,9 +3,10 @@
 prefix=/usr
 exec_prefix=/usr
 exec_prefix_set=no
 includedir=/usr/include
-libdir=/usr/lib64
+default_libdir=/usr/lib64
+libdir=$default_libdir
 enable_shared=yes
 wl=-Wl,
 hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'

@@ -118,9 +119,9 @@
   if test "$enable_shared" = "yes" ; then
     eval "rpath=\"$hardcode_libdir_flag_spec\""
   fi
   libs="-lfreetype -lz"
-  if test "$libdir" != "/usr/lib" ; then
+  if test "$libdir" != "$default_libdir" ; then
     echo -L$libdir $rpath $libs
   else
     echo $libs
   fi

Blog Fixed in IE

Tuesday, July 18th, 2006

It turns out that my homepage was quite unintentionally blank in IE (and in trunk builds of Firefox). I had an unclosed <script> tag in the header, and IE went ahead and parsed the rest of the page as script… and we changed Firefox trunk to match that behavior. Anyway, that error is fixed, as well as a workaround for a bug in IE where element.getAttribute(“class”) always returns null (workaround: use element.className).