0

Mac OSX MavericksにrbenvでRuby2.0.0-p353インストールした

Mavericksにしたらserialportとかeventmachineがビルドできなくなったので、色々インストールしなおした。
Macはほんと難しすぎる。
おとなしく2.0になったsystem rubyを使えばいいんだけど。

参考

Attila Györffy : Installing Ruby on OS X 10.9 Mavericks using Rbenv
OS X Maverick にrbenvでRubyをインストール – Qiita [キータ]

CommandLine Toolsをインストールする


今まではXCode.appからインストールできたけど、また自分でDLしてインストールする方式に戻った。
あとそもそもCommandLine toolsなくてもgccとか入ってるけど、もう何がなんだか分からないからとりあえずインストールした。
https://developer.apple.com/downloads/index.action

xcode-selectでcommandline toolsを使うように切り替えた
% xcode-select -p
/Applications/Xcode.app/Contents/Developer
% sudo xcode-select -switch /Library/Developer/CommandLineTools
正直切り替える必要あるのかよくわからないけどなんとなくやった。
でもこうすると、Node関係がXcodeの方を使えと言ってくるので困る。


gccはこうなってる
% gcc -v
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix


rbenvでruby2.0.0-p353インストールした


% brew update
% brew unlink ruby-build
% brew install ruby-build
% rbenv install --list
% CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline` --with-gcc=clang" rbenv install 2.0.0-p353


eventmachine等のgemのインストールが
make: /usr/bin/g++-4.2: No such file or directory
でコケる時

% sudo ln -s /usr/bin/g++ /usr/bin/g++-4.2
% sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2
これで通った。


Ruby2.0.0と1.9.3でSymbol not found: _rb_Digest_SHA1_Finish (LoadError)がまた起こるので、また1.9.2からdigestディレクトリごと持ってきた。

cp ~/.rbenv/versions/1.9.2-p320/lib/ruby/1.9.1/x86_64-darwin12.4.1/digest/* ~/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/x86_64-darwin13.0.0/digest/


これで問題なく使えてる。

0

RocketIO::LindaにTupleSpace#list(tuple) を追加した

新命令です

Lindaの仕様にない命令だけど、やはり必要なので「タプルスペース内から条件に合うタプルを全て読む」メソッド、TupleSpace#list(tuple, callback)を実装しました。


仕様を無駄に膨らませるのは簡単なので機能追加には慎重にならないといけないけど、listがあったほうが綺麗に書ける件があったので追加した。


EventMachine版Rubyクライアントでlist取るのはこんな感じ

em-rocketio-linda-client/sample/sample.rb at master · shokai/em-rocketio-linda-client

client.tuplespace["test_spae"].list ["sensor", "light"] do |list|
## 配列で取れる
end

javascript clientからも
tuple_space.list(["sensor", "light"], function(list){
// 配列で取れる
});
同じようにできる。

サーバーのSinatra側でもlistが取れる
sinatra-rocketio-linda/sample/main.rb at b4516add3ccf0b76614e83341bf037d2ee63f80a · shokai/sinatra-rocketio-linda


あと、readやtakeの時にマッチする物がない場合、タプルスペースに現れるまで待つ(コールバックが呼ばれない)んだけど、すぐに結果を返してくれる命令も欲しいなあと思っている。名前が思いつかない。

0

Tw v1.0.0 リリース

ターミナルから使えるtwitterクライアントtwのv1.0.0をリリースしました

Tw: Twitter client on Ruby.

インストール

% gem install tw


v1.0.0といっても特に変わりは無く、tw内で使っているtwitter gemがv5.0.0で仕様が変わったのでその対応をしてメジャーバージョンが上がっただけです。
今までTwitterモジュールにスタティックメソッドが生えていてシングルトンに使うスタイルだったのが、Twitter::REST::Client.newして普通にインスタンスを作るスタイルに変わったのに追従しただけです。

不具合あれば githubのissue@shokaiにお知らせください

0

Macの画面のだいたいの色を取得する

画面が肌色っぽいとか黒いとか、知りたいことがあると思う。

Macだとscreencaptureコマンドでキャプチャできる。
画像をファイルに保存してからimagemagickのconvertコマンドで1×1ピクセルに縮小しつつ、text:-オプションでRGB値を出力する

/usr/sbin/screencapture tmp.png && convert tmp.png -geometry 1x1 text:-

結果
# ImageMagick pixel enumeration: 1,1,255,srgb
0,0: ( 66, 68, 70) #424446 srgb(66,68,70)
赤っぽいとか青っぽいとか、わかる。

0

gistからコードを読む

例えば https://gist.github.com/shokai/6667948 の場合、
https://gist.github.com/shokai/6667948.json という風に後ろに.jsonを付けるとメタデータが読める。
JSON内のfiles配列にファイル名が列挙されている。

ファイルの実体を取得するにはraw/ファイル名にアクセスすればいい
https://gist.github.com/shokai/6667948/raw/MainActivity.scala
raw/(hash)/ファイル名だとgitのバージョンハッシュを指定できる。何も無しだとHEADになる。


Rubyで書くとこんな感じ

require 'json'
require 'httparty'

class Gist
attr_reader :data, :code
def initialize(url)
res = HTTParty.get "#{url}.json"
raise "#{url} get error (code:#{res.code})" unless res.code == 200
@data = JSON.parse res.body
code_file = @data['files'].find{|i| i =~ /.+\.rb$/ }

res2 = HTTParty.get "#{url}/raw/#{code_file}"
raise "#{url} get error (code:#{res2.code})" unless res2.code == 200
@code = res2.body
end
end

gist = Gist.new 'https://gist.github.com/shokai/6667948'
puts gist.code


設定ファイルにgistのURL書いたらプラグインとして読み込んでくれるようなのに使える。