ブログを整理しました

会社員時代はブログは書いていなかったのですが、独立してしばらくしてから、だいたい2010年あたりからブログを書いていました。最初は、Mac OS X Server Snow LeopardのWikiを使っていたのですが、Lionへはうまく移行できたものの、その後に失敗(アカウントを消した)とか、Mountain Lionのときに変な場所に移行したとか、いろいろあって、2013年2月からはWord Pressで運用しています。

さらに、Mavericksに移行しようとして決定的な失敗をしてしまい(とほほ)。「過去のブログを見るだけ」のWebサーバとしても機能しなくなりました。FileMaker ServerをWebで動かしているのでどっちに転んでもやっぱり両方の用途に使うのはかなりしんどいです。ということで、日曜日に過去のブログをサルベージしました。PostgreSQLのデータベースからダンプして、手作業も入りながらのコピペで移行しました。INTER-Mediatorのブログは思考のプロセスを思い出すのに必要なこともあり、この関連記事は全部以降しました。他に、受けたとか、今でも意味があるというのはみんな移行しましたが、OS X Server関連はもういいかということで省略としました。

そんなわけで、過去の記事が突然、Twitter公開とかでよみがえってしまってすみませんでした。これで、ここ何年かの消えた記事が復活して一安心です。

[IM]メールをポストする機能を追加

2014/2/15にコミットしたINTER-Mediatorでは、メールの送信を機能として組み込みました。つまり、メール送信の処理をプログラムを一切しなくても、宣言的な記述だけでできるようになりました。

まず、メールはサーバで送ります。送信方法は、PHPのmail関数を使う方法なので、UNIX系ならsendmailコマンドをたたく方法になります。一方、これだとSMTPサーバへの転送ができないので、qdsmtpも組み込みました(Thanks to Mr. Spok)。SMTP認証はPlainのみの対応となっています。Windowsの場合はmail関数がすでにSMTPですので、php.iniにサーバ情報などを書くことで対処できます。なお、Windows環境はチェックしていないので、何かあれば知らせてもらえると助かります。

ただ、これだけではだめだろうというのはご存知の方はお分かりかと思いますが、昔作っていたOMEというメールソフトにはPHPのクラスもあったので、それをUTF-8で動くように改造してエンコードなどをさせるようにしました。ちなみに、さらにその前に『メール送信システムの作り方大全』という書籍も書いていて、その中の一部のクラスを使いやすいようにしたのがOME.phpです。この本、もう10年以上前なのですね…。

定義ファイルに指定可能なキーワードは以下の通り全て列挙します。しかしながら、すべてを記述することはないです。

IM_Entry(
    array(   // Contexts
         array(
            'name' => 'request',
            'send-mail' => array(
                 'new' => array(
                    'from' => '',
                    'to' => 'email',
                    'cc' => '',
                    'bcc' => '',
                    'subject' => '',
                    'body' => '',
                    'from-constant' => 'Officer <info@msyk.net>',
                    'to-constant' => 'msyk@me.com',
                    'cc-constant' => 'businessmatching@cocoa-study.com',
                    'bcc-constant' => '',
                    'subject-constant' => 'Cocoa勉強会ビジネスマッチング申し込み',
                    'body-constant' => 'テストメール',
                    'body-template' => 'welcome.txt',
                    'body-fields' => 'name,compnay,email,tel',
                    'f-option' => true,
                    'body-wrap' => 68,
                 )
             )
         )
    ),
    array(   // Options
        'formatter' => array(...),
        'smtp' => array(
            'server' => 'mysmtp.msyk.net',
            'port' => 587,
             'username' => 'msyktest@msyk.net',
            'password' => 'oshienai',
        )
    ),
    array('db-class' => 'PDO'),
    false
);

メールを送信するタイミングの指定

‘send-mail’キーの配列の次のレベルのキーとして、’load’ ‘edit’ ‘new’のいずれかを指定できます。それぞれ、データベースからの読み込み時、更新時、新規レコード作成時を意味し、コンテキストに対するそれぞれのタイミングでメールを送信します。いずれも、データベース処理が終了してからメールの送信にかかります。上記の例では、新規レコード作成時に、メールが送信されます。

宛先や送信者の指定

宛先の指定は、’to’ないしは’to-constant’キーに指定します。もし、宛先が一定のものであれば、’to-constant’キーに指定をしてください。’to’キーにはフィールド名を指定します。データベース処理の結果、たとえば新規レコードの場合には新しいレコードが1つ作成されて、そのレコードの内容から’to’キーに指定したフィールドより宛先のデータが取り出されます。編集も原則は1レコードです。一方、読み出しの場合は1レコードにならないかもしれませんが、その場合は最初のレコードから取り出します。むしろ、1レコードに絞り込むコンテキストにするのがメールを送る場合には妥当だと考えられます。

メールアドレスは「名前 <アドレス>」ないしは「アドレス」の2つの形式のみのサポートになります。’to-constant’キーに対する値、あるいは’to’キーで指定されるフィールドの値は、このどちらかの形式にしてください。

cc、bccについてもまったく同様のルールです。’to’と’to-constant’の両方の指定があれば、’to-constant’が優先されます。cc、bccでも-constantが優先となります。

fromについても、fromとfrom-constantキーがあり、設定や動作等は同じです。ただし、UNIXでSMTPサーバを使わない場合だと、通常はソース側のFrom:は無視されて、UNIXアカウントそのものをFrom:として設定してしまいます。ただし、サーバ側で許可されていれば「’f-option’ => true」の指定を定義ファイル内に記述することで、sendmailコマンドの-fパラメータを指定して、送信者の指定が可能です。

件名と本文の指定

件名は、subjectあるいはsubject-constantのいずれかのキーに指定します。toなどと同じルールです。

メールの本文は、定義ファイル内に指定した通りに送信する’body-constant’、フィールドの内容をそのまま送信する’body’に加えて、テンプレートの処理も可能です。優先順はテンプレート、body-constant、bodyの順になりますので、不要なフィールドは消しておきましょう。

テンプレート処理をするには、テンプレートのファイル名をbody-templateキーに指定します。このとき、テンプレートのファイルは、定義ファイルのあるディレクトリを基準に検索します。つまり、定義ファイルといっしょに何らかのテキストファイルを億としたら、body-templateキーの値はファイル名だけでかまいません。

テンプレートのファイル内では、そのファイルの内容を本文にしますが、フィールドの値との置き換えも可能です。置き換えたい箇所に@@1@@、@@2@@のように、アットマーク2つに囲まれた1から始まる整数を指定します。テンプレートのファイルはUTF-8で保存します。

フィールドについては、’body-fields’キーに、半角のカンマで区切って指定します。最初が1で、順次番号が増えるようになります。例で言えば、emailフィールドの値は、テンプレート内の@@3@@と置き換わって表示されます。’body-fields’キーを省略すると、テンプレートのファイル通りにメールが送信されます。

本文は一定の長さで改行を入れます。既定値では72バイトですが、’body-wrap’キーで異なる値にできます。0に設定すると改行しません。ここで、バイト数ですが、実際のバイト数ではなく、日本語は2バイト、英語は1バイトと数えた結果で示しています。実際のエンコードはUTF-8なので、嘘と言えば嘘のカウントになりますが、おそらくこうして指定をすることに慣れている人が多いので、ここでは実態とは関係ない数値ではありますけども実用的という意味で「2バイトルール」でカウントしたものとします。

UNIXの場合のSMTPサーバの指定

定義ファイルのIM_Entry関数の第3引数のオプション領域に’smtp’キーで配列を指定します。その他のキーは、前記の例の通りで、キーを見れば意味は分かると思います。もし、SMTP認証をしない場合は、serverとportだけを指定します。認証する場合は、server, port, username, passwordを指定します。したがって、2つないしは4つの要素があるかのどちらかになります。

SMTPサーバの指定は、params.phpファイルでも指定が可能です。変数名として、$sendMailSMTPの定義し、値は’smtp’の右側の配列と同様に指定をします。params.phpファイルでの指定よりも、定義ファイルの指定が優先されます。どこにもSMTPサーバの設定がない場合には、mail関数での送信になります。

Windowsの場合は、’smtp’の指定やparams.phpファイルでの指定は一般には不要ですが、もし設定すれば、mail関数ではなく、qdsmtpによるメール送信ができます。

送信されるメールの文字セット

基本的にはメールはUTF-8でエンコードして送られます。ISO-2022-JPの指定はOME.phpではできるのですが、必要なら定義ファイルでの指定ができるようにしようと思います。リクエストがなければUTF-8固定で行きます。

ヘッダについては、base64のインラインエンコードを、ASCIIコード以外の文字について行います。本文はそのままですが、ヘッダのContent-TyleのcharsetにUTF-8という文字を付けます。つまり、本文はbase64等でのエンコードは行いません。

ファイルの添付は実装する予定はありません。ファイルを送りたいのなら、そのリンクを送るようなアプリケーションの動作にしましょう。

Internet Explorer 8にまた苦しめられる

Web系のお仲間の皆さんも同様にいつも苦しめられていると思われるIE8ですが、ここ最近にあったいくつかのはまりポイントを自分の備忘録としてもまとめておきます。まあ、あと数年はIE8からは逃れられないということで。

  • jQuery 2.0を入れたら動かない(対応ブラウザからはずれている)。慌てて1.10に戻す
  • JavaScriptではObject.keysという記述が使えない
  • 要素のid名と同一のグローバル変数が作られる

特に最後のは苦労しました。メッセージを見る限りは、「オブジェクトでサポートされていないプロパティまたはメソッドです。」と出ます。プログラムはこんな感じ。INPUTタグ要素で、idが「yourname」になっていると思ってください。

yourname = document.getElementById("yourname").value;

まさかgetElementByIdが使えないのかと思ったら、使えます。他の箇所では動いている。valueがない訳は絶対にない。当然右辺を疑うわけですが、必死に検索した結果、問題は左辺でした。つまり、以下の条件が満たされると発生されるトラブルだったのです。

  • IE8でJavaScriptでプログラムを組む
  • ページ内の要素のid属性と同一の変数を、何も定義しないでJavaScript側で使う

どうやら、IE8は、id属性と同一名のグローバル変数を勝手に定義するようです。上記のプログラムは、つまり、勝手に定義しているyourname変数が何らかのオブジェクトを記録していて、そのオブジェクトが書き換えに対応していないためにエラーが出ていると思っていいようです。

対処法は「var yourname」のように頭にvarを付けるか、ページにリンクされたjsファイル等でグローバルとして「var yourname;」のように変数定義することで回避できます。自分自身のグローバルでも、同一名称の変数は後から定義した方のストレージが有効になるので、IEが勝手に作るグローバル変数は無視されるようになるということです。つまり、変数定義を必ずしろというプラクティスをしていれば、エラーに合わないのですが、こう書いてしまったらエラーになってしまうよということですね。

講義でのペアプログラミングの使いどころ

今年度のJavaの講義では、ペアプログラミングを導入して、演習に取り組む時間を比較的多く取ってみました。そして、必須課題として、その感想を聞きましたが、総合的に良かったあるいはどちらでもないというのが33%、残りの67%は「よくなかった」という感想でした。理由は知らない相手や、理解度の違う相手との演習は思った以上に神経を使うということで、それほど効果的ではないという感想でした。全員に利点とデメリットも書かせましたが、ほぼ、同じような答えで、よくなかったと感じた人たちも利点がある点は理解しています。なんかうっとおしからいやだ…ということではなく、きちんと理由を考えさせた上で、総合評価させています。

1つあるのは、友達関係にない相手と組ませることになるのは、確かに大変かもしれません。とは言え、講義運用上どうしてもそれは必要になります。レベルが違う人と組むのは、それなりに悪い事ではないと思うのですが、「課題を行う」というまじめな学生達のゴールにとっては足かせと感じたのかもしれません。ただ、他人がどう考えるのかということが理解できる点は良かった点として挙げられていました。

今年度は比較的多くペアプロをやりましたが、来年度は、限定的にやろうかと思っています。アジャイルのプラクティスは、形のないソフトウエアを作るプロセスを進化させるいちばん有力な手法だと感じています。ただ、プログラミングの初心者でできそうなプラクティスはペアプロではないかというのが当初の考えです。しかしながら、まずは基礎力をつけてレベルを比較的揃えてからやるというのが重要なようです。また、講義全体の進行度合いとはある程度独立した課題を与えるひつ模様もあると感じました。つまり、講義の流れは追えている学生もいれば、遅れている学生もいるということで、そこで一様でなくなる可能性があるということです。来年度は、「ペアプロの日」つまり、ペアプロで課題だけをやる日を1回か2回確保しようと思っています。

ようするにペアプロが機能する状況を、講師が作った上で、させないといけないという当たり前の結論なのですが、現場の開発と教育の現場の違いはまさにそういうところではないかと感じました。

FileMaker Server 13とOS X ServerのWeb

FileMaker Server 13と、OS X ServerのWebサービスの共存は基本的にはできません。となると、OS X ServerのWikiとかはあきらめるか、設定ファイルをあれこれということになりますが、ともかくいったんあきらめてFMS13を入れるといういう場合、80番と443番ポートが使われているのでインストールができないというメッセージに出くわします。

Webサービスを止めても、Wikiを止めてもまだそのメッセージが出ます。コマンドで落としてインストールしていたりしましたが、再起動したらやっぱりFMS側がだめになってどうしようもありません。徹底究明した結果、なんと、WebDAVが動いていました。ファイル共有でWebDAVを利用すると、Webサービスがオフでも、80番ポートを使ったhttpdが動いています。

では、WebDAVを全部オフにして再起動してみます。それでも、httpdは動いています。どうやら一度オンにすると、テコでも動くようです。そこで、すべての共有ポイントでWebDAVがオフになっていることを確認して、以下のコマンドを入れれば、おそらくすべてのプロセスが止まります。念のため再起動してもhttpdが動かないことも確認します。

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

httpdが動いているかどうかを確認するには、以下のコマンドを入れてください。このコマンドで80番や443番ポートをLISTENしているプロセスが見えるはずです。このコマンドで何も出てこなくなれば、OS X ServerのHTTPDのサービスはすべて止まった事になります。

sudo lsof -i | grep httpd

こうしてFMSをセットアップしますが、Web関連のフォルダが大きく変わります。/Library/FileMaker Server/HTTPServer以下に必要なファイルがあります。Webの公開フォルダはHTTPServer/htdocsにあります。ここにファイルを起きますが、httpdプロセスはfmserverアカウントで稼働していることに注意が必要です。_wwwではありません。

設定ファイルは、HTTPServer/conf/httpd.confがまず読み込まれます。設定を変更するには、まずこのファイルから確認しましょう。OS X Serverのよう「全部バーチャルホスト」的な設定ではなく、デフォルトのドキュメントエリアを使います。以下はその設定例です、ほとんど自分のメモみたいなもんです(笑)。赤字は追加記述です。.htaccess等を稼働させるには、AllowOverrideの指定が必要です。PHPはすでに動いていますが、既定のファイルはindex.htmlだけです。なので、DirectoryIndexの指定も行います。もちろん、必要に応じて設定は加えます。

<Directory "${HTTP_ROOT}/htdocs">
     Options All -Indexes -ExecCGI -Includes
     AllowOverride All
     Order allow,deny
     Allow from all
 </Directory>

DirectoryIndex index.php index.html

ここで、設定ファイルを変更したらapachectl gracefulと思いたいところですが、普通にこのコマンドを入れても、OS X ServerのApacheの状況を変えようとするだけで、FMSが起動しているhttpdには適用されません。FMSのhttpdのスタート、ストップ、そして設定の反映は、次のようなコマンドを打ち込みます。

sudo touch /Library/FileMaker\ Server/HTTPServer/start
sudo touch /Library/FileMaker\ Server/HTTPServer/stop
sudo touch /Library/FileMaker\ Server/HTTPServer/graceful

もちろん、フルパスでなくてもかまいません。これらのファイルの修正日を更新するのです。こうすると、/S/L/LaunchDaemonsにあるcom.filemaker.[start|stop|graceful].plistによるファイル修正の監視が行われていて、FMSのhttpdデーモンの処理を行います。これらのlaunchdファイルを見れば分かりますが、/Library/FileMaker Server/HTTPServer/bin/httpdctlというコマンドが用意されていて、このコマンドを経由して、httpdをコントロールするようです。

そういうわけで、設定ファイルを変えてはsudo touch gracefulとやればいいということです。日曜日はOS X ServerとFileMaker Serverのメンテで終わってしまった…。

FileMaker Server 13の管理コンソールが別のコンピュータから接続できない理由

*** 内容が少し違っていたので、修正しました。2013/20/50 ***

FileMaker Server 13になって、管理コンソールが純粋なWebアプリになり、クライアント側ではJavaのバージョンなどは気にしなくてもいいようになりました。これは非常に便利です。サーバ側はTomcatなので相変わらずJavaですが、そちらは管理された環境なので、利用者はJavaのバージョン等は気にしなくていいようになりました。

一方、FMS13では、16000ポートがHTTPSで、16001ポートがHTTPでの接続ができるようになっています。管理コンソールへの接続条件は、インストールしたサーバでは「https://localhost:16000」「http://localhost:16001」で接続ができます。FMS12のときと、HTTPSとHTTPが入れ替わっています。また、他のコンピュータから「https://ホスト名:16000」での接続は可能ですが、「http://ホスト名:16001」の接続はできません。

なぜか? パケットをキャプチャしてみました。コンソールへのログインをするときに、クライアントからサーバへのリクエストをダンプしてみました。以下の最初の数行の固まりはヘッダです(クッキーは省略しています)。そして、行をあけて1行だけあるのがボディです。

POST /admin-console/APP/connector/3/304/login HTTP/1.1
Host: homeserver.msyk.net:16001
Connection: keep-alive
Content-Length: 29
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://homeserver.msyk.net:16001
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://homeserver.msyk.net:16001/admin-console/APP/connector/3/304/login
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ja,en-US;q=0.8,en;q=0.6
Cookie: JSESSIONID=6706...888

username=admin&password=abcdef

わお!ユーザ名とパスワードがそのまま流れています(もちろんabcedfは置き換えてあり、abcdefの代わりに本物のパスワードが見えました)。ハッシュですらありません! つまり、localhostからの接続でないと、通信経路上での盗聴で簡単にログインのアカウントとパスワードを取り出せてしまうのです。サーバのコンピュータからしかログインできなくなっているのはそのためでしょう。同一コンピュータ内なら、パスワードをそのまま流しても、問題になることはないと言えます。しかし、他のコンピュータから接続するという状況では明らかに問題です。すなわち絶対に通信そのものを暗号化しないと危険なので、HTTPSでの接続しかできなくなっています。

それでも、どうしても、他のコンピュータから16001ポートを使って管理コンソールに接続したいという方は、以下のファイルを修正してください。OS Xでは必要に応じてsudoで作業をしましょう。Windowsは、多分、「FileMaker Server」がProgram Filesにあると思うので、それ以下は同じと思います。

/Library/FileMaker Server/Admin/admin-master-tomcat/conf/server.xml

このファイルの最初に以下の部分があります。開いて「16001」を検索します。このポート番号はここだけです。最後の方の下線、赤字の部分を削除してファイルを保存してください。

<Connector port="16001" protocol="HTTP/1.1" maxHttpHeaderSize="8192" maxThreads="150"
 minSpareThreads="5" maxSpareThreads="75" enableLookups="false"
 redirectPort="8443" acceptCount="100" connectionTimeout="20000"
 disableUploadTimeout="true" address="127.0.0.1" URIEncoding="UTF-8"/>

この後、サーバの再起動をしますが、管理コンソール自体を再起動させます。うまく行かない場合にはコンピュータの再起動を行いましょう。そうすれば「http://ホスト名:16001」で管理コンソールに接続できます。ホスト名はIPアドレスでももちろんかまいません。

くれぐれも、この状態で、インターネット経由での接続は細心の注意を払ってください。パスワードがバレない限りは他人にアクセスはできませんが、現状では容易にバレてしまうような通信方法です。安心な方法は、FMS13を稼働させているコンピュータにVPNで接続することですが、一手間増えるならVNCでサーバにログインしてページを開くのとあまり変わらないですよね。したがって、こうした変更はしないで、現状通り使うのが安全です。あるいは、自己署名証明書である点が微妙ですが、16000ポートで接続しましょう。いくら暗号化されているとは言え改善を期待したいですが、次のバージョン以降なのでしょうか。

MacでWindows VMを外付けドライブで稼働

我が家にはWindowsマシンは全くなく、MacでWindowsをVMで使うのでもう何年も過ごしています。自宅で仕事をすろときには、サーバのMac miniでVMを動かし、Remote Desktopで接続していましたが、立て続けに外出してWindowsを使わないと行けない仕事が発生しました。MacBook Air 2012を使っていますが、ストレージはいっぱいです。ということで、高速なメモリか、HDDかを迷ったのですが、両方買ってしまいました。実はメモリを買ったのですが、納期が遅れるということでHDDも念のために買いました。

結論は、HDDの方がスムーズにWindows 7のVMを使えました。購入したのは次の2つのデバイスです。前者は1万ちょい、後者は500GBを買ったので5000円程度。安い方がよかったのです。

TransMemoryは、サイトではMacだとUSB 2.0認識するように書かれていますが、実際にはUSB 3.0 Super Speedバスの方につながります。一方、ADATAのHDDは、仕様ではUSB 3.0対応と書かれていますが、システム情報を見ると、最大480Mbpsと出ています。つまり、USB 2.0接続しているということのようです。

ところが、両方に同じWindows 7を入れて稼働させると、TransMemoryの方は時々操作がまったくできない時間がしばらく続くと言った具合で、何か作業ができそうな感じはしません。一方、ADATA HDDはちょっともたつく感じはありますが、一定した応答で十分に使って作業ができそうです。実際、Excelで長時間作業をしたりもしました。

どうも逆の結果としか思えないのですが、そういえば、VMの最適化などはしていないので、もう一度時間ができたら確認をしてみたいと思います。

今年もよろしくお願いします

年末、新年、何かブログにと思いながらも単なる挨拶だけになりました。書く事はいっぱいあるのですが、ほかにもやるべき事がたくさんたまった2014年の新年です。昨年は前半は悪い事ばっかりで、まだ解決していないこともいくつもあるものの、後半はいいことが続き、上向きな感じです。個別に箇条書きにしたいくらいなのですが、余裕のない今は前だけを向いていようと思います。5日の日曜からフル稼働、そして、今年は珍しく大阪での仕事からスタートというところです。たくさんのことが降り掛かっているものの、なんだかどれも先の時間軸が見える感じのいい感じな仕事はじめでした。ビジュアルがないのも寂しいので、2014年正月の瀬戸内海の夕日です。今年もよろしくおねがいします。

IMG_0425

FileMaker Server 13の「デーモングループ」とは何か?

FileMaker Server 13のインストーラで次の図のような画面が出てきます。FileMaker Server 12までは、fmserverという決められたユーザでしか稼働できなかったのですが、任意のユーザでの実行が可能になったのです。

shot0050

つまり、今ログインしているユーザで稼働させることができるのです。そうなると、FileMaker Server内のフォルダやファイルが、ログインしているユーザが所有者となるため、削除や名前の変更をアクセス権のことを気にしないでできるようになります。自分のMacにFileMaker Serverを入れて開発をしている人に取っては一手間、二手間が減るということになります。以下の図は、私のmsykのアカウントでインストールした結果です。Web用のファイルのフォルダやデータベースのフォルダの所有者がmsykとなり、ログインしている私msykに読み書き権限があります。

shot0052

このように、fmserverアカウント以外での運用をするには、インストーラでインストールするときに指定をします。しかしながら、ログインをしているユーザを単に指定すると次の図のようなシートの警告が出て来て、インストールができません。

shot0051

デーモングループ? なんでしょうか? これ、日本語にすると意味が分からないのですが、OS Xにはdaemonという名前のグループアカウントがあり、そのグループに所属しているユーザでないと、指定ができないですよということです。なので「daemonグループ」と翻訳しないで書かないと意味は通りません。既定値ではdaemonグループには、rootユーザしか登録されていませんが、ここでは私のアカウントmsykを登録しておく必要があります。しかしながら、マニュアルに具体的には書かれていません。システム環境設定ではできません。

では、どうすればいいでしょうか? 以下のように、ターミナルでコマンドをたたいてください。どうしてもGUIで作業したいという方は、「ワークグループマネージャ」をダウンロードしてやれなくはないですが、手順は簡単ではありませんので、ここでは省略します。コマンドの方がはるかに簡単です、と言い切ります。msykの箇所は実際に利用するユーザ名に変えますが、あとはこのままです。2行目は追加されている事を確認するためのコマンドです。

sudo dseditgroup -o edit -a msyk -t user daemon
sudo dseditgroup -o read daemon

2つ目のコマンドでは、daemonグループに関するさまざまな情報が表示されるので、その中で、グループに含まれるユーザを示すdsAttrTypeStandard:GroupMembership以降にユーザ名が追加されているかを確認します。インストールの途中でターミナルを立ち上げて作業してもOKでした。

こんなコマンドは見た事がない? そんな方は、こちらの書籍をお勧めします(さりげない宣伝)。アカウントについても詳しく書籍で紹介があります。

こうしてインストールすると、fmserverdなどのデーモンやWeb共有のhttpdといったプロセスは、全部msykアカウントで稼働します。セキュリティ上大丈夫なのかと気にする人もいらっしゃるかもしれませんが、FileMaker Serverに変なバグがなければ大丈夫です。Webで公開するものは気をつけた方がいいかもしれませんが、たぶん、自分で開発しているアプリを入れるのが普通なので、通常のWebとは違ってグローバルIPにさらされることはほぼないこともあり、問題になることはほとんどないと思います。もっとも、こういう仕事をしている人は「問題になる状況かどうか」を自分で判断できるものじゃないかとも言えますし、自分で回避できるだろうとも言えます。

「FileMaker® Server 13入門ガイド」のp43に次のような事が書かれています。他のページにはアカウントの事はあまりきちんと書かれていません。インストールのところでも、ここを見ろというリファレンスがあるだけです。

OS X: アカウントは OS X のローカルユーザアカウントであり、ローカルファイルへのアクセス(デーモングループのメンバーシップを含む)に関して fmserver アカウントと同一の権限を持っている必要があります。ディレクトリサービス(Active Directory または Open Directory など)に由来するアカウントは使用できません。リモートボリュームにデータベースまたはオブジェクトデータフォルダを追加して設定する場合、アカウントはこれらのリモートフォルダに対する完全なアクセス権を持っている必要があります。

例によって解釈しづらい文章です。ここで、fmserverアカウントのアクセス権をidコマンドで確認してみます。ここで、1(daemon)、および61(localaccounts)がポイントなのではないかと思います。Open Directoryのアカウントは、localaccountsグループには所属していません。ローカルに作ったアカウントだと、足りないのがdaemonグループへの所属だけなので、前記の方法でFileMaker Serverの実行アカウントとして利用できるようになります。

$ id fmserver
uid=502(fmserver) gid=499(fmsadmin) groups=499(fmsadmin),1(daemon),12(everyone),61(localaccounts),100(_lpoperator),402(com.apple.sharepoint.group.1),240(com.apple.access_loginwindow)

FileMaker Server 13はWebDirectなどいろいろ新しい機能が増えていますが、こういう地道なところでも変化がありますね。

[IM] バージョン入りのINTER-Mediatorを生成する

INTER-Mediatorを使って開発をするとき、レポジトリからプルした結果を使うという話を別の記事で書きました。もちろん、動く状態としてそのままをアップしてもいいのですが、ページ最後に出ているINTER-Mediatorの帯のバージョンが@@1@@などといった文字列になっていて、ちょっと雑な感じがすると思います。独自のバージョンと本日の日付を組み込んだ現状のINTER-Mediatorを作るには、dist_docs/buildup.shというスクリプトを使ってください。

たとえば、INTER-Mediatorのディレクトリがカレントディレクトリであれば、

cd dist_docs
./buildup.sh

とコマンドを入力します。すると、だーっと何か出て来て、INTER-Mediatorフォルダと同じ階層に、「INTER-Mediator-4_2.zip」などとバージョン入りのフレームワークが作られます。中身は現状のINTER-Mediatorフォルダの内容とほぼ同じですが、日付とバージョンが入ったものになります。

INTER-Mediator-4_2.zipファイルを展開すると、「INTER-Mediator-4_2」フォルダが出来上がります。現在のINTER-Mediatorフォルダの名前を変えるか削除して、「INTER-Mediator-4_2」フォルダの名前を「INTER-Mediator」フォルダすれば置き換え完了です。同じディレクトリにあるtempフォルダは一時領域なので、これも削除してOKです。

なお、このとき、INTER-Mediatorフォルダと同じフォルダに、yuicompressor-2.4.7.jarファイルがあれば、これを使ってJavaScriptのプログラムを圧縮します。ない場合には圧縮しないで、いくつかあるJavaScriptのファイルを1つにまとめることだけを行います。なお、別のバージョンのものを使う場合には、buildup.shファイルの最初の方にパスを記述する箇所があるので、それを修正してください。

バージョン番号については、同様に、buildup.shの最初の方に記述があるので、それを変更して利用してください。なお、バージョンのルールは次のようにします。

  • バージョン番号は、整数をピリオドで区切ることとする(例:3.4、3.11)
  • バージョン表記は、Ver.を基本とするが、vでもVersionでもversionでも基本的には構わない
  • 整数が2つのものを「正式バージョン」とする(例:3.4、3.11)
  • 開発者が独自にバージョンを付ける場合、3つ目の整数を必ず付ける(例:3.4.1、3.11.133)

つまり、INTER-Mediatorをダウンロードして、実際にアプリケーションに搭載する上で少し修正したとしたら、3つ目の整数で枝番号を付けてくださいということです。できれば、その状態をコミット/プッシュした上で、そのバージョンタグをつけていただけると、自分のバックアップ用にもなると思います。他の人とバージョンが重ならないように、レポジトリをチェックして異なる番号を付けてください。また、3桁目は飛び番号でもいいとしましょう。けっこう緩いルールですね。