SlideShare a Scribd company logo
1 of 35
Download to read offline
Scala は Edison の夢を見る
jvmlang.daitokai 1.0.0
2015-02-28
西本 圭佑 @keisuke_n
2015-02-28 jvmlang.daitokai.1.0.0 2
自己紹介
● @keisuke_n ♂
●
仕事
– Web アプリ作成が主
●
趣味
– Web/Database ヲレヲレフレームワークの開発
● Web Flavor, DB Flavor
– 宇宙開発ウォッチャ
– プチ鉄道ヲタク
– 時々電子工作
– etc.etc....
2015-02-28 jvmlang.daitokai.1.0.0 3
ファイラー編
Scala は Edison の夢を見る
2015-02-28 jvmlang.daitokai.1.0.0 4
ファイラー編
2015-02-28 jvmlang.daitokai.1.0.0 5
ファイラー編 : 機能
● Caffeine View for Web
● Web ブラウザで操作するファイラー
● 今プレゼンしてる画面そのもの ( ビューア機能 )
● ファイルリスト表示 ( ソート付 )
● アップロード , 名前の変更 , 削除 , ディレクトリ作成
● ビューア ( 画像などの表示 )
2015-02-28 jvmlang.daitokai.1.0.0 6
ファイラー編 : 動作環境
● サーバ : Intel Edison
– Apache Tomcat 8
– Scala 2.10
– Web Flavor ( 自作 )
● クライアント : Web ブラウザ
– Caffe Mobile UI ( 自作 )
– Zepto.js (jQuery 互換 )
2015-02-28 jvmlang.daitokai.1.0.0 7
Scala は Edison の夢を見る
閑話休題
Intel Edison って何 ?
2015-02-28 jvmlang.daitokai.1.0.0 8
Intel Edison って何 ?
● Intel Edison for Arduino
Edison 本体 Arduino 互換ボード
2015-02-28 jvmlang.daitokai.1.0.0 9
Intel Edison って何 ?: ハード
● Intel Edison
– Intel が提供している x86 IoT デバイス
– Atom SoC(Silvermont) 500MHz, 2 Core
– Quark MCU 100MHz
– メモリ 1GB, ストレージ 4GB
– WiFi, Bluetooth
– SD カードインターフェース
– USB インターフェース
– その他 I/O ポート ( デジタル入出力 , アナログ入力 )
2015-02-28 jvmlang.daitokai.1.0.0 10
Intel Edison って何 ?: ソフト
● Yocto Linux
●
バイナリ
– 一般的な Unix 互換ツール
– node.js
– gcc
● Arduino IDE
– Arduino 互換開発環境
●
それ以外は自分でインストール
● 買ったその時から開発可能
2015-02-28 jvmlang.daitokai.1.0.0 11
Intel Edison って何 ?: Scala 導入
● JDK
– Linux x86 版 JDK をダウンロード
– Wifi 経由で SCP
– JDK インストーラ実行
● Apache Tomcat
– /home/{user} などに配備
● Scala
– /home/{user} などに配備
●
普通の Linux 感覚で Ok
2015-02-28 jvmlang.daitokai.1.0.0 12
Scala は Edison の夢を見る
Scala REPL 編
2015-02-28 jvmlang.daitokai.1.0.0 13
Scala REPL 編
2015-02-28 jvmlang.daitokai.1.0.0 14
Scala REPL 編 : 機能 環境・
● Caffe Scala REPL
● Web ブラウザベースの Scala REPL 実行環境
● サーバ上で Scala のインタプリタ動作
● ブラウザ上で実行結果を表示
● Apache Tomcat
● Scala 2.10
● Web Flavor
● Intel Edison
2015-02-28 jvmlang.daitokai.1.0.0 15
Scala REPL 編 : コレクション
● リスト
– List(1, 2, 3)
– 1 :: 2 :: 3 :: Nil
– List(“foo”, “bar”, “buzz”)
– “foo” :: “bar” :: “buzz” :: Nil
● 範囲オブジェクト
– (0 until 10)
– (1 to 100)
2015-02-28 jvmlang.daitokai.1.0.0 16
Scala REPL 編 : コレクション
● foreach
– List(1, 2, 3).foreachforeach {println(_)}
● map
– (1 to 10).mapmap {_ * 2}
● filter
– (1 to 10).filterfilter {_ % 3 == 0}
● foldLeft, reduceLeft
– (1 to 10).foldLeftfoldLeft(0) {_ + _}
– (1 to 10).reduceLeftreduceLeft {_ + _}
2015-02-28 jvmlang.daitokai.1.0.0 17
Scala REPL 編 : コレクション
● collect
(1 to 10).collectcollect {
case n if n % 2 == 0 => 2 -> n
case n if n % 3 == 0 => 3 -> n
}
● groupBy
(1 to 10).groupBygroupBy {_ % 3}
● mkString
(1 to 10).mkStringmkString(“,”)
2015-02-28 jvmlang.daitokai.1.0.0 18
Scala REPL 編 : コレクション
● par
– Parallel Collections( 並列コレクション )
– foreach, map, filter, などの標準的なメソッド完備
– 同時処理を行うので順番は保証されない
– 1 から 10000 を足す
– reduce
● (1 to 10000).parpar.reduce {_ + _}
2015-02-28 jvmlang.daitokai.1.0.0 19
Scala REPL 編 : コレクション
● 落ち着け、落ち着いて素数を数えるんだ…
def isPrimeNo(n: Int): Boolean = n match {
case n if n < 2 => false
case n => (2 until n).forall {n % _ != 0}
}
(1 to 10).filter {isPrimeNo(_)}
2015-02-28 jvmlang.daitokai.1.0.0 20
Scala REPL 編 : コレクション
● 落ち着け、落ち着いてフィボナッチ数列を唱えるんだ…
def fib(n: Int): Int =
if (n < 2) n
else fib(n – 2) + fib(n – 1)
(1 to 10).map {fib(_)}
2015-02-28 jvmlang.daitokai.1.0.0 21
Scala REPL 編 : コレクション
● FizzBuzz であほに ...
def fizzBuzz(n: Int): String = n match {
case n if n % 3 == 0 && n % 5 == 0 => "FizzBuzz"
case n if n % 3 == 0 => "Fizz"
case n if n % 5 == 0 => "Buzz"
case n => n.toString
}
(1 to 20).map {fizzBuzz(_)}
2015-02-28 jvmlang.daitokai.1.0.0 22
Scala REPL 編 : L チカ
● L チカって ?
– たぶん LED チカチカ
● どんな意味があるの ?
– 特にない、自己満足
– 電子工作の Hello, world!
2015-02-28 jvmlang.daitokai.1.0.0 23
Scala REPL 編 : L チカ : ハード編
● Arduino 互換 GPIO を使う
● そこに LED をつなぐ
● ただし電流をあまり流せないのでバッファ回路を付ける
● あとはソフト側からそれを直接叩くだけ
2015-02-28 jvmlang.daitokai.1.0.0 24
Scala REPL 編 : L チカ : ソフト編
– デバイスファイルを開いて入出力
● /sys/class/gpio/....
● 今回は自作した
– あるいは mraa というライブラリを使う
● Low Level Skeleton Library
● http://iotdk.intel.com/docs/master/mraa/
● 通常はこっちを使う
● でもなぜか少なくない人が直接叩いてる w
2015-02-28 jvmlang.daitokai.1.0.0 25
Scala REPL 編 : L チカ : ソフト編
● 自作ライブラリのおまじない
import ....GPIO
val led = new GPIO(7)
● LED 点灯
led.highhigh
● LED 消灯
● led.lowlow
2015-02-28 jvmlang.daitokai.1.0.0 26
Scala REPL 編 : L チカ : ソフト編
●
LED 点滅
def blink(n: Int, w: Int = 500): Unit =
(0 until n).foreach {i =>
led.highhigh
sleep(w)
led.lowlow
sleep(w)
}
blink(5)
2015-02-28 jvmlang.daitokai.1.0.0 27
Scala REPL 編 : L チカ : ソフト編
● LED ほわっと点滅
def fadeBlink(n: Int): Unit = (0 until n).foreach {i =>
(1 to 20).foreach {j =>
led.highhigh; sleep(j); led.lowlow; sleep(20 - j)
}
(1 to 20).foreach {j =>
led.highhigh; sleep(20 – j); led.lowlow; sleep(j)
}
}
fadeBlink(5)
2015-02-28 jvmlang.daitokai.1.0.0 28
Scala REPL 編 : L チカ : ソフト編
● 落ち着け、落ち着いて素数を数えるんだ… LED 編
(1 to 10).
filter {isPrimeNo(_)}.
foreach {n => blink(n); sleep(1000)}
2015-02-28 jvmlang.daitokai.1.0.0 29
Scala REPL 編 : L チカ : ソフト編
● 落ち着け、落ち着いてフィボナッチ数列を唱えるんだ…
LED 編
(1 to 5).
map {fib(_)}.
foreach {n => blink(n); sleep(1000)}
2015-02-28 jvmlang.daitokai.1.0.0 30
Scala REPL 編 : L チカ : ソフト編
●
バイナリを数える
def writeBinary(v: Int): Unit =
leds.foldLeft(1) {(r, led) =>
led.write((v & r) != 0); r << 1
}
(1 to 5).map {fib(_)}.foreach {n =>
blink(n); sleep(1000)
}
2015-02-28 jvmlang.daitokai.1.0.0 31
Scala REPL 編 : L チカ : ソフト編
●
ないとらいだー
def writeBit(n: Int): Unit = leds.zipWithIndex.foreach {case (led, i) =>
led.write(i == n)
}
(0 until 5).foreach {t =>
(0 until leds.length).foreach {n =>
writeBit(n); sleep(100)
}
(0 until leds.length).foreach {n =>
writeBit(leds.length - 1 - n); sleep(100)
}
}
2015-02-28 jvmlang.daitokai.1.0.0 32
最後に
という夢だったのさ ...
終わり
2015-02-28 jvmlang.daitokai.1.0.0 33
Appendix: GPIO ソース
object GPIO {
import java.io._
final val Low = "0".getBytes("ISO-8859-1")
final val High = "1".getBytes("ISO-8859-1")
final val PullupEnables = List(
216, 217, 218, 219, 220, 221, 222, 223, 224,
225, 226, 227, 228, 229
)
def export(no: Int): Unit = {
val pullup = PullupEnables(no)
writeNative("/sys/class/gpio/export",
pullup.toString)
writeNative(s"/sys/class/gpio/gpio$
{pullup}/direction", "out")
}
def openValue(no: Int): OutputStream = {
val pullup = PullupEnables(no)
new FileOutputStream(s"/sys/class/gpio/gpio$
{pullup}/value")
}
def writeValue(outp: OutputStream, value:
Boolean): Unit = {
outp.write(if (value) High else Low)
outp.flush
}
def unexport(no: Int): Unit = {
val pullup = PullupEnables(no)
writeNative("/sys/class/gpio/unexport",
pullup.toString)
}
def writeNative(path: String, value: String): Unit
= {
val outp = new FileOutputStream(path)
try {
outp.write(value.getBytes("ISO-8859-1"))
} finally {
outp.close
}
}
}
2015-02-28 jvmlang.daitokai.1.0.0 34
Appendix: GPIO ソース
class GPIO(no: Int) {
val outp = {
GPIO.unexport(no)
GPIO.export(no)
GPIO.openValue(no)
}
def write(value: Boolean):
Unit = GPIO.writeValue(outp,
value)
def high: Unit = write(true)
def low: Unit = write(false)
def close: Unit = {
try {
outp.close
} catch {
case t: Throwable =>
log(s"${t.getClass.getName}:
${t.getMessage}")
} finally {
GPIO.unexport(no)
}
}
2015-02-28 jvmlang.daitokai.1.0.0 35
Appendix: sleep ソース
def sleep(w: Int): Unit = {
val s = System.nanoTime
val e = s + w * 1000000L
while (e > System.nanoTime) {
Thread.`yield`()
}
}

More Related Content

Viewers also liked

Prueba
PruebaPrueba
Pruebafacc
 
60 Election
60 Election60 Election
60 Electiondschall
 
Data URI scheme: okayama-js-2
Data URI scheme: okayama-js-2Data URI scheme: okayama-js-2
Data URI scheme: okayama-js-2NISHIMOTO Keisuke
 
第8回 天領倉敷 ScalaScala In Kurashiki 8
第8回 天領倉敷 ScalaScala In Kurashiki 8第8回 天領倉敷 ScalaScala In Kurashiki 8
第8回 天領倉敷 ScalaScala In Kurashiki 8NISHIMOTO Keisuke
 
Civil Rights 1964-1967
Civil Rights 1964-1967Civil Rights 1964-1967
Civil Rights 1964-1967dschall
 
End Of The War
End Of The WarEnd Of The War
End Of The Wardschall
 
Ike FP: Soviet Union
Ike FP: Soviet UnionIke FP: Soviet Union
Ike FP: Soviet Uniondschall
 
Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1NISHIMOTO Keisuke
 
3D Photo Tool by Ruby/Sinatra + JavaScript
3D Photo Tool by Ruby/Sinatra + JavaScript3D Photo Tool by Ruby/Sinatra + JavaScript
3D Photo Tool by Ruby/Sinatra + JavaScriptNISHIMOTO Keisuke
 
緑達の日常(仮): 第25回オープンラボ岡山
緑達の日常(仮): 第25回オープンラボ岡山緑達の日常(仮): 第25回オープンラボ岡山
緑達の日常(仮): 第25回オープンラボ岡山NISHIMOTO Keisuke
 
Ruby Ben Kansai19 From Scala To Ruby
Ruby Ben Kansai19 From Scala To RubyRuby Ben Kansai19 From Scala To Ruby
Ruby Ben Kansai19 From Scala To RubyNISHIMOTO Keisuke
 
Ruby/PureImage: 第2回岡山Ruby会議LT
Ruby/PureImage: 第2回岡山Ruby会議LTRuby/PureImage: 第2回岡山Ruby会議LT
Ruby/PureImage: 第2回岡山Ruby会議LTNISHIMOTO Keisuke
 
Gulf of Tonkin
Gulf of TonkinGulf of Tonkin
Gulf of Tonkindschall
 
Vietnam Board 2007
Vietnam Board 2007Vietnam Board 2007
Vietnam Board 2007dschall
 
Vietnam: Introductory Notes
Vietnam: Introductory NotesVietnam: Introductory Notes
Vietnam: Introductory Notesdschall
 

Viewers also liked (19)

Scalaで実装するGC
Scalaで実装するGCScalaで実装するGC
Scalaで実装するGC
 
Prueba
PruebaPrueba
Prueba
 
60 Election
60 Election60 Election
60 Election
 
Data URI scheme: okayama-js-2
Data URI scheme: okayama-js-2Data URI scheme: okayama-js-2
Data URI scheme: okayama-js-2
 
第8回 天領倉敷 ScalaScala In Kurashiki 8
第8回 天領倉敷 ScalaScala In Kurashiki 8第8回 天領倉敷 ScalaScala In Kurashiki 8
第8回 天領倉敷 ScalaScala In Kurashiki 8
 
Civil Rights 1964-1967
Civil Rights 1964-1967Civil Rights 1964-1967
Civil Rights 1964-1967
 
End Of The War
End Of The WarEnd Of The War
End Of The War
 
Ike FP: Soviet Union
Ike FP: Soviet UnionIke FP: Soviet Union
Ike FP: Soviet Union
 
Suburbs
SuburbsSuburbs
Suburbs
 
Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1
 
3D Photo Tool by Ruby/Sinatra + JavaScript
3D Photo Tool by Ruby/Sinatra + JavaScript3D Photo Tool by Ruby/Sinatra + JavaScript
3D Photo Tool by Ruby/Sinatra + JavaScript
 
緑達の日常(仮): 第25回オープンラボ岡山
緑達の日常(仮): 第25回オープンラボ岡山緑達の日常(仮): 第25回オープンラボ岡山
緑達の日常(仮): 第25回オープンラボ岡山
 
Ruby Ben Kansai19 From Scala To Ruby
Ruby Ben Kansai19 From Scala To RubyRuby Ben Kansai19 From Scala To Ruby
Ruby Ben Kansai19 From Scala To Ruby
 
Hokuriku Scala 1
Hokuriku Scala 1Hokuriku Scala 1
Hokuriku Scala 1
 
Ruby/PureImage: 第2回岡山Ruby会議LT
Ruby/PureImage: 第2回岡山Ruby会議LTRuby/PureImage: 第2回岡山Ruby会議LT
Ruby/PureImage: 第2回岡山Ruby会議LT
 
Gulf of Tonkin
Gulf of TonkinGulf of Tonkin
Gulf of Tonkin
 
Vietnam Board 2007
Vietnam Board 2007Vietnam Board 2007
Vietnam Board 2007
 
Air War
Air WarAir War
Air War
 
Vietnam: Introductory Notes
Vietnam: Introductory NotesVietnam: Introductory Notes
Vietnam: Introductory Notes
 

Similar to jvmlang.daitokai 1: ScalaはEdisonの夢を見る

Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless DesignSmart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless DesignRyuji TAKEHARA
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1Makoto Haruyama
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Ra Zon
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesTakeshi Komiya
 
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングScalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングJun Saito
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Ra Zon
 
イチからはじめるLuarida-マイコン
イチからはじめるLuarida-マイコンイチからはじめるLuarida-マイコン
イチからはじめるLuarida-マイコン三七男 山本
 
今すぐ始めるArduino
今すぐ始めるArduino今すぐ始めるArduino
今すぐ始めるArduinofuna3
 
Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編Masaru Oki
 
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門Hisakuni Fujimoto
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてt-sin
 
SwiftでRiemann球面を扱う
SwiftでRiemann球面を扱うSwiftでRiemann球面を扱う
SwiftでRiemann球面を扱うhayato iida
 
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Hiroshi Yoshida
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 
HTML5 技術を利用した授業や会議向けデスクトップ画面実時間配信システムとその管理システムの試作, 情報処理学会IOT研究会26
HTML5 技術を利用した授業や会議向けデスクトップ画面実時間配信システムとその管理システムの試作, 情報処理学会IOT研究会26HTML5 技術を利用した授業や会議向けデスクトップ画面実時間配信システムとその管理システムの試作, 情報処理学会IOT研究会26
HTML5 技術を利用した授業や会議向けデスクトップ画面実時間配信システムとその管理システムの試作, 情報処理学会IOT研究会26Takashi Yamanoue
 

Similar to jvmlang.daitokai 1: ScalaはEdisonの夢を見る (20)

Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless DesignSmart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless Design
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
 
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングScalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミング
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 
イチからはじめるLuarida-マイコン
イチからはじめるLuarida-マイコンイチからはじめるLuarida-マイコン
イチからはじめるLuarida-マイコン
 
今すぐ始めるArduino
今すぐ始めるArduino今すぐ始めるArduino
今すぐ始めるArduino
 
scala-kaigi1-sbt
scala-kaigi1-sbtscala-kaigi1-sbt
scala-kaigi1-sbt
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
 
ScalaCL in ScalaKaigi
ScalaCL in ScalaKaigiScalaCL in ScalaKaigi
ScalaCL in ScalaKaigi
 
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
 
SwiftでRiemann球面を扱う
SwiftでRiemann球面を扱うSwiftでRiemann球面を扱う
SwiftでRiemann球面を扱う
 
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
HTML5 技術を利用した授業や会議向けデスクトップ画面実時間配信システムとその管理システムの試作, 情報処理学会IOT研究会26
HTML5 技術を利用した授業や会議向けデスクトップ画面実時間配信システムとその管理システムの試作, 情報処理学会IOT研究会26HTML5 技術を利用した授業や会議向けデスクトップ画面実時間配信システムとその管理システムの試作, 情報処理学会IOT研究会26
HTML5 技術を利用した授業や会議向けデスクトップ画面実時間配信システムとその管理システムの試作, 情報処理学会IOT研究会26
 

More from NISHIMOTO Keisuke

3Dプリンタの出力は遅いのでどうにかしたい
3Dプリンタの出力は遅いのでどうにかしたい3Dプリンタの出力は遅いのでどうにかしたい
3Dプリンタの出力は遅いのでどうにかしたいNISHIMOTO Keisuke
 
第2回IoT勉強会 in 岡山 | 2部 IoTデバイスを触ってみよう!
第2回IoT勉強会 in 岡山 | 2部 IoTデバイスを触ってみよう!第2回IoT勉強会 in 岡山 | 2部 IoTデバイスを触ってみよう!
第2回IoT勉強会 in 岡山 | 2部 IoTデバイスを触ってみよう!NISHIMOTO Keisuke
 
第2回IoT勉強会 in 岡山 オープニング
第2回IoT勉強会 in 岡山 オープニング第2回IoT勉強会 in 岡山 オープニング
第2回IoT勉強会 in 岡山 オープニングNISHIMOTO Keisuke
 
IoTの概要・IoT界隈の動向
IoTの概要・IoT界隈の動向IoTの概要・IoT界隈の動向
IoTの概要・IoT界隈の動向NISHIMOTO Keisuke
 
パンジャンドラム (忘年会議2018)
パンジャンドラム (忘年会議2018)パンジャンドラム (忘年会議2018)
パンジャンドラム (忘年会議2018)NISHIMOTO Keisuke
 
第4回宇宙開発勉強会 in 岡山: 宇宙開発トピック
第4回宇宙開発勉強会 in 岡山: 宇宙開発トピック第4回宇宙開発勉強会 in 岡山: 宇宙開発トピック
第4回宇宙開発勉強会 in 岡山: 宇宙開発トピックNISHIMOTO Keisuke
 
Movidius Neral Compute Stickを使ってみた
Movidius Neral Compute Stickを使ってみたMovidius Neral Compute Stickを使ってみた
Movidius Neral Compute Stickを使ってみたNISHIMOTO Keisuke
 
LE-9: 第1回宇宙開発勉強会 in 岡山
LE-9: 第1回宇宙開発勉強会 in 岡山LE-9: 第1回宇宙開発勉強会 in 岡山
LE-9: 第1回宇宙開発勉強会 in 岡山NISHIMOTO Keisuke
 
3Dプリンタことはじめ
3Dプリンタことはじめ3Dプリンタことはじめ
3DプリンタことはじめNISHIMOTO Keisuke
 

More from NISHIMOTO Keisuke (10)

3Dプリンタの出力は遅いのでどうにかしたい
3Dプリンタの出力は遅いのでどうにかしたい3Dプリンタの出力は遅いのでどうにかしたい
3Dプリンタの出力は遅いのでどうにかしたい
 
第2回IoT勉強会 in 岡山 | 2部 IoTデバイスを触ってみよう!
第2回IoT勉強会 in 岡山 | 2部 IoTデバイスを触ってみよう!第2回IoT勉強会 in 岡山 | 2部 IoTデバイスを触ってみよう!
第2回IoT勉強会 in 岡山 | 2部 IoTデバイスを触ってみよう!
 
Jetson Nano Lチカ
Jetson Nano LチカJetson Nano Lチカ
Jetson Nano Lチカ
 
第2回IoT勉強会 in 岡山 オープニング
第2回IoT勉強会 in 岡山 オープニング第2回IoT勉強会 in 岡山 オープニング
第2回IoT勉強会 in 岡山 オープニング
 
IoTの概要・IoT界隈の動向
IoTの概要・IoT界隈の動向IoTの概要・IoT界隈の動向
IoTの概要・IoT界隈の動向
 
パンジャンドラム (忘年会議2018)
パンジャンドラム (忘年会議2018)パンジャンドラム (忘年会議2018)
パンジャンドラム (忘年会議2018)
 
第4回宇宙開発勉強会 in 岡山: 宇宙開発トピック
第4回宇宙開発勉強会 in 岡山: 宇宙開発トピック第4回宇宙開発勉強会 in 岡山: 宇宙開発トピック
第4回宇宙開発勉強会 in 岡山: 宇宙開発トピック
 
Movidius Neral Compute Stickを使ってみた
Movidius Neral Compute Stickを使ってみたMovidius Neral Compute Stickを使ってみた
Movidius Neral Compute Stickを使ってみた
 
LE-9: 第1回宇宙開発勉強会 in 岡山
LE-9: 第1回宇宙開発勉強会 in 岡山LE-9: 第1回宇宙開発勉強会 in 岡山
LE-9: 第1回宇宙開発勉強会 in 岡山
 
3Dプリンタことはじめ
3Dプリンタことはじめ3Dプリンタことはじめ
3Dプリンタことはじめ
 

jvmlang.daitokai 1: ScalaはEdisonの夢を見る

  • 1. Scala は Edison の夢を見る jvmlang.daitokai 1.0.0 2015-02-28 西本 圭佑 @keisuke_n
  • 2. 2015-02-28 jvmlang.daitokai.1.0.0 2 自己紹介 ● @keisuke_n ♂ ● 仕事 – Web アプリ作成が主 ● 趣味 – Web/Database ヲレヲレフレームワークの開発 ● Web Flavor, DB Flavor – 宇宙開発ウォッチャ – プチ鉄道ヲタク – 時々電子工作 – etc.etc....
  • 5. 2015-02-28 jvmlang.daitokai.1.0.0 5 ファイラー編 : 機能 ● Caffeine View for Web ● Web ブラウザで操作するファイラー ● 今プレゼンしてる画面そのもの ( ビューア機能 ) ● ファイルリスト表示 ( ソート付 ) ● アップロード , 名前の変更 , 削除 , ディレクトリ作成 ● ビューア ( 画像などの表示 )
  • 6. 2015-02-28 jvmlang.daitokai.1.0.0 6 ファイラー編 : 動作環境 ● サーバ : Intel Edison – Apache Tomcat 8 – Scala 2.10 – Web Flavor ( 自作 ) ● クライアント : Web ブラウザ – Caffe Mobile UI ( 自作 ) – Zepto.js (jQuery 互換 )
  • 7. 2015-02-28 jvmlang.daitokai.1.0.0 7 Scala は Edison の夢を見る 閑話休題 Intel Edison って何 ?
  • 8. 2015-02-28 jvmlang.daitokai.1.0.0 8 Intel Edison って何 ? ● Intel Edison for Arduino Edison 本体 Arduino 互換ボード
  • 9. 2015-02-28 jvmlang.daitokai.1.0.0 9 Intel Edison って何 ?: ハード ● Intel Edison – Intel が提供している x86 IoT デバイス – Atom SoC(Silvermont) 500MHz, 2 Core – Quark MCU 100MHz – メモリ 1GB, ストレージ 4GB – WiFi, Bluetooth – SD カードインターフェース – USB インターフェース – その他 I/O ポート ( デジタル入出力 , アナログ入力 )
  • 10. 2015-02-28 jvmlang.daitokai.1.0.0 10 Intel Edison って何 ?: ソフト ● Yocto Linux ● バイナリ – 一般的な Unix 互換ツール – node.js – gcc ● Arduino IDE – Arduino 互換開発環境 ● それ以外は自分でインストール ● 買ったその時から開発可能
  • 11. 2015-02-28 jvmlang.daitokai.1.0.0 11 Intel Edison って何 ?: Scala 導入 ● JDK – Linux x86 版 JDK をダウンロード – Wifi 経由で SCP – JDK インストーラ実行 ● Apache Tomcat – /home/{user} などに配備 ● Scala – /home/{user} などに配備 ● 普通の Linux 感覚で Ok
  • 12. 2015-02-28 jvmlang.daitokai.1.0.0 12 Scala は Edison の夢を見る Scala REPL 編
  • 14. 2015-02-28 jvmlang.daitokai.1.0.0 14 Scala REPL 編 : 機能 環境・ ● Caffe Scala REPL ● Web ブラウザベースの Scala REPL 実行環境 ● サーバ上で Scala のインタプリタ動作 ● ブラウザ上で実行結果を表示 ● Apache Tomcat ● Scala 2.10 ● Web Flavor ● Intel Edison
  • 15. 2015-02-28 jvmlang.daitokai.1.0.0 15 Scala REPL 編 : コレクション ● リスト – List(1, 2, 3) – 1 :: 2 :: 3 :: Nil – List(“foo”, “bar”, “buzz”) – “foo” :: “bar” :: “buzz” :: Nil ● 範囲オブジェクト – (0 until 10) – (1 to 100)
  • 16. 2015-02-28 jvmlang.daitokai.1.0.0 16 Scala REPL 編 : コレクション ● foreach – List(1, 2, 3).foreachforeach {println(_)} ● map – (1 to 10).mapmap {_ * 2} ● filter – (1 to 10).filterfilter {_ % 3 == 0} ● foldLeft, reduceLeft – (1 to 10).foldLeftfoldLeft(0) {_ + _} – (1 to 10).reduceLeftreduceLeft {_ + _}
  • 17. 2015-02-28 jvmlang.daitokai.1.0.0 17 Scala REPL 編 : コレクション ● collect (1 to 10).collectcollect { case n if n % 2 == 0 => 2 -> n case n if n % 3 == 0 => 3 -> n } ● groupBy (1 to 10).groupBygroupBy {_ % 3} ● mkString (1 to 10).mkStringmkString(“,”)
  • 18. 2015-02-28 jvmlang.daitokai.1.0.0 18 Scala REPL 編 : コレクション ● par – Parallel Collections( 並列コレクション ) – foreach, map, filter, などの標準的なメソッド完備 – 同時処理を行うので順番は保証されない – 1 から 10000 を足す – reduce ● (1 to 10000).parpar.reduce {_ + _}
  • 19. 2015-02-28 jvmlang.daitokai.1.0.0 19 Scala REPL 編 : コレクション ● 落ち着け、落ち着いて素数を数えるんだ… def isPrimeNo(n: Int): Boolean = n match { case n if n < 2 => false case n => (2 until n).forall {n % _ != 0} } (1 to 10).filter {isPrimeNo(_)}
  • 20. 2015-02-28 jvmlang.daitokai.1.0.0 20 Scala REPL 編 : コレクション ● 落ち着け、落ち着いてフィボナッチ数列を唱えるんだ… def fib(n: Int): Int = if (n < 2) n else fib(n – 2) + fib(n – 1) (1 to 10).map {fib(_)}
  • 21. 2015-02-28 jvmlang.daitokai.1.0.0 21 Scala REPL 編 : コレクション ● FizzBuzz であほに ... def fizzBuzz(n: Int): String = n match { case n if n % 3 == 0 && n % 5 == 0 => "FizzBuzz" case n if n % 3 == 0 => "Fizz" case n if n % 5 == 0 => "Buzz" case n => n.toString } (1 to 20).map {fizzBuzz(_)}
  • 22. 2015-02-28 jvmlang.daitokai.1.0.0 22 Scala REPL 編 : L チカ ● L チカって ? – たぶん LED チカチカ ● どんな意味があるの ? – 特にない、自己満足 – 電子工作の Hello, world!
  • 23. 2015-02-28 jvmlang.daitokai.1.0.0 23 Scala REPL 編 : L チカ : ハード編 ● Arduino 互換 GPIO を使う ● そこに LED をつなぐ ● ただし電流をあまり流せないのでバッファ回路を付ける ● あとはソフト側からそれを直接叩くだけ
  • 24. 2015-02-28 jvmlang.daitokai.1.0.0 24 Scala REPL 編 : L チカ : ソフト編 – デバイスファイルを開いて入出力 ● /sys/class/gpio/.... ● 今回は自作した – あるいは mraa というライブラリを使う ● Low Level Skeleton Library ● http://iotdk.intel.com/docs/master/mraa/ ● 通常はこっちを使う ● でもなぜか少なくない人が直接叩いてる w
  • 25. 2015-02-28 jvmlang.daitokai.1.0.0 25 Scala REPL 編 : L チカ : ソフト編 ● 自作ライブラリのおまじない import ....GPIO val led = new GPIO(7) ● LED 点灯 led.highhigh ● LED 消灯 ● led.lowlow
  • 26. 2015-02-28 jvmlang.daitokai.1.0.0 26 Scala REPL 編 : L チカ : ソフト編 ● LED 点滅 def blink(n: Int, w: Int = 500): Unit = (0 until n).foreach {i => led.highhigh sleep(w) led.lowlow sleep(w) } blink(5)
  • 27. 2015-02-28 jvmlang.daitokai.1.0.0 27 Scala REPL 編 : L チカ : ソフト編 ● LED ほわっと点滅 def fadeBlink(n: Int): Unit = (0 until n).foreach {i => (1 to 20).foreach {j => led.highhigh; sleep(j); led.lowlow; sleep(20 - j) } (1 to 20).foreach {j => led.highhigh; sleep(20 – j); led.lowlow; sleep(j) } } fadeBlink(5)
  • 28. 2015-02-28 jvmlang.daitokai.1.0.0 28 Scala REPL 編 : L チカ : ソフト編 ● 落ち着け、落ち着いて素数を数えるんだ… LED 編 (1 to 10). filter {isPrimeNo(_)}. foreach {n => blink(n); sleep(1000)}
  • 29. 2015-02-28 jvmlang.daitokai.1.0.0 29 Scala REPL 編 : L チカ : ソフト編 ● 落ち着け、落ち着いてフィボナッチ数列を唱えるんだ… LED 編 (1 to 5). map {fib(_)}. foreach {n => blink(n); sleep(1000)}
  • 30. 2015-02-28 jvmlang.daitokai.1.0.0 30 Scala REPL 編 : L チカ : ソフト編 ● バイナリを数える def writeBinary(v: Int): Unit = leds.foldLeft(1) {(r, led) => led.write((v & r) != 0); r << 1 } (1 to 5).map {fib(_)}.foreach {n => blink(n); sleep(1000) }
  • 31. 2015-02-28 jvmlang.daitokai.1.0.0 31 Scala REPL 編 : L チカ : ソフト編 ● ないとらいだー def writeBit(n: Int): Unit = leds.zipWithIndex.foreach {case (led, i) => led.write(i == n) } (0 until 5).foreach {t => (0 until leds.length).foreach {n => writeBit(n); sleep(100) } (0 until leds.length).foreach {n => writeBit(leds.length - 1 - n); sleep(100) } }
  • 33. 2015-02-28 jvmlang.daitokai.1.0.0 33 Appendix: GPIO ソース object GPIO { import java.io._ final val Low = "0".getBytes("ISO-8859-1") final val High = "1".getBytes("ISO-8859-1") final val PullupEnables = List( 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229 ) def export(no: Int): Unit = { val pullup = PullupEnables(no) writeNative("/sys/class/gpio/export", pullup.toString) writeNative(s"/sys/class/gpio/gpio$ {pullup}/direction", "out") } def openValue(no: Int): OutputStream = { val pullup = PullupEnables(no) new FileOutputStream(s"/sys/class/gpio/gpio$ {pullup}/value") } def writeValue(outp: OutputStream, value: Boolean): Unit = { outp.write(if (value) High else Low) outp.flush } def unexport(no: Int): Unit = { val pullup = PullupEnables(no) writeNative("/sys/class/gpio/unexport", pullup.toString) } def writeNative(path: String, value: String): Unit = { val outp = new FileOutputStream(path) try { outp.write(value.getBytes("ISO-8859-1")) } finally { outp.close } } }
  • 34. 2015-02-28 jvmlang.daitokai.1.0.0 34 Appendix: GPIO ソース class GPIO(no: Int) { val outp = { GPIO.unexport(no) GPIO.export(no) GPIO.openValue(no) } def write(value: Boolean): Unit = GPIO.writeValue(outp, value) def high: Unit = write(true) def low: Unit = write(false) def close: Unit = { try { outp.close } catch { case t: Throwable => log(s"${t.getClass.getName}: ${t.getMessage}") } finally { GPIO.unexport(no) } }
  • 35. 2015-02-28 jvmlang.daitokai.1.0.0 35 Appendix: sleep ソース def sleep(w: Int): Unit = { val s = System.nanoTime val e = s + w * 1000000L while (e > System.nanoTime) { Thread.`yield`() } }