前の月 / 次の月 / 最新

MuraTaka 速記メモ / 2008-06

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12

2008-06-29 Sun

Rails of Ruby on Rails を読む9 [Ruby][RubyOnRails]

■ コンタクトフォーム

本書の通り記載を行いテストを行ってみたが、

Couldn't find template file for contact_mailer/sending in ["/Users/taka/NetBeansProjects/locus2/app/views"]
というエラー。
メール本文に使用される template が見つからないとのこと。
確かに、views/contact_mailer/sending.erb は作成していない。
あれっ?
注文のところで、OrderMailer を作成した時はそういえば、
views/order_mailer に order.rb ができていた。

そうか、Mail Generator を使用した際に確かに View を指定していなかった。

手動で views/contact_mailer/sending.rb を作成して再度実施。

前回の注文のところと異なる点としては、
ActionMailer::Base モデルの @body への代入。
コントローラで受け取ったパラメータ params["contact"]["body"] をそのまま代入している。

しかし、この指定のやり方であれば、views/contact_mailer/sending.erb は必要無いわけだよな・・・
なんで頭のエラーが出る??

- ActiveRecord でないモデルでのバリデーションの利用

- Active Form プラグイン active-form を使用する
  http://www.realityforge.org/svn/code/active-form/

新たに Contact のモデルを作成し、コントローラで Request の中身を一旦 Constant インスタンスに
詰め込んで validate をかける。




一通り試してみたが、Rails の設計思想、威力には感心した。

MySQL 設定 [MySQL]

■ 外部ホストからの接続を許可

デフォルトではローカルホストからの接続を許可しているのみなので、
外部からも接続可能とする場合には、
- /etc/mysql/my.cnf

bind-address = 127.0.0.1
上記設定をコメントアウトするか、接続を受け付けたいアドレスに変えておく。

もう一つ。

MySQL はDB への権限をユーザ + ホストで行っているので、ユーザを追加しておく。
今回はテスト環境なので、何でもできる god ユーザを追加しておく。
grant all privileges on *.* to god identified by 'password';
grant all privileges on *.* to god@localhost identified by 'password';

■ 文字エンコーディングを UTF-8 に統一しておく

- /etc/mysql/my.cnf

- client
- mysqld
- mysqldump
各セクションに設定を追加。

default-character-set=utf8 を加えておく。
mysqld セクションには
skip-character-set-client-handshake
も追加。

$ diff -u my.cnf my.cnf.org 
--- my.cnf      2008-06-29 00:35:29.000000000 +0900
+++ my.cnf.org  2007-10-12 23:52:41.skip-character-set-client-handshake000000000 +0900
@@ -19,7 +19,6 @@
 [client]
 port           = 3306
 socket         = /var/run/mysqld/mysqld.sock
-default-character-set=utf8
 
 # Here is entries for some specific programs
 # The following values assume you have at least 32M ram
@@ -42,13 +41,10 @@
 tmpdir         = /tmp
 language       = /usr/share/mysql/english
 skip-external-locking
-
-skip-character-set-client-handshake
-default-character-set=utf8
 #
 # Instead of skip-networking the default is now to listen only on
 # localhost which is more compatible and is not less secure.
-#bind-address          = 127.0.0.1
+bind-address           = 127.0.0.1
 #
 # * Fine Tuning
 #
@@ -118,7 +114,6 @@
 quick
 quote-names
 max_allowed_packet     = 16M
-default-character-set=utf8

- Think IT 第4回:Ubuntuを使ったWebサーバ構築 (2/3)

Ubuntu でのサーバ環境構築 [Ubuntu]

- Think IT 【OS-1グランプリ】Ubuntu徹底活用!
は情報としても新しく、ためになる。

MySQL の使い方 [MySQL]

- MySQLの使い方

■ GUI 管理ツール MySQL Administrator
MySQL Tools という
- MySQL Administrator
- MySQL QueryBrowser
- MySQL MigrationToolkit
というセットになっているようだ。

- MySQL :: MySQL GUI Tools Downloads
からダウンロード。

2008-06-28 Sat

Redmine を使い初めてみる。インストール編 [Redmine][Ubuntu]

- 連載:Redmineを運用するためのイロハを身につけよう|gihyo.jp … 技術評論社
の記事が新しそうなのでこれに沿って作業する。

環境は、Ubuntu 7.10 に用意する。

必要なパッケージは、
- mysql-server
- ruby
- libmysql-ruby
- rubygems
のようだ。

全て入っているはず・・・と、apt-cache search にて確認するが、
rubygems は Ubuntu 環境には入れていなかった模様。いれておく。

$ sudo apt-get install rubygems
$ gem -v
0.9.4

rake、rails を入れる。
$ sudo gem install rake
$ sudo gem install rails -v 2.0.2


Redmin をダウンロード。

- RubyForge: Redmine: ファイルリスト

MySQL にデータベースを作成。
mysql> create database redmine;
作成した redmine データベースに、redmine ユーザを作成。

conf/database.yml に DB名、ユーザ名、パスワードを設定する。

DB の作成を行う。rakedb:migrate で。
$ rake db:migrate RAILS_ENV="production"
(in /home/taka/App/redmine-0.7.2)
rake aborted!
No such file or directory - /tmp/mysql.sock

(See full trace by running task with --trace)
上記エラー発生。
確かに、/tmp/mysql.sock はない。。
さて、sock はどこに居るのか?
$ mysqladmin -u root -p version
Enter password: 
mysqladmin  Ver 8.41 Distrib 5.0.45, for pc-linux-gnu on i486
Copyright (C) 2000-2006 MySQL AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Server version          5.0.45-Debian_1ubuntu3.3-log
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 1 hour 6 min 25 sec

Threads: 6  Questions: 7587  Slow queries: 0  Opens: 103  Flush tables: 1  Open tables: 64  Queries per second avg: 1.904
なるほど、/var/run/mysqld/mysqld.sock なんだ。
conf/database.yml に指定を行う。
socket: /var/run/mysqld/mysqld.sock

もう一度。
$ rake db:migrate RAILS_ENV="production"
うまくいく。

初期データの投入。
$ rake load_default_data RAILS_ENV="production"
(in /home/taka/App/redmine-0.7.2)

Select language: bg, cs, da, de, en, es, fi, fr, he, hu, it, ja, ko, lt, nl, no, pl, pt, pt-br, ro, ru, sr, sv, th, uk, zh, zh-tw [en] ja
====================================
Default configuration data loaded.

Note: The rake task load_default_data has been deprecated, please use the replacement version redmine:load_default_data
おっと。本来は redmine:load_default_data の方を使わないといけなかったようだ。

メールサーバの設定。
今回は使用しないので、conf/environment.rb を以下に書き換えておく。
config.action_mailer.perform_deliveries = false

これで動くはず、ということで起動。
ruby script/server -e production

http://<ServerName>:3000/
でアクセス。
ポートを変えたい場合には、-p オプションで指定。

管理者でまずはログインする。
admin/admin

Ubuntu のバージョンを確認する [Ubuntu]

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 7.10
Release:        7.10
Codename:       gutsy

2008-06-27 Fri

Ubuntu 7.10 Deki Wiki Package をインストールする [Wiki]

Wiki エンジンとしての完成度が高いとの評判の Deki Wiki を使ってみることに。
まずはインストール。

環境は、Ubuntu 7.10。
ウェブでちらちらと見ている限り、かなりインストールの敷居が高い模様だが、
現在はパッケージングがうまくされているようにも思える。
さて、やってみる。

- Ubuntu 7.10 Deki Wiki Package Installation - MindTouch Deki Wiki
を参考にやってみる。

■ パッケージインストールのためのレポジトリを追加
/etc/apt/sources.list に

deb http://repo.mindtouch.com xUbuntu_7.10/
を追加。
apt をアップデート。
$ sudo apt-get update

■ 必要なパッケージをインストール

関連するパッケージをまずはインストール。
$ sudo apt-get install html2ps poppler-utils wv gs tidy links
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
Reading state information... 完了            
poppler-utils はすでに最新バージョンです。
以下の特別パッケージがインストールされます:
  libtidy-0.99-0 libwv-1.2-3 perlmagick
提案パッケージ:
  tetex-base weblint-perl xhtml2ps tidy-doc tetex-extra imagemagick
以下のパッケージが新たにインストールされます:
  gs html2ps libtidy-0.99-0 libwv-1.2-3 links perlmagick tidy wv
アップグレード: 0 個、新規インストール: 8 個、削除: 0 個、保留: 73 個。
1047kB のアーカイブを取得する必要があります。
展開後に追加で 4813kB のディスク容量が消費されます。
続行しますか [Y/n]? Y
取得:1 http://jp.archive.ubuntu.com gutsy-updates/main gs 8.61.dfsg.1~svn8187-0ubuntu3.4 [18.2kB]
取得:2 http://jp.archive.ubuntu.com gutsy/universe perlmagick 7:6.2.4.5.dfsg1-2ubuntu1 [170kB]
取得:3 http://jp.archive.ubuntu.com gutsy/universe html2ps 1.0b5-4 [105kB]
取得:4 http://jp.archive.ubuntu.com gutsy/main libtidy-0.99-0 20051018-1build1 [132kB]
取得:5 http://jp.archive.ubuntu.com gutsy/main libwv-1.2-3 1.2.4-2 [142kB]
取得:6 http://jp.archive.ubuntu.com gutsy/universe links 0.99+1.00pre12-1.2 [368kB]
取得:7 http://jp.archive.ubuntu.com gutsy/main tidy 20051018-1build1 [22.3kB]
取得:8 http://jp.archive.ubuntu.com gutsy/universe wv 1.2.4-2 [88.6kB]
1047kB を 0s で取得しました (1275kB/s)
未選択パッケージ gs を選択しています。
(データベースを読み込んでいます ... 現在 159916 個のファイルとディレクトリがインストールされています。)
(.../gs_8.61.dfsg.1~svn8187-0ubuntu3.4_all.deb から) gs を展開しています...
未選択パッケージ perlmagick を選択しています。
(.../perlmagick_7%3a6.2.4.5.dfsg1-2ubuntu1_i386.deb から) perlmagick を展開しています...
未選択パッケージ html2ps を選択しています。
(.../html2ps_1.0b5-4_all.deb から) html2ps を展開しています...
未選択パッケージ libtidy-0.99-0 を選択しています。
(.../libtidy-0.99-0_20051018-1build1_i386.deb から) libtidy-0.99-0 を展開しています...
未選択パッケージ libwv-1.2-3 を選択しています。
(.../libwv-1.2-3_1.2.4-2_i386.deb から) libwv-1.2-3 を展開しています...
未選択パッケージ links を選択しています。
(.../links_0.99+1.00pre12-1.2_i386.deb から) links を展開しています...
未選択パッケージ tidy を選択しています。
(.../tidy_20051018-1build1_i386.deb から) tidy を展開しています...
未選択パッケージ wv を選択しています。
(.../archives/wv_1.2.4-2_i386.deb から) wv を展開しています...
gs (8.61.dfsg.1~svn8187-0ubuntu3.4) を設定しています ...
perlmagick (7:6.2.4.5.dfsg1-2ubuntu1) を設定しています ...

html2ps (1.0b5-4) を設定しています ...
libtidy-0.99-0 (20051018-1build1) を設定しています ...

libwv-1.2-3 (1.2.4-2) を設定しています ...

links (0.99+1.00pre12-1.2) を設定しています ...

tidy (20051018-1build1) を設定しています ...
wv (1.2.4-2) を設定しています ...

Processing triggers for libc6 ...
ldconfig deferred processing now taking place

とくにエラーもなくちゃんと入ったようだ。

Deki Wiki 本体のインストール。
$ sudo apt-get install dekiwiki

■ インストール後の設定

Apache のバーチャルホストの設定を行う。

- /etc/apache2/sites-available/dekiwiki
にある ServerName を書き換えておく。
今回家庭内 LAN 環境におくので、ServerName に適当な名前をつけ、プラスして、
クライアント側の hosts にもその名前でサーバにたどり着けるように記載をしておく。

この状態では Apache からは認識されない状況なので DekiWiki を使えるよう、Apache の a2ensite
コマンドにて、/etc/apache2/sites-enabled/ にシンボリックリンクを作成しておく。
$ sudo a2ensite dekiwiki
Apache の設定を reload する。
$ sudo /etc/init.d/apache2 reload

これで、http://<設定を行ったサーバ名>/config/index.php にアクセスを行い、
DB の設定など、初期設定を行える。

■ 初期設定

http://<設定を行ったサーバ名>/config/index.php
にて初期設定を行う。

設定画面にて DB の情報など、設定情報を記入した後、Install DekiWiki をクリックすると、
セットアップが開始される。

正常に終了した後の画面の最後に、

But wait, you're not done yet!

Please run the following commands manually from the command line to complete your installation:

cd /var/www/dekiwiki/config
mkdir /etc/dekiwiki
cp -p mindtouch.host.conf /etc/dekiwiki
cp -p mindtouch.deki.startup.xml /etc/dekiwiki
cp -p LocalSettings.php /var/www/dekiwiki/
/etc/init.d/dekiwiki start
Additionally, you might want to clean up your configuration files:

cd /var/www/dekiwiki
rm config/mindtouch.host.conf
rm config/mindtouch.deki.startup.xml
rm config/LocalSettings.php

とのことなのでやっておく。

無事インストール成功。



- MindTouch OpenGarden - MindTouch OpenGarden

2008-06-26 Thu

Ruby 会議の映像がアップされている [Ruby]

- RubyKaigi日記
  - 日本 Ruby 会議 2008 - FrontPage

MacPorts でバージョンを使い分ける [MacPorts]

$ port installed ruby
The following ports are currently installed:
  ruby @1.8.6-p114_0+thread_hooks
  ruby @1.8.7-p22_2+thread_hooks (active)
という状態で現在 1.8.7 が active。
動作確認のため、1.8.6 を使いたい。
1.8.7 を deactivate して、1.8.6 を activate する。
$ sudo port deactivate ruby -v 1.8.7
--->  Deactivating ruby 
--->  Deactivating 1.8.7 
Error: port deactivate failed: Registry error: 1.8.7 not registered as installed & active.
$ port installed ruby
The following ports are currently installed:
  ruby @1.8.6-p114_0+thread_hooks
  ruby @1.8.7-p22_2+thread_hooks
オプションを指定し損ねたようだが、
(-v 以降はいらない)
Deactivate できた模様。
$ sudo port activate ruby @1.8.6-p114_0+thread_hooks
--->  Activating ruby 1.8.6-p114_0+thread_hooks
$ ruby -v
ruby 1.8.6 (2008-03-03 patchlevel 114) [i686-darwin8.11.1]
$ port installed ruby
The following ports are currently installed:
  ruby @1.8.6-p114_0+thread_hooks (active)
  ruby @1.8.7-p22_2+thread_hooks
1.8.6 が activate された。

Rails of Ruby on Rails を読む8 [Ruby][RubyOnRails]

引き続き Chapter 4。
■ 注文処理

Cart から、Order にデータを移して、保存する。

完了。

ここで、v2.1.0 の時に失敗したメッセージの日本語化を再度試してみる。

gettext は既に gem で導入済み。

$ gem list gettext

*** LOCAL GEMS ***

gettext (1.91.0)

- conf/environment.rb

require 'gettext/rails'
を追加。

と、確認用に選んだ画面で妙なエラーがでる。
以前はそんなことはなかったが・・・
どうも、gettext が関係してるとは思えない。

ふと、つい最近 Ruby のバージョンを 1.8.7 にしたことを思いだす。
1.8.6 に戻して再度試してみたところうまくいった。
うーん・・・マイナーバージョンの違いでここまで影響でるのか・・・
ちゃんと動いているのは、
- ruby @1.8.6-p114_0+thread_hooks
- Rails 2.0.2
- gettext @0.17_3
の組み合わせ。

■ 自動返信メール

ActionMailer を使う。

OrderMailer < ActionMailer::Base
で指定した @body["order"] の指定のやり方注意。
これでテンプレートファイルの名称を指定しており、
views/order_mailer/order.erb をテンプレートとして使用する。
また、order.erb 内では、@order で注文内容の参照が可能となる。

レンタルサーバの SMTP サーバを自宅環境から使おうとする。
OB25B 対応などで昔程適当に送信することはできない。。
irb では問題無く送信できているのだが、Rails を通すとなぜか・・・


conf/environments 配下の development.rb, test.rb, production.rb で
設定は行われる。

購入した本::Ruby on Rails 逆引きクイックリファレンス [Books]

Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応
大場 寧子 大場 光一郎 久保 優子
毎日コミュニケーションズ
売り上げランキング: 28982

当然、RDoc、マニュアル等に目を通せばわからないことは調べられるのだが、
ポイントを絞って、逆引できるこの手の書籍は便利。

動的 finder::find_or_initialize/create_by_<field_name> (<field_value>) [RubyOnRails]

- find_or_initialize_by_<field_name> (<field_value>)
  <field_name> を <field_value> でひきにいく。
  もしなければ、<field_name> を <field_value>で埋めて新しいインスタンスを生成する。
- find_or_create_by_<field_name> (<field_value>)
  もしなければ、<field_name> を <field_value>で埋めて新しいインスタンスを生成し、DB に保存まで行う。

field_name は一つだけしか指定できない訳ではないのがまた凄いところ。

find_or_initialize_by_first_name_and_last_name('Taro', 'Yamada')
なんてことも OK。

Ruby をバージョンアップしておく [Ruby]

- Riding Rails: Multiple Ruby security vulnerabilities
- 任意のコードが実行される脆弱性について

$ sudo port upgrade ruby
--->  Fetching ruby
--->  Attempting to fetch ruby-1.8.7-p22.tar.bz2 from http://www.ibiblio.org/pub/languages/ruby/1.8
--->  Verifying checksum(s) for ruby
--->  Extracting ruby
--->  Applying patches to ruby
--->  Configuring ruby
--->  Building ruby with target all
--->  Staging ruby into destroot
--->  Deactivating ruby 1.8.6-p114_0+thread_hooks
--->  Installing ruby 1.8.7-p22_2+thread_hooks
--->  Activating ruby 1.8.7-p22_2+thread_hooks
--->  Cleaning ruby
$ ruby -v
ruby 1.8.7 (2008-06-20 patchlevel 22) [i686-darwin8.11.1]

2008-06-24 Tue

2008-06-21 Sat

Rails of Ruby on Rails を読む7 [Ruby][RubyOnRails]

さて、Chapter 4 を ActiveScaffold のインストールから再開。

■ 商品管理

Rails のバージョンを v2.1.0 から v2.0.2 に戻したが、これであれば問題無し。

商品のモデルである Product とそのジャンル管理のモデルである Genre を追加し、
まずは管理者側の画面を用意していく。

ActiveScaffold はこの手の管理系を作るにはサクッといけてよいかもしれない。

- map.root が効かない

ルートへのアクセス(http://localhost:3000/)を products の index 表示に割り当てるのだが、
routes.rb への以下の記載だけでは効かない。
はて?と思っていたのだが、デフォルトで用意されている public/index.html があると、
そちらが優先されるようだ。
削除すると、正しく動作する。
- Ruby on Rails : ページの外見をカスタマイズ(後編) - WebOS Goodies

■ ショップ画面

今度はユーザ側が使用するショップの画面。

商品のサムネイル画像付きの一覧とその詳細画面を用意する。

ライトボックスを実装するために、ProtoThickBox を使用する。
- Spookies Labs
いろいろとライトボックスのライブラリは公開されていんだね。
- JavaScript + Ajax 実践サンプル集 - ライトボックスイメージビューアー
などに説明も。

■ ショッピングカート

ショッピングカートを作成する。

Cart モデルと CartItem モデルを追加する。
本書では Cart モデルを追加後、すぐに Cart モデルの記載を行っていくが、
CartItem モデルを作成後、Cart モデル、CartItem モデル、Product モデルの
関連を記載後、各モデルのコードの記載を行った方が理解しやすいだろう。

Cart モデルで、has_many の :through オプションが出てきた。
これは、

- The Pragmatic Bookshelf Agile Web Development with Rails, Third Edition
  Chapter 18
    Active Record Part II:
    Relationships between Tables
    18.3 belongs_to and has_xxx Declarations
      Using Models as Join Tables p.348

以降で説明がある。

- ERB::Util#u のエンコーディングで日本語 NG

はて?エンコーディング後の文字列が変だな・・・

- ThickBox を :TB_iframe で使うと、インラインフレームで表示される

2008-06-20 Fri

2008-06-19 Thu

Rails の環境を確認する [RubyOnRails]

$ ruby script/about

2008-06-18 Wed

Rails of Ruby on Rails を読む6 [Ruby][RubyOnRails]

Chapter 04 ショッピングサイトの作成

と、早速つまずく。。

Rails のバージョンは、v2.1.0 を使っているのだが、この章で使用する Active Scaffold
v.1.1.1 が Rails v2.1.0 にまだ対応していないようだ。
- Issue 515 - activescaffold - Google Code

さて、今の環境は、

$ ruby script/about 
About your application's environment
Ruby version              1.8.6 (i686-darwin8.11.1)
RubyGems version          1.1.1
Rails version             2.1.0
Active Record version     2.1.0
Action Pack version       2.1.0
Active Resource version   2.1.0
Action Mailer version     2.1.0
Active Support version    2.1.0
Application root          /Users/hoge/NetBeansProjects/locus
Environment               development
Database adapter          sqlite3
Database schema version   20080618143529

1個前の Rails ではどうだろうか?
v2.0.2 を使ってみよう。

まずは、v2.0.2 のインストールから。
$ sudo gem install rails -v 2.0.2
確認。
$ gem list rails

*** LOCAL GEMS ***

rails (2.1.0, 2.0.2)
最新版の v2.1.0 と v2.0.2 が確認できる。

2.0.2 でプロジェクトを作り直す。
rails _2.0.2_ locus2

$ ruby script/about
About your application's environment
Ruby version              1.8.6 (i686-darwin8.11.1)
RubyGems version          1.1.1
Rails version             2.0.2
Active Record version     2.0.2
Action Pack version       2.0.2
Active Resource version   2.0.2
Action Mailer version     2.0.2
Active Support version    2.0.2
Application root          /Users/hoge/NetBeansProjects/locus2
Environment               development
Database adapter          sqlite3
Database schema version   3

さて、これまでに設定、実装、及びインストールしていた環境を作り直しておく。

- ユーザ認証用のプラグイン restful_authentication を入れておく。
  - restful_authentication

AuthenticatedSystem を ApplicationController に集めて include し、
routes.rb に signup、login、logout のマッピングを行い、ルーティングの変更を行っておく。
また、signup、login、logout が正常に動作しているところまでは確認しておく。

- 画像のアップロードプラグイン FileColumn プラグインを入れておく
  - file_column

プラグインのインストールまで。



■ Subversion での無視ファイルの設定。

$ svn propset svn:ignore "*.log" log
$ svn propset svn:ignore "schema.rb" db
$ svn propset svn:ignore "*.sqlite3" db

■ 2.1.0 は config/environment.rb で time zone を管理している
config.time_zone = 'UTC'
見落としていた。。ここを JST に変えてやればいいのかな。

OpenIDを手軽に発行、無償のRailsプラグインが登場 [Security][RubyOnRails]

- OpenIDを手軽に発行、無償のRailsプラグインが登場:ITpro

2008-06-16 Mon

2008 Design Trends [Design]

- 2008 Design Trends
いやぁ、ひとしきり見入ってしまった。
2008年は何がホットなのか?

Pencil sketches, handwritten notes, card stocks, watercolor effects, collage art, script fonts, grungy and splatter ink backgrounds (glossy gradients are not "in" this year)

1年前に著者が編集した以下のサイトたちからのトレンドを引き継き、さらによくなってきているとのこと。
- 33 Artistic Sites

もう一つの傾向として、ビンテージ、レトロものがあると。著者はあまり好きではないようだが、
今年初めに投稿された以下の記事もある。
- Vintage Web Design

完全無料の次世代グループウェア Thetis ワークフロー・勤怠管理・アンケートまで [Tool]

- 完全無料の次世代グループウェア Thetis ワークフロー・勤怠管理・アンケートまで
ちょっと試してみよう。

関連するモデルのデータをひくときに :include [RubyOnRails]

Rails ではモデルの関連を定義でき、SQL を意識せずに関連データの取得を行えるようになっている。

class Entry < ActiveRecord::Base
  belongs_to :author
  has_many :comments, :order => 'created_at DESC'
end
というモデルがあった場合、データの出力は以下のよう行える。
for entry in Entry.find(:all)
  puts "Entry Title: #{entry.title}"
  puts "Written by: #{entry.author.name}"
  puts "Last Comment at: #{entry.comments.first.created_at}"
end
さて、この時 SQL が何本走るか?
そう、Entries テーブル、Authors テーブル、Comments テーブル個々に件数分 SQL が走っている。
これは状況によっては結構キツイ。。

各テーブルを結合した SQL を1本で走らせるには Rails ではどういう方法が用意されているのか?

:include オプションを指定する。

for entry in Entry.find(:all, :include => :author)
  puts "Entry Title: #{entry.title}"
  puts "Written by: #{entry.author.name}"
  puts "Last Comment at: #{entry.comments.first.created_at}"
end
上記は Authors テーブルを結合している。
Comments テーブルも結合する。
for entry in Entry.find(:all, :include => [:author, :comments])
  puts "Entry Title: #{entry.title}"
  puts "Written by: #{entry.author.name}"
  puts "Last Comment at: #{entry.comments.first.created_at}"
end

当然、外部結合をサポートしていない DB では意味がない。。。

Rails of Ruby on Rails を読む5 [Ruby][RubyOnRails]

トラックバックの組み込みのところで少し時間をくってまった。引き続き。

■ タグ・タグクラウド機能

Rails プラグインでレポジトリに
- http://svn.viney.net.nz/things/rails/plugins/
を追加し、
- acts_as_taggable_on_steroids プラグイン
をインストールして使う。

generator で acts_as_taggable_migration を実施する。
migrate を実施することでタグ関連のテーブルが作成される。
モデル(Entry)に acts_as_taggable の呼び出しを追加し、View の変更もしておく。
タグクラウド用のヘルパーを ApplicationHelper に追加する。
サイドバーにもろもろ表示を行うため、その表示ネタを EntriesController で
とってきておく。
EntriesController#index の Entry.find にタグ用の条件を追加し、
layouts/entries.html.erb にサイドバーの表示部分を追加する。

このタグ・タグクラウド機能の追加で一通りのブログの機能の実装を終える。
いやぁ、たいしたもんだね。



- find() のオプションの書き方
 
p.114 にあるように書くと確かにスマートだね。
- The Pragmatic Bookshelf Agile Web Development with Rails, Third Edition
の p.309 以降の「Power find()」はちゃんとおさえておこう。

- まるごと Ruby! Vol.1
  Rails 実践! 基礎&応用テクニック
  DRY 実践術 - 快適な Rails 開発を目指す
も参考になる。
動的ファインダーも"規約"だったんだ。モデルにかくもんだと思っていた。。
まだまだひよっこだなぁ。。。
まるごと Ruby! Vol.1
まるごと Ruby! Vol.1
posted with amazlet at 08.06.18
るびきち arton 大場 光一郎 高井 直人 後藤 謙太郎 新井 俊一 瀧内 元気 cuzic 倉貫 義人 大場 寧子 久保 優子 十河 学 舞波
インプレスジャパン
売り上げランキング: 3438

2008-06-15 Sun

トラックバックをうつ [Ruby]

テスト用に必要になったのでざっくりと。

require 'uri'
require 'cgi'
require 'net/http'

def create_form_encoding_str(field_hash)
  field_hash.collect { |k, v|
    k = k.to_s if k.respond_to? :to_s
    "#{CGI.escape(k)}=#{CGI.escape(v)}"
  }.join('&')
end

def print_response(res)
  puts "---- Response code ----"
  puts res.code
  puts res.message
  puts "---- Response HTTP Header -----"
  res.each do |k, v|
    puts("#{k} => #{v}")
  end
  puts "---- Response Body -----"
  puts res.body
end

def main(target_uri, send_body_hash)
  uri = URI.parse(target_uri)
  res = nil
  send_body = create_form_encoding_str(send_body_hash)
  
  Net::HTTP.start(uri.host, uri.port) do |http|
    res = http.post(uri.path, send_body)
  end
  print_response(res)
end

if __FILE__ == $0
  target_uri = 'http://localhost:3000/entries/2/trackbacks.xml'
  send_body_hash = {:title => 'track back test1',
                    :blog_name => 'MyBlog',
                    :excerpt => '引用です。',
                    :url => 'http://wwww.example.com'}
  main(target_uri, send_body_hash)
end

SDN に登録 [Memo]

- Sun Microsystems - Sun Developer Network (SDN)
に登録しておく。

ホットスポットの 1Day ポスポート [Memo]

- 無線LANサービス ホットスポット1DAY PASSPORT
2回目の利用。結構便利なんだよね。
定額申し込もうかな。

URI::escape or CGI::escape ? [Ruby]

URI エンコードを行う場合は、
- URI::escape
- CGI::escape
どちらを使うのが正解?
「RESTful Web サービス」では、
- URI に含めるものは URI エンコード(URI::escape)
- 表現に含まれる(HTTP のエンティティボディ)ものは、
  フォームエンコード(CGI::escape)
を推奨している。

ちゃんと中身見て判断しないといけないが、
やっちゃいけないこととしては、送信するデータをまとめてエンコーディングすると
面倒くさいところで嵌まる・・・というところだろうか・・・

>> require 'uri'
=> true
>> query_hash = {'q' => '日本代表', 'hl' => 'ja'}
=> {"hl"=>"ja", "q"=>"\346\227\245\346\234\254\344\273\243\350\241\250"}
>> query_string = query_hash.collect { |k, v|
?>   "#{URI.escape(k)}=#{URI.escape(v)}" }.join('&')
=> "hl=ja&q=%E6%97%A5%E6%9C%AC%E4%BB%A3%E8%A1%A8"

2008-06-14 Sat

Rails (v2.1)テスト用の DB 環境を用意する [RubyOnRails]

model のテストを実施しようとしたのだが、table がいないよ!と怒られる。
そうだよね、Dev 環境で動作検証をしていたのだが、テスト用の DB なんて意識して作っていない。

さてどうすれば生成できるのか。
config/database.yml に書かれているように、Rails の開発では、
development、test、production の3つの環境を使う。

ずっと development の環境に向けて作業をしていたので、
development 環境には既に今試したい環境はある。
なので、そこからスキーマを移す。

$ rake db:test:prepare
で、テストを実行。

ただ、これを一度に実行することもできるようだ。
$ rake db:test:unit
この場合は、全ての test/unit ディレクトリにある全てのテストが実行される。

2008-06-13 Fri

open-uri で HTTP GET メソッド以外のメソッドを使う [Ruby]

Leonard Richardson が公開している rest-open-uri を使う。
Ruby gem でインストールできる。

$ sudo gem install rest-open-uri

Rails of Ruby on Rails を読む4 [Ruby][RubyOnRails]

■ トラックバック機能

基本はコメントの機能の追加と同じなので新しいことはないが、よい復習になった。

ただ、実際テストを行ってみるといろいろと出てきた。

★ CSRF 対策にひっかかる

- ActionController::InvalidAuthenticityToken

実装したトラックバックの機能をテストしたのだが、
HTTP エラー 422 が返り、ActionController::InvalidAuthenticityToken の
Exception が投げられる。はて?これは何なのか?

CSRF 対策のための対応が Rails 2系からはデフォルトで入っているようで、
それが効いてしまっているためのようだ。
- ActionController::RequestForgeryProtection
scaffold を使って作成した application.rb の中に、

  # See ActionController::RequestForgeryProtection for details
  # Uncomment the :secret if you're not using the cookie session store
  protect_from_forgery # :secret => 'fed08971b6cf9aa58db38c08f3ccb5db'
が埋め込まれている。

さて、Trackback の機能に CSRF を入れてもなぁ・・・
# Spam の対応は必要だけど。
というところで、外しておく。

trackbacks_controller.rb に以下を追加。
protect_from_forgery :except => [:create]
まじめにやるときはもう少し考えよう。今回はこれで。

- RailsとAIRを使ったToDo管理アプリケーション - ただのメモ
- Rails 2.0でCSRF対策 - cys b

★ トラックバック実施後のクライアントへの戻り

トラックバック実施後のクライアントへのレスポンスは以下の通りとなる。
・Response Code
  ・成功: 201 Created を返す
  ・失敗: 422 unprocessable_entity を返す。
・Location HTTP ヘッダー
  ・成功: 作成されたリソース(トラックバック)への参照
・コンテントタイプ
  application/xml
・HTTP ボディ
  レスポンスのエラーコード(成功は0、失敗は1)を返す XML。
  非常にシンプル。。

さて、本書では、Location の指定が、
render :xml => '<response><error>0</error></response>',
       :status => :created, :location => @trackback
となっていたのだが、:location => @trackback の指定では、リソースマッピングが
うまくいかないはず。案の定 "500 Internal Server Error" を受け取り、

NoMethodError in TrackbacksController#create
undefined method `trackback_url' for #<TrackbacksController:0x3415098>

との表示がされる。
リソースマッピング(routes.rb)には、

map.resources :entries, :has_many => [:comments, :trackbacks]
と書いたので、ここは、
render :xml => '<response><error>0</error></response>',
       :status => :created, :location => [@entry, @trackback]
が正しい(はず)。
動作的には問題無し。

例えば、entry id 2 のリソースにトラックバックをうった場合の location の
戻りは、以下のようなものになる。
# 最後の数字は作成されたトラックバックリソースの id
location => http://localhost:3000/entries/2/trackbacks/3

さて、ここでその location をクライアントが辿ろうとした場合、のリソース表現は用意していない。
# 正確には scaffold で自動生成されているが、そのままでは NG。
実際にその location を辿るかどうかは別にして、一応用意しておく。
views/tracbacks/show.html.erb が対象となる。
生成された下の方にあるリンク、及び、トラックバックをうった entry のタイトルを表示するくらい?

trackbacks_controller.rb の before_filter で :login_required を
使用しているので、:create だけでなく、:show も except としておく。

---
しかし、たまに使うと忘れてしまっている Net::HTTP 。。
- Rubyist Magazine - 標準添付ライブラリ紹介 【第 7 回】 net/http
- net/http - Rubyリファレンスマニュアル

2008-06-12 Thu

ActiveRecord でのテーブル間リレーション [RubyOnRails]

大きく3パターン。

(1) テーブル A の1つの行がテーブル B の 0 または 1 つの行に関連付けられる (1:1)

class Invoice < ActiveRecord::Base
  belongs_to :order
end

class Order < ActiveRecord::Base
  has_one :invoice
end
  
(2) テーブル A の1つの行がテーブル B の任意の数の行に関連付けられる (1:多)
class LineItem < ActiveRecord::Base
  belongs_to :order
end

class Order < ActiveRecord::base
  has_many :line_items
end

(3) テーブル A の任意の数の行がテーブル B の任意の数の行に関連付けられる (多:多)
class Category < ActiveRecord::Base
  has_and_belongs_to_many :products
end

class Product < ActiveRecord::Base
  has_and_belongs_to_many :categories
end

AR で定義可能な関連
- belongs_to 所属を意味する
- has_one 1:1(0) の関係をもつことを意味する
- has_many 1:多の関係をもつことを意味する
- has_and_belongs_to_many 多:多の関係を持つことを意味する

■ 関連を示す際のオプション

親のレコードが削除される場合、子をどうするか?

- :dependent

  - :destroy (または、true)
    親のレコードの削除と合わせて子も削除する。

  - :nullify
    親のみ削除で、子はそのまま残るが、子が持っている親への参照カラムは null
    埋めされる。

  - :false
    親の削除と子は全く関連しない。子はそのまま。

2008-06-11 Wed

Rails of Ruby on Rails を読む3 [Ruby][RubyOnRails]

■ コメント機能

scaffold を使って Comment モデル、コントローラ、ビューを作成する。

attributes で指定した entry:references という指定だが、
マイグレーションファイル上は、

def self.up
  create_table :comments do |t|
    t.string :name
    ...
    t.referencers :entry

    t.timestamps
  end
end
t.references :entry という指定になる。
これは、t.integer :entry_id と同義になるらしい。
初めて知った。

- ネスティッドルート
routes.rb にネスティッドルートの設定を行うが、モデルの関連付け、その親子関係を
ルーティングでも指定できる。
便利だなぁ。

p.099 comments_controller.rb にて、@comment.save が失敗した場合、
format.html { render :template => "entries/show" }
と指定するよう書かれていたが、確かに飛び先はそうかもしれないが、
このままだと layout ファイルは読み込まれず、レイアウトがぐちゃぐちゃになる。
:layout オプションを指定しておく。
format.html { render :template => "entries/show", :layout => "layouts/entries" }

デスクトップでの操作を録画するツール Screen Movie Recorder [Tool]

- AlphaOmega Software

読みたい本::グーグルに勝つ広告モデル [Books]

グーグルに勝つ広告モデル (光文社新書 349)
岡本一郎
光文社
売り上げランキング: 271
おすすめ度の平均: 4.0
3 あくまでメディア側への提案
5 広く深くえぐってます
4 すべてのコンテンツは対立関係にある
4 マスメディア関係者は読んだ方がよい
2 テレビ局への提案書に過ぎない。

2008-06-10 Tue

NetBeans ショートカット覚書 [NetBeans]

以下、Emacs のキーバインドになっている。
- コード補完
  Ctl + space
- ヘルプの表示
  Ctl + Shift + space
- ファイルを実行
  Shift + F6
- ヒント(Quick Fix)を表示 + 実行
  Alt + Enter
- ビューとコントローラの切り替え
  Shift + コマンド + A

- NetBeans IDE 6.0 Ruby Documentation
- NetBeans TV
にあるデモは参考になる。

2008-06-08 Sun

Rails of Ruby on Rails を読む2 [Ruby][RubyOnRails]

■ 画像のアップロード

- FileColumn プラグインを使用する
  ファイル名をテーブルに保持し、実体は、public ディレクトリ配下のモデル名ディレクトリ
  配下にモデルの id と関連付けて保存される。
- テーブルにカラムを追加する
  テーブルにファイル名を追加する必要があるため。
  - generate migration の add_column を使う。
- フォームに multipart であることを指定する。

本の中では表示と新規のファイルアップロードのみの記載しかなかったので、
編集時の変更も追記しておく。
変更は partial で使っている「_form.htm.erb」に image ファイル名が指定されている
場合には画像も表示するようにしておく。
表示の際に「_entry.html.erb」追加したソースとほぼ同じ。
form_for のブロックの中に、以下を追加。

  <% content_tag :p do %>
    <%= f.label(:edit_image, '投稿されている画像') %>
    <%= image_tag(url_for_file_column(:entry, :image)) %>
  <% end if @entry.image %>

■ Atom を配信

- respond_to を利用してリクエストのデータ形式に合わせたレスポンスを返す

この respond_to はいい発想だよなぁ。
これがあることで、クライアントが要求する表現でレスポンスを返すことが可能となり、
かつ、それを同じアクションの中で実施し(ビジネスロジックを変えることはない)、
出力の部分(「クライアントに提供する表現」)だけを切り出して切り替えればよい。

- ヽ( ・∀・)ノくまくまー(2006-03-17)
- the { buckblogs :here }: Web services, Rails-style

実装後、ブラウザから、entries の後に、.atom、.xml などを追加した URI でアクセスすると
その表現が変わるのがわかる。

また、これは、HTTP/1.1 リクエストヘッダー中のAccept フィールドを見る。
wget で試してみる。
- 通常の HTML へのアクセス
$ wget http://localhost:3000/entries
- XML の表現を要求
$ wget --header='Accept: application/xml' http://localhost:3000/entries
- Atom 表現を要求
$ wget --header='Accept: application/atom+xml' http://localhost:3000/entries

さて、中身の実装だが、
- entries_controller#index の respond_to ブロックに format.atom を追加
- views/entries 配下に index.atom.builder ファイルを新規に追加し、
  atom での出力表現を記述。
- layout にて header に Auto Discovery にて atom あるよ!宣言
の3ステップなのだが、こんなに楽なんて。すごい。

ここは後でもう少し詳しく調べておこう。

2008-06-07 Sat

Linux ディストリビューション・レビュー [Linux]

- Open Tech Press ディストリビューション・レビュー [6/4更新]

RESTful on Rails [REST][RubyOnRails]

HTTP メソッド操作説明Rails Controller のメソッド
get読み出しshow
post作成create
put更新update
delete削除destory

put は作成にも用いられる。
では、put と post の違いは何か?

クライアントは、新しいリソースの URI をクライアントが決定する場合に PUT を使用し、
新しいリソースの URI をサーが決定する場合に POST を使用する。

「RESTful Web サービス」より。

Rails of Ruby on Rails を読む1 [Ruby][RubyOnRails]

試している環境。

$ ruby -v
ruby 1.8.6 (2008-03-03 patchlevel 114) [i686-darwin8.11.1]
$ rails -v
Rails 2.1.0
$ gem -v
1.1.1


※ 結局 v2.1.0 では後半部分で active_scaffold が対応していないことがわかり、
v2.0.2 を使うことにしている。



Chapter 03 ブログの作成

■ 記事の作成・読み出し・編集・削除

- scaffold を使って足場を固める。
- レイアウトとデザインの変更。その中で DRY を実践。
  - render の partical の使い方が参考になる。
  - :collection オプションが便利だ。

■ バリデーションと日本語対応

- バリデーションと日本語対応はエラーとなった。

そもそも、追加した Ruby-GetText-Package が require で失敗する。
とりあえず後回し。


@todo:これはきっと v2.1.0 に GetText が対応していないがためのエラーと想定される。


しかし、国際化対応のライブラリとして、Ruby-GetText-Package があることを
初めて知った。。ついていけてないなぁ・・・
- Ruby-GetText-Package - よたらぼ 保管庫

■ ユーザ認証・管理

- ユーザ認証の機能をつける。restful_authentication を利用する。
- Rails プラグインを初めて使う

NetBeans では GUI でリポジトリの追加、プラグインのインストールが行える。

追加したレポジトリは、
http://svn.techno-weenie.net/projects/plugins/
追加したプラグインは、
restful_authentication

- ユーザ認証・管理を restful_authentication プラグインで構成する
なかなか使いかってはよさそうだ。

authenticated という generator も追加され、ユーザ認証に必要なモデルとコントローラは
自動生成が可能となる。

SQLite のデータ作成日時 [SQLite]

GMT で入ってしまうのだが、どうすれば?

NetBeans 6.1 はなかなかよい [NetBeans]

NetBeans の v6.1 が出ている。
- ja: NetBeans 日本語サイト
- NetBeans 6.1 日本語版正式リリース - Masaki Katakai's Weblog
- Open Tech Press 「NetBeans IDE 6.1」日本語対応マルチリンガル版リリース

起動時間短縮やメモリ消費量削減などでパフォーマンスも向上した。



うーん・・・これはかなりよくなっている。
自宅での利用は主に Ruby、JavaScript、HTML、CSS といったところなのだが、
JavaScript もちゃんとサポートされている。
Aptana を使ってきたが、軽さと扱い易さというところで NetBeans に鞍替えかもしれない。

-- まだ途中。
■ 良い点
- コード補完がよくなってきている。
- コード補完のヘルプが結構充実。
- JavaScript もいけるよになっているし、HTML もなかなか。

■ 悪い点というか、解決したい点
- Subversion のコメントで日本語が使えない。

2008-06-06 Fri

NetBeans Emacs キーバインド追加 [NetBeans]

うーん、なぜマークが割り当てられていないのか・・・
そもそもできないのかな・・・

取りあえずストレスが減るようにキーバインドを Emacs キーバインドに近づけておく。

・その他>挿入ポイントを前方に [Ctl + F]
・その他>挿入ポイントを後方に [Ctl + B]
# なぜ Ctl + N, Ctl + P は割り当てられているのにこれが割り当てられていないのだ?

SQLite 用の GUI SQLite Manger [Tool]

- SQLite Manager :: Firefox Add-ons

Google Desktop For Mac をアンインストールする [Mac]

悪くはないのだが、Mac には、Spotlight がいるし、インデックス作成をやっている間に
奪われているリソースによくイライラさせられてしまったため。。
- Mac OS 向け Google デスクトップをアンインストールするにはどうすればよいですか。

MacPorts で Ruby, RubyGems を管理する [Mac][RubyGems]

環境が面倒臭いことになってきたので、今後パッケージ管理は MacPorts
で統一することにする。
まずはソースからインストールしていた Ruby と RubyGems を MacPorts で入れておく。

$ sudo port install rb-rubygems
--->  Fetching ruby
--->  Verifying checksum(s) for ruby
--->  Extracting ruby
--->  Applying patches to ruby
--->  Configuring ruby
--->  Building ruby with target all
--->  Staging ruby into destroot
--->  Installing ruby 1.8.6-p114_0+thread_hooks
--->  Activating ruby 1.8.6-p114_0+thread_hooks
--->  Cleaning ruby
--->  Fetching rb-rubygems
--->  Verifying checksum(s) for rb-rubygems
--->  Extracting rb-rubygems
--->  Configuring rb-rubygems
--->  Building rb-rubygems with target all
--->  Staging rb-rubygems into destroot
--->  Installing rb-rubygems 1.1.1_0
--->  Activating rb-rubygems 1.1.1_0
--->  Cleaning rb-rubygems

$ which ruby
/opt/local/bin/ruby
$ ruby -v
ruby 1.8.6 (2008-03-03 patchlevel 114) [i686-darwin8.11.1]
$ which gem
/opt/local/bin/gem
$ gem -v
1.1.1

RubyGems でパッケージを追加しておく。
$ gem query

*** LOCAL GEMS ***

$ sudo gem update --system  # update
$ sudo gem install rails    # rails
$ rails -v
Rails 2.1.0
$ sudo gem install sqlite3-ruby # SQLite Driver
$ sudo gem install rmagick      # ImageMagick
$ sudo gem install mongrel      # Mongrel Server

あと、irb の補完機能のために、Wirble を。
$ sudo gem install wirble

最新の Rails を試す [RubyOnRails]

嵌まる。。

環境

$ which ruby
/usr/local/bin/ruby
$ ruby -v
ruby 1.8.5 (2006-08-25) [i686-darwin8.8.3]
$ which gem
/usr/local/bin/gem
$ gem -v
1.1.1
$ which rails
/usr/local/bin/rails
$ rails -v
Rails 2.1.0
$ which sqlite3
/opt/local/bin/sqlite3
$ sqlite3 --version
3.5.9

SQLite を DB として使い db:migrate とすると以下の状態。
$ rake db:migrate
(in /Users/taka/NetBeansProjects/locus)
dyld: NSLinkModule() error
dyld: Symbol not found: _RSTRING_PTR
  Referenced from: /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.2/lib/sqlite3_api.bundle
  Expected in: flat namespace

Trace/BPT trap

上記環境を見るとわかるが、MapPorts のパッケージ管理でやっているのは SQLite だけで、
後はソースからコンパイルして入れていたものである。
dyld: NSLinkModule() error
なので、ダイナミックライブラリの問題なのでしょう。

おそらく、
  Referenced from: /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.2/lib/sqlite3_api.bundle
から参照されているライブラリは /usr/lib 配下になっていて、
SQLLite は MacPorts で入れているので、/opt/local/lib 辺りにいることになっているとか・・・

で、/usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.2/lib/sqlite3_api.bundle を
ちょっとみてみたのだが(バイナリだね)、確かに、/usr/lib/libsqlite3.0.dylib なんて
文字列が認められる。

シンボリックリンクで繋ぎ直してもいいかと思うが、ちょっと面倒臭い。

今後のこともあるので、ここで一度 MacPort で統一することにする。
そうそう最新のものでないといけないことも無いし。

MacPorts でいれたパッケージとコンパイルして入れたプログラム [Mac]

MacPorts で Ruby の新しいバージョンのものを入れてた。
当然付属の irb の動きもかわる。

環境的に元々の Ruby のバージョンを使う必要があったため、
一旦 MacPorts の Ruby は削除した。

さてここで。

$ which irb
/usr/local/bin/irb
$ irb
-bash: /opt/local/bin/irb: No such file or directory
$ /usr/local/bin/irb
>>           # OK
あれ? which で正しくパスが出ているのに、直接叩いた時は
/opt/local/bin/irb しかみない。
PATH 変数は確かに /opt 配下を先にしているけど、その後に、
/usr 配下も入っている。

/opt で見つけられなければ、/usr を見に行くはずだよね・・・

どこかに情報が残っている??

取りあえず、それならばと /opt/local/bin/irb は実体へのシンボリックリンクとしておく。

ImageMagick をインストールしておく [Mac]

$ sudo port install ImageMagick

Ruby から ImageMagick を使うために RMagick も入れておく。
$ sudo gem install rmagick

RubyGems コマンド [RubyGems]

- インストールされている gem を調べる

$ gem query

・・・これから追記していく。

MacPorts コマンド [MacPorts]

- インストールされているものを調べる

$ port installed

- MacPorts のレポジトリとローカルレポジトリの差分をみる
$ port outdated

- インストprールされているパッケージの更新
$ sudo upgrade installed

差分だけということで
$ sudo upgrade outdated
とういう使い方もできる。

・・・これから追記していく。

Mac Ports と RubyGems のメンテ [MacPorts][RubyGems]

気が向いた時にたまにしておく。
- MacPorts 本体の更新、カタログの更新

$ sudo port -d selfupdate
- MacPorts でインストールされているパッケージの更新
$ sudo port upgrade installed
- RubyGems 本体の更新
$ sudo gem update --system
- RubyGems でインストールされている Ruby 関連パッケージを最新に
$ sudo gem update

Google App を使ってみた [Google]

- ドメインを取得。
- 「ドメインの所有権を確認」は CNAME で。
- mx レコードの登録

mx ASPMX.L.GOOGLE.COM. 10
mx ALT1.ASPMX.L.GOOGLE.COM. 20
mx ALT2.ASPMX.L.GOOGLE.COM. 20
mx ASPMX2.GOOGLEMAIL.COM. 30
mx ASPMX3.GOOGLEMAIL.COM. 30
mx ASPMX4.GOOGLEMAIL.COM. 30
mx ASPMX5.GOOGLEMAIL.COM. 30

RESTful Web サービスを読む5 [REST][Ruby]

読み終わった。
いやぁ、勉強になった。

2008-06-05 Thu

2008-06-01 Sun

Emacs よく忘れるコマンド [Emacs]

- バッファの環境下で式を評価する
  M-:

■ Emacs List モードで
- 関数名、変数名の補完
  M-TAB
- 式の評価
  評価する式の最後にカーソルを移動し、C-x C-e
- リージョン、バッファにある式を一気に評価する
  M-x eval-region
  M-x eval-current-buffer

RESTful Web サービスを読む4 [REST][Ruby]

引き続き[2008-05-22] に購入した RESTful Web サービスを読んでいる。

7章 サービスの実装まで読み切る。

「7.11.2 標準化による記述」にある

すべてのリソース指向の RESTful Web サービスは、URI を使用してリソー
スを特定し、HTTP の 統一インターフェイスに基づいて操作を表現する。

に、この本で言いたいことが集約されている気がする。

Web サービスのアーキテクチャーでもちゃんとオブジェクト指向しようよ!
ということなんだと解釈。

Ruby を exe (インタプリタも一緒に)で配布 [Ruby]

- Exerb Project
- RubyScript2Exe - A Ruby Compiler

2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2009-01-02 23:56