Submit Search
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for Perl Programmers
8 likes
5,505 views
N
Naoya Ito
1 of 47
Download now
Downloaded 39 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
More Related Content
What's hot
(20)
PDF
Zabbix API
Shuhei Hayashibara
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
PPTX
Perl logging
keroyonn
PDF
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
PPTX
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
keroyonn
PDF
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
Narami Kiyokura
PDF
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
Masahiro Wakame
PPT
Scala on Hadoop
Shinji Tanaka
PDF
How Smalltalker Works
Sho Yoshida
PDF
CodeIgniter入門
Sho A
PDF
Using Dancer
Yoshihiro Sasaki
PDF
Puppet on AWS
Sugawara Genki
PPTX
CMSとPerlで遊ぼう
Daiki Ichinose
PDF
UnrealEngineが5日間でasm.js化できたと聞いた俺たちは…
Kei Nakazawa
PPT
CGI::Application::Dispatch
Hideo Kimura
PPT
Using Windows Azure
Shinji Tanaka
PPT
CPANの依存モジュールをもう少し正しく検出したい
charsbar
KEY
Web Operations and Perl kansai.pm#14
Masahiro Nagano
PPTX
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
Kohei Hoshi
PDF
ChefとPuppetの比較
Sugawara Genki
Zabbix API
Shuhei Hayashibara
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
Perl logging
keroyonn
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
keroyonn
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
Narami Kiyokura
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
Masahiro Wakame
Scala on Hadoop
Shinji Tanaka
How Smalltalker Works
Sho Yoshida
CodeIgniter入門
Sho A
Using Dancer
Yoshihiro Sasaki
Puppet on AWS
Sugawara Genki
CMSとPerlで遊ぼう
Daiki Ichinose
UnrealEngineが5日間でasm.js化できたと聞いた俺たちは…
Kei Nakazawa
CGI::Application::Dispatch
Hideo Kimura
Using Windows Azure
Shinji Tanaka
CPANの依存モジュールをもう少し正しく検出したい
charsbar
Web Operations and Perl kansai.pm#14
Masahiro Nagano
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
Kohei Hoshi
ChefとPuppetの比較
Sugawara Genki
Similar to SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for Perl Programmers
(20)
PDF
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
PDF
SocketStream入門
Kohei Kadowaki
PPTX
オタク×Node.js勉強会
虎の穴 開発室
PDF
WebSocket + Node.jsでつくるチャットアプリ
Kohei Kadowaki
PPT
Node.js で Web アプリ開発
Tatsumi Naganuma
PPTX
Wasm blazor and wasi 2
Takao Tetsuro
PDF
Nodeにしましょう
Yuzo Hebishima
PPTX
Phone gap+javascriptスマホアプリ開発(入門編)
Monaca
PPTX
HTML5&API総まくり
Shumpei Shiraishi
PPTX
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
Takao Tetsuro
PPTX
[CB16] Electron - Build cross platform desktop XSS, it’s easier than you thin...
CODE BLUE
ODP
今流行りのウェブアプリ開発環境Yeoman
tomo_masakura
PDF
PhoneGapでWebアプリをスマホアプリ化
Takashi Okamoto
PDF
Kilimanjaro Event
dynamis
PDF
20130315 abc firefox_os
Tomoaki Konno
PDF
関西FirefoxOS勉強会6thGiG「アプリ間通信」
Noritada Shimizu
PPTX
Monacaでつくるハイブリッドアプリ
Monaca
PDF
Yesod(at FPM2012)
Seizan Shimazaki
KEY
Real world rails
Jun Yokoyama
PDF
PhoneGapで作るハイブリッドアプリケーション
Masahiko Tachizono
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
SocketStream入門
Kohei Kadowaki
オタク×Node.js勉強会
虎の穴 開発室
WebSocket + Node.jsでつくるチャットアプリ
Kohei Kadowaki
Node.js で Web アプリ開発
Tatsumi Naganuma
Wasm blazor and wasi 2
Takao Tetsuro
Nodeにしましょう
Yuzo Hebishima
Phone gap+javascriptスマホアプリ開発(入門編)
Monaca
HTML5&API総まくり
Shumpei Shiraishi
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
Takao Tetsuro
[CB16] Electron - Build cross platform desktop XSS, it’s easier than you thin...
CODE BLUE
今流行りのウェブアプリ開発環境Yeoman
tomo_masakura
PhoneGapでWebアプリをスマホアプリ化
Takashi Okamoto
Kilimanjaro Event
dynamis
20130315 abc firefox_os
Tomoaki Konno
関西FirefoxOS勉強会6thGiG「アプリ間通信」
Noritada Shimizu
Monacaでつくるハイブリッドアプリ
Monaca
Yesod(at FPM2012)
Seizan Shimazaki
Real world rails
Jun Yokoyama
PhoneGapで作るハイブリッドアプリケーション
Masahiko Tachizono
Ad
More from Naoya Ito
(10)
PPT
Web-Gakkai Symposium 2010
Naoya Ito
PPT
はてなブックマークのシステムについて
Naoya Ito
PPT
Perlで圧縮
Naoya Ito
PPT
Introduction to Algorithms#24 Shortest-Paths Problem
Naoya Ito
PPT
090518computing Huffman Code Length
Naoya Ito
PPT
スペルミス修正プログラムを作ろう
Naoya Ito
PPT
Dijkstra Algorithm
Naoya Ito
PPT
OGC2009 はてなブックマークについて
Naoya Ito
PPT
How to read linux kernel
Naoya Ito
PPT
Introduction To Moco
Naoya Ito
Web-Gakkai Symposium 2010
Naoya Ito
はてなブックマークのシステムについて
Naoya Ito
Perlで圧縮
Naoya Ito
Introduction to Algorithms#24 Shortest-Paths Problem
Naoya Ito
090518computing Huffman Code Length
Naoya Ito
スペルミス修正プログラムを作ろう
Naoya Ito
Dijkstra Algorithm
Naoya Ito
OGC2009 はてなブックマークについて
Naoya Ito
How to read linux kernel
Naoya Ito
Introduction To Moco
Naoya Ito
Ad
Recently uploaded
(13)
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
PDF
漁船に搭載されている電子装備と漁法について_VRC海洋学研究会_海のLT会発表資料
Yuuitirou528 default
PDF
第3回デジタル理学療法研究会学術大会シンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」の講演資料.
Matsushita Laboratory
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
PDF
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
PDF
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
PDF
第3回デジタル理学療法学会のシンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」での話題提供
Matsushita Laboratory
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
PDF
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
漁船に搭載されている電子装備と漁法について_VRC海洋学研究会_海のLT会発表資料
Yuuitirou528 default
第3回デジタル理学療法研究会学術大会シンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」の講演資料.
Matsushita Laboratory
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
第3回デジタル理学療法学会のシンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」での話題提供
Matsushita Laboratory
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for Perl Programmers
1.
Perlプログラマのための スマートフォン開発ガイド CoffeeScript /
Node / HTML5 Naoya Ito
2.
キーワード •
PhoneGap • Titanium Mobile • CoffeeScript • Node.js • Socket.IO • Express • npm • …
3.
半年ほど前
4.
一ヶ月前
5.
今週
6.
“Embedded Web Vies”
7.
Web UI
8.
モチベーション
9.
ネイティブと Web App
のハイブリッドへ • HTML5アプリケーションをネイティブで補う... • ネイティブをWeb技術 (スクリプト言語) で作る...
10.
アジェンダ • クライアントサイド
• PhoneGap • Titanium Mobile • Scripting Layer for Android • サーバーサイド • Node or Perl
11.
PhoneGap, Titanium Mobile,
Scripting Layer for Android クライアントサイド
12.
スクリプト言語で iOS/Android アプリ
• HTML5 • Web開発、同様スクリプト言語で書きたい! • JavaScript, CoffeeScript • スクリプト言語な俺たち歓喜 \(^o^)/ • Perl で書ける?
13.
PhoneGap
14.
PhoneGap • UIWebView
ベースのアプリ開発 F/W • JavaScript / HTML / CSS • UIWebView の js に Native Bridge な API • Phone"Gap" navigator.camera.getPictures(onSuccess, onFail) onSuccess = function (base64data) { var img = document.getElementById('myImage'); img.src = "data:image/jpeg;base64;" + base64data; }
15.
例: Photo Receiver
• PhoneGap (+ jQuery mobile) + Node (+ Express + Socket.IO) WebSocket (Socket.IO) iOS app with PhoneGap Node
16.
Photo Receiver (sender,
index.html) <html> <head> ... <script type="text/javascript" src="phonegap-1.0.0.js"></script> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="socket.io.min.js"></script> ... <script type="text/javascript" src="sender.js"></script> </head> <body> <div data-role="page"> <div data-role="header" data-theme="b"> <h1>Photo Sender</h1> </div> ...
17.
Photo Receiver (sender,
sender.coffee) onDeviceReady = -> socket = io.connect 'http://localhost:3000/sender' onSuccess = (data) -> socket.emit 'pushPhoto', data ... $('#camera').click -> navigator.camera.getPicture onSuccess, onFailure, opt $(document).ready -> $(document).bind 'deviceready', onDeviceReady # sender.coffee の変更を watch → sender.js を生成 $ coffee -cw *.coffee
18.
Photo Receiver (receiver,
app.coffee) express = require "express" app = module.exports = express.createServer() app.get "/", (req, res) -> res.render "index", title: "Photo Receiver" app.listen 3000 io = require('socket.io').listen app sender = io.of('/sender').on 'connection', (socket) -> socket.on 'pushPhoto', (data) -> data_uri = "data:image/jpeg;base64," + data receiver.emit 'showPhoto', data_uri
19.
PhoneGap あれこれ •
HTML + JS = "HTML5 ready" • jQuery / jQuery mobile • CoffeeScript • socket.io • sass, less, stylus • Facebook/Google+ と似ているが... • UIKit の制御は bridge しない • UIWebView は Safari より遅い • UIWebView = not Nitro • JITコンパイラなし • Adobe が買収 • Native → HTML5 アプローチとして PhoneGap モデルは有力
20.
Titanium Mobile
21.
Titanium Mobile •
ネイティブアプリを JavaScript で • Titanium Studio でビルド • インタプリタ上で動く • iOS : JavascriptCore / Android : Rhino • JSエンジンがUIKitを操作 • 動的に動作確認できる
22.
例: Cover Flow
23.
Cover Flow win
= Ti.UI.currentWindow() view = Ti.UI.createCoverFlowView images: [ '../images/01.jpg' '../images/02.jpg' '../images/03.jpg' '../images/04.jpg' '../images/05.jpg' ] backgroundColor: '#000' win.add view
24.
例: HBFav
https://github.com/naoya/HBFav
25.
HBFav • クライアント
• Titanium Mobile • CoffeeScript • サーバー • Node.js • Express • xml2json • Heroku
26.
HBFav コード断片 require 'lib/underscore' Ti.include
'feed.js' class AbstractState toString : () -> 'AbstractState' constructor: (@feedView) -> getFeed : (url) -> self = @ onload = @.onload onerror = @.onerror xhr = Ti.Network.createHTTPClient() xhr.timeout = 100000 xhr.open 'GET', url xhr.onload = -> data = JSON.parse @.responseText onload.apply(self, [ data ]) xhr.onload = null xhr.onerror = null xhr = null xhr.onerror = (err) -> onerror.apply(self, [ err ]) xhr.send()
27.
Titanium Mobile あれこれ
• JavaScript ready • CoffeeScript • CommonJS ・・・ underscore, socket.io etc. • Titanium Mobile != HTML5 • JavaScript だからといって HTML5 へ向かってるわけではない • 「JS でネイティブ書ける」 • 現時点では、現実的な解 • 実用的だが当然、トレードオフも – メモリ管理不要、ダイナミック更新、ラピッドに開発可 – ネイティブとは速度差 / 細かなチューニングが難しい – デバッグ環境がこなれていない
28.
Scripting Layer for
Android (SL4A) • Androidアプリを Perl で • ここは YAPC だぜ? use Android my $android = Android->new; $android->makeToast( "Hello, Android!" );
29.
SL4A • PhoneGap,
Titanium とも別アプローチ • Java アプリが "Scripting Layer" と JSON-RPC で通信 • Java アプリのAPIがネイティブの機能をブリッジ • 本格的なアプリを作るのには向かない • 速度、安定性...
30.
クライアントサイドまとめ • JavaScript によるネイティブブリッジFWは発展途上
• この方向性のフレームワークは増える • PhoneGap, Titanium Mobile は"そこそこ" 実用的 • ※ debug しんどい • Facebook/G+ の言う "Embedded Web Views" のFWはまだ • UIWebView アプリを作りつつ • ネイティブの "UI" と橋渡し • Perl でクライアントサイドは、さすがに ... • SL4A はおもちゃの領域を出ない
31.
Node vs Perl サーバーサイド
32.
サーバサイド • これまで通り Perl
で書いても良いですが・・・ • クライアントを JS で、なら、サーバも JSで • この流れは止められない • Node.js : server-side JavaScript が現実的に
33.
Node.js • Perl
と比較しながら見ていきたい
34.
perl vs Node
Perl Node.js プリプロセッサ N/A CoffeeScript 言語 Perl言語 JavaScript 実行環境 perlインタプリタ node ウェブ実行環境 mod_perl, PSGI http.Server, connect etc. middleware, etc. Web Framework Catalyst, Mojolicious::Lite, Express, etc. Dancer etc. パッケージ管理 cpan npm 主なWebアプリのモデル prefork (同期) Single Process Event Driven (非同期)
35.
Node.js • Single
Process Event Driven な server-side JavaScript Engine – Perl : POE, AnyEvent http = require 'http' http.createServer (req, res) -> res.writeHead 200, 'Content-Type':'text/plain' res.end 'Hello World!¥n' .listen 8080 % node-dev hello.coffee • Perl でできないことをやってるわけではない • 一方の「手軽さ」、JavaScript との相性
36.
npm $ npm
install express cpanm Mojolicious::Lite
37.
search.npmjs.org
38.
underscore.js require 'underscore'
pow = _([1, 2, 3]).map (n) -> n * 2 max = _([1, 2, 3]).max() sum = _([1, 2, 3]).reduce (memo, num) -> memo + num use List::Util qw/max reduce/; my $pow = map { $_ * 2 } (1, 2, 3); my $sum = reduce { $a + $b } (1, 2, 3); my $max = max(1, 2, 3);
39.
Express • Web
framework, Sinatra inspired • Perl ... Mojolicious::Lite etc • SASS/LESS/Stylus, Coffee, Jade/EJS, Socket.IO ready – emerging web technologies... express = require "express" app = module.exports = express.createServer() app.configure -> app.set 'view engine', "jade" app.use express.compiler src: __dirname + "/public" enable: [ "sass" ] app.get "/", (req, res) -> res.render "index", title: "Hello, Express"
40.
vows • Perl
: Test::More, Test::Base, Test::Declare • vows : Asynchronous BDD vows = require 'vows' assert = require 'assert' test = vows.describe('ゼロでの割り算').addBatch '任意の数をゼロで割った時' : topic: -> 42 / 0 '無限大になる' : (topic) -> assert.equal topic, Infinity 'ただし、ゼロをゼロで割った場合' topic: -> 0/ 0 '以下となる' : '数値でない' : (topic) -> assert.isNan topic '自分自身とは等価でない' : -> assert.notEqual topic, topic do test.run
41.
xml2js • Perl
: XML::Simple + JSON parser = new xml2js.Parser() parser.addListener 'end', (json) -> console.log json parser.parseString xml
42.
aws-lib • Perl
: Net::Amazon aws = require 'aws-lib' aws = aws.createProdAdvClient( accessKey, secretKey, associateId, region: "JP" host: 'ecs.amazonaws.jp' ) aws.call "ItemSearch", SearchIndex: "Books" Title: "Perl" ItemPage: 1 ResponseGroup: 'Medium' (result) -> console.log result
43.
Node modules
https://github.com/joyent/node/wiki/modules
44.
Socket.IO •
WebSocket-like API – 抽象化 : WebSocket, xhr-polling, xhr-multipart, jsonp-polling .... • Node.js の急先鋒 /* client (jade w/ express) */ /* server (app = express object) */ script(src='/socket.io/socket.io.js') io = require('socket.io').listen app io.sockets.on 'connection', (socket) -> :coffeescript socket.on 'send', (data) -> socket = io.connect 'http://localhost’ console.log data socket.on 'recv', (data) -> socket.emit 'recv', data console.log data socket.emit 'send', "Hello!"
45.
pocketio • Perl
の Socket.IO server – JS ⇔ Perl – JS ⇔ Perl ⇔ Perl modules use PocketIO; use Plack::Builder; builder { mount '/socket.io' => PocketIO->new handler => sub { my $self = shift; $self->on( 'recv' => sub { my ($socket, $data) = @_; $socket->emit('send', $data); }); ...
46.
サーバサイドまとめ • Node きてる
– スマートフォン開発のバックエンドを Node にする"必然性"はないが – クライアントを JS / Coffee で書くなら"優位性"はある • npm++ • CommonJS ウマー • node ・・・ 新しいn実装が多い • Socket.IO • CSS frameworks • 一方の perl ・・・ 莫大な資産 = CPAN • node / perl の pro/cons を比較して • (1) アーキテクチャ • 共存させるアプローチ ・・・ RPC, pocketio
47.
まとめ • スマートフォン :
今後、ネイティブからHTML5へ • Facebook/Google+ • × 100% HTML5 ○ ハイブリッド • JS (Coffee) のみでアプリが開発できるように • PhoneGap, Titanium Mobile • クライアントからサーバまで一気通関 • クライアントが JS なら、Node 利用の動機は大きい • Native → HTML5 への移行は JavaScript の進化にアリ • Node.js = Web Dev の梁山泊に (beyond Rails...?) • socket.IO / express / jade, stylus, coffeekup, CSS FW / coffee ... • ただし、Node だけではサポートできない領域もまだまだ • Perl の莫大な資産は活かしたい • pocketio などのアプローチ
Download