Kousei Ikeda/Blog

2014.07.18/Development

gulp-2x

この前coffeeでjs書いたお仕事ではじめて使ってみた程度のgulpだけど
多くのことはしてないが導入の参考になればと思って書く。
gulpは気に入ったので次も多分使う。

そのときはjsだけ書く感じのお仕事だったから
htmlはプリプロセッサとかじゃないしcssはwatchすらしてない。
htmlはwatchだけしてlivereload。

coffeeはwatchしてconcatで1ファイルにまとめてコンパイル。
そのときはやってないのだけど、sourcemapとuglify。
isReleaseフラグとgulp-ifプラグインでstream中に分岐させてて
開発時は引数なしで呼び出し

gulp

リリース時はオプションつけて呼び出し

gulp --release

する。
・release=falseのときはsourcemap挿入、uglifyはしない。
・release=trueのときはsouremap挿入しない、uglifyはする。
という動きになる。gulp-if便利。

あとgulp-utilのbeep()はビープ音鳴らすだけ。でも便利 笑

あとあとwatchがエラー時に止まっちゃうからどうしたものかと思っていたら

on 'error', (event)->

でエラーをキャッチしてあげればそのままいける。uncaught errorのままだとまずいってことみたい。

途中までCodeKitでやっていたのだけど重すぎてgulpに乗り換え。gruntはどうもgruntfile書くのが面倒で、、、gulpのほうが性に会ってるみたい。

今回はcoffeelintしてなかったけど次は足す。

以下、gulpfile.coffee。

# modules
gulp = require 'gulp'
connect = require 'gulp-connect'
coffee = require 'gulp-coffee'
gutil = require 'gulp-util'
sourcemaps = require 'gulp-sourcemaps'
concat = require 'gulp-concat'
gulpif = require 'gulp-if'
uglify = require 'gulp-uglify'

# paths
root_dir = 'src/'
coffee_dir = root_dir+'content/_coffee/'
js_dir = root_dir+'content/js/'
html_files = root_dir+'**/*.html'
coffee_files = coffee_dir+'**/*.coffee'

# arguments
console.log 'env : ', gutil.env
isRelease = gutil.env.release || false
console.log 'isRelease : ', isRelease

# server
gulp.task 'connect', ->
    connect.server
        root: 'src'
        livereload: true
    return

# html
gulp.task 'html', ->
    gulp.src html_files
    .pipe connect.reload()
    return

# coffee
gulp.task 'coffee', ->
    gulp.src([
        coffee_dir+'common.coffee'
        coffee_dir+'page1.coffee'
        coffee_dir+'page2.coffee'
        coffee_dir+'page3.coffee'
        coffee_dir+'main.coffee'
    ])
    .pipe concat 'app.coffee'
    .pipe gulpif(not isRelease, sourcemaps.init())
    .pipe coffee()
    .on 'error', (event) ->
        gutil.log event
        gutil.beep()
        return
    .pipe gulpif(not isRelease, sourcemaps.write())
    .pipe gulpif(isRelease, uglify())
    .pipe gulp.dest(js_dir)
    .pipe connect.reload()
    return

# watch
gulp.task 'watch', ->
    gulp.watch [html_files], ['html']
    gulp.watch [coffee_files], ['coffee']
    return

# default
gulp.task 'default', [
    'connect'
    'watch'
]

gistにもおいた。
gulp https://gist.github.com/ikekou/b6b4d90d7a16931660d6

2014.07.13/Inbox

純正カメラを最初から搭載してすぐに使い出せるクアッドコプター「Phantom 2 Vision+」初飛行・撮影レビュー – GIGAZINE
という記事を見て、あれ?って思った。

というのも
お手軽な空撮ヘリとして人気のでつつあるこのDJI Phanomには
カメラがあらかじめついているタイプである「DJI Phantom Vision」と
0_0
GoProを別途買ってつけるタイプである「DJI Phantom
all_in_one_new_design-39813c370f6986e9bb0e62f8264c6931
の2タイプの製品がある。

コントローラーからのカメラチルト操作とかはどっちもできるんだけど、
Phantom Visionのほうは専用アプリをiPhoneに入れると今カメラに映っている映像を手元で見ながら操作ができる。
で、Phantomはそれができない。だから後で映像を見ないと何が撮影されているかわからない。この差はでかい。

Phantom Visionの紹介動画。

じゃあみんなPhantom Vision買えばいいじゃん、ていうことになるんだけど
そこに日本の電波法っていうのがぶつかってきて、Phantom Visionはカメラ用とラジコン操作用に2つの電波帯を使ってるんだけど
そのラジコン用の5.8GHzのほうが問題になるからアメリカでは飛ばせるけど日本では飛ばせなかった。
(・・・らしい。微弱電波だったらいいとか細かくは色々あるみたいで電波法の専門家じゃないから微妙に理解が違うかもしれない。ただとにかく前のPhantom Visionは日本で飛ばしたらダメだった。)

実際のところ、見てる感じだと、いいかげんなネットの店とかは違法であることを知ってか知らずか、売ってはいたんだけど、
きちんとしたお店には違法だから置いてないという状態だった。

それでぼくはしょうがないからそのときはPhantomのほうを買ったのだけど。
前に鴨川で飛ばしてみたときの動画はこれ。
DJI Phantom2 test flight | Blog | ikekou.jp

そんで冒頭の話に戻るけど、Gigazineが取り上げてるし、
あわせて見てみた、日本のちゃんとした販売代理店のセキドさんにもおいてあるし
どういうことだろう?と思って問い合わせてみたところ、、、

日本向けは5.8GHz帯ではなく920Mhz帯を使って、電波法クリア、技適通過済らしく、日本国内でも売れることになったとか。

正規代理店以外で買うと海外仕様のものの場合もあって、そうすると依然として日本で使用するのは電波法違反になるので、買う場所には気をつけた方がよさそう。
いまのところ在庫ありの正規代理店は以下の通りだそう。
(株)セキド
(株)エアーステージ
Amazon

ていうか…買い直したい!!!笑

(画像はPhantom 2 Vision+ - 簡単、高性能の空撮マルチコプター | DJI より引用)

2014.07.07/Development

“Home Control”とか大げさなタイトルだけどIRKitの話でもなくiOS Homekitの話でもなくて、
使おうとおもって買ったもののタイミングを逃して使わず家に転がっていた
DMXディマーパックを使ってAlfredで電気製品をオンオフしてみたっていうだけの話だったりする。

1. やろうとしたこと

Alfred(Macの多機能ランチャー)から電気とかサーキュレーターとかをオンオフする。
“home-run”で電源オン。”home-stop”で電源オフする。

2. 準備したモノ

ELATION DP-415 (DMX Dimmer Pack)
ENTTEC DMX USB Pro (USB => DMX Converter)
Mac

3. 使ったソフトウェア

Alfred (Power pack)
Max/MSP
iTerm

4. 構成

Alfred => (UDP Socket) => Max/MSP => (DMX) => DMX USB Pro => (DMX) => DMX Dimmer Pack => 電気製品

5. セットアップ

DMX USB Proのドライバ入れたりする。細かくは忘れた。

6. Alfredでやったこと

AlfredでComnmandを叩くWorkflowを作る。run用とstop用を2つ。
スクリーンショット 2014-07-07 17.34.34

macに最初から入ってるcuコマンドを使って、AlfredからMaxの間はUDPで通信する。

cu -z -u 127.0.0.1 50001;exit

キックするだけだから値もナシで、-zにしてる。
あとAlfredでコマンド叩くとterminalが一枚立ち上がってそのままになるからexitで閉じる。
ってどっかに書いてあってそうしてみたんだけど閉じなくて、iTermなら閉じてくれたからAlfredから起動するTerminalソフトをiTermにした。
Terminalでもexitで閉じるようにきっとなんか設定があるんだとおもう。

7. Max/MSPでやったこと

ビルトインのコンポーネントだと”udpreceive”があるけど正しくOSCフォーマットでないとはじかれる。
今回の用途だととりあえずキックできればいいしコマンドラインでOSCをどうやって送ればいいかわからなかったから
普通にUDPを扱えるexternalのsadam.udpReceiverを使う。
50001番ポートがキックされたらrun、50002番ポートがキックされたらstopということにする。(ほんとは同じポートで受け取った値で分岐すればいいと思う)
dmxusbproのexternalは無料だと2チャンネルまで、有料だともっと使えるみたいだけど今回はとりあえず無料でよいのでそのまま。
getdevsしたあとopenのmessageにシリアルポート名を直接打ってる。ここなんかいい感じにしたい。
dmxusbproに入力するのは0が最小、255が最大だから、オンオフみたいだからそれで電源をオンオフする。
スクリーンショット 2014-07-07 17.52.22

8. DMX USB Pro ~ DMX Dimmer Pack ~ 電気製品の間でやったこと

ここはもう特になにもやってなくて
dmxusbproのexternalがDMXをDMX USB Proに送ってくれて、そっからDP-415に送ってくれて、そしたら調光してくれる。

できあがりは冒頭の動画。

調光だからほんとは段階的に制御できるんだけど、サーキュレーターは中間の回転速度で異音がするし、
PWMじゃないから(だよね?)LED電球パっとついてパっと消えるし、やめた。
何動かしたら面白いかなー。

おわり。