Continuous Integration

Release Schedule

May 2020
S M T W T F S
« Nov    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Branches

Twitter

Simply ship. Every time.

Getting MozillaBuild and CPAN talking again

08/27/2009

The Mozilla Project has a history of producing useful software and tools in the pursuit of its main mission that are not directly in the path of its mission.

MozillaBuild is one of these.

If you’re trying to build something that’s in any way similar to or remotely expects a Unix-ishy environment, and you don’t want to deal with Cygwin’s eccentricities1, MozillaBuild not only provides such an environment, but packages a host of useful goodies along with it.

In short, MozillaBuild provides enough “It Just Works ™”-ed-ness for the whole family! It’s gotten to the point where I often forget that I actually still am in Windows when using it2.

Recently, though, a jarring reminder that I was, indeed, still in Win32-land occurred as I went to install some Perl3 modules a particular tool we use pretty heavily here at Songbird depended on.
I went to run the command on our Win32 release build machine, and was met with a missing-modules error. “No matter, that’s what CPAN’s for!” I say. Weeelll… not so fast.

It turns out MozillaBuild’s Perl installation didn’t get the memo that it’s in a Win32 environment, so when you try to run CPAN, you’ll get all sorts of errors.
Apparently, I’m not the only one to have had this problem.

Since I really needed to get this tool working on Win324, I did some couples counseling with MozillaBuild5 and CPAN, and came up with a fix:

  1. Configure CPAN.

    • Log in as Administrator
    • Run perl -MCPAN -e 'shell'.
    • When prompted whether you’re “ready for manual configuration,” say “no”
    • Exit the shell
    • In an MSYS terminal, manually edit /usr/lib/perl5/5.6.1/CPAN/Config.pm; change the following variables:
      1. build_dir: [Anything that doesn't contain a space; I ended up using:] /d/.cpan/build
      2. cpan_home: /d/.cpan
      3. ftp: /bin/false
      4. keep_source_where: /d/.cpan/sources
      5. urllist: q[http://mirrors1.kernel.org/pub/CPAN], q[http://mirrors2.kernel.org/pub/CPAN], q[http://ftp.osuosl.org/pub/CPAN/]]
    • Run perl -c on /usr/lib/perl5/5.6.1/CPAN/Config.pm to make sure it compiles and you didn't typo anything in the changes you
    • Apply the following patch to /usr/lib/perl5/5.6.1/CPAN.pm.

And you're done!6
You should now be able to run commands like:

perl -MCPAN -e 'shell'
install Digest::Perl::MD5
force install URI

One (rather large) caveat to this process is many Perl modules have C extensions that get built at installation time. Most of these assume Unix, and therefore that gcc is around.
If you don't have a full MSYS environment, installing them will fail, unless you can turn these bindings off. (Even in the case of some modules (URI, for instance), they will refuse to install because of failed tests; you can get around this by forcing an installation.)
It's not perfect, but if your requirement is pure Perl modules, as mine was, it's a workable solution.7
__________________________
1 And less-than-spectacular performance
2 as much as that's possible to do; I usually remember around the point I want to copy/paste some text around...
3 Yes, yes, I know; Python forever... but every build infrastructure I've ever worked with has perl in it... somewhere
4 Otherwise, our Lord and Savior, AUTOMATION, couldn't proceed
5 I experienced this issue with MozillaBuild 1.3, but I checked the latest MozillaBuild and the Perl installation there doesn't seem to have changed, so this process+patch should still be applicable
6 What this process is generally doing is: removing paths with spaces in them, since %20's in Unix paths are a rarity; skipping manual CPAN configuration which will get tripped up on a bunch of things and generally try to install the world for you; always cause ftp commands (which use ftp.exe) to fail, since ftp.exe != the venerable unix ftp, and the CPAN module will get very confused trying to talk to it; and finally, forcing CPAN to always use wget, which MozillaBuild includes, but not use redirection to save files, since MSYS seems to (unhelpfully, I might add) attempt to translate line endings for you.
7 Until you just rewrite your can't-live-without-it tool in Python...

Firefox 3.0.11 (still) released!

06/30/2009

The definition of “latest and greatest version” just changed…

I heard some some rumbling that the latest version of Firefox, version 3.51, hit the web today.

This is most certainly a big accomplishment and everyone involved has many reasons to be proud of this release. But that’s not what I wanted to talk about2.

I wanted to step back for a moment and call out a group of really important people that are often overlooked in all the excitement during a major release: the sustaining engineering team3.

They’re the group of developers, bug triagers, QA engineers, build engineers, ops engineers, web developers, and project managers who have kept the 300 million and change Firefox 3.0.x4 users safe, secure, and stable for over a year now.

Sustaining engineering has never been particularly sexy work.
Often times, the pressures imposed by consumers of “sustaining releases” make it particularly grueling work: risk assessment becomes a large—and often difficult—part of the job. Mistakes can be very costly and affect higher numbers of users. Such users are less tolerant of sometimes-necessary changes. And in the case of many software products, Firefox included, when a security vulnerability is involved, all of these decisions and work needs to be done on a very tight schedule.

These realities are doubly true for an open source project, where the “release early, release often”-mentality5 often leaves those who toil away on sustaining efforts appearing in relative obscurity. And since open source capital is about visibility, less visibility can translate to less understanding of the actual work being done and the value these teams and individuals bring not only to the community, but to the end users.

So to those who’ve done this difficult, thankless work, quietly, consistently, and proudly: you have my thanks. And even though they may not know about you, you have the thanks of every Firefox user who is able to easily click “Check for Updates” to get today’s New Hotness ™, because your work has kept them safe and secure on the web for the past year.
If history is any guide, these tireless souls are already getting ready to do it all over again and take stewardship of 3.5.x after a couple of releases or so.
So take a moment to raise a (virtual) glass to them6… and then get back to enjoying the awesomeness that is Shiretoko.

____________________
1 Back in my day, it was called “Firefox 3.next.” P.S. Get off my lawn.
2 If you do want to read more about the 3.5 release, try here, here, here, here, here, here, here, here, here, here, here, here,here, here, here,
here, here, here, here, here, here, here, here, here, here, or here.
3 I don’t know what Mozilla Corporation calls this team, exactly; unlike some other organization, I don’t think (structurally) they split them out; but the function is the same
4 And you have to admit… it was a pretty good vintage of Firefox
5 Which, don’t get me wrong, is critical for any open source project’s success
6 Or, if you’re in a physical localized spot next to them, a real one…

Build System Improvements By the Wall Clock Numbers

03/23/2009

It’s like a Turbo button…
only faster!12

In between the constant grind of getting releases out the door, it’s often a struggle to find time to make improvements that are imminently noticeable.
That’s not to say that us build engineers are sitting in a room, typing make && cp over and over again and staring at the screen until it finishes.2

On the contrary, improvements to our build and release infrastructure are made constantly.

But they often involve making our lives easier: a script that handles errors more appropriately, or hooking up two pieces of the puzzle together, so we can go to bed at 2 am, instead of 4 am. These are not readily visible to the end-user or our customers, the developers3.
So, given that, you’ll have to forgive me for being a bit squee4 about the following:

svn up -r 13127 | grep ^Updated &&
time make -f songbird.mk > /dev/null 2>&1 &&
make -f songbird.mk clobber > /dev/null 2>&1  &&
svn up -r 13128 | grep ^Updated &&
time make -f songbird.mk > /dev/null 2>&1
Updated to revision 13127.
real  3m45.008s
user  3m7.301s
sys   0m26.064s
Updated to revision 13128.
real  2m40.991s
user  2m22.129s
sys   0m17.253s

Yes, that really is a 29% improvement in wall-clock build time.

On repeated trials, it drops to about 26%. I’m guessing this has to do with caching the source files.

And these results are from Linux; since the core problem7 had to do with excessive use of $(shell ...), and therefore fork(), the results should be even slightly better on Win32.8 I didn’t test Mac, but one of our Mac gurus twittered the Turbo before I mentioned it to anyone.

Lessons learned:

  1. make‘s $(shell ...) construct is very useful. It’s also extremely dangerous, in part because it’s so convenient, easy to use, and… useful. If you can do anything else to avoid it, do that.
  2. If you’re assigning the results of a $(shell ...) call into a variable, you probably want :=, not =. And if you really want =, see LL#1.
  3. Win32 MSYS fork()ing performance has a notoriously bad reputation… but it’s not like fork(2) is free on Linux or Mac. I’m surprised at the savings on Linux and the small delta between Linux and Win32.
  4. Running make SHELL="/bin/sh +x"9 on your project might prove very interesting to you. Are you really executing that much extra fluff in a subshell? Yes. Yes you are.10
  5. Make has a surprising number of useful functions; if you’re spending any time doing build system stuff, read up on them. I myself was guilty of doing ifeq (exists,$(shell test -e $(FILE) && echo exists) before I learned about $(wildcard ...). The former spawns three processes. The latter: zero.

This is just one of the few makeovers11 that I’m working on; there’s something in the works for the installer, and I’m working on some pretty fundamental changes to the build system itself.

(I call that project Build SystemNG, or BSNG for short.)

I’d be lying if I said I didn’t enjoy working on something that people notice… either because it’s noticeably faster or completely broken.

One of the two.
__________________________________
1the famed “rebuild the airplane while it’s in flight”-problem, which I’ve decided is probably the most asinine analogy I’ve ever heard. So I’m going to stop using it.
2 As some might have you believe
3 Except, maybe, if you’re paying attention to the amount of scotch consumed
4 I keep thinking everyone knows what this means, but I keep running into people who don’t. Even people who I would think would… don’t. So here’s a convenia-link5 for it to Urban Dictionary, in case you don’t.
6 Like a perma-link, only less permanent, and more convenient
7 Bug 15529 has all the details
8 I only had a VM to test those; I don’t have the numbers in front of me, but as I remember, they were somewhere between 30 and 32%.
9 A benchmarking hint from Mecklenberg’s O’Reilly GMake book, which I recommend
10Over half a million of them, actually… which is why tips-and-tricks are always helpful: everyone wants faster builds.
11 Hahahahhaa… make over? gmake? Get it?
12 Photo courtesy D.G.S..

Back the change out… and nobody gets hurt

02/18/2009

Remember what Preed The Build Engineer says:
“Bad Checkins Hold
Everyone Hostage!”

This Valentine’s Day1, the boyfriend and I bucked convention and took the opportunity to do something we had both randomly expressed interest in some weeks earlier, but neither of us had done before: learn how to shoot a gun.
We found a shooting range2, which offered a package deal that included a twenty minute how-to course4 followed by an hour on the range, to practice shooting a .22 caliber pistol at various things5.
(Interesting sociological note 1: a shooting range is a fascinating place to people watch while you’re waiting for your class to start.)
(Interesting sociological note 2: apparently, shooting with your significant other on Valentine’s Day is more common than one might think: we were joined by no less than six couples making use of an assortment of firearms.)
This particular range happened to be near KSFO, so afterward, we spent a few minutes watching planes land on the southeast plan, followed by a video game-related Fry’s run and (altogether too much, but oh-so-tasty) thai food.
All in all, it was a pretty awesome way to spend a day with my Valentine.

***

When I got back to the office this week, I brought one of the targets in to show off my mad, GTA-honed6 aiming skillz.7
After joking around for a bit, it became clear that this particular target could be used as a visual aid in imparting a much more important lesson.
Because as we all should know: the sooner a sad, frowny build is fixed, the sooner we can douer it.8,10
_____________________
1 Or, depending on status, location, local restriction, and phase of moon, “Singles Awareness Day”
2 Ironically3 in the South Bay; south city to be exact
3 Or not?
4 Apparently, actually discharging a firearm pales in comparison to the moral, circumstantial, and legal issues often associated with doing so?
5 Ok, just one thing.
6 Interesting sociological (or maybe merely generational) note 3: of the five people in the class, more people had played GTA than had shot a gun
7 Why yes, that is a bullet hole in the center of his forehead; there’s also one in his left eye and three centered squarely on the chest!
8 Where “douer it” is defined as “release the product9
9 A complex, three step process that involves four steps
10 Is this a sufficient number of footnotes, Mr. Dolske?

Sieben Dinge

01/16/2009

Ack! I got tagged!
Planet has been awash in this meme the last few days, so I’ll try to make mine short. Or interesting. Well… one of those, at least.
In roughly chronological order:

  1. I was born without a hip socket, a congenital birth defect that wasn’t diagnosed until I was 17 months old and everyone started wondering why I hadn’t started walking.
    They fixed it by breaking the hip bone—no high-impact plastics or metal here!— and letting the socket create itself as it healed. The body cast I was in for four months was a “minor” side-effect. Good times!
    I do have a scar; my mother was relieved that it started out about an inch long, but it grew along with my leg.
    No, you can’t see it.
  2. As a junior and senior in high school, I was a reporter and columnist for the local newspaper.
    I wrote about a number of things which made me a class and high school administration favorite, including articles on unconstitutional searches, district-wide attendance rules which were not in accordance with state education law, and asking my girlfiend-of-the-time to prom.
    (That last one got the most reader feedback of all of my columns.)
  3. I spent the last three years of college on disciplinary probation.
    To make a long story short: When asked for it, I gave some not-so-glowing feedback on a new set of “responsible use” policies the campus IT department was drafting. Unrelated to this, I ran a port scan (woo nmap!) from my dorm to locate a company server I was working on at the time (I was scanning for an open ssh port).
    The IT department used this event to put my tits in the proverbial ringer (in the parlance of our times). And unrelated to that, the experience uncovered a lot of illegal behavior by the University’s Judicial Affairs.
    I was eventually “convicted” in a campus kangaroo court where the “judge” conveniently turned out to be the same professor who had written the exact policy I had been charged with breaking.
    There’s an [embarrassingly] dated website chronicling the whole event, including MP3s from the all judicial hearings (holy crap did they hate when I posted those!) I was also on the news a couple of times.
    I still get emails every so often from current students who find the website and want to tell me about how they’re being railroaded by Judicial Affairs.
  4. The same year I was “convicted,” I wrote a web application that over 40% of the 15,000+ students at my university ended up using to get slots in perpetually impacted courses.
    The system was called CRASH: Cal-Poly Robot-Assisted Scheduling Helper.
    My bachelor’s thesis covered the history of the application. The university ran the service using my code for a couple quarters, the [awful, but functional] code was then open sourced, and about a year after I left, the University implemented the features directly within their registration system, due to outcry from students and professors.
  5. Like a few others apparently, I am a licensed pilot: airplane single engine land (ASEL) type rating with a high performance endorsement (but sadly, no instrument rating… yet).
    A lot of people know that; what you may not know is that I got interested in it because I originally wanted to be an air-traffic controller. I didn’t go that route because I became interested in it during my last year in college and couldn’t justify wasting a perfectly fine computer science degree to go push tin.
    I also couldn’t justify the federal government dictating where I’d be living based upon its opaque staffing needs.
  6. I got started in Mozilla (and coincidentally my career path) in a pretty random way: I was 17 and perusing photos posted from the first Mozilla party and I kept seeing a person in these photos that looked interesting.
    I randomly started conversing with them via email. As we chatted more about what I was doing—sysadmin at an ISP and a contractor—they offered me an internship at Netscape over that summer. It was on the client product engineering build team.
    I learned a ton of lessons while I was there about life, love, and the pursuit of a repeatable, sustainable build and release engineering process. I know a lot of software engineers find it perverse, but I feel in love.
    Searching Bonsai with a regular expression of “preed” is imminently embarrassing.
  7. I have a guilty little pleasure that when people hear it, they tend to think “Wow… this guy is super nerdy and quite possibly somewhat insane…”
    Mixing—ha ha—two skills in life I wish I had, but don’t, I blend electronica music air traffic control to make… interesting music.
    I enjoy it for a bunch of reasons, not the least of which that as a pilot, it’s good practice to listen to (and decode) that stuff. Electronica tends to ebb and flow, so it lends itself well to what you find in air traffic control transmissions as well.
    I also find it great music when I need to multitask and do a lot of [typically build-related] work simultaneously: I find it easy to work to, I find myself working faster, and it puts me in the right mindset to complete tasks succinctly and correctly, lest I smack packets carrying precious bits into each other.
    You may think it’s weird, but I have a few fans on the Internet who’ve discovered it and pester me for more mixes; one of them is a Mozilla Corp. QA’er.
    If you’re curious, listening to the first ten minutes of this will give you a pretty good idea.

Since this has been bouncing around PMO for awhile now, I’m going to point the finger at other people, many of whom work on Mozilla-related apps and technology, but some of whom who don’t and are just awesome people:

  1. John Gaunt: He used to have my job, but he got promoted to Bugzilla Janitor and Programmer Lie Detector
  2. Ali Rayl: I can’t seem to find her blog, so maybe she’ll tweet seven things we don’t know; but she spends her days making sure the Bird doesn’t suck and letting us know when it does…
  3. Nick Kreeger – Just call him “DJ Fail
  4. Rob Lord: Chief Birder; beyond his eclectic decorating tastes (which I’m more-than-slightly jealous of), I know I know 7 things about him, but I also know there are way more than 7 things I don’t know about him.
  5. Adam Fritzler: Adam does a lot of things (great photography among them) but will never be able to escape what he did first (if you’re chatting on AIM using anything but AOL’s client right now, you owe him).
  6. James Castañeda: James taught me that urban planning is a lot like programming, except it uses heavier things (like steel and concrete) and “refactoring” is slightly more “involved.”
  7. Mark Chen: Mark (via the
    FDA) [among other things] makes sure your spinach isn’t covered in poo. (He’s also a first-class recycler!)

“Speedbird eight-six-zero-heavy, runway one-right: Cleared. For. Takeoff.”

12/02/2008

At 9:15 PST this morning, Songbird 1.0 executed a beautiful takeoff.
Being a die-hard Linux user, I didn’t think anything would pull me away from my PDP8-era ncurses-based music player.
But the difficult (often behind-the-scenes) work done since in the 0.71 timeframe and leading up to the 1.0 release transformed the Bird into an imminently capable player, even for my admittedly somewhat-unorthodox uses2.
To boot, I’ve actually “lived the marketing materials” and found a bunch of music that I can’t get out of my head3 that I otherwise would have missed. Coming from that ncurses-based player, it’s quite a paradigm shift, and with extensions like mashTape, I don’t think I’ll be able to go back (even if they did stuff links into that old ncurses-based player ;-)

***

This is the first time in my career that I’ve shipped a “one-dot-oh” product.
I was expecting it to be a bit more hectic than it turned out to be, but… I’d like to think “a boring, predictable release” translates to “I’m doing my job well.” Then again, I’m also working with a great team, who make large parts of my job pretty easy (and enjoyable, to boot).
I’m really pleased by the way my first 1-dot-oh turned out.
And while there’s lots of work to do, lots of features to add, and, sure, probably a couple of bugs to fix, Songbird is a pretty awesome application, one all of us should be proud to have among Mozilla’s ranks, showcasing the power of the platform’s technology.
You can grab your copy at getsongbird.com.
The real question now: is 10 am too early for scotch?6
_________________
1 Seems so long ago…
2 Lots of FLAC content and a lot of streaming…
3 … some of it somewhat… embarrassing to actually admit I like…4
4 <cough>Rihanna’s Don’t Stop the Music</cough>5
5 If you had been reading this blog post in Songbird, you could have clicked on that link and gotten that song stuck in your head too!
6 Alright, alright, maybe I’ll wait until lunch…

A Product Review I Can Identify With

11/12/2008

CNet recently reviewed the upcoming Songbird 1.0 release, with a title I can certainly identify with.
([Possibly?] obviously, the 1.0-era is a stressful time for everyone, including your resident release engineer; as such, I haven’t had a chance to write about the many unique experiences a one-dot-oh release of a product entails1. Despite this, I’m still intending to loop back around and discuss some interesting bits…)
Anyway, I thought calling it out appropriate, especially since I noticed it on GREEADER while I was tallying up my logbook so I could file the paperwork for my high performance endorsement.
Makes me wonder what Songbird’s future clearances will be…
_________________________________
1 Which [also possibly?] surprisingly is my first…

jemalloc: now with 100% more NS_DEBUG!

08/27/2008

I’ve been meaning to write about this for at least a month, but… time flies when you’re having fun releasing software.
One of the things we’ve been spending a lot of time on lately at the Nest is the Bird’s performance. After Stuart’s work on jemalloc1, that seemed like some tasty, low-hanging fruit. I started work on getting that turned on in XULRunner.
For Linux, it was pretty much what you’d expect: flip the --enable-jemalloc flag, and now we’re cookin’ allocatin’ with gas!
Win32 took… well… a “little more time,” and I can say that I now know way more about Win32 linking semantics and library symbols than I ever wanted to.
For Win32 XULRunner release builds, it was an experience not-unlike Linux: flip the flag and you’re good to go.
But we build all of our dependent binaries in both (shippable-) release AND (developer-friendly-) debug modes. When I went to compile the debug-jemalloc versions, I hit a pretty innocuous error—a missing symbol—that would unravel into a much bigger project.
The initial error turned out to be a side-effect of the way Microsoft’s compiler munges symbols in debug mode: it prefixes an underscore to differentiate them. The problem was XULRunner would try to link with symbols in mozcrt19.dll which did not exist, because mozcrt19.dll is always built in release-mode. “No biggie,” I thought; “just build mozcrt19 in debug mode.”
This turned out to be a “biggie.”
The main problem with that approach is that “just turning on debug mode” points the CRT build process at a completely different set of support files to build the DLL. The build magic that was used to get Microsoft’s CRT building in the first place didn’t provide these supporting files in debug mode.
After poking around some more, it became clear why integrating mozcrt19.dll didn’t involve of changes to linker flags for Firefox: DLLs embed information about themselves inside, and mozcrt19.dll was reporting itself as the MSVCRT. Microsoft documents in the CRT source that you should not do this2, and this is one of the reasons.
I briefly toyed with the idea of making the DLL report itself as the debug version of MSVCRT(D), but then decided to fix it correctly3 and create a full set of .def files (which describe the exported symbols in a DLL), to get a build that creates both a DLL named “mozcrt19[d].dll” and reports itself internally as such.
This took a bit of time (and some makefile hackery that I’m not uhh… “super proud” of), but using the framework that bsmedberg and Ted set up, and the build process that bsmedberg reverse engineered, I was able to get a DLL.
In the process, I also converted the original CRT patch to use #ifdef MOZ_MEMORY, so if the source-modifications ever have to be revisited, it’s easy to see by visual inspection what we’re patching around. (This CRT integration is very clean; only touches a few files in a few spots).
Even after the CRT was building, I wasn’t quite done:

  1. Had to add some dummy stub-code to jemalloc.c, so certain _dbg versions of symbols weren’t missing
  2. Had to grab the .lib and .pdbs out of the build, so developers could actually build against the DLL (on Win32, having the DLL isn’t quite enough; news to me!)
  3. Make it possible to turn jemalloc off for certain parts of the build

That last one turned out to be a bit of a project, and one might wonder “Why would you even want to do this?”
For certain parts of Firefox, like crashreporter and updater, you don’t tend to want them linked dynamically (the former because you want crashreporter to be as self-contained as possible4 and the latter because it can’t update .DLLs that are in use, so if your update tool relies on any DLLs to run, it wouldn’t be able to update them).
Some of this was done, but even still, it took me a couple of attempts to get this right: the first involved using the original design of the jemalloc patch, which munged various environment variables to point the compiler at the right DLLs. I wanted to create a DISABLE_MOZ_MEMORY flag that the build system would pay attention to for these utilities.5
As I was doing this, I ran into yet more linking problems6, this time in crashreporter. This mostly had to do with the fact that you have to specify at .c-file compile time whether you’re compiling statically or not7, so to get that flag, you have to tell the Mozilla-build system you want it.
Anyway, after a couple of weeks working on this, and then another week or so tweaking it after it landed in the nightlies, we’ve shipped two Songbird releases with both release and debug mozcrts available in XULRunner.
While working on this, I was somewhat surprised that this wouldn’t affect Firefox, and even more surprised that no one had run into this8. It turns out that this landmine had been “experimentally found” due to a crash. There had been some trouble investigating the crash, because of the inability to build “standard” debug builds on Win32, so getting debug builds working again should be useful.
The upshot of all of this work is being tracked in bug 429745, and consists of three patches:

  1. Updated CRT patch; this is probably the most annoying to review, because it’s all patch-to-a-patch-y. I’ve been thinking of ways to show correctness with pre-processed versions of the .c files in various configurations, to easily see that the release-versions are the same.
  2. The build-goo to handle building in debug mode, copy the mozcrt bits (.dll, .lib, and .pdb) around to the proper places, and point the build at them
  3. The build-goo to make the tools we want to be static, static.

After a TON of help from Mark Yen, some advice from Ted, and a good foundation to build on from bsmedberg, they’re currently out to an always-busy-Ted for review9.
And I’m hoping we can get it integrated, so debug builds using the-allocator-we-ship return for Firefox 3.1.
________________________________
1 Which we at some point affectionately started pronouncing as “gem-a-lock”
2 But, of course, isn’t entirely clear on what you should be doing
3 And more… involvedly…
4 Thought experiment: what if your topcrasher is in jemalloc, but crashreporter uses jemalloc as its allocator?
5 And a few others… xpidl, xpt_link, xptdump, etc.
6 Which are the most annoying to debug, since the failure often happens at either at xul.dll link time or even closer to the end of the build
7 Insert days of head-banging and cussing here.
8 I guess the observation that most Firefox devs are developing on either Linux or Mac is true? After this experience, makes total sense…
9 And actually, I wrote most of this blog post yesterday, and he already got around to feedback on the main build patch; so now it’s on me to refresh the patch!

Fasterfox

08/07/2008

“Without admitting guilt,

I promise to appear at the time and place indicated below…”

A few months ago, my driving was noticed by the California Highway Patrol… in a not-so-flattering way.1
*cough*2
Anyway, a small, triple-digit fine and some clickity-clacking on the Superior Court’s website later, I was all signed up for traffic school.
I had never gotten a speeding ticket before, so to be honest, I was a bit curious about what traffic school was going to be like. Being a “child3 of the Internet,” I opted for taking it online.
This, of course, meant using Firefox. I was also curious whether the myriad traffic school sites would work with Firefox, especially a Firefox running NoScript, with “Ask me about all cookies…”4 turned on.
Some observations about the experience:

  • A lot of the sites listed on that page are seemingly run by the same company, just with a different domain name. I’m basing this off the fact that the URLs and content for a lot of the “How does it work?”-type pages were exactly the same; apparently, one of the major differentiators is domain name?!! (Ala “Do I want to learn about stoplights from my couch in my underwear from 4lazytrafficschool.com or notguiltytrafficschool.com?!! I just can’t decide!!”)
  • Some online schools supposedly use Flash and other multimedia as teaching aids; since there were so many to choose from, I randomly picked one and apparently its concept of “multimedia” was stealing images from Ontario’s Ministry of Transportation5
  • Given my disappointment about the lack of (proprietorially driven) multimedia content, I popped up LiveHTTPHeaders6 to see just exactly what information was being sent to the server. Much to my dismay, there wasn’t any fancy JavaScript, doing… well… anything I figured they’d be doing…
  • … like timers to see how long you’ve been on a page7, or which answers you initially selected, but then changed. I would imagine this data would be interesting, sociologically, if not useful for designing better teaching content. It’s all about data8, right?
  • Scrapbook is a super-useful extension for such things. Just saying.9
  • The National Traffic Safety Administration uses FreeBSD. Good on them.

In some sense, the entire experience was a little underwhelming. It’s almost as if the application—Coldfusion, by the way—was some enterprise app that hadn’t been touched in a few years. I suppose since the competition in the space is pretty rough and you can only get away with charging about $15 for online school, the margins are pretty slim.
As I was reading through my “You’ve successfully completed your traffic school requirements. Your certificate will be delivered to the court listed”-email, I had a thought that these types of sites are great indicators for us.
I figure we can probably declare the Web to really be “open” when sites like these are presenting their content using SVG and <video>, not “something else.”
Having said that, I hopefully won’t have another chance to test it out before that’s the case…
___________________________
1 Unless you find summons flattering.
2 In my defense, the officer really didn’t have a case. I probably was going a bit fast, but asking the person you just pulled over “Hey, what speed do you think you were going?” and then writing the ticket for the numerical value they responded with, along with a “You had to be going fast; I didn’t get you on any [legally admissible evidence like, oh... say...] radar” isn’t very inspiring.
3 Ok, ok… teenager
4 To which I pretty much habitually deny… yah, yah… I’m still grasping at privacy straws…
5 Yes, no squeezing, plz.
6 Extensions, FTW!
7 They “solved” this problem by putting “little tidbits of useless knowledge” into the content, such as—I kid you not—how the author found Jesus, and then quizzing you on that each chapter, in addition to the actual relevant material.
8 To improve user-value and -experience, of course.
9 This is not to imply that I skated through the lessons and didn’t read any of them. On the contrary, I considered this a bit of a BFR-only-for-driving, but I must admit I didn’t learn much new.10
10 I must also admit that I’m a bit saddened by that.

A Short Course in Investing in Perilous Times

06/10/2008

With gas1 hitting $4.99/gallon in California today for the cheap stuff (and the expensive stuff getting mighty cozy with the halfway marker to $6/gallon gas), things are starting to get interesting.2
[[100 LL]] is already over $6/gallon, prompting an as-of-today $26/Hobbs-hour fuel surcharge on top of the plane rental.
Ouch.
Despite the skyrocketing food and oil prices, a pathetic dollar, and the uncertainty and angst that comes along with that4, it is nice to know there remains a currency that will hold its value.


Can I power my Civic on this stuff?!

It “magically” appeared on my desk today.
Apparently, my reputation precedes me…
Despite the temptation, it will have to wait for a couple of days; rc4 just went out today; final looks to be right around the corner.
_______________________________
1 Or “petrol,” as some would call it…
2 Yes, yes… I know basically all of .eu is going “Yeah? So?!! You whiny bitches…”3
3 Alas, it is true… we are whiny bitches…
4 Not only to us whiny Americans, but to the nations who are so nice to finance all of our debt for us

Newer Posts
Older Posts