Nylas N1
main.js
const win = new BrowserWindow()
win.loadURL(`file://index.html`)
win.show()
index.html
index.js
React.render()
Composer Work Window
Slide 35
Slide 35 text
Browser aka Backend aka Main Process
Renderer Renderer Renderer
HTML / JS (DOM) HTML / JS (DOM) HTML / JS (DOM)
ipc
Slide 36
Slide 36 text
A Marriage of Event Loops
Slide 37
Slide 37 text
Node Event Loop
libuv
A Marriage of Event Loops
Slide 38
Slide 38 text
Chromium Events
MessageLoop
Chromium
A Marriage of Event Loops
Slide 39
Slide 39 text
Chromium Events
MessageLoop
Chromium
A Marriage of Event Loops
Node Event Loop
libuv
?
Slide 40
Slide 40 text
Chromium Events
libuv
Chromium
A Marriage of Event Loops
Slide 41
Slide 41 text
Chromium Events
MessageLoop
Chromium
A Marriage of Event Loops
Node Event Loop
libuv
Slide 42
Slide 42 text
Node Event Loop
libuv
Chromium Events
MessageLoop
Chromium
A Marriage of Event Loops
IO poll
Slide 43
Slide 43 text
Node on the Desktop
1. A Marriage of Node & Chromium
2. Native (Electron) Extensions
3. DOM with fs
4. Process Control
5. Plugins & Extensibility
Shared event loop | Node & Chromium Contexts
Slide 44
Slide 44 text
Node on the Desktop
1. A Marriage of Node & Chromium
2. Native (Electron) Extensions
3. DOM with fs
4. Process Control
5. Plugins & Extensibility
Shared event loop | Node & Chromium Contexts
Slide 45
Slide 45 text
Native Electron Extensions
npm install sqlite3
electron/electron-rebuild
Slide 46
Slide 46 text
Native Electron Extensions
electron/electron-rebuild
Slide 47
Slide 47 text
Native Electron Extensions
electron/electron-rebuild
node-gyp install
--target=${electronVersion}
--arch=x64
--dist-url=https://atom.io/download/atom-shell
Native Electron Extensions
nodejs/node-gyp
gyp (Generate Your Projects)
make, gcc, XCode, Visual Studio
Slide 51
Slide 51 text
Node on the Desktop
1. A Marriage of Node & Chromium
2. Native (Electron) Extensions
3. DOM with fs
4. Process Control
5. Plugins & Extensibility
Shared event loop | Node & Chromium Contexts
Node gyp | Compiled for Windows
Slide 52
Slide 52 text
Node on the Desktop
1. A Marriage of Node & Chromium
2. Native (Electron) Extensions
3. DOM with fs
4. Process Control
5. Plugins & Extensibility
Shared event loop | Node & Chromium Contexts
Node gyp | Compiled for Windows
Slide 53
Slide 53 text
No content
Slide 54
Slide 54 text
ReactiveX.js
Slide 55
Slide 55 text
ReactiveX.js
Thank you @mattpodwysocki!
Slide 56
Slide 56 text
const q = `SELECT * FROM threads WHERE …`
Rx.Observable.fromQuery(q).subscribe((threads) => {
this.setState({threads})
})
Slide 57
Slide 57 text
const q = `SELECT * FROM threads WHERE …`
Rx.Observable.fromQuery(q)
.filter(myFn).subscribe((threads) => {
this.setState({threads})
})
Slide 58
Slide 58 text
const q = `SELECT * FROM threads WHERE …`
Rx.Observable.fromQuery(q)
.filter(myFn)
.map(mapFn).subscribe((threads) => {
this.setState({threads})
})
Slide 59
Slide 59 text
Node on the Desktop
1. A Marriage of Node & Chromium
2. Native (Electron) Extensions
3. DOM with fs
4. Process Control
5. Plugins & Extensibility
Shared event loop | Node & Chromium Contexts
Node gyp | Compiled for Windows
SQLite | Live Queries to React
Slide 60
Slide 60 text
Node on the Desktop
1. A Marriage of Node & Chromium
2. Native (Electron) Extensions
3. DOM with fs
4. Process Control
5. Plugins & Extensibility
Shared event loop | Node & Chromium Contexts
Node gyp | Compiled for Windows
SQLite | Live Queries to React
Slide 61
Slide 61 text
No content
Slide 62
Slide 62 text
Node on the Desktop
1. A Marriage of Node & Chromium
2. Native (Electron) Extensions
3. DOM with fs
4. Process Control
5. Plugins & Extensibility
Shared event loop | Node & Chromium Contexts
Node gyp | Compiled for Windows
SQLite | Live Queries to React
Worker Windows
Slide 63
Slide 63 text
Node on the Desktop
1. A Marriage of Node & Chromium
2. Native (Electron) Extensions
3. DOM with fs
4. Process Control
5. Plugins & Extensibility
Shared event loop | Node & Chromium Contexts
Node gyp | Compiled for Windows
SQLite | Live Queries to React
Worker Windows
Slide 64
Slide 64 text
No content
Slide 65
Slide 65 text
Node on the Desktop
1. A Marriage of Node & Chromium
2. Native (Electron) Extensions
3. DOM with fs
4. Process Control
5. Plugins & Extensibility
Shared event loop | Node & Chromium Contexts
Node gyp | Compiled for Windows
SQLite | Live Queries to React
Worker Windows
“Installed” Plugins | React
Slide 66
Slide 66 text
Node on the Desktop
1. A Marriage of Node & Chromium
2. Native (Electron) Extensions
3. DOM with fs
4. Process Control
5. Plugins & Extensibility
“Installed” Plugins | React
Worker Windows
SQLite | Live Queries to React
Node gyp | Compiled for Windows
Shared event loop | Node & Chromium Contexts