Category Archives: Editorials

Competing with pen & paper

In tonight’s linear algebra class, I made the mistake of leaving my paper notebook home. Ok, I thought, I’ll just use Amaya and see how that goes.

Not so well, it turns out.

Twenty minutes of lecture equals a frantic “where is that thing?”, and nothing learned…

  • The template for a MathML subscript is in a different panel from the template for a MathML summation (“sigma”), and you have to switch between panels constantly.
  • If you want two subscripts (and in linear algebra, two subscripts for an element is common), you get a modal dialog.  (Really? How many subscripts does an element need?)
  • Where’s the special “M” symbol for matrix spaces? (I’d post it, but WordPress eats everything after that U+1D544 character!)  We can get the real number set with ℝ..
  • The UI for Amaya is hard-coded, so I can’t change it at all.
  • Amaya’s copy & paste support is terrible.
  • It takes about 2 seconds to write [Ai]1j with pen & paper. In Amaya that takes somewhere around ten seconds, plus the dialog I mentioned earlier.
  • Oh, and the instructor’s going on, keeping a pace for students using pen & paper… there’s no chance of me keeping up with him.

After twenty minutes of trying to quickly jot down what he’s saying, without comprehension, I end up with some symbolic gobbledygook that’s probably about 80% of a match to what the instructor is actually saying.  But what I was able to write down was complete nonsense.

I ended up switching to scratch paper and pen, where I was not only able to keep up, but ask some insightful questions.

(Incidentally, I glanced at LibreOffice tonight as well.  I saw immediately that I’d have fundamentally the same problems:  unfamiliar UI and lots of context switching.  Too much to really listen to what the instructor’s saying.)

How does a computer compete with pen & paper?

Later tonight, I realized, if it only takes five quick, essentially subconscious penstrokes to draw Ai, and a fair bit of training to teach someone the equivalent keystrokes in an editor… then maybe a keyboard and mouse are the wrong tools to give a student.  Maybe something closer to pen & paper is best for quickly jotting down something, and then translating it to markup later… which sounds like character recognition.

Hmm, isn’t that something digital tablets and styluses are somewhat good at?  Maybe not perfect, but easier for a human to work with than a memorized set of keystrokes.

Now, I am starting to understand why computer manufacturers (and Firefox OS developers) are putting so much effort into supporting touchscreens:  because they’re useful for taking notes, at least.  Once again, I’ve somewhat missed the boat.

How does this impact my editor project?

The good news is this is way too complicated for me to even attempt in my proof-of-concept editor that I’m trying to build.  (The proof of concept is about making each XML language an add-on to the core editor.)

The bad news is if I ever want students to regularly use computers in a mathematics classroom (which is the raison d’être I even started working with computers as a child), I’m going to need to support tablet computers and styluses.  That’s a whole can of worms I’m not even remotely prepared to look at.  This raises the bar extremely high.  I’m writing this blog post mainly for myself as a future reference, but it means I’ve just discovered a Very Hard Problem is really a Much, Much Harder Problem than I ever imagined.

An insightful statement from a mathematics course

I’m taking a Linear Algebra course this fall.  Last night, my instructor said something quite interesting:

“We are building a model of Euclidean geometry in our vector space. Then we can prove our axioms of geometry (as theorems).”

This would sound like technobabble to me even a week ago, but what he’s really saying is this:

“If you can implement one system’s basic rules or axioms in another system, you can build a model of that first system in the second.”

Programmers and website builders build models of systems all the time, and unconsciously, we build on top of other systems. Think about that when you write JavaScript code: the people who implement JavaScript engines are building a model for millions of people to use that they’ll never meet. I suppose the same could be said of any modern programming language, compiler, transpiler or interpreter.

The beauty for those of us who work in the model is that we (theoretically) shouldn’t need to care what platform we run on. (In practice, there are differences, which is why we want platforms to implement standards, so we can concentrate on using the theoretical model we depend on.)

On the flip side, that also means that building and maintaining that fundamental system we build on top of has to be done very, very carefully.  If you’re building something for others to use (and chances are, when you’re writing software, you’re doing exactly that), you really have to think about how you want others to use your system, and how others might try to use your system in ways you don’t expect.

It’s really quite a profound duty that we take on when we craft software for others to use.

Verbosio: It’s time to ask for help.

Yesterday afternoon, I spotted a sentence in a Planet Mozilla Projects page which shocked me to no end.  Benoit Jacob was advocating the end of MathML in Mozilla code.  The thread has attracted a lot of responses, and the tone largely opposed to his proposal.

Personally, I’m opposed to it as well.  MathML is one of those frontiers which has immense unexplored potential.  Can you imagine writing e-mails to instructors with inline mathematics formulae, or including equations in an instant messaging chat?  I can and have imagined exactly that for as long as I can remember.  I tried once upon a time to bring MathML into Mozilla Composer with my Abacus project, but determined it was too hard and too hacky to be a true solution.

This is precisely why I’ve been working on my prototype XML editor, Verbosio.  It’s supposed to be a complete rewrite of how we create and edit web pages.  The idea is that a language like MathML is simply a Mozilla add-on to the editor.  Unfortunately I’ve been buried with both full-time work and college to make any real progress on my Verbosio project on my own.

I’ve said for years that I didn’t want to attract a larger audience on an unproven principle.  Maybe that’s the wrong decision in this open-source Mozilla community.  While I still believe in the idea, I’ve become my own bottleneck.  It’s far past time for me to swallow my pride and admit that.

What I need to continue development is some help – and I don’t care how junior that help is, as long as they’re capable of writing JavaScript and willing to learn.  Two to five people who can work with me by e-mail and are patient can achieve far, far more than I can on my own.  I can train other engineers in this technology.  I can teach and explain what I’m trying to do and why at a deep level.

We’ve seen major improvements to browsers over the last five years:  HTML 5 form controls, audio and video, faster JavaScript performance, etc.  All of these areas are attractive.  Editing web pages?  Not so much – except to me.  The ability to write efficiently is still as important as the ability to read efficiently.

So, if you’re a budding JavaScript developer who wants to get into something experimental with someone who won’t quit on the idea, please leave a comment.  I should’ve asked you years ago.

Do you have a tech hobby that needs some love? Let me know!

I’m thinking about scheduling a week-long retreat in July for a small group of techies – say, six to ten people.

In past years, I’ve found that a week at OSCON was some of the most fun I’ve had – particularly being around lots of high-powered brain talent. It wasn’t so much that their fields paralleled mine – far from it – but the inspiration of seeing what others can accomplish has usually propelled me to some of my best moments as a tech myself.

So that’s the why. Get a whole bunch of bright people together for something other than their day jobs, and interesting things begin to happen. An informal brain trust, basically.

I have my own tech hobby, but I work on it alone. I’m not asking for help on it, but I am asking if there are other people like me in the same situation. Here’s what I’m suggesting, in concrete terms:

  • People involved (this means you!) must have a hobby involving technology.
  • That hobby must not be their day job!
  • People involved should be able to commit one week’s vacation time.
  • They must be willing to spend that week around ten to twelve other tech hobbyists, in a relatively small space – say, a large conference room.
  • They must be willing to spend that week somewhere away from home… say, Napa wine country
  • They must be willing to work extensively on their hobby during this week.
  • They must be willing to talk about their own projects – and to listen to others talking about their projects.
  • They must be willing to take some time as regular vacationers… say, a trip around the vineyards in Napa Valley. 🙂
  • They must be willing to have fun!

If there’s enough people interested, I can try to set up a “Week For Hobbies” tech retreat somewhere. If I get a lot of people, I’d probably go so far as to invite a couple students (who may not have hobbies yet, but an interest). Talk to me in the comments!

(Also, if you have blogs that are syndicated to other tech Planets than Planet Mozilla, feel free to post links to this blog where others will see it. I specifically do not want this to be a Mozilla-friends-and-family-only event!)

We are still here!

It’s kind of amazing to think about all the people who’ve been with the Mozilla project for a very long time. For me, I also take note that I’m now a member of that group – maybe not the respected (and very competent!) elder that Mike Shaver, Boris Zbarsky or even Brendan Eich are, but still someone who’s been around the block a bit.

Specifically, for ten years now. On March 4, 2001, I filed my first Bugzilla bug. I don’t remember whether I was working on my book at the time, or if I was just tinkering around with JavaScript, but I do remember that zeal I had – because that zeal has never gone away. The feeling that says, “This is just wrong, we should fix this.” I still get that feeling quite often, though usually more about my code than Mozilla’s. (I love our automated testing frameworks, by the way… they make it much easier to have confidence in code I write!)

Of course, I filed a lot of bogus bugs back then, by which process I learned the hard way about reading specifications, and that specifications are often “wrong” (incomplete, useless, or impractical). I also learned the hard way that I’m even more often wrong. It’s why I started saying three months later, “The first step in confirming there is a bug in someone else’s work is confirming there are none in your own.” (June 30, 2001, if anyone’s curious.)

If I had to summarize the most important thing I’ve learned over the last ten years, it’s that. Sure, there’s a long list of technologies, but it’s that human factor which is biggest. In simple language, the quote means “make sure you’re right before accusing someone else.” In Biblical language,


Why do you notice the splinter in your brother’s eye, but do not perceive the wooden beam in your own eye? How can you say to your brother, ‘Let me remove that splinter from your eye,’ while the wooden beam is in your eye? You hypocrite, remove the wooden beam from your eye first; then you will see clearly to remove the splinter from your brother’s eye.

— Matthew, 7:3-5

Also, the fact Mozilla’s been around for that long is pretty good stuff too. Indeed, we need not fear the machines. I remember that which matters most: We are still here!

Gaudete, gaudete!

Whether you’re Christian or not, there’s some good music out there from Christianity. Here’s one called “Gaudete”.

(In case you’re wondering, I listen to a wide variety of music, including some based on other religions. Some of it’s really good.)

Someone once told me that the human voice in song was one of the few aspects of heaven we could experience on Earth. I wish I could remember the exact quote.

Why should I register just to fix your site?

This is something of an open letter to companies like Yahoo!, Facebook, Meebo, MSN, anybody that requires a new registration before people can play with their products.

Why won’t you give us techies a public, testing-only login that doesn’t require we tell you our life stories?

At each of the three companies I’ve worked for as a software engineer, I’ve worked on browser bugs relating to third-party websites. The QA team finds a bug on a website that I don’t normally visit. I go to the site, and discover I need to create a whole new account on their site. That means going through the terms of service, the privacy policy, yadda-yadda-yadda, and giving up a bunch of information that I would really rather not spend the time giving just to reproduce one stinking little bug. Either that, or outright lie (which believe it or not, I hate even more, and I won’t do for this).

But of course, I have to. That’s how these sites get probably three percent of their new members, including me.

I’m not trying to hack your websites – just the opposite. I’m trying to make them work with our products. I’m a technical customer – technical both as an engineer, and as a person who isn’t really going to buy anything from you or click on your banner ads. I’m on your site for two minutes.

Honestly, can’t you just put out a few “developer-test” logins that operate in a sandbox, away from your production environment and real customers? Disable any commands that send e-mails (except between the dev-test logins), restrict the number of accounts in the sandbox, let a company grab accounts on these isolated boxes for short periods of time (a week or two) for testing purposes only.

Or license a second class of logins altogether, just for user-testing. If anything, it might give your potential customers a chance to experience what you’re doing without committing all the way. If they like it, they’re more likely to become real customers… and more likely to use your product and make you money. (That applies to me, too – if I can “test-drive” it without signing up, I’m far more likely to play with it and actually sign up if I like it.)

You can’t give me this “we want to protect our customers from hackers” line, though. You make it so simple for people to sign up for your services that the bad guys can get an account just by filling in a few form fields, and they have far less ethics about this than I do. How does that protect your real customers?

Look, if your website doesn’t work in my product, then the customers we share are unhappy. They don’t get what they want, which means we don’t get what we want and you don’t get what you want. Nobody wins then. All I’m asking is that you don’t make me jump through hoops to complete that agreement between web site and web browser that says “We’re going to work for the customer and make their day a great one.”

(Note: I am specifically not speaking for my employers, past or present. This is my personal opinion only.)

UPDATE: I received three replies directing me to BugMeNot.com. To me, that’s a non-starter. As I said earlier, I don’t think lying is appropriate, nor do I think borrowing someone else’s account is appropriate either.

In this business of software development, I do not have a college degree. In fact, I have not been to college. These days, that’s a rarity among programmers (do we still use that word?). I plan on going… someday. But the point is that I don’t have a degree to fall back on. All I have are my works and my word. I cannot compromise on either of those if I have any future in this business.

The IE meta standards tag – a slightly different take

I know I’m going to get flamed for this, but…

Everybody on p.m.o is ranting hard about Microsoft’s decision to include a third mode for web standards rendering. They’re all calling on Microsoft to Tell The Non-Compliant Web To Take A Hike.

What makes me chuckle is that, in one sense, the p.m.o community is telling Microsoft to act like the monopolist the community hates. The community is telling Microsoft to dictate to the Web (again) how the Web should be, to throw its massive market share around and do something that might break the Web. Bear in mind that massive market share, the ecosystem of the Web, isn’t just about the browsers. It’s also about the portals, sites we visit all the time, like CNN, NBC, MySpace, Wikipedia, etc.

You know what? Someday we’re just going to have to learn not to give a damn what Microsoft does with their browser. Let the evolution of the Web decide what’s best. Let Firefox be Firefox, let Opera be Opera, and if Microsoft doesn’t want to come to the table, fine. Then the W3C might mean something again – or the WHATWG will just replace it. (Just as long as people don’t cheat and make sneaky side agreements to install their browser as the default… oh, wait, ummm…)

On second thought, they’re just feeding authors’ addictions to bad code. I really ranted about that a few weeks ago. Let them (bit)rot. 🙂

Update: A few people seem to think that I want to dictate to Microsoft how they should build their browser. I want to strongly suggest they do certain things (where’s my DOM 2 TreeWalker?), but I am not going to scream bloody murder about it.

Personally, I do think three rendering modes is a bad idea. But then again, I don’t have a website. I’m pretty sure if I did, I’d have to think long and hard about supporting Internet Explorer with more than basic HTML. IE’s users are rarely my target audience anyway.

Seriously, people, this blog post is about two words: Lighten up.

The Web needs a Superfund-like cleanup

Yahoo News. CNN. Ebay. Any major site you visit today has hefty use (or, more accurately, abuse) of HTML. We’ve pushed HTML far beyond what it was designed to do, and browsers (and developers!) pay the price. Plaxo’s Joseph Smarr gave a talk on just what the end-result of this is (featured on planet.mozilla earlier, but here’s a link to the horse’s mouth: High Performance JavaScript video).

This has been bugging me for a few weeks now, as a deeper-level problem. Part of my job (not just at DVC, but at previous companies) involves figuring out why products I work on break on certain web pages. QA says “We’re broken on this page,” and before I can work on the bug I have to dismantle the page. Imagine how much fun it is to dismantle code like:
<div><div><div><div><div><div><div><div><div>…</div></div></div></div></div></div></div></div></div>… Or the horrors of table-based layout, especially nested-table-based layout. This practice is officially known as “minimizing a testcase”, but realistically it ought to be called a steaming pile of fertilizer. No one wants to do it, and pages using hyperbloated markup make it ten times harder. (Especially when one character of whitespace can make the bug disappear.) Then there’s the worst feeling of all: minimizing a testcase, fixing the bug, and then finding out there’s something else busted on the same page, which your fix didn’t catch.

Unfortunately, it’s a vicious cycle. Major sites want to work in all major browsers, and major browsers don’t want to break major sites. People are quick to blame Internet Explorer (and I’m one of those people), but that’s not enough. We need to understand HTML + JavaScript + CSS + AJAX + smart developers = radioactive sludge code that just barely does what we want.

Seriously, how much code should a web page need to implement a tabbox?

I just spotted from GMail a Quote of the Day that really summarizes this well, by Gen. George S. Patton: “If everyone is thinking alike, then somebody isn’t thinking.”

There are design flaws in the whole process that make some of this unfixable in its current state. XML Namespaces has been around since 1999, but HTML isn’t XML (unless you convert wholesale to XHTML). So as long as we keep generating web pages with just HTML, we’re stuck. On the other hand, HTML isn’t going to go away any time soon.

Maybe it’s a standardized user-interface language we need. Mozilla has XUL (which has never worked as well on web pages as it has for chrome apps), Microsoft has XAML (oh, wait, you need Vista for that, don’t you?), and somewhere there’s a W3C discussion about creating a unified UI language (but how credible is the W3C among developers these days?).

The Tamarin project should improve JS performance significantly (and when it does, Microsoft and the others will be forced to respond – good news for all users), but this doesn’t solve the underlying problem – it just makes the problematic code run faster.

Of course, all this is “Web 2.0” – but I don’t think anyone really understands that Web 2.0 should be easier to work with than Web 1.0. Web 2.0 shouldn’t just be about cool widgets.

How can we, particularly Mozilla developers, contribute to a fix? (It’d be the height of arrogance to ask “How can we fix this ourselves?”.)

One way would be to encourage web sites to switch to XHTML (and serve it as something other than text/html). This would enable mixing HTML with other languages more efficiently (even more than with XML data islands, which end up being generic XML). To those who say, “But Internet Explorer doesn’t really support XHTML,” they should start screaming at Internet Explorer’s team for this. Here’s a really good question for Microsoft: for the same effect, would IE’s parser team prefer to eat hundreds of HTML tags, plus hundreds of lines of JavaScript, plus CSS, or would the team prefer to eat a few dozen XAML tags mixed in with XHTML? I know which I would pick – the one that requires fewer bytes to express in web page source code.

Another way would be to make a standard user-interface language for the web – and implement it so that web pages could use it. Stop downloading cruft from the web – store it locally on the machine as sandboxed components. (Think XTF or XBL without privileges to implement user-interface.) Make it something that doesn’t need a whole package from Yahoo!, another package from Google, another package from Tom’s Best User Interface Widgets Page, etc. Just make it something everyone can use. And if it means a plug-in for a stubborn vendor, hire someone to write the damn plug-in! (Provided that the plug-in itself has a clearly available spec and a clearly available owner.)

I think the biggest impact we could have would be to ask the people who build and maintain these major sites, “Hey, what can we add support for that would make your jobs easier and your code cleaner?” It would not surprise me to find out that Mozilla was already talking behind the scenes to CNN, Ebay, Yahoo, etc. – specifically to their web engineers. It also wouldn’t surprise me if they weren’t, but instead focusing efforts on making the browser UI better, the user experience better, and on meeting standards that these major sites just don’t give a damn about – while still trying to render these sites well.

I don’t think HTML is broken, nor is JavaScript, CSS, or anything else. I simply think we’re demanding far too much from them, and we need a better solution for the parts of the web that really put HTML to the test. Even WHATWG doesn’t go far enough…

</dvorak>