0

twがインストールできない人向けドキュメントを書いた

https://github.com/shokai/tw/wiki/Install-Error


args_parserのサンプルアプリを作りたかったのと、rubyで作ったアプリをどうやって配布していったらいいのか試すために作り始めたんだけど、わりと好評なのでインストールにつまづいた人向け情報も書いてみた。


XCodeとかが必要になったら大変だろうから、native extensionを使ってるgemを使わないようにしよう。Ruby1.8.7で動くようにしよう。
そう思って実装してみたら、意外と1.8.6の人がいたり、ver 1.7あたりのrubygemsがgemspecに変な日付を入れて破壊したりとかあった。

gemでツールを配布しても、普段からrubyとgemを使っている人にしか届かない事がわかった。
youtube-dlの様にhomebrewやmacportsでも配布するとか、ダウンロードしてもインストールできるようにするとか何か工夫が必要らしい。

0

wifiで位置情報を取得するrubygem

なんとなくgithub page作った
Wifi location – Get your location with WiFi Mac Address and GoogleMap.

github page楽すぎる


前記事:Mac/LinuxのWiFiで位置情報を取得

1

ターミナルで使うtwitterクライアント作った

1年以上前に作ってずっと使ってた奴を、少し直してrubygemにした。

くわしい使い方はhttp://shokai.github.com/twに書いた。

何か要望あればtwittergithubのissueかblogのコメントでください。

※活用方法をTwのレシピに書きました


インストール

特別なライブラリは使っていないのでMacならすぐインストールできるはず
gem install tw
tw --help



機能

すぐ使えるように名前が短い、インストール・セットアップが楽
表示がカラフル
複数のユーザやリストをマージして表示できる
DM読み書き
public timelineの検索
user stream、filter stream読める。なんかよく切断されるので自動再接続するようにしといた
複数アカウント使える
UNIX pipeからもtweetできる


作った経緯

フルスクリーンのターミナルでプログラミングしてる途中で、たまにtwitterが見たいのだがブラウザを開くと集中力が切れてしまう。
そこでターミナルのままtwitterを見たくなった。
tやtermtterでもいいんだけど複数のlistをまとめて見るのが面倒だった。
俺はlistが見たい。
tw @shokai/arr @shokai/masuilab @shokai/homu @ahokai @shokai_log
のように複数のlistとユーザのtweetをマージしてぱっと見て、すぐ作業に戻るというのをやりたかった。
terminalだと履歴にコマンドがたまるので、ctrl+rしてtwで検索すぐ実行できる。

あとbotにしゃべらせるのにも使いたかった。小さなbotに毎回twitterの機能をつけるのが面倒なので、
echo 'hoge' | tw --user=shokai_log --pipe
で、ユーザを一時的にbotに切り替えつつUNIX pipeでtweetできる。pipeの場合は140文字以上だったら複数回に分けてtweetするようにした。

streamはむかし音声読上げさせたら面白かった(3つのイベントのハッシュタグを同時に把握できた)のでそのうち使いそうだから実装した。

手元だけでなくサーバーにインストールして使うことも想定しているので、インストール・セットアップ・アカウント追加が楽だと良い。
twitterのアプリ毎に10万アカウントしか使えないようになってるけど、一応自分でoauthのアプリ登録してconsumer_keyとsecretを設定ファイルで入れ替えるのも簡単なようにしておいた。
(そもそもそんなに使う人がいるとも思えないけど)


args_parser

複数アカウント使い分けつつもわかりやすいコマンド体系にするためにargs_parserを作った。


json出力モードがあればbot作るのに汎用的に使える物になるかも。

0

DSLでコマンドライン引数をparseできるargs_parserをアップデートした

まずgithub pagesでサイトを作った。

args_parser for Ruby
くわしくは上を見ればわかる。


アップデート内容

コマンドライン引数をparseした後に、validationやfilterをかけれるようになった。
parser側で入力値がチェックできるので、アプリ側でめんどうくさい処理をしなくて済む。

parseスタイルが増えた。
% rackup config.ru --port 5000 --env development
のような–key valueの他に、
% gem install twitter --version=3.7.0
みたいなイコールでつなぐスタイルも選択できる。
自分でスタイルを追加する事もできるようになってる。

順に解説する。

Validator / Filter

filterとvalidatorを追加した。こう書く。

require 'args_parser'
parser = ArgsParser.parse ARGV do
arg :url, 'URL', :alias => :u, :default => "http://shokai.org"
arg :help, 'show help', :alias => :h

filter :url do |v|
v.to_s.strip
end

validate :url, "invalid URL" do |v|
v =~ /^https?:\/\/.+$/
end
end
parse後にvalidateブロックが走って引数がチェックされる。
上の例だと引数 –url が正規表現に合わない時にエラーを起こす。


filterは、文字列を小文字にするとか、小数だったら整数に丸めるみたいな下準備に使う。
validateとfilterは何個でも書ける。


validator内のエラーはデフォルトでは
Error: invalid URL (--url hasadfttp://shokai.org)
がSTDERRに表示されて、exit 1される。


これはon_validate_error や on_filter_error を書いておけば横取りできる。exit 1されたくない時にどうぞ。

require 'args_parser'
parser = ArgsParser.parse ARGV do
arg :url, 'URL', :alias => :u, :default => "http://shokai.org"
arg :help, 'show help', :alias => :h

filter :url do |v|
v.to_s.strip
end

on_filter_error do |err, name, value|
STDERR.puts "filter error : #{err.class} #{name}=#{value}"
end

validate :url, "invalid URL" do |v|
v =~ /^https?:\/\/.+$/
end

on_validate_error do |err, name, value|
STDERR.puts "validate error : #{err.class} #{name}=#{value}"
end
end

横取り結果
validate error : ArgsParser::ValidationError url=hasadfttp://shokai.org


Style

ArgsParser#parseを呼び出す部分、ブロックしか渡さないと:defaultのstyleが使われる。

parser = ArgsParser.parse ARGV do
しかしコレだとハイフンが頭に付く文字列を引数として渡せない(負の数とか)
そういう時は別のスタイルを選べる。

:style => :equalを渡すとスタイルが変わる。

parser = ArgsParser.parse ARGV, :style => :equal do

2種類のスタイルは
https://github.com/shokai/args_parser/tree/master/lib/args_parser/styles
に入っている。

自分でスタイルを作るときは、parse_style_スタイル名(argv)を定義したArgsParser::Parserを読み込んでからArgsParser#parseを呼べばいい。

0

ネタ画像検索No.1 tiqav.com のrubygemとか作った

レス画像検索No.1/画像会話なら ちくわぶ


インストール

gem install tiqav


画像を検索、保存

require 'rubygems'
require 'tiqav'

## 検索
images = Tiqav.search 'ちくわ'

images.each do |img|
puts "(id:#{img.id}) #{img.permalink} => #{img.url}"
## 全部保存する
img.save(img.filename)
puts "saved!! => #{img.filename}"
end

## ランダム
img = Tiqav.random
puts img.url
puts img.thumbnail
puts img.glitch


## 幸運
puts Tiqav.feeling_lucky 'ちくわ'

最初はスクレイピングで実装した。
v0.0.1を公開して寝て起きたらseiryoさんがJSON APIを作ってくれてpull requestくれてた。
ありがとうございます。

githubにソースコードおいてある。 https://github.com/shokai/ruby-tiqav


おでん

tiqavの画像検索結果からランダムに画像を入れるサービスを作った。HTMLでスライド作るのに便利だと思う。
http://oden.herokuapp.com/

こういう風に埋め込むと
<img src="http://oden.herokuapp.com/あきらめ.jpg">
リロードする毎にランダムな画像がでる。


githubにソースコードある https://github.com/shokai/oden