赤目を防ぐ工夫

Flickr には赤目補正機能などもついているのだが、そもそも赤目を防ぐ工夫。

  • ストロボの光を直接被写体に当てず、天井や壁、またはプロが使う反射板に向けて、その反射光を被写体に当てる間接フラッシュと呼ばれる手法を使う。ストロボの光が拡散されて目に届くため、赤目が起きにくくなる。
  • ストロボをカメラから離し、光が斜めから目に入るようにする。こうすると、反射光は直接カメラに入ってこなくなるため、赤目が起きにくくなる。
  • ストロボを使わないようにして撮影する(明るい場所で撮影する、レンズの絞りを広げる、感度の高いフィルムを使う、シャッター速度を遅くするなど)。
  • ストロボを使わずに周囲の光だけで撮影し
    • 後からデジタル画像編集で明るさを増強する。
    • 増感現像により、シャッター速度を遅くしたり絞りを広げたのと同じ効果を得る。
  • 最近のカメラに備わっている赤目軽減機能を使う。これは一般に撮影の直前にストロボを少し光らせ、瞳孔を閉じさせてから再度ストロボを光らせて撮影するものである。
  • 被写体がカメラのレンズを見つめないようにする。例えば撮影者の肩のあたりを見るよう指示する。
  • 部屋の照明を明るくしておけば、瞳孔が元々若干閉じ気味になる。これだけでも赤目が起きにくくなる。
  • 画像編集ソフトウェアによっては、赤目を修正する機能がある。

ストロボがカメラ内蔵型でない場合、ストロボとカメラの距離が被写体とカメラの距離の1/20以上であればよい。だから、赤目を防ぐためには、被写体との距離を縮めていくことが効果的である。

Ruby でランダム文字列を生成する

Ruby で英数字でできるランダムな文字列を生成するときどうするか。
Ruby の配列は以下の性質がある。

>> [1, 2, 3] + [3, 4, 5]
=> [1, 2, 3, 4, 5]

>> Array.new(4, "foo") 
=> ["foo", "foo", "foo", "foo"]

これらに注意して

>> a = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
>> code = (
          Array.new(16) do
            a[rand(a.size)]
          end
          ).join
=> "8vQQnRnGhebA55pC"

とか。

ブレインストーミング

ブレインストーミングについて、参考になったのでメモ。

ブレインストーミングの10か条

 「批判しない」、「時間を区切る」といったルールはアタリマエかもしれないが、なじみのない原則が目を引いた。「視線を泳がせろ」や「メモは取るな」というルール。ブレストは歩きまわって意識を切替ながらすべきだし、メモは記録係(トラッカーと呼ぶ)にまかせて集中しろ、という。見出しだけ引用する。

1. 批判しない
2. 誰でもいい
3. かぶってもいい
4. ゴールをクリアに
5. 時間を区切る
6. 場所が大事
7. ポジショニング
8. とにかくしゃべれ
9. 視線を泳がせろ
10. メモは取るな

「プロジェクト・ブック」はスゴ本

ブレストの悩みは、パソコンを持ち込むばっかりに、途中でパソコンの方に目がいってしまって、アイディア出しに集中できなくなること。
これにより、7, 8 が疎かになってしまう。
とはいえ、サイトを見ながらのブレストも必要なので、パソコンは皆が見る用のみ。つまり、プレゼンター 1 人だけが持つ形にして、後の人はアイディア出しに集中すべきでは、と思う。どんなブレストにおいても。

それから、10 が大事。
どんな会議においても取り入れていきたい。アイディア出しはアイディアを出すことに注力すべきであって、メモを取ることが重要なのではない。とは言え、どうしても後で参考にしたいこともある。ここで登場するのがトラッカー。

トラッカー重要
プロジェクト全体を見渡しながら、現場で生まれるあらゆる情報の軌跡を追い、記録していく仕事。
レビュー報告書だとか進捗報告といったテンプレート的なドキュメントはあるが、構造づけて整理し、いつでも再利用できるようにするところは注目すべき。
メタレベルな視点は、現場にもまれているプレイング・マネージャには不可能だろう。

トラッカーをチームに加えよう。トラッカーは決して後ろを振り返るための仕事ではなく、前進するための推進力を生み出す仕事であると心得よ。

もし、トラッカーがいて、その人が後から参考になるメモをとっておいてくれるならば、アイディア出しに集中できるのに、と思うことも何度もあります。

議論を「あなたvsわたし」の構図から、「問題vsあなた+わたし」にするツールとして、ホワイトボードよりも強力なものを知らない。

究極の課題はここ。
「問題vsあなた+わたし」の状態にできるまでが一歩。そして皆が集中してブレストができれば最高と。

ライフログ

外部脳という考え方があったか。

Rails で Capistrano

Capistrano の基本的な使い方 が分かったので、今度は Rails App での Capistrano の利用を見てみたい。

前提条件

まず、利用にあたり、前提条件は以下。

  • Ruby on Rails APP をデプロイしたい
  • Subversion を利用している
  • プロダクション先は決定している
    • ソフトウェア, DBMS サーバ
  • Subversion レポジトリとデプロイ環境のユーザ名が同一
  • Subversion レポジトリはローカルホストからも、デプロイ先のサーバからもアクセス可能
  • ターゲットホストには公開鍵を使い ssh 経由でアクセスできること
  • データベースが作成され、APP が利用するユーザ名でクエリ発行可能な状態になっていること

Capistrano 初期設定

Rails APP で Capistrano を利用するにあたり、

  • Capfile を APP の ルートディレクトリに設置
  • デプロイに関する基本設定を記述する config/deploy.rb を用意

する。これらのスタブファイルを capify コマンドで作成する。

# capify .
[add] writing `./Capfile'
[add] writing `./config/deploy.rb'
[done] capified!

"cap -T" コマンドで、この初期設定により利用可能になるタスクの一覧 (多くはデプロイに関連するもの) を見ることができる。

# cap -T
cap deploy               # Deploys your project.
cap deploy:check         # Test deployment dependencies.
.......
Extended help may be available for these tasks.

"cap -e" で各タスクの詳細な説明を見ることができる。

# cap -e deploy:symlink                                                                                                     
------------------------------------------------------------
cap deploy:symlink
------------------------------------------------------------
Updates the symlink to the most recently deployed version. Capistrano works by
putting each new release of your application in its own directory. When you
deploy a new version, this task's job is to update the `current' symlink to
point at the new version. You will rarely need to call this task directly;
instead, use the `deploy' task (which performs a complete deploy, including
`restart') or the 'update' task (which does everything except `restart').

プロジェクトの詳細を設定

capify により以下のような config/deploy.rb が生成される。

set :application, "set your application name here"
set :repository,  "set your repository location here"

# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
# set :deploy_to, "/var/www/#{application}"

# If you aren't using Subversion to manage your source code, specify
# your SCM below:
# set :scm, :subversion

role :app, "your app-server here"
role :web, "your web-server here"
role :db,  "your db-server here", :primary => true

上記の引数を、プロジェクトの設定に書き換える。
Capistrano はデフォルトでは /path/to/yourapp/ にデプロイする。
デプロイ先が元のディレクトリと異なる場合には、deploy_to 変数をセットする。

set :deploy_to, "your deploy_to directory"

ゲートウェイ

セキュリティ上、ゲートウェイを設定したい場合は、config/deploy.rb にて以下のようにゲートウェイサーバを指定する。

set :gateway, "your_gateway_server"

spin ファイルの設定

以下、3001 番ポートでの Mongrel デーモンを仮定する。
script/process/spawner を呼出す spin スクリプトを書き、script ディレクトリ以下に配置する。
まず、script/spin ファイルを作成し、以下のように記述する。

#!bin/sh
/path/to/yourapp/script/process/spawner -p 3001 -i 1

実行権限を与える。

#chmod u+x script/spin

これにより、script/spin で Mongrel を起動、再起動が可能になる。
複数の Mongrel プロセスを立ち上げる場合には、spin ファイルは以下のようになる。

/path/to/yourapp/script/process/spawner -p 3001 -i 3

これで、3 Mongrel プロセスが起動する。

セットアップ

Capistrano 最初のコマンドを発行する。

# cap deploy:setup
  * executing `deploy:setup'
  * executing "umask 02 && mkdir -p /home/haida/ /home/haida/releases /home/haida/shared /home/haida/shared/system /home/haida/shared/log /home/haida/shared/pids"
    servers: ["your_app_server"]
  * establishing connection to gateway `your_gateway_server'
    starting connection to gateway `your_gateway_server'
    gateway connection established
  * establishing connection to `your_app_server' via gateway
    connected: `your_app_server' (via gateway)
    [your_app_server] executing command
    command finished

Capistrano はサーバにログインし、以下のようなディレクトリ階層を作成する。

#{deploy_to}/
#{deploy_to}/releases
#{deploy_to}/shared
#{deploy_to}/shared/log
#{deploy_to}/shared/system
#{deploy_to}/shared/pids

依存関係のチェック

Capistrano のデプロイに必要なソフトウェアが全てインストールされているか、以下のコマンドで確認する。

# cap -q deploy:check
You appear to have all necessary dependencies installed

実際に deploy:check タスクが何をしているかは -q (Quiet オプション) を取って実行すると確認できる。

Cold デプロイ

初期のデプロイ時には APP はまだ走っていない "cold" 状態。そこで "cold" タスクを実行する。

# cap deploy:cold

このタスクはコードをサーバに移動し、マイグレーション、spin スクリプトを実行する。
これ以降の deploy は

# cap deploy

で実行する。

ロールバック

ひとつ前のリリース状態には以下のコマンドで簡単に戻せる。

# cap deploy:rollback