Rubyの勉強、はじめました。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


MechanizeでZipPluggableParser

ちょっと調べたけど検索にひっかかってこなかったので、
Mechanize用ZIPファイルパーサ置いておきます。
解凍にはzipruby使う想定。
zip_parser.rb
require 'rubygems'
require 'mechanize'
require 'zipruby'

class ZipParser < Mechanize::File
  def initialize(uri = nil, response = nil, body = nil, code = nil)
    super(uri, response, body, code)
  end

  def open
    streaming = lambda { return @body.slice!(0, 256) }

    Zip::Archive.open_buffer(streaming) {|zip_ar| yield(zip_ar)}
  end
end
Mechanize::PluggerableParserってのでMIMEタイプに応じたパーサを設定できるそうな。
#openでZip::Archiveを渡せば使いやすいかなと。

使い方はこんな感じ。
require 'rubygems'
require 'mechanize'
require 'zip_parser'

agent = Mechanize.new

agent.pluggable_parser["application/zip"] = ZipParser
agent.pluggable_parser["application/octet-stream"] = ZipParser

url = 'http://github.com/zeero/zeero_work/raw/master/zip_parser.zip'
agent.get(url) {|file|
  file.open {|zip_ar|
    zip_ar.each do |zf|
      puts zf.name
    end
  }
}

7行目でMIMEタイプ別でパーサを登録。
'application/zip'だけでいいと思いきや、
githubからだと'application/octet-stream'でくるのでそちらも登録。
これでagent.getでZipParserが生成される。
あとはopenでZip::Archiveつくって、ファイル名の一覧表示させる、と
スポンサーサイト


LesserWiki

ほんとに久々すぎるけど、書きたくなったので、書きます。

TiddlyWiki形式のWeb型メモサービスを探していて、
TiddlySpotという色んなバージョンのTWを生成できて、かつ、Webで運用できるようになっているサービスを見つけて、重い腰をあげて、ローカルにたまっていたTiddlerをそっちに移行しようかなぁと思っていました。

そんな今日この頃LesserWikiっていうRailsで実装したTiddlyWiki形式のメモサービスを見つけました。
サーバーインストール型だけど、Rails勉強しているわけだから、できるだろうと挑戦。
作者さんは日本人なんだけど、英語版のマニュアルの方が内容が充実してたわけだけど、
やり方はめっちゃ簡単。

レイアウトとかセンスの良さを感じさせまくる秀逸なアプリなんですけど、ほんとにこのインストール作業の簡便さに感動しました。
情報展開力ってこういうのを言うのだろうか。神っているんですね。

以下、手順

インストール
SourceForgeのページからダウンロード

  1. database.ymlを修正
  2. データベースlesserwikiを作成
  3. rake db:migrateを実行
  4. vi public/dispatch.*でrubyコマンドのシェバングを修正
  5. script server -e productionで稼働

こんだけ!

問題点

  • 開発モードだと、新規作成Tiddlerのタイトル・本文部分が編集できない
  • 本番モードだと、新規作成Tiddlerの保存ができない。Ctrl+Enterもダメ

環境がらみなのかな。

ちゃんと動かなかったので、微調整が必要だけど、
TiddlySpotからこっちに移行しようかなぁ。


つくる!

Rails本をあらかた読み終えました。
RailsによるアジャイルWebアプリケーション開発 RailsによるアジャイルWebアプリケーション開発
前田 修吾 (2006/02/25)
オーム社

この商品の詳細を見る

今更ながら感想、書いてみます。

  • Railsの威力を実感
    • なにはともあれ、日本語でこれだけまとまって良質のサンプルと解説が書いていることがありがたいです。
  • 設計思想
    • 生みの親の方が書いているだけあって、その設計思想の細かいところまで網羅している。
    • 設定より規約(ConventionOverConfiguration)の中核を為す命名規約のところなんて、こだわりがバリバリ伝わってきて、やる気までかきたてられます。
  • 例題が少ない
    • チュートリアル的な部分が大半で、コードもすでに書かれてしまっているので、自分で考えることがあまりない。

要は、大体使い方のイメージがわかったら、なんぞ適当に作ってみろ!ということですね。
実際、それが一番勉強になるんだろうしね。
とにかくやってみよう。
家計簿アプリなんかが趣味と実益を兼ねれてよさそう。



と、思って取りかかってみたら、自分の力のなさを実感...orz
でも自分で考えている感があっていいですよ。
のんびりやります。


Rails Ajax サンプル

ゆっくりとだけど、Railsの勉強すすめてます。
Ajax on Railsてな記事を発見したので、
今日はちょっと寄り道して、Ajaxをごにょごにょしてみました。
簡略化した手順ですが、公開しておきます。

1.新規にRailsアプリ&コントローラ「Demo」を作成。
[~/work]$ rails ajax_demo
[~/work]$ cd ajax_demo
[~/work/ajax_demo]$ ruby script/generate controller Demo index

2.ビューを修正
app/views/demo/index.rhtml
<html>
  <head>
    <title>Ajax Demo</title>
    <%= javascript_include_tag "prototype" %>
  </head>
  <body>
    <h1>What time is it?</h1>
    <div id="time_div">
      I don't have the time, but
      <%= link_to_remote("click here",
        :update => "time_div",
        :url => { :action => :say_when },
        :position => "after") %>
      and I will look it up.
    </div>
  </body>
</html>
javascript_include_tag() は、Prototype JavaScriptライブラリをインクルードします。このライブラリは全てのRailsに含まれているものです。
link_to_remote() はその場所にシンプルなフォームを作成します。以下、引数の説明。
 1. 表示する文字列。この例では、"click here"。
 2. クリック後の実行結果と置き換わる内容を含むDOM要素のID。この例では、"time_div"。
 3. サーバーサイドでの動作を呼ぶURL。この例では、"say_when"を呼んでいる。
 4. クリック後の実行結果の出現場所を制御。省略すると、2番目の引数が置き換えられる。
 設定できる値は、top/bottom/after/before。

3.コントローラを修正
app/controller/demo_controller.rb
class DemoController < ApplicationController
  def index
  end
  
  def say_when
    render_text "<p>The time is <b>" + DateTime.now.to_s + "</b></p>"
  end
end


4.動作確認
[~/work/ajax_demo]$ ruby script/server
でWEBrickを動かして、localhost:3000/Demo にアクセス。

ajax_demo

"click here"をクリックする度に、画面遷移することなく、現在時刻が挿入されていきます。
ajax_demo_2


そんだけ。


バージョンアップ

Rails本でOSXでデフォルトインストールされているRubyでは、
MySQLとの接続が失敗するという話がのっていました。
以前にも
http://masuidrive.jp/rails/rails_app.html
http://hotwired.goo.ne.jp/webmonkey/2005/36/index4a_page3.html
railsを試してみたのですが、うまくいかなかった理由はどうやらこれのようです。
なかなか再インストールへの踏ん切りがつかなかったのですが、OSXを10.4.6にアップデートするついでにと、すべてのコンポーネントに再インストールかけてみました。(/usr/local下へインストールして、パスでそちらを優先して見るように設定する形なので、アップデートにはなっていないと思われる。)

A::Watch - OSXにRuby on Rails環境をインストールする方法でOSX環境での手動コンパイル&インストール手順が公開されています。/usr/local/binにぼんぼん最新化されたコマンドが格納されていったので、問題なくインストールできた模様。各バージョンはこんな風になりました。
Ruby 1.8.4
RubyOnRails 1.1.2
rake 0.7.1
activerecord 1.14.2
FastCGI 2.4.0
LightTPD 1.4.11

ついでにインストール
MySQL 5.1.9(OSX用のバイナリパッケージができてました)
SubVersion 1.3.1
Xcode 2.2.1

そして、肝心のRailsを試してみたところ、
first_rails

うまくいったーーーー!このお手軽感覚には感動しました。

昨日の内容
・scaffold(意味は建築現場の足場だそうだ。なんか納得。)
・validate_XXX(精査メソッド)
・MySQLの設定
 http://www.wings.msn.to/contents/env/jsp/mysql_lin.html
 http://dev.mysql.com/doc/refman/4.1/ja/mysql-database-administration.htmlを参考に


次のページ

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。