Thank You, Firebug (2017)
getfirebug.com
getfirebug.com
From my point of view it was really a game changer. The first time debugging and understanding web-applications became accessible. Probably all browser dev tools were inspired by this tool
I still think the Mozilla team did Firebug a dirty by reimplementing what was an inferior version instead of bringing it home.
That's when we switched to Chrome for debugging, and only come back to Firefox to debug endless loops and stack overflows (because their Javascript VM is still better at being able to suspend/trace those)
It’s hard to tell with autodidacts if they really got pissed off about something or just needed an excuse to deep dive into something completely unrelated, and I would definitely peg him as one.
Joe Hewitt begat DOM Inspector[1], which, after Hewitt left Netscape, begat Firebug (originally "FireBug"), and then pretty much every other Web developer tool began as an attempt to create something that could compete with what was available in the Mozilla ecosystem.
1. https://en.wikipedia.org/wiki/DOM_Inspector
2. https://web.archive.org/web/20060419170530/http://www.joehew...
I taught myself programming with ASP Classic (VBScript) completely unaware of debuggers and it was normal to dump variable values to the output to try understand what was happening.
I did the same with PHP and initially the same with JavaScript.
However, once I learnt how to debug in Chrome’s dev tools, the idea of working without a debugger for any programming became unthinkable.
Still, I can't comprehend how you could develop anything in Javascript with just console.print either. You have my respect and admiration.
It wasn't too dissimilar to developing a gui app, you could print to the console, raise a dialog, or if you wanted to be fancy implement a log with a window or pane to show them. Logging is what I use today for backend systems. It is usually enough, only breaking out a debugger once or twice a year.
From a usability POV, it's entirely defendable: make the DOM visually look like the HTML you authored. But Firebug and our current browser devtools only add them for aesthetics and familiarity.
It rarely causes problems, but it'll explain why you'll see `<tbody>` in DevTools even if your HTML doesn't have it. Still, I think dropping the HTML-y representation of DOM elements could be a win — removing end tags in particular would improve the information density.
Bonus: A Firebug Cheatsheet I made in 2007, 4 years before I was working on Chrome DevTools: https://imgur.com/I2KbZWm
And that's even with the advantage of modern hardware and and the trick where modern development tools will choose to elide elements in favor of showing a message that says that some nodes are hidden, with a button to e.g. "Show all 347 nodes". I just tried this with a 5000-row table, and clicking the "Show all[...]" button in Firefox's built-in developer tools has seemingly no effect at first—the inspector appears appears unresponsive for several seconds, before finally painting the expansion. In programs from 15 years ago running on 15+ year old hardware, on the other hand, this could expected to be nearly instant.
Jamie Brandon recently complained about this sort of thing, comparing the experience of creating an information-dense UI using imgui versus doing the same "on the web" (i.e. in the browser, using HTML):
I still google "box sizing paul irish" every now and then to get to your blog… I can hardly believe it has been 10 years since you published that, time flies.
https://www-archive.mozilla.org/projects/venkman/
edit: there's a nice write-up of how firebug got started here https://flailingmonkey.com/the-history-of-firebug
Is it, really? The experience of Venkman was horrendous. Not quite as bad as MS’s Script Debugger (I don’t remember venkman crashing multiple times per session, and it was able to debug the toplevel frame), but still just awful all around.
And more relevant, it was nothing special, at least that I remember. It was notable in being a “normal” extension, but that aside it was a pretty standard if not sub-par debugger experience for the time.
But going back to the relevance subject, I don't really think it is worth mentioning. But not because of performance but because it was a fairly different thing. Mostly just a JS debugger with a couple of additional tools and little/no support. Usually you would need a bunch of other scripts such as XRAY [0] and others to reach a functionality somewhat comparable to Firebug.
- modal interface*
- bloat
- dubious** interface labels, like "DOM" (or whatever) to look at the object's property tree
- totally sucked at debugging any part of the Gecko runtime/toolkit code, or anything that wasn't a Web page (including e.g. Firebug's own code)
* This is a misfeature that every browser's built-in devtools copied, and it's completely mystifying. Thanks, Firebug, but I want the script debugger to be separate from the DOM Inspector, so I can have both on screen at the same time (and I want to be able to have multiple inspectors for multiple objects open at the same time, too, for that matter, so I don't have to keep flipping back and forth between them like I'm navigating fullscreen mobile apps and being forced to think through a straw. I don't even use multiple large displays; I use a 13" laptop screen for everything. No idea why all the proponents of large, multi-screen setups don't bristle about this to an even noisier degree.)
** Generous description; "inaccurate" (or just plain "wrong") would be accurate
As for persons, I like the decisions that Hewitt made when he made DOM Inspector before going on to do Firebug. It was like UNIX pipes (incl. that you can string them together to arbitrary lengths), but with dynamic visual inspectors on each side, instead of bytestreams/text. Firebug was not that. It was one step forward, two steps back.
A few years ago, I had a colleague come by with bug he couldn't solve in an HTA tool window. There's no built-in console or anything... but I showed him how to copy/paste the Firebug Lite minified JS into a <script> tag, and how he could then press F12 to bring up Firebug Lite inside the HTA tool window. (Note Firebug Lite supported IE all the way back to 6). He was able to quickly debug & resolve the problem.
Thanks Firebug!
There's also weinre <https://people.apache.org/~pmuellr/weinre/>, which is the same with the (old) WebKit Inspector code, rather than Firebug.
Afterwards, IIRC, Microsoft released a debugger for IE built into Visual Studio, and later both IE and Chrome followed Firebugs footsteps.
I wasn't a particularly good developer then,
and the complete lack of debugging tools made
it even worse
Yeah! Before Firebug, I was strictly a "do it server-side" guy at all costs. The experience of trying to debug JS on any browser, let alone multiple browsers, was just a total crapshow. I was 10x, maybe 20x more productive server-side.Firebug changed that. It truly paved the way for actually-sane client side development/debugging.
It is not an understatement to say that Firebug changed the world.
The first web inspector that I used was Xyle Scope in 2004. It was an early tool based on Apple's new Safari engine. It was a few years before Firebug was released, and even then it took a while for Firebug to beat Xyle Scope in features.
I still have the lingering feeling that Xyle Scope's UI was better at directly inspecting HTML and CSS than our current tools. Although that maybe the haze of nostalgia. I found it hard to find any really good screen shots but here is one:
https://taoofmac.com/space/apps/xyle_scope
Of course, FireBug and its successors do so much more than just HTML/CSS inspection. I would often jump between Firebug and Xyle Scope. Eventually, Cultured Code the developers for Xyle Scope focused their talents on creating their Things task manager.
I find that because of all the encapsulation and transpilation tricks, it’s basically impossible to get a hold of my state or functions in the dev tools during runtime. The best I can do is forcibly set window.state and do a bit of work.
I can set breakpoints and do all that stuff. But I remember back in the bad days when it was pretty easy to “find your app” from the dev tools.
I’m probably doing a poor job describing it, but does anyone else experience this?
Recent thoughts by one of the Eve/Light Table developers:
<https://www.scattered-thoughts.net/writing/coding/>
(Ctrl+F on "hard-to-query state" and "reachable".)
Flash was way beyond the web stack of that time in pretty much every aspect, and it would still have some advantages even today if it was still supported.
But Adobe completely dropped the ball. The plugin was a buggy mess, which regularly topped the charts in term of vulnerabilities and accessibility was pretty bad, all fixable problems they didn't fix. Adobe also didn't work with browser vendors and web standardization bodies to improve integration, instead relying on the already obsolete nsapi. Browsers kept nsapi support just for Flash, but as some point, enough is enough. I believe that with a bit more care from Adobe, Flash could have been part of the web standards, and I think it would have been better that what we have now.
I don't know much about Silverlight but it looks like a Flash knockoff that didn't fix any of the core issue Flash had.
But good luck teaching them how to make that tetris clone in React nowadays...
When all of the vendors have a similar product, you chose based on feature set and cost (not all costs are monetary). When only one vendor has an interesting feature set, you need to ask yourself why, and it it’s too good to be true.
You get the feeling that Apple wasn't going to support Adobe's Flash plugin on the iPhone, no matter what. Too battery-inefficient, too laden with security holes. They weren't going to pour billions into the iPhone just to have it be a delivery mechanism for Adobe's mess of a runtime.
I see three alternate histories:
1. The iPhone launches without Flash, and it flops, because most of the Alexa top 500 is totally reliant on Flash.
2. The iPhone launches without Flash, just like in our timeline, and it's good enough that people still embrace it. Eventually this kills off Flash just like in our timeline, but it's a slower and more painful transition.
3. Apple agrees to support Flash on the iPhone, but only via an agreement with Adobe that lets Apple develop their own (safer, performant) Flash layer that stays in sync with Adobe's plugin via legally binding terms of the contract or whatever.
In two out of these three alternate histories, we're still stuck with Flash today.
If Flash would not be the lame duck it was at the time, and Adobe not as defunct, iPhone would simply include it.
Lol. The reason Apple didn't support Flash was it was too good. If flash was supported 100% (practically natively) - there would be no point creating native apps in objective C (Flash was a full decade ahead). Flash devs would have coded circles around objective C devs. This could have screwed over the entire ios ecosystem. Once flash was dead and gone: SWIFT!
The competition with native may have been part of the consideration, but this was far from the full argument. It was also much too bad. It was power hungry, as noted by others, because flash content tended to be driven by a million timers, but also, its interaction model was a disaster on touch screens. Even on desktop, one of the problems with Flash content was confusion about whether UI events were owned by some object inside the Flash widget or the enclosing browser. Plus, Flash was a whole universe of nonstandard UI elements that would have made uptake of the iphone interface more difficult.
There is no part of me that believes the idea that "Flash devs could have coded circles around objective C devs." If the mobile app explosion had happened in Flash, it wouldn't have been an explosion. It would have been a flop.
(Aside: Microsoft got caught in the same proprietary "standards" problem having to ship Adobe Type Manager with Windows for just about the entire history of Windows and then eventually paying Adobe enough to get to the source code and fork their own version of it that they could entirely own for vulnerability scanning while maintaining backwards compatibility. Also presumably at great cost.)
It certainly seems easy to understand why Apple might have been hesitant to depend on yet another proprietary binary drop from Adobe as core OS service in iOS had they embedded Flash into iOS Safari given that expensive history already with Adobe Type Manager.
(Adobe may have indirectly killed Flash just by that history/reputation of being a bad, expensive vendor with tons of vulnerabilities and charging Apple and Microsoft an arm and a leg to fix those vulnerabilities.)
Given the number of bugs in Flash (and how long Adobe took to fix them), I believe this is also reasonable.
I believe that competition was a real motivator, but it wasn't the only reason.
Flash devs would have coded circles around objective C devs
Wow. Bold statement.I don't doubt that there were many talented Flash developers. All the ones I encountered were... not that.
Not that they were bad people, but they were mostly designers new to software dev, slapping together code as fast as possible to make it work.
Also, an interpreted runtime was never going to run circles around native code.
This could have screwed over the entire ios ecosystem
There was no ecosystem at that point.It wasn't good on mobile. And at that point it was barely good on desktop, too. By good we mean: power and memory consumption, security vulnerabilities etc.
You just don't remember how badly Adobe mismanaged the whole thing.
I'm really sad that Microsoft put all thier eggs in the Chrome/Chromium basket, instead of continuing thier own engine, or supporting Firefox.
VisualAge for Java, the precursor for Eclipse, was the first IDE where the debugger was stable. However the editor would just up and crash instead, which is worse. Symantec had the first generally stable IDE in VisualCAFE.
I learned to obsessively type CTRL-S on word processors in college. But that came to adulthood with me because of shit IDEs. I’ve used Jetbrains for more than 15 years. I know it saves when it loses focus. And I still hit save about ten times a day.
I knew I was in for an alert() debugging session when that error showed up.
That said, even at the time the definition was not really clear. I remember a joke, why Web 2.0 is like teen sex... Everyone is talking about it, almost noone is doing it, and even those that are, are probably doing it wrong.
Fun times. You could change the image without reloading the page. Woohoo!
It makes web debugging sound like a religious struggle.
Nowadays we take the dev tools for granted but I'll always remember Firebug as the original dev tools and it being absolutely amazing for the time.
Before firebug in the IE6 days, there was a script that you could inject into your page which created a draggable floating window in the document with a basic console and maybe some DOM view. I can't remember the name.
function addStuff(a, b) {
return a + b;
}
function logFunction() {
console.log(addStuff);
}
logFunction();
And have it log out that `addStuff` is defined on line 1.Loved that software and it truly kindled the frontend developer inside me.
Don't remember if it was built in or not. Anyone remember what it was called?