SlideShare a Scribd company logo
1 of 251
Download to read offline
EtherCalc
Multiplayer
Spreadsheet
 ethercalc.tw
Personal Opinions
Personal Opinions




(With Infotisements)
Time Limited
 Just Stories
  No Coding
Time Limited
 Just Stories
       Ideas
  No Coding
ethercalc.org

‣ npm install -g ethercalc

‣ ethercalc
 Please connect to: http://0:8000/


              nodejs.org/#download
A.O.S.A., 2011


aosabook.org


 aosa.tw
History
VisiCalc, 1979




Dan Bricklin
Harvard, 1977
Harvard, 1977
Harvard, 1977
Harvard, 1977
Harvard, 1977
Original Vision
Original Vision




       Alto
    Workstation
Original Vision




                 Alto
Calculator-   Workstation
  Mouse
Original Vision




                 Alto
Calculator-   Workstation   Head-mounted
  Mouse                        Display
Original Vision




                 Alto
Calculator-   Workstation   Head-mounted
  Mouse                        Display
EtherCalc: Multiplayer Spreadsheet
EtherCalc: Multiplayer Spreadsheet
=SUM( )   0
10

     =SUM( )   10
                0
10       20

     =SUM( )   30
               10
                0
10       20    30

     =SUM( )        60
                    30
                    10
                     0
10       20    30

     =SUM( )        60
                    30
                    10
                     0
1977 → 1978
1977 → 1978
1977 → 1978



       +



  Integer BASIC
1978 → 1979
1978 → 1979
  10      20   30
  =SUM(        )    60
1978 → 1979
    A       B    C    D
1   10      20   30

2   =SUM(        )    60
1978 → 1979
    A     B     C    D
1   10    20    30

2   =SUM(A1,B1,C1)   60
1978 → 1979
    A     B     C    D
1   10    20    30

2   =SUM(A1,B1,C1)   60




                     Bob & Dan
1978 → 1979
           A     B     C    D
      1    10    20    30

      2    =SUM(A1,B1,C1)   60
‣ Dan prototypes in BASIC



                            Bob & Dan
1978 → 1979
           A     B     C    D
      1    10    20    30

      2    =SUM(A1,B1,C1)   60
‣ Dan prototypes in BASIC
‣ Bob codes in 6502 ASM


                            Bob & Dan
1978 → 1979
            A     B     C     D
       1   10     20    30

       2    =SUM(A1,B1,C1)    60
‣ Dan prototypes in BASIC
‣ Bob codes in 6502 ASM
‣ 700,000 copies in 6 years
                              Bob & Dan
1978 → 1979
            A     B     C     D
       1   10     20    30

       2    =SUM(A1,B1,C1)    60
‣ Dan prototypes in BASIC
‣ Bob codes in 6502 ASM
‣ 700,000 copies in 6 years
‣ The !rst “Killer App”       Bob & Dan
1981
EtherCalc: Multiplayer Spreadsheet
EtherCalc: Multiplayer Spreadsheet
EtherCalc: Multiplayer Spreadsheet
EtherCalc: Multiplayer Spreadsheet
EtherCalc: Multiplayer Spreadsheet
20 years passed
20 years passed
20 years passed
20 years passed
20 years passed



Nothing changed
EtherCalc: Multiplayer Spreadsheet
“Can’t open”
“Can’t open”

“Garbled”
“Can’t open”

“Garbled”

“Virus!”
EtherCalc: Multiplayer Spreadsheet
Wikipedia, 2001
Wikipedia, 2001
Wikipedia, 2001
wikiCalc, 2005
wikiCalc, 2005
✓ Plain text, HTML & Wiki syntax
wikiCalc, 2005
✓ Plain text, HTML & Wiki syntax
✓ References cells on other servers
wikiCalc, 2005
✓ Plain text, HTML & Wiki syntax
✓ References cells on other servers
✓ Keeps all operations for auditing
wikiCalc, 2005
✓ Plain text, HTML & Wiki syntax
✓ References cells on other servers
✓ Keeps all operations for auditing
✓ Revert to any revision
wikiCalc, 2005
✓ Plain text, HTML & Wiki syntax
✓ References cells on other servers
✓ Keeps all operations for auditing
✓ Revert to any revision
✓ Open Source! (GPLv2)
wikiCalc.pl
wikiCalc.pl
      網站
      Sites
./wkcdata/sites/Foo
 ./wkcdata/sites/Bar
  ./wkcdata/sites/Baz
wikiCalc.pl
      網站
      Sites             頁面
                        Pages
./wkcdata/sites/Foo
                         XXX
 ./wkcdata/sites/Bar
  ./wkcdata/sites/Baz    YYY
                         ZZZ
wikiCalc.pl
      網站
      Sites             頁面
                        Pages
./wkcdata/sites/Foo
                         XXX
 ./wkcdata/sites/Bar
  ./wkcdata/sites/Baz    YYY
                         ZZZ


               Cells
               儲存格
wikiCalc.pl
      網站
      Sites             頁面
                        Pages
./wkcdata/sites/Foo
                         XXX
 ./wkcdata/sites/Bar
  ./wkcdata/sites/Baz    YYY
                         ZZZ


               Cells
               儲存格
    A1: 100
wikiCalc.pl
      網站
      Sites             頁面
                        Pages
./wkcdata/sites/Foo
                         XXX
 ./wkcdata/sites/Bar
  ./wkcdata/sites/Baz    YYY
                         ZZZ


               Cells
               儲存格
    A1: 100
    A2: =A1*2
wikiCalc.pl
      網站
      Sites               頁面
                          Pages
./wkcdata/sites/Foo
                           XXX
 ./wkcdata/sites/Bar
  ./wkcdata/sites/Baz      YYY
                           ZZZ


               Cells
               儲存格
    A1: 100 B1: =XXX!C1
    A2: =A1*2
wikiCalc.pl
      網站
      Sites               頁面
                          Pages
./wkcdata/sites/Foo
                           XXX
 ./wkcdata/sites/Bar
  ./wkcdata/sites/Baz      YYY
                           ZZZ


               Cells
               儲存格
    A1: 100 B1: =XXX!C1
    A2: =A1*2
wikiCalc.pl
      網站
      Sites                 頁面
                            Pages
./wkcdata/sites/Foo
                             XXX
 ./wkcdata/sites/Bar
  ./wkcdata/sites/Baz        YYY
                             ZZZ


               Cells
               儲存格
    A1: 100 B1: =XXX!C1
    A2: =A1*2 B2: =YYY!D2
wikiCalc.pl
      網站
      Sites                 頁面
                            Pages
./wkcdata/sites/Foo
                             XXX
 ./wkcdata/sites/Bar
  ./wkcdata/sites/Baz        YYY
                             ZZZ


               Cells
               儲存格
    A1: 100 B1: =XXX!C1
    A2: =A1*2 B2: =YYY!D2
wikiCalc.pl
      網站
      Sites                 頁面
                            Pages
./wkcdata/sites/Foo
                             XXX
 ./wkcdata/sites/Bar
  ./wkcdata/sites/Baz        YYY
                             ZZZ


               Cells
               儲存格
    A1: 100 B1: =XXX!C1
    A2: =A1*2 B2: =YYY!D2
                             Cross-page
                             Reference
wikiCalc Edit Flow
wikiCalc Edit Flow
     A1: 100
     A2: =A1*2
wikiCalc Edit Flow
     A1: 100
     A2: =A1*2
wikiCalc Edit Flow
       A1: 100
       A2: =A1*2


    POST /
    ajaxsetcell=host:page:A1:300
                                   wikicalc.pl
wikiCalc Edit Flow
       A1: 100
       A2: =A1*2


    POST /
    ajaxsetcell=host:page:A1:300
                                      wikicalc.pl
          200 OK
          <?xml version="1.0"?>
          <root><![CDATA[
          A1:v:300:300:right:1:1::
          A2:f:600:A1*2:right:1:1::
          ]]></root>
“Loading…”
“Loading…”
“Loading…”




“C100k” Problem
“Loading…”




“C100k” Problem
EtherCalc: Multiplayer Spreadsheet
Undo
Undo
Redo
SocialCalc, 2006



Dan Bricklin   Ross Mayfield
Design Goals
Design Goals
‣ Rewrite calc engine in JS
Design Goals
‣ Rewrite calc engine in JS
‣ Real-time responsive editor
Design Goals
‣ Rewrite calc engine in JS
‣ Real-time responsive editor
‣ Supports 100,000+ cells
Design Goals
‣ Rewrite calc engine in JS
‣ Real-time responsive editor
‣ Supports 100,000+ cells
‣ Works on all browsers (IE6+)
Design Goals
‣ Rewrite calc engine in JS
‣ Real-time responsive editor
‣ Supports 100,000+ cells
‣ Works on all browsers (IE6+)
‣ Client-side log & undo/redo
Architecture
Architecture
SocialCalc.js




HTTP Server
Architecture
      SocialCalc.js


GET



      HTTP Server
Architecture
      SocialCalc.js


GET



      HTTP Server
Architecture
   SocialCalc.js


GET GET



   HTTP Server
Architecture
   SocialCalc.js


GET GET
    ($)



   HTTP Server
Architecture
   SocialCalc.js

               PUT
GET GET
    ($)



   HTTP Server
Architecture
   SocialCalc.js

               PUT
GET GET
    ($)



   HTTP Server
Command Pattern
Command Pattern
set A1 value n 42
Command Pattern
set A1 value n 42
set A2 formula A1*2
Command Pattern
set A1 value n 42
set A2 formula A1*2
merge A1:B2
cut A3
paste A4
sort A1:B9 A up B down
set sheet defaultcolor blue
...
Command Pattern
 set A1 value n 42
 set A2 formula A1*2
‣ Async recalc loop
Command Pattern
 set A1 value n 42
 set A2 formula A1*2
‣ Async recalc loop
‣ Visible-only redraw
Command Pattern
 set A1 value n 42
 set A2 formula A1*2
‣ Async recalc loop
‣ Visible-only redraw
‣ Unlimited undo/redo
Command Pattern
 set A1 value n 42
 set A2 formula A1*2
‣ Async recalc loop
‣ Visible-only redraw
‣ Unlimited undo/redo
‣ UI stays responsive
Command Pattern
 set A1 value n 42
 set A2 formula A1*2
‣ Async recalc loop
‣ Visible-only redraw
‣ Unlimited undo/redo
‣ UI stays responsive
“Social”Calc
“Social”Calc
“Social”Calc




 Comment, Like,
   Tag, Share, Embed...
Objects   Relations
Objects   Relations
Objects   Relations
EtherCalc: Multiplayer Spreadsheet
Good !rst
Pro!ts later
Common Public
Attribution License
Common Public
      Attribution License
  ⓐ
BSD, MIT
Common Public
      Attribution License
              ©
  ⓐ
BSD, MIT   LGPL, MPL
Common Public
      Attribution License
              ©        ++©
  ⓐ
BSD, MIT   LGPL, MPL    GPL
Common Public
      Attribution License
              ©                                  ++©
  ⓐ
BSD, MIT   LGPL, MPL                                  GPL
               “ASP
 loophole”
Common Public
      Attribution License
              ©                                  ++©
  ⓐ
BSD, MIT   LGPL, MPL                                  GPL
               “ASP
 loophole”

                                             Affero GPL
Common Public
      Attribution License
              ©                                  ++©
  ⓐ
BSD, MIT   LGPL, MPL                                  GPL
               “ASP
 loophole”

             CPAL                            Affero GPL
Common Public
      Attribution License
              ©                                  ++©
  ⓐ
BSD, MIT   LGPL, MPL                                  GPL
               “ASP
 loophole”

             CPAL                            Affero GPL
Common Public
      Attribution License
              ©                                  ++©
  ⓐ
BSD, MIT   LGPL, MPL                                  GPL
               “ASP
 loophole”

             CPAL                            Affero GPL
Common Public
      Attribution License
              ©                                  ++©
  ⓐ
BSD, MIT   LGPL, MPL                                  GPL
               “ASP
 loophole”

             CPAL                            Affero GPL
Sheetnode, 2008




Karim Ratib
Sheetnode, 2008
              Views + Fields + CCK




Karim Ratib
Sheetnode, 2008
              Views + Fields + CCK



                  SocialCalc.js


Karim Ratib
Sheetnode, 2008
              Views + Fields + CCK



                  SocialCalc.js


Karim Ratib
Sheetnode, 2008
              Views + Fields + CCK



                  SocialCalc.js


Karim Ratib
Sheetnode, 2008
              Views + Fields + CCK



                  SocialCalc.js


Karim Ratib
OLPC, 2008
OLPC, 2008




Luke Closs  Dan
EtherCalc: Multiplayer Spreadsheet
EtherCalc: Multiplayer Spreadsheet
Mesh
P2P
EtherCalc: Multiplayer Spreadsheet
Manusheel
  Gupta




Vijit Singh
SocialCalcActivity.py
                  Gecko/XPCOM
                 SocialCalc.js
                    XoCom.js

                    XoCom.py



Manusheel
  Gupta




Vijit Singh
SocialCalcActivity.py
                                      Gecko/XPCOM
                                     SocialCalc.js
                                        XoCom.js

              set A1 value n 42         XoCom.py



Manusheel
  Gupta




Vijit Singh
SocialCalcActivity.py
                                      Gecko/XPCOM
                                     SocialCalc.js
                                        XoCom.js

              set A1 value n 42         XoCom.py

                                      D-Bus + Telepathy

Manusheel
  Gupta




Vijit Singh
SocialCalcActivity.py
                                      Gecko/XPCOM
                                     SocialCalc.js
                                        XoCom.js

              set A1 value n 42         XoCom.py

                                      D-Bus + Telepathy
                            OLPC Mesh
Manusheel
  Gupta                     Broadcast
                             網絡廣播




Vijit Singh
SocialCalcActivity.py
                                            Gecko/XPCOM
                                           SocialCalc.js
                                              XoCom.js

              set A1 value n 42               XoCom.py

                                            D-Bus + Telepathy
                               OLPC Mesh
Manusheel
  Gupta                        Broadcast
                                網絡廣播
                    D-Bus + Telepathy


                       Gecko/XPCOM
                      SocialCalc.js
                         XoCom.js

                         XoCom.py
Vijit Singh        SocialCalcActivity.py
SocialCalcActivity.py
                                            Gecko/XPCOM
                                           SocialCalc.js
                                              XoCom.js

              set A1 value n 42               XoCom.py

                                            D-Bus + Telepathy
                               OLPC Mesh
Manusheel
  Gupta                        Broadcast
                                網絡廣播
                    D-Bus + Telepathy


                       Gecko/XPCOM
                                              set A1 value n 42
                      SocialCalc.js
                         XoCom.js

                         XoCom.py
Vijit Singh        SocialCalcActivity.py
Great, but...
Great, but...
‣ Must log on same time
Great, but...
‣ Must log on same time
‣ Can’t replay missed logs
Great, but...
‣ Must log on same time
‣ Can’t replay missed logs
‣ Race condition on cells
Great, but...
‣ Must log on same time
‣ Can’t replay missed logs
‣ Race condition on cells
‣ OLPC-specific code!
YAPC::Tiny, 2009


     跳格
  Multiplayer
  SocialCalc
           二零零九 唐鳳
                字
           中英雙宇有字版
EV/AnyEvent
Tatsumaki EV/AnyEvent




 @miyagawa
Tatsumaki EV/AnyEvent
        Web::Hippie




 @miyagawa   @clkao
Tatsumaki EV/AnyEvent
        Web::Hippie
                Feersum


 @miyagawa   @clkao   @stash
WebSocket Channels
      multiserver.pl

       Web::Hippie
          Plack
         Feersum
         EV/libev
WebSocket Channels
  SpreadsheetControl
                        multiserver.pl

                         Web::Hippie
ScheduleScheetCommand
 set A1 value n 2046        Plack
   RenderSheet
                           Feersum
                           EV/libev
WebSocket Channels
  SpreadsheetControl
                              multiserver.pl

                               Web::Hippie
ScheduleScheetCommand
 set A1 value n 2046              Plack
   RenderSheet
                       Send      Feersum
                                 EV/libev
WebSocket Channels
  SpreadsheetControl
                              multiserver.pl


ScheduleScheetCommand
                               Web::Hippie     Relay
 set A1 value n 2046              Plack
   RenderSheet
                       Send      Feersum
                                 EV/libev
WebSocket Channels
  SpreadsheetControl
                              multiserver.pl


ScheduleScheetCommand
                               Web::Hippie     Relay
 set A1 value n 2046              Plack
                                               ScheduleScheetCommand
   RenderSheet
                       Send      Feersum         set A1 value n 2046
                                                   (isRemote = true)
                                 EV/libev
                                                     RenderSheet
New Features
New Features
✓ Fetch logs on join
New Features
✓ Fetch logs on join
✓ Reconnection recovery
New Features
✓ Fetch logs on join
✓ Reconnection recovery
✓ Show peer cursors
New Features
✓ Fetch logs on join
✓ Reconnection recovery
✓ Show peer cursors
✓ Cross-browser support!
New Features
✓ Fetch logs on join
✓ Reconnection recovery
✓ Show peer cursors
✓ Cross-browser support!
Much better, but...
Much better, but...
‣ Which peer’s log to take?
Much better, but...
‣ Which peer’s log to take?
‣ What if everyone leaves?
Much better, but...
‣ Which peer’s log to take?
‣ What if everyone leaves?
‣ Who would keep the logs?
Much better, but...
‣ Which peer’s log to take?
‣ What if everyone leaves?
‣ Who would keep the logs?
‣ Replay 1,000+ commands?
Much better, but...
‣ Which peer’s log to take?
‣ What if everyone leaves?
‣ Who would keep the logs?
‣ Replay 1,000+ commands?
EtherCalc: Multiplayer Spreadsheet
Undo
Undo
Redo?
YAPC::NA, 2006
YAPC::NA, 2006
“I think, but I cannot prove, that by
the next year JavaScript 2.0 will
bootstrap itself, complete self
hosting, compile back to JavaScript,
and replace Ruby as the Next Big
Thing in all environments. ”
YAPC::NA, 2006
YAPC::NA, 2006
“JavaScript will become the common
backend for all dynamic languages,
and so you can write Perl to run in the
browser, on the server, and inside
databases, all with the same set of
development tools. ”
YAPC::NA, 2006
YAPC::NA, 2006
“Because, as we all know,
worse is better, so the worst
scripting language is doomed
to become the best.”
YAPC::NA, 2006
“Because, as we all know,
worse is better, so the worst
scripting language is doomed
to become the best.”

        劣=夯
EtherCalc: Multiplayer Spreadsheet
EtherCalc: Multiplayer Spreadsheet
EtherCalc: Multiplayer Spreadsheet
JavaScript: Good Part Only
CoeeScript: HalfPart Noise
 JavaScript: Good the Only

  cs = (js) = js/2


 Jeremy
Ashkenas
CoeeScript: HalfPart Noise
 JavaScript: Good the Only

  cs = (js) = js/2


 Jeremy
Ashkenas
CoeeScript: HalfPart Noise
 JavaScript: Good the Only

  cs = (js) = js/2

           “Original JavaScript: 22k LOC.
            Ported to CoffeeScript: 5k LOC.
            {async, jsdom, zappa, optimist etc}++”
 Jeremy
Ashkenas
EtherCalc: Multiplayer Spreadsheet
{x,y} = @offset
{x,y} = @offset
var _ref = this.offset;
{x,y} = @offset
var _ref = this.offset;
var x = _ref.x;
{x,y} = @offset
var _ref = this.offset;
var x = _ref.x;
var y = _ref.y;
{x,y} = @offset
var _ref = this.offset;
var x = _ref.x;
var y = _ref.y;

          js2coffee.org
EtherCalc: Multiplayer Spreadsheet
EtherCalc: Multiplayer Spreadsheet
EtherCalc: Multiplayer Spreadsheet
Function::ᵒ = (fun) -
Function::ᵒ = (fun) -
  (arg) = @ fun arg
Function::ᵒ = (fun) -
  (arg) = @ fun arg

f = (x) = x * 2
Function::ᵒ = (fun) -
  (arg) = @ fun arg

f = (x) = x * 2
g = (x) = x * 3
Function::ᵒ = (fun) -
  (arg) = @ fun arg

f = (x) = x * 2
g = (x) = x * 3
h = f .ᵒ g
Function::ᵒ = (fun) -
  (arg) = @ fun arg

f = (x) = x * 2
g = (x) = x * 3
h = f .ᵒ g

h 100 # 600
Function::ᵒ = (fun) -
  (arg) = @ fun arg

f = (x) = x * 2
g = (x) = x * 3
h = f .ᵒ g

h 100 # 600
Zappa: Lazy Node.js




          zappajs.org
Zappa: Lazy Node.js



Maurice
Machado

           zappajs.org
Zappa: Lazy Node.js
          “If you can describe it
          in 495 characters,
          why on earth should
Maurice
          it take 879?”
Machado

                 zappajs.org
require('zappa') -
  @view layout: -
    html = body = @body

  @get '/': - @render 'index'

  @view index: - for name, value of {
    wiki: Wiki to HTML
    html: HTML to Wiki
  }
    form method: 'post', =
      p = textarea {name}
      p = input {type: 'submit', value}
require('zappa') -
  @view layout: -
    html = body = @body

  @get '/': - @render 'index'

  @view index: - for name, value of {
    wiki: Wiki to HTML
    html: HTML to Wiki
  }
    form method: 'post', =
      p = textarea {name}
      p = input {type: 'submit', value}
require('zappa') -
@post '/': - -
  @view layout:
  if @data.wiki? @body
    html = body =
    @send w2h @data.wiki
 @get '/': - @render 'index'
 else if @data.html?
    @send h2w @data.html
 @view index: - for name, value of {
 else redirect '/'
   wiki: Wiki to HTML
     html: HTML to Wiki
 }
     form method: 'post', =
       p = textarea {name}
       p = input {type: 'submit', value}
COSCUP, 2011
COSCUP, 2011
COSCUP, 2011




hack
 hack
 hack
 ...
COSCUP, 2011




hack
 hack
 hack
 ...
EtherCalc Edit Flow
EtherCalc Edit Flow
      main.coffee
 sc.coffee
                Socket.io
SocialCalc.js
                Express
                Node.js
 db.coffee       EV/libuv
  redis.js       Zappa
EtherCalc Edit Flow
      main.coffee
 sc.coffee
                Socket.io
SocialCalc.js
                Express
                Node.js
 db.coffee       EV/libuv
  redis.js       Zappa



  Redis
(optional)
EtherCalc Edit Flow
      main.coffee
 sc.coffee
                Socket.io
SocialCalc.js
                Express
                Node.js
 db.coffee       EV/libuv    player.coffee
  redis.js       Zappa       SocialCalc.js




  Redis
(optional)
EtherCalc Edit Flow
      main.coffee            MULTI
 sc.coffee
                              GET snapshot
                Socket.io     LRANGE log
SocialCalc.js               EXEC
                Express
                Node.js
 db.coffee       EV/libuv     player.coffee
  redis.js       Zappa        SocialCalc.js




  Redis
(optional)
EtherCalc Edit Flow
      main.coffee            MULTI
 sc.coffee
                              GET snapshot
                Socket.io     LRANGE log
SocialCalc.js               EXEC
                Express
                Node.js
 db.coffee       EV/libuv     player.coffee
  redis.js       Zappa        SocialCalc.js



                            RPUSH log cmd
  Redis
(optional)
EtherCalc Edit Flow
      main.coffee            MULTI
 sc.coffee
                              GET snapshot
                Socket.io     LRANGE log
SocialCalc.js               EXEC
                Express
                Node.js
 db.coffee       EV/libuv     player.coffee
  redis.js       Zappa        SocialCalc.js



                            RPUSH log cmd
  Redis
(optional)
EtherCalc Edit Flow
      main.coffee            MULTI
 sc.coffee
                              GET snapshot
                Socket.io     LRANGE log
SocialCalc.js               EXEC
                Express
                Node.js
 db.coffee       EV/libuv     player.coffee
  redis.js       Zappa        SocialCalc.js



                            RPUSH log cmd
  Redis
(optional)
EtherCalc Edit Flow
      main.coffee            MULTI
 sc.coffee
                              GET snapshot
                Socket.io     LRANGE log
SocialCalc.js               EXEC
                Express
                Node.js
 db.coffee       EV/libuv     player.coffee
  redis.js       Zappa        SocialCalc.js


                 MULTI     RPUSH log cmd
  Redis            DEL log
(optional)         SET snapshot snapshot
                 EXEC
Recalc Subscription
Recalc Subscription
Recalc Subscription
Recalc Subscription
         ask.log: Foo
Recalc Subscription
              ask.log: Foo

   log: Foo,snapshot,log
Recalc Subscription
              ask.log: Foo

   log: Foo,snapshot,log

           execute: set A1
            formula Bar!B2
Recalc Subscription
              ask.log: Foo

   log: Foo,snapshot,log

           execute: set A1
            formula Bar!B2
           ask.recalc: Bar
Recalc Subscription
              ask.log: Foo

   log: Foo,snapshot,log

           execute: set A1
            formula Bar!B2
           ask.recalc: Bar

   recalc: Bar,snapshot
Recalc Subscription
              ask.log: Foo

   log: Foo,snapshot,log

           execute: set A1
            formula Bar!B2
           ask.recalc: Bar

   recalc: Bar,snapshot

   recalc: Bar,snapshot
PaaS Deployment
PaaS Deployment
          stackato.yml
          app.js
PaaS Deployment
          stackato.yml
          app.js

          dotcloud.yml
          server.js
PaaS Deployment
          stackato.yml
          app.js

          dotcloud.yml
          server.js

          server.js

More Related Content

Similar to EtherCalc: Multiplayer Spreadsheet

Understanding git
Understanding gitUnderstanding git
Understanding gitAvik Das
 
Functional Design Explained (David Sankel CppCon 2015)
Functional Design Explained (David Sankel CppCon 2015)Functional Design Explained (David Sankel CppCon 2015)
Functional Design Explained (David Sankel CppCon 2015)sankeld
 
Operationalizing yara
Operationalizing yaraOperationalizing yara
Operationalizing yaracr8917
 
InfluxDB IOx Tech Talks: A Rusty Introduction to Apache Arrow and How it App...
InfluxDB IOx Tech Talks:  A Rusty Introduction to Apache Arrow and How it App...InfluxDB IOx Tech Talks:  A Rusty Introduction to Apache Arrow and How it App...
InfluxDB IOx Tech Talks: A Rusty Introduction to Apache Arrow and How it App...InfluxData
 
11-PLDs.pdf
11-PLDs.pdf11-PLDs.pdf
11-PLDs.pdfKoayFT
 
Real time, streaming advanced analytics, approximations, and recommendations ...
Real time, streaming advanced analytics, approximations, and recommendations ...Real time, streaming advanced analytics, approximations, and recommendations ...
Real time, streaming advanced analytics, approximations, and recommendations ...DataWorks Summit/Hadoop Summit
 
20200812 Cbject Detection with OpenCV and CNN
20200812 Cbject Detection with OpenCV and CNN20200812 Cbject Detection with OpenCV and CNN
20200812 Cbject Detection with OpenCV and CNNKenichi Sonoda
 
Boston Spark Meetup May 24, 2016
Boston Spark Meetup May 24, 2016Boston Spark Meetup May 24, 2016
Boston Spark Meetup May 24, 2016Chris Fregly
 
Tecnicas avanzadas con CSS3
Tecnicas avanzadas con CSS3Tecnicas avanzadas con CSS3
Tecnicas avanzadas con CSS3Marta Armada
 
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~耕二 阿部
 
Speeding Up Distributed Machine Learning Using Codes
Speeding Up Distributed Machine Learning Using CodesSpeeding Up Distributed Machine Learning Using Codes
Speeding Up Distributed Machine Learning Using CodesNAVER Engineering
 
Windows kernel debugging workshop in florida
Windows kernel debugging   workshop in floridaWindows kernel debugging   workshop in florida
Windows kernel debugging workshop in floridaSisimon Soman
 
Bucketing 2.0: Improve Spark SQL Performance by Removing Shuffle
Bucketing 2.0: Improve Spark SQL Performance by Removing ShuffleBucketing 2.0: Improve Spark SQL Performance by Removing Shuffle
Bucketing 2.0: Improve Spark SQL Performance by Removing ShuffleDatabricks
 
KubeBoot - Spring Boot deployment on Kubernetes
KubeBoot - Spring Boot deployment on KubernetesKubeBoot - Spring Boot deployment on Kubernetes
KubeBoot - Spring Boot deployment on KubernetesAlex Soto
 
EWD 3 Training Course Part 21: Persistent JavaScript Objects
EWD 3 Training Course Part 21: Persistent JavaScript ObjectsEWD 3 Training Course Part 21: Persistent JavaScript Objects
EWD 3 Training Course Part 21: Persistent JavaScript ObjectsRob Tweed
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVMJohn Lee
 
芸術・地域情報LOD動向
芸術・地域情報LOD動向芸術・地域情報LOD動向
芸術・地域情報LOD動向Fumihiro Kato
 

Similar to EtherCalc: Multiplayer Spreadsheet (20)

Understanding git
Understanding gitUnderstanding git
Understanding git
 
Functional Design Explained (David Sankel CppCon 2015)
Functional Design Explained (David Sankel CppCon 2015)Functional Design Explained (David Sankel CppCon 2015)
Functional Design Explained (David Sankel CppCon 2015)
 
IPv6の闇とPHP
IPv6の闇とPHPIPv6の闇とPHP
IPv6の闇とPHP
 
Operationalizing yara
Operationalizing yaraOperationalizing yara
Operationalizing yara
 
InfluxDB IOx Tech Talks: A Rusty Introduction to Apache Arrow and How it App...
InfluxDB IOx Tech Talks:  A Rusty Introduction to Apache Arrow and How it App...InfluxDB IOx Tech Talks:  A Rusty Introduction to Apache Arrow and How it App...
InfluxDB IOx Tech Talks: A Rusty Introduction to Apache Arrow and How it App...
 
11-PLDs.pdf
11-PLDs.pdf11-PLDs.pdf
11-PLDs.pdf
 
Real time, streaming advanced analytics, approximations, and recommendations ...
Real time, streaming advanced analytics, approximations, and recommendations ...Real time, streaming advanced analytics, approximations, and recommendations ...
Real time, streaming advanced analytics, approximations, and recommendations ...
 
20200812 Cbject Detection with OpenCV and CNN
20200812 Cbject Detection with OpenCV and CNN20200812 Cbject Detection with OpenCV and CNN
20200812 Cbject Detection with OpenCV and CNN
 
Boston Spark Meetup May 24, 2016
Boston Spark Meetup May 24, 2016Boston Spark Meetup May 24, 2016
Boston Spark Meetup May 24, 2016
 
unit 5.ppt
unit 5.pptunit 5.ppt
unit 5.ppt
 
Tecnicas avanzadas con CSS3
Tecnicas avanzadas con CSS3Tecnicas avanzadas con CSS3
Tecnicas avanzadas con CSS3
 
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
 
Speeding Up Distributed Machine Learning Using Codes
Speeding Up Distributed Machine Learning Using CodesSpeeding Up Distributed Machine Learning Using Codes
Speeding Up Distributed Machine Learning Using Codes
 
Windows kernel debugging workshop in florida
Windows kernel debugging   workshop in floridaWindows kernel debugging   workshop in florida
Windows kernel debugging workshop in florida
 
Bucketing 2.0: Improve Spark SQL Performance by Removing Shuffle
Bucketing 2.0: Improve Spark SQL Performance by Removing ShuffleBucketing 2.0: Improve Spark SQL Performance by Removing Shuffle
Bucketing 2.0: Improve Spark SQL Performance by Removing Shuffle
 
KubeBoot - Spring Boot deployment on Kubernetes
KubeBoot - Spring Boot deployment on KubernetesKubeBoot - Spring Boot deployment on Kubernetes
KubeBoot - Spring Boot deployment on Kubernetes
 
EWD 3 Training Course Part 21: Persistent JavaScript Objects
EWD 3 Training Course Part 21: Persistent JavaScript ObjectsEWD 3 Training Course Part 21: Persistent JavaScript Objects
EWD 3 Training Course Part 21: Persistent JavaScript Objects
 
PAL
PALPAL
PAL
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVM
 
芸術・地域情報LOD動向
芸術・地域情報LOD動向芸術・地域情報LOD動向
芸術・地域情報LOD動向
 

More from Audrey Tang

Social Innovation & Digital Transformation
Social Innovation & Digital TransformationSocial Innovation & Digital Transformation
Social Innovation & Digital TransformationAudrey Tang
 
Stories from the Future of Democracy
Stories from the Future of DemocracyStories from the Future of Democracy
Stories from the Future of DemocracyAudrey Tang
 
TEDxTaipei 2017: 社會企業
TEDxTaipei 2017: 社會企業TEDxTaipei 2017: 社會企業
TEDxTaipei 2017: 社會企業Audrey Tang
 
唐鳳政務委員業務工作報告
唐鳳政務委員業務工作報告唐鳳政務委員業務工作報告
唐鳳政務委員業務工作報告Audrey Tang
 
資訊服務採購契約範本 修正明細對照 1060713
資訊服務採購契約範本 修正明細對照 1060713資訊服務採購契約範本 修正明細對照 1060713
資訊服務採購契約範本 修正明細對照 1060713Audrey Tang
 
服務型智慧政府推動計畫 v9
服務型智慧政府推動計畫 v9服務型智慧政府推動計畫 v9
服務型智慧政府推動計畫 v9Audrey Tang
 
共通性應用程式介面規範
共通性應用程式介面規範共通性應用程式介面規範
共通性應用程式介面規範Audrey Tang
 
打造一站式的防救災資訊整合平臺
打造一站式的防救災資訊整合平臺打造一站式的防救災資訊整合平臺
打造一站式的防救災資訊整合平臺Audrey Tang
 
開放政府聯絡人第11次協作會議簡報
開放政府聯絡人第11次協作會議簡報開放政府聯絡人第11次協作會議簡報
開放政府聯絡人第11次協作會議簡報Audrey Tang
 
第7次協作會議會後會簡報v6.0
第7次協作會議會後會簡報v6.0第7次協作會議會後會簡報v6.0
第7次協作會議會後會簡報v6.0Audrey Tang
 
臨時動議:社會企業連繫會議分組
臨時動議:社會企業連繫會議分組臨時動議:社會企業連繫會議分組
臨時動議:社會企業連繫會議分組Audrey Tang
 
議程及歷次列管表
議程及歷次列管表議程及歷次列管表
議程及歷次列管表Audrey Tang
 
討論案一:中、南、東部在地社企會談規劃情形
討論案一:中、南、東部在地社企會談規劃情形討論案一:中、南、東部在地社企會談規劃情形
討論案一:中、南、東部在地社企會談規劃情形Audrey Tang
 
報告案四之一:創櫃板協助社會企業籌資之推動現況
報告案四之一:創櫃板協助社會企業籌資之推動現況報告案四之一:創櫃板協助社會企業籌資之推動現況
報告案四之一:創櫃板協助社會企業籌資之推動現況Audrey Tang
 
報告案四之二:國發基金運用資金協助社會發展辦理方式
報告案四之二:國發基金運用資金協助社會發展辦理方式報告案四之二:國發基金運用資金協助社會發展辦理方式
報告案四之二:國發基金運用資金協助社會發展辦理方式Audrey Tang
 
報告案二:組團參加2017年社會企業世界論壇辦理進度報告
報告案二:組團參加2017年社會企業世界論壇辦理進度報告報告案二:組團參加2017年社會企業世界論壇辦理進度報告
報告案二:組團參加2017年社會企業世界論壇辦理進度報告Audrey Tang
 
報告案三 :SEWF申辦2019進度說明
報告案三 :SEWF申辦2019進度說明報告案三 :SEWF申辦2019進度說明
報告案三 :SEWF申辦2019進度說明Audrey Tang
 
2017-06-17 臺灣網路治理論壇
2017-06-17 臺灣網路治理論壇2017-06-17 臺灣網路治理論壇
2017-06-17 臺灣網路治理論壇Audrey Tang
 
行政院數位國家創新經濟推動小組設置要點
行政院數位國家創新經濟推動小組設置要點行政院數位國家創新經濟推動小組設置要點
行政院數位國家創新經濟推動小組設置要點Audrey Tang
 
DIGI⁺ 數位政府
DIGI⁺ 數位政府DIGI⁺ 數位政府
DIGI⁺ 數位政府Audrey Tang
 

More from Audrey Tang (20)

Social Innovation & Digital Transformation
Social Innovation & Digital TransformationSocial Innovation & Digital Transformation
Social Innovation & Digital Transformation
 
Stories from the Future of Democracy
Stories from the Future of DemocracyStories from the Future of Democracy
Stories from the Future of Democracy
 
TEDxTaipei 2017: 社會企業
TEDxTaipei 2017: 社會企業TEDxTaipei 2017: 社會企業
TEDxTaipei 2017: 社會企業
 
唐鳳政務委員業務工作報告
唐鳳政務委員業務工作報告唐鳳政務委員業務工作報告
唐鳳政務委員業務工作報告
 
資訊服務採購契約範本 修正明細對照 1060713
資訊服務採購契約範本 修正明細對照 1060713資訊服務採購契約範本 修正明細對照 1060713
資訊服務採購契約範本 修正明細對照 1060713
 
服務型智慧政府推動計畫 v9
服務型智慧政府推動計畫 v9服務型智慧政府推動計畫 v9
服務型智慧政府推動計畫 v9
 
共通性應用程式介面規範
共通性應用程式介面規範共通性應用程式介面規範
共通性應用程式介面規範
 
打造一站式的防救災資訊整合平臺
打造一站式的防救災資訊整合平臺打造一站式的防救災資訊整合平臺
打造一站式的防救災資訊整合平臺
 
開放政府聯絡人第11次協作會議簡報
開放政府聯絡人第11次協作會議簡報開放政府聯絡人第11次協作會議簡報
開放政府聯絡人第11次協作會議簡報
 
第7次協作會議會後會簡報v6.0
第7次協作會議會後會簡報v6.0第7次協作會議會後會簡報v6.0
第7次協作會議會後會簡報v6.0
 
臨時動議:社會企業連繫會議分組
臨時動議:社會企業連繫會議分組臨時動議:社會企業連繫會議分組
臨時動議:社會企業連繫會議分組
 
議程及歷次列管表
議程及歷次列管表議程及歷次列管表
議程及歷次列管表
 
討論案一:中、南、東部在地社企會談規劃情形
討論案一:中、南、東部在地社企會談規劃情形討論案一:中、南、東部在地社企會談規劃情形
討論案一:中、南、東部在地社企會談規劃情形
 
報告案四之一:創櫃板協助社會企業籌資之推動現況
報告案四之一:創櫃板協助社會企業籌資之推動現況報告案四之一:創櫃板協助社會企業籌資之推動現況
報告案四之一:創櫃板協助社會企業籌資之推動現況
 
報告案四之二:國發基金運用資金協助社會發展辦理方式
報告案四之二:國發基金運用資金協助社會發展辦理方式報告案四之二:國發基金運用資金協助社會發展辦理方式
報告案四之二:國發基金運用資金協助社會發展辦理方式
 
報告案二:組團參加2017年社會企業世界論壇辦理進度報告
報告案二:組團參加2017年社會企業世界論壇辦理進度報告報告案二:組團參加2017年社會企業世界論壇辦理進度報告
報告案二:組團參加2017年社會企業世界論壇辦理進度報告
 
報告案三 :SEWF申辦2019進度說明
報告案三 :SEWF申辦2019進度說明報告案三 :SEWF申辦2019進度說明
報告案三 :SEWF申辦2019進度說明
 
2017-06-17 臺灣網路治理論壇
2017-06-17 臺灣網路治理論壇2017-06-17 臺灣網路治理論壇
2017-06-17 臺灣網路治理論壇
 
行政院數位國家創新經濟推動小組設置要點
行政院數位國家創新經濟推動小組設置要點行政院數位國家創新經濟推動小組設置要點
行政院數位國家創新經濟推動小組設置要點
 
DIGI⁺ 數位政府
DIGI⁺ 數位政府DIGI⁺ 數位政府
DIGI⁺ 數位政府
 

Recently uploaded

Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?SANGHEE SHIN
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.YounusS2
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxMatsuo Lab
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemAsko Soukka
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
RAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AIRAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AIUdaiappa Ramachandran
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1DianaGray10
 
Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.francesco barbera
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureEric D. Schabell
 
PicPay - GenAI Finance Assistant - ChatGPT for Customer Service
PicPay - GenAI Finance Assistant - ChatGPT for Customer ServicePicPay - GenAI Finance Assistant - ChatGPT for Customer Service
PicPay - GenAI Finance Assistant - ChatGPT for Customer ServiceRenan Moreira de Oliveira
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Websitedgelyza
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfAijun Zhang
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1DianaGray10
 

Recently uploaded (20)

Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptx
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystem
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
RAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AIRAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AI
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
 
Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability Adventure
 
PicPay - GenAI Finance Assistant - ChatGPT for Customer Service
PicPay - GenAI Finance Assistant - ChatGPT for Customer ServicePicPay - GenAI Finance Assistant - ChatGPT for Customer Service
PicPay - GenAI Finance Assistant - ChatGPT for Customer Service
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Website
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdf
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1
 

EtherCalc: Multiplayer Spreadsheet