rubyconfua - flying objects less code for richer user interface oleg andreev

Upload: roman-v-babenko

Post on 08-Apr-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    1/151

    flying objectsless code for richer user interface

    Oleg Andreev

    oleganza.tumblr.com

    Ruby BarCampOctober 2010

    Kiev

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    2/151

    part onethe problem

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    3/151

    a typical web app

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    4/151

    a typical web app

    receive

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    5/151

    a typical web app

    receive

    route

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    6/151

    a typical web app

    receive

    route

    talk to db

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    7/151

    a typical web app

    receive

    route

    talk to db

    return html

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    8/151

    receive

    route

    talk to db

    return html

    tools for everything

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    9/151

    receive

    route

    talk to db

    return html

    passenger, mongrel, thin, unicorn

    tools for everything

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    10/151

    receive

    route

    talk to db

    return html

    passenger, mongrel, thin, unicorn

    rack, rails, sinatra

    tools for everything

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    11/151

    receive

    route

    talk to db

    return html

    passenger, mongrel, thin, unicorn

    rack, rails, sinatra

    activerecord, datamapper, sequel

    tools for everything

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    12/151

    receive

    route

    talk to db

    return html

    passenger, mongrel, thin, unicorn

    rack, rails, sinatra

    activerecord, datamapper, sequel

    erb, haml, helpers, builders

    tools for everything

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    13/151

    receive

    route

    talk to db

    return html erb, haml, helpers, builders

    tools for everything

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    14/151

    receive

    route

    talk to db

    return html erb, haml, helpers, builders

    tools for everything

    PHP

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    15/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    16/151

    rails app

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    17/151

    rails app

    index.html.erb

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    18/151

    rails app

    index.html.erb

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    19/151

    rails app

    index.html.erb

    _display.html.erb

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    20/151

    rails app

    index.html.erb

    _display.html.erb

    Bob Dylan

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    21/151

    rails app

    index.html.erb

    _display.html.erb

    Bob Dylan

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    22/151

    rails app

    index.html.erb

    _display.html.erb

    Bob Dylan

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    23/151

    rails app

    index.html.erb

    _display.html.erb

    Bob Dylan

    _wheel.html.erb

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    24/151

    rails app

    index.html.erb

    _display.html.erb

    Bob Dylan

    _wheel.html.erb

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    25/151

    rails app

    index.html.erb

    _display.html.erb

    Bob Dylan

    _wheel.html.erb

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    26/151

    html

    Bob Dylan

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    27/151

    real html

    Bob Dylan

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    28/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    29/151

    $(#display)

    $(#artist .name)

    $(#wheel)$(#button)

    ...

    di

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    30/151

    real html

    Bob Dylan

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    31/151

    var playerController

    var display

    Bob Dylanvar artist

    var wheelControl

    var button

    javascript

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    32/151

    var playerController

    var display

    Bobvar artist

    var wheelControl

    var button

    index.html.erb

    _display.html.erb

    Dylan

    _wheel.html.erb

    ruby javascript

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    33/151

    var playerController

    var display

    Bobvar artist

    var wheelControl

    var button

    index.html.erb

    _display.html.erb

    Dylan

    _wheel.html.erb

    ruby javascripttons of glue code

    ...

    dom:onload...

    $(#content)$(display)

    ...

    $(this)and

    $(that)

    ...

    $(#wheel)

    $(button)...$$$

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    34/151

    var playerController

    var display

    Bobvar artist

    var wheelControl

    var button

    index.html.erb

    _display.html.erb

    Dylan

    _wheel.html.erb

    ruby javascripttons of glue code

    ...

    dom:onload...

    $(#content)$(display)

    ...

    $(this)and

    $(that)

    ...

    $(#wheel)

    $(button)...$$$

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    35/151

    var playerController

    var display

    Bobvar artist

    var wheelControl

    var button

    index.html.erb

    _display.html.erb

    Dylan

    _wheel.html.erb

    ruby javascript

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    36/151

    var playerController

    var display

    Bobvar artist

    var wheelControl

    var button

    Dylan

    ruby javascript

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    37/151

    var playerController

    var display

    Bobvar artist

    var wheelControl

    var button

    Dylan

    ruby javascript

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    38/151

    part twothe framework

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    39/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    40/151

    models,views,controllers

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    41/151

    models,views,controllers

    artist

    track

    playlist

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    42/151

    models,views,controllers

    frame

    display

    wheel

    button

    artist

    track

    playlist

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    43/151

    models,views,controllers

    frame

    display

    wheel

    button

    player controller

    track controller

    artist

    track

    playlist

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    44/151

    models,views,controllers

    frame

    display

    wheel

    button

    player controller

    track controller

    artist

    track

    playlist

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    45/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    46/151

    models,views,controllers

    frame

    display

    wheel

    button

    player controller

    track controller

    artist

    track

    playlist

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    47/151

    models,views,controllers

    frame

    display

    wheel

    button

    player controller

    track controller

    artist

    track

    playlist

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    48/151

    models,views,controllers

    frame

    display

    wheel

    button

    player controller

    track controller

    artist

    track

    playlist

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    49/151

    models,views,controllers

    frame

    display

    wheel

    button

    player controller

    track controller

    artist

    track

    playlist

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    50/151

    models,views,controllers

    frame

    display

    wheel

    button

    player controller

    track controller

    artist

    track

    playlist

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    51/151

    frame

    display

    wheel

    button

    player controller

    track controller

    artist

    track

    playlist

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    52/151

    frame

    display

    wheel

    button

    player controller

    track controller

    artist

    track

    playlist

    create on the server

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    53/151

    frame

    display

    wheel

    button

    player controller

    track controller

    artist

    track

    playlist

    copy to the client

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    54/151

    how?

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    55/151

    ...

    var app = ;

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    56/151

    ...

    var app = ;

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    57/151

    ...

    var app = ;

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    58/151

    ...

    var app = ;

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    59/151

    but it does not work

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    60/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    61/151

    directed graph

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    62/151

    multiple references

    displaytrack controller

    track

    playlist

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    63/151

    cyclic references

    track controller button

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    64/151

    what is the graph?

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    65/151

    two things:

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    66/151

    two things:

    objects

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    67/151

    two things:

    objectsreferences

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    68/151

    in the code:

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    69/151

    in the code:

    create the objects

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    70/151

    in the code:

    create the objectsconnect to each other

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    71/151

    create

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    72/151

    create

    var playerController = new PlayerController();

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    73/151

    create

    var playerController = new PlayerController();

    var trackController = new TrackController();

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    74/151

    create

    var playerController = new PlayerController();

    var trackController = new TrackController();

    var track = new Track();

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    75/151

    create

    var playerController = new PlayerController();

    var trackController = new TrackController();

    var track = new Track();

    var frame = document.getElementById(frame);

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    76/151

    create

    var playerController = new PlayerController();

    var trackController = new TrackController();

    var track = new Track();

    var frame = document.getElementById(frame);

    var display = new DisplayControl();

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    77/151

    create

    var playerController = new PlayerController();

    var trackController = new TrackController();

    var track = new Track();

    var frame = document.getElementById(frame);

    var display = new DisplayControl();

    order is not important

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    78/151

    connect

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    79/151

    connect

    playerController.trackController= trackController;

    playerController.frame = frame;

    playerController.display = display;

    trackController.track= track;

    display.track= track;

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    80/151

    connect

    playerController.trackController= trackController;

    playerController.frame = frame;

    playerController.display = display;

    trackController.track= track;

    display.track= track;

    order is still not important

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    81/151

    constructor initializer

    objects are connected after being created

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    82/151

    initialize after connecting the graph

    create event listeners, display data etc.

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    83/151

    awake

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    84/151

    awake

    playerController.awake();

    trackController.awake();

    display.awake();

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    85/151

    awake

    playerController.awake();

    trackController.awake();

    display.awake();

    order is still not important

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    86/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    87/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    88/151

    when to launch the graph?

    root.didAwakeAll();

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    89/151

    var playerController = new PlayerController();

    var trackController = new TrackController();

    var track = new Track();var frame = document.getElementById(frame);

    var display = new DisplayControl();

    playerController.trackController= trackController;

    playerController.frame = frame;

    playerController.display = display;

    trackController.track= track;display.track= track;

    playerController.awake();

    trackController.awake();

    display.awake();

    playerController.didAwakeAll();

    function() {

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    90/151

    var playerController = new PlayerController();

    var trackController = new TrackController();

    var track = new Track();var frame = document.getElementById(frame);

    var display = new DisplayControl();

    playerController.trackController= trackController;

    playerController.frame = frame;

    playerController.display = display;

    trackController.track= track;display.track= track;

    playerController.awake();

    trackController.awake();

    display.awake();

    playerController.didAwakeAll();

    function() {

    return playerController;

    }

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    91/151

    ...

    jQuery( function( ) {

    window.controller = aFunction();

    } )

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    92/151

    ...

    jQuery( function( ) {

    window.controller = aFunction();

    } )

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    93/151

    ...

    jQuery( function( ) {

    window.controller = aFunction();

    } )

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    94/151

    ...

    jQuery( function( ) {

    window.controller = aFunction();

    } )

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    95/151

    ...

    jQuery( function( ) {

    window.controller = ()();

    } )

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    96/151

    ( ) {

    ller = ()();

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    97/151

    ( ) {

    ller = ()();

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    98/151

    last partthe algorithm

    l ith i t h ll

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    99/151

    algorithm in a nutshell

    l ith i t h ll

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    100/151

    algorithm in a nutshell

    two tables: objects and references

    l ith i t h ll

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    101/151

    algorithm in a nutshell

    two tables: objects and references

    add a root object

    l ith i t h ll

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    102/151

    algorithm in a nutshell

    two tables: objects and references

    add a root object

    add the references (name, value)

    l ith i t h ll

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    103/151

    algorithm in a nutshell

    two tables: objects and references

    add a root object

    add the references (name, value)

    continue recursively

    l ith i t h ll

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    104/151

    algorithm in a nutshell

    two tables: objects and references

    add a root object

    add the references (name, value)

    continue recursively

    skip already added objects

    l ith i t h ll

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    105/151

    algorithm in a nutshell

    two tables: objects and references

    add a root object

    add the references (name, value)

    continue recursively

    skip already added objects

    when done, convert the tables to javascript

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    106/151

    APIapplication programming inspiration

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    107/151

    1988

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    108/151

    1988Jean-Marie HullotNextStep

    InterfaceBuilder

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    109/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    110/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    111/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    112/151

    InterfaceBuilder

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    113/151

    InterfaceBuilder

    InterfaceBuilder

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    114/151

    InterfaceBuilder

    layout

    InterfaceBuilder

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    115/151

    InterfaceBuilder

    layout

    controllers

    InterfaceBuilder

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    116/151

    InterfaceBuilder

    layout

    controllers

    actions

    InterfaceBuilder

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    117/151

    InterfaceBuilder

    layout

    controllers

    actions

    arbitrary objects

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    118/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    119/151

    d l l

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    120/151

    developer.apple.com

    Archives and Serializations Programming Guide

    NSCoding Protocol Reference

    NSCoder

    NSKeyedArchiver

    NSKeyedUnarchiver

    NSCoding

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    121/151

    NSCoding(PlayerController)

    NSCoding

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    122/151

    NSCoding

    - (void)encodeWithCoder:(NSCoder*) coder {

    (PlayerController)

    NSCoding

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    123/151

    NSCoding

    - (void)encodeWithCoder:(NSCoder*) coder {

    [coder encodeObject:playlistforKey:@"playlist"];

    (PlayerController)

    NSCoding

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    124/151

    NSCoding

    - (void)encodeWithCoder:(NSCoder*) coder {

    [coder encodeObject:playlistforKey:@"playlist"];

    [coder encodeObject:trackControllerforKey:@"trackController"];

    (PlayerController)

    NSCoding

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    125/151

    NSCoding

    - (void)encodeWithCoder:(NSCoder*) coder {

    [coder encodeObject:playlistforKey:@"playlist"];

    [coder encodeObject:trackControllerforKey:@"trackController"];

    [coder encodeObject:frameforKey:@"frame"];

    (PlayerController)

    NSCoding

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    126/151

    NSCoding

    - (void)encodeWithCoder:(NSCoder*) coder {

    [coder encodeObject:playlistforKey:@"playlist"];

    [coder encodeObject:trackControllerforKey:@"trackController"];

    [coder encodeObject:frameforKey:@"frame"];

    [coder encodeObject:displayforKey:@"display"];

    (PlayerController)

    NSCoding

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    127/151

    NSCoding

    - (void)encodeWithCoder:(NSCoder*) coder {

    [coder encodeObject:playlistforKey:@"playlist"];

    [coder encodeObject:trackControllerforKey:@"trackController"];

    [coder encodeObject:frameforKey:@"frame"];

    [coder encodeObject:displayforKey:@"display"];

    }

    (PlayerController)

    NSCoding in Ruby

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    128/151

    NSCoding in Ruby

    def encode_with_coder(coder)

    coder.encode_object_for_key(playlist, "playlist")

    coder.encode_object_for_key(trackController, "trackController")

    coder.encode_object_for_key(frame, "frame")

    coder.encode_object_for_key(display, "display")

    end

    (PlayerController)

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    129/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    130/151

    coder = JSCoder.new

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    131/151

    coder = JSCoder.new

    coder.root_object = controller

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    132/151

    coder = JSCoder.new

    coder.root_object = controller

    coder.encode

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    133/151

    coder = JSCoder.new

    coder.root_object = controller

    coder.encode

    window.controller = ()()

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    134/151

    coder.rb

    github.com/oleganza/coder

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    135/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    136/151

    ruby object js object

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    137/151

    ruby object js object

    ruby class js prototype

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    138/151

    TrackController = Class.create({

    awake: function() {this.button.addEventListener(

    "click", this.onClick.bind(this));

    },onClick: function() {

    this.track.togglePlayPause();

    this.display.update();

    }

    });

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    139/151

    TrackController = Class.create({

    awake: function() {this.button.addEventListener(

    "click", this.onClick.bind(this));

    },onClick: function() {

    this.track.togglePlayPause();

    this.display.update();

    }

    });

    why is it cool?

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    140/151

    why is it cool?

    why is it cool?

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    141/151

    why is it cool?

    automatically assigned properties

    why is it cool?

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    142/151

    why is it cool?

    automatically assigned properties

    no dependency on global state

    why is it cool?

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    143/151

    why is it cool?

    automatically assigned properties

    no dependency on global state

    no time dependency

    why is it cool?

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    144/151

    why is it cool?

    automatically assigned properties

    no dependency on global state

    no time dependency

    highly recyclable (refactoring-friendly)

    whats next

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    145/151

    what s next

    whats next

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    146/151

    what s next

    object-oriented views

    whats next

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    147/151

    what s next

    object-oriented views

    ubiquitous wysiwyg editing

    whats next

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    148/151

    what s next

    object-oriented views

    ubiquitous wysiwyg editing

    remote code editing

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    149/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    150/151

  • 8/7/2019 RubyConfUA - Flying objects less code for richer user interface Oleg Andreev

    151/151

    thank you

    github.com/oleganza/coder