Thunderbird will soon sync with iPods


Coming Soon

Ability to sync your Thunderbird Address Book to your iPod.

Q. Why not yet

A. Still working on it

Q. Mac Only?

A. Mac/PC initially. I’ll explore Linux after.

Q. All iPods?

A. iPod with version 1.2+ of the iPod Software, or iPod Photo 1.0+ (Free Updates from Apple)

Q. Why is this Q&A so short

A. Because I’m tired.

Q. When will it be released?

A. Most likely I’ll have something for you all to play with in the very near future.

Update [12-26-2005]: It’s out, and available here.


Write File

Can anyone tell me why this code doesn’t work in Thunderbird 0.9 (I haven’t tried Firefox 1.0).

Note: There is a slash in the directory path C:, for some reason wordpress is fudging it up. MovableType did this crud too. So it’s not showing, but it’s there in the code.

function sync()
testFileOutputStream("C:\foo.txt", "la la la \n robert");
function testFileOutputStream(path, buffer) {
  // file is nsIFile, data is a string
  var stream = Components.classes[";1"]
  // use 0x02 | 0x10 to open file for appending.
  stream.init(nsLocalFile(path), 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate
  stream.write(buffer, buffer.length);
function nsLocalFile(path)
    const LOCALFILE_CTRID = ";1";
    const nsILocalFile = Components.interfaces.nsILocalFile;
    var localFile =
    return localFile;

Keep getting this error:

Error: uncaught exception: [Exception… “Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIFileOutputStream.init]” nsresult: “0x80004005 (NS_ERROR_FAILURE)” location: “JS frame :: chrome://extension/content/extension.js :: testFileOutputStream :: line 12” data: no]

Simply want to be able to write to C: (or any place on my HD that I specify). Prefer not to use JSlib, simply because I don’t want dependencies. It’s really borderline insane to think you can’t do something as simple as write out to a file without depending on other lib’s.

Thanks in advance.

Comments/Email as usual.


Reporter: It’s coming

Nuff said…

… for now


Securita Roadmap

Well I checked in some source this evening from my work the other day. There’s lots of problems, and it’s so trivial right now it’s sad. It’s going to need some serious work still. But hey, that’s the fun part right?

What I need now are some people to lend a hand. I’ve defined the rdf file for now, and put together a sample. Obviously that needs to be placed somewhere that later on we can hook up an auto updater that can update just that file.

So anyone who can submit patches on getting to 0.2 are kindly asked to lean a hand. Could be a good step in bringing Mozilla into schools and other places where protecting children from some harmful content is needed.


Securita 0.1 in the works

Well I did some work on it today. It’s now in extension form (the old version, prior to Ben Goodger’s changes). Also using a “database” (array) of 18 keywords right now, with a fair amount of success.

Now the big topic will be creating a RDF schema and a method for scanning efficiently, and “fuzzy”. Allow me to expand:

We can’t just ban the page because of the word “ass”, but the word “ass”, and several other words could be potential page worth blocking. So what needs to be done is attach point values to all words (scientifically). Then based if the point value gets higher than 5.0, we block it. This is basically how SpamAssassin operates. So what I need is for someone to do some experimentation, and find out exactly what keywords to use, and what point values to attach to them. A nice thing would be a little C++ app that could be used to generate scores based on data. I’m rather open to suggestions on how to do this. So… give suggestions, code solutions. Submit them to me, be a hero.

The RDF schema also needs to contain a method field. Since regEx is extremely slow, and bloated, we obviously don’t want to do that more than we need to. So we have the option to use window.find(). By using that method, there’s a speed increase (with obvious limitations).

Perhaps in the future, changing the core engine to compiled binary would be better, but for now, we make do with javaScript. So far performance on a 1.8GHz system is actually not much slower at all, I really don’t notice it. But we will need some more keywords. I figure about 50-100, provided we use a scoring system like mentioned above.

So code is coming, hopefully an initial checkin soon, I’m just not ready yet, and busy. I’ve had about 3hrs today of free time to play, and that was my break from the academic books. More to come, but lets get the creative juices flowing.


Using Stuffit on Jar Files

For those who prefer Aladdin Stuffit on Windows, here some tips:

The following registry key will associate .jar files to that you can expand them with ease. A nice trick to have.

Windows Registry Editor Version 5.00
"CONTENT TYPE"="application/x-stuffit"




Provided at your own risk.

Save the contents into a text file with the extension .reg. Then open it.

You can also go into the preferences and save without compression. Then just right click, and zip.


Securita, I’m starting (finally)

Well, I’ve been delayed by one thing or another for quite some time. Anyway, I’m starting to gather my thoughts, and the various emails and conversations I’ve had with people over the project for quite some time. Just to review, Securita is a project to create a content filter for Mozilla.

The first checkin will not happen until I’m at version 0.1. Simply because it’s to messy, and a pain in the butt. At 0.1, I’ll checkin the source, and perhaps add a few devs to the project as appropriate.

The goals for 0.1

  • Load RDF datafile
  • Scan page for matches to RDF datafile
  • Display error when scan returns true
  • Make XPI for Firefox/Seamonkey

At this point, I’ve got a mini engine that can scan (including regexp, thanks to caillon) and return true if there’s a match (from an array of items).

My time is slightly limited right now, but I don’t want my short time to hold this project up any more. So what I need is the following:

Most Wanted #1

Method to load RDF datafile, and loop through for each element. Sample

Brief Rundown
String: what to search for
Scan: type of scan to perform. Either string or regexp
Type: URL, text, image , hybrid

Simply get to the point of doing a demo loop like follows:

for (i=0; i<ELEMENTS; i++){
  scan(string[i], scan[i], type[i]);

Most Wanted #2

Also need a method to link the script that does the processing (filterRun.js) to execute on each page loaded. I’m not exactly sure how to do this, and time is a bit short right now. If anyone can write a simple extension boilerplate that attaches the script filterRun.js to every tab that contains the following code to be executed as the page loads:

alert("Securita beats up the butterfly");

Anyone who can contribute the these two things would be extremely helpful. Email submissions as per my contact info on this website.


Extensions… The Next Generation

I’ve begun thinking about what’s good, and what’s bad about extensions, and what I would ideally like to see. So I put together a somewhat brief analysis. Since now is about the time to start bringing about ideas for improvements, I figured I’d take a little stab at how to make extensions kick even more butt.

My goals and thinking were based on the following principles:

  • Users hate unnecessary steps. Less to do the better
  • Developers want users to upgrade extensions quick so they don’t have so many versions floating around

Enough background, here’s my proposal:


Should keep a log in a universal format, and a widget from within the application (FireFox, Thunderbird, NVU…) should be able to read and uninstall based on it’s info.

Version Checking

Each extension should have a manifest stating a URL where the application can check for updates to the extension. This way, like any other application, Mozilla apps can look for updates and tell the user when an update is available. Ideally these update URL’s would be hosted at and updated by a web ui that developers can signup for access to. Perhaps use a remote XML query interface to check for the version, and download URL. Once an update is found, it can be auto-downloaded, and prompt the user if they wish to update now (or later). When prompting, it will tell what version is installed, what the new version is, and changes since the last major release.

Smart Clean-installer

It’s a pain needing to find the extensions we use on a daily basis again and again after each install. End users don’t want to bother either. With the above Version Checking interface, perhaps the XPinstall can save read a master manifest saved by the application, clean the install directory, then once installing the new product, read the manifest and download the extensions previously installed. This way, users can upgrade to the latest and most stable version, without having to find those nifty extensions again and again.

Regarding that manifest and it’s XML query interface, here’s what I imagine it holding:

Name | Version | Version Check URL | Author | Homepage | Date Released

Master manifest would contain each extensions manifest in one large file.

XML Query Interface:
Name | Current Version | Min Mozilla Version Supported | Max Mozilla
Version Supported | Version Override Allowed | Date Released | Homepage | Author | Changes

This of course would be accessed remotely by the application and processed in the background.

With the above info, the user could be told if the extensions supports their Mozilla version, what’s new, when it was released.

All in all the system would be rather inclusive. The user would no longer need to re-download their extensions every time. Nor would they need to check for updates.

It was discussed a while back to build a system that would from within Mozilla allow the user to browse a list of available extensions, then install them, all from within Mozilla, rather than search websites. A nice XUL based directory. That could be added at a later date to integrate with this proposal.

I think the above would prove rather nice. There’s an obvious benefit to the users, and to the developers, who get a smoother distribution channel.

Obviously the download URL could point to a script redirecting to a random mirror, allowing sites like to keep bandwidth costs down.

So, I leave my proposal in the public domain, in hopes that someone may read it, break it down, and perhaps enhance and improve upon my model.



Quite some time ago, I started the Securita project, to implement a word filter, capable of providing adequate protection to those who wish to employ such technology.

Not much has happened in that project.

I believe, with Firebird approaching 1.0 sooner than people think (it’s not that far off), now is the time to seriously consider getting such an extension of the ground. There is demand for such a product, as I’ve gotten several emails in recent months regarding the status of the project. Just this evening, listening to the Computer Outlook Radio broadcast, (where several Mozilla Foundation Employees talked). 39:00 into the broadcast, there’s a mention of such a product, and the admission we don’t have one. Unfortunately, A good deal of the blame goes to me.

But I want to rectify that.

Unfortunately, I’m still not enough of a programmer to be laying out the source code. So I am making a request for someone to aid me in getting this project going full speed. Those interested, should contact me.