3. Welcome to the Jungle - GnR
"Imagine you're hearing awesome
music here, because imagining it is a
lot cheaper than getting licenses to
actually play it." @yaypie
Monday, November 7, 2011
16. Back in Black - AC/DC
"Imagine you're hearing awesome
music here, because imagining it is a
lot cheaper than getting licenses to
actually play it." @yaypie
Monday, November 7, 2011
44. GBS Update
As of our last update (7/12/11), we've decoupled the
Graded Browser Support development strategy from the
testing methodology.
The "Browser Test Baseline" is a representative set of
browsers chosen to provide the maximum testing
coverage over the minimal testing surface.
Monday, November 7, 2011
46. Today - Smashing Pumpkins
"Imagine you're hearing awesome
music here, because imagining it is a
lot cheaper than getting licenses to
actually play it." @yaypie
Monday, November 7, 2011
68. Livin on the Edge - Aerosmith
Monday, November 7, 2011
69. Livin on the Edge - Aerosmith
"Imagine you're hearing awesome
music here, because imagining it is a
lot cheaper than getting licenses to
actually play it." @yaypie
Monday, November 7, 2011
76. Component Updates
In 3.5.0, DataTable will be my
primary focus. It will undergo
an architectural overhaul, with
plans to move it to a Model/
ModelList + View based
internal structure, which will
allow more flexibility in
rendering and data
interchange with server bound
data.
Monday, November 7, 2011
77. Component Updates
✦ Core
✦ Bidi/RTL/Skins
✦ Get
✦ Loader
✦ DataTable In 3.5.0, DataTable will be my
primary focus. It will undergo
✦ App Framework an architectural overhaul, with
plans to move it to a Model/
ModelList + View based
internal structure, which will
allow more flexibility in
rendering and data
interchange with server bound
data.
Monday, November 7, 2011
80. New Components
✦ Handlebars
✦ Pjax
Monday, November 7, 2011
81. New Components
✦ Handlebars
✦ Pjax
✦ Test Console
Monday, November 7, 2011
82. New Components
✦ Handlebars
✦ Pjax
✦ Test Console
✦ TreeView
Monday, November 7, 2011
83. New Components
✦ Handlebars
✦ Pjax
✦ Test Console
✦ TreeView
✦ Widget Lite
Monday, November 7, 2011
84. New Components
✦ Handlebars
✦ Pjax
✦ Test Console
✦ TreeView
✦ Widget Lite
✦ Uploader in HTML5
Monday, November 7, 2011
85. New Components
✦ Handlebars
✦ Pjax
✦ Test Console
✦ TreeView
✦ Widget Lite
✦ Uploader in HTML5
✦ Button Widget
Monday, November 7, 2011
86. New Components
✦ Handlebars
✦ Pjax
✦ Test Console
✦ TreeView
✦ Widget Lite
✦ Uploader in HTML5
✦ Button Widget
✦ Windowing Components
Monday, November 7, 2011
87. New Components
✦ Handlebars
✦ Pjax
✦ Test Console
✦ TreeView
✦ Widget Lite
✦ Uploader in HTML5
✦ Button Widget
✦ Windowing Components
✦ Tooltip
Monday, November 7, 2011
88. New Components
✦ Handlebars
✦ Pjax
✦ Test Console
✦ TreeView
✦ Widget Lite
✦ Uploader in HTML5
✦ Button Widget
✦ Windowing Components
✦ Tooltip
✦ Dialog
Monday, November 7, 2011
89. New Components
✦ Handlebars
✦ Pjax
✦ Test Console
✦ TreeView
✦ Widget Lite
✦ Uploader in HTML5
✦ Button Widget
✦ Windowing Components
✦ Tooltip
✦ Dialog
✦ Pointer
Monday, November 7, 2011
90. The Book of
YUI 3
(not the real title)
Monday, November 7, 2011
91. The YUI 3 Cookbook
Evan Goer
goer@yahoo-inc.com
The YUI 3 Cookbook contains 150 recipes.
Each recipe includes a self-contained
working example. Most examples are
deliberately very short, but have an
extensive discussion.
Monday, November 7, 2011
92. The YUI 3 Cookbook
Evan Goer
goer@yahoo-inc.com
http://goer.org/YUI
To download a free sample pack of three
PDF chapters. These chapters are raw and
contain typos, red TODOs, and errors.
You've been warned!
Monday, November 7, 2011
96. Talk Dirty to Me - Poison
"Imagine you're hearing awesome
music here, because imagining it is a
lot cheaper than getting licenses to
actually play it." @yaypie
Monday, November 7, 2011
98. Component Talks
Allen Rabinovich
@allenr
Monday, November 7, 2011
99. Component Talks
Allen Rabinovich
@allenr
Architecting and building a module
from scratch. Lessons in careful
planning, optimization and feature-
setting that go into module design.
Monday, November 7, 2011
101. Component Talks
Jeff Conniff
The Dial widget is a circular value
input control. It's like a real-world,
analog, volume control dial, but with
much finer UI control.
Monday, November 7, 2011
123. Closing Time - Semisonic
"Imagine you're hearing awesome
music here, because imagining it is a
lot cheaper than getting licenses to
actually play it." @yaypie
Monday, November 7, 2011
124. Images
All images used are copyright of
the original publisher.
Album artwork pulled from
Wikipedia.
Darth Vader image from
bootspring.com
Mobile device images from
apple.com, google.com and
motorola.com
Harley image from harley-
davidson.com
Github images from github.com
Monday, November 7, 2011
125. Enjoy The
Conference
Dav Glass,
Hacker
@davglass
Monday, November 7, 2011
Editor's Notes
\n
\n
\n
\n
\n
\n
\n
* En la pregunta final, la estrategia de acceso a datos se refiere a si quieres un lenguaje de alto nivel para hacer consultas, tipo SQL, o te sientes mejor trabajando a bajo nivel, con Map/Reduce o incluso operaciones sobre colecciones\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
* Mencionar el uso de Spring Datastore como API por debajo de la integración de Grails con NoSQL\n* Recomendar no usar GORM; sólo ‘embedded’ cuando se necesite, pero el resto propiedades de clase normales (generan un DBRef)\n
* TRANSACCIONALIDAD --> Consiste en mantener una lista de cambios pendientes que no se mandan realmente a MongoDB hasta que no se hace el flush. Sin embargo, no solucionan la atomicidad del lado de MongoDB en el caso de varias operaciones. Por ejemplo, transferencias entre cuentas de dos bancos\n
\n
\n
\n
\n
\n
\n
\n
\n
* Hacer notar que no se puede obtener la colecci&#xF3;n de Detalles de un Maestro ordenada, ya que la colecci&#xF3;n del Maestro simplemente tiene las referencias --> Workaround: definir &#x2018;detalles&#x2019; en Maestro como una Lista, de forma que se guarde ordenada en MongoDB\n* Demostrar que si cambio el hasMany por un simple List<Detalle> detalles, no funciona porque MongoDB no sabe c&#xF3;mo convertir un Detalle a BSON (habr&#xED;a que usar un &#x2018;Custom Type&#x2019; - ver documentaci&#xF3;n del plugin)\n* Comentar que m&#xE1;s adelante veremos el tema de los &#xED;ndices para optimizar las b&#xFA;squedas\n
* Matizar que la colecci&#xF3;n embebida tiene el &#x201C;_embeddedClassName&#x201D; para que Grails sepa c&#xF3;mo transformar el BSON de vuelta a un &#x2018;detalle&#x2019;\n* Fijarse en que al haber usado una colecci&#xF3;n de tipo List, los &#x2018;detalles&#x2019; est&#xE1;n ordenados\n* Comentar que por defecto vuelve a guardar la colecci&#xF3;n entera cuando a&#xF1;adimos un elemento, con lo que quiz&#xE1;s ser&#xED;a mucho m&#xE1;s &#xF3;ptimo usar la API de bajo nivel y hacer un $push\n
* Comentar que el nombre del Detalle es su identificador ahora, pero lo ideal ser&#xED;a crearle uno realmente &#xFA;nico (por si permite nombres duplicados - por ejemplo, los art&#xED;culos de una factura)\n
* El ejemplo t&#xED;pico de usar M:1 para definir una 1:M ser&#xED;a el de Factura y Art&#xED;culos --> Factura.getArticulos() { Articulo.findAllByFactura(this) }\n* Comentar que se miren los Trees como dise&#xF1;o embebido en relaciones estrictas de padre/hijo\n
\n
\n
\n
\n
\n
\n
* Queremos buscar los detalles cuyo maestro sea &#x201C;Maestro1&#x201D;\n* Notar que el plugin hace la query contra el $id, no contra la referencia, con lo que la indexaci&#xF3;n definida como constraint en la clase no sirve de nada\n
* Queremos buscar los detalles cuyo maestro sea &#x201C;Maestro1&#x201D;\n* Notar que el plugin hace la query contra el $id, no contra la referencia, con lo que la indexaci&#xF3;n definida como constraint en la clase no sirve de nada\n
\n
\n
\n
\n
\n
\n
* Explicar que al estar embebido el Detalle, se recupera la colecci&#xF3;n contenedora y entonces se busca el Detalle espec&#xED;fico porque puede tener otros campos de los cuales queremos saber su valor\n
* Explicar que al estar embebido el Detalle, se recupera la colecci&#xF3;n contenedora y entonces se busca el Detalle espec&#xED;fico porque puede tener otros campos de los cuales queremos saber su valor\n
* Explicar que al estar embebido el Detalle, se recupera la colecci&#xF3;n contenedora y entonces se busca el Detalle espec&#xED;fico porque puede tener otros campos de los cuales queremos saber su valor\n
* Explicar que al estar embebido el Detalle, se recupera la colecci&#xF3;n contenedora y entonces se busca el Detalle espec&#xED;fico porque puede tener otros campos de los cuales queremos saber su valor\n
* Explicar que al estar embebido el Detalle, se recupera la colecci&#xF3;n contenedora y entonces se busca el Detalle espec&#xED;fico porque puede tener otros campos de los cuales queremos saber su valor\n
* Comentar que hay dos formas de modelar esto: la primera es la que se muestra aqu&#xED;, donde embebemos parte del Articulo (codigo, descripcion) en la Factura, de forma que podemos buscar directamente en la Factura por descripci&#xF3;n de Articulo\n* Destacar el hecho de usar el &#x2018;collect&#x2019; para recuperar los objetos Articulos como tal, ya que en Factura s&#xF3;lo tenemos una parte del Articulo y queremos ver todas las caracter&#xED;sticas de todos los art&#xED;culos\n
* Comentar que hay dos formas de modelar esto: la primera es la que se muestra aqu&#xED;, donde embebemos parte del Articulo (codigo, descripcion) en la Factura, de forma que podemos buscar directamente en la Factura por descripci&#xF3;n de Articulo\n* Destacar el hecho de usar el &#x2018;collect&#x2019; para recuperar los objetos Articulos como tal, ya que en Factura s&#xF3;lo tenemos una parte del Articulo y queremos ver todas las caracter&#xED;sticas de todos los art&#xED;culos\n
* Comentar que hay dos formas de modelar esto: la primera es la que se muestra aqu&#xED;, donde embebemos parte del Articulo (codigo, descripcion) en la Factura, de forma que podemos buscar directamente en la Factura por descripci&#xF3;n de Articulo\n* Destacar el hecho de usar el &#x2018;collect&#x2019; para recuperar los objetos Articulos como tal, ya que en Factura s&#xF3;lo tenemos una parte del Articulo y queremos ver todas las caracter&#xED;sticas de todos los art&#xED;culos\n
* Comentar que hay dos formas de modelar esto: la primera es la que se muestra aqu&#xED;, donde embebemos parte del Articulo (codigo, descripcion) en la Factura, de forma que podemos buscar directamente en la Factura por descripci&#xF3;n de Articulo\n* Destacar el hecho de usar el &#x2018;collect&#x2019; para recuperar los objetos Articulos como tal, ya que en Factura s&#xF3;lo tenemos una parte del Articulo y queremos ver todas las caracter&#xED;sticas de todos los art&#xED;culos\n
* Comentar que hay dos formas de modelar esto: la primera es la que se muestra aqu&#xED;, donde embebemos parte del Articulo (codigo, descripcion) en la Factura, de forma que podemos buscar directamente en la Factura por descripci&#xF3;n de Articulo\n* Destacar el hecho de usar el &#x2018;collect&#x2019; para recuperar los objetos Articulos como tal, ya que en Factura s&#xF3;lo tenemos una parte del Articulo y queremos ver todas las caracter&#xED;sticas de todos los art&#xED;culos\n
* La query busca las facturas donde todav&#xED;a no hay cobros, es decir, las facturas sin cobrar.\n
* La query busca las facturas donde todav&#xED;a no hay cobros, es decir, las facturas sin cobrar.\n
* Rendimiento penalizado: se ejecuta el c&#xF3;digo JS para cada uno de los objetos escaneados.\n* Comentar el db.eval() para &#x2018;server side processing&#x2019;\n
* Rendimiento penalizado: se ejecuta el c&#xF3;digo JS para cada uno de los objetos escaneados.\n* Comentar el db.eval() para &#x2018;server side processing&#x2019;\n
* Notar el uso de la API en DBRef, con especial &#xE9;nfasis en el segundo par&#xE1;metro, que puede dar lugar a confusi&#xF3;n\n
* Notar el uso de la API en DBRef, con especial &#xE9;nfasis en el segundo par&#xE1;metro, que puede dar lugar a confusi&#xF3;n\n
* Comentar que el Map/Reduce no tiene mucho sentido implementarlo en el plugin\n* Explicar que Map/Reduce es una tecnolog&#xED;a mediante la cual se puede agrupar informaci&#xF3;n de manera &#xF3;ptima en paralelo y que viene de las BigTable de Google\n
* Comentar que es una alternativa r&#xE1;pida al Map/Reduce, pero que no funciona en configuraciones &#x2018;sharded&#x2019;\n
* Comentar que es una alternativa r&#xE1;pida al Map/Reduce, pero que no funciona en configuraciones &#x2018;sharded&#x2019;\n
* No permite &#x2018;sharding&#x2019; debido sobre todo al tema de los &#x2018;write lock&#x2019;\n* Comentar que podemos almacenar la definici&#xF3;n de la funci&#xF3;n JS mediante --> db.system.js.insert({_id: &#x201C;nombre&#x201D;, value: function(x) { return x * x; }});\n
* No permite &#x2018;sharding&#x2019; debido sobre todo al tema de los &#x2018;write lock&#x2019;\n* Comentar que podemos almacenar la definici&#xF3;n de la funci&#xF3;n JS mediante --> db.system.js.insert({_id: &#x201C;nombre&#x201D;, value: function(x) { return x * x; }});\n
* No permite &#x2018;sharding&#x2019; debido sobre todo al tema de los &#x2018;write lock&#x2019;\n* Comentar que podemos almacenar la definici&#xF3;n de la funci&#xF3;n JS mediante --> db.system.js.insert({_id: &#x201C;nombre&#x201D;, value: function(x) { return x * x; }});\n