<Glazblog/>

Wednesday 29 August 2012

epub-samples

I have taken all packages available from the epub-samples EPUB3 repository and pushed them through my own EPUB3 validator. Some of these "clean" packages are not that clean, so here are the validation logs. Please note my validator also checks all stylesheets in the package according to the EPUB3 CSS Profile (AFAIK, no other validator is able to do that).

Monday 27 August 2012

EPUB3 fun #8, update

I said a few days ago that validation of EPUB3 Content Documents is impossible. That's actually incorrect and I apologize for that. The PUB3 Content Documents spec normatively cites a RelaxNG schema for XHTML5 markup and dataypes. Still, I have no idea from reading the spec what flavor or xhtml5 it represents... I'm left with a RNG to understand if a given html5 element is implemented or not, and how, in EPUB3. Hum.

Saturday 25 August 2012

EPUB3 fun #9

Validation of meta elements in EPUB3 triggers a few surprises... In fact, that's not the meta elements themselves, it's the properties they carry. Let me explain:

  • EPUB3 meta elements carry a property attribute
  • a property is a keyword optionally preceded by a property vocabulary prefix and a colon
  • EPUB3 Media Overlays use the reserved media prefix mapped to namespace http://www.idpf.org/epub/vocab/overlays/#
  • the Media Overlays says the media:duration property has a cardinality of "exactly one for the Publication and for each Media Overlay"

In fact, that's quite painful and costly to test in the following case:

  1. suppose the namespace above is declared (yes, I know it's already reserved but it's not forbidden to do it !!!) on the package's prefix attribute with prefix foo
  2. suppose we have one <meta property="media:duration"> in the OPF for the Publication
  3. but also a <meta property="foo:duration"> for the same value...
  4. that's invalid per spec, see the last item of the list above

You can't compare the prefixes, that's not enough. You really need to rely on URIs and that's where validation is expensive.

Conclusion: Media Overlays 3.0 have been released with EPUB3. The associated media prefix should be dropped and its related properties should be prefixless in EPUB3. If the issue is the media:narrator property too close to a value in another property vocabulary, it should be changed.

Thursday 23 August 2012

QOTD

"So Twitter just joined W3C. Should we cut our specs into modules < 140 chars?"

Tuesday 21 August 2012

EPUB3 fun #8

EPUB3 is based on the xml serialization of HTML5. When I say HTML5, I really mean the W3C version. But there is a problem ; that also happens with many other specs normatively referenced by EPUB3 but let's focus on HTML5 right now: the link to the HTML5 normative reference has for href http://www.w3.org/TR/html5/ . In other terms, the last version (WD, LCWD, CR, PR, REC) published by W3C.

What's the version to consider for the implementation of an EPUB3 reader or editor? I have no idea. What has changed between the time the HTML5 WD was normatively referenced and now? I have no idea. What if for instance an "at-risk" feature is dropped in a future WD of the spec? I have no idea.

This is not only a theoretical issue, it has a deep and immediate practical impact: validation of the Content Documents inside an EPUB3 ebook is impossible. More globally, full validation of an EPUB3 package is then impossible.

EPUB3 fun #7

Hum, yet another bug in an EPUB3 spec... Excerpt (verbatim, nothing added or removed) from section 2.1.3.1.3 of EPUB Content Documents 3.0:

The prefix attribute

The prefix attribute definition is unchanged, but the attribute is defined to be in the namespace http://www.idpf.org/2007/ops when used in Content Documents.

Unchanged from what?!?

Friday 10 August 2012

EPUB3 fun #6

In the EPUB ebook world, there's one sentence I heard so many times from so various sources I did not even feel the need to verify it:

"Validation of EPUB is extremely important and we heavily rely on the EPUB Validator"

First thought: "excellent!". People need to distribute validated packages because they don't want to suffer big issues on the some of the many ebook readers on the market. Excellent.

Unfortunately, after a closer look, the situation seems to me a bit different from that idealistic (I could even say utopian) view... Let me explain (please note I have spent time carefully reading the epubcheck source code for instance):

  • if you count the number of major Standards (de jure, de facto, proprietary) involved in the validation of a given *.epub EPUB3 file, you'll find a few dozens of them. And again, only the major ones, the ones a serious industrial validator must absolutely validate against.
  • some validations are complex and expensive, for instance a serious validation of encryption.xml or signatures.xml will involve much more than just a RNG-based validation of the XML instance... Validation of external property vocabularies can be extremely tricky or painful/expensive to implement.
  • the first step of validation is related to the ZIP package itself, and the epub30-ocf spec has a few very technical requirements there. I sincerely doubt all of them are validated, I sincerely doubt EPUB3 packages all around the world currently pass or will pass all the conformance requirements there.
  • only in the W3C space, an EPUB3 validator must at least validate against a dozen of specs.
  • the complexity of some of these specs is huge, drastically impacting users (ebook authors) either on a learning curve's basis or on a financial one. Or both.

EPUB3 is probably too complex as a spec. In EPUB2, most people did not understand the difference between spine, ncx and guide. Most common question was "why do we have multiple table of contents and which one is the good one?". In EPUB3, it's a bit better but only a bit. We have landmarks, multiple table of contents and still a spine. Personally I still wonder why there is a manifest of files; probably only because of the MIME types. Hey, even OSes rely on file extensions to infer a MIME type!!!

I'd love to see appear an EPUB4 strictly xhtml5/svg/mathml-based. No other XML namespace allowed. No more OCF, OPF, NCX. Manifest of files coming from the ZIP list of entries. Direct inclusion of non-conflicting property vocabularies. No need to have an OCF, we can have a nice index.xhtml. Rely on a vocabulary of classes/IDs/roles (not the ARIA role...) expressing extra constraints/behaviours on existing html5 elements. Would be enough for most ebook authors and publishers and would drastically decrease the complexity of the publishing chain, IMHO.

Wednesday 8 August 2012

EPUB3 fun #5

Dates and time... Dates and time are painful, dates and time are complex, "dates and time are the most complex objects we use on a daily basis" used to say Reuters' Misha Wolf in the HTML WG in the good ol'days.

Excerpt from section 2.2.7 of OPF 2.01:

The date element has one optional OPF event attribute. The set of values for event are not defined by this specification; possible values may include: creation, publication, and modification.

Excerpt from section 3.4.6 of EPUB Publications 3.0:

The date element must only be used to define the publication date of the EPUB Publication.
...
Only one date element is allowed.

Ahem... So EPUB3 allows only two dates for a package: the publication date and the last-modification date (through a <meta property="dcterms:modified"> element). It's impossible to preserve the date of creation or various modification dates. Is it only me or this change from EPUB2 to EPUB3 is weird?

Please note that to insert a publication date into an OPF document ready for distribution, you must modify it and rezip the whole package. So if an OPF document does have a <dc:date> publication element, its content value must be equal to the last-modified date!!! In other terms, this is totally useless. Wow.

Tuesday 7 August 2012

EPUB3 fun #4

Excerpt from section 4.2.4 from EPUB Publications 3.0:

<package …
prefix="foaf: http://xmlns.com/foaf/spec/
dbp:  http://dbpedia.org/ontology/">
…
</package>

Excerpt from an unnumbered (sic) section of EPUB3 Fixed Layout Documents:

Implementors should note that future revisions of [Publications30] may establish the vocabulary represented by the URI http://www.idpf.org/vocab/rendition/# as a reserved vocabulary. In this case, the result will be that a) explicit mapping declaration using the prefix attribute will no longer be applicable, and b) the prefix ‘rendition’ will be reserved for this vocabulary. Future revisions of [Publications30] may also integrate the properties defined here into the Package Document default vocabulary. In this case the properties defined herein will be allowed to occur in Package Documents without a prefix.

In other terms, an attribute prefix="foobar: http://www.idpf.org/vocab/rendition/#" is needed on the package element for the time being to be able to parse <meta property="foobar:orientation">. But we're already warned that that foobar may become rendition w/o the need to declare the corresponding prefix on the package element. And well, even rendition could be itself dropped in the future. So in the long run, it will probably be <meta property="orientation"> w/o property prefix or prefix declaration.

<troll>I think it is not complex enough. Prefixes should be declared by extra meta elements themselves using a prefixed property, just to be able to have a few circular references...</troll>

Hey guys, why don't you finish shaking the shaker and get rid of the rendition prefix for good right now? Just for the record, I have in front of me here two EPUB3 documents, the first one uses the rendition property prefix without prefix declaration, the second uses the rendering property prefix instead of rendition but since the URI is ok, this is valid. In other terms, it's a mess already... I'm sure many epub3 Readers will look for rendition and only rendition, failing to correctly catch and resolve the prefix at all. Of course, the situation will get worse if the prefix becomes reserved or even integrated ! Pfff....

Monday 6 August 2012

EPUB3 fun #3

Clearly, Wysiwyg-editability was, as too often in W3C specs, the last concern on EPUB3 spec editors' mind... EPUB3 is not a W3C spec but an IDPF spec, but the result is the same, unfortunately. I have a concrete example here: in EPUB2, here's how an author is specified in the OPF metadata of the package:

<dc:creator opf:file-as="Murakami, Haruki" opf:role="aut">Haruki Murakami</dc:creator>

That is quite easy to map into a simple and efficient UI.

But in EPUB3, that's pretty different since the properties refining the <dc:creator> element are expressed in standalone <meta> elements using an ID/IREF reference mechanism:

<dc:creator id="mainauthor">Haruki Murakami</dc:creator>
<meta refines="#mainauthor" property="role" scheme="marc:relators" id="role">aut</meta>
<meta refines="#mainauthor" property="alternate-script" xml:lang="ja">村上 春樹</meta>
<meta refines="#mainauthor" property="file-as">Murakami, Haruki</meta>
<meta refines="#mainauthor" property="display-seq">1</meta>

Please note the alternate-script property that was not expressable at all in EPUB2. Please also note the display-seq property that allows to specify an rendering order for the element (in the list of creators). These are cool features but...

  1. any mechanism based on ID/IDREF introduces an extra keyword, the ID of the element ("mainauthor" here)... Asking a non-techie user to provide an ID is clearly suboptimal in terms of UX. That means the editing environment should pick one ID for the author, at the risk of using a human language not understood by the package's author or even a meaningless random ID.
  2. there can be multiple alternate-script properties and that is really, really tricky to offer in a simple and clean UI.
  3. CSS cannot style the above since there is no ID/IDREF mechanism in CSS; I understand that it was difficult to change the content model of DC elements but still, this is really a pity.
  4. the display-seq property  is absolutely suboptimal: since <dc:creator> elements can be refined by a role property, the display sequence should apply for all elements of the same localName having the same role and not only all elements of the same localName; having the display sequence's value in PCDATA instead of inside an attribute on the <dc:creator> itself seems to me a design error. Even worse, the spec says in section 4.3.2 that "When the display-seq property is attached to some, but not all, of the members in a set, only the elements identified as having a sequence should be included in any rendering". Weird!
  5. dealing with such metadata is expensive: for each <dc:creator> found, you have to look for all <meta> elements refining it. Please note the spec does not say what happens to a <meta> element when the IRI in the refines attributes has no target (I think such element should be made invalid).
  6. unless I missed it, I think nothing is said about conflicting properties; for instance a creator having two roles specified, "auth" and ""pmn".

All in all, EPUB3 creator/contributor metadata are painful to deal with and edit, using ID/IDREF mechanisms in a specification (also) made for authoring environments while we have the full power of XML to avoid them seems to me a strategic error.

Don't get me wrong, I do understand why the <meta> and its refines attribute were introduced. But I think the cost to pay for that is too high.

  1. we probably don't need a potentially multivalued alternate-script property. I think a monovalued original-script attribute on <dc:creator> or <dc:contributor> was probably enough.
  2. file-as and role were perfect as attributes in EPUB2. Having the possibility to declare a scheme for role seems to me useless, most package authors will use marc roles anyway for compatibility reasons with EPUB2. file-as meta property is, compared to the file-as attribute of EPUB2, useless bloat in terms of footprint, speed of access, editability and maintainability.
  3. the display-seq property seems to me far from meeting package authors' expectations. Its specification makes it painful to deal with since creators/contributors can become hidden if they have no display sequence while others have one. This property seems to me useless and the ordering of similar elements inside the <metadata> element is most certainly enough. I even bet that this feature will be drastically underused.
  4. all in all, that says the <meta> element of EPUB3 is a suboptimal solution for problems touching only an extreme minority of package authors. The complexity it induces is, in my humble opinion, counter-productive and EPUB2 metadata were better designed and specified.

EPUB3 fun #2

Aaaaah, forward compatibility... Here are two interesting excerpts from the EPUB Publications 3.0 specification.

In section 3.4.14: Authors may include the guide element in the Package Document for EPUB 2 Reading System forwards compatibility purposes

In section 3.4.1: The (version) attribute (of the package element) must have the value 3.0 to indicate compliance with this version of the specification.

Let's look now at two bits coming from the Open Packaging Format (OPF) 2.0.1 specification:

In section 1.4.12: the version attribute of the package element is specified with a value of 2.0

In section 1.3.2: In addition, to be processed as an OPF 2.0 package, a version attribute with a value of 2.0 must be specified on the package element. A package element that omits the version attribute must be processed as an OEBPS 1.2 package

In summary, <package version="3.0"> is absolutely needed for an EPUB to be parsed as EPUB3 and EPUB2 absolutely requires <package version="2.0"> since the absence of the version attribute defaults to OEBPS 1.2!!! Conclusion, "EPUB 2 Reading System forwards compatibility" described in the first quote above is absolutely illusory. Even worse, compatibility can be achieved if and only if EPUB Reading Systems deliberately ignore the version attribute on the package element... Ooops, to say the least.

EPUB3 fun #1

According to the section 3.4.6 of the EPUB Publications 3.0 spec, only one <dc:source> element is allowed in the OPF file for an EPUB3 package; it specifies a primary metadata expression. But according to section 3.4.7, it's also possible to use a <meta> element (in the http://www.idpf.org/2007/opf namespace, not the html one...) to specify a primary expression for the same source of the package. So

<dc:source>urn:isbn:9780375704024</dc:source>
<dc:source>urn:isbn:9780375704025</dc:source>

is not valid per spec but since nothing appears to be said in the spec about uniqueness of definition for primary expressions in the spec

<dc:source>urn:isbn:9780375704024</dc:source>
<meta property="dcterms:source">urn:isbn:9780375704025</meta>

is then perfectly valid... Of course, the behaviour of EPUB3 browsing or editing environments in that case is undefined :-(

And guess what? I have in front of me right now a "EPUB3" book having both<dc:source> and <meta property="dcterms:source"> elements. Lovely...

Tuesday 19 June 2012

Printing a web page #2

So the issue I described yesterday does not seem to hit all platforms. But it's still painful to me on my Mac so, as usual, I spent a few minutes hacking a Firefox add-on. It adds a new menu item to the File menu to print "as on screen" and it does exactly what it says.

It's a 0.9 but I tested on a dozen of web sites having very specific @media print styles and it works as expected. Auto-update is not enabled yet, I'll enable it for 1.0. Enjoy!

Monday 18 June 2012

Printing a web page

I hit a problem printing two well-known (in my personal environment) web pages this morning. I needed to print the W3C's FAQ and the home page of ERCIM, the european foot of the W3C. Because both have @media print stylesheets, you can see in the following screenshots a comparison between the screen rendering of the web pages and the corresponding print results:

W3C screenshot and print

Oops, I really needed the logo and a better presentation but the print stylesheet hides it (I checked the print option to have it printed)

ERCIM home page screenshot and print

Wow, that's a bit of a minimal print stylesheet :-(

So I needed a print of the web pages "as on the screen". But the print dialog of my browsers (I tested Firefox, Safari and Chromium on my Mac) has no such option:

system print dialog

Yeah, yeah, I know, I can still make a screenshot of the pages, open them in my browser and ask the browser to print the screenshot. But if *I* can do it, that's overkill for the average non-geeky user. The web page could also have alternate print stylesheets but we hit a similar problem: there's no way to select them and such a UI would be certainly too complex to many users... A "Print as on screen" option is clearly missing here and I wish Microsoft, Apple and Linux distros could add it to their respective system print dialog browser vendors could add such a new menu entry living next to the existing "Print" menu item.

Tuesday 10 April 2012

A floating table of contents for W3C specs

If like me you spend a lot of time reading, reviewing, navigating into W3C specs, you have probably also spent a lot of time scrolling to find the table of contents of these documents. Again, again and again. So many times you're probably fed up with it, like I am. In that case, this add-on for Firefox is for you. Install it and browse your favorite W3C spec. When it's loaded, look for the small box in the top-left corner. Make your mouse pointer hover over it to open the floating table of contents. Click anywhere (including on a link) in the expanded box to shrink it back. Enjoy :-)

Update: v1.1 is here. Next updates will be automatic.

Friday 10 February 2012

Blaming CSS WG is too easy, Brendan

Brendan, I have the highest respect for you and you do know it. But I cannot let you affirm in public the current situation about prefixes was caused first by the CSS Working Group.

  1. the CSS Working Group gathers you guys, browsers vendors. The Working Group decides nothing "by itself", it's an empty shell where browser vendors discuss, sometimes fight, and reach consensus. If a consensus was reached about introducing vendor prefixes in the past, the MEMBERSHIP of the Group is fully responsible for it and that DOES include Mozilla, or more probably Netscape at that time but eh we were all there at that time.
  2. even the W3C Process is decided by the W3C Members. The CSS WG is totally out of scope here. It's like saying you blame an airport because you don't like showing an ID at the airport, the airport being bound by national and international regulations. Nothing it can do about it. Have someone at the W3C Advisory Board (you used to have Arun) or call for Process changes in a constructive way. But please, tell Mozilla reps to stop asking for Process changes in the CSS WG when the bits to change are NOT in our hands. That too sucks our time.
  3. the CSS Working group kept drafts under its wings too often not because of pains caused by the W3C Process but because of the perfectionism of the WG Members. And they include Mozilla. People who criticize W3C say it lacks pragmatism, but trust me on that please, I too often said "perfectionism on CSS 2.1 sucks our time for CSS 3". CSS 2.1 took too many years to emerge also because you browser vendors wanted the most perfect spec and could never end the loop.
  4. let's take CSS Variables, a top request by the whole CSS Community since 1997. Dave Hyatt and I had a complete, simple, nice, understandable, easily implementable proposal, Dave even implemented it in WebKit and shipped it. Finally removed it because other browser vendors ended up in endless discussions on the feature itself. The CSS WG is not guilty here. The browser vendors are. They argued and argued and argued ad nauseum, for something that could have hit browsers FOUR YEARS AGO and we still don't even have an alternative. Don't blame the CSS WG, blame your representatives to the CSS WG. Where is the lack of pragmatism and the lack of speed?
  5. when the whole mobile Web is full of a feature implemented by WebKit, documented by Apple in two lines only on their developer's web site, protected by IPRs owned by Apple, never submitted by any browser vendor to the Working Group, and when Microsoft, Mozilla and Opera want to implement that super feature because lack of it harms their market share, don't blame the CSS WG. Fight the legal issue about IPR, implement a counter-measure legally feasible we could rapidly standardize or get Apple to submit their feature to the WG. But you just cannot tell the WG is guilty in any way here.
  6. I have said dozens and dozens of times in the CSS WG that prefixes are a terrible burden on Web Authors' shoulders. It's only recently (relatively to the age of the WG) that we adopted a rule allowing us to get rid of prefixes when we think a feature is stable enough. But this rule comes, again, from CONSENSUS AMONG BROWSER VENDORS. The Working Group here is nothing more but a meeting room. Each time a new proposal to simplify (or get rid of) prefixes was submitted in the past, one browser vendor at least objected. So what should we do? Break consensus? On what basis? My chair's hat?!? Playing Heads or Tails? Even with the new rule, discussions about the stabilization of a given feature and removal of prefixes always lead to one browser vendor objecting to the proposal supported by the others. And it's not always the same browser vendor. How can you say here the WG is first guilty?
  7. as far as I know, the list of prefixed (and even sometimes unprefixed while they should be prefixed!) properties implemented by WebKit is the following one:
    -epub-caption-side
    -epub-hyphens
    -epub-text-combine
    -epub-text-emphasis
    -epub-text-emphasis-color
    -epub-text-emphasis-style
    -epub-text-orientation
    -epub-text-transform
    -epub-word-break
    -epub-writing-mode
    -webkit-animation
    -webkit-animation-delay
    -webkit-animation-direction
    -webkit-animation-duration
    -webkit-animation-fill-mode
    -webkit-animation-iteration-count
    -webkit-animation-name
    -webkit-animation-play-state
    -webkit-animation-timing-function
    -webkit-appearance
    -webkit-aspect-ratio
    -webkit-backface-visibility
    -webkit-background-clip
    -webkit-background-composite
    -webkit-background-origin
    -webkit-background-size
    -webkit-border-after
    -webkit-border-after-color
    -webkit-border-after-style
    -webkit-border-after-width
    -webkit-border-before
    -webkit-border-before-color
    -webkit-border-before-style
    -webkit-border-before-width
    -webkit-border-bottom-left-radius
    -webkit-border-bottom-right-radius
    -webkit-border-end
    -webkit-border-end-color
    -webkit-border-end-style
    -webkit-border-end-width
    -webkit-border-fit
    -webkit-border-horizontal-spacing
    -webkit-border-image
    -webkit-border-radius
    -webkit-border-start
    -webkit-border-start-color
    -webkit-border-start-style
    -webkit-border-start-width
    -webkit-border-top-left-radius
    -webkit-border-top-right-radius
    -webkit-border-vertical-spacing
    -webkit-box-align
    -webkit-box-direction
    -webkit-box-flex
    -webkit-box-flex-group
    -webkit-box-lines
    -webkit-box-ordinal-group
    -webkit-box-orient
    -webkit-box-pack
    -webkit-box-reflect
    -webkit-box-shadow
    -webkit-box-sizing
    -webkit-color-correction
    -webkit-column-axis
    -webkit-column-break-after
    -webkit-column-break-before
    -webkit-column-break-inside
    -webkit-column-count
    -webkit-column-gap
    -webkit-column-rule
    -webkit-column-rule-color
    -webkit-column-rule-style
    -webkit-column-rule-width
    -webkit-column-span
    -webkit-column-width
    -webkit-columns
    -webkit-dashboard-region
    -webkit-filter
    -webkit-flex-align
    -webkit-flex-direction
    -webkit-flex-flow
    -webkit-flex-item-align
    -webkit-flex-order
    -webkit-flex-pack
    -webkit-flex-wrap
    -webkit-flow-from
    -webkit-flow-into
    -webkit-font-feature-settings
    -webkit-font-kerning
    -webkit-font-size-delta
    -webkit-font-smoothing
    -webkit-font-variant-ligatures
    -webkit-grid-columns
    -webkit-grid-rows
    -webkit-highlight
    -webkit-hyphenate-character
    -webkit-hyphenate-limit-after
    -webkit-hyphenate-limit-before
    -webkit-hyphenate-limit-lines
    -webkit-line-box-contain
    -webkit-line-break
    -webkit-line-clamp
    -webkit-line-grid
    -webkit-line-grid-snap
    -webkit-locale
    -webkit-logical-height
    -webkit-logical-width
    -webkit-margin-after
    -webkit-margin-after-collapse
    -webkit-margin-before
    -webkit-margin-before-collapse
    -webkit-margin-bottom-collapse
    -webkit-margin-collapse
    -webkit-margin-end
    -webkit-margin-start
    -webkit-margin-top-collapse
    -webkit-marquee
    -webkit-marquee-direction
    -webkit-marquee-increment
    -webkit-marquee-repetition
    -webkit-marquee-speed
    -webkit-marquee-style
    -webkit-mask
    -webkit-mask-attachment
    -webkit-mask-box-image
    -webkit-mask-box-image-outset
    -webkit-mask-box-image-repeat
    -webkit-mask-box-image-slice
    -webkit-mask-box-image-source
    -webkit-mask-box-image-width
    -webkit-mask-clip
    -webkit-mask-composite
    -webkit-mask-image
    -webkit-mask-origin
    -webkit-mask-position
    -webkit-mask-position-x
    -webkit-mask-position-y
    -webkit-mask-repeat
    -webkit-mask-repeat-x
    -webkit-mask-repeat-y
    -webkit-mask-size
    -webkit-match-nearest-mail-blockquote-color
    -webkit-max-logical-height
    -webkit-max-logical-width
    -webkit-min-logical-height
    -webkit-min-logical-width
    -webkit-nbsp-mode
    -webkit-opacity
    -webkit-padding-after
    -webkit-padding-before
    -webkit-padding-end
    -webkit-padding-start
    -webkit-perspective
    -webkit-perspective-origin
    -webkit-perspective-origin-x
    -webkit-perspective-origin-y
    -webkit-print-color-adjust
    -webkit-region-break-after
    -webkit-region-break-before
    -webkit-region-break-inside
    -webkit-region-overflow
    -webkit-rtl-ordering
    -webkit-svg-shadow
    -webkit-tap-highlight-color
    -webkit-text-decorations-in-effect
    -webkit-text-emphasis-position
    -webkit-text-fill-color
    -webkit-text-security
    -webkit-text-size-adjust
    -webkit-text-stroke
    -webkit-text-stroke-color
    -webkit-text-stroke-width
    -webkit-touch-callout
    -webkit-transform
    -webkit-transform-origin
    -webkit-transform-origin-x
    -webkit-transform-origin-y
    -webkit-transform-origin-z
    -webkit-transform-style
    -webkit-transition
    -webkit-transition-delay
    -webkit-transition-duration
    -webkit-transition-property
    -webkit-transition-timing-function
    -webkit-user-drag
    -webkit-user-modify
    -webkit-user-select
    -webkit-wrap
    -webkit-wrap-flow
    -webkit-wrap-margin
    -webkit-wrap-padding
    -webkit-wrap-shape-inside
    -webkit-wrap-shape-outside
    -webkit-wrap-through
    background-position-x
    background-position-y
    border-image-outset
    border-image-repeat
    border-image-slice
    border-image-source
    border-image-width
    overflow-x
    overflow-y
    text-overflow
    word-wrap
    zoom
    

    many of them being "documented" by Apple. Some are well known, come from a CSS WG spec/draft/document, and have their counterparts in Gecko, Presto and Trident. Some are totally unknown to us and were never submitted for standardization. So again, don't blame the CSS WG for prefixed properties that NEVER reached us. They are going to hit the market and spread because of a company, not because of a standards body. For the ones you implement and people don't use, well, Apple has nice editing tools, nice IDEs. I told you a loooong time ago that a browser is only the top of the ecosystem's iceberg and that editing is still a major part of it.

  8. we already have an existing case with extremely ugly de facto standardization coming from WebKit mobile market dominance, and that's the infamous meta viewport tag. I heard myself some Apple engineers acknowledge it was a rather big mistake. We have CSS equivalents for this on our radar, submitted by Opera. We could have moved towards a de jure solution faster here but apparently there is little interest shown by browser vendors if you except of course Opera. Blame again the CSS WG for that? Not you, Brendan, please. You know too well standardization for that.
  9. all of that said, please tell me how you are going to get rid of the -webkit-* prefix (or even implement the prefixed version in Moz) for -webkit-text-size-adjust given the IPRs?

It is too easy to always beat the CSS WG or the W3C. If you recall correctly, I have been one of the first ones to shout at the W3C in the XHTML2 fiasco. It was so early that Netscape still existed. I am still the first one to say it when they mess things up. But here, that's just unfair. I only agree that the CSS Working Group could have done better but hey, the Working Group members - hear YOU BROWSER VENDORS - decided there. So putting that organization at the top of your recriminations just carries a false message and hides an inconvenient truth.

Mozilla and Opera gave hand to Apple to create the WHAT-WG. You guys can speak together, for instance when your high-level representatives had a private secret meeting at Apple while the CSS WG was by pure coincidence in the meeting room on the other side of the corridor, was it november 2010. Meet again and let Apple know it must submit to the corresponding WGs technical proposals for the features that hit the Web and spread too wide to remain proprietary. Apple too must preserve the Open Web. So it says for HTML and APIs, so why not for CSS?

Thursday 9 February 2012

Some clarifications

My recent article triggered a massive response on twitter and in the Web Authors' community, and that's exactly what I think was needed. Let me clarify a few things:

  • Some say it won't be enough. That's entirely possible. Read it again: that's entirely possible. But at least I tried. And I did it because someone had to do it. I am accepting the fact some browser vendors could call me a painful asshole if it could help the Open Web. I'm not here to secure the market share of browser vendors. But I do care for the Architecture of the Web, its maintainability over time and even more for its coherence. I find non-WebKit-based browsers adopting -webkit-* properties a nightmare, and I will fight that as much as I can. Only then, if everything else fails, I'll accept to consider the last resort and terrible solution proposed by Microsoft, Mozilla and Opera.
  • I think Microsoft, Mozilla and Opera have, like Microsoft did in the past, underestimated the negative PR impact or decided to live with it. That's where you can help. Show them they can't live with it. Force them to find another solution.
  • Yes, I know that browser vendors have tried evangelizing web sites. Well... Opera has a large evangelization team dedicated to mobile. Mozilla has only a little one and not sure it's dedicated to mobile in any way. I have no idea for MS but they certainly have one. Now, all that evangelization happened far from public's eye. My goal with my article was to put it back under public scrutiny and request public's help to reach a stronger impact. That's why I wrote that your voice does matter. And it really does.
  • Some say it's because of W3C's Process that slows things down. No it's not. When a browser vendor has Intellectual Property Rights on a feature, when that browser vendor does not submit a technical proposal for that feature to W3C and when that feature hits the whole Web, there's nothing the W3C - or even other browser vendors - can do without facing legal action on one hand, potential incompatibilities with the protected feature on the other. Blame that browser vendor, not W3C or its Process.
  • Some say forget about the problem and use frameworks on the server-side. Oh come on. That's curing a severe wound with a plaster and Tylenol... And that's not always possible.

CALL FOR ACTION: THE OPEN WEB NEEDS YOU *NOW*

The CSS Working Group, the W3C, the browser vendors and the Open Web need you, and I really mean you ALL. The following article is written by Daniel Glazman, co-chairman of the CSS Working Group; the part until "This must not happen" represents an official discussion of the CSS Working Group. Members of the Group behind that discussion include Adobe, Apple, Disruptive Innovations, Google, HP, Microsoft, Mozilla, Opera and the World Wide Web Consortium (W3C). The second part of the article is strictly mine.

Not so long ago, IE6 was the over-dominant browser on the Web. Technically, the Web was full of works-only-in-IE6 web sites and the other browsers, the users were crying. IE6 is dead, this time is gone, and all browsers vendors including Microsoft itself rejoice. Gone? Not entirely... IE6 is gone, the problem is back.

WebKit, the rendering engine at the heart of Safari and Chrome, living in iPhones, iPads and Android devices, is now the over-dominant browser on the mobile Web and technically, the mobile Web is full of works-only-in-WebKit web sites while other browsers and their users are crying. Many sites are sniffing the browser's User-Agent string and filtering out non-WebKit browsers. As in the past with IE6, it's not a question of innovation but a question of hardware market dominance and software bundled with hardware. But there is an aspect of the problem we did not have during the IE6 era: these web sites are also WebKit-specific because they use only "experimental" CSS properties prefixed with -webkit-* and not their Mozilla, Microsoft or Opera counterparts. So even if the browser sniffing goes away, web sites will remain broken for non-WebKit browsers...

In many if not most cases, the -webkit-* properties WebKit-specific web sites are using do have -moz-*, -ms-*, -o-* equivalents. Gradients, Transforms, Transitions, Animations, border-radius, all interoperable enough to be browser-agnostic. Their web authors need only a few minutes to make the site compatible with Mozilla, Microsoft or Opera. But they never did it.

Without your help, without a strong reaction, this can lead to one thing only and we're dangerously not far from there: other browsers will start supporting/implementing themselves the -webkit-* prefix, turning one single implementation into a new world-wide standard. It will turn a market share into a de facto standard, a single implementation into a world-wide monopoly. Again. It will kill our standardization process. That's not a question of if, that's a question of when.

Let me be very clear: this is NOT hypothetical and I'm not discussing here something that could happen. All browser vendors let us officially know it WILL happen, and rather sooner than later because they have, I quote,  "no other option". Let me also state very clearly that is NOT a lack of innovation on these browser vendors' side, in particular when they DO support a feature but with their own prefix, following here the Working Group's rules.

THIS MUST NOT HAPPEN.

This situation happened in the past with IE6, when browsers were desktop-only, and it took ten long years to recover. With billions of mobile browsers today, the Web may not recover at all.

Vendor prefixes have not failed. They are a bit suboptimal but they also very clearly preserved Web Authors from chaos. We can certainly make vendor prefixes work better but we can only do that if vendor prefixes remain VENDOR prefixes.

I am asking all the Web Authors community to stop designing web sites for WebKit only, in particular when adding support for other browsers is only a matter of adding a few extra prefixed CSS properties.

I am asking all the Web Authors community to remove immediately and stop implementing WebKit-based browser sniffing in web sites. You own such a web site? Show your support for the Open Web and remove that browser sniffing immediately after you finish reading this call for action.

I am asking the Web Design and Web Users community to stop recommending web sites that require one single browser while they could be open to multiple ones. Don't link them, mention them only to let the community know they fail serving the Open Web. Don't feed the trolls; blacklist them, whatever is the coolness of the service they provide.

I am asking the Web Authors community to update their online services to support the other browsers if these other browsers offer a level of CSS support they did not offer in the past. Do that NOW! Very little effort, big effect.

I am asking the whole Web community, all Users, to ping Web Authors and complain if their web sites work only for one rendering engine while it could work for many. Help us evangelize these Web sites to make sure the Architecture of the Web remains safe for all, remains based on consensual and open Web Standards, because browser vendors implementing the prefix(es) of other browser vendor(s) can only lead to a chaos of the IE6 magnitude. We did it in the past for works-only-in-IE6 web sites and we did it well, now is the time to do it again for works-only-in-WebKit web sites.

I am also asking the browser vendors behind WebKit, namely Apple and Google, to submit as soon as possible to the CSS Working Group complete technical proposals for the proprietary CSS-like properties they have let the whole world use in iOS and Android devices, harming the Open Web. An example of such a property is -webkit-text-size-adjust. Please note the Apple representative to the CSS WG said he'll look at the possibility to have proposals submitted for a list of such properties. If these properties are so well implemented and so useful to the mobile Web, they became de facto standards ; let's turn them as soon as possible into de jure standards through W3C standardization. I am also calling Apple and Google to remove support for the "experimental" versions of a property when the final one is implemented and shipped. We, and that we represents the whole Web Industry, cannot let the architecture of the Web become unsafe and unreliable keeping forever vendor prefixes that should be gone. That is harmful and this is your responsibility, because you could provide mandatory software updates to your users. The Open Web does not have to suffer of such a decision.

So please all express your opinion, help the Open Web and tweet or blog that you don't want to see this happen. Some of you already started, after reading the minutes of the CSS Working Group face-to-face meeting in Paris. Let Microsoft, Mozilla and Opera know this is the wrong way to go even if we understand perfectly both the diagnosis and their proposed solution. If browser vendors standardize the Web, it's really owned by Users and Authors and now is the time to let browser vendors remember it better. YOUR VOICE DOES MATTER.

I am finally asking you to relay that call for help. For that reason, comments are closed on this article. Use your blog, your twitter account, Facebook, Google+, whatever. But do it.

Jeffrey, Eric, Molly, Lea and all our friends of the Web Designers' community and/or Web Standards' community: please help us. Now.

If you're a journalist, I'm immediately open to interviews on this topic (please note I'm based in Europe).

Thank you.

Updates:

Monday 30 January 2012

Le CSS WG à La Cantine le 8 février

Et y'aura pas de place pour tout le monde !!! L'inscription, c'est ici !

Friday 11 November 2011

Flash and Adobe

I am a bit sad. I'm a bit sad to see Flash is going away and Steve Jobs is not going to see it. Because that's his decision to have no Flash support in iOS that became the death knell for the Adobe technology. Flash became his weapon because:

  • Jobs had an old issue with Adobe to solve,
  • Apple does not like third-party technologies that become a gordian knot,
  • it's a question of good taste and I suppose Jobs has (almost) always considered Flash as bad taste.

So Flash will get security fixes on Android and RIM, will be stopped on all other mobile devices, and will continue to live on Desktop. As I told an interviewer last year in Sweden, HTML+CSS will eventually kill Flash but as a side-effect. By the way, it's ironical to read that at the same moment a rumor says Microsoft could stop Silverlight, its own -ms-Flash...

Speaking of Adobe, that's a big big change for them. They relied on proprietary tech they made ubiquitous, and they now have to rely on the browsers themselves. Since they can't implement themselves all the HTML, CSS and JS goodness they need to replace Flash, they will probably focus only on WebKit. And that's where it's interesting : since they have no impact on the other browsers, they cannot be sure all they need for Web Sites will be available in all browsers at a given time. They can only be sure - if they work themselves on WebKit - they can release a WebKit-based runtime for something like Adobe Air. Please note PDF.js is a threat of a similar magnitude to the Acrobat Reader plugin. So I think that Adobe will probably entirely leave the consumer-oriented plugin market at some point. Their acquisition of PhoneGap is another good indicator of that. They bet on WebKit as the biggest trend in the Web Browser market, thinking that other browsers will have to follow WebKit anyway if it implements new trendy stuff. Not a bad bet, in my humble opinion. That's also why we see a much more active participation of Adobe in the CSS Working Group for example.

Since WebKit is a lot in the hands of Apple, Adobe certainly asked itself the following question: "should we fork WebKit to be more in control?". I bet a box of cookies the answer was "no".

So my predictions, thinking out loud:

  • death of Flash and Silverlight, all platforms, as soon as possible.
  • death of Acrobat Reader as a plugin, all platforms, as soon as possible. Adobe should even help PDF.js.
  • stronger and stronger involvement of Adobe in WebKit ; following the acquisition in Bucharest, more hiring of SW engineers with good knowledge of the guts of WebKit.
  • Adobe Air will eventually drop Flash entirely and switch to Web Standards. Or Air as we know it will go away and PhoneGap will be the new Air.
  • Dreamweaver's future is probably a strong subject of discussion internally at Adobe. It has grown in circles, is hardly maintainable any more, focuses a lot on Flash-in-the-Web-page and is probably not adapted to what Adobe is currently creating.

- page 2 of 12 -