GooglePlayにアプリ公開しました!(らくでん -楽天でんわ用アプリ-)
Let's Leap motion(ちょっと遊んでみる)
もはやこの手のデバイスならお約束張りのコイツをさっそく動かしてみようと思ふ
ちなみに写ってるのはLeapmotion用のサイト「Airspace」。
で、GoogleEarthさんをLeapmotionで使ってみた感想。
むっず!!
LeapMotionに慣れてないだけかもしれないけどまともに操作できねぇw
ちなみに映像左下に写ってるのが実際の手の動き。感覚的にはほぼラグもデータ落ちもなくスムーズにトレースされている印象。
さーて、これを使って何作ろうかなぁ~
Let's Leap motion(開封の儀~インスコまで)
先日頼んだLeap motionが届きました
開封!
ようこそ新世界
さらに開封!
本体。シールにはセットアップのURLが。ナニコレカッコイイ。
さらにさらに開封!
接続用のケーブルとか。見ると長いのと短いのがある。親切だ。
さっそくさっきのURLからインストーラーらしきものを落としてきてインスコ…
してみたらドライバーが認識しねぇし! Σ(´゚д゚`)
なんかWestBridgeとかになってる。。。(テンパって写真撮り忘れた。。。)
え?初期不良的な…?とか思いつつLeapmotionのサポートページへ足を運ぶ。。
あ、なんかスゲーそれっぽい項目発見…
各状態に応じて細かく対処法が書いてあって、思ってた以上に手厚いサポートで少し感動…
さらにスクロールしていく
該当項目発見!
対処法はなんかリンク先のドライバのインストーラー使ってね、ってことなんで早速インスコ…
動いた!
【プログラミング】【Scala】第7章(Scala勉強4日目)
そろそろタイトルのネタが尽きてきたので無難なタイトルに変更
これ書いてる時点ですでに13章まで読み終えてるけどブログ書くのがめんd。
第7章:組み込みの制御構造
・Javaと同じなところは割愛して、Javaとは違う部分のみを記載
ーif―
・値を作り出すことができるため↓のような書き方ができる
val filename = if(args.isEmpty == false) args(0) else "def.txt"
ーwhileー
・whileでは代入の結果は常にUnit型の値を返すため、↓の書き方をすると無限ループ
var line = ""
while( (line = readLine() ) != "") println(line)
※:line = readLine() が常にUnit値の()となる
・Scalaはwhileループ使うくらいなら再帰関数を使っていこう、というスタイルらしい
ーforー
・JavaでのForeachの書き方に近い(気がする)
for(str <- args) println(str)
・for式はあらゆるコレクションを処理できるので↓のような書き方もできる
for(i <- 1 to 4) println(i) //1~4が出力
for(i <- 1 until 4) println(i) //1~3が出力
・コレクションに対してフィルタリングができる。複数フィルタも適応可能
for(fileName <- fileNames if( fileName.endsWith(".scala")) println(fileName)
※:結果はファイル名の末尾が".scala"のものだけ出力される
(fileNamesにはファイル名のリストを格納)
for(fileName <- fileNames
if fileName.endsWith(".scala")
if fileName.startsWith("a")) println(fileName)
・for式の最後にyield<本体>と書くことで結果を新しいコレクションとして格納できる
def scalaFileNames = for{ fileName <- fileNames
if fileName.endsWith(".scala") } yield file
-throw/try-catch/finally-
・throwはJavaと一緒っぽい(多分)
・try-catchのcatchでcase文が使える
~~}catch{
case ex : FileNotFoundException => //ここにエラー処理
case ex : IOException => //ここにエラー処理
}
・Javaとは異なりfinallyは結果値を返さない
ーmatchー
・switch文に近いやつ。条件に一致するcase文の処理を適応できる
val friend = str match{
case "salt" => "pepper"
case chips" => "salsa"
case _ => "nothing"
}
println(friend)
ーbreak/continueー
・存在しない(Breaksクラスを使えば例外的に使える)
そろそろScala以外のブログも書こうかしら。。。
【プログラミング】【Scala】コップ本、長い。(Scala勉強3日目)
6章
このあたりからScala特有の内容が含まれて来て徐々にペースダウン。
6章:関数型スタイルのオブジェクト
・Javaではクラスがコンストラクタを持ち、コンストラクタがパラメータを受け取るが、Scalaはクラスが直接パラメータを受け取る。基本コンストラクタって言うらしい
コンストラクタでの処理はそのまま記載する
例: class Hogehoge (x:Int, y:Int){
println(x + "hoge-" + y)
}
Javaから入った身としてはすごく違和感。。
・イレギュラーな値かどうかをコンストラクタでチェックしたいならrequireメソッド
想定外ならIllegalArgumentException投げてくれるよ
例: class Hogehoge(x:Int, y:Int){
require(x != 0)
println(x + "hoge-" + y)
}
・メソッドとかでコンストラクタの引数を使いたいなら一回変数におくべし
・オーバーライドの方法はC#に似ている(気がする)
例: class Hogehoge (x:Int, y:Int){
require(x != 0)
println(x + "hoge-" + y)
val a = x
val b = y
override def toString = a + "hoge" + b
}
・自己参照のthisはJavaとおんなじ感じで使える
・基本コンストラクタ以外にコンストラクタを持ちたいときはthisを使おう
補助コンストラクタって言うらしい
例: class Hogehoge (x:Int, y:Int){
require(x != 0)
println(x + "hoge-" + y)
val a = x
val b = y
def this(z:Int) = this(z, 0)
override def toString = a + "hoge" + b
}
・演算子もメソッドなのでこんなこともできる
def + (x:Int, y:Int):String = x + "hoge" + y
・オーバーロードは存在する。感覚としてはJavaと同じ
【プログラミング】【Scala】コップ本、重い(物理)。(Scala勉強2日目)
3章~5章まで読了。
Javaやってたからこの辺は割とサクサク進む一方、Scala独特の発見があったりもしてなかなか興味深かった。
第3章のまとめ ~Scalaプログラミングの次の1歩~
・Scalaではすべての演算がメソッド呼び出しである
すなわち、1 + 2 と (1).+(2) は 同一である。
1+2という演算は、「1」というInteger型の変数が引数を1つとる「+」というメソッドを呼び出す、と言い換えることができる。
・Rubyとかも演算子がメソッドっぽい書き方できるらしい。時代進んでんなー。
・Scalaでは引数を1つだけとるメソッドは「()」と「.」を省略できる。
・ScalaではListが機能豊富。さらに引数に関数をとれるため柔軟性が高そう
・count,exists,filter,forall,foreach,map,remove,sortが関数を引数に取れるっぽい。
・曰く、flatmapがさいきょーらしい。
・異なる型を格納できるListっぽく持てるTupleがすごく便利。
・Javaでは面倒な複数の戻り値を持つ、ということが簡単にできる。
・純粋な関数型の関数には副作用がない。(多分)
・純粋な関数型→値を渡したら値を返すだけの関数であり、
プログラムの状態を変化させず、また状態の影響を受けない。
・副作用→プログラムの状態を変えること、とか。(多分)
・関数の戻り値がUnit(Javaでのvoid)だと副作用ある可能性大だよ!
・副作用がない→入出力が正常値であることを確認すればその関数が常に正しいことを保証できる→テストの信頼性が上がる。これが関数型言語で書くとバグが少ない、って言われる所以なのかしら・・・?
第4章 ~クラスとオブジェクト~
・Scalaではデフォルトのアクセス修飾子はpublicである
・文末のセミコロンはいらない
・Static修飾子は存在しない。その代りシングルトンオブジェクトを持っている
・記載方法はJavaでのclassキーワードの代わりにobjectキーワードを入れ使う。
class hogehoge{ ・・・} → object hogehoge{ ・・・}
第5章 ~基本型と演算子~
・Scalaにはプリミティブ型が存在しない。
・基本はJavaと同じ
・「”””」で文字列囲むとその中はエスケープ文字を無視してすべて文字列と判断
・リッチラッパーが存在する。ちょっと面白そうと思った奴だけ抜粋。
実現方法も面白いらしい。
・0 max 5 → 5を返す
・4 to 6 → Range(4,5,6)を返す
【プログラミング】【Scala】コップ本、届きました。(Scala勉強1日目)
コップ本、届きました。
分厚いです。全部で700pくらいありました。
でも、某ラノベよりは薄いことが判明
で、さっそく第1章と第2章を読みつつコーディングしてみたまとめ。
第1章のまとめ
- Scalaとはオブジェクト指向言語であり関数型言語である
- Scalaのすべてはメソッドでできていた…
- メソッドはオブジェクトである
- Scalaのいいとこ3つは、Javaとの親和性、Javaよりも高い簡潔性、Javaよりも高水準な表現力
第2章のまとめ
def max(x:Int , y:Int ):Int = if(x > y) x else y
def :関数であることの宣言
max:関数名
(x:Int, y:Int) :関数の引数
x:Int :関数の引数名とその型
:Int :戻り値
= ~~ :~~以降は関数の処理
- Scalaはスクリプトとしても実行できるぞ
- While使うくらいならfor、foreach使うべし
- foreachは引数を1つ取るメソッド
- 関数リテラルなるものが存在する。C#で言うところの無名メソッドっぽいやつらしい。書き方は↓
(x:Int, y:Int) => x + y
結論:Scalaはいろいろできる…らしいよ?
続く。。。といいなぁー