Wednesday 2 April 2014

Mac and rtl

After years of wait, Apple Keynote was just updated to v6.2 and includes a far better support for rtl scripts. For the first time, the cursor and the caret movements are reliable and it becomes possible to edit a rtl slideshow. Pages is still in v5.2 though.

On the Microsoft Word front though, still no rtl at all...

Thursday 27 March 2014

A moron...

The kind of things I have received because I have expressed support to Brendan Eich. The moron who sent me that does not know - of course - and does not care about - of course - I have always been in favor of same-sex marriage, most french readers of this blog can probably testify on it.

insult received by email

I am here writing directly to the neuronless imbecile (IP address  who sent me the above. You and the exact words you are using, the methods you are using, these are exactly the reasons why I did send my support to Brendan. In a democracy, fighting for a cause cannot - I repeat it cannot - mean launching ad hominem attacks. Ad hominem attacks can be tolerated if and only if the attacked people are using illegal means to promote their opinions or if their opinion is illegal. For instance when fighting against extreme-right because extreme-right uses the weaknesses of democracy to kill democracy.

Intimidation, insults, ad hominem attacks always decrease the legitimity of a cause. Imbeciles do it too, but they won't understand it. Let's call that an excuse.

Tuesday 25 March 2014

Mood of the day

Throwing up. The Web is so full of stinking shit this morning.

Welcome Brendan!

I could not be happier to see Brendan Eich become the new CEO of Mozilla :-)

Brendan has a vision, a unique vision that made Mozilla what it is today, and he is a great leader, respected all over the world, all over our geek's world. Reliable, hyper-smart, friendly and knowing perfectly - of course - the organization he co-founded.

But there is one thing I would like to come back to, because I read something too disruptive to me on planet.mozilla.org: yes, Brendan donated to the anti-marriage equality Prop. 8 campaign in California. I don't like, I don't like at all seeing that pop up again in public space because that's pointing an index at someone for his/her beliefs, that's something that should not happen in a community like ours. When Brendan was under attack, two years ago, I sent him my support. Not a support to his opinion, but a support to his freedom of opinion and freedom of expression of that opinion through all legal means. Including a donation.

Seen from Europe with a European point of view, I do not understand how one can complain about it. Mozilla promotes openness and freedom of choice, that's its Manifesto, that's our core values, why most of us contribute to Mozilla. I want that openness and freedom of choice to be a deep, anchored value of the whole Mozilla community. With that in mind, I entirely respect Brendan's personal choice, that was exposed only because of the Californian law and was attached to the name of Mozilla only because that law makes it mandatory to mention the affiliation of the donator above a given level of donation IIRC. I trust - we all trust - Brendan to be able to deal with the whole community - employees or contributors - equally, whatever their own beliefs or personal choices. I met Brendan 14 years ago and have never seen him behave in a different way.

The Mozilla community at large represents quite well the diversity of thoughts on the globe. We have people who love fire weapons; I don't like it but that's legal in their countries. We have people supporting death penalty; I hate it but that's legal in their countries. We have people from all political sides, including extremes; I don't understand it but I accept it. We have people based in countries one could easily qualify as antidemocratic and who support their regime; yes, diversity is a marker of the human kind. And we have people who have diverging opinions about major societal issues, within the limits of the law, absolutely. We even have true nerds, barely social, who can't understand what's a private and family life. So what? Again, seen from Europe and with a European point of view, not a problem at all.

Pointing an index at someone of our community for his/her beliefs can only have one side-effect: people will stop expressing their opinions because they will be afraid of the kickback, people will be blamed in public for legal behaviours and that's totally unacceptable to me as a European. That's not the world I want to live in, that's not my concept of democracy and freedom of opinion/speech. That's not the Mozilla I want. Brendan, I value your opinion, and that does not say anything about my agreement or disagreement with your opinion itself.

We, as a community, cannot promote openness and freedom of choice without a deep respect for individual beliefs. A reminder of Brendan's personal choices years ago is unfair and violates too much for me the core values of the Mozilla community. I am writing this article because I want it to be the very last time we read about it in public space. FWIW, and given the long chats we had about it in Europe two years ago, I think the above is a quite widely shared opinion in the European Mozilla community.

Welcome Brendan, and long life to Moz.

Update: following a private message, I want to say that, yes, I carefully read the message that triggered my response above. My take is that even in a positive message about Brendan, reminding the Prop8 story is putting, again, an index at him. And I feel it is just totally wrong because his opinion is not less respectable than others.

Update again: I did not intend to let the comments open here, my bad. What I feared did happen: hate messages. Closing comments then. My blog, my prerogative, and the French law makes me accountable for all comments on this blog. Period. Sorry for the people who left polite messages, agreeing or disagreeing; I hope you understand.

Thursday 20 March 2014

Samsung Web Tech Talk on JavaScript trends

SRA-SV LogoSamsung Research America will host a meetup about JavaScript trends in its San Jose R&D center on the 7th of april. This is a free event and anyone can attend.

Date: 07-apr-2014
Time: 5pm - 8pm
Location: 95 Plumeria Drive, San Jose, CA


  • 4:30pm - 5:00pm Welcome
  • 5:00pm - 5:30pm "Web Technologies on Mobile - Opportunities and Challenges", Andreas Gal, VP Mobile at Mozilla
  • 5:35pm - 6:00pm "Supersonic JavaScript", Ariya Hidayat, Shape Security
  • 6:20pm - 6:45pm "JavaScript in the Small", Satish Chandra, Samsung
  • 6:45pm - 8:00pm Open Discussion
  • 8:00pm - 9:00pm Networking

Feel free to attend using the link at the top of this article!

Wednesday 19 March 2014

A better CSS OM for parsed values

A large part of the current CSS Object Model sucks. More specifically, the CSSValue, CSSPrimitiveValue, CSSValueList, RGBColor, Rect and Counter interfaces are so poorly designed they're not implemented. I just tried to implement them for a project of mine and I must say the model is so weak and incoherent it cannot be implemented as is.

I have then tried to refine what's in the 2000-nov-13 spec of DOM Level 2 Style to reach something workable. I am NOT saying this has to be done or implemented. Call it a mental exercise I did just for fun, w/o caring about performance.

Let's first look at what's wrong:

Interface CSSValue

      interface CSSValue {
        // UnitTypes
        const unsigned short      CSS_INHERIT                    = 0;
        const unsigned short      CSS_PRIMITIVE_VALUE            = 1;
        const unsigned short      CSS_VALUE_LIST                 = 2;
        const unsigned short      CSS_CUSTOM                     = 3;
                 attribute DOMString        cssText;
                                              // raises(DOMException) on setting
        readonly attribute unsigned short   cssValueType;

"inherit" is here considered as a special identifier despite of the fact a CSSPrimitiveValue can be a CSS_IDENT. There is no UnitType for "initial". A CSS_CUSTOM is, according to the spec, a "custom value"; but a custom value still has to be valid per CSS syntax so it should be representable with CSS_VALUE_LISTs and CSS_VALUEs.

Interface CSSValueList

interface CSSValueList : CSSValue {
  readonly attribute unsigned long    length;
  CSSValue           item(in unsigned long index);

All in all, this one is simple and should be quite ok. But one thing is missing: a property can accept a comma-separated list of whitespace-separated values. The current CSSValueList cannot express if the serialization of a CSSValueList should be whitespace- or comma-separated.

Interface CSSPrimitiveValue

interface CSSPrimitiveValue : CSSValue {

  // UnitTypes
  const unsigned short      CSS_UNKNOWN                    = 0;
  const unsigned short      CSS_NUMBER                     = 1;
  const unsigned short      CSS_PERCENTAGE                 = 2;
  const unsigned short      CSS_EMS                        = 3;
  const unsigned short      CSS_EXS                        = 4;
  const unsigned short      CSS_PX                         = 5;
  const unsigned short      CSS_CM                         = 6;
  const unsigned short      CSS_MM                         = 7;
  const unsigned short      CSS_IN                         = 8;
  const unsigned short      CSS_PT                         = 9;
  const unsigned short      CSS_PC                         = 10;
  const unsigned short      CSS_DEG                        = 11;
  const unsigned short      CSS_RAD                        = 12;
  const unsigned short      CSS_GRAD                       = 13;
  const unsigned short      CSS_MS                         = 14;
  const unsigned short      CSS_S                          = 15;
  const unsigned short      CSS_HZ                         = 16;
  const unsigned short      CSS_KHZ                        = 17;
  const unsigned short      CSS_DIMENSION                  = 18;
  const unsigned short      CSS_STRING                     = 19;
  const unsigned short      CSS_URI                        = 20;
  const unsigned short      CSS_IDENT                      = 21;
  const unsigned short      CSS_ATTR                       = 22;
  const unsigned short      CSS_COUNTER                    = 23;
  const unsigned short      CSS_RECT                       = 24;
  const unsigned short      CSS_RGBCOLOR                   = 25;

  readonly attribute unsigned short   primitiveType;
  void               setFloatValue(in unsigned short unitType, 
                                   in float floatValue)
  float              getFloatValue(in unsigned short unitType)
  void               setStringValue(in unsigned short stringType, 
                                    in DOMString stringValue)
  DOMString          getStringValue()
  Counter            getCounterValue()
  Rect               getRectValue()
  RGBColor           getRGBColorValue()

This is so completely crazy I don't know where to start...

  • CSS_UNKNOWN is supposed to represent a "value that is not a recognized CSS2 value". Then it should be thrown away by the parser as invalid and never reach the OM, right?
  • the list of units is long and not easily extensible
  • attr(), counter(), counters(), rect() and the more recent gradients or var() calls are all functions; adding a new setter and a new getter for each new type is overkill
  • attr() was extended by recent specs and can now take more than one argument. The above does not allow to individually modify those arguments.
  • "initial" and "inherit" are, as I already said above, covered by both CSSValue and CSS_IDENT here
  • let's suppose we have a CSSValue that is a CSSPrimitiveValue. Setting its cssText to "10px 10px" will then trigger an exception since a CSSPrimitiveValue cannot transmute magically into a CSSValueList...
  • I love how the spec prose says setStringValue() has "No Parameters"...

Interface Rect

interface Rect {
  readonly attribute CSSPrimitiveValue  top;
  readonly attribute CSSPrimitiveValue  right;
  readonly attribute CSSPrimitiveValue  bottom;
  readonly attribute CSSPrimitiveValue  left;

This looks and smells like a CSSValueList far too much.

Interface RGBColor

interface RGBColor {
  readonly attribute CSSPrimitiveValue  red;
  readonly attribute CSSPrimitiveValue  green;
  readonly attribute CSSPrimitiveValue  blue;

This cannot represent rgba(), hsl() and hsla() colors. We also have to use three CSSPrimitiveValue for the three color components because they can be a percentage or an integer...

Interface Counter

interface Counter {
  readonly attribute DOMString        identifier;
  readonly attribute DOMString        listStyle;
  readonly attribute DOMString        separator;

Again, something is missing here: nothing says if it's supposed to be a counter() or a counters() value. And no, the separator could not do the trick since it can be the empty string.


To have a better OM for Values, i.e. an extensible OM that allows an application to deal with parsed values of all kinds, we need to change of perspective. First, the list of reserved idents, the list of units and the list of functions are not extensible. Secondly, we have cast issues between PrimitiveValues and ValueLists and we need a single interface. We can deal with all the issues with a single CSSValue interface:

New interface CSSValue

interface CSSValue {

  // ValueTypes
  const unsigned short      CSS_SYMBOL                     = 0;
  const unsigned short      CSS_NUMBER                     = 1;
  const unsigned short      CSS_UNIT                       = 2;
  const unsigned short      CSS_STRING                     = 3;
  const unsigned short      CSS_URI                        = 4;
  const unsigned short      CSS_IDENT                      = 5;
const unsigned short CSS_VALUE_LIST = 6; readonly attribute unsigned short type; attribute boolean commaSeparated;
readonly attribute unsigned long length;
CSSValue item(in unsigned long index);

void setFloatValue(in float floatValue) raises(DOMException); float getFloatValue() raises(DOMException);
void setStringValue(in DOMString stringValue) raises(DOMException); DOMString getStringValue() raises(DOMException); };

Definition group ValueTypes

An integer indicating the type of the Value

The value is a single character than cannot be interpreted otherwise. For instance the / character in the font shorthand property. The value can be obtained by the getStringValue() and set by the setStringValue() method.
The value is a simple number. The value can be obtained by using the getFloatValue() method and set through by setFloatValue() method.
The value is a number followed by a unit. The number part of the value can be obtained by using the getFloatValue() method and set through by setFloatValue() method. The unit part of the value can be obtained by using the getUnit() method and set through by setUnit() method
The value is a string. The value can be obtained by the getStringValue() and set by the setStringValue() method.
The value is a URI. The parameter of the url() function can be obtained by the getStringValue() and set by the setStringValue() method.
The value is a CSS identifier. The value can be obtained by the getStringValue() and set by the setStringValue() method.
The value is a list of values or a function. It is a function if the getStringValue() method does not reply the empty string. The list of values is whitespace-separated if the commaSeparated attribute is false and comma-separated otherwise.


type of type unsigned short, readonly
The type of the value as defined by the constants specified above.
commaSeparated of type boolean
The separation type of the list of values. Meaningful only if the type attribute is CSS_VALUE_LIST. The list is whitespace-separated if the attribute is false and comma-separated otherwise.
length of type unsigned long, readonly
The number of CSSValue in the list. The range of valid values of the indices is 0 to length-1 inclusive.
INVALID_ACCESS_ERR: Raised if the CSS value is a not a CSS_VALUE_LIST.


Retrieves the value of a CSS_NUMBER or the number part of the value of a CSS_UNIT. If this CSS value is not a CSS_NUMBER or a CSS_UNIT, a DOMException is raised.
Return Value
float The float value of this CSS_NUMBER or CSS_UNIT
INVALID_ACCESS_ERR: Raised if the CSS value isn't a CSS_NUMBER nor a CSS_UNIT.
For a CSS_SYMBOL, retrieves the single character used as a symbol.
For a CSS_STRING, retrieves the string. Enclosing quotes or double-quotes are NOT included.
For a CSS_UNIT, retrieves the unit of the value.
For a CSS_URI, retrieves the argument of the url(...) notation. Enclosing quotes or double-quotes are NOT includedt.
For a CSS_IDENT, retrieves the identifier.
For a CSS_VALUE_LIST and if that list of values is passed as the parameters of a function, retrieves the function name. Retrieves the empty string otherwise.
For a CSS_NUMBER and CSS_UNIT, a DOMException is raised.
No Parameters
Return Value
DOMString The float value of this CSS_NUMBER or CSS_UNIT
INVALID_ACCESS_ERR: Raised if the CSS value is a CSS_NUMBER or a CSS_UNIT.
For a CSS_VALUE_LIST, Used to retrieve a CSSValue by ordinal index. The order in this collection represents the order of thevalues in the CSS style property. If index is greater than or equal to the number of values in the list, this returnsnull.
For all other value types, a DOMException is raised.
index of type unsigned long: index into the collection.
Return value
CSSValue The CSSValue at the index position in the CSSValueList, or null if that is not a valid index.
INVALID_ACCESS_ERR: Raised if the CSS value is a not a CSS_VALUE_LIST.
Sets the value of a CSS_NUMBER or the number part of the value of a CSS_UNIT. If this CSS value is not a CSS_NUMBER or a CSS_UNIT, a DOMException is raised.
floatValue of type float;
No Return Value
INVALID_ACCESS_ERR: Raised if the CSS value isn't a CSS_NUMBER nor a CSS_UNIT or if the attached property doesn't support the float value or the unit type.
NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
For a CSS_SYMBOL, sets the single character used as a symbol.
For a CSS_STRING, sets the string.
For a CSS_UNIT, sets the unit of the value.
For a CSS_URI, sets the argument of the url(...) notation.
For a CSS_IDENT, sets the identifier.
For a CSS_VALUE_LIST and if the parameter is not the empty string, make the list of values become a function and sets the function name. Make the list become a plain list of values if the parameter is the empty string.
For a CSS_NUMBER and CSS_UNIT, a DOMException is raised.
stringValue of type DOMString
No Return Value
INVALID_ACCESS_ERR: Raised if the CSS value is a CSS_NUMBER or a CSS_UNIT, if the type of the value is CSS_SYMBOL and the string can be parsed as an other type of value, if the type of the value is CSS_UNIT and the string is not a valid CSS unit, if the type of the value is CSS_URI and the string is not a valid URI, if the type of the value is CSS_IDENT and the string is not a valid CSS identifier, if the type of the value is CSS_VALUE_LIST and the string is not a valid CSS identifier or the empty string.
NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.


The above should be enough to describe any CSS value, specified or computed. The model will become a bit complex for complex values but it ensures any web application can have access to parsed values, deal with their types and modify them. Let's take an example:

background-image: linear-gradient(to bottom, yellow 0%, blue 100%), url(foo.png);

This will result in the following OM (click on the image to enlarge it):

OM example

Again, I'm not saying the above is the thing to do or implement. It can certainly be improved, for instance for colors. A totally different perspective is also perfectly possible. I am only saying that making a better CSS OM allowing a full representation of parsed values in stylesheets and computed values is feasible. I hope the CSS OM will offer such power in the future.

UPDATE: the new CSSValue interface above lacks one thing, the ubiquitous cssText for parsing and serialization. Sorry for that.

Wednesday 26 February 2014


I have just discovered Haxe and haxecpp and I am totally blown away. This is what I was dreaming of and I did not know about it. I am going to use it immediately for my personal projects. Wow, just wow.

Thursday 6 February 2014

Next Game Frontier, The conference dedicated to Web Gaming

Last October, I was attending the famous Paris Web conference in Paris, France. In the main lobby of the venue, two Microsoftees (David Catuhe and David Rousset) were demo'ing a game based on their own framework Open Source babylon.js. Yes, Microsoftee and an Open Source JS framework over WebGL... I was looking at their booth, the people queuing to try the game and started explaining them there are conferences about Gaming, there are conferences about Web technologies in general and html5 in particular but there are no conference dedicated to Gaming based on Web technologies...

To my surprise, the two Davids reacted very positively to my proposal and we started immediately discussing a plan for such a conference.

Next Game Frontier LogoPeople, I am immensely happy to announce the First Edition of the Next Game Frontier conference, the conference dedicated to Web Gaming, co-organized this year by Microsoft and Samsung Electronics.

Web site: Next Game Frontier

Location: Microsoft France campus, Issy-les-moulineaux, France

Date: 13th of March 2014

Next Game Frontier on Lanyrd

Free registration but number of seats limited so register ASAP!


9:00 - 9:30 Breakfast

9:30 - 9:45 Opening Keynote (D. Glazman, D. Catuhe & D. Rousset)
9:45 - 10:45 Microsoft session - Create a 3D game with WebGL and Babylon.js (D. Catuhe & D. Rousset)

10:45 - 11:00 Break

11:00 - 12:00 Mozilla session - Le Web en tant que plateforme pour les jeux, de WebGL à AsmJS (T. Nitot)

12:00 - 13:15 Lunch

13:15 - 14:15 Create 3D assets for the mobile world & the Web, the point of view of a 3D designer (M. Rousseau)
14:15 - 15:15 Samsung session - Enhancing HTML5 gaming using WebCL (Samsung) & Turbulenz (Partner)

15:15 - 15:30 Break

15:30 - 16:30 Three.js (J. Etienne from http://learningthreejs.com)
16:30 - 17:30 Minko.io (Jean-Marc Le Roux from http://aerys.in)

17:30 - 18:30 Roundtable - Open discussions about Web Gaming - Microsoft, Mozilla, Samsung, Ubisoft moderated by a journalist

Save the date, and register now but please, don't register if you don't plan to come. Thanks!

Friday 31 January 2014

CSS Regions

If there is one and only article you should read about CSS Regions, that's this one. And the conclusion is quite clear and I agree with it:

CSS Regions give us the ability to do a lot of things that are otherwise not possible without them

Thursday 7 November 2013

Beauty of the Web

One of the questions I'm often asked is « Did Tim Berners-Lee expect porn and terrorists on the Web when he designed it? ». Honestly, I don't know and I don't care since all technologies always have good and bad sides. And in our case, the good sides are so huge they make me proud to be a small part of that technology...

Yesterday, some friends of Molly Holzschlag started for her a fund on GoFundMe. Molly needs money to pay her chemo-therapy and given the state of social health in the US when you're not a white-collar in a large company, that's not an easy task.

The fund was started roughly at 0am my time. When I discovered it, some 14 hours later, it had $2,300 out of a $25,000 target. I donated to the fund, and tweeted immediately about it. Some other people tweeted about it too at the same time. Right after that, the donations started pouring in at fast pace. $3,000, $10,000, and wow $25,000 21 hours after the launch of the fund!

We're now a day later and the people who started the fund increased the goal to $50,000 because of the overwhelming response. The fund has already collected almost $45,000, 80% over the initial goal!

I'm happy for Molly, I'm insanely proud and happy the Web allowed that, this is the best incentive I could ever find for my daily job. YAY!

Sunday 29 September 2013


  • in S06E02, Castle helps investigating the case because he has only a day to live and that way helps so well solving the case he becomes again an assistant to Beckett's team, praised by the federal agents even if he should not be involved ; smart way to have him work again with Kate I think, and good job on the script.
  • at some point in the future, captain "Iron" Gates leaves the 12th precinct or is killed and Beckett is offered the role of captain there, accepts and goes back to NYC, reuniting with Esposito and Ryan and of course Castle.

Tuesday 24 September 2013

META Seal of Recognition

META Seal of RecognitionI am extremely happy and proud to let you know BlueGriffon received last thursday in Berlin, Germany, the « META Seal of Recognition » Award from the Multilingual Europe Technology Alliance for being the very first editor to implement the three main data categories of the W3C Internationalization Tag Set 2.0 (ITS 2.0) :-)

That implementation was done under a contract from DFKI and funding from the European Commission (project LT-Web), 7th Framework Programme (FP7), grant agreement n° 287815. The code is Open Source and will be available with forthcoming version 1.8 of BlueGriffon.

Here is the press release about it:

At the fourth annual META-FORUM conference in Berlin on September 19/20, it was announced that Disruptive Innovations was awarded the META Seal of Recognition for BlueGriffon. The META Seal of Recognition recognises excellence in software, products, and services which actively contribute to the European Multilingual Information Society. The META Technology Council, a panel of 30 experts drawn from the European Language Technology landscape, recognises the contribution BlueGriffon makes to the European Multilingual Information Society.

META, the Multilingual Europe Technology Alliance brings together researchers, commercial technology providers, private and corporate language technology users, language professionals and other information society stakeholders. META is preparing the necessary ambitious joint effort towards furthering language technologies as a means towards realising the vision of a Europe united as one single digital market and information space.

The META Seal of Recognition is awarded annually to select products and services which actively contribute to the initiative’s goals. This year is the third time the META Seal of Recognition has been awarded at a special ceremony as part of META-FORUM 2013 held in Berlin, Germany.

For more information see http://www.meta-net.eu/meta-seal

Tuesday 3 September 2013

Joining Samsung Open Source Group

The 13th of October, Disruptive Innovations will be ten years old. A few days after the last Netscape layoff in July 2003, I decided to benefit from the open source nature of Mozilla, launch my own company and start working on a new standalone editor, an application that eventually became Nvu and lead to BlueGriffon. At the end of 2008, the financial crisis hit us hard and in less than two weeks, most of our customers and prospects just vanished, after five years full of work and projects. I ended up working alone, something I became increasingly fed up with. A while ago, I posted on LinkedIn a message expressing that will/need to join a larger team and move on a bit.

I must say that message on LinkedIn has been incredibly successful, something I did not expect (at least not up to that level...). I got several super-interesting offers and I am then immensely glad and excited to report I have accepted a full-time position as Web Technologies Lead in the recently formed Open Source Group of Samsung. My involvement in W3C standardization activities will not change and may even increase in the near future, but will be performed under Samsung's wings.

As of Disruptive Innovations, the company and the products are still around, no worries, and the BlueGriffon product line will continue to improve and be updated.

A new part of my tech and professional life starts today, wish me luck!

Wednesday 17 July 2013

Internationalization Tag Set (ITS) 2.0 in BlueGriffon

I have been contracted by german company DFKI under a European contract to implement a part of the Internationalization Tag Set (ITS) 2.0 specification into BlueGriffon and I now have a first runnable prototype. So there is a new floating panel in BlueGriffon:

Local ITS state Global ITS rules


  • The "Locally" tab shows the ITS state of the container element of the selection. The ITS state is computed from the local ITS attributes, the global ITS rules applying to the element and potentially the ITS state inherited from the ancestors of the element (the inheritance rules of ITS 2.0 are fully implemented). That tab of course allows to override that local state and apply local attributes.
  • Three data categories are implemented under the current contract: Translate, Localization Note and Terminology
  • The "Global" tab allows to create and manipulate global ITS rulesets attached to the document, either inline (through a <script type="application/its+xml"> element) or external (through a link element). The order of rulesets attached to the document can be modified. Parameters and ITS rules can be added to the rulesets or moved into the rulesets. During a creation of a ruleset, both XPath and CSS query languages are available. The rule creation/modification dialog has a magic button computing automatically an Xpath or CSS selector for the currently selected element. All global properties defined by the spec are editable with respect to the cardinality defined by the spec. For XPath, the code looks for an already defined HTML namespace in the ITS rules and adds one (that is reported to the user) if that namespace is not present.
  • Parameters are correctly expanded in XPath and CSS selectors during global rules' application.
  • All operations are undoable.
  • The code was architectured with extensibility in mind and it will be pretty easy to add new ITS 2.0 data categories in the future.

All the above will be available in forthcoming BlueGriffon 1.8 to all users for free, thanks to the European Commission!

Monday 15 July 2013

Precisely ten years ago

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 3 EPUB editing environments recommended during the American Association of Physics Teachers' conference

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 :-)

Thursday 4 July 2013

Windows 8.1 preview in VirtualBox on a OSX host

You will probably hit an error as soon as your run the VM... To avoid it, open a Terminal and run a list vms command to find the name of your Windows 8.1 VM. Then add some processor data to your VM:

cd /Applications/VirtualBox.app/Contents/MacOS/
./VBoxManage list vms
"Ubuntu 13.04 32bits" {2fc6aab2-689a-48bc-9f52-b37052124f27}
"Ubuntu 13.04 64bits" {73101f39-2b02-4a69-b89b-8d5baa1063d1}
"Windows 8.1" {84433f7a-c1b4-41a5-abe0-220650943c16}
./VBoxManage setextradata "Windows 8.1" VBoxInternal/CPUM/CMPXCHG16B 1

Now you can run your Windows 8.1 VM. Hope that helps...

Monday 24 June 2013

BlueGriffon and '@media print' stylesheets

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.

Monday 10 June 2013

CSS Flexible Box is Best New Web Technology 2013!

I am extremely pleased to announce that a work done by the W3C CSS Working Group received last week a Net Award as Best New Web Technology 2013 from .net magazine for the CSS Flexible Box Layout Module. This is a bit of an achievement for the CSS Working Group itself, the authors/contributors/editors of the specification, and the W3C. Mucho congrats to all the members of the CSS Working Group and contributors to www-style, you guys rock!

Net Award Best New Web Technology 2013 for CSS Flexible Box Layout Module

Thursday 30 May 2013

Where is Daniel

- page 2 of 119 -