カテゴリー「ruby」の33件の記事

2008.06.13

Mac OS X LeopardでRubyでMeCabが動かない

mecab-ruby のインストール
(Mac OSX & Cygwin on Windows)

MeCab on Mac OS X - へんにゅうめも @ 阪大基礎工・情報科学科

に書いてあるように、extconf.rbにパッチを当てないと駄目。パッチを当ててインストールするとちゃんと動いた。

| | コメント (0) | トラックバック (0)

2008.06.12

ap4rを試しているんだけど、困った

Ruby(Rails)で非同期処理をしたいなと思ってap4rを試してみているんだけど、以下のことで困った。

・認証配下のページのURLにPOSTしたい
XML-RPCとか使えばできそうだけど、ドキュメントに「XML-RPCにも対応しているよ♪」とかいてあるだけで、XML-RPCでの実装方法が分からない


・ap4r以外には接続されたくない
 もともとprivateメソッド配下の処理をap4rにやらせたくて、んで、ap4rに対応するためには、普通のグローバルアクセスを許可しないといけない。そうすると、一般ユーザーにも接続されてしまって困る

・ap4r専用のアプリ&プロセスを作るのはな
 上記問題を解決するために、ap4rの為のプロセスを用意して、ap4rだけに接続を許可するのもありかもしれない。が、ちょっと大げさだし、管理が大変。

・ap4r専用のコントローラーをつくる?
 それもありかもしれない。が、接続元をap4rに絞るベストな方法が思いつかないし、不具合の時ダメージが大きそう。接続元IPをbefore_filterとかで限定するのかな

・結局
 自分のやりたいことはap4rには向いていないのかもしれない。もしくは、何か勘違いしているのだろうか。

| | コメント (2) | トラックバック (0)

2008.05.30

Script.aculo.usのSortableをネストして使うときの注意点

Railsを使っていると、ほんの数行コードを書くだけでリストのD&Dが実現できます。そこで、つい調子に乗って、色々なところをD&D対応しているときに、ネストしたリストを多段的にドラックアンドドロップさせたくなりました。

具体的には以下のような感じです。

---------------
Webサービスのジャンルと実際のサービス名
・ブログ
  - ココログ
  - ライブドアブログ
  - FC2ブログ
・メール
  - GMail
  - ライブドアメール
・ビデオ共有
  - YouTube
  - ニコニコ動画
---------------

で、上記のようなリストで、「ブログ」「メール」「ビデオ共有」の3つをそれぞれD&Dで変更できて、かつ、「ココログ」「ライブドアブログ」「FC2ブログ」という小項目もそれぞれD&Dで順番を変更したいなと思いました。


最初できなくてあきらめていたのですが、案外簡単でした。
ポイントは、下位項目からSortable.createするということです。

Railsで書くならばsortable_elementをリストの内側から順番に宣言していくと期待通りの動作をしました。

ちなみに、RailsでのD&D、Sortable.create 、sortable_elementの使い方は、Railsレシピの21ページに詳しく載っています。

| | コメント (0) | トラックバック (0)

2008.04.14

RSpec on Railsがrake statsを上書きする件について

僕の場合、一部分だけRSpecを使って、他はRailsデフォルトのテストを利用したい。
その場合、普通にRSpecをインストールすると、rake statsをRSpecが上書きして、非常に迷惑。

具体的には、Code to Test Ratioの計算とかがRSpecオンリーになって、0.0%とかになっちゃう。

んで、なんかオプションでできるんだろうけど、よく分からないから、
./vendor/plugins/rspec_on_rails/tasks/rspec.rake

#task :stats => "spec:statsetup"
をコメントアウトした。

もっと良い方法があったら教えてください。

ちなみに、rakeで標準&RSpecの両方のテストは実行してくれるからそれは便利。

| | コメント (0) | トラックバック (0)

RSpec on Railsでhelper(ヘルパーメソッド)のテストを作成する方法 & RSpec雑感

どんなに頑張って検索してもわかりやすい日本語のドキュメントがなかったので、記録。

Rubyist Magazine - スはスペックのス 【第 2 回】 RSpec on Rails (コントローラとビュー編)

を参考に、でも「ヘルパーのテストのことは次回以降で説明します。」と知りたかったことがすっぽり抜けていたので、続編を猛烈に希望。


まずはgeneratorでひな形を作る(上のページ参照)

ruby script/generate rspec_controller blogs

ちなみに、ヘルパーメソッドのテスト用のgenerator無いらしい。
この時注意なんだけど、このrspecのgeneratorは./app/controller/とか./app/helper/とかのファイルを上書きする。ちゃんとYorNと聞いてくるんだけど、まさかappディレクトリ以下を上書きすることはないだろうと、Yを連打していたら泣けた。。
commit前だったから、結構頑張って書いたコードが消えてショックから立ち直るのに時間がかかった。

んで、そのひな形ができる。
helperは例えば
./spec/helpers/entries_helper_spec.rb
とかに存在する。
generator使わないで手動でファイル作ったらうまくいかなかった。スペルミスなのか、generatorが重要な関連ファイルを生成してくれているのか、謎。

お次に、本家のドキュメント。
RSpec-1.0.8: Helpers

これを見ると、まあ、書いてあるとおりなけど、わからねー。

describe PeopleHelper do

で、PeopleHelperの部分がヘルパーのクラス名。
で、ヘルパーにfixturesを読み込ませることができて、↓みたいな感じ。

require File.dirname(__FILE__) + '/../spec_helper'

describe EntriesHelper do
fixtures :users, :entries
before(:each) do
@user = User.new
@entry = Entry.new
end
it "should match tags" do
@user = users(:foo)
@entry = entries(:baa)
display_tags(@user, @entry).should match(/hoge/)
end
end


で「display_tags」はそのhelperに定義されているメソッド名。最初、そんなメソッド無いよ?ってエラーが出てたんだけど、いろいろやっていたら出なくなった。謎。

んで、RSpecでコード書くときはこのページ必須。変換表。
RSpec-1.0.8: Test::Unit Cheat Sheet

fixturesは、Rails標準のtestのものでOK。
あー、シンボリックリンクでもいいのかな?そうしておこう。


なんだろう、こうやってまとめてみると単純で簡単だけど、ここまでたどり着くのに凄く時間がかかった。。

| | コメント (0) | トラックバック (0)

2008.04.02

acts_as_paranoidとpaginating_findの両方を使った際に、論理削除済みの項目も含めて表示したいときの方法

#間違えていたので修正しました(2008年4月18日)
ステップ1:
./vendor/plugins/paginating_find/lib/paginating_find.rb
を以下のように:with_deletedを追加。

VALID_COUNT_OPTIONS = [:select, :conditions, :joins, :distinct, :include, :having, :group, :with_deleted]

ステップ2:
./vendor/plugins/acts_as_paranoid/lib/caboose/acts/paranoid.rb
のcountメソッドを以下のように修正。

def count(*args)
options = args.extract_options!
if options.delete(:with_deleted) then
count_with_deleted(*args.push(options))
else
with_deleted_scope { count_with_deleted(*args.push(options)) }
end
end

ステップ3:
以下のように利用する。
Item.find(:all, :page => {:size => 10, :current => 1}, :with_deleted => true)

| | コメント (0) | トラックバック (0)

2008.03.07

なんてこった。Rails 2.0はscaffoldの使い方が変わっていたなんて

1年ぶりにRailsを触っていたら、どうもscaffoldが上手く使えない。なんでだろうって3時間くらい悩んでいたら、使い方が変わっていたらしい。がびーん。


Rails 2.0のscaffoldを使ってみた - idesaku blog

うまくいきました。

| | コメント (0) | トラックバック (0)

2008.02.15

Rubyで画像ファイルをアップロードするCGIのサンプルソースコード

いつものように検索してもドキュメントがなかったので。

--------
#!/usr/local/bin/ruby
require "cgi"
cgi = CGI.new
print "Content-type: text/html\n\n"
open("./upload.jpg","w") do |fh|
fh.binmode
fh.write cgi['image'].read
end
--------

HTML側は↓な感じでformを書く。
----------
<form method="post" action="./upload.cgi" enctype="multipart/form-data">
upload<input type="file" name="image"><br>
<input type="submit" value="Upload">
</form>
----------

| | コメント (0) | トラックバック (0)

2008.01.18

RubyでCSVのテキストデータを作る方法(CSV::Writerの使い方)

っていうか、
Rubyリファレンスマニュアル - CSV::Writer
じゃわからねーよ。。。

で、Googleで検索してもよくわからないから悩んでようやく解決。結構需要あると思うんだけどなぁ?
ポイントは、StringIOを渡すことと、最後にStringIOのインスタンスに対してrewindメソッドを呼ぶこと。そうしないと、io.readというようにreadメソッドを呼び出してもnilが返ってくる。理由はポインタを先頭に戻す必要があるため。


#!/usr/local/bin/ruby

require 'csv'
require 'stringio'

io = StringIO.new("", "r+")
writer = CSV::Writer.generate(io, ',')
writer.add_row(["a", "b", "c"])
writer.add_row(['a,"i', "e", "f"])
writer.close
io.rewind
print io.read

| | コメント (0) | トラックバック (0)

2007.11.12

Rubyのオンラインドキュメントをローカルで閲覧する方法

最近、オンラインマニュアル(http://www.ruby-lang.org/ja/man/)が503 Service Unavailableでなかなか閲覧できなくて、仕事に支障が出ていて困り果てていたところ、ruby-listにローカルで閲覧するアーカイブが紹介されていた。

助かった。

RubyForge: RDE: ファイルリスト

ちなみに、chm形式なのでMacだと専用アプリをダウンロードする必要がある。
Chemr - subtech(intel mac限定・・)

Life with Mac OS X @rNote - Chmox 日本語対応版(power pc向けだけど、検索ができなくて致命的)

ところで、一度ローカルで動かしたらあまりにも便利だということに気がついた。検索とか凄く早く出るし、閲覧しやすい。これはいいや。

| | コメント (0) | トラックバック (0)

2007.10.18

LaCoocanがメール受信に対応した

インフォメーション | LaCoocan(ラクーカン): @nifty

(もしかしたら他のレンタルサーバーでも当たり前のようにできるのかもしれないけれども、、、)
LaCoocanが今日からメールの受信に対応した。
これは凄く便利!!
ただ単にメールを受信するだけじゃなくて、受信したメールをプログラムに渡せる。
ということは例えば、

LaCoocanにインストールしたMTにモブログできる

とか、

メールを受信して何かをするアプリケーションが自分で作れる

というわけ。

ということで、できるだけ早く暴想家計簿をメール受信に対応させたい。
メールで送るだけで家計簿にデータを登録できるようになるのは凄く便利だと思う!

お楽しみに。

ちなみに、LaCoocanでは1つのアカウントに付き50個までメアドを追加でいる。
最初は1つだけかと思って、厳しいなぁと思っていたんだけど、単純計算50個のアプリまで利用可能だ。
まあ、ディスパッチっぽい中間cgiを作れば良いんだろうけどめんどくさいしね。

後は何か面白いアイデアはないかなー。
ワクワク。


参考までに、メール受信アプリのサンプルプログラムを掲載。
しかし、メール受信アプリを作るのは大変だ。エラーが発生しているのかしていないのかよくわからないからだ。全部エラーログにはき出さないといけないし、エラーログを毎回FTPでダウンロードしないといけない。
あと、ローカルでテストをするのが大変。ローカルじゃメール受信できないしなぁ。
LaCoocanのメール受信アプリ、サンプル

ちなみに、渡ってくる情報は、メールヘッダを含めた全てが一枚のテキストとして受け取れる。

| | コメント (0) | トラックバック (0)

2007.10.16

RubyのFeedToolsを使うとRSSを一行で処理できるようになる

Life is beautiful: オブジェクトを次々に渡す「Ruby Filter」ってどうだろう
を見かけて。
まあ、RSS自体は主題じゃないから、いいたいことは違うんだろうけど、FeedToolsの宣伝のために。

FeedToolsを使うと、RSSのAutoDiscoveryからFeedのダウンロード、パースまでを全て提供してくれる。そして、パースしたFeedはとても扱いやすいオブジェクトに格納してくれる。
-------
#!/usr/local/bin/ruby

require 'rubygems'
require 'feed_tools'

FeedTools::Feed.open("http://satoshi.blogs.com/life/").items.each{|item| puts item.title}
-------

=> オフィシャルサイト

| | コメント (0) | トラックバック (1)

2007.09.28

Feed::ToolsでURL経由じゃなく、直接XMLのテキストデータをパース(parse)させる方法

Feed::Toolsの情報少なすぎ!

Feed::Tools.open(url)
からじゃなくて、ローカルファイルとかNet::HTTPとかで取得したRSSデータをFeed::Toolsにパースさせる方法。

#rss_text_data変数に任意のRSSテキストデータを入れておく
feed = FeedTools::Feed.new
feed.feed_data = rss_text_data
feed.items.each{|item|
puts item.title
}

| | コメント (0) | トラックバック (0)

RubyでNet::HTTPを使ってif-modified-sinceを意識したコードを各方法

Googleで検索しても具体的なコードをバシッと書いているページが見つからなかった。
Rubyist Magazine - 標準添付ライブラリ紹介 【第 7 回】 net/httpに書いておいて欲しいなぁー。サンプルをきちんと書かないと初心者はやり方がわからないままになってしまい、規則正しいコードを書かないままになってしまう。

もしもあなたが巡回ロボットを作ろうとしているのでしたら、 HTTPNotModified については知っておきましょう。 If-Modified-Since ヘッダを利用したときに、更新されていない場合に、 返るレスポンスです。 これらを使うことで Web サーバに優しいロボットを作成できます。

ということで、サンプルコードをこのページに書いておいた。
RubyでNet::HTTPを使ってif-modified-sinceを意識したコードを書く方法

| | コメント (2) | トラックバック (0)

2007.09.22

暴想コードをリリース

ブログ(特にココログやMT系)でプログラムのソースコードやHTMLのソースコードを書きたい時って不便だなぁって思ったことありませんかね。
こうpreタグで囲んでもbrが強制的に挿入されたり、< とか > のタグをエスケープするのが面倒だったり。

あと、長いコードを記述するときはエントリーの視認性を妨げます。

かといって、ファイルをアップロードして
http://java.cocolog-nifty.com/blog/files/cocolog_image_uploader2.rb
というようにリンクを張るのも無骨な気がします。

ということで、まあ、自分が欲しいという理由でソースコードを公開するためのツールを作りました。
上記のcocolog_image_uploader.rbを公開するとこうなります。
cocolog_image_uploader.rb


HTMLだとHTML SAMPLE

広々とした領域にコードが表示される上にgoogle-code-prettify - Google Codeを使って綺麗にシンタックスカラーリングしてくれます。
役に立つかどうかはわからないけど、視認性をよくするために任意の文字列をハイライトできます。

他にも色々と面白い機能を拡張できる予感がしているんですけど、どうでしょう?
ってか、こんなツールあるのかな??


ということで、使ってみたい!という方は以下のページよりお進み下さい。
なお、アカウント&パスワードは暴想家計簿と共有していますので、暴想家計簿ユーザーの方は同じアカウント&パスワードで利用できます。
暴想コード:ログイン

| | コメント (0) | トラックバック (0)

2007.09.01

Rubyでエラーハンドリング

[Ruby] 暴想: Rubyでexitの挙動をテストする方法 - Don'tStopMusic (2007-09-01)

そういえば、メソッド内で exit するという発想はなかったですね。 私はといえば、クラスのメソッドの中では定義した例外を上げて、そのクラスを使っているコマンドの方で例外を捕捉して改めて exit させてます。普通どうしてるんでしょうかね。

なんとなく、MTやperl、CPANの中で生活していたせいか、Class::ErrorHandlerっぽいこと(っつーか、まんまそれ)をRubyでもやっていることが多いんだけど、raiseを多用するべきかな。
rubyっていうかあらゆるプログラミング言語で共通だと思うけど。

どうしているんだろ、みんな。

Class::ErrorHandler : NDO::Weblog


raiseだとExceptionクラスを毎回作らないといけなかったり、クラス名を考えたりするのがなぁとか色々思ったりするんだけど、その辺、細かいエラーすべてraise?

| | コメント (0) | トラックバック (0)

2007.08.31

Rubyでexitの挙動をテストする方法

処理を中断させる役割を持つメソッドがあったとして、そのメソッドがきちんと処理を中断させてくれているかどうかをテストするにはどうしたらいいのだろうと悩んだ。
だって、処理を中断させちゃうからテストできないじゃーん、みたいな。

具体的にはこんなメソッド

def die
exit(1)
end


で、Rubyリファレンスマニュアル - 組み込み関数を見ていたら、exitはただ単に例外を発生させているだけらしい。
ということで、以下のようにテストを書いてうまくいった。もっといい方法はあるのかな?

begin
die
rescue SystemExit => e
assert_equal("exit", e.message)
end


--- 補足
[Ruby] 暴想: Rubyでexitの挙動をテストする方法 - Don'tStopMusic (2007-09-01)
あー、例が悪かった。
実際にテストしたかったのはdieメソッド中でexit以外に行っている処理の実行内容。

def die
hogehoge
.....
exit(1)
end

もちろん、exitだけさせるメソッドは作ったりしないから、プログラムの後始末をして、最後に終了させる。例えば、処理で使っていた一時ファイルの削除とか、ログへの書き出しとか。その後始末がちゃんとできているかどうかをテストしたいけど、exitが含まれているとうまくいかないから、という感じ。
begin
die
rescue SystemExit => e
# hogehogeがうまく動作しているかをチェック
end

| | コメント (0) | トラックバック (1)

2007.08.25

コードの整理

cocolog_image_uploader.rbのコードがあまりにも勢いで書いたままだったので、整理整頓。
クラス化、メソッド化した。
次はテストを書くかな。
xml-rpc系のアプリってどうやってテスト書くんだろう。
テスト用のココログを作らないと駄目かな。


「cocolog_image_uploader2.rb」をダウンロード


| | コメント (0) | トラックバック (0)

2007.05.23

毎月

Rubyで毎月っていう処理をするのって、何かいい方法ないのかね。

毎月の金額をリストにして出力ってやろうとしたら結構悩んだ。
2007/05
2007/04
2007/03
2007/02
みたいなのを出したいわけだ。

理想を言えば


from_month..to_month.each{|month|
...
}

とか書きたいところだけど、日付の基準がわからないから難しいよね。
とりあえず、ActiveSupportを活用して


while ((first_month <=> current_month) != 1)
....
current_month = current_month.months_ago(1)
end

とかと書いたけど、あんまりキレイじゃないよね。

| | コメント (0) | トラックバック (1)

2007.04.14

Ruby会議のチケットを買ったよ。

すっかり忘れていて、洗濯物をしているときになんとなくRSSリーダーを眺めていたら、購入しましたとか言うエントリを見て、思いだした。

11時30分。

あー、もう無理だなぁ、あきらめよう。

と思ったけど、すぐ近くにローソンがあるのでダメ元で行ってみた。

そうしたら、あったよー。

ということで早速購入。

5000円は値と高いなぁ〜、でもまあ2日間だしそんなものか。

日本 Ruby 会議 2007 - トップページ

| | コメント (0) | トラックバック (0)

2007.03.31

暴想家計簿をリリース

去年から一人暮らしを初めて、で、自炊をして、生協とかに加入したりしてと、もはや気分は専業主婦な訳です。
で、専業主婦といったらもう、家計簿でしょう!
ということで、猛烈に家計簿をつけたくなりました。

もう、自分の出費をすべて記録しないと気がすまなくなっちゃったわけですよ。

で、紙に家計簿をつけるとか、家計簿調を買うとかそんなことはやりたくないわけで。
だって、合計金額を計算するのめんどくさいし、多角的な分析ができないし。

で、エクセルとかめんどくさいし使いたくない。
ローカルPCで使うようなソフトだと結構たくさんあるけど、選ぶのがめんどくさい。

あと、せっかくなら携帯電話からも家計簿を使いたい。だって、スーパーとかコンビニとかのか鋳物を登録したいじゃないですか、その場で。

だから、Webサービス型の家計簿がいい。
で、探そうかなと思ったけど、探すのがめんどくさいから作った。
で、せっかく作ったなら公開したいなと思ったから公開できる状態にしてみた。

これ。
暴想家計簿:ログイン

ユーザー登録はここから。
暴想家計簿:ユーザー登録

この家計簿ソフトの特徴を列挙
・rubyで作ってある
Railsじゃなくて、rubyです。おい、それRailsで作れよってかんじのソフトなんですけど、ラクーカンじゃRailsがうごかないんだもーん

・たぶん、きっと、世界で初めてのWii対応家計簿ソフト
家計簿といったらPCで入力じゃなくてWiiでテレビで入力できるのが似合っていると思う。Wii対応といいつつ、単に文字がでかくなるだけなんだけどね

・携帯電話からの入力もOK
単にPC用のと同じで、HTMLがショボイから必然的に閲覧できているだけなんだけどね

・入力が簡単
細かいところで連続的に入力が簡単にできるようにしているつもり。少なくとも僕はストレスなく入力できる

・多角的に出費を分析できる
カテゴリ別に分析はもちろん、同じ商品を過去にどれくらい使ったかとかがわかる

・画面に圧倒されなくてすむ
なんか、こういう帳簿系ソフトってUIが複雑で威圧的で使う気が起きません。選択項目が多かったり、入力項目が多かったり。そんなのはいやなので。

・出費だけ記録する
なんとなく。
収入も記録できた方がいいかなぁと思ったんだけど、特に必要性を感じられなかったので。

まあ、そんなところです。ってか、他のWeb型家計簿ソフトを使ったことないので、よーわかりません。
出費を記録するのはそれなりに楽しいですよ。

去年から3ヶ月間くらいかけてチマチマと休日に時間を見つけては作ってきたソフトなので、誰か使ってくれたら嬉しいな。

| | コメント (0) | トラックバック (1)

2006.10.11

gmailの情報を取得したいなと思って

rubyでコード書いて、lacoocanにアップロードしたら、
sslで通信できねーよ、ばーか」と言われた。
そうか。
言われてみればそうかもな。。

openssl.soを何とかしたとしても、ポートがあいていないだろうなぁー。
httpsの通信なんてできないよなー。

| | コメント (0) | トラックバック (0)

2006.09.25

第10回Rails勉強会@東京に参加してきた。

最近、「このまま会社で仕事をしていたら脳みそが腐ってきてしまう」という危機感を持っていたのと、もう少しエンジニア的に生きたいなぁと思っていたので、Rails勉強会に参加してみた。
最近ではRailsをさわる機会もあまりなく、欲求不満もたまっていたのでとても楽しめた。

Rails' Wiki - Rails勉強会@東京第10回

今回、何が楽しみかって、ヽ( ・∀・)ノくまくまーの中の人が来るってことだ。
しかし、うっかり本を持って行くのを忘れたから、サインをしてもらえなかった…、、残念。

他にも、moroの日記の人とか、高橋メソッドな人とかいた。

で、Rails勉強会といえばポジションペーパーなんだけど、初めての参加だからどう書いていいのかわからず。
取りあえず最近疑問に思っていた悩み事を書いてみた。
ポジションペーパーはこちら

そしたら、高橋さんにベストプラクティスを教えてもらえた。
まとめると、「1アクション1モデルが原則」とのこと。1っかいのアクションで複数のモデルを捜査しようとしていたこと自体が間違っているらしい。
対策としては、Ajaxを使って1モデルずつsave or updateしていくか、1モデルずつ画面遷移させていく方法がベストプラクティスとのこと。
なるほど。

で、前半はrails1.2のchanges logを眺めた。
rails1.2はあんまり大きな変更はないよってのがまとめ。

後半はソーシャルブックマークを作る4回目に参加。
acts_as_authenticatedを実際にさわってみた。今まではlogin engineしかさわってこなかったから勉強になった。
基本的に使い方とかはlogin engineと変わらないので簡単。


で、最後に懇親会にも参加。
rubyとかrailsのオープンソース系で悩んでいることはみんな同じだってことがわかる。
で、javaについて苦労しているのもみんな同じだってことがわかる。
Rubyの懇親会なのに、一番盛り上がったのが「Javaで設定ファイルがXMLなのが許せない!!」ってことだった(笑)

その他思ったこと。
・勉強会はノートPC必須。ないとかなり退屈な時間を過ごすことになる。
・ドリコムのオフィスは綺麗
・恵比寿はいいなぁ
・勉強会は有線LANとコンセントは充実しているからいい感じ

ということで、次回も参加してみたいなぁ。ってか、Rubyでプログラミングしたいなぁ。

| | コメント (3) | トラックバック (0)

2006.08.15

Rubyで開発をするならMac OS X

まあ、今までもそうだったけれどもこれからはその色合いが公式的にも強くなるっぽい。

まず、RubyCocoaがMac OS X Leopardにバンドルされることになった
つぎに、Ruby on Railsもバンドルされるようになった
Objective-Cもガベージコレクションに対応するようになった。
んでもって、XcodeもRubyに対応するようになったらしい。

あと、macにはTextMateもある。
TextMate — The Missing Editor for Mac OS X

まあ、rubyの開発なんてviで十分という人も多いかもしれないけどね。
ってか、rubyはワンライナーでしか使いませんとか言う人にも関係ないね。

この記事August 2006 | HMDT Journalによると、

まず、Cocoaのセッションに行ってみる。あぁ、Ruby持ち上げられまくってるよ。さりげなく、Javaはダメ出しされまくってるよ。Apple手のひら返しまくり。

らしい(笑)。
まあ、Rubyもある日突然縁を切られる可能性も高いってことなんだけどねぇ…。

| | コメント (0) | トラックバック (0)

2006.07.27

bookmark2mail をリリース

以前にもブックマークツールを作って、このブログで紹介したけれども、新しい発想で作り直した。
それがこのbookmark2mailだ。

これはその名前からわかる通り、ブックマークしたいサイトをメール化するツール。
どういう意味かというと、まずこのブックマークツールを使いたい人は、ブックマーク専用のメールアドレスを取得する。
個人的にはGmailが一番おすすめ。
で、あとはブックマークしたいサイトがあったら、気になるテキストをマウスで選択して、ブックマークレットをクリックするだけ。
そのサイトをGmailとかに保存しておける。
具体的には、ページのタイトルがメールのサブジェクト、ページのURLとマウスで選択した部分がメールの本文になって送られる。

んで、後から自分のブックマークしたサイトを見たくなったらGmailにログインするだけでOK。
Gmailの強力な検索機能を使ってもいいし、フィルタ機能を駆使してもいい。
気に入ったブックマークにはスターマークもつけておける。
下手なブックマークサービスより使いやすいはずだ。
Bookmark2mail

で、昔作ったブックマークツールで要望があった「同じサイトを複数回ブックマークしたら、マウスで選択した概要をまとめて表示されるようにしたい」ってのも、Gmailを使うと解決できる。
Gmailには同じタイトルを自動的にまとめてくれる機能があるからだ。
こんな感じ。
Bookmark2mail_2

もちろん、ローカルのメーラーで受信してもいい。
Gmailだったら、サーバーに残しつつローカルでも受信できる。
たとえば、MacのMail.appで受信しておけば、後からインクリメンタル検索で検索が可能だし、Spotlightでの検索も可能になる。
こうやって考えると、普通のブックマークツールと違って、気軽にローカルに保存して検索できるのもメリットだ。

んで、今回はlacoocanとか使っている人なら誰でも使ってもらえるから公開する。
「bookmark2mail.zip」をダウンロード
このファイルをダウンロードして解凍して、いくつか設定して、アップロードして、パーミッションを変更して、ブラウザにブックマークレットを設定すればOK。
簡単。

含まれているファイルは3つ。
●sendmail.rb
これがcgi本体。
メールアドレスを二カ所設定する。
FTPでアップロードしたら、パーミッションを705(-rwx---r-x)にする。

●bookmark2mail.js
これがブックマークレット用のJavaScriptファイル。
さっきアップロードしたsendmail.rbのURLを設定する。
同様にFTPでアップロードする。
パーミッションの変更はいらない。

●bookmarklet_sampl.txt
あ、スペルミスしているな。。
めんどくさいからそのまま。
これはブックマークレットのサンプル。
さっきの、bookmark2mail.jsのURLを書き換えて、ブラウザのブックマークレットに登録する。
ブックマークレットってどうやって登録するの?って人は自分で調べてください。
当然、FTPでアップロードする必要はない。

以上、どうでしょう。


-----
Plaggerでやればいいじゃん、とかと言われそうだけど、普通の人はPlagger使えないし、lacoocanじゃPlagger使えないから、いちいち専用のcgiにするのがいいと思った。

| | コメント (1) | トラックバック (0)

2006.07.18

LacoocanでrubyとActiveRecordを使ってMySQLに接続することに成功。

長い道のりだった…。
一時はあきらめていたが、Don'tStopMusicから貰ったトラックバックでエラーを検出することができるようになったから問題解決できた。

んで、詰まったところを色々まとめてみる。
たぶん、みんなが同じようにして詰まると思う。
でも、LacoocanでActiveRecordを使ってみたいと思う人はいないと思うけど。。。

1:自分が手動で設置したライブラリのパスを登録する方法がわからない。
perlでいうところの、use lib qw(/home/bin/lib);みたいなことをrubyでどうすればいいのかがわからなかった。
これは、Rubyist Magazine - あなたの Ruby コードを添削します 【第 4 回】 Tropyを最近読んだのを思いだして、解決。
こんな感じで書いてあげればいい。
$LOAD_PATH.unshift './lib'
$LOAD_PATH.unshift '../../lib'
でも、あんまりカッコいい書き方じゃないなぁ、、たまにrubyってこういう構文があってダサい。

別にこういう風に書いてあげてもいい。
require '../../lib/active_support'
require '../../lib/active_record'


2:erbで改行を防止するための <% -%>とかhtmlエスケープの<% h hoge %>のhとかを使うとエラーになる。
これは普段Railsしか使っていなかったからはまった。
まず、 h を使うためには、
require 'erb'
のあとで
include ERB::Util
をしないといけなかったらしい。

んで、 - を使うためには
erb = ERB.new(template, nil, "-")
ってしないといけなかったらしい。わかるかっての。

3:LacoocanでActiveRecord, ActiveSupportをrequireすると、他のライブラリも足りなくて落ちる。っていうよりも、Lacoocanで標準インストールされているlogger.rbをrequireしただけで落ちるんですけど、どうなんですか?
単純にライブラリを追加インストールしてあげればいい。
僕は、ActiveRecord, ActiveSupport, benchmark.rb, monitor.rbを適当なlibをフォルダに入れてアップロードして
$LOAD_PATH.unshift '../../lib'
した。
問題なく使えているっぽい。

4:LacoocanのMySQLのデータベースパスワードがわからないんですけど。。
管理画面の設定画面から設定できるようになっている。

5:LacoocanのMySQLの各種設定がわからないんですけど。。。
これ凄くわかりにくいけどこんな感じ。
:adapter => 'mysql',
:host => 'mysql',
:username => 'nsEYSG9a',
:password => '**********',
:database => 'nsEYSG9a'
特にわかりにくかったのが、hostとdatabase。hostがmysqlって…(笑)

んで、今回作ったアプリケーションがこれ。
http://weblog.news.coocan.jp/work/ruby/projects/test/test.cgi

でもって、サンプルコードがこれ。
「test.cgi」をダウンロード
「bookmark.rhtml」をダウンロード
「page.rb」をダウンロード

O/Rマッパークラスである、Class Page(page.rb)がたったの2行しかないことに注目。
あと、test.cgi本体も実質的には10行前後しかない。
これで、データベースに接続して、インサートして、ロードしてテンプレートに出力までしてくれるんだから、ActiveRecord, erbは偉大だ。そしてそれを可能にしているRubyも偉大だ。

ここまでできれば、あとはどうにでもなるな。

| | コメント (1) | トラックバック (0)

2006.07.17

Railに甘えているとRubyを取得できない!?

いま、Lacoocanでcgiとしてrubyを使って動かしてみようと思ってテストスクリプトを書いてみている。
つまり、非Rails。

そんなことをしていると、いかに自分がRubyについて何も理解していなかった、Rails無しでは何もできない体になっていたかがわかる。
ということで、色々試行錯誤の連続。
Railsが裏で色々指定してくれていたことを実感できたりしてちょっと楽しい。

| | コメント (0) | トラックバック (0)

2006.06.18

ビックリ。ヽ( ・∀・)ノくまくまーさんが本を出すらしい。

きっと、僕の周りの数名しかわからないネタだろうけど…。

Rails関係を調べていると、Googleで高確率でヒットする、ヽ( ・∀・)ノくまくまーさんがRailsの本を出すらしい。

本当に失礼だけれども、びっくりだ。

いやぁ、凄い人だなぁとは思っていたけれども、本の中にも「从*’w’) クゥ〜ン♪クゥ〜ン♪」とか登場するのだろうか。
本の中でも、こんなノリノリの文体なのだろうか。
ヽ( ・∀・)ノくまくまー(2005-12-28)

タイトルが「優しいRailsの育て方」なだけあって、期待を禁じ得ない。

| | コメント (0) | トラックバック (0)

2006.05.13

railsアプリ製作日記(3日目)

前回に引き続き製作を進めた。
前回の画面でメンバーを追加したあと、そのメンバの項目を埋めていくページ。

Member

で、こんな感じでメンバーが各自項目を記入していくと、前回の一覧ページはこんな風になる。
Match_after

で、各項目をハイライト表示できる。
左上のプルダウンでOKを選べばOKが赤字に、NGを選べばNGが赤字になる。
で、「今度の打ち合わせ」は「2/23(午前)」に行えばいいことが一目瞭然となる。

このアプリはごらんの通り、スケジュールをみんなで決める時に使う。
例えば、次のプロジェクトのミーティングをチーム内で行いたい時に使う。

今、僕の会社だとそんな時は次のようなことをする。
(1)メールをフル活用
リーダーがこんな感じのメールを送る
--------------
各位
課長です。
ミーティングやります。
日程を決めたいので、みんなのスケジュールを教えて下さい。
        3/23, 24, 25, 26
課長     ○, ×, ○, ×
加藤
武藤
伊藤
------------

で、メンバーは上の表を更新したメールの返信を行う。
このシステムはすぐに破綻することがわかる。
2人以上の人が同時に返信を行うと、表の更新が同時に行えない。
何より、インデントやスペースに異常に気を遣わなければ行けない上に、綺麗に表を維持できない。


(2)エクセルをフル活用
次のようなメールが送られてくる
--------------
各位
部長です。
ミーティングやります。
日程を決めたいので、みんなのスケジュールを教えて下さい。
つきましては、共有フォルダに「¥¥common¥team¥schedule¥meeting.xls」というファイルを用意しておいたので、各自更新しておいて下さい。
------------

前よりは現代的だ。
インデントやスペースに気を使う必要もないし、常に最新の1つのファイルが作成される。
しかし、これはこれで問題が多すぎる。
第一、エクセルはめんどくさい。
この例だと、まず部長がエクセルを立ち上げて、セルにフォーマットを作って、共有フォルダを一生懸命Windowsの使いにくいexplorerを駆使してファイル名を考えて、保存しないといけない。
そしてなにより、メールを受け取った部下も大変だ。
メールからファイルのPATHをコピーして、explorerのアドレスバーにペースとして、エクセルを立ち上げて、一生懸命セルを埋めていかないといけない。
URLと違って、ファイルのパスはメーラーからクリック一発で開けない。
そしていざ保存しようとしたらこんなエラーが出てくる「他の人がファイルを開いていますので保存できません」。
そして、立ち上がって、チーム内のみんなに「エクセル閉じてくれませんか?」と聞いて回らないといけない。
メールとエクセルを使ったあげくに結局徒歩!!
本末転倒とはこのことだ。

で、このシステムを使うとこれらのデメリットが全部解決する。
まず、URLだからメールを受け取ったらクリック一発で該当記入ページに飛べる。
項目もプルダウンメニューだから選ぶだけで終わり。
エクセルのセルと格闘する必要はない。
エクセルでも頑張ればプルダウンメニューとか作れるけど、このシステムを使えば誰も頑張らなくて良い。
で、保存も誰かとかち合うことはない。

まあ、似たようなソフトは世の中にいくらでもあるだろうけど、Railsの勉強代わりに作りましたって事で。
それにしてもRailsとRubyは凄い。
両方とも4日前に勉強し始めたのに、もうこういうソフトが作れるようになれた。
このアプリケーションを作る際に、1行もSQL文を書いていない。
本当に1行も書いていない。
create databaseとかcreate tableとかすらも書いていない。
そして、このアプリケーションを作る際に僕自身が書いたRubyのコードはdefとかendだけしか書いていない行も含めて約50行程度(テンプレートは含まない)だ。
ビックリ。
Ruby on Rails最高って事で。

まあ、ちゃんと作り込もうと思ったらもう少し頑張らないとだけど、チーム内利用ならこれで十分だしなぁ。

| | コメント (0) | トラックバック (0)

2006.05.12

rails製作日記

とりあえず、今日も作ってみた。
今のところ、こんな感じ。
Match

昨日のスクリーンショットが、横軸を登録する画面。
今日のスクリーンショットが、縦軸を登録して、それを一覧する画面。

縦軸と横軸を自由自在に追加できるのがポイントかな。

| | コメント (0) | トラックバック (0)

2006.05.11

Ruby on Railsでアプリケーションを作ってみているよ

前に書いたとおり、今研修を受けている。
暴想: Ruby on Railsトレーニングプログラムを申し込んだ。

で、研修を受けるだけだと何も身に付かないので、家に帰ってきて早速アプリケーションを作ってみているところ。
作っているのは、日頃あったらいいなぁと思っていたもの。
日頃業務中に、メールとかエクセルとかで四苦八苦してやっていることを、Webで簡単に実現できたらいいなぁと。
具体的にはもう少し完成してから書きます。

環境は、Mac OS X Tiger + locomotive + TextMate + sqlite3 + Safariだ。
ほんの少し環境構築にはまってしまったけど、簡単に作成できている気がする。
もちろん、まだ四苦八苦しながらの作業だけど、慣れたら確かに効率的な気がする。
Ruby_on_rails

| | コメント (0) | トラックバック (0)

2006.04.23

Ruby on Railsトレーニングプログラムを申し込んだ。

プレスリリース

今年の初めに、Rubyをマスターするぜ!!って書いて早4ヶ月。
Ruby、まったくやってねぇー。
暴想: 最近数年間の目標と、今年の目標

まあ、言い訳は色々あるんだけど、このままだと、目標を達成できない。
ということで、強制的にRubyを勉強するために研修を申し込んだ。

いやですね、プログラムは独学が基本だと思ってますし、これまでも研修とか講座とか受けたこと無いんですけど、今回ばかりは受けてみたくなったわけです。

・perlとかRubyとかスクリプト系言語で研修ってすげぇ珍しい。
・教えてくれるのがRuby本家。
・ってか、懇親会とかあるし、Ruby本家の人たちと知り合いになれるかも。
・3日間、仕事を忘れて半強制的に勉強する時間が取れる(重要)。

という感じで、これを逃したら二度と経験できないことが詰まっている感じが素敵だ。
楽しみ。

Ruby on Railsは会社の実際のサービスで活用するとなると難しいだろうけど、便利社内ツール、便利部内共有ツールとか作るのに凄い便利そう。

| | コメント (0) | トラックバック (0)

2006.01.03

最近数年間の目標と、今年の目標

ピエロとゲームの話ばかり書いていると、単なる馬鹿野郎だと思われそうなので(まあ、単なる馬鹿野郎なんだけどさぁ)、たまにはまじめに今年の目標について書いてみる。


思い返してみると、ここ数年、年に一回ぐらいのペースで新規プログラミング言語を習得している気がする。

4年前
javaの習得。
初のプログラミング言語の勉強。
ちょっとだけ小遣いを稼いだ。
マスターしたとはいえないが、やりたいことを実現できた。
これがきっかけで今の仕事に就いていると思う。

3年前
visual basicの習得。
習得とはほど遠いがさわれる程度になった。
使い道が全くない上に、Mac OS Xを使うようになってしまったので、開発環境自体がないよ、、。
でも、まあ、そんなかんじ。
一番適当かも。

2年前の目標はperlをマスターすること。
それまではperlの事はまったく知らなかった。
ってか、暗号にしか見えなかった…。
 →達成した。一応perlで仕事をこなし、perlでお金を稼いで、perlで会社やプロジェクトに貢献できた。

去年の目標はjavascriptをマスターすること。
それまではjavascriptの事はまったく知らなかった。
 →達成した。一応javascriptで仕事をこなし、javascriptでお金を稼いで、javascriptで会社やプロジェクトに貢献できた。

そんで、今年の目標はrubyをマスターすることにしようと思っています。
rubyの事はまったく知りません。
rubyで仕事をこなして、お金を稼いで、会社とプロジェクトに貢献できたらと思います。
ということで、このブログのカテゴリーにrubyを追加してみたりした(笑)

あとは、perlとjavascriptの知識はまだまだ未熟だからさらなるブラッシュアップかな。

| | コメント (1) | トラックバック (0)