切り抜きと回転

写真の現像

Lightroom3で写真の現像をするには現像モジュールに移動します。ショートカットはD*1です。現像モジュールからライブラリモジュールに戻るショートカットはG*2です。

切り抜きと回転

一番最初にやる補正は切り抜きと回転でしょうか。ショートカットのRで切り抜きツールが開きます。Adobe TVのチュートリアルでも述べられていますが、cRop(切り抜き)&Rotate(回転)のRだと考えると覚えやすいと思います。ショートカットのOでグリッドオーバーレイの切り替えができます。グリッドオーバーレイというのは写真の上に重ねて表示される、ガイドのことです。黄金比や黄金螺旋などを選択することができます。また、Shift+Oでグリッドオーバーレイの向きを変更することができます。

切り抜きで便利な機能の一つが角度補正ツールです。水準器のアイコンをクリックして、写真の上で線を引くと、その線を水平線であるとして角度補正をしてくれます。

returnキーで切り抜きツールを終了します。

*1:おそらくDevelopment(現像)の頭文字ですね

*2:GridのGだと思います

Lightroom3の写真管理

カタログによる写真管理

LR3では写真をカタログによって管理します。
カタログには写真のプレビューや、その写真のファイルが物理的にどの場所に存在するかなどの情報が含まれています。写真をカタログに読み込むショートカットはShift+Cmd+Iです。
一度カタログに読み込んでしまえば、RAW画像ファイルの管理をLR3上から行うことができます。

外付けHDの活用

ところで、私はMacBook Proを愛用しているのですが、もちろん本体のディスクには限りがあります。そこで、最近撮影したファイル以外は自宅の外付けHDDに移動することになります。
LR3のライブラリモジュールから「フォルダー」パネルの+ボタンをクリック。「フォルダーを追加」を選択して、外付けディスクのフォルダを選択します。私はTime Machine用に使っているディスクの一部にLR3.extというフォルダを作ってみました。


さて、次に外付けHDに移動するべき写真をライブラリモジュールからドラッグアンドドロップで移動します。フォルダ単位での移動も可能です。*1ライブラリモジュールで写真の移動を行うと、実際のファイルも移動します。

さて、ここで外付けHDDをアンマウントしてみましょう。ドライブを示すアイコン黒い文字で描画され、フォルダには?マークがつきます。しかし、この状態でも写真にアクセスすることが可能で、プレビューやスライドショーを行うことができるのです。

これがカタログの威力です。LR3は実ファイルを参照しているのではなく、カタログを参照しています。重いRAWファイルを常に持ち歩くことなく、自分の写真を管理することができるのです。

*1:私は、YYYY/MM/DDの形でフォルダを作っていますので、フォルダ単位で移動するときには、事前にYYYY/MMのフォルダを作ってから移動しています。

念願のデジタル一眼デビュー

Nikon D90を入手

ついにというか、ようやくというか、デジタル一眼レフカメラの購入にいたりました。ニコンD90です。発売から2年も経っていますし、後継の(?)D7000も発表されていますが、まだまだ十分に使えるカメラだと感じてます。私はカメラについては全くの素人なのですが、いろいろと調べるうちに奥深い楽しい世界が見えてきました。

PCでできることはPCで?

まず最初に驚いたのがRAWからの現像*1の楽しさです。RAWからの現像をすることによってカメラのパフォーマンスを何倍も引き出すことができることに気づきました。
いわゆる高級機には、より高性能な画像処理エンジンが搭載されているのが特徴なのだと感じています。この事実に気づいたのは、ピクチャーコントロールの機能を調べている時でした。
ピクチャーコントロールは、カメラ本体内現像を行う際に、コントラストや彩度などのパラメタを調整する機能です。ピクチャーコントロールはユーザがプリセットを作成して、これをカメラに登録することができます。また、いくつかの追加のプリセットがNikonのホームページからダウンロードすることができるようになっています。
この中に、D2X MODExと名付けられたプリセットがあります。カメラに付属の簡易現像ソフト(ViewNX2)で、このプリセットを使うことが可能で、とても良い色合いの現像をすることができます。ところが、このプリセットはD90本体に登録することができないのです。カメラ内現像を行っているチップの性能が、上位機種に比べて劣っているのではないかと推測しています。
この事実はもちろん残念なことではありますが、PCでのRAW現像を行うことへのモチベーションになりました。また、Adobe Photoshop Lightroom 3に出会ってからは、むしろカメラ内現像をすることにモチベーションを見いだせなくなってしまったほどです。

Adobe Photoshop Lightroom 3(LR3)の魅力

LR3には沢山の魅力がありますが、現像能力が高く、かつ現像しやすいというのが魅力です。
LR3にはレンズによる歪みを補正する機能があります。そして、レンズ毎の補正値がソフトウェアに組み込まれているのです。特に広角レンズは歪みが目立ちやすく、初心者であるが故に失敗写真を沢山産み出してしまいますが、LR3の歪み補正を使うことで多くの写真を救済することができました。
また、LR3には現像のプリセットという概念があります。これは現像時に行う処理をひとまとめに定義しておき、ワンクリックで適用することができるというものです。たとえば、ノイズリダクションと階調補正をまとめて一つのプリセットにするといった具合です。さらにこのプリセットをメディアからの読み込み時にも適用することができます。すべての操作は非破壊的ですので、いつでも初期状態に戻すことができます。これはとても便利です。

Adobe TVの解説動画が秀逸

Lightroom 3は、解説書の類が少ないという声を聞きました。私も最初はそのように思っていたのですが、Adobe TVのコンテンツを見てからは考えが変わりました。いずれも英語になってしまいますが、とても秀逸な解説動画が揃っています。

英語の解説と聞いてひるんでしまうかもしれませんが、解説のJulieanne Kost女史の発音はとても明瞭で聞き取りやすく、また画面での操作を映し出しながらの解説になりますので、100%の聞き取りができなくても一見の価値はあります。ぜひ一度ご覧になってみてください。

http://tv.adobe.com/show/learn-lightroom-3/

*1:RAW画像についてはWikiPediaに詳しいです。wikipedia:RAW画像

Cubase 5でVSTのプリセットが表示されない不具合?

問題の内容

Cubase4->5にアップグレードしたシステムにて、VSTのプリセットが表示されない不具合がありました。

解決方法

メニュー → メディア → MediaBayを開く
メディアベイの左側のツリービューにある「メディア」を右クリックし「再スキャン」を実行。


私はこれで解消しました。

Skypeで複数アカウントを使う方法

はじめに

Skypeはとても便利です。私はプライベートと仕事の両方でSkypeを愛用しています。しかし、ひとつだけ不満を感じていました。それは、複数アカウントの取り扱いについてです。
仕事でSkypeを使っている手前、私のSkype nameには本名を使っているのですが、そんな仕事用のアカウントをblogやmixiなど、カジュアルなコミュニケーションに使うのは少し気がひけます。そこで、複数アカウントの使い分けをしたくなります。

かつてWindows XPでは、以下のサイトに紹介されている方法で、複数のアカウントを同時に利用することができました。
http://share.skype.com/sites/ja/2006/10/26/2instances_of_skype.html

しかしWindows Vistaでは、この方法による複数アカウントの同時利用をすることができません。私自身もrunasコマンドなどを使って、いろいろ試してみたのですが徒労に終わりました。上記サイトのコメントにもVistaでの解決方法を望む声が多く寄せられているようですので、同じように困っていらっしゃる方がいるのだと思います。


Windows VistaSkype複数アカウントを同時に利用する

この問題は、Skype Launcherというソフトを利用することで解決します。Skype Launcherは以下のページで確認することができます。
http://forum.skype.com/index.php?showtopic=88055

以下、簡単に使い方と作者からのコメントをご説明します。ほとんど訳しているだけですので、英語が大丈夫な方はぜひ作者のコメントを直接ご覧ください。

無保証であること

まず最初にご理解いただきたいのですが、このソフトは無保証です。Skype公式ソフトウェアではありません。なにか問題が起きても公式サポートに質問などを投じないようにしてください。
また、作者は本ソフトウェアをどのような形であれ再配布することを認めていません。ご留意ください。

必要なもの

Visual Basic 6のランタイムが必要です。お使いのOSがWindows XP SP2以降か、Windows Vistaであれば、すでにインストールされているはずですので、特別な準備は必要ありません。おもちでないばあい、以下のリンクからダウンロードすることができます。
Download Service Pack 6 for Visual Basic 6.0: Run-Time Redistribution Pack (vbrun60sp6.exe) from Official Microsoft Download Center

なお、日本語フォーラムで紹介されている方法とは異なり、OSの複数アカウントを作成する必要はありません。

ダウンロードとインストール

http://forum.skype.com/index.php?showtopic=88055のページにあるダウンロードボタンをクリックして、ダウンロードページに移動します。

以下のようなページが表示されますので、Download Nowの文字をクリックしてください。

するとさらに画面が遷移してダウンロードが始まります。このファイルを適当なフォルダに保存してください。


ダウンロードしたファイルはZIP形式で圧縮されていますので、これを開きます。
ZIPファイルの中には以下の三つのファイルが含まれています。

  • Readme.txt
  • SkypeLauncher.exe
  • SkypeLauncher_Config

これら三つのファイルを適当なフォルダにコピーすることでインストールは完了です。

少々冗長な説明ではありますが、私は以下のようにしています。

  1. マイコンピュータ→C:\Program Filesフォルダを開きます。*1
  2. Skype Launcherフォルダを作成します。(ALT-F ALT-W ALT-Fです)
  3. ZIPファイルに含まれている三つのファイルをすべてコピーします。
  4. スタートボタンをクリックして、メニューを開きます。
  5. すべてのプログラムを右クリックして、開く All Users(P)をクリックします。
  6. 新しいウィンドウが開くので、プログラムフォルダを開きます。
  7. Skype Launcherフォルダを作成します。
  8. 先ほどコピーした三つのファイルのうち、SkypeLauncherとSkypeLauncher_Configの二つのファイルを選択し、CTRLキーとSHIFTキーを同時に押しながら、新しく作った空のフォルダにドロップします。これでショートカットが作成されます。作成されたショートカットは名前が冗長ですので、適宜名前を変更してあげてください。

これで、スタートメニューから、Skype Launcher→SKypeLauncherと選択することで、SkypeLauncherが起動できるようになりました。

使い方

インストールしたSkypeLauncherをダブルクリックして起動します。
スプラッシュスクリーンが表示されてから、Skypeが起動します。SkypeLauncherを起動するたびに新しいSkypeが起動しますので、それぞれのSkypeにて異なるアカウントでのログインをしてください。

これで、複数のスカイプアカウントを使うことができるようになりました。

Windowsからの冗長な警告表示の回避

デジタル署名のないアプリケーションを実行すると、Windows Vistaは警告を表示してくれますが、安全であることがわかっており、かつ頻繁に利用するアプリケーションでは冗長です。SkypeLauncherの実行でも、このような警告が表示されますので、これを回避するように設定を施すことにします。

  1. エクスプローラから、C:\Program Files\Skype Launcherを開きます。
  2. SkypeLauncher.exeを選択して、右クリック→プロパティをクリックします。
  3. ブロックの解除ボタンをクリックしてから、OKをクリックします。


最後に

配布パッケージにはReadmeファイルが含まれています。ぜひ一度目を通してください。
素晴らしいソフトウェアを公開されているStefanに感謝!

*1:私自身はVista x64を使っていますので、C:\ Program Files (x86)になっています。

既存のウェブアプリケーションと連携するアプリケーションを作成する。その2

はじめに。

前回はjava.net.Authenticatorを使うことで、ユーザ名とパスワードを使った認証をすることができることを確認しました。しかし、java.net.Authenticatorはスタティックメソッドによって設定され、VMに対してユニークです。ですので、前回のような形でユーザ名とパスワードを設定してしまうと、異なるユーザ名とパスワードの組を要求するサイトへの接続を行う前に、setDefault()をやり直さなければいけません。しかし、サーブレットなどからユーザ認証を含むURLを開く場合など、単純に、setDefault()⇒URL.openConnection()という手順を踏むと問題が出てきます。というのは、サーブレットは原則マルチスレッドで動作しているからです。ユーザAのためのユーザ名とパスワードをsetDefault()で設定した後すぐにコンテクストスイッチが発生し、ユーザBのためのopenConnection()が行われるとすると、大変まずいことになります。一連の作業を同期してしまうのは良いアイディアですが、IOのボトルネックを作ってしまいますので、できれば避けたいところです。ではどうしたらよいのか?それが今回のお題です。

Authenticator.getRequestingURL()と、URL.getUserInfo()を組み合わせる。

AuthenticatorにはgetRequestingURL()というメソッドがあります。これはユーザ認証を要求しているURLオブジェクトを返すというものです。ということは、このURLオブジェクトに何とかしてユーザ名とパスワードの情報を持たせることができれば、その情報を元にPasswordAuthenticationオブジェクトを作成することができるでしょう。
一つ思いつくのは、URLクラスを継承した独自のクラスを定義し、そのクラスにユーザ名とパスワードの属性を持たせてしまうということです。これはオブジェクト指向設計としてはアリですが、JAVAではナシです。というのは、java.net.URLクラスはfinalであると宣言されており、URLクラスを継承したクラスを定義することができないのです。
そこで、URL.getUserInfo()メソッドを使います。前回、http://user:pass@host:portの形式を指定してもユーザ認証をしてくれないと嘆きましたが、この形式を使うことでURLオブジェクトからAuthenticatorにログインユーザ名とパスワードを渡すことができます。


URL url = new URL("http://user1:pass1@some.where.requries.auth:1234/");
これで、ユーザ名とパスワードの情報(UserInfo)を持ったURLができました。ユーザ情報を得るには、URL.getUserInfo()メソッドを使います。この例では、getUserInfo()メソッドを使うとStringの値として"user1:pass1"という値が返されます。あとはこれを使って、PasswordAuthenticationオブジェクトを生成して返してやればよいということになります。

既存のウェブアプリケーションと連携するアプリケーションを作成する

はじめに

SOAというキーワードが取り上げられるようになり、ウェブサービス技術が注目されてきていますが、既存のウェブアプリケーションと連携するアプリケーションを開発しなければいけないこともあります。

本日から数日を使って、Javaを使って、既存のウェブアプリケーションと連携するアプリケーションをどのように開発するかについてご紹介したいと思います。第一日として、まずユーザ認証をどのように行うかについて解説します*1

ユーザ認証

ユーザ認証を必要とするウェブサーバと通信する際、どのようにユーザ認証を行うかが問題になります。RFC 2396あたりを参照すると、プロトコル://ユーザ名:パスワード@ホスト:ポート/という形式が定義されているのですが、残念ながらjava.net.URLではこの形式のURLを渡すことによるユーザ認証はできないようです。

その代わりになるものとして、Javaではjava.net.Authenticatorというクラスが用意されています。
java.net.Authenticatorの使い方は簡単です。

  1. java.net.Authenticatorを継承する具象クラスを作成します。
    • protected PasswordAuthentication getPasswordAuthentication()をオーバライドしてください。
  2. URLオブジェクトを使った通信が発生する前の段階で、java.net.Authenticator.setDefault()メソッドを使い、作成したjava.net.Authenticatorを継承する具象クラスのインスタンスをデフォルトの認証機として設定します。

ソースコードで見ていきましょう。まずはAuthenticatorを継承する具象クラスの定義です。URLオブジェクトが認証を必要とするとき、これから作成する具象クラスのgetPasswordAuthentication()メソッドがコールバックされることになります。

public class MyAuthenticator extends java.net.Authenticator{
private String user;
private String pass;
public MyAuthenticator(String user, String pass)
{
this.user = user;
this.pass = pass;
}

protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(user,pass.toCharArray());
}
}

このクラスを使ってユーザ認証をするアプリケーションを書いて見ます。

public class DoAuth{
public static void main(String [] args )
throws Exception
{
MyAuthentication auth = new MyAuthentication("user1", "pass1");
java.net.Authenticator.setDeafault(auth);

URL url = new URL("http://somewhere.requries.auth/");
url.openConnection();
//以下略
}
}

これで、ユーザネームとしてuser1, パスワードとしてpass1を使う認証ができるようになります。

*1:昨日の記事に書いたDIGEST認証とストーリーとしてはつながっています