皆さん、こんにちは€¦ · 簡煒航 jian weihang @tonytonyjan • founder of brainana.com...

64

Upload: others

Post on 06-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo
Page 2: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

皆さん、こんにちは

Page 3: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo
Page 4: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo
Page 5: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo
Page 6: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

簡煒航 Jian Weihang @tonytonyjan

• Founder of brainana.com

• Co-Founder of 5xruby.tw

• Coach of Rails Girls Taipei

• Champion in Yahoo Hack Day Taiwan 2013

• 4 Years Java Experience

• 2 Years Ruby Experience

• Double Keyboard Player

Page 7: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

台灣(Taiwan)

Page 8: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Ruby Meets Sony Camera Remote API

API Wrapper Implementation, and Stream Processing

Page 9: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

3 months ago…

Page 10: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Taipei City New Recreation Center

Page 11: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo
Page 12: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Photo Truck

Page 13: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

CameraScreen

Page 14: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Flow

1. Play a short film.

2. Display camera live preview.

3. Take a picture.

4. Freeze the picture for 5 min

5. Repeat.

Page 15: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo
Page 16: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Â

• ˜

Page 17: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Solutions

Page 18: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Solution to Display

• How about VLC API?

• Easy to control over TCP (gem install vli-client)

• Impossible to add effects (Countdown images, sounds)

• HTML5 over browser seems the first choice.

Page 19: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Solution to Camera Control

• How about gphoto2?

• Supports more than1,800 cameras.

• There is CLI mode.

• Have to repeat capturing preview to stream.

• It’s surprising.

Page 20: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Sony Remote Camera

DSC-QX100

Page 21: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Sony Camera Remote API

• It’s free, and it’s open.

• It’s SSDP + UPnP over Wi-Fi, and it’s open.

• It’s easy (JSON-RPC over HTTP), and it’s open.

• It’s well documented, and it’s open.

⼤大事なことなので 4 回⾔言いました

Page 22: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

3 Steps to Access Camera

Page 23: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Device Discovery

Page 24: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Get the API URL

Page 25: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

SSDP

Request

Response

Page 26: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Get API URL

Page 27: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

API ExamplesThere are more than 90 APIs

Page 28: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

JSON-RPC 1.0Request Response

Camera Remote API uses JSON-PRC over HTTP POST request.

Page 29: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Take PictureRequest Response

Page 30: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Zoom inRequest Response

Page 31: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Set ExposureRequest Response

Available Modes!“Program Auto”, “Aperture, Shutter”,

“Manual”, “Intelligent Auto”, “Superior Auto”

Page 32: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Ruby TimeIntegrate Remote API with Ruby.

Page 33: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Discover Device - 1/2

Page 34: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Discover Device - 2/2

Parse XML to get API URL (using nokogiri or rexml).

Page 35: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Calling API

Page 36: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Live Preview

Page 37: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Get Liveview URLRequest Response

Page 38: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Packet Data Format

Page 39: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Packet Format• Comen Header: 8 bytes

• Payload Header: 128 bytes

• Fist 4 bytes are fixed start code: ”\x24\x35\x68\x79”

• The following 3 bytes is JPEG data size.

• Payload data: depends on JPEG data size.

Page 40: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Ruby TimeProcessing Stream using Ruby

Page 41: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

HTTP Streaming (1/2)

Page 42: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

HTTP Streaming (2/2)

Page 43: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

String#unpackDecodes string, returning array of each value extracted.

Page 44: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Common Header

Page 45: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Common Header (1/2)

Page 46: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Common Header (2/2)

Page 47: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Payload Header

Page 48: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Payload Header (1/2)

Page 49: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Payload Header (2/2)

Page 50: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Ruby gem?

Page 51: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

$ gem install sonycamhttps://github.com/tonytonyjan/sonycam

Page 52: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Ruby Usage

Page 53: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

CLI Usage

Page 54: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

CLI Usage

`sonycam liveview` prints streaming data to STDOUT

Page 55: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Record to mp4

Page 56: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Live Streaming

Page 57: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Friendly Reminder

Page 58: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Secrets in DSC-RX100M2

• Others

• http://10.0.0.1:10000/sony/camera

• DSC-RX 100M2

• http://10.0.0.1:10000/camera

It’s not mentioned in any official document.

Page 59: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Mandatory Extensions (1/2)

Page 60: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Mandatory Extensions (2/2)

MAN REQUIRED by HTTP Extension Framework. Unlike the NTS and ST field values, the field value of the MAN header field is enclosed in double quotes; it defines the scope (namespace) of the extension. MUST be “ssdp:discover".

- Quoted from “UPnP Device Architecture 1.1”

Page 61: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Conclusion

Page 62: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Sony’s Cameras are friendly for developers

Page 63: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Ruby is easy to write even in handling binary

Page 64: 皆さん、こんにちは€¦ · 簡煒航 Jian Weihang @tonytonyjan • Founder of brainana.com • Co-Founder of 5xruby.tw • Coach of Rails Girls Taipei • Champion in Yahoo

Thank You