Ruby

skypeでワン切り

rb-skypemacたのしい gem install rb-skypemacruby -rubygems -e 'require "rb-skypemac";include SkypeMac;Skype.call("username").hangup'これ連打すると普通にchatで話しかけるより気づいてもらいやすい!

newgem1.5.3でのgem雛形作成エラーをなんとかする

newgem zanmai -T rspecすると "undefined method `merge' for false:FalseClass"というエラーが出るnewgemでgemビルド時にrubyforgeのアカウント情報が必要と言われるようになった - 橋本詳解で、rubyforgeのアカウントが必要だったけど持ってなかったので…

mongoid/mongo/bson/bson_ext最新版をインストールしてると、違うバージョンのbsonをloadしようとしてエラーが出て困る

全て最新のもの、つまりmongoid(2.0.0.beta.16)とmongo(1.0.8)とbson(1.0.6)とbson_ext(1.0.6)を使っていて、 require 'rubygems' gem 'mongoid','2.0.0.beta.16' require 'mongoid' するとエラーが出る /Users/sho/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/si…

gemで色々いれる

gem install mongo bson bson_ext gem install mongoid --pre gem install rspec ArgsParser rdoc nokogiri mechanize newgem g sinatra sinatra-reloader sinatra-auto-reload sinatra-mongoid thin xmpp4r feed-normalizer twitter oauth

rvmで入れた各rubyにmecab rubyバインディングをインストールする

mecab rubyバインディングはgemでインストールできないので、rvmで入れた各バージョンのrubyからmecabを使うのは少し面倒。 今までportで入れたrubyから、portのrb-mecabを使ってたけど、rvmで$GEM_HOMEが切り替わるとportで入れたrubyバインディングが読め…

rvmでrubyのバージョンを切り替える

http://runeleaf.wordpress.com/2010/02/07/ruby-rvm%E3%81%A7ruby%E3%81%A8%E3%81%8Bgem%E3%81%A8%E3%81%8Brake%E3%81%A8%E3%81%8B%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88/macbookproにrvmいれた。ma…

正規表現でfind

自分で単語を切ってindexを作れというdocumentもあるが http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo (これ同じように日本語のindexで作って、Ruby driverとjsのコンソール両方で試したけど日本語でちゃんと探せたのでmecabとか使って同…

Mongoid2.0で_idでfind

require 'rubygems' gem 'mongoid','2.0.0.beta.16' require 'mongoid' user = User.first(:conditions => {:_id => BSON::ObjectID("4c71228232e569270a000002")}) puts user.to_json 1.9までは_idがstringだったけど2.0のbetaではBSON Objectで入っている…

LDRの未読件数

tweet_logというコマンドを用意してあって、ログ用のtwitterアカウントにARGVを投げれるようにしてあるので ruby -rubygems -e 'require "open-uri"; n=open("http://rpc.reader.livedoor.com/notify?user=shokaishokai").read.scan(/(\d+)/).first.first.to…

C言語からRubyへ送る

参考:http://www.zeromq.org/docs:cookbook C++ bindingの使い方がいまいちわからなかったのでCのを使っているpub.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <zmq.h> #include <assert.h> int main(int argc, char **argv){ printf("pub start\n"); int rc; void *ctx, *soc</assert.h></zmq.h></string.h></stdlib.h></stdio.h>…

zeromqインストール、twitter stream APIを中継

ぜろむきゅー wget http://www.zeromq.org/local--files/area:download/zeromq-2.0.7.tar.gz tar -zxvf zeromq-2.0.7.tar.gz cd zeromq-2.0.7 ./configure make sudo make installソースから入れてるのはC++ binding目当て それからgem入れる sudo gem insta…

twitterのアイコンをアップロード

#!/usr/bin/env ruby require 'rubygems' require 'twitter' file = ARGV.shift tw = Twitter::Base.new(Twitter::HTTPAuth.new('username', 'password')) tw.update_profile_image(open(file)) なんとoauthではアップロードできなかった

顔文字の取得

ここから取得 http://kaomojiya.com/ #!/usr/bin/env ruby require 'rubygems' require 'nokogiri' require 'open-uri' $KCODE = 'u' if ARGV.size < 1 STDERR.puts 'require : output filename' STDERR.puts 'e.g. ruby get-kaomoji.rb out.txt' exit 1 end…

open-uriでtimeout error

参考:http://d.hatena.ne.jp/hiru926/20090130/1234313944open-uriでwebページを開こうとしてタイムアウトになる /usr/lib/ruby/1.8/timeout.rb:60:in `rbuf_fill': execution expired (Timeout::Error)rescueでクラス名を指定せずに捕捉できるのはStandard…

Rubyからmongo使う

準備 sudo gem install mongo bson bson_ext#!/usr/bin/env ruby require 'rubygems' require 'mongo' m = Mongo::Connection.new('localhost', 27017) puts '---db names---' m.database_names.each{|name| puts name } db = m.db('testdb') db['users'].in…

ChirpUserStreams API

参考 http://d.hatena.ne.jp/sugyan/20100423/1271981903 http://apiwiki.twitter.com/ChirpUserStreams config.yaml # twitter config user : 'username' pass : 'password' #!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'rubygems' require 'net/…

stream api

http://dev.twitter.com/pages/streaming_api_methods config.yaml # twitter config user : 'username' pass : 'password' # tokyotyrant config ttdb : - name : tweets port : 20020 jsonをparseして表示する ARGVをtrackにかけてる #!/usr/bin/env ruby …

自分のIPアドレスを取得

require 'socket' p Socket::gethostname p IPSocket::getaddress(Socket::gethostname) でも取れない事もある・・・

TokyoTyrant serverを起動/終了など

gemにした → http://shokai.org/blog/archives/5219 複数DB使うために設定ファイルを書いておくconfig.yaml # tokyotyrant config ttdb : - name : pages port : 20005 - name : olds port : 20006 - name : uploads port : 20007 rakeでまとめて起動/終了さ…

RakeでTokyoTyrant serverを起動/終了

tokyotyrantはttserverというコマンドで起動する。 ソースからインストールしたら /usr/local/sbin/ttservctl という管理用shell scriptがあったので、それを参考にとりあえず start, stop, restartだけrake taskにした pidファイルがserver実行中だけ作られ…

rakeでrspecを実行

specディレクトリを作って、中に *_spec.rb でrspecを配置 このRakefileをプロジェクトに置いておけばrakeでrspec実行できる newgemが生成するtest関連のファイルを参考にした Rakefile require 'rubygems' desc 'run spec' require 'spec' require 'spec/ra…

tokyotyrantをRubyから使う

localhostで動いているtokyotyrantに接続する時にホスト名で接続できなくて、(connection refusedというエラーが返る)127.0.0.1って書いたらできた。これにドはまりしてて20時間ぐらい悩んでた。なんでホスト名で接続できないんだろう。自分でrequire sock…

Rubyで画像生成メモ

数百枚のVGA程度の解像度の画像にそれぞれ数十のアルファチャンネルあり画像をcompositeして書き出す処理なら、RMagickよりjavax.imageioをJRubyから使うのがいいんじゃないの javax.imageio、JAIともにJavaで書いてもJRubyから使っても速度差は無かった(と…

JRuby+javax.imageioを使うか、Ruby+RMagickを使うか

画像読み込んでwidth, heightを出力対決 画像46枚でJRuby+javax.imageio #!/usr/bin/env jruby # -*- coding: utf-8 -*- require 'java' import 'java.lang.System' import 'javax.imageio.ImageIO' import 'java.awt.image.BufferedImage' start = Time.now…

名前付き引数風

#!/usr/bin/env ruby def test(a, b) puts '--test--' puts a if b.class == Hash for k in b.keys do puts "#{k} : #{b[k]}" end else puts b end end test("a", :one => 1, :two => 2) test("A", "B") --test-- a one : 1 two : 2 --test-- A B

rackspace cloud filesへのファイルアップロード

rubygemsにrackspace-cloudfilesというgemがあるがver 1.4.0で古い githubから最新版(1.4.7)を落としてきてgemにしてインストールする git clone http://github.com/rackspace/ruby-cloudfiles.git cd ruby-cloudfiles gem build cloudfiles.gemspec sudo ge…

3memo.comに登録する

APIが無かったけどrootにpostしたら登録できたregist-3memo.rb #!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'rubygems' require 'ArgsParser' require 'net/http' require 'uri' parser = ArgsParser.parser parser.bind(:short, :s, 'short name'…

diff

普通にdiff取るだけ #!/usr/bin/env ruby require 'rubygems' require 'diff/lcs' a = <

新着が来る毎に1回鳴らす ruby -rubygems -e 'require "open-uri";require "feed-normalizer"; last=0;loop do e=FeedNormalizer::FeedNormalizer.parse(open("http://search.twitter.com/search.rss?q="+URI.encode("shokai"))).entries.first; n=e.url.sca…

twitterを目覚ましにする

afplayでterminalから音声ファイル再生できたので 新着のreplyをチェックし続けて単語に反応して音鳴らすワンライナー ruby -rubygems -e 'require "open-uri";require "feed-normalizer"; loop do puts m=FeedNormalizer::FeedNormalizer.parse(open("http:…