Precisely ten years ago the 15th of July 2003, I was in Hossegor on the south-western coast of France, coming back from the town's center to my house. Minutes before during a conference call, I had heard « a reorganization is impacting you, Netscape France HR will let you know about it in the coming days, thank you for your time and goodbye » and that's all. I discovered that all friends/colleagues in the US were sending farewell messages. That was the end of Netscape, that was the beginning of Mozilla as a standalone organization, that was the beginning of Disruptive Innovations for me. That was ten years ago, wow...
Spend three years working like crazy on a project. Slowly start selling and making a revenue stream. Be on the front line almost 365 days per year, provide people all around the globe with support, tirelessly. And then the following tweet appears:
BlueGriffon EPUB Edition mentioned as one of the three EPUB editing environments recommended during the American Association of Physics Teachers' summer meeting, along with OpenOffice and Microsoft Word... And in second position :-) Wow. Wow :-)
I'm still playing a lot with (hear "coding on"...) Media Queries in BlueGriffon these days and I ended up trying my own dogfood editing the contents of a famous public web page using Media Queries for responsive design and some @media print stylesheets. Of course, BlueGriffon was not able to show on screen the print stylesheets applied to the document and I found it really sad. So I hacked a little bit (the whole thing is ~10 lines) nsHTMLEditor and nsPresContext to make sure BlueGriffon can show a document in "print" mode in the editable area and of course switch back to the regular screen/all stylesheets. See the result in this youtube video.
started working with SGML in 1991 at Grif, implementing the first CALS tables (that eventually gave HTML tables) wysiwyg editor. Worked with Jean Paoli and Vincent Quint. Met Tim Berners-Lee. Started working on stylesheets (the P language in Grif).
1994: working at Électricité de France, one of the first european customers of the recently released Netscape's browser. We bought thousands of licences, Netscape was not even incorporated here yet.
1998: noticed the Mozilla source code release while working for Électricité de France; was already a CSS WG member. Downloaded code to look at it but too much work to really do it well. Met Vidur, Peter Linss, Angus Davis, Troy Chevalier
1998: Peter Linss makes a referral about me at Netscape but a hiring freeze blocks the process
june 2000: I am available for hire and Pierre Saslawsky makes another referral about me at Netscape
september 2000: interviews in Mountain View with the Layout, Email, AIM and Editor teams. Moments with Vidur, Beth, Clayton and a few others I will never forget.
november 2000: hired by Netscape in the editor team, spending a month in Mountain View, starting diving into editor's code with invaluable help from jfrancis, kin, brade, cmanske, beppe, sfraser and mjudge. First bug fix in the style engine code, memory footprint-related. The day I arrive in MV, there's a barbecue party for the release of Netscape 6.0; everyone including me has a NS6 jacket and a trophy, some have a bonus envelop. I discover, to my greatest pleasure, that Netscape is a company that knows how to say thank you. Hixie is an intern at Netscape doing QA, Hamerly and I turn on the lights at 8am, Scott Collins sleeps every night in the cubicle next to mine, I am almost the only one using the espresso machine, there are baby clothes at the Netscape store for my first son and when I refused to eat at Denny's cmanske replied « I knew you had "class" ».
december 2000: peterv and I are the only developers at Netscape France. We send a mail to the whole team to introduce ourselves. Only two persons come to say hello, Tristan Nitot and an HR person. We're in a windowless corner of the offices, with sales people shouting on the telephone all the time.
2001: representing Netscape in the CSS WG, helping Beth in the HTML WG but XHTML2 seems to me a gigantic strategic error and I say it in public. When asked why I work from France for Netscape US, I reply « because they do beautiful things ». During a crepes dinner with Tantek in SF, he challenged me to implement :not() in Gecko; flying to San Diego the next day and spending the night on it, showing working implementation to Attinasi the next day. Adding CSS to the editor. Showing Syd Logan how to greatly simplify the IM conversation view with just a dash of CSS.
2002: all of AOL-TimeWarner France including Netscape moves to a new building in Neuilly sur Seine. Cool times, superb corporate restaurant. Many good and sometimes hilarious memories.
october 2002: wrote the Small Screen Rendering stylesheet that will be used in Minimo. AOL wants to patent it even if I warn them there is prior art from Opera.
december 2002: reorg at Netscape. Many good friends are gone. I'm myself in complete limbos, spending a few awful days and nights.
Q1 and Q2 2003: working on the Anvil project, a new editor at AOL will never release. I also start Composer++, a standalone revamp of the Netscape editor that will eventually become Nvu.
february 2003: at FOSDEM in Brussels; meet Mozdev's Brian King (of zibble fame) and Pete Collins.
september 2003: meeting with Tristan Nitot and Peter van der Beken in Peter's flat, my two Netscape colleagues from the Paris office. I suggest we start together a company making products based on the open source Mozilla. I suggest "Disruptive Innovators" as a company name. Tristan and Peter skeptical, Tristan would prefer launching a european Mozilla foot.
13-oct-2003: Disruptive Innovations is incorporated... Pete Collins and Brian King gave my name to Lindows' CTO who was looking for someone to work on a Gecko-based editor. I start contracting for Lindows immediately, the result will become Nvu.
from 2003 to now: promoting Mozilla and Gecko all over the place. Contracted for many companies and academia around the globe, doing xulrunner-based apps or add-ons to Firefox, some public and some proprietary on intranets.
august 2006: Disruptive Innovations joins W3C.
so many conferences, seminars with other Mozillians I can't count them all. Wonderful time in Barcelona with Chofmann, epic dinner with Rey Bango and Pike in Berlin, cool week-end in Berlin with Robert Nyman. Gave one of my contracts to Paul Rouget.
2008: inviting Mitchell Baker as a KeyNote speaker to the Netexplo Forum under the golden ceilings of the French Senate.
2010: started working on my next-gen wysiwyg Mozilla-based editor. Rewritten from scratch. First investor in april.
2013: Disruptive Innovations is almost ten years old, what a ride. I'm still spending most of my time on Mozilla code and technologies, editors and Web Standards. I released the only Wysiwyg cross-platform native EPUB editor on the market, and it's of course Mozilla-based.
I have been building my OS X builds of BlueGriffon on the same OS 10.6.5 desktop i7-based machine for the last two years. Two years ago, the i386 part of the universal OS X build of BlueGriffon was taking precisely NINE minutes and 45 seconds (yeah, quite fast) to build from scratch, without ccache, with a -j8 flag.
Today, a build of BlueGriffon based on a very recent pull of mozilla-central on the same machine, same OS, same HD, same CPU, same -j8, same build options, ccache disabled, takes TWENTY-NINE minutes and 13 seconds...
So I have a very naive question: can someone explain me here in the comments why the time needed to build Gecko on a desktop has been multiplied by almost exactly three in these two years? Please no flame, this is not a rant but only a technical question and I would like to understand better; thanks.
get the startNode, endNode, startOffset, endOffset of the range
if startNode is an element, let startNode be the startOffset-nth child of startNode
if endNode is an element, let endNode be the (endOffset-1)-nth child of endNode
promote selection to an array of nodes, iterating all nodes in the selection from startNode to endNode in traversal order
if the iterated node is entirely contained in the
selection
if the descendant node is an HTML element equivalent to
the style to set, replace it by its contents; continue
iterating with first child of the original node
if the node is an element and carries the CSS property to
set, delete that CSS style ; if the element carries no CSS
style and no other attribute after that, replace it by its
contents; continue iterating with first child of the original node
if the node is a significant text node, store it in the
array, continue iterating
if the node is an inline element node, store it in the
array, continue iterating skipping all children of the node
else continue iterating
else if the node is only partially contained in the selection
if the node is an inline node or a text node, split node deep to
selection boundaries; resulting node is now entirely contained in
selection, apply steps above.
else continue interating
let startNode be the first node in the array and endNode the last
one
let direction be 1
if startNode is not an element and endNode is an element, let direction be -1
for each node in the array browsed in increasing index order if
direction is 1 and decreasing order otherwise:
if the ancestors of the node set the requested style, do
nothing and continue with next node in array
let refNode be the previousSibling if direction is 1 and the
nextSibling otherwise
in HTML mode:
if refNode is the HTML equivalent to the style to set and
carries no attribute, append the node to the children of
refNode; continue
encapsulate the node into the HTML equivalent element to
the style to set
in CSS mode:
if refNode carries only the CSS style to set and no
other attribute, append the node to the children of refNode;
continue
encapsulate the node into a span carrying the style to set
I'm the guilty one for the resizing handles (around tables, positioned elements and images) in Gecko's editor. It was a decade ago... I wanted a JavaScript-based implementation but Netscape's management wanted a C++ one to have the whole thing embeddable into an AOL project that you never heard of and never saw the light. Because of that, it's hardly manageable/extensible today and I decided to drop it for BlueGriffon (that's just a boolean to set to false on the editor) and switch to my own JavaScript-based implementation. I spent a short while on that last week-end and here's the first result (or see embedded video below). As far as I know, it's a first for the editor (I mean Gecko's).
Last detail, this should work even if CSS transforms apply to the table. Unfortunately, I filed a bug blocking it earlier today.
So this add-on adds a new button to the formatting toolbar of message composition windows (the π button at the right-hand side of the main window), a new menu entry under Insert and both open a dialog allowing to insert/edit MathML through AsciiMathML. Hope you'll find it useful, it's available from here and it's not a 1.0 yet.
I have fixed two too well hidden bugs in BlueGriffon EPUB Edition and, while I was there, I added an editing view for CSS stylesheets directly from the list of files. You can download that new version from its web site. Many thanks to @studiowalrus for the feedback.
I am happy and proud to let you know I just released BlueGriffon EPUB Edition, the very first Wysiwyg cross-platform editor for EPUB2 and EPUB3 ebooks offering full UI-based control on EPUB packages, including all of EPUB2 and EPUB3 metadata. A more complete list of features and screenshots are available. Implemented with a permanent requirement of conformance to the IDPF specifications, it took more than a year to emerge from the original BlueGriffon Web editor because it's not only some light zip-package management over (x)html editing. EPUB metadata are complex to author and edit, very complex, and it's not a surprise to me if BlueGriffon EPUB Edition is alone right now in that segment of the market.
On the Mozilla side, this is quite good news I must say. Most current EPUB readers and authoring tools are based on WebKit or the rendering engine inside Apple Pages. BlueGriffon EPUB Edition shows that Gecko is a 100% viable solution as a rendering engine for EPUB. It also shows that XUL is still a superb technology allowing very complex consumer- or business-oriented applications.
To celebrate the launch of BlueGriffon EPUB Edition, a discount coupon is available until the 25th 00:00am Pacific time, giving you a 25€ discount per license purchased.
All authors of third-party software based on Mozilla and using the extension manager hit the same problem: a lot, really a lot, of users try to install the add-on inside Firefox instead of the application the add-on is made for... I hit that issue in the past with Nvu, I hit it now with BlueGriffon, Instantbird people hit it too. The error still sits between the chair and the keyboard, but maybe we could fix it in this case: the Extension Manager could have a list of couples (appname, appid) of well-known Mozilla-based applications and report "Ooops, this is a not an add-on for Firefox but an add-on for <appname>. Please launch <appname> to install it". That would help really a lot...
Hossegor, one of the most famous european surf spots, a week ago. I'm interested in a pair of shoes on sale in one of the stores in town. I'm wearing a Firefox t-shirt. Here's a verbatim of the dialog between the seller and myself:
hello, can I please try a pair of these ones in 8.5 ?
sure ; hey, where did you buy your t-shirt ?
I did not buy it, I got it from Mozilla a few years ago because I'm a Mozilla contributor
ooooh, too bad, that t-shirt is so much cooler that all the surf t-shirts we see here in town...
Je viens de créer un add-on pour BlueGriffon que vous pouvez librement télécharger et qui sera à court terme intégré à l'appli : Opquast Accessibility First Step. Il ajoute une entrée de menu sous le menu Outils et dès que le focus bascule sur la fenêtre, une vérification est faite du document en cours d'affichage dans BlueGriffon. Pour ceux qui seraient intéressés, le code effectuant les tests est visible ici (y compris la validation de conformité BCP47 pour les langues). C'est une 0.9, donc non finalisée. La 1.0 ne devrait pas en être très éloignée. Une future version de l'add-on permettra de corriger les erreurs signalées directement depuis la fenêtre des tests. /* Enjoy */