Slide 1

Slide 1 text

CoffeeScript using only to build an SmartPhone Application Naoya Ito

Slide 2

Slide 2 text

Chrome To iOS

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Node Titanium Mobile Chrome Extension + +

Slide 5

Slide 5 text

JavaScript

Slide 6

Slide 6 text

}); }); }); }); }); });

Slide 7

Slide 7 text

\(^o^)/

Slide 8

Slide 8 text

CoffeeScript will save us from the darkside of JavaScript

Slide 9

Slide 9 text

Node express = require "express" app = module.exports = express.createServer() app.get "/", (req, res) -> res.render "index", title: "Express"

Slide 10

Slide 10 text

Titanium Mobile win = Ti.UI.createWindow title: "Chrome To iOS" table = Ti.UI.createTableView top: 0 data: [] win.add table tabGroup = Ti.UI.createTabGroup tab = Ti.UI.createTab window: win tabGroup.addTab tab tabGroup.open()

Slide 11

Slide 11 text

Chrome Extension chrome.browserAction.onClicked.addListener (tab) -> chrome.tabs.executeScript null, file: "jquery-1.6.4.min.js", -> chrome.tabs.executeScript null, file: "content_script.js" chrome.extension.onConnect.addListener (port) -> port.onMessage.addListener (info) -> socket = io.connect 'http://localhost:3000' socket.emit 'fireEvent:openUrl' title: info.title url: info.url image: info.image

Slide 12

Slide 12 text

To learn more about CoffeeScript

Slide 13

Slide 13 text

CoffeeScript All your product are belong to

Slide 14

Slide 14 text

How do they communicate with each other?

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

socket.emit() socket.emit() using socket.io for messaging

Slide 17

Slide 17 text

Hacking Titanium for enabling Socket.IO WebView proxy technique 0px WebView left: -100 top: -100 enabling socket.io on HTML socket.emit() Titanium.App.fireEvent() github.com/euforic/ChatSocks/tree/wv-proxy

Slide 18

Slide 18 text

WebView proxy for Socket.IO socket = {} socket.connect = (win) -> proxy = Ti.UI.createWebView url: "webview/webview.html" top: -100, left: -100, width: 0 height: 0 win.add proxy # Alias for Titanium functions just for fun socket.emit = (e, params) -> Ti.App.fireEvent e, params socket.on = (e, callback) -> Ti.App.addEventListener e, callback on Titanium App

Slide 19

Slide 19 text

Open new URL when receiving socket events socket.on 'openUrl', (params) -> table.prependRow $$.ui.createRow title: params.title || params.url message: 'URLを開く' image: params.image click: -> w = Ti.UI.createWindow() w.add Ti.UI.createWebView url: params.url tab.open w on Titanium App

Slide 20

Slide 20 text

Using socket.io on Chrome is easy # background.html # background.coffee chrome.extension.onConnect.addListener (port) -> port.onMessage.addListener (info) -> socket = io.connect 'http://localhost:3000' socket.emit 'fireEvent:openUrl' ... on Chrome Extension

Slide 21

Slide 21 text

done!

Slide 22

Slide 22 text

Node & Titanium Mobile can help you to write SmartPhone Apps only in CoffeeScript Socket.IO makes work easy!

Slide 23

Slide 23 text

To learn more about CoffeeScript NO MORE JS HELL!?

Slide 24

Slide 24 text

Thanks! github/naoya/push-to-ios (Titanium App & Node server) github/naoya/chrome2ios (Chrome Extension) Design inspired by: zachholman.com/posts/slide-design-for-developers/