Why? Quckcheck is for companies only. Elixir is used by zero companies (except maybe 2 startups)
My highly non-scientific view of Erlang/Elixir world is something like this (don’t get offended by circle sizes, I’m bad at Venn diagrams):
If there is a company that sponsored the development of QuickCheck for Elixir, it’s great (both for the company and Quviq). However, it offers almost zero value to the rest of us for obvious reasons:
QuickCheck is virtually non-existent outside companies. I’m aware of the reason behind it and I can’t really say anything against that reason (because it makes sense ☺). However, it remains a fact: if you want to access more advanced features (like testing concurrency) you need a license, which has to be negotiated with Quviq, and costs an unspecified (and, as I hear, quite large) amount of money.
Elixir is still at an “early adoption” stage. So there are very few companies that use it, and even fewer who will decide to go for a QuickCheck license.
Most companies who already have the QuickCheck license will most likely not be willing to have Elixir in their toolbelt for an obvious reason (it introduces a new language/environment/build steps etc.).
Another point for inaccessibility. Remember the announcement that the OTP team will start using QuickCheck (awesome!). The very first reaction was “why use something most of us will not even be able to run?”. An expected reaction, really.
So that’s the main problem I have with this announcement and presentation: you’ve whetted our appetites. Now what?
What I would really love to see instead is just a clear licensing mechanism. Let’s say something like this:
Plan 1. $100 a month. You get a license for 1(3?) computers (that you can auth/de-auth from your profile), and 1–5 projects in QuickCheck CI. No support
Plan 2. $500 a month. A license for 10 computers, 10 projects in CI. 5 hours support
etc.
Then the “Testing concurrency with Elixir” presentations will be “oh, cool, I can use it” instead of “meh, I can’t use it, because I don’t even know how much it costs or whether I can afford it”.
Hence my reaction ☺ But it’s me, and I’m always bitter
Oh. By the way. If you think that I’m spreading some imagined hate about Elixir… go and take a cold shower.
I’ve received a fair amount of responses to my previous text. Time for a follow up.
What’s up with the rant?
The most valid complaint is: less rant and rage, more sense. But hey, what’s internet without rants? ;) However, the complaint is oh so true. Less rant in the follow up, I promise.
Oh. I also have much less gripe with WHATWG, than with W3C ☺ HTML5 and even DOM are kinda ok ☺
Breaking changes are hard
Another valid point: it’s very hard to introduce any breaking changes to the web and get people to adopt and to adapt. This fear is especially true for browser implementers, because implementing a breaking change may cast their browser away, to the sideroads. However…
Chrome is continuously experimenting with new features: they’ve introduced SPDY, WebP, WebM. SPDY went on to become the foundation of HTTP 2.0 (another rather major change to the web)
Microsoft is actually dropping support for old stuff in their new browser. I mean… Microsoft, who are hell-bent on backwards compatibility of everything forever.
So, it’s still risky, but not impossible to introduce major/backwards incompatible/breaking changes to the web… In a gentle way. Keep the old stuff working, actively promote and ecourage the new stuff. Yes, some of the old sites may never die. But don’t forget the 80/20 rule. It might be beneficial to the entire web eventually leave only the absolute minimum support for some old features (hey, remember the <blink> tag?).
It’s not impossible to imagine a backwards incompatible CSS4 with a separate renderer that:
cannot be mixed with CSS3 on the same page
triggers the new renderer by a mediatype, file extension or a special directive in the file (akin to “use strict” in JS)
So, render old stuff with the old renderer, render the new stuff with the new renderer.
I wouldn’t worry about the standard being picked up, provided it does away with the cruft, bloat, legacy and inconsistencies of the old standard. Even sites with huge user shares eventually drop support for older browsers (see, e.g. Facebook: 1, 2, 3) and pick up new features. Also, nowadays browsers are updated rather quickly.
Also, we are at a weird point in time when browser implementors and vendors more or less agree with each other. Can I Use is a testament to that. There’s actually hardly a specification without wide or upcoming support.
Why would browser implementors want to get rid of their current implementations?
Because they are programmers.
This is not a scientifically backed up argument, but still: no one wants to work on an old, complex (and getting increasingly complex) code. Especially if it’s millions of lines of code. Especially if it’s a system that gets burdened with more and more layers of rules on top of each other (hey, kids, how do you reconcile css3-align with css3-grid-layout in a css3-flexbox in a float in a …). There’s rules in rules on top of rules hampered or overriden by other rules and so on. And it has to be insanely fast. And it has to be correct, for some definition of correct, as there’s no reference implemetation, only tests (which are woefully incomplete and may target outdated versions of HTML: 1, 2).
BTW, the lack of tests is not a jab at their authors. The sheer amount and complexity of the specs make it impossible to create enough tests (css3-align in a css3-grid-layout in a… you get the point). I’m half expecting CSS to finally adopt C++’s approach and add “implementation-dependent” or “undefined” clauses ☺
Hey, this funny guy makes fun of my title
One problem I have with some/many/most of the specs that come out of W3C and WHATWG is that I don’t feel they are made by people who are doing any serious frontend web-development, or at least haven’t done it for a looooong time.
The main reason for thinking so is that it’s very hard to find evidence of any authors doing any of the (let’s call it) modern web-development. Yes, they hold high positions at various companies/groups/ universities/committees, they hack specs/work on web standards, they work on browser code. But what of actual frontend web-development?
I mean, have you ever developed a complex and/or beautiful website? There are quite a few of them around: Facebook, Gmail, Asana, Google Docs/iCloud, Medium, CSS Zen Garden, various Tumblr designs, Pinterest, Rdio — you name it.
Because if they’d ever develop such a site, we wouldn’t end up in a situation when a simple menu requires 4-level nesting of <div>’s to display a simple menu even on the web-site dedicated to promoting CSS3:
(W3C own site manages to do it with only 3 nested divs. Medium needs 4, and each element is another div. Well, you get the picture)
As an aside: I was told that Facebook is a trivial site to implement in CSS. But have you actually looked at what a Facebook page is? There’s multiple layouts, panels, panels within panels, buttons and drop-down menus everywhere, floating content, fixed content, pop-ups, highlights, embedded content, tigers, and lions, and bears, oh my. It’s not trivial.
Another reason I don’t believe they are doing any serious web-development is the time it takes some features to appear (if ever).
Cases that stuck in my mind.
By 2006 CSS had been around for 10 years. DOM and XPath about the same. It turned out that it was easier to implement CSS Selector and XPath lookups in JavaScript than to wait for querySelector to appear and make its way through W3C. And what a surprise, there’s actual evidence that the author of the spec actually was a web-developer (hence the useful spec, I presume).
SASS (2007) and LESS (2009). As of 2015 (almost 20 years after CSS appeared) there’s exactly 0 proposals offering anything remotely similar.
*Edit: there is a spec for css variables, thanks to Tim Severien for pointing this out
css3-marquee is a Candidate Recommendation, way ahead of css3-flexbox (solving the nested divs from above) and grid-layout (basically 100% of css frameworks out there), for example. Or even ahead of css3-align which, apparently, finally lets you vertically align elements.
In an extended Twitter conversation I was told that most of the discussion is driven by the browser implementers. Maybe that’s the reason behind the weird specs, late or non-existent features and the continuing unsuitability of CSS for anything but the most basic layout. People who are good at implementing browser code might not necessarily be good frontend web-developers (or web-developers at all).
Join, review, speak up
It was suggested (and this is also a very valid point) that anyone who has anything to say on the matter, should join the mailing lists, speak up, and review the specs.
However, I must confess: I don’t believe in this approach. The problem with too many people having an input is that:
the loudest one wins in the end, and
any decisions, designs, and implementations are dragged down by endless discussions (from the admittedly few discussions I’ve seen on W3C’s mailing lists, this is quite often the case)
I would rather like to see a smaller, more focused group of people working to implement a lean and mean standard than a thousand people debating whether a particular fringe/weird case is relevant.
Questions, do you ask them?
Any and all specs by necessity contain only the simplest examples. A single floating div. Four divs in a grid. And so on. The real web is much more complex than that.
I’m not too familiar with W3C’s or WHATWG’s discussions, but I wonder if people ever ask questions beyond simple examples?
Hey, here’s a Facebook page. Can you show how I can implement it in it’s entirety using your CSS proposal(s)?
Does your solution involve nested <div>’s to represent a menu? Your solution is bad
Does your solution involve setting several properties on the container, and on the element, and on the elements contained in the element to make them display properly? Your solution is bad
Does your solution involve fiddling with positioning modes, parent’s and child’s sizes, and so on just to set a child’s offset within the parent relative to the parent? Your solution is bad
Can your solution involving three different attributes, and a shorthand attribute, and several different measurement units be replaced by a single shorthand rule with a single unit? Your solution is bad, replace it
And so on. Replace Facebook with any website (or even Sencha’s examples), rinse, repeat. Until you get an actual pragmatic solution. Ditch the fringe cases. Ditch the theoretical “I can imagine when x could be useful”. Go for pragmatic.
Also, look at what people are doing to improve CSS (or HTML/DOM for that matter) (jQuery, SASS, LESS, Grid Style Sheets) and go and standardise those. These are the things that people want and need.
tl;dr: W3C and WHATWG are a useless bloated bunch of people who don’t care in the least about making the web a better place. Both W3C and WHATWG should die a quick and horrible death, and the development of web standards should be given to a lean and mean group of people, all of whom are actual web developers.
For the sake of all that’s good and holy: why?
Web-developers have the worst ever Stockholm syndrome ever in the history of the world ever. Whatever inconherent inconsistent overlapping multi-million-page abomination of a spec spewn from either of the two committees we cheer them on and ask for more.
ASCII art? OMG, the best thing since sliced cheese!
Oh, this ASCII art overlaps and reimplements partial implementations of the same fucking thing? OMG, give me that and those two things, too!
Turing completeness in HTML5+CSS? Woot! Woot! Exactly what we needed all this time!
And this just goes on.
Why do we keep believing that these self-aggrandizing bloated useless monstrosities work to make the lives of developers easier? Or the web better? What evidence is there?
{ vertical-align: fuck off, any-align: fuck-off }
(Original tweet by Lewis King lost, here's just a quote from it)
We have landed a robot on a comet 317 million miles from Earth and yet we still can't vertically align things easily in CSS.
Yes, it’s true, folks. In the age of SOA applications, and facebooks, and twitters and mediums, there’s still no way to align anything against anything.
Good fucking grief.
Please, do visit these two links, read, and weep: %% units and “flow” attribute. Unlike W3C and WG, the author of these extensions uses them in commercial software that is actually used to build UIs. These extensions cover, oh, I don’t know, 80–90% of a web-developer’s needs?
So, here’s the story. %% units and the “flow” attribute were proposed to W3C. Can’t find the discussion now (it was 7 years ago, at the very least), but the proposal was shot down. Fast forward 7 years, and lo and behold: flexbox, grid-layout and multicol. Bloated, inconsistently named and overlapping each other. And yes fringe cases.
See, folks at W3C and WG act as if they were pure academics.
“Hey, guys, I have this purely theoretical problem which will look nice in a book somewhere. What do you think?”
“Awesome! Bring it on. No, bring two or three of those”
row (default): left to right in ltr; right to left in rtl
row-reverse: right to left in ltr; left to right in rtl
column: same as row but top to bottom
column-reverse: same as row-reverse but bottom to top
Can you name/find a single person on this Earth who would need *-reverse directions? Yes, there could be a few: writing books and tutorials that will include this utterly useless piece of garbage. However, since this is a theoretical fringe case, it no doubt was discussed at length and included at the incsistence of “prominent members” of the W3C community.
Damn them all to hell.
Instead of solving real-world problems they play in a nice academical theoretical sandbox, solving non-existing problems. Look at each and every steaming pile of horse manure that they produce: all this bloat, all these insane attributes and measurements stem from the fact that someone somewhere produced an insanely convoluted theoretial example of a non-existent problem and produced a solution to it.
Obviously, it’s not constrained just to alignments. It’s 2015 and it’s still easier to make sites based on exact pixel measurements than sites based on relative percentages. It is impossible for any sane person to create a responsive site without the use of CSS Frameworks (which are themselves bloated and limiting — out of necessity, not by choice). Whole articles on how to vertically align elements or create proper three-column layouts still exist. And the list just goes on and on and on and on…
Do you want to build a sand castle?
Yes. Sand castles.
There’s not a single reference implementation for any of the specs coming out of W3C and WG
Re-read that sentence, and let that sink in. All these specs are purely theoretical constructs that are unleashed on browser implementors and then on web developers.
Hey, you thought Acid tests where the reference implementation? No. Those, too, are theoretical constructs created on a theoretical basis. No wonder browser developers often cheat to make sure their browser passes an Acid test, and only the Acid test, the actual spec implementation be damned.
I’m not even sure the people who come up with the crap they call specs even do any serious web development. I mean, look at W3C’s and WG’s web sites. That’s exactly the type of site you can build using their specs.
I’ll leave this as an excersise to you: go through specs, find their authors, and what they do. Look at their websites, demos etc. You’ll see what I mean. I kid you not, there’s a guy whose job description is “spec hacker”. Jesus…
Is there a way out?
Of course.
Nuke W3C and WHATWG out of existence. As soon as possible. Leave a small team of people (10, maybe 15, tops) to implement a backwards incompatible lean and mean CSS 4:
Get guys who created SASS to oversee/enforce, well SASS. Because, come on, how thick must you be to not come up with something like SASS in 20 years of CSS’ existence? Oh, right, you have to be W3C, of course, duh
Apple implemented Cassowary Constraint Solver for their UIs. Get them and the authors of Cassowary, one of whom implemented it for the web, to enforce this as a new standard
Get people from Apple to implement all font-related specs. Because this:
Let the guys from above work on specs for a year. After that open up for comments from people who actually build websites: Facebook, Gmail team (not Google, not Chrome team), Asana, even Medium. Ask actual people who build sites about what they want and need.
Implement/fix whatever issues/comments you gather from web-developers (leaving larger issues for next iteration). Release this as CSS4 spec:
CSS4 cannot be mixed with CSS3 on the same page
CSS4 is triggered either by media-type (text/css-v4), file extension (.css4), or embedded directive (/\* css-v4 \*/), in this order
work with browser implementors on implementing CSS4. They will thank you for that
unleash it on the world. The world will thank you for that
Last step:
Dig W3C and WHATWG out of their graves, kill and bury them again.