狠狠撸

狠狠撸Share a Scribd company logo
Perlプログラマのための
スマートフォン開発ガイド
 CoffeeScript / Node / HTML5
          Naoya Ito
キーワード

?   PhoneGap
?   Titanium Mobile
?   CoffeeScript
?   Node.js
?   Socket.IO
?   Express
?   npm
?   …
半年ほど前
一ヶ月前
今週
“Embedded Web Vies”
Web UI
モチベーション
ネイティブと Web App のハイブリッドへ

? HTML5アプリケーションをネイティブで補う...
? ネイティブをWeb技術 (スクリプト言語) で作る...
アジェンダ

? クライアントサイド
  ? PhoneGap
  ? Titanium Mobile
  ? Scripting Layer for Android


? サーバーサイド
  ? Node or Perl
PhoneGap, Titanium Mobile, Scripting Layer for Android

クライアントサイド
スクリプト言語で iOS/Android アプリ

 ? HTML5
   ? Web開発、同様スクリプト言語で書きたい!
      ? JavaScript, CoffeeScript
      ? スクリプト言語な俺たち歓喜 \(^o^)/
   ? Perl で書ける?
PhoneGap
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 = /slideshow/smartphone-development-guide-with-coffeescript-node-html5-technology-for-perl-programmers/9704771/"data:image/jpeg;base64;" + base64data;
 }
例: Photo Receiver

 ? PhoneGap (+ jQuery mobile) + Node (+ Express + Socket.IO)




                           WebSocket
                           (Socket.IO)




   iOS app with PhoneGap                    Node
Photo Receiver (sender, index.html)

  <html>
   <head>
    ...
    <script type="text/javascript" src=/slideshow/smartphone-development-guide-with-coffeescript-node-html5-technology-for-perl-programmers/9704771/"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>
     ...
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
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
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 モデルは有力
Titanium Mobile
Titanium Mobile

 ? ネイティブアプリを JavaScript で
 ? Titanium Studio でビルド
    ? インタプリタ上で動く
       ? iOS : JavascriptCore / Android : Rhino
    ? JSエンジンがUIKitを操作
 ? 動的に動作確認できる
例: Cover Flow
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
例: HBFav




           https://github.com/naoya/HBFav
HBFav

 ? クライアント
   ? Titanium Mobile
   ? CoffeeScript


 ? サーバー
   ? Node.js
        ? Express
        ? xml2json
   ? Heroku
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()
Titanium Mobile あれこれ

 ? JavaScript ready
    ? CoffeeScript
    ? CommonJS ??? underscore, socket.io etc.

 ? Titanium Mobile != HTML5
    ? JavaScript だからといって HTML5 へ向かってるわけではない
    ? 「JS でネイティブ書ける」
        ? 現時点では、現実的な解


 ? 実用的だが当然、トレードオフも
    – メモリ管理不要、ダイナミック更新、ラピッドに開発可
    – ネイティブとは速度差 / 細かなチューニングが難しい
    – デバッグ環境がこなれていない
Scripting Layer for Android (SL4A)

 ? Androidアプリを Perl で
    ? ここは YAPC だぜ?

  use Android

  my $android =
    Android->new;

  $android->makeToast(
     "Hello, Android!"
  );
SL4A

 ? PhoneGap, Titanium とも別アプローチ
   ? Java アプリが "Scripting Layer" と JSON-RPC で通信
   ? Java アプリのAPIがネイティブの機能をブリッジ


 ? 本格的なアプリを作るのには向かない
   ? 速度、安定性...
クライアントサイドまとめ

? JavaScript によるネイティブブリッジFWは発展途上
  ? この方向性のフレームワークは増える
  ? PhoneGap, Titanium Mobile は"そこそこ" 実用的
     ? ※ debug しんどい


? Facebook/G+ の言う "Embedded Web Views" のFWはまだ
  ? UIWebView アプリを作りつつ
  ? ネイティブの "UI" と橋渡し

? Perl でクライアントサイドは、さすがに ...
  ? SL4A はおもちゃの領域を出ない
Node vs Perl

サーバーサイド
サーバサイド

? これまで通り Perl で書いても良いですが???
? クライアントを JS で、なら、サーバも JSで
  ? この流れは止められない
  ? Node.js : server-side JavaScript が現実的に
Node.js

 ? Perl と比较しながら见ていきたい
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
                                                (非同期)
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 との相性
npm

 $ npm install express

 cpanm Mojolicious::Lite
search.npmjs.org
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);
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"
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
xml2js

 ? Perl : XML::Simple + JSON

 parser = new xml2js.Parser()
 parser.addListener 'end', (json) ->
   console.log json

 parser.parseString xml
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
Node modules




           https://github.com/joyent/node/wiki/modules
Socket.IO

  ? WebSocket-like API
       – 抽象化 : WebSocket, xhr-polling, xhr-multipart, jsonp-polling ....
  ? Node.js の急先鋒
/* client (jade w/ express) */             /* server (app = express object) */

script(src=/slideshow/smartphone-development-guide-with-coffeescript-node-html5-technology-for-perl-programmers/9704771/&      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!"
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);
         });
   ...
サーバサイドまとめ

? Node きてる
  – スマートフォン開発のバックエンドを Node にする"必然性"はないが
  – クライアントを JS / Coffee で書くなら"優位性"はある
? npm++
  ? CommonJS ウマー
? node ??? 新しいn実装が多い
  ? Socket.IO
  ? CSS frameworks
? 一方の perl ??? 莫大な資産 = CPAN
? node / perl の pro/cons を比較して
  ? (1) アーキテクチャ
  ? 共存させるアプローチ ??? RPC, pocketio
まとめ

? スマートフォン : 今後、ネイティブから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 などのアプローチ

More Related Content

What's hot (20)

Zabbix API
Zabbix APIZabbix API
Zabbix API
Shuhei Hayashibara
?
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
?
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
?
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろうPerl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
keroyonn
?
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
Narami Kiyokura
?
GoCon 2015 Summer 骋辞の础厂罢をいじくって新しいツールを作る
GoCon 2015 Summer 骋辞の础厂罢をいじくって新しいツールを作るGoCon 2015 Summer 骋辞の础厂罢をいじくって新しいツールを作る
GoCon 2015 Summer 骋辞の础厂罢をいじくって新しいツールを作る
Masahiro Wakame
?
How Smalltalker Works
How Smalltalker WorksHow Smalltalker Works
How Smalltalker Works
Sho Yoshida
?
颁辞诲别滨驳苍颈迟别谤入门
颁辞诲别滨驳苍颈迟别谤入门颁辞诲别滨驳苍颈迟别谤入门
颁辞诲别滨驳苍颈迟别谤入门
Sho A
?
颁惭厂と笔别谤濒て?游ほ?う
颁惭厂と笔别谤濒て?游ほ?う颁惭厂と笔别谤濒て?游ほ?う
颁惭厂と笔别谤濒て?游ほ?う
Daiki Ichinose
?
鲍苍谤别补濒贰苍驳颈苍别が5日间で补蝉尘.箩蝉化できたと闻いた俺たちは…
鲍苍谤别补濒贰苍驳颈苍别が5日间で补蝉尘.箩蝉化できたと闻いた俺たちは…鲍苍谤别补濒贰苍驳颈苍别が5日间で补蝉尘.箩蝉化できたと闻いた俺たちは…
鲍苍谤别补濒贰苍驳颈苍别が5日间で补蝉尘.箩蝉化できたと闻いた俺たちは…
Kei Nakazawa
?
CGI::Application::Dispatch
CGI::Application::DispatchCGI::Application::Dispatch
CGI::Application::Dispatch
Hideo Kimura
?
Using Windows Azure
Using Windows AzureUsing Windows Azure
Using Windows Azure
Shinji Tanaka
?
颁笔础狈の依存モジュールをもう少し正しく検出したい
颁笔础狈の依存モジュールをもう少し正しく検出したい颁笔础狈の依存モジュールをもう少し正しく検出したい
颁笔础狈の依存モジュールをもう少し正しく検出したい
charsbar
?
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
Masahiro Nagano
?
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
Kohei Hoshi
?
颁丑别蹿と笔耻辫辫别迟の比较
颁丑别蹿と笔耻辫辫别迟の比较颁丑别蹿と笔耻辫辫别迟の比较
颁丑别蹿と笔耻辫辫别迟の比较
Sugawara Genki
?
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
?
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
?
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろうPerl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
keroyonn
?
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
Narami Kiyokura
?
GoCon 2015 Summer 骋辞の础厂罢をいじくって新しいツールを作る
GoCon 2015 Summer 骋辞の础厂罢をいじくって新しいツールを作るGoCon 2015 Summer 骋辞の础厂罢をいじくって新しいツールを作る
GoCon 2015 Summer 骋辞の础厂罢をいじくって新しいツールを作る
Masahiro Wakame
?
How Smalltalker Works
How Smalltalker WorksHow Smalltalker Works
How Smalltalker Works
Sho Yoshida
?
颁辞诲别滨驳苍颈迟别谤入门
颁辞诲别滨驳苍颈迟别谤入门颁辞诲别滨驳苍颈迟别谤入门
颁辞诲别滨驳苍颈迟别谤入门
Sho A
?
颁惭厂と笔别谤濒て?游ほ?う
颁惭厂と笔别谤濒て?游ほ?う颁惭厂と笔别谤濒て?游ほ?う
颁惭厂と笔别谤濒て?游ほ?う
Daiki Ichinose
?
鲍苍谤别补濒贰苍驳颈苍别が5日间で补蝉尘.箩蝉化できたと闻いた俺たちは…
鲍苍谤别补濒贰苍驳颈苍别が5日间で补蝉尘.箩蝉化できたと闻いた俺たちは…鲍苍谤别补濒贰苍驳颈苍别が5日间で补蝉尘.箩蝉化できたと闻いた俺たちは…
鲍苍谤别补濒贰苍驳颈苍别が5日间で补蝉尘.箩蝉化できたと闻いた俺たちは…
Kei Nakazawa
?
CGI::Application::Dispatch
CGI::Application::DispatchCGI::Application::Dispatch
CGI::Application::Dispatch
Hideo Kimura
?
颁笔础狈の依存モジュールをもう少し正しく検出したい
颁笔础狈の依存モジュールをもう少し正しく検出したい颁笔础狈の依存モジュールをもう少し正しく検出したい
颁笔础狈の依存モジュールをもう少し正しく検出したい
charsbar
?
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
Masahiro Nagano
?
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
Kohei Hoshi
?
颁丑别蹿と笔耻辫辫别迟の比较
颁丑别蹿と笔耻辫辫别迟の比较颁丑别蹿と笔耻辫辫别迟の比较
颁丑别蹿と笔耻辫辫别迟の比较
Sugawara Genki
?

Similar to SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for Perl Programmers (20)

13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
?
厂辞肠办别迟厂迟谤别补尘入门
厂辞肠办别迟厂迟谤别补尘入门厂辞肠办别迟厂迟谤别补尘入门
厂辞肠办别迟厂迟谤别补尘入门
Kohei Kadowaki
?
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
miso- soup3
?
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
Mori Shingo
?
Nodejs
NodejsNodejs
Nodejs
Masanobu Masuda
?
泥臭い运用から、プログラマブルインフラ构筑(に行きたい)
泥臭い运用から、プログラマブルインフラ构筑(に行きたい) 泥臭い运用から、プログラマブルインフラ构筑(に行きたい)
泥臭い运用から、プログラマブルインフラ构筑(に行きたい)
Akihiro Kuwano
?
贬罢惭尝5&补尘辫;础笔滨総まくり
贬罢惭尝5&补尘辫;础笔滨総まくり贬罢惭尝5&补尘辫;础笔滨総まくり
贬罢惭尝5&补尘辫;础笔滨総まくり
Shumpei Shiraishi
?
いまさら闯补惫补厂肠谤颈辫迟
いまさら闯补惫补厂肠谤颈辫迟いまさら闯补惫补厂肠谤颈辫迟
いまさら闯补惫补厂肠谤颈辫迟
Naomichi Yamakita
?
苍辞诲别+蝉辞肠办别迟.颈辞+别苍肠丑补苍迟.箩蝉でチャットゲーを作る
苍辞诲别+蝉辞肠办别迟.颈辞+别苍肠丑补苍迟.箩蝉でチャットゲーを作る苍辞诲别+蝉辞肠办别迟.颈辞+别苍肠丑补苍迟.箩蝉でチャットゲーを作る
苍辞诲别+蝉辞肠办别迟.颈辞+别苍肠丑补苍迟.箩蝉でチャットゲーを作る
Kiyoshi SATOH
?
densan2014-late01
densan2014-late01densan2014-late01
densan2014-late01
Takenori Nakagawa
?
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
崇之 清水
?
Backlogでの Perlのつかいかた
Backlogでの PerlのつかいかたBacklogでの Perlのつかいかた
Backlogでの Perlのつかいかた
Ryuzo Yamamoto
?
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
TanUkkii
?
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
Takao Tetsuro
?
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
Shigeru UCHIYAMA
?
尝补尘产诲补と惭辞产颈濒别の美味しいかもしれない関係
尝补尘产诲补と惭辞产颈濒别の美味しいかもしれない関係尝补尘产诲补と惭辞产颈濒别の美味しいかもしれない関係
尝补尘产诲补と惭辞产颈濒别の美味しいかもしれない関係
Hiraku Komuro
?
蝉肠补濒补+濒颈蹿迟で游ぼう
蝉肠补濒补+濒颈蹿迟で游ぼう蝉肠补濒补+濒颈蹿迟で游ぼう
蝉肠补濒补+濒颈蹿迟で游ぼう
youku
?
罢别谤谤补蹿辞谤尘て?贰颁厂+贰颁搁する话
罢别谤谤补蹿辞谤尘て?贰颁厂+贰颁搁する话罢别谤谤补蹿辞谤尘て?贰颁厂+贰颁搁する话
罢别谤谤补蹿辞谤尘て?贰颁厂+贰颁搁する话
Satoshi Hirayama
?
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiBuild 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
Tomohiro Kumagai
?
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
?
厂辞肠办别迟厂迟谤别补尘入门
厂辞肠办别迟厂迟谤别补尘入门厂辞肠办别迟厂迟谤别补尘入门
厂辞肠办别迟厂迟谤别补尘入门
Kohei Kadowaki
?
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
miso- soup3
?
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
Mori Shingo
?
泥臭い运用から、プログラマブルインフラ构筑(に行きたい)
泥臭い运用から、プログラマブルインフラ构筑(に行きたい) 泥臭い运用から、プログラマブルインフラ构筑(に行きたい)
泥臭い运用から、プログラマブルインフラ构筑(に行きたい)
Akihiro Kuwano
?
贬罢惭尝5&补尘辫;础笔滨総まくり
贬罢惭尝5&补尘辫;础笔滨総まくり贬罢惭尝5&补尘辫;础笔滨総まくり
贬罢惭尝5&补尘辫;础笔滨総まくり
Shumpei Shiraishi
?
いまさら闯补惫补厂肠谤颈辫迟
いまさら闯补惫补厂肠谤颈辫迟いまさら闯补惫补厂肠谤颈辫迟
いまさら闯补惫补厂肠谤颈辫迟
Naomichi Yamakita
?
苍辞诲别+蝉辞肠办别迟.颈辞+别苍肠丑补苍迟.箩蝉でチャットゲーを作る
苍辞诲别+蝉辞肠办别迟.颈辞+别苍肠丑补苍迟.箩蝉でチャットゲーを作る苍辞诲别+蝉辞肠办别迟.颈辞+别苍肠丑补苍迟.箩蝉でチャットゲーを作る
苍辞诲别+蝉辞肠办别迟.颈辞+别苍肠丑补苍迟.箩蝉でチャットゲーを作る
Kiyoshi SATOH
?
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
崇之 清水
?
Backlogでの Perlのつかいかた
Backlogでの PerlのつかいかたBacklogでの Perlのつかいかた
Backlogでの Perlのつかいかた
Ryuzo Yamamoto
?
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
TanUkkii
?
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
Takao Tetsuro
?
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
Shigeru UCHIYAMA
?
尝补尘产诲补と惭辞产颈濒别の美味しいかもしれない関係
尝补尘产诲补と惭辞产颈濒别の美味しいかもしれない関係尝补尘产诲补と惭辞产颈濒别の美味しいかもしれない関係
尝补尘产诲补と惭辞产颈濒别の美味しいかもしれない関係
Hiraku Komuro
?
蝉肠补濒补+濒颈蹿迟で游ぼう
蝉肠补濒补+濒颈蹿迟で游ぼう蝉肠补濒补+濒颈蹿迟で游ぼう
蝉肠补濒补+濒颈蹿迟で游ぼう
youku
?
罢别谤谤补蹿辞谤尘て?贰颁厂+贰颁搁する话
罢别谤谤补蹿辞谤尘て?贰颁厂+贰颁搁する话罢别谤谤补蹿辞谤尘て?贰颁厂+贰颁搁する话
罢别谤谤补蹿辞谤尘て?贰颁厂+贰颁搁する话
Satoshi Hirayama
?
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiBuild 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
Tomohiro Kumagai
?

More from Naoya Ito (10)

Web-Gakkai Symposium 2010
Web-Gakkai Symposium 2010Web-Gakkai Symposium 2010
Web-Gakkai Symposium 2010
Naoya Ito
?
はてなブックマークのシステムについて
はてなブックマークのシステムについてはてなブックマークのシステムについて
はてなブックマークのシステムについて
Naoya Ito
?
笔别谤濒で圧缩
笔别谤濒で圧缩笔别谤濒で圧缩
笔别谤濒で圧缩
Naoya Ito
?
Introduction to Algorithms#24 Shortest-Paths Problem
Introduction to Algorithms#24 Shortest-Paths ProblemIntroduction to Algorithms#24 Shortest-Paths Problem
Introduction to Algorithms#24 Shortest-Paths Problem
Naoya Ito
?
090518computing Huffman Code Length
090518computing Huffman Code Length090518computing Huffman Code Length
090518computing Huffman Code Length
Naoya Ito
?
スペルミス修正プログラムを作ろう
スペルミス修正プログラムを作ろうスペルミス修正プログラムを作ろう
スペルミス修正プログラムを作ろう
Naoya Ito
?
Dijkstra Algorithm
Dijkstra AlgorithmDijkstra Algorithm
Dijkstra Algorithm
Naoya Ito
?
OGC2009 はてなブックマークについて
OGC2009 はてなブックマークについてOGC2009 はてなブックマークについて
OGC2009 はてなブックマークについて
Naoya Ito
?
How to read linux kernel
How to read linux kernelHow to read linux kernel
How to read linux kernel
Naoya Ito
?
Introduction To Moco
Introduction To MocoIntroduction To Moco
Introduction To Moco
Naoya Ito
?
Web-Gakkai Symposium 2010
Web-Gakkai Symposium 2010Web-Gakkai Symposium 2010
Web-Gakkai Symposium 2010
Naoya Ito
?
はてなブックマークのシステムについて
はてなブックマークのシステムについてはてなブックマークのシステムについて
はてなブックマークのシステムについて
Naoya Ito
?
笔别谤濒で圧缩
笔别谤濒で圧缩笔别谤濒で圧缩
笔别谤濒で圧缩
Naoya Ito
?
Introduction to Algorithms#24 Shortest-Paths Problem
Introduction to Algorithms#24 Shortest-Paths ProblemIntroduction to Algorithms#24 Shortest-Paths Problem
Introduction to Algorithms#24 Shortest-Paths Problem
Naoya Ito
?
090518computing Huffman Code Length
090518computing Huffman Code Length090518computing Huffman Code Length
090518computing Huffman Code Length
Naoya Ito
?
スペルミス修正プログラムを作ろう
スペルミス修正プログラムを作ろうスペルミス修正プログラムを作ろう
スペルミス修正プログラムを作ろう
Naoya Ito
?
Dijkstra Algorithm
Dijkstra AlgorithmDijkstra Algorithm
Dijkstra Algorithm
Naoya Ito
?
OGC2009 はてなブックマークについて
OGC2009 はてなブックマークについてOGC2009 はてなブックマークについて
OGC2009 はてなブックマークについて
Naoya Ito
?
How to read linux kernel
How to read linux kernelHow to read linux kernel
How to read linux kernel
Naoya Ito
?
Introduction To Moco
Introduction To MocoIntroduction To Moco
Introduction To Moco
Naoya Ito
?

Recently uploaded (13)

ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫
ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫
ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫
ssuserfcafd1
?
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
harmonylab
?
Matching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdfMatching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdf
hirokiokuda2
?
ビットコインテストネットでの送金体験付きビットコイン?ブロックチェーン勉强会资料
ビットコインテストネットでの送金体験付きビットコイン?ブロックチェーン勉强会资料ビットコインテストネットでの送金体験付きビットコイン?ブロックチェーン勉强会资料
ビットコインテストネットでの送金体験付きビットコイン?ブロックチェーン勉强会资料
周 小渕
?
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
?
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
?
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
Matsushita Laboratory
?
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
?
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OSIoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
Tomohiro Saneyoshi
?
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
?
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
kota usuha
?
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
NTT DATA Technology & Innovation
?
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
?
ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫
ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫
ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫
ssuserfcafd1
?
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
harmonylab
?
Matching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdfMatching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdf
hirokiokuda2
?
ビットコインテストネットでの送金体験付きビットコイン?ブロックチェーン勉强会资料
ビットコインテストネットでの送金体験付きビットコイン?ブロックチェーン勉强会资料ビットコインテストネットでの送金体験付きビットコイン?ブロックチェーン勉强会资料
ビットコインテストネットでの送金体験付きビットコイン?ブロックチェーン勉强会资料
周 小渕
?
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
?
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
?
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
Matsushita Laboratory
?
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
?
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OSIoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
Tomohiro Saneyoshi
?
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
?
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
kota usuha
?
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
NTT DATA Technology & Innovation
?
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
?

SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for Perl Programmers

  • 2. キーワード ? PhoneGap ? Titanium Mobile ? CoffeeScript ? Node.js ? Socket.IO ? Express ? npm ? …
  • 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 で書ける?
  • 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 = /slideshow/smartphone-development-guide-with-coffeescript-node-html5-technology-for-perl-programmers/9704771/"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=/slideshow/smartphone-development-guide-with-coffeescript-node-html5-technology-for-perl-programmers/9704771/"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 モデルは有力
  • 21. Titanium Mobile ? ネイティブアプリを JavaScript で ? Titanium Studio でビルド ? インタプリタ上で動く ? iOS : JavascriptCore / Android : Rhino ? JSエンジンがUIKitを操作 ? 動的に動作確認できる
  • 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 はおもちゃの領域を出ない
  • 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
  • 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=/slideshow/smartphone-development-guide-with-coffeescript-node-html5-technology-for-perl-programmers/9704771/& 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 などのアプローチ