0

PhidgetsのサーボモーターをHTTPサーバー化した

phidgets-servo-serverというのを作った。

上のリンク先のgithubにphidgets関連のライブラリのインストール方法は書いてある。準備すると、

phidgets-servo-server --port 8901
でサーバーが起動する。
eventmachine_httpserverでphidgets-ffiをHTTPから使えるようにしただけ。

使い方は簡単で、HTTP-GETでサーボモーターの現在の角度が取得できる
% curl http://localhost:8901
HTTP-POSTで指定角度に回転する。
% curl -d '90' http://localhost:8901
 

 

リポジトリのWebUIディレクトリにHTML+JSでサーボを回すサンプルがある。

phidgets-servo-serverを起動したマシンのディスク上でWebブラウザで開けば、警告がでるがスライダーを回す毎にサーボが回る。
サーバーに置いたらcross domain問題があるのでそのままでは使えない。
Webブラウザ →(ajax)→ サーバー →(HTTP-POST)→ phidgets-servo-server のように中継するwebアプリをSinatraかなんかで書いて使う。


 

 

このような1つのマシンのUSBポートに接続する特殊なデバイスは、同時に複数のプログラムからアクセスする事ができなかったり、ハードウェアと同じマシン上でプログラムを実行しないとならないんだけどサーバー化してしまえばどこからでも使えるようになる。格段に実装しやすくなる。

特殊デバイスはどんどんサーバー化しよう。

他にも
なんかがある。

0

Twitter Stream APIで授業チャット作った

Twitterにfilter APIという単語で検索してstreamを受信できるAPIがあるので、授業のハッシュタグでfilterしてチャットを作った。
プログラムと起動方法は https://github.com/shokai/twitter-stream-api にある。

 

まず先週は、Terminalで動くバージョンを作って文字をデカくして全画面表示で教室の前に表示させて使ってた。
mitukiiiさんのuserstreamというgemのAPI参照先をfilter APIに変更したらすぐできた。@username の部分はrainbow で色を付けた。
twitterのログもテキストファイルで生成される。

 

次に今週はHTMLで表示させるようにした。Stream APIをem-websocketでwebsocketにして、文字をデカくした全画面表示SafariにWebSocketで表示させている。
表示用のHTMLとWebSocketサーバー起動方法は githubのtwitter-stream-api/viewer にある。

0

rvmのJRuby1.6.7でnailgunを使わない設定と、起動速度を2倍にする方法

最近のバージョンから勝手にnailgunが起動するようになってた。

~/.rvm/hooks/after_use_jruby でnailgun起動してJRUBY_OPTSに-ng追加してるのをコメントアウトで止めたら解決した。

#!/usr/bin/env bash

. "${rvm_path}/scripts/functions/hooks/jruby"

if [[ "${rvm_ruby_string}" =~ "jruby" ]]
then
# jruby_ngserver_start
# jruby_options_append "--ng" "${PROJECT_JRUBY_OPTS[@]}"
else
# jruby_options_remove "--ng" "${PROJECT_JRUBY_OPTS[@]}"
jruby_clean_project_options
fi
 

JVMの起動が遅いので、起動済みJVMを使いまわすnailgunというのがある。
jruby –ng-server で起動して、 jruby –ng foo.rb でnailgun上でfoo.rbを実行できる。

スクリプト実行するまでの起動時間がめちゃくちゃ速くなってほぼゼロになる、なぜなら起動しっぱなしだから
というシステムなのだが開発中のウマくないプログラムがnailgunごと死んでしまうので、面倒だから止めたかったのだった。



nailgun無しだとMacbookAirの場合JRubyの起動毎に5秒以上かかるのだが、
export 'JRUBY_OPTS=-X-C'
export 'JAVA_OPTS=-d32'
しておくと2秒になる。
Macはふだん64bit server版のJVMを使っているが-d32を指定すると32bit client版が起動して速くなる。

1

62進数の変換 Rubyで

tiqavのpermalinkの62進数ID(http://tiqav.com/2iTとかhttp://tiqav.com/1UNとか)が短くてかっこ良かったので作ってみた。
数字を0-9a-zA-Zに変換するのと、逆に数字に戻す事ができる。

#!/usr/bin/env ruby

class AlphaNum

def self.table
@@table ||= '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('')
end

def self.encode(num)
num > 61 ? self.encode(num/62)+self.table[num%62] : self.table[num%62]
end

def self.decode(str)
arr = str.split('').map{|i| self.table.index i }
for i in 0...arr.size do
return arr[i] if i == arr.size-1
arr[i+1] += arr[i]*62
end
end
end

(0...100).each do |i|
enc = AlphaNum.encode i
dec = AlphaNum.decode enc
puts "#{i} => #{enc} => #{dec}"
end
実行結果
0 => 0 => 0
1 => 1 => 1
2 => 2 => 2
3 => 3 => 3
4 => 4 => 4
5 => 5 => 5
6 => 6 => 6
7 => 7 => 7
8 => 8 => 8
9 => 9 => 9
10 => a => 10
11 => b => 11
12 => c => 12
13 => d => 13
14 => e => 14
(略)
87 => 1p => 87
88 => 1q => 88
89 => 1r => 89
90 => 1s => 90
91 => 1t => 91
92 => 1u => 92
93 => 1v => 93
94 => 1w => 94
95 => 1x => 95
96 => 1y => 96
97 => 1z => 97
98 => 1A => 98
99 => 1B => 99

0

クリップボードのテキストをHTMLエスケープするアプリ clip2htmlescape作った

blogにソースコードを貼り付ける時、>や&のような記号は>とか&と書かなければHTMLタグになってしまったりするので、それらを一発変換するソフトを作った。Mac用。

起動すると、クリップボードの中身を書き換えて即終了する。AlfredやQuick Silver等のランチャーに登録して使うと良い。

■実装方法
Platypusを使った。

こうするとRuby Scriptを内蔵させたMac用アプリが作れる。

 

■コード
これだけ。これもclip2htmlescapeで変換して貼り付けた。
#!/usr/bin/env ruby
require 'tempfile'

clip = `pbpaste`

[{
'&' => '&'
},
{
'<' => '&lt;',
'>' => '&gt;' ,
'"' => '&quot;'
}
].each do |h|
h.each do |k,v|
clip.gsub!(k,v)
end
end

f = Tempfile.new('clip2htmlescape')
f.write clip
f.close

system "cat #{f.path} | pbcopy"