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
=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
20 years passed
20 years passed
20 years passed
20 years passed
20 years passed



Nothing changed
“Can’t open”
“Can’t open”

“Garbled”
“Can’t open”

“Garbled”

“Virus!”
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
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
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
Mesh
P2P
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?
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.”

        劣=夯
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
{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
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: A Collaborative 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の文法記述を比較する~耕二 阿部
 
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
 
芸術・地域情報LOD動向
芸術・地域情報LOD動向芸術・地域情報LOD動向
芸術・地域情報LOD動向Fumihiro Kato
 

Similar to EtherCalc: A Collaborative Spreadsheet (16)

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の文法記述を比較する~
 
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
 
PAL
PALPAL
PAL
 
芸術・地域情報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

Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Dynamical Context introduction word sensibility orientation
Dynamical Context introduction word sensibility orientationDynamical Context introduction word sensibility orientation
Dynamical Context introduction word sensibility orientationBuild Intuit
 
Why Agile? - A handbook behind Agile Evolution
Why Agile? - A handbook behind Agile EvolutionWhy Agile? - A handbook behind Agile Evolution
Why Agile? - A handbook behind Agile EvolutionDEEPRAJ PATHAK
 
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
 
QMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdfQMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdfROWELL MARQUINA
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Mark Simos
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Karmanjay Verma
 
Laying the Data Foundations for Artificial Intelligence!
Laying the Data Foundations for Artificial Intelligence!Laying the Data Foundations for Artificial Intelligence!
Laying the Data Foundations for Artificial Intelligence!Memoori
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfAarwolf Industries LLC
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentMahmoud Rabie
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Jeffrey Haguewood
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialJoão Esperancinha
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...amber724300
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...BookNet Canada
 

Recently uploaded (20)

Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Dynamical Context introduction word sensibility orientation
Dynamical Context introduction word sensibility orientationDynamical Context introduction word sensibility orientation
Dynamical Context introduction word sensibility orientation
 
Why Agile? - A handbook behind Agile Evolution
Why Agile? - A handbook behind Agile EvolutionWhy Agile? - A handbook behind Agile Evolution
Why Agile? - A handbook behind Agile Evolution
 
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
 
QMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdfQMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdf
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#
 
Laying the Data Foundations for Artificial Intelligence!
Laying the Data Foundations for Artificial Intelligence!Laying the Data Foundations for Artificial Intelligence!
Laying the Data Foundations for Artificial Intelligence!
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdf
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career Development
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorial
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
 

EtherCalc: A Collaborative Spreadsheet