June 17, 2009

ブラウザベースの Termtter クライアントができました!

ブラウザベースの Termtter クライアントを作りました。
昨日作った http_server プラグインの一機能として実装しました。
http_server プラグインをロードすると HTTP サーバーが起動してそれに対して外部からコマンドを実行したりできるわけですが、Ajax でその機能を呼び出すことで動作するクライアントを HTML と JavaScript で実装しました。
つまり、ブラウザが Termtter クライアントになります。

スクリーンショット

Termtter
Uploaded with plasq’s Skitch!

見てわかる通り、Termtter そのものにかなり似せて作ってあるのでそんなに違和感なく使えると思います :)

必要なもの

  • mime-types
  • rubytter >= 0.8.0

使い方

http_server プラグインをロードして、ブラウザで http://localhost:5678/ にアクセスします。

課題

認証機能を実装すればサーバーで Termtter を動かしておいて外からブラウザでアクセスするという使い方ができるようになります。
で、iPhone のブラウザから使えたら便利かなーと思ってます。

コマンドを並列でバシバシ実行できてしまう今の作りが良いのか悪いのかよくわかりません。

Termtter がブラウザから使えることで誰がハッピーになるのかは良くわからないのですが、勢いで作ってしまいました。

June 16, 2009

Termtter に HTTP サーバー機能を提供するプラグインを作りました!

Termtter に HTTP サーバー機能を提供するプラグインを作りました!
HTTP 経由でコマンドを実行することができます。

こんな風にしてブラウザからメッセージをポストすることもできます。

Picture 16
Uploaded with plasq’s Skitch!

便利ですね!

使い方

プラグインの読み込み

設定ファイル(~/.termtter/config)に以下の太字部分を追記。

Termtter::Client.init do |t|
...
  t.plug 'http_server'
...
end

もしくは Termtter のプロンプト上で以下を実行。

> plug 'http_server'

デフォルトのポートは 5678 です。
ポートを変えたい場合、例えば設定ファイルに config.plugins.http_server.port = 3000 と書くと 3000 番ポートを使用します。

コマンドの実行

リクエストされたパスの「/」を除いた部分がコマンドとして実行されます。
「update test」というコマンドを実行したい場合は「/update test」というリクエストを投げます。
パスは当然 URI としてエスケープしてやる必要があります。
なので以下のようになります。

http://localhost:5678/update%20test
June 11, 2009

Termtter Tシャツできました!

ついにできました!
Termtter Tシャツが!

DSCF6444.JPG

DSCF6447.JPG

こちらから買えます。

jugyoさんのTシャツ ID:8061

ちなみに Tシャツが売れても僕には一銭も入ってきませんw

また、Termtter の開発をやりたいかたはこちらからどうぞ。

http://github.com/jugyo/termtter/

May 22, 2009

近況

最近、自宅ではひたすらプログラミングしてます。
時間さえあればプログラミングしてるのでブログを書く習慣がなくなりつつあります。

そういえば「More Joel on Software」を読みましたけど、相変わらず面白かったです。

ところで最近こんなの作りました。

Gitki

https://github.com/jugyo/gitki/tree

git を使って更新する wiki です。
ブラウザからは更新できません。
デモ: http://gitki.oyguj.org/

ifchanged

https://github.com/jugyo/ifchanged/tree

引数に渡したファイルが更新されたときに「何か」を実行するためのコマンドです。

% ifchanged ./**/*.html --do 'open %'

みたいにして使います。

g

https://github.com/jugyo/g/tree

ruby の組み込み関数の「p」のような動きをするメソッド「g」を提供するライブラリです。
オブジェクトを inspec した結果を growl で表示します。

Picture 13.png

May 1, 2009

Sequel を試す

インストール

sudo gem install sequel

使ってみる

初期化処理を行い、テーブルを作成し、データをいくつか投入してみます。

require 'rubygems'
require 'sequel'

# initialize
DB = Sequel.sqlite('test.db')

# create database
DB.create_table :items do
  primary_key :id
  String :name
  Float :price
end

# insert data
items = DB[:items]
items << {:name => 'foo', :price => 100}
items << {:name => 'bar', :price => 200}

まあ、何やってるかだいたいわかりますよね。

Sequel コンソール

以下のようにしてコンソールを立ち上げることができます。

sequel sqlite://test.db

諸々の初期化処理を行った状態で irb が起動してるんだと思います。
こういうツールが用意されてるっていいですね!

データの取得

上記で作成したデータをいろんなやり方で取得してみます。
Sequel コンソールで実行しました。

# count
> DB[:items].count
=> 2

# select all
> DB[:items].all
=> [{:price=>100.0, :name=>"foo", :id=>1}, {:price=>200.0, :name=>"bar", :id=>2}]

# select first
> DB[:items].first
=> {:price=>100.0, :name=>"foo", :id=>1}

# select id = 2
> DB[:items][:id => 2]
=> {:price=>200.0, :name=>"bar", :id=>2}

# select price = 200
> DB[:items].filter(:price => 200).all
=> [{:price=>200.0, :name=>"bar", :id=>2}]

# select price > 100
> DB[:items].filter{|i| i.price > 100}.all
=> [{:price=>200.0, :name=>"bar", :id=>2}]

# select price < 100
> DB[:items].filter('price < ?', 200).all
=> [{:price=>100.0, :name=>"foo", :id=>1}]

# select by sql
> DB['select * from items'].all
=> [{:price=>100.0, :name=>"foo", :id=>1}, {:price=>200.0, :name=>"bar", :id=>2}]

なんとなくイメージはつかめましたか?

TermColor に機能追加

TermColor にちょっとした機能を追加しました。
機能追加ってほどでもないんだけど。

以下を実行すると、

ruby -rubygems -e 'require "termcolor"; TermColor.test'

以下が出力されます。

http://gyazo.com/729e6cf622e5e4c20344e5ae0b5441f0.png

つまり、カラーコードが確認できます。
便利ですね!

関連エントリ
TermColor – コンソールへの出力を HTML っぽく色付け♪

TermColor
http://github.com/jugyo/termcolor

April 26, 2009

Termtter の設定ファイルの書式を少し変えました(HEAD)

Termtter の設定ファイルの書式を少し変えました(古いままでも一応動くはずです)。
新しい書式は以下のようになります。

config.user_name = 'jugyo'
config.password = 'xxxxxxxx'

Termtter::Client.init do |t|
  t.plug 'log'
  t.plug 'confirm'
  t.plug 'growl'
  t.plug 'stdout'
  t.plug 'standard_commands'
  t.plug 'auto_reload'
end

プラグインを読み込むやりかたが変わっています。
今までみたいに plugin メソッドでプラグインを読み込むのではなく、Termtter::Client.init に渡すブロックの中で、Termtter::Client (引数に渡ってくる t は Termtter::Client そのもの)の plug メソッドを呼んでプラグインを読み込む形になります。
この変更は次のバージョンに反映されると思います。

なんでこうしたかというと、config を読み込んで ライブラリ等の初期化を行った後にプラグインを読みむようにしたかったからです。