Archive - mozilla RSS Feed

Deploying Firefox 2 within the Enterprise: Part 2

Adding Enterprise specific customizations to Firefox

In this installment, we're going to talk about customizing Firefox for deployment in your enterprise/organization.

Use the CCK Wizard.

Wow, that was easy. OK, maybe a little too easy. Let's go into some detail about what the CCK is, where it came from, and what it does now. (Note that this history is simplified quite a bit.)

In the 4.x days, there were two tools from Netscape for customizing the browser, one called Mission Control Desktop and one called the Client Customization Kit. The Mission Control Desktop was intended for enterprise customization and deployment of Netscape Navigator/Communicator, while the Client Customization Kit was more intended for ISPs and OEMs to customize Netscape Navigator/Communicator for their customers. Both of these tools were written in Java and actually produced full installers when they were finished. (For more information about the differences between Mission Control Desktop and the Client Customization Kit, you can checkout the Netscape Everywhere Custom Browser Distribution Program Frequently Asked Questions.)

When Netscape 6 was released, Netscape again provided a Client Customization Kit. This CCK was more focused on a customized install rather than enterprise features. This customized install included things like customizing the home page, help menu, bundling XPIs into the install, etc. It produced a full install package and could also produce a CD installer. Note that Netscape 7 also used a similar CCK.

While the source code for the Netscape 6/7 CCK is in the Mozilla source tree, it is Windows only and tailored towards a suite type distribution, so I decided to write a new CCK from scratch that produced an extension that could be installed into Firefox to provide the necessary customizations. And so the CCK Wizard was born.

The CCK Wizard is an extension for Firefox that walks you through a set of page to customize Firefox and then generates an extension that can be installed into Firefox to enable your customizations. Let's take a tour of the CCK Wizard.

(more...)

Deploying Firefox 2 within the Enterprise: Part 1

I'm actually going to take a break from Operator for a few days to talk about deploying Firefox 2 within the Enterprise. Note that when you deploy Firefox within an enterprise or organization, you can customize Firefox without worrying about Mozilla trademark policies. Just be sure your customized Firefox is not deployed outside of your enterprise or organization.

We're going to cover:

  1. Building a custom version of Firefox
  2. Adding Enterprise specific customizations to Firefox
  3. Creating a Firefox installer
  4. Setting up your own update server to deploy Firefox patches

My assumptions are going to be that you actually need to build Firefox for your own purposes, not that you can simply use a prepackaged build from Mozilla. Also, I'm going to focus on Windows. If you don't need to actually build Firefox, you can use the CCK Wizard to customize Firefox (we'll talk more about that in part 2) and the Firefox Release Repackager to repackage it. The Firefox Release Repackager is Mac only right now, but I've sent Ben a patch to make it work on Windows as well.

Setting up a Firefox build environment

The Windows Build Prequisites page at MDC has the information on setting up a build. In order to recreate an official build, you'll need to have Microsoft Visual C++ version 6. Unfortunately, this is not available anymore, so you might have to get it from eBay. I can't say enough about the MozillaBuild package that bsmedberg put together. It makes setting up a build really easy.

Building Firefox

Once you have setup the build environment, it's time to get the code and build Firefox. Create a directory in which to check out your code and then change to that directory:

mkdir firefox
cd firefox
Checking Out the Code

Now we need to check out the code. We're going to checkout Firefox 2.0.0.2.

cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co -r FIREFOX_2_0_0_2_RELEASE mozilla/client.mk
cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co -r FIREFOX_2_0_0_2_RELEASE mozilla/browser/config
.mozconfig file

Now we're going to go into the mozilla directory and create a .mozconfig file. This file specifies the configuration options for the build. Here's what ours looks like:

. $topsrcdir/browser/config/mozconfig

mk_add_options MOZ_CO_TAG=FIREFOX_2_0_0_2_RELEASE
mk_add_options MOZ_CO_MODULE=mozilla/other-licenses/bsdiff,mozilla/tools/update-packaging

mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj

ac_add_options --enable-update-channel=release
ac_add_options --enable-official-branding
ac_add_options --enable-optimize
ac_add_options --disable-debug
ac_add_options --disable-tests
ac_add_options --enable-static
ac_add_options --disable-shared
ac_add_options --enable-svg
ac_add_options --enable-canvas
ac_add_options --enable-update-packaging
ac_add_options --enable-extensions=default,-inspector

Most of this file you don't have to worry about, but let me explain a few pieces:

mk_add_options MOZ_CO_TAG=FIREFOX_2_0_0_2_RELEASE

This sets the tag we will be checking out from (not really needed since we checked out a makefile that had the corresponding tag, but we'll put it there just in case)

mk_add_options MOZ_CO_MODULE=mozilla/other-licenses/bsdiff,mozilla/tools/update-packaging

This specifies additional code we need to check out in addition to the base Firefox code. These two directories will be needed when we do update packaging.

mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj

This specifies that we want to build our code in an "obj" directory. This means that the output code is separate from the source code, so if we want to easily remove the output code, we can just remove the obj directory.

ac_add_options --enable-extensions=default,-inspector

This specified that we do not want to include the DOM Inspector in our build. This is going to be our "customization" for this build, although if this is really all we wanted to do, there are easier ways.

Incidentally, the way we knew most of these options, was by typing about:buildconfig in a Firefox 2 build. This gives us the official list of build config options.

Building a Localized Firefox

There's a possibility you might want to build a version in another language. For instance, if you wanted to build the French version of Firefox, you could add the following to your .mozconfig file:

mk_add_options MOZ_CO_LOCALES=fr
mk_add_options LOCALES_CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/l10n
ac_add_options --enable-ui-locale=fr

Final Steps

In order to build "official" builds, you must set two environment variables in your build environment:

MOZILLA_OFFICIAL=1; export MOZILLA_OFFICIAL;
BUILD_OFFICIAL=1; export BUILD_OFFICIAL;

If you don't set these, your builds will have a build ID of 00000000.

Now we're ready to build. Go to the mozilla directory and type:

make -f client.mk

And wait patiently until the source code is pulled and the build is finished.

If you need to apply patches, you'll need to pull and build the code separately:

make -f client.mk pull_all

Now you can any apply patches or changes that you want in your custom version of Firefox. This might be a bugzilla patch that is not included in the default Firefox, or other changes. Then:

make -f client.mk build_all

In our next installment, we'll go over customizing and packaging an installer.

SXSW Wrapup

I'm back to work after an action packed few days.

SXSW Interactive started Friday night and when I got there, the line was outrageous, so I thought I was going to miss the first panel I wanted to attend. After waiting a little bit, I mentioned to a volunteer I was a panelist and he said "What are you waiting in this line for?" and sent me to the panelist check-in. Membership has its privileges :) . After getting my badge, I went to How to Rawk SXSW. This gave me a chance to meet Tantek in person which was cool. Then I grabbed some free food at a party and headed home.

Saturday I skipped SXSW and instead headed with my wife and a couple friends to San Antonio to volunteer at the Dave Ramsey Live Event. Awesome time. It's actually the fifth time we've volunteered. I can't recommend this event enough (or Dave Ramsey in general) if you are looking to get control of your finances.

Sunday morning I got up a little late and rolled in to SXSW. I missed the 10:00 round, but caught Non-Developers to Open Source Acolytes: Tell Me Why I Care at 11:30 which was a really good session. After a quick lunch, I headed into the show floor to check out the booths, including the Firefox booth. Mary Colvig was there, as well as Rhian and Alex Polvi.

To start the afternoon, I went to Perspectives on Designing for Global Audiences which wasn't what I expected, but at least I ran into Jonas Sicking. After that session, I went to AJAX or Flash: What's Right for You? which was a great session about when Flash or Ajax is appropriate. Slides for that session are available at slideshare.net. That was followed up with The Future of JavaScript which convinced me to actually look forward to the sunsetting of Firefox 1.5 so I can use some new JavaScript features in Operator. At 5:00, I attended People-Powered Products where I learned about lulu.com which is a great site where you can publish your own stuff.

Sunday night, I went to the Microsoft party to get some free stuff, didn't win the XBox 360, then headed over to the web awards for more free food. Then I decided to call it an early night.

Monday I got in a little later, but saw an interesting presentation by Timothy Ferriss on The 4-Hour Workweek. While I don't agree with his stance on debt and credit, the presentation was very interesting and gave me some interesting things to think about, in particular the concept of selective ignorance. Looking forward to the book. At 11:30, I went to American Cancer Society: Applying Disruptive Technology for the Nonprofit Sector which was an excellent presentation about what the American Cancer Society is doing to embrace new technology. The coolest thing they showed was the Second Life Relay For Life. After the session, I got to talk with a couple guys about developing church websites and maybe got some leads on help for updating our church website.

After that session, It was almost go time for the microformats panel. I went back to the show floor and lost track of time, so I was a little late to the green room, but no one else was there yet, so I was OK. Once everyone showed up, we chatted a little about the order of things and then Tantek put on his T-shirts and we headed over. The room was full, depsite being up against Dan Rather. I thought the panel went great. You can check out some photos or blog posts including Wired. Lots of people came up afterwards with good things to say about Operator, including some folks from Yahoo!, Apple and emurse. Also got a chance to meet Eric Meyer. He made a nice comment about Operator moving forward the semantic web. I also met a guy from developerWorks who wants to put microformats on their website. After the session, I helped a guy from opensoul.org debug a problem in Operator which I fixed, as well as a problem with his site which he fixed.

After the session, I caught the tail end of Warren Spector on The Future of Storytelling and then went to the WaSP Annual Meeting: Takin' it to the Street.

After the sessions, I was looking forward to the Mozilla Democracy Party, so I headed over. They had some good BBQ but I realized my place was at home with my family, so after eating, I headed out. Here's some pics of the party.

Tuesday I wanted to be there at ten to catch Browser Wars Retrospective: Past, Present and Future Battlefields. Two very cool things during this panel - first, Arun plugged Operator in one of the questions, and second I realized that I knew Arun from a way previous life when I worked on the OS/2 version of Netscape Navigator out at Netscape. The session as a whole was very interesting. Also very cool is that I ran into Steve Ganz before the session, who I know only because I use his resume for testing hResume :) .

The last session I attended at SXSW was After Bust 2.0: Ten Years Later, Where Will We Be? which was an entertaining session, although not terribly informative. After the session I grabbed a quick lunch at P.F. Chang's and then realized that the weather was getting bad. I decided to head home early so I didn't get caught in the rain.

All in all, a great conference although I desperately wish IBM had been there demoing more of our stuff. In particular, we have two products that would have been great to see here, the AJAX Toolkit Framework for developing AJAX applications and our enterprise social software, Lotus Connections.

Incidentally, here's some cool pictures of the river behind our house before and during the rain (we're 90 feet up, so we don't have to worry about it). Unfortunately, we didn't get a picture when the water was really high, completely covering the area on the left.

Before the rain:

Before The Rain

During the rain:

During The Rain

SXSW - Posting from my Wii (mostly)

If you are going to be at SXSW this year, you can catch me at the microformats panel on Monday at 2. I'll also be at the Mozilla/Democracy party Monday night.

(Feel free to use Operator to add those events to your calendar - both of those pages use microformats)

Operator Source Code is Finally Available

Update:ufJS and ufJSParser have ended up being integrated into Microformats.js. This will also be the core microformats code in Firefox 3. The API is documented here.

My apologies for taking so long, but the Operator source code is finally on svn.mozilla.org

For now, this includes ufJS and the ufJSParser. I am working on creating a separate project elsewhere to specifically cover the ufJS work, but for now it will be hosted with Mozilla labs.

The code is available under the trilicense.

Obviously I will accept contributions, but there is the potential that the ufJS work will be available under a different license such as the CPL, so contributors need to be aware of that.

The code in SVN corresponds to 0.7a plus hAtom support as well as fixes for the McAfee SiteAdvisor problems.

Enjoy.

Operator 0.7a is available

Operator 0.7a is available. This is an alpha release. Really.

You probably won't notice anything obvious that has changed, but under the covers, things are very different. Here's a list of some of the changes:

  • Complete rewrite of parser and actions system
  • Experimental support for species and XFN (These probably won't be in the official release)
  • More complete support for hCard and hCalendar
  • Exporting a contact or event now gives you the option to save it to disk
  • You can choose to not remove duplicate microformats
  • Various bug fixes
  • Ability to drop in Brian Suda's X2V transforms to compare results (More info on that later)
  • REMOVED: Ability to have default handlers for a given microformats

The new actions system is in flux right now, so I'm not giving any detail on how to write to it yet. Old handlers will still work, so if you have those, just drop them in.

If you find bugs, please report them as comments to this post.

As per my social contract, all code has been run through JSLint and migration from three versions of Operator have been tested.

Enjoy.

Rearchitecting Operator

Why does it seem that every piece of software needs to be rearchitected at least once or twice?

So after chatting with Andy Mitchell about his Webcards work we decided to collaborate to try to avoid duplicating effort. I'm just about done with phase one of that effort.

The results of this effort include:

  • Moving to a unified non Operator specific, non browser specific microformats parser.
  • Moving to a unified actions architecture (Extension specific right now, but we're working on that.)
  • Nearly complete support for all included microformats.
  • Ability to use legacy handlers.
  • Ease of adding new microformats (I've added XFN and species just for fun).

After much internal struggle, I decided to actually remove one of Operator's options because I think I was trying to hard. Operator has two modes, Actions and Microformats, and within Microformats, you could choose to have a "default handler" or display all handlers. If you chose not to display all handlers, you would get a similar UI (toolbar buttons), but they would only invoke the default handler. It seemed logical when I wrote it, but this function (if needed) can be emulated by actions. I hope no one complains about my removing this.

Visually, everything else remains the same, except I cleaned up the names of some of the actions. It's really only the guts that have changed. Obviously there's the potential for new bugs in this implementation, so I'm trying to get something out this week to start some testing.

If you have written handlers for Operator, please let me know so that I can make sure my legacy code is working. I'm not going to explain how to write to the new action API yet since it is not baked.

Thanks!

Parsing microformats

Update: This code is now contained in Microformats.js.

One of the things I've run into with Operator is learning how to parse microformats correctly. Instead of keeping the knowledge I've found to myself, I've decided to work with Andy Mitchell and create a generic cross browser microformat parser in JavaScript, tentatively called ufParser. That's the reason I've been so quiet.

The parser allows for the creation of definition files for microformats, so that new microformats can be added to the parser easily. So far I have all of the Operator microformats done (hCard, hCalendar, hReview, hResume, geo, xFolk, rel-tag) and I have done XFN.

We're also investigating the potential to create more generic actions as well (but I'll maintain compatibility with old style Operator actions).

The next version of Operator will definitely use the new parser, so there might be some regressions here and there. Hopefully we'll get them solved quickly

Stay tuned. I'm hoping to have something in the next week or so.

Operator 0.6.2 is available

The official release of Operator 0.6.2 is available.

Here's a full list of new features:

  • Multiple languages available thanks mainly to babelzilla.
  • Fix for the tabbing interaction bugs
  • Options menu added to statusbar and toolbar button menu
  • xFolk support (needs to be added explicitly in Options if you are not a new install)
  • tag support for ma.gnolia.com
  • Improvements to adding calendar entries
  • include-pattern support for hCard and hCalendar
  • Implied “n” optimization for hCards
  • Improved debugging dialogs to use text area instead of alerts so they can handle large data and can be copied
  • When debug mode is on, microformats with invalid items are bolded
  • When debug mode is off, invalid microformat errors are placed in the Error console
  • When you are in microformats mode with all handlers and have debug mode on, you get an additional menutem called “Debug” that displays the source and internal representation of the microformat (no more keystrokes)
  • Selecting an invalid microformat displays error and source in the same window
  • Operator now follows the bookmarks toolbar conventions for opening new windows and tabs. This includes:
    • Opening links in the current window by default
    • Middle click opens in a background tab
    • Shift+click opens in a new window
    • Ctrl/Ctrl+Shift open in a new tab based on the hidden preference browser.tabs.loadBookmarksInBackground (which is the opposite of Select new tabs opened from links - see my previous post)
  • If you right click on a microformat, the microformat handlers show up on the context menu
  • I have added an experimental feature for highlighting microformats that can be turned on in preferences. Not only does it highlight microformats when you hover over them, when you select microformats in any Operator menu, they are highlighted on the page. Please give me feedback on this item.

Here's my social contract status for this release:

  1. All code was run through JSLint
  2. All handlers were tested
  3. All migrations were tested
  4. This release contains safeguards against leaving in debug messages in
  5. I learned more XPath and was able to use it in more places to improve performance
  6. I made multiple beta versions available before the official release
  7. I fixed every bug that was reported so far

Note the "Extra Extra" tab in Debug is there for a reason - I'll be posting about that soon.

Thanks for your support!

One More Operator 0.6.2 beta

http://www.kaply.com/operator/operator.xpi

I added a few more features, so I need more testing. After this, I am totally feature frozen for the 0.6.2 release.

New features include:

  • Operator now follows the bookmarks toolbar conventions for opening new windows and tabs. This includes:
    • Opening links in the current window by default
    • Middle click opens in a background tab
    • Shift+click opens in a new window
    • Ctrl/Ctrl+Shift open in a new tab based on the hidden preference browser.tabs.loadBookmarksInBackground (which is the opposite of Select new tabs opened from links - see my previous post)
  • When you are in microformats mode with all handlers and have debug mode on, you get an additional menutem called "Debug" that displays the source and internal representation of the microformat (no more keystrokes)
  • Selecting an invalid microformat displays error and source in the same window
  • If you right click on a microformat, the microformat handlers show up on the context menu
  • I have added an experimental feature for highlighting microformats that can be turned on in preferences. Not only does it highlight microformats when you hover over them, when you select microformats in any Operator menu, they are highlighted on the page. Please give me feedback on this item.

Thanks again for your support!

Page 19 of 21« First...10«1718192021»