EC2onRailsを使うついでにCapistrano用Zsh補完関数を書きました。

.cap_completion.zsh

   1  _cap () {
   2    `cap -T | grep '^cap ' | sed 's/^cap //' | sed 's/ .*//' | sed 's/^/compadd /'`
   3  }
   4  
   5  compdef _cap cap

posted by Png genki on Fri 25 Apr 2008 at 16:37 with 1 comment

面白いと思ったので、抜粋して翻訳です。
原文長いですが、面白いのでぜひtryしてみてください。

http://crave.cnet.com/8301-1_105-9923315-1.html
(Credit: Daniel Terdiman/CNET News.com)

IKEAの製品をたくさん組み立ててきたライターがIKEAの製品開発者June DeboehmlerさんとPRのMarty Marstonさんに話を聞く。

製品はまず値段から

「製品について決めるときは、まずは値段について考える。」と、Deboehmlerさん。「それから、消費者は何を必要としているかを考える。」

"When we decide about a product, we always start with the price," Deboehmler said. "Then, what is the consumer need?"

もったいない:製品編

「数えきれないトライアルの後に、やっとこれで完成だというところに行きつく。」 「デザイナーが四つん這いの状態で、"OK, これが製品だ"と言ってくる。それから(IKEA HQがある)スウェーデンに戻り、またパーツに分解するんだ。アーム部分の角度を変えればパッケージにより適するよりよい製品にできないかを決めるためだよ。」

"After many, many days of trials, we thought we had it right," Deboehmler said. "'OK, this is the product.' Our designer was on his hands and knees. Then we got it back to (Ikea headquarters in) Sweden and started taking it apart again, and decided we can make it better because we can fit more in the package if we changed the arm direction."

「紙の上では最適に見えるんだけど、でも実際手に取ると"あ、ここをこういう風に回転すると、このアーム部は7じゃなくて10取れるわ"ってわかるのよ」と、Marstonさん。

"When you see something on paper, it looks great," Marston said. "But it's not until you touch it that you say, 'Aha, if you turn it this way, we could get 10 arms out of this length of wood instead of 7."

結局Lillbergチェアはコンセプトから出荷まで10か月かかった。

The Lillberg chair took the design team about 10 months from concept to completion, including manufacturing time and global shipments.

製品の名前はスウェーデンの町から

Deboehmlerさん曰く、チェアからソファまで多くはスウェーデンの町の名前にちなんでいるということです。「スウェーデンをドライブして回っていると、突然、この町の名前、あのソファよってことになるんです」

Deboehmler said many, including the company's chair and sofa products, are named after Swedish towns. "So when you're driving around in Sweden," she laughed, "you suddenly see this town name that's a sofa."

もったいない:倉庫編

「パレット(荷台)サイズは(たった)二つしかないのよ」と、Marstonさん。

"We have (only) two pallet sizes," Marston said,

「これらの工場内は暗いまま、ロボットはライトを必要としないし、それに1日に24時間働いてくれる:製品をピックアップしたり、移動したり。」

These factories, Marston said, are dark, since no lighting is needed for the robots, and run 24 hours a day, picking and moving goods around.

Refs

dovetail joint
http://en.wikipedia.org/wiki/Dovetail_joint

posted by Png satoko on Thu 24 Apr 2008 at 13:22

RaptのサブコマンドをZshで補完するためのスクリプトです。

.rapt_completion.zsh

   1  _rapt () {
   2    `rapt help | grep "^  [a-z:][a-z:]*" | sed 's/^ *//' | sed 's/  *.*//' | sed 's/^/compadd /'`
   3  }
   4  
   5  compdef _rapt rapt

何度か欲しいと思ったので書いてみました。

posted by Png genki on Thu 24 Apr 2008 at 11:02

ちょっと昔のコードのRSpecをAutotest対応にした時の作業ログです。

script/spec

   1  #!/usr/bin/env ruby
   2  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../vendor/plugins/rspec/lib"))
   3  require 'rubygems' #追加
   4  require 'spec'
   5  #::Spec::Runner::CommandLine.run(ARGV, STDERR, STDOUT, true, true)
   6  ::Spec::Runner::CommandLine.run(
   7    ::Spec::Runner::OptionParser.parse(ARGV, STDERR, STDOUT))  

See Also

posted by Png genki on Wed 23 Apr 2008 at 23:26

script/generate mailerでgenerateされるテストコードの@expectedはTMailのインスタンスらしく、生すぎなことがあります。
というわけで、お手軽にテストする方法をぐぐりました。

via http://sablog.com/archives/2006/03/14/how-to-test-actionmailer-in-ruby-on-rails

   1  class SampleMailerTest < ActionMailer::TestCase
   2    tests SampleMailer
   3  
   4    def setup
   5      # テスト時に配送したメールの配列を保存する。
   6      ActionMailer::Base.deliveries = []
   7    end
   8  
   9    def test_welcome
  10      to = "satoko@s21g.com"
  11      sender = to
  12      sender_name = "satoko"
  13  
  14      SampleMailer.deliver_welcome(to, sender, sender_name)
  15      assert !ActionMailer::Base.deliveries.empty?
  16  
  17      sent = ActionMailer::Base.deliveries.first
  18      assert_equal [to], sent.to
  19      assert_equal "expected title", sent.subject
  20      assert sent.body =~ /^Recommended by #{sender_name}. Enjoy!$/
  21    end
  22  end

Refs

http://wota.jp/ac/?date=20050731

posted by Png satoko on Tue 22 Apr 2008 at 16:34

近々使うかもしれないので。

http://www.amazon.com/gp/browse.html?node=201590011

用語

  • Amazon Elastic Compute Cloud (Amazon EC2)
  • Amazon Machine Image (AMI)
  • Amazon S3 (Amazon Simple Storage Service)

まずはGettingStartedから

http://docs.amazonwebservices.com/AWSEC2/2008-02-01/GettingStartedGuide/
(注)下記は2006年10月12日時点での記事ですが、内容がGettingStartedと今も大体同じ感じです(コマンドもそのままぽい)。
ここギコ!さん乙!
http://kokogiko.net/m/archives/001772.html

必要なもの

  • SSHクライアント
  • JRE:version 5

何ができるのか

defaltで用意されているイメージに自由にツールインストールできる。
ただし、インスタンスを止めてしまうと加えた変更は全て破棄されてしまう。加えた変更も併せ再現可能な状況にしようと思えば、現在のインスタンスの状況をイメージ化して登録すればよい。

Refs

疑問

AMIインスタンスの再起動とOSの再起動って違うんだろうか。後で調べる。

Amazon EC2を人に勧めると必ず言われるのが、「インスタンスを再起動したらディスクが消えるのが怖い」。

これは「インスタンス」を再起動であって、OSを再起動してもディスクは消えないのだが、確かに起動に必要なファイルを消してしまって、OSが起動できなくなってしまうと、確かに取り出せなくなってしまいます。
http://blog.masuidrive.jp/index.php/2008/04/14/ec2-ersistent-storage/

posted by Png satoko on Tue 22 Apr 2008 at 07:46 with 3 comments

ここのレビューがためになりました。ので抜粋。
http://highscalability.com/google-appengine-second-look

Developer Forum抜粋訳

  • データベースのエクスポート機能はなし。自前で用意する必要あり。
  • limitに気をつけろ
    • 1MB upload limit
    • 1000 database return limit
    • Google limits your CPU usage
  • フルテキスト検索はサポート対象外
  • SessionはGoogleのを使え:djangoのauth, sessionは使えない
  • 遅い:It takes GAE almost 3 seconds to save 50 of dummy records (consisting of just 2 text fields).

以下、自分用メモ。

GAEでの注意

  • MySQLとBigTableは全然違う観点で作られている
    ちょっとのデータをめっちゃくちゃ早くするというものがゴールでなくて、多くのデータを処理し、分散させるというゴールにもとづいてデザインされている。
  • web appの開発ノウハウは全然役に立たない(Sessionがないとか、JOINがないとかが大きい理由?)
  • AWSのノウハウはGAEでは全然役に立たない(GAEはvm。モデルが違う)

早くするコツみたいなもの:遅いのは使い方が良くないから

例えばavg()、データをInsertする時に計算しておいて、表示するだけのほうがよい。
MYSQLだとアクセスがあったときにJOINして計算するのが普通だろうが、GAEではデータは分散されて保存されるので(+JOINがない)、そのたび計算するのだと遅くなる。
Insert時に計算はすべて終わらせて、あとはSelectだけということか。

Refs

http://hiroshiykw.blogspot.com/2008/04/google-app-engine_10.html

posted by Png satoko on Tue 22 Apr 2008 at 06:50

なんだそうです。瀧内さんいわく。
Debianで普通に入れると1.4.4.4が入るのでコマンドがなかったりして困るらしいです。

短かくてすみません。またインストール成功したらレポートします^^

追記:ついでにRailsのgitリポジトリ。
http://github.com/rails/rails/tree/master

posted by Png satoko on Mon 21 Apr 2008 at 15:02

Gitを使いたいのだけど、まだインストールしてませんw
なので予習を兼ねてBest Practicesを訳。間違っているかもしれないので、ご了承ください。

http://www.tpope.net/rails-git-best-practices

名前とメールアドレスを設定しよう

   1  $ git config --global user.name "Tim Pope"
   2  $ git config --global user.email "foo@gmail.com"

ついでにカラーリングコマンドも

   1  $ git config --global color.diff auto
   2  $ git config --global color.status auto
   3  $ git config --global color.branch auto
   4  $ git config --global color.interactive auto

コミットメッセージについてのベストプラクティス。実践したほうが、ログも見やすい。下記にコミットメッセージの良いお手本を挙げる。

   1  変更についての短いサマリ(50文字以内)
   2  
   3  必要であれば詳細を書く。それでも72文字くらいで。また環境によっては、1行目emailの件名、残りはbodyになることもある。サマリとbodyを分ける空白行は必須(bodyを省力する場合は、なくてもOK); ただしrebaseのようなツールを一緒に使うとうまくいかないことがある
   4  
   5  パラグラフは空白行の後に続けること。
   6  
   7   - Bullet pointsもOK
   8   
   9   - 一般的に、シングルスペースに続くハイフンやアスタリスクはbulletに使われ、それぞれのは空白行で区切られる。しかし、この辺はしきたりが異なることもあるので注意(訳間違ってるカモです)
  10  
  11   - 手動のインデント

Rails coreに自分のコードをコミットするなら、さらに付け足し。差し当たり、URL決めて、そこに自分の投稿を公開するか、又は、下記のコマンド群を発行しfileを取得しよう。そうすることにより、gitのam(ローカルの自分の変更履歴の再構築)コマンドで誰でも簡単に適用できる(訳間違ってるカモです)。

   1  $ git checkout my_funky_branch
   2  $ git rebase origin/master
   3  $ git format-patch --stdout origin/master.. > my_funky_patches

さらに、最新にしておくためのtip: 最新の変更をダウンロードするなら、git pullの代わりに、git pull --rebaseを使ってみよう。マージコミットで、履歴をクラスタ化するよりは、先のコマンドによって自分の変更を最新のものに再適用してくれるのだ。1点注意することとしては、もし変更を他のリポジトリにpublishしたら、このコマンドは使わないこと。既にオリジナルコミットを取得した誰かにところで問題が起こるかもしれない。

posted by Png satoko on Sun 20 Apr 2008 at 16:15

勉強会参加者の皆様、昨日はお疲れ様でした。

P1000162.JPG

今回は、事前に参加登録していただいた方々がほとんど全員お越しくださったようで、配布資料も3度増刷がかかる盛況ぶりでした。内容のほうも昨年のComet勉強会を彷彿とさせるような非常に濃い話が飛び交い、想定していた以上に勉強ができる会になりました。ありがとうございます。

P1000163.JPG

全体的な振り返りとしては、大体以下のような次第でした。

  1. 自己紹介+自分がかかわっているOpenID活動の紹介
  2. rakuto氏によるOpenIDの動作原理の詳説
  3. ZIGOROu氏によるプレゼンテーションx2
  4. OpenIDとビジネス化の方向性について議論
  5. 各所での利用状況に関する情報交換
  6. OpenID関連のイベント・勉強会情報の告知
  7. 名刺交換タイム(?)
  8. 懇親会(6時間に及ぶ延長戦)

非常に密度の濃い議論や意見交換ができたと思います。 内容の濃さという意味では、昨年のComet勉強会を髣髴とさせるものがありましたね。勉強会後の満足感は、参加者によるところが大きく、最高の参加者が集まった時点で今回の勉強会の成功は決まっていたといって過言ではないと思います。 ありがとうございました。

最後になりましたが、会場提供をしていただいたドリコム様、ありがとうございました。

See Also

サーバ移行中で自動トラックバックがオフになってるのを忘れていました。Googleで探して見つけ次第手動で追加しています。

posted by Png genki on Sun 20 Apr 2008 at 09:25 with 2 comments