Dan Dascalescu's Wiki
/summaries/bayjax 2009-july
2009-Jul-27, 7pm: July 27 Bayjax Meeting at Yahoo
Satyen Desai - YUI 3: Design Goals and Architecture
Why YUI3 when YUI2 is perfect?
- lighter, finer grained, emphasis on code reuse
- easier:
each,bind, node list, chainability - faster
YUI2: global YAHOO object
YUI3: Y = new YUI() - multiple instances coexisting, even from different versions of YUI3. This enables mashups of pieces of code which use different versions of YUI to function properly.
Self-populating
Automatic loading: YUI.use("anim").
script src="yui-min.js">
Under the hood, that loads the dependencies: oop-min.js, js-min.js
Code reuse
YUI2 is the kitchen sink. YUI3 let's you use just the features you need.
- io: All IO functionality (7.4K)
io-base- can use independentlyio-form- can use independentlyio-queue- can use independentlyio-upload- can use independentlyio-xdr- can use independently
Similarly, plugins and extensions are split into standalone, discrete classes. For example, in YUI2, if you wanted to extend Overlay to create a Tooltip class, you'd have to carry over from Overlay: Advanced Positioning, Shim etc.
With YUI3:
Y.Tooltip = Y.Base.build("tooltip", Y.Widget, [ Widget-Position, Widget-Stack ]);
Other features
- Notification flow: event bubbling
- Detaching listeners is much easier
Node facade
A single convenient location to work with HTML elements:
YUI2:
var elms = YAHOO.util.Dom.getElementsByClassName("task", "li", "actions"); for (elm in elms) { ... }
YUI3:
var elm = Y.Node.get(".actions li.task.selected").chained_method();
Bulk node operations
Node list:
var items = Y.Node.all(".actions li"). items.addClass("disabled"); items.set("title", "Item is disabled");
Core language conveniences
- isString
- isNumber
- Bind
- Each
- etc.
Q&A
Q: Was jQuery an inspiration for some features, e.g. chaining?
A: Not specifically, but users' requests for concise code were. We didn't go to the lengths jQuery has gone into, in returning something chainable. If it makes sense for a method to have another type of return value, it'll return that.
More notes on this talk on Erik's blog
Nicole Sulivan: Object Oriented CSS
ul {...}
li {...}
ul li {...}
We've focused so far on the code between the braces. OOCSS focuses on the architecture - selectors.
Considerations
- Reflow and rendering are much less important for performance than HTTP request size
- Duplication is much worse than stale rules
Guidelines
Don't repeat the same code in every module
Bad:
#weatherModule h3 {color: red} #tabs h3 {color: red}
Problems:
- there is no default for
h3 h3will look different if reused in a different document
Better:
h3 {color: red}
#weatherModule h3 {color: black}
#tabs h3 {color: blue}
Issues:
- ?
Best:
h1, .h1 {...} h2, .h2 {...} h3, .h3 {...}
- Global values defined
- Semantics respected
Other guidelines
- Define structure in separate classes
- Style classes rather than elements
- ...and if there are exceptions, define only the little bits that are different from the default definition
- Avoid styling elements
- Give rules the same strength. Otherwise, you'll constantly fight specificity. For example, all rules for headers should have the same number of selectors:
.MyHeader .hd {...} .MyHeader2 .h2 {...}
- Avoid specifying location:
.sidebar,.headerare bad. Use ".mainNav" and ".subNav". - Avoid overly specific classes.
- Avoid using singletons. If you style with ids, you can only use the id once in any given page. Instead, style with classes.
- Use mixins to avoid repeating code.
- Encapsulation: don't access sub-nodes of an object directly: Bad:
.inner {...} .tr {...} .td {...}
Good:
.weatherMod .inner {...} .weatherMod .tr {...} .weatherMod .bl {...}
More notes on Erik's blog.
Jonathan Leblanc - Building scalable YQL widgets with JavaScript
Please see the excellent notes on Erik's blog.
Douglas Crockford: The JSON Saga
(below is an approximate quotation of Crockford, as best as I can remember it, and partial to the things that I do remember)
I did not invent JSON. I discovered it, because JSON "existed in nature".
The first use of JSON happened around 2001, to transmit a message between a server in my friend's garage and my laptop:
{do: "test", text: "Hello world"}
It also failed because "do" is a reserved word in EcmaScript 3.
Later, when I wanted to use JSON in the applications I was writing for my customers, they complained they couldn't use JSON because it was not a standard. But it was - it was part of JavaScript, which was a standard (EcmaScript). "No, that's not a standard". So I went ahead and bought JSON.org and made it a standard. Since it would be stupid for a standard to list all the reserved words in JavaScript, I decided to enclose the key in double quotes. I also put up a reference Java implementation of a JSON parser.
Later, I took a break from the Internet business and went into consulting for consumer electronics. So that's how JSON started: a standard in a bottle, thrown onto the Internet.
But people started writing their own parsers, in one language or another. And they asked me to put a link to their implementation on the site. Sure, I could do that. One advantage of the standard being so simple is that it was very easy to write a parser for it. Now JSON has parsers in almost any language you can think of.
I licensed it under the MIT license, which basically says "You can do whatever you want with it, just don't sue me". But since this happened after 9/11, I did my job of fighting evil and added a clause "This software may be used for good but not for evil". Sure enough, I got letters from people who said "But I should have the right to use it for evil! I won't use it until you change your license." Which means that I had done my job - I had stopped the evildoers.
Other people asked me "I'm not sure if this is is good or evil, what should I do?" But the best e-mail came from a company whose name I'm not going to disclose; I'll instead disclose only their initials: IBM.
[roars of laughter]
An IBM staff attorney sent me a letter asking for a special license so that IBM's customers could use JSON for evil. I granted him the following license: "IBM's customers may use this software for evil". Sure enough, I got a letter back saying "Thank you Mr. Crockford".
In the end, business cards were available with the JSON specification fit on the back.
More notes on this talk on Erik's blog.