MOSA Multi-OS Software Artists

MOSAはソフトウェア開発者を支援します

  • iPhone/iPod touch アプリ紹介
  • MOSA掲示板
  • 活動履歴
  • About MOSA(English)

MOSA Developer News[MOSADeN=モサ伝]第173号

2005-08-30

目次

  • 「WebObjects Dev Report」     第19回  田畑 英和
  • 藤本裕之のプログラミング夜話 #75
  • 高橋真人の「プログラミング指南」  第73回
  • ニュース・解説                小池 邦人

「WebObjects Dev Report」  第19回  田畑 英和

 今回はビジネスマッチングシステムに登録する登録者情報について、現行システムで登録可能なデータを参考にしながら検討していきたいと思います。

認証情報

 まずはシステムを利用するにあたって必要となるユーザ認証についての情報です。現在のシステムでは登録者情報を登録するさいに、MOSA IDとメールアドレスによるユーザ認証をおこなっています。また、他の一般的な認証情報としてはパスワードを用いるような場合もあります。
 こういったユーザ認証についての情報や個人情報などは漏洩すると問題がありますので、慎重に管理する必要があります。例えばMac OS Xでのユーザ認証の仕組みをみてみますと、パスワードを暗号化したり、認証時にパスワードそのものをネットワーク上に流さないような仕組みが組み込まれています。

 Webの場合は、クライアント側で高度な処理をおこなうのはなかな難しいですが、せめてデータベース上でのパスワードの管理はセキュアにしておきたいところです。これには、パスワードを直接データベースに登録せずに暗号化したパスワードを登録するなどの対策が考えられます。パスワードの暗号化については、Javaには文字列からハッシュ値を計算するAPIがありますのでこちらを利用することができます。
 つまり、最初にパスワードを登録する時点で、一度そのパスワードからハッシュ値を求めて、パスワードそのものではなくハッシュ値をデータベースに保存しておきます。次にユーザ認証がおこなわれたときには、ユーザが入力したパスワードを、パスワード登録時に用いたのと同じ方法でハッシュ値を計算し、あらかじめデータベースに保存しておいたハッシュ値と比較します。これで、データベース上ではパスワードを暗号化した形式で保存することができます。
 ハッシュ値の計算方法ですが、WebObjects向けのオープンソースフレームワーク「Project WONDER」にはJavaの暗号化APIを用いたクラス(ERXCrypto.java)が用意されており、例えばSHA方式でハッシュ値を計算する次のようなメソッドが利用できます。このメソッドは指定した文字列からハッシュ値を計算し、文字列としてreturnしてくれます。

・ERXCrypto.java

    public static String shaEncode(String string) {
         if( string == null )
             return string;
         byte[] buf = string.getBytes();
         MessageDigest md;
         try {
             md= MessageDigest.getInstance("SHA");
         } catch (NoSuchAlgorithmException e) {
             log.fatal("Caught "+e+" - "+ERXUtilities.stackTrace(e));
             throw new NSForwardException(e);
         }
         md.update(buf);
         return ERXStringUtilities.byteArrayToHexString(md.digest());
     }

個人情報

 現行システムでは次のような個人情報を登録することができます。

・個人情報
  MOSA ID, 氏名, カナ, E-MAIL, 性別, 生年月日, 現住所(都道府県)
  最終学歴, 最終卒業校(学部・学科/卒業年), 自己アピール(資格等)

 基本的にはこちらを参考にしたいと思いますが、資格情報などは個別の項目として管理するようにしたいと思います。特に今年からアップルコンピュータの技術者認定試験が日本語でも受験できるようになりましたので、この試験に合格することによって取得できる認定資格についても登録できるようにしたいと思います。

・アップル技術者認定資格
http://train.apple.co.jp/certification/index.html

技術情報

 個人情報以外に、登録者の技術情報として以下のような情報を登録することができます。

・OS, 使用言語, DB, WEB開発環境(実務年数)
・経験業務, 経験分野(実務年数)
・業務実績、得意分野・技術(自由入力)

 実務年数については、「経験なし」「〜1年」「1-3年」「3年〜」といった区分で登録をおこないます。この区分で単純に入力しただけでは、1年後、2年後に古い情報になってしまいますので、たまには情報の更新をおこなわないと正確な情報を管理できません。
 いつごろから使い始めたのかを入力し、そこから年数を計算するという方法もありますが、これでは途中ブランクがあったり、最初少しだけ使っただけといった場合に対応できないことになります。また、実務年数だけではなかなか技術レベルまでは分かりませんので、そもそもそれほど正確に管理するような情報ではないかもしれません。技術情報をどのように扱うかは今後の課題にしたいと思います。

藤本裕之のプログラミング夜話 #75

 一週間余計に間が空いたので前回の復習から。すべてのウィンドウ・インスタンス(NSWindowのサブクラス)はfirstResponderというインスタンス変数に、そのウィンドウがKeyWindowであるときにキーボードからの入力イベントにまず反応するレスポンダを保持している、と言う話だった。覚えてますか?

 それを受けて今回の話は……、ちょっとハンズオン風にいこうか。ちょっとお手元でInterface Builderを起動し、新規でアプリケーション用のNibファイルを作ってみてもらえまいか。出来上がったNibファイルには最初、

 File’s Owner
 First Responder
 MainMenu
 Window

 という4つのアイコンが表示されているはずである。今回の話は、ここに見える「First Responder」というのと前回みた各ウィンドウが保持している「firstResponder」との関係はどうなっておるのか、ということである。字面だけ見れば、片方は大文字で始まっており「First」と「Responder」の間にスペースがあり、もう片方は小文字で始まってスペースがない、とそんだけだが、実はこの2つがそんな風にクリソツなのが混乱の元なのである。いや、だからって違う名前をつけるわけにも行かないんだが。

 上で作った(というほど「作って」ないか)Nibファイルの「MainMenu」をダブルクリックし、例えば「編集メニュー」にある「カット」がどんなターゲットのなんというアクションに結びつけられているかを確認してほしい。インスペクタ・ウィンドウを開くと、こいつは「FirstResponder」の「cut:」と連結されているはずだ。
 ここでこの「FirstResponder」の「First」と「Responder」の間にスペースがないのがまたコトをややこしくするのだが、この「FirstResponder」はつまりNibファイルのウィンドウにある「First Responder」のアイコンである。ウソだと思ったら試しにインスペクタ・ウィンドウの「cut:」をもう一度クリックしてみてごらん。メニューの「カット」と「First Responder」のアイコンを結ぶラインが表示されるはずである。
 どうしてこんな「スペースを入れたり入れなかったり」というイタズラに初心者を混乱させるような表記をしているか。いや、これ、単なる意地悪ではなくて、まぁ聞いてみればそれなりの理由があるのだ。普通、メニューアイテムやボタンなどのオブジェクトに連結されるアクションを持つのは「クラス」である。早い話、インスペクタ・ウィンドウの、今「Actions in FirstResponder」と表示されている「FirstResponder」の部分は普通「NSButton」とか「NSTableView」とか「MyObject」とか「YourSong」(ぢゃエルトン・ジョンか)とかのクラス名が表示される場所なのである。実はクラスではない特別な概念である「First Responder」だがここではクラスとして扱われている。「First Responder」と空白を挟む2つの単語で構成されるクラス名つうのはないので、ここでは泣く泣く(かどうかは知らないが)「FirstResponder」とつなげて表記されているわけだ。

 では「First Responder」とはどんな特別な概念か。さぁお立ち会い、それこそがあの「レスポンダ・チェイン」なのである。キーボードからのキー入力と同様、アプリケーションには「カット」とか「コピー」あるいは「やり直し(undo)」のように、その時々でそのアクションの担い手たるオブジェクトが変わらなければならない機能が存在する。その振り分けの複雑さを実にエレガントに解決するためにここでレスポンダ・チェインが使われるのだ。……では次回は、この「First Responder」によって表象されているレスポンダ・チェインがどういう風に使われるのかを追いかけて行くことにしよう。
(2005_08_25)

高橋真人の「プログラミング指南」第73回

UNIXとしてのMac OS X

〜Perlについて(19)〜

 こんにちは、高橋真人です。
 今までPerlの正規表現についてつまみ食い的に説明をしてきましたが、ここらで少し整理をしてみることにします。
 まずは、量指定子です。
 正規表現に慣れている人でも量指定子という呼び方を聞くと「一体、何のことだ?!」と思われるかもしれません。これは文字表現の後に付けてその文字をどれだけ繰り返すかなどを表現する特殊な記号で、正規表現を使う上ではなくてはならないと言ってよいぐらい頻繁に利用されるものです。
 Perlの正規表現における量指定子の主なものを挙げてみます。

* 直前の文字の0回以上の繰り返し
+ 直前の文字の1回以上の繰り返し
? 直前の文字が0回もしくは1回
{n} 直前の文字のn回の繰り返し
{n,} 直前の文字のn回以上の繰り返し
{x,y} 直前の文字のx回以上、y回までの繰り返し

 {n}というのがいちばん理解しやすいでしょう。これはもうそのまま、直前にある文字がn回連続して並んでいる部分にマッチします。

a{3}

という表現は、

aaa

と等価ということになります。
 次に、{x,y}は、最低でx回、多くてもy回の連続、ということですので、

a{3,6}

という表現は、

aaa
でも、
aaaa
でも、
aaaaaa
でもマッチします。

 {n,}は、{x,y}のyが省略されていると考えればよいでしょう。つまり、下限値は指定してあるが上限値はない(つまり、いくつでもよい)ということなの
で、

a{3,}

という表現は、

aaa
も、
aaaaaaaa
も、
aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
にもマッチします。

 以上が分かれば、残りのものも理解も容易です。
 * は、{0,}と同じで、+ は、{1,}と同じになります。そして ? は、{0,1}と同じことになります。
 これらの記号の中で、特に「0回」という意味を含む表現の場合、単独で使われることはまずありません。何故なら、特定の表現のゼロ回の繰り返しとは即ち「何もない」ことを意味するからです。
 この「何もない」は正規表現においては「どこにでもマッチする」ということになります。慣れないとこの考え方は分かりにくいのですが、例を挙げれば理解しやすいでしょう。以下のコードを見てください。

$str = 'ABCDEFGHIJKLMN';

if ($str =~ /X?/) {
    print "match.¥n";
} else {
    print "unmatch.¥n";
}

 走らせてみれば一目瞭然。出力は “match” となります。
 これは、正規表現では文字と文字の間は何もないと考え、上記のような表現はその「何もない場所」にマッチすることになるのです。(上記の例では、最初の「文字ではない場所」となる「Aの直前の部分」にマッチします)
 そんなわけですので、これらの「0回」を含む表現は必ず他の表現と組み合わせて使われます。たとえば、行頭の空白文字を除去したいときに以下のような書き方ができます。

$line =~ s/^[ ?t]*//;

 s///演算子を使った文字の置き換えですが、$lineというスカラー変数に文字列が入っているとして、先頭から(^は行または文字列の先頭を表す記号です。改めて説明します)半角スペースかタブ文字が連続する部分をすべて空文字列に置き換えます。(結果的に消去されることになります)
 ここで * を使っているのは、半角スペースかタブ文字が1文字もなく、いきなり先頭から文字があるケースもあり得るからです。
 もっとも、* の代わりに + を使っても同じことが起こります。この場合マッチは行われないので、そもそも置き換えの対象にはなりません。
 ただ、文字列置換の結果は同じでも、内部で起こっていることには違いがあります。Perlにあるいくつかの特殊変数のうち、$&というのがありますが、これはパターンマッチが成功したとき、マッチした部分が格納される変数です。
 文字列先頭にスペースもタブもないとき、* を使った場合空文字列が$&に記録されますが、+ を使用した時にはマッチングが不成立なので、$&には何も記録されないのです。

$line = 'Hello world!!!  ';
$line =~ s/^[ ¥t]*//;
print "matched: '$&'¥n";

 こんなコードを走らせてみると分かりますが、このコードを走らせるとコーテーションの中身はカラですが、* を + に変えて実行してみると、$&は未定義ということで実行時エラーになります。(事前に別のマッチングが行われていなければ、ですが)

ニュース・解説

今週の解説担当:小池邦人

Carbon ドキュメント & サンプル & SDK ナビゲーション(2005/8/26)

【開発環境】

Intelが、Mac OS X用開発ツールの最初のβ版を、今年の終わりまでに出荷する事を正式に発表したようです。しかし、出荷する予定の開発ツールにはObjective-C対応コンパイラは含まれていないようですね。

http://www.eweek.com/article2/0,1895,1851752,00.asp

また、Appleサイトに「Game Building Tools」というタイトルで、ゲーム開発関連のツールが紹介されています。

http://www.apple.com/games/articles/2005/08/gamebuildingtools/

【テクニカルドキュメント】

前回から8月26日の期間中、Apple社のDocumentationサイトには数多くのドキュメントが登録されました。ただし、ほとんどはマイナーチェンジのみとなっています。そこで今回は、その中で初版の物と内容が大幅変更になった物だけをピックアップして記載しておきます。また、新規リリースノートが4つ、新規のデベロッパー向け読み物が2つ登録されました。リリースノートの「High Level Toolbox Release Notes」は、Carbonプログラマー必読です。読み物の「Using PyObjC for Developing Cocoa Applications with Python」については、前号の木下さんの記事を参照してみてください。

「Attributed Strings Programming Guide」(PDFあり)
「Automator Programming Guide」(PDFあり)
「Carbon Event Manager Reference」(PDFあり)
「Core Endian Reference」(PDFあり)
「Data Formatting Guide for Core Foundation」
「Data Formatting Programming Guide for Cocoa」
「Directory Services Reference」(初版)
「Disk Arbitration Reference」(初版)
「DVD Playback Services Reference」(PDFあり)
「HIArchive Programming Guide」(初版)(PDFあり)
「HIObject Reference」(PDFあり)
「Kernel Extension Concepts」(PDFあり)
「Memory Manager Reference」(PDFあり)
「Quartz Programming Guide for QuickDraw Developer」(PDFあり)
「QuickTime Movie Playback Programming Guide」(PDFあり)
「Spotlight Reference」(初版)
「What’s New In QuickTime」

http://developer.apple.com/documentation/index-rev-date.html

リリースノート

「What’s New In Mac OS X」(PDFあり)
「Porting to GCC 4.0 Release Notes」
「High Level Toolbox Release Notes」
「High Level Toolbox Release Notes (10.4 and earlier)」

http://developer.apple.com/releasenotes/

「Getting Started with launchd」(読み物)

http://developer.apple.com/macosx/launchd.html

「Using PyObjC for Developing Cocoa Applications with Python」(読み物)

http://developer.apple.com/cocoa/pyobjc.html

前回から8月26日の期間中、新規テクニカルノートは3つ登録されました。新規テクニカルQ&Aの方はひとつ登録されています。TN2035「ColorSync on Mac OS X」では、大幅な改訂がなされています。Mac OS XにおけるColorSyncについては、このテクニカルノートが最新でもっとも詳しい資料となりますので、関連デベロッパーの方はぜひ一読してみてください。

TN2137「Building Universal Binaries from “configure”-based Open Source Projects」
TN2149「Obtaining 16 Bits-Per-Color Data with CUPS Raster Printing」
TN2035「ColorSync on Mac OS X」

http://developer.apple.com/technicalnotes/index-rev-date.html

QA1295「Java on Intel-based Macintosh Computers」

http://developer.apple.com/technicalqas/index-rev-date.html

【サンプルソースコード】

前回から8月26日の期間中、Apple社のSample Codeサイトには、新しいサンプルソースコードが32登録されました。ほとんどが、Xcode 2.1に対応させるために、プロジェクトファイルが再構築され追加された形となっています(旧版Xcode用のプロジェクトファイルも含まれている)。初版のサンプルは「QTMetaData」のみです。これについては、前号の木下さんの記事を参照してください。新プロジェクトでは、InfoダイアログのGeneralで、「Cross-Developer Using Target SDK:」が「Mac OS X 10.4(Universal)」に設定されています。Xcode 2.1をインストールする時に「Mac OS X 10.4 SDK」がカスタムインストールされていないと、Makeでエラーが出てしまします。そんな時には、SDK種類をメニューから「Current Mac OS」に切り替えてから試してみてください。

「DialogsToHIViews」(HIView関連)
「ImproveYourImage」(QuickTime関連)
「KillEveryOneButMe」(Carbon関連)
「WindowFun」(Carbon関連)
「IOPrintSuperClasses」(Hardware関連)
「ExampleIPBCodec」(QuickTime関連)
「SerialPortSample」(Device Drivers関連)
「BrideOfMungGrab」(QuickTime関連)
「CarbonTransparentWindow」(HIView関連)
「CFNetworkHTTPDownload」(Core Foundation関連)
「CWCocoaComponent」(Java関連)
「enetlognke」(Device Drivers関連)
「HIObjectThreadControlle」(HIObject関連)
「HISimpleList」(HIView関連)
「JSheets」(Java関連)
「LiveVideoMixe」(QuickTime関連)
「MachPortDump」(Darwin関連)
「MemoryBasedBundle」(Darwin関連)
「MovieVideoChart」(QuickTime関連)
「MyFirstJNIProject」(Java関連)
「PasteboardPeeker」(Carbon&Cocoa関連)
「PDFKitLinker2」(Cocoa関連)
「QCCocoaComponent」(Java関連)
「QTMetaData」(QuickTime関連)(初版)
「QuickTimeMovieContro」(QuickTime関連)
「ScrollAndZoom」(HIView関連)
「SimpleVideoOut」(QuickTime関連)
「SocketCancel」(Networking関連)
「SoftVideoOutputComponent」(QuickTime関連)
「SpellingChecker-CocoaCarbon」(Cocoa&Carbon関連)
「StarMenu」(HIView関連)
「TypeServicesForUnicode」(Text関連)

http://developer.apple.com/samplecode/index-rev-date.html

【デベロップメント SDK】

前回から8月26日の期間中、Apple社のSDKサイトには新しいSDKが2つ登録されました。両方とも「CoreAudio SDK」ですが、対応しているMac OS Xのバージョンが異なりますので、利用される時には注意してください。

「CoreAudio SDK v1.3.6」(10.2x-10.3x用)
「CoreAudio SDK v1.4.2」(10.4用)

http://developer.apple.com/sdk/

MOSAからのお知らせと編集後記は割愛します

MOSA Developer News   略称[MOSADeN=モサ伝]
Apple、Mac OSは米国アップルコンピュータ社の登録商標です。またそのほかの各製品名等はそれぞれ各社の商標ならびに登録商標です。
このメールの再配信、および掲載された記事の無断転載を禁じます。
特定非営利活動法人MOSA
Copyright (C)2005 MOSA. All rights reserved.