アーカイブ
動画からアニメgifを作る
動画からアニメgifを作るツールを去年作った。https://github.com/shokai/video2gif
元動画を何fpsで切り出すか、それを何fpsで結合するかを指定できるのでコマ送り的なgifも簡単に作れる。
上は、動画を1fpsで切り出して20fpsでつないだ。
video2gif -i input.mov -o output.gif -size 150x100 -vfps 1 -gfps 12
元の動画はこれ
githubのリポジトリ数が100超えた
去年のゴールデンウィークの増井研合宿でgithubの使い方を山プルギス氏に教えてもらってから18ヶ月、ついに公開リポジトリ数が100個に達した。
ぜんぜんgithub上で他人のプロジェクトに首を突っ込んだりしていなかったので、100個のうちほぼ全てが自分で開始したプロジェクトという事になる。だいたい週1つのペースでリポジトリが増えていったわけか
100個目のプロジェクトは、notify-lightだった。
これは家の電灯が点いているかどうかを明るさのセンサーで監視して、Skypeのshokai_botというアカウントが俺に通知してくれるシステム。便利である。防犯的な意味で。
60行ぐらいのRubyスクリプト1ファイルだけで実装されている。
botからSkypeのグループチャットでこういうのが来る。
センサーを使うのもSkypeへの通知も、すでに便利なツールが作ってあって全部HTTPでできる。
ruby notify-light.rb -light http://localhost:8783/ -skype http://localhost:8787/という風に実行すればセンサーを定期的に監視してSkypeに送信できる。
■しくみ
CdSという明るさが検出できるセンサーをArduino等に適当に接続し、シリアル通信してMacやLinuxに送る。
serial-http-gatewayというプロジェクトを以前作ってあるので、これを使うとシリアルポートから受信したデータを溜めてjson形式で吐き出すHTTPサーバーが作れる。
読んだjsonにはタイムスタンプとセンサーの値(明るさが)入っているので、一定時間内の平均値を計算してノイズを消し、Skypeに通知する。
Skypeへの通知は先日作ったskype-chat-gatewayというのを使っている。
1年ぐらい前にskype-socket-gatewayというのを作ったけどwindows用だったのでもう使わなくなったし、socketよりもhttpから使えたほうが便利なのと、chat_idという概念がわかりにくいので1チャット1プロセス1portが対応するように作りなおした。
また、MacとLinuxでSkype APIを使う仕組みが違うので、それぞれ別々に実装した。
Linux版はまだちょっと微妙なんだけど、Mac版は出来がよくてWebブラウザからSkype Chatができるサーバーとかも付いているので便利です。
chrome拡張の開発
1年ぶりぐらいにchrome拡張を作っているのだが、開発しやすくなっていた。ymrlとmyatsumotoに教わった。
chrome://extensions か chrome://settings/extensionSettingsを開く。

右上の「デベロッパーモード」を押して、「パッケージ化されていない拡張機能を読み込む」ボタンを押す。フォルダを拡張として読み込める。
拡張の名前に(開発中)とつく。再読み込みを押すとリロードできる。
アイコンの左側の三角をクリックすると、background.htmlへのリンクがでる。ここでjsコンソールが出せるので、console.logを使ったりしてdebugできる。
ORF2011で実世界コピペ、実世界ユーザインタフェース等を展示した
昨日まで東京ミッドタウンで開催していたSFC ORF2011の増井研でデモしていました。
■実世界コピペ
実世界コピペはAndroidとNFCタグを使ってコピペできるアプリなのですが、これはAndroid側のアプリは全てJavaScriptで書かれています。
■GoldFish
GoldFishというプラットフォームを自作していて、これを使うとJavaなしでJavaScriptだけでアプリが書けて、しかも端末にインストールする必要がなくなります。(今学校のサーバーが落ちていて見れないがそのうち復活するはず)
先週書いたAndroidとNFCで研究室の鍵を開けるシステムもGoldFish上で実装されているし、他にも置く場所によって自動的にAndroidがパソコンを操作するタッチパッドになったり、写真立てになったりするデモをしました。
GoldFishは、実世界志向なユーザインタフェースを作る時によくある5つの機能を簡単にJavaScriptだけで扱えます。
- 操作する物体や機器の指定をタッチで直接指示する … GUIでは名前を入力するかアイコンをクリックしていた
- ジェスチャーで操作する … 大量のボタンは必要なく、画面を見る必要もない
- 状況によってインタフェースが変わる … タグによって起動するアプリを切り替えられる、またGoldFishアプリ内からもタグの情報が読める
- 使用者によってコンテンツが切り替わる … 安全な方法で端末IDを生成しているので、ユーザ名を入れたりする事なくユニークユーザを検出できる。居間のTVで見ていたビデオを台所の小型モニタで継続する等も簡単。
- 他のアプリと通信する … 中身がWebブラウザなのでAjaxは使えるのは勿論だが、普通のTCPやUDP SocketもwebsocketっぽいAPIで簡単に使える。TCPでチャットを実装した例
■他のGoldFishアプリ
MacとUDPで通信して操作できるタッチパッドが86行で書けたり(ソースコード)
空中マウスが62行ぐらいで書けたりする。(ソースコード)
空中マウスは操作が難しくてボツになりました。でもこういうのを実験的に作る時に、イチからAndroidアプリを書くのと比べて全然楽に実装できます。プロトタイピングにも向いている。
研究室のドアの鍵開ける奴も、ほとんどプログラム書いたこと無い後輩にサンプル見せて、作ってよーって頼んだら1日でできてしまったので、それなりに使いやすいんじゃないかなと思います。setIntervalで50msecごとにジャイロスコープを監視して、+90度以上回ったらドアを開けるだけだし。
Rubyでcometサーバー作る
最近cometとかいう最新技術が流行っているらしいので、eventmachine_httpserverで作ってみた。
ここにサーバーとクライアントの例がある。どっちも50行ぐらいで実装できた。
comet at master from shokai/eventmachine-study – GitHub
サーバー起動して、タイムアウトを10秒に指定。
このサーバーは、POSTされた値を保持して、GETされたら返す。GETに対してはレスポンスを遅らせて返す。
ruby server.rb 8080 10
クライアントを起動。GETしてから25秒後にPOST
ruby client.rb 25
GET(comet) -> wait 25 sec -> POST
* GET
sleep 25 sec
404 ## 10秒経過、切断された
* GET ## 再接続
404
* GET ## 3回目
* POST kazusuke
POST success
200
kazusuke
200 ## 5秒待ってようやく値が返ってきた
kazusuke
* GET
サーバー側のログはこんなんなってた
http server start, port:8080, comet_timeout:10(sec)
load: 2.20 cmd: ruby 11481 waiting 0.45u 0.32s
request_method : GET
path_info : /message
query_str :
post_content :
request_method : GET
path_info : /message
query_str :
post_content :
request_method : POST
path_info : /message
query_str :
post_content : kazusuke
kazusuke
request_method : GET
path_info : /message
query_str :
post_content :
cometサーバー、接続が不安定なクライアントにpush通知するのに便利。

最近のコメント