Older blog entries for blizzard (starting at number 17)

Once again it's been forever since I updated my diary. I think I should let people know what's been going on.

I've been spending time in the last few days getting familiar with performance tools that are out there for Linux. One of the problems that we face in the Mozilla project is that the developer tools on Linux aren't as good as what's available on Windows or on Solaris*. Spending an hour with Quanity or Purify can make a huge difference in knowing why your product or project might be slow.

Some people say that if your product is slow then you've designed it incorrectly or you don't really know what's going on. That's true to a certain degree, sure. But when you've got 80+ developers working on a project and not any of them can understand or be familiar with the subtle interactions of different components it's very important to have the tools that might tell you what's wrong with what you're doing. That's where those performance tools step in.

We have a scattering of performance tools for Linux but not anything that really compares with developer tools on other platforms. There's gprof but gprof doesn't work with shared libraries. For shared libraries there's sprof but it only works on a single library at a time and appears to have issues in Mozilla. ( Those problems could be thread related - not really sure. ) Given that Mozilla is built of a couple dozen shared libraries, uses threads extensively, and is a huge chunk of code the options that are out there aren't really fitting the bill.

After looking at the code that's currently in libc ( the gmon/mcount code ) it looks like it can be pretty easily extended to handle shared libraries. The only problem with that is that you have to change the output format to support more than one shared object at a time. This means that you also have to change the programs that process that output since none of them handle more than one shared object at a time either so it means either implementing something new or adding support to gprof to handle it. The latter is probably easier so that's where I'm going to go first.

I've already got code that does lookups from the profiling code to find the right library it was executed from. Looking in the internals of the dynamic linker is something that I've never done before so the learning curve has been large but I've found that it's all very interesting stuff. I get to learn all about elf, dyanmic loaders, compilers, linkers, etc. I've never had any reason to do that in the past and it's a breath of fresh air to learn something completely new and feel completely invigorated doing it.

In other news ramiro has checked in the code that implements the bonobo component for nautilus. I'll play with that tomorrow, in addition to working on the embedding widget. The widget really needs to inherit from the GtkMozBox, not GtkWidget. It also needs signals for loading progress and finishing loading. I have to fix a couple of DND bugs so that you can drag from the desktop onto Mozilla, too.

There are a lot of people who are trying to get that component working with the M15 release of Mozilla. Don't. It doesn't work. You'll just get a crash and then send me email. Then I'll send you email saying "I know it doesn't work. Please update to the tip. I'm sorry."

Also in the last couple of days menus and mail/news in Mozilla have gotten a lot faster. I'm using Mozilla for email about half the time now. It still formats outgoing email poorly and some of the fonts look really strange but it's pretty functional.

I promise I'll try to update this more often. :)

* But hey, at least we're not the Mac.

Hrm, what's been going on since the last time that I updated this thing? It's been ten days or so.

Just got back from the first Mozilla Developers Conference. It was a blast. There's some horrible writeup at slashdot about it. It's written like copied their handwritten notes and called it an "article." The best part of the conference was to meet some of the people that I work with on a day to day basis and put faces with the names.

From the technical side I got to see some of the more interesting things that people have been doing with Mozilla. One was xmlterm. It's a terminal emulator written using Mozilla as the layout engine. It's neat because you can interpret resources from your command line interfaces as links. This means you can include inline images, links, icons, everything. It can interpret anything that uses XML. And the terminal emulation is good enough to run emacs.

Also, Ramiro wrote a glue code to use my Mozilla embedding widget as a view in Nautilus. We sat down and worked out out a couple of problems with the widget and started to figure out what he needed to get it running with all the functionality that you would expect in an intergrated browser. We were able to load web pages and browse around a bit without any problems. It's pretty cool to see that "just work".

More checkins for the embedding widget last night. There's still stuff missing from the underlying nsIWebBrowser object so clicking on links still doesn't work properly.

Apparently, Netcenter has decided that they want to merge the Netcenter and the AOL Instant Messenger username databases. This means that if you have a Existing Netscape Netcenter account that happens to conflict with an existing AIM screen name that you have to "change your username."

So, if you had the address foo@netscape.net and someone else has the screen name "foo" on AIM that the AIM user will all of a sudden have access to your email account. They assume that you can tell everyone that you know about your "new" email address. You can't tell everyone. What if someone sends you email after 6 months of not talking to you?

Aside from the technical issues, it's just plain rude. There are people out there who use that site as their primary email address. My wife did until just recently. According to their press releases Netcenter membership is around 25 million or so. It's a pretty shitty thing to do to a whole lot of people.

It's the kind of thing that makes me want to stop working with that company.

I've been continuing work on the embedding widget. It's starting to come together. The code that actually loads that looks like this:

moz_embed = gtk_moz_embed_new(); gtk_moz_embed_load_url(moz_embed, "http://localhost");

Minus the usual packing into a container and showing the widget and stuff. You still can't click on links but that's not a problem with my embedding widget.

By the way, you can do <pre> on advogato with this:

<div style="whitespace: pre; font-family: fixed">Foo</div>

Or, if you're really nice you can leave out the font-family: fixed ( like I did above ) since it doesn't fit with the motif here.

I've been working on the new embedding widget for Mozilla. After it's done it should be really easy to embed Mozilla into any gtk application. Alex did the original widget but it's been suffering from some bitrot and it uses old, depreciated interfaces.

Yesterday I went out and got 100 feet of ethernet cable so that I can hack from other rooms of the house. Looking back, I think it was a bad idea since now I can't escape.

The mozilla.org party is right around the corner. It's in San Fransisco. You going to be there? Let me know.

I think that I made Phil go blind with by exposing him to a couple of patches. Anyone who knows gtk should be afraid.

I've been working on a couple of bugs over the last couple of days. I sat down and rewrote the gdk event filter for mozilla since it was broken and causing some problems with grabbed windows. It now has copious comments so that some other poor soul can come along and support it. I've got some other code to check in, too but someone broke windows so I can't check in.

My wife and I finally got a couch at Ikea which should arrive at the house tomorrow. This means that we can have other people over and they don't have to lie on the floor to watch a movie.

I now know the meaning of the word Fear. What the hell?

I'm still digesting food from last night. We had good indian food on the new dinner table, courtesy of my wife. We managed to squeeze eight people around it. I was impressed.

Here's a great little column about patents and what they mean for the internet and business and your favorite search engine. It's funny, too. Read it.

I've been in Syracuse the last couple of days, visiting with friends and family. I've been using the chance to try and catch up on all the email lists that I'm on and haven't been reading.

1300 Messages in the xfree folder.
200 Messages in bugtraq.
500 Messages in SOAP.
20 folders later...

Great, now I'm behind on my Inbox.

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!