• More on “Powered by Mozilla”

    April 30th, 2008 by seth bindernagel with 4 comments »

    A series of blog posts has been written about how we might start to apply the idea of “Powered by Mozilla”.  I’ve read posts by Slater, Tiffney, DougT, and David Boswell.   These posts all came just before or after a nice lunch time conversation we had about what the term “Powered by Mozilla” actually represents.  If a project used the term, what exactly did that mean?  Lots of thoughts emerged, but I came away thinking that we should start by defining some easy cases where we would feel comfortable with a project using this phrase.

    Building on that idea about a week ago, I invited Harvey (Mozilla’s internal legal counsel) and a few others to sit with me and Asa, where we would draw the code stack on a white board and literally start circling the aspects of that code that would have to be included if we were to encourage someone to say they were powered by Mozilla.  The drawing looked something like this:

    code-stack-2.png

    Luckily, Brendan then walked in the room and the conversation got even more focused.   One point that was mentioned was that any “Powered by Mozilla” app should be, at least, Interenet-enabled and should align pretty well with Mozilla’s mission/vision. Brendan and Asa really helped drive the discussion of the code and what has to be involved to define an applicaiton.

    So, I began to think about ways that we could tell if the app was Internet-enabled.  I brought up the point that maybe an application powered by Mozilla has to clearly state that it uses the Gecko user agent.  That’s not too hard to tell, thanks to cool applications like this that Asa forwarded to me from Henrik Gemal’s blog.  With this service, you can see what user agent your browser (or Internet-enabled app) is using.  Wouldn’t this be a fairly easy way to determine some good cases? This particular discussion is ongoing and I am sure more posts will surface, but I do think this is one interesting and fairly straight-forward way to find applications that could make the claim they are powered by Mozilla.

  • Why you should give Mozilla Live Chat! a try

    April 14th, 2008 by seth bindernagel with 2 comments »

    On Friday, I participated in our first Support Day at Mozilla.  My last post talked about what I had hoped to accomplish during the day.  I’m proud to say that I did nearly everything except upload a screen shot to an article.  (I use a Mac and found that most of Mac-specific SUMO support articles also had great accompanying screen shots.)  I thought I would use this post to relay some observations about Mozilla’s support day.

    Most of my day was spent doing Mozilla Live Chat! support.  After a few training sessions where I observed a member from our SUMO community doing live chat, I was cleared to take support requests from end-users.  I was struck by the importance of this experience — interacting with our users, answering what might be considered simple questions from within the walls of Mozilla, and learning a lot about our product.  My experience also begged the question, “Is the end-user part of the Mozilla Community?”.  Some may claim that the question is not really something to debate.  Of course, the end-user is part of the community, right?  Or, is our community simply the world of volunteers who help make our product ready for end-user?  You be the judge:  I learned from them just as I learned from those who help localize our software or help others write extensions.  And, I found myself asking, “How easy is our software to use and how well is our software designed for user interaction?”.

    Here is an excerpt from a support session, in case you’d like to read about just how one went.  I’ve changed the end-user identity and edited out some parts to keep it short:

    Friday, April 11, 2008

    (12:43 PM) sethb: hi end-user51
    (12:43 PM) end-user51: Hi.  Can you help?
    (12:43 PM) sethb: so you cannot view your adobe documents with your browser?
    (12:45 PM) end-user51: No.  The message reads”Cannot use reader to view document in your browser.  now closing.
    (12:46 PM) sethb: let me do some research on your issue. i’ll be back in a second.  ok?
    (12:47 PM) end-user51: ok.  Trying to get my proof of insurance so I can register my car.
    (12:47 PM) sethb: ok…we’ll try to do this quickly.
    (12:48 PM) end-user51: Thanks.  Work graveyard at a casino.  Had to stay up in order to do this.
    (12:49 PM) sethb: ok.  what version of Adobe Reader are you using?
    (12:49 PM) sethb: can you find that?
    (12:49 PM) end-user51: Will check
    (12:49 PM) end-user51: 7.0
    (12:50 PM) sethb: ok
    (12:50 PM) sethb: can you do one thing for me?  open a new tab in Firefox and paste (or type) about:plugins into the URL bar where you would type a webpage.
    (12:50 PM) sethb: let me know when you’ve done that
    (12:51 PM) end-user51: ok, got it
    (12:51 PM) sethb: i am going to see if your Adboe Reader plugin is enabled.
    (12:51 PM) end-user51: ok

    I quickly found out from end-user51 that the plug-in was enabled.

    (12:54 PM) sethb: is Adobe open?
    (12:54 PM) sethb: try this:
    (12:54 PM) sethb:    1.  In Adobe Reader, choose “Edit -> Preferences -> Internet”.
    2. Deselect “Display PDF In Browser” and then click OK.
    3. Choose “Edit -> Preferences -> Internet”
    4. Select “Display PDF In Browser” and then click OK.
    (12:55 PM) end-user51: sorry.  Got kicked off firefox.  Had to restart session.
    (12:56 PM) sethb: no problem.
    (12:56 PM) end-user51: ok. give me a minute.
    (12:58 PM) end-user51: will retry my proof
    (12:58 PM) sethb: ok.

    The end-user followed this recommendation and responded:

    (1:00 PM) end-user51: Yeah, it works!!  Thanks so much!!!!!!  Was stuck huh?
    (1:00 PM) sethb: so now you can view your Adobe docs?
    (1:00 PM) sethb: great.
    (1:01 PM) sethb: if there’s nothing else, please go get some sleep and take care of me next time i visit the black jack tables.
    (1:01 PM) end-user51: didn’t have to restart to get it to work.  Thanks again.  Good training excersize?
    (1:01 PM) sethb: great exercise.  thanks.

    A few remarks and observations about this conversation and my experience with Live Chat!:

    1. “end-user51″ has a life!  Brilliant observation, I realize…  But, after reading that this person had been working the graveyard shift and had stayed awake to figure out this problem, I was somehow even more motivated to solve this quickly.   It took about 20 minutes for me to figure it out, but with more familiarity, I bet I could have answered this in under 10 minutes.
    2. Why wouldn’t this person deserve anything less than a consistent, polite, and helpful experience from Mozilla?  That was my main objective.  If this person is coming to us for live support, there is a good chance that they are on the verge of frustration or even anger.  Maybe the person is even ready to ditch Mozilla for (gasp) “other browser”.  What a great time to recapture a user’s loyalty, no?
    3. Is Live Chat! scalable?  To provide quick and superb support to end-users, it seems like we will need to have a big, reliable, and well-trained Live Chat! community.  Going forward, I will be dedicating a piece of my week to participate in Live Chat!, in hope to make it scalable.  Please join me.
    4. Live Chat! is a great way to get your head out of the weeds and learn about how the product impacts the lives of end-users.  My guess is even the most gifted developers would learn how to make Firefox better if they participated.
    5. Another shout-out to the community…  The articles that have been written to help end-users solve issues and the active members of the community who were online behind the scenes to help me help end-user51 were critical to my success.  Thanks to everyone!

    I didn’t spend all day on Live Chat!.  My day ended by scanning five articles in the SUMO knowledge base and providing minor edits when necessary.  I competed the task, but again, I found that many articles were really well written and required only minor tweaks.  This is not to say that SUMO is in perfect condition – a lot of content still needs to be created.  But, what’s up is pretty darn good.  David Tenser (our fearless and ebullient SUMO leader) and I want to continue to build the SUMO community this quarter.  We’ll be trying creative ways to get more content on the site and to get more of you involved in the process.  Interested?  Then just ping me, please.

  • My SUMO Challenge

    April 9th, 2008 by seth bindernagel with Comments Off

    The title sounds like a Japanese wrestling tournament.   It’s not.  I’m just getting geared up to participate in the first Mozilla “Support Day” this Friday, April 11.  I thought I’d post what I intend to do and ask anyone reading this to join me by also participating in some way or another.

    So, in case you missed it (from the SUMO day blog post):

    “This is a great opportunity for you to get involved with Mozilla, regardless of your interests or expertise. We need people to write articles, create screenshots, correct spelling and grammar, answer people’s questions in the forum, or interact directly with Firefox users in live chat — just to name a few of the many ways you could help us out.”

    You can learn more here at the SUMO Day webpage (already linked to above).  I also found the contributor home page (passed to me by zzxc, thanks!) and this page created by SUMO community member, Bo Bayles, to be quite helpful as I prepare for the day.

    It’s hard to gauge how much I can get done, but I thought I would try to do the following:

    1. Add screenshots to an article
    2. Participate in “Live Chat Support” (Learn more by following this link.)
    3. Review and edit 5 articles by improving wording and checking spelling and grammar

    That should occupy a good part of my morning on Friday, then I have to get an MRI done on my ankle, so I’ll have to head out.  I put my goals for SUMO day out there for everyone to read.  If you’d like, feel free to post yours here…or post elsewhere and link to it in the comments.

  • The story of a non-hacker who wrote a Firefox add-on

    April 7th, 2008 by seth bindernagel with 13 comments »

    Ever wonder what it’s like for a non-hacker to jump into Mozilla’s world of add-on development?  If you’re reading this on Planet Mozilla, there’s a very good chance you have a lot more technical background than a guy like me.  But, maybe you’d like to read about a non-developer’s first attempt at writing an extension.

    Here’s my story.

    Last week, I found myself repeatedly performing the same task with my browser.  Over and over again, I would click on the “View” menu option in Firefox, select the “Toolbars” option and then mouse over to “Bookmark Toolbar”.  Why?   I have daily tasks that use bookmarklets that I’ve placed in my bookmark toolbar.  However, I like a sleek look for my browser, so I always choose to hide extra features like toolbars and sidebars.  You can imagine that the process of collapsing and uncollapsing my bookmark bar got a bit tiresome and it triggered the thought: “What if I built an extension that could take care of this for me?”

    My curiosity to develop an extension for Firefox had always been overshadowed by a bit of timidity in crossing into the world of development.  I am not a developer, having taken only two or so CS courses in college.  What if I had a question?  Who would I ask without seeming to waste a Mozilla developer’s very valuable time?  Forget it…just move on, right?  Well, not this time…I felt like I had a good idea and was curious.  So I gave it a try.

    Before going further, let me share the extension.  It’s called the “Bookmark Bar Toggler” and you can install by following this link.   The add-on remains in Mozilla’s add-on sandbox and will be in “experimental” phase until it moves into recommended status.  Therefore, you have to log into addons.mozilla.org to get this extension until it becomes recommended by AMO.  The Bookmark Bar Toggler allows a user to add a button to the chrome of the browser that collapses and uncollapses the bookmark bar.

    After realizing I had an idea that an extension could solve, I began to search around on just how to make it.  I felt that this would be a terrific experiment.  Can I actually write an extension and then blog about the pain and/or joy of the process?

    So, last Wednesday night, I looked at Mozilla Developer Center to see what I could find on extension development.   I found the page: “Building an Extension“.  It looks like Ben Goodger started this back in 2005.  Thanks, Ben.  Also, many thanks to Eric “Sheppy” Shepherd (docs guru) and all the folks from the community who have edited it to its present state.  “Building an Extension” takes the most novice (me) through the process of setting up an environment on the OS, creating a chrome manifest, and writing the XUL and JavaScript code.  I followed the step-by-step process to build the sample “Hello World” extension.  I eventually got it working, but not without some frustration.

    One of the first things this tutorial asked me to do was to create the install.rdf.  In the install.rdf example, I was asked to cut and paste several lines of code into a document.  Admittedly, I was a bit anxious to begin hacking on my idea, so I changed some stuff that I thought I would use for my eventual extension.  Specifically, I changed “<em:id>sample@example.net</em:id>” to what I thought would be my extension’s ID.  I chose “firefox.toolbar.tray”.  Why did I do this?  Not sure…in hindsight the name doesn’t even really make sense.  But, the XUL hackers reading this will know that I changed the syntax to something incorrect, even though it tells me RIGHT IN THE TUTORIAL that this has to be “in email address format”!  Notice that my ID has no “@” symbol.  I thought I had followed every step, but my “Hello World” just wouldn’t work.  I eventually had to go back and recheck everything until I saw this error.  I was reminded not to be hasty, but also I had to wonder, why didn’t a flag pop up and tell me that this was an issue?  It might have been nice for some error message to have popped up somewhere alerting me to this syntax error.  Is that possible?  Another possible piece of feedback, maybe we should make the instructions about that syntax even more explicit.  Only newcomers are going to read this documentation, so let’s make it painfully obvious.  I must have spent nearly 2 hours trying to find this simple error.

    Another error I found in my install.rdf was incorrectly referencing the version of Firefox where this extension would work.  At first, I had entered the <em:maxVersion> to be 3.x.  I just didn’t know what to put in there.  But, this was not correct.  I eventually found that I had to change the code to <em:maxVersion>3.0pre</em:maxVersion>for my extension to work.  This wasn’t really documented too well and it would have been nice to get some sort of error message…but I eventually figured it out by looking at other install.rdfs and seeing the proper syntax.

    Eventually, I got “Hello World” to show up in the bottom status bar of my browser and began to feel like I was in business.  It was time to start figuring out how I was going to create a button that would make my bookmark bar collapse and uncollapse whenever I clicked it.  Web searches led me to this great article on MDC:  Custom Toolbar Button.  Could it be this easy?  I had the sample extension I just built on my computer to use as a framework, and now I had a tutorial on how to add a toolbar button to the chrome of the browser.

    I began walking through the tutorial and thinking about what I wanted the extension to do.  I wasn’t able to find every answer on the Web, so I turned to the Mozilla community for some help.  So many tools exist for someone to access when needed:  MDC, irc.mozilla.org, Planet Mozilla, MXR / LXR, and more.  I’d be foolish to try to convince anyone reading this post that I know how to code in CSS, XUL or JavaScript, I don’t.  But, that didn’t mean I couldn’t ask or poke around to find answers to my questions.  That’s just what I did.  I got on IRC and asked some random questions to developers I knew would answer.  I could have easily visited #extdev to ask the extension development community about what I was trying to do, but chose to call on individuals I knew…either method would have worked.  With the “Custom Toolbar Button” tutorial and some persistence, I quickly learned how to create a set of CSS, XUL, and JS files that would get my extension running.  (Stick with me non-hackers…it wasn’t too tough.)  The explanations are all directly in the tutorial and it wasn’t hard to piece together and then figure out where I had bugs.

    The trickiest part for me was writing the JavaScript.  I knew I had to expand the sample function that was set up in the MDC tutorial.  The skeleton was there and I had my ideas. I used the DOM inspector to inspect the browser chrome and find the exact name of bookmark toolbar that my function would reference.  Then, I got a tip to look at some SeaMonkey code in LXR and saw the “collapse” command.  I also got a tip on the final line of code, which dictates the state of the command (whether the bookmark bar was collapsed or not) to persist after I restarted or shutdown.  That code was in the SeaMonkey source here, line 4491.

    I ended up with the following code:

    function OpenCloseBookmarkBar() {
    var elem = document.getElementById(“PersonalToolbar”);
    elem.collapsed = !elem.collapsed;
    document.persist(“PersonalToolbar”, “collapsed”);
    }

    Really not too hard to understand, is it? I admit, I stumbled through writing this.  But once I had it, it was easier for me to see how it worked.  Many thanks to sspitzer for a tutorial how to write this code.  Couldn’t have done it without the help of one of Mozilla’s long-time Jedis…sspitzer.

    Another tricky part was creating the correct order of the lines of code in the XUL file.  I misplaced my JavaScript command in that file, as well as the reference to the CSS code.  But, once I saw that this was in the wrong order (by looking at other, similar XUL files and asking around), I changed it to the correct order.  In a perfect world, I probably could have used some better documentation on this.  XUL seems like it can be a pretty tricky language and structuring these files for a newcomer is pretty foreign.

    The next step was designing the button for the chrome of the browser.  I went back to lxr and got the .PNG file for the Firefox 3 Mac theme.   Asa gave me some great tips on how to perfectly crop out and edit the section I wanted and, voila, I had a button for my extension.

    The “Building an Extension” tutorial gives a great tutorial on how to package up the extension.  I followed these guidelines, zipped up my files, and put the extension on AMO.  To be honest, the process was really straight forward and not too painful.

    It is obvious that so many community members have put work into this process.  For a non-developer, it’s not perfect, but it’s pretty damn close.  Congratulations and thanks to everyone who had some effort in making extension development easy (MDC, AMO, those who are on IRC and ready to help…), it wasn’t bad at all, sincerely.

    So, what did I learn and what’s next?

    1. Version 2 of this extension needs to have a few things:  I have to create images that look good on other platforms; I am going to work on l10n; and I want to add key stroke commands that will collapse and uncollapse the toolbar.  Do you have any other recommendations?  You know the drill, comment on this post.
    2. I learned that MDC is awesome.  Really, this is a great resource from the Mozilla Community.  I was impressed how much of the documentation was already updated for Firefox 3!  Writing this extension would have been impossible without the community’s work on MDC.  What a terrific resource.
    3. It would be nice if there was some built in XUL debugger or error messenger that pointed out syntax errors and other things like where to place lines of code.  I don’t even know if this is possible or if it exists, but it was a thought I had.
    4. The addons.mozilla.org upload process was very well designed.  It allowed me to write a detailed description of my add-on and get it in the sandbox without a challenge.  Add-on developers are probably familiar with this experience, but for a newcomer, it was a great user experience.  What do you think?
    5. The Mozilla Community does it again…couldn’t have done any of this without those who were responsive to my questions or those who helped write the documentation.  Special thanks to Seth Spitzer, Asa, the guys on IRC, Dan Mills (irc nick: Thunder) for some thought provoking conversation, and all those who wrote this great documentation.
    6. Extension development is not as scary as I thought it would be.  I really wanted to demystify the experience.  With so many tools on the Web, a community of developers who will answer questions, and so much open source code to look at, I came away thinking that the biggest challenge is probably finding an idea and knowing how to do good web searches…just like when I had the idea to buy a new Nintendo Wii for $300.  That was also challenging, but I had the idea and performed some superb web searches. Time for some Guitar Hero 3 with Xavier Stone and  Casey Lynch.

    That’s it.  Happy to enter the world of AMO as a novice hacker.  I’ll keep playing around with it to see how I can make this extension better.

    Oh…and please install my extension and tell me what you think.