Older blog entries for blizzard (starting at number 22)

What interesting things have I been hacking on recently?

Let's see. Killing bugs, as usual. Making things faster. I gave scrolling and expose handling a swift kick in the ass in Mozilla and things are a lot faster now. I also rewrote all the focus handling in Mozilla and killed a couple of problems in the process.

I've also been hacking on embedding and I can't believe it, people are actually using my code.

Panic Attack

Someone recently posted an article here about how:

AOL management has ordered the Mozilla team to remove a configuration option that can be used to block ads.

Funny, I'm on the Mozilla team and I didn't have any jack booted thugs from AOL banging down my door. Anyway, if you go look at the bug in question you will see that the feature in question hasn't been removed, it's just off by default.

I spend much of the weekend working on focus code for Mozilla. It now plays nice with the Gtk focus system. For a long time it wouldn't forward events to the right window if a Mozilla window didn't have focus. This means that it works right in the embedding case. I haven't checked it in yet because there's some question as to how it affects some of the XIM code that's in there. I'm still waiting to hear back from some people at Sun about that.

You can now also create a Mozilla window as a the child of any random GtkContainer. This means you don't need to muck with the superwin to be able to create Mozilla widgets. Your widget still has to be realized to do this but the gtk embedding widget that I've been working on hides most of that complexity.

I also worked on signal callbacks for things like mouse over messages and progress and the status of loading pages. I haven't done the actual signal code yet but that's a breeze once I get the infastructure in place. That infastructure is mostly in place now.

Everyone loves screenshots.

After a long battle I finally got Nautilus up and running with the Mozilla component that ramiro has been working on. Ramiro, you rock.

I'm off to add more to the embedding widget so that we can have some more of the features that Nautilus needs...

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.

13 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!