2010-03-31

『売上猫くん on MySQL』開発日記 - 番外8 - insert...select構文とODBC

以下、ODBC 5.1.5だと×、5.1.6だとOK

INSERT INTO estimates(customerNo) SELECT customerNo FROM estimates WHERE ID=5

これ、痛い。 この構文使えずに困っている人、結構いるんじゃなかろうか? 回避方法も見つからないし。


参考サイト:Bug #42905


関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-29

『売上猫くん on MySQL』開発日記 - 番外7 - FileMaker内にMySQLの一般ログを表示する

MySQL の一般ログをFileMakerで表示する方法。

1.MySQLのMySQLデータベースをDSN登録する。
2.my.ini に log-output=TABLE,FILE を指定。
3.以下をMySQLコマンドラインで実行。
mysql> SET @old_log_state = @@global.slow_query_log;
mysql> SET GLOBAL general_log = 'OFF';
mysql> ALTER TABLE mysql.general_log ENGINE = MyISAM;
mysql>ALTER TABLE `mysql`.`general_log` ADD COLUMN `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (`id`);
mysql> SET GLOBAL general_log = @old_log_state;
4.MySQL を再起動。
5.FileMaker のリレーションシップで、上記1で作成したDSNのmysql.general_logテーブル選択。このとき、上記で作成した id を指定。(以下、略)

するとこんな感じでログを表示できる。


FMの自動発行SQLクエリで「?」が頭に点灯したら、ログをチェックするのがよろしいかと。

尚、FM標準コマンドでは general_log テーブルのログは削除できないので、truncate(テーブル内の全行削除) を使用する。以下はFMの「SQLを実行」ステップを使用して、truncate を実行。

参考サイト:一般クエリとスロー クエリのログ出力先の選択

2010/9/24 追記
ログが出力されない場合、mysqlコマンドで
SET GLOBAL general_log = 'ON';
を実行してみる。

2010/10/25 追記
id の属性に AUTO_INCREMENT を追加。

2010/10/15 追記
slow_query についても、上記の要領でFileMaker上に表示可能だが、ログ対象となるクエリ時間の閾値がデフォルトでは10(秒)になっている。この為、ログ書き込みされないと思いこんでしまう。このデフォ値は、my.ini で long_query_time = 1 とするか、set global long_query_time = 1 を実行することにより変更できる。



関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-27

『売上猫くん on MySQL』開発日記 - 2 - 開発環境

『売上猫くん on MySQL』の開発環境は以下の通り。


アプリケーションファイル(NekoApp.fp7)は、FileMaker Server Advanced 10(以下、FMServerAdv)上に置き、開発PC1、2、3及び開発Mac 10.6 の FileMaker Pro Advanced 10(以下、FMPA)からそのファイルにアクセスして開発を行う。FMServerAdv を使用する理由には、複数人が開発を安定して行えること、オンラインバックアップがスケジュールできる、という2点が挙げられる。 
サーバ側にODBCをインストールしておけば、クライアント(開発PC)にはODBCは不要である(例外は後述)。
アプリケーション/ODBCの配布・アップグレードの容易さを考えれば、この構成は運用においても一考の価値はあると思う。 
なお、図の「開発PC3 Win2008/TS」は Terminal Service を載せたWindows Server 2008機で、各クライアントがリモートデスクトップ接続によりFMPAを起動し、FMServerAdv にアクセスできるようにしている。(もともと、FileMaker は Terminal Service との相性が良く、Ver5位より常用しているが、近年のTerminal Service はローカルプリンタへの印刷、ローカルディスクの利用も格段に簡単にできるようになり、加えて接続遮断時にも接続を自動で復旧してくれたりする)。

前述のように FMSA (FileMaker Server無印も同様)にODBCをインストールすればクライアントにODBCを入れる必要はないが、例外がある。それは「SQLを実行」スクリプトステップを使用する場合である。 FileMaker は通常、開発者自らSQLを記述する必要はないが、FileMaker が用意していないコマンドを実行する場合は「SQLを実行」を使用する。また、FileMaker の外部DBに対する処理の中には非常に遅いものがあり(激遅処理)、その典型的なものに多数のレコードに及ぶ一括処理がある。CSV等のファイル取込、全置換、ループ等がそれである。 その回避策として 「SQLを実行」スクリプトステップにSQL文を埋め込み実行すると直接外部データベースに素のSQLが送られるので、FileMakerのレコード取込やループ処理を使うのに比べれて、桁違いにパフォーマンスが向上する。尚、FileMaker の外部DB使用時の激遅処理については、機会を改めて書きたい。

さて、開発PC1、ここには予備用のMySQLを入れ、リストアやリカバリをテストを行うので、データベースを全部削除したりとか無茶をやる。無茶をやると「あー、なるほど」と新たな発見もあったりする。また、ローカルにアプリケーションファイル(NekoApp.fp7)を置いても、FMSAサーバの環境と同様に諸機能が動作するかのチェックも行う。


以上

『売上猫くん on MySQL』開発日記 - 番外6 - リモートのログを mysqlbinlog できない

市販のソフトウェアでログ(MySQLではバイナリログ)からのリカバリ機能を実装しているものはあまり無いような気がする。 以前、某有名財務ソフトのSEに、「ログからのリカバリはできるんですか?」と聞いたことがある。 答えは「そういうのが必要なときは、うちのSEがやりますよ」とのこと。 確かに、下手にユーザがリカバリを行うと大変なことになるので、こういう機能は組み込まないのが正解なのかもしれない。 また、小中規模のデータベースシステムなら、フルバックアップを日に何回か取って、障害発生時には最新のフルバックアップでリストアまでし、最終フルバックアップ以降の更新は、ユーザがせっせと入れる、というが実態なのかとも思う。 また、“ユーザがせってと”できないようなクリティカルなシステムは、自社のシステム管理者や外部のSI業者がしっかりリカバリする体制ができているのだろう。 

さて、『売上猫くん on MySQL』には、一応、バックアップ、フルバックアップからのリストア、バイナリログからのリカバリ機能を実装する予定で、バイナリログからのリカバリをテストしている。 MySQLが載っているサーバ機を使用し、そのサーバ上のログによりリカバリ(mysqlbinlog)を実行するのは、マニュアル通りに動く。 
ところが、ローカルPCからリモートサーバ上のログをリモートサーバに対してリカバリすべく下記を実行すると失敗する。

> mysqlbinlog --disable-log-bin --read-from-remote-server //remote-server/***/log-bin mysql --user=root --password=passord --host=remote-server --database=neko"

例によってググりながら、疑わしきところを弄りながら、異なる2台のサーバに対して試すこと数時間。 どうしても「Misconfigured master - server id was not set」 とか、「error reading packet from server: binary log is not open」みたいなエラーが出力される(この2つのエラーはレプリケーション絡みで出力されるようだが…)。

諦めかけたところ、いきなりプロンプト画面に正常な出力が行われる。データを見ると、確かに更新分が反映されている。そこで実行文を見直してみると、--read-from-remote-server を入れ忘れて実行していた。結果、成功。
--read-from-remote-server はマニュアルによると、「バイナリログをローカルファイルから読み取らずにMySQLサーバから読み取ります」とあるので、このオプションは必要と思ったのだが…

結局、半日以上を費やして、--read-from-remote-server の正しい使用方法は分からずじまいだが、目的は達したので良しとしよう。


関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-26

『売上猫くん on MySQL』開発日記 - 番外5 - ポータルで検索できない

MySQL等の外部DBを使用し、複数のリレーションを設定したポータル内では、検索を実行できません。 たとえば、売上と売上明細のテーブルを[売上No]と[区分]という二つのフィールドでリレートし、ポータルに売上明細のフィールドを置き、これらで検索しても失敗します。
FMのバグでしょう。


関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-23

『売上猫くん on MySQL』開発日記 - 番外4 - mysqldump で文字化け?

mysqldumpで作成したテキスト(sql)ファイルを WordPad で開いてみる。 文字化けだらけ。
MySQLクライアントを使用しても、phpMyAdmin を使用しても結果は変わらず。ただ、phpMyAdminで実行結果を画面に出力するとちゃんと表示される奇怪。
「mysqldump 文字化け」でググってみるといろいろと記事があり、それを見ながら --default-character-set やら、my.ini やらでいろいろ試してみるが解決には至らず。 
半日ほど頑張ってみたが埒があかないので、念のため、隣の人に聞いてみた。すると「WordPadを使ってませんか?」 。 「はぁ?」 、固まる小生。 WordPadって、NotePadの上位エディタじゃないの? NotePadで 確かに、NotePadは UTF-8とUnicodeの保存オプションがあるのに、 WordPadにはUnicodeのみ。 読み込みできるキャラクタセットが違うらしい。 WordPad のUnicodeはUTF-16LE対応.
Notepadはこれに加えてUTF-8対応。 あー、とんんだ恥さらし記事だけど、小生の同類がいるかもしれないので、恥を忍んで上げておこう。


関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-22

『売上猫くん on MySQL』開発日記 - 番外3 - 0を書き込みできない

売上明細テーブル( vw_salesdtls)のInt型のフィールド(balanceFlg)に値を書き込もうとする。他の値は書き込みできるのだが、“0”の書き込みが実行できない。 ログで何が起こっているのか確認する。

Commitに失敗している場合はバイナリログには記録されないので、mysqlbinlog は使えない。 そこで、一般ログというものを、

mysql> set global general_log="ON";

で作成してみる。 以下、1を立てて成功したログと、0で失敗したログ(一部抜粋)。

【1立てで成功】
9 Query SELECT ID,`売上番号`,balanceFlg, ~略~ FROM vw_salesdtls WHERE ID=8340 FOR UPDATE
9 Query UPDATE vw_salesdtls SET balanceFlg=1 WHERE ID=8340

【0立てで失敗】
8 Query SELECT ID,`売上番号`,balanceFlg, ~略~ FROM vw_salesdtls WHERE ID=8341

失敗したほうでは、なぜか FOR UPDATE 以下が発行されず、当然これでは更新できない。 当初はInnoDB側に何か問題があるのかと疑ったが、FileMakerが適切なクエリを発行していないことがわかった。 ちなみに、類似した他のテーブルでは、1、0の値に関係なく、更新(Update)は成功する。

いろいろとやってみた。FMのファイルを修復したり、レイアウトモードにして数字の書式を変更してみたり、フィールド定義を眺めてみたり。 そして、これが FileMaker のバグだと判明。 なんと、FileMaker は 空欄(null)→0 への変更は変更と認識しない、null=0 と認識するのである。 更新と認識しないので、 Update が発行されない。 恐ろしい。

結論
ということで、null と 0 を区別して扱う必要がある場合は、非常に注意が必要だ。 0 を参照キーするのは極力避けるべきた。 MySQL側で初期値を0に設定しておく、というのは一案かもしれない。
ちなみに、上述のように「null=0 と認識」するので、0→空欄lに変更を行っても、コミットすると 0 のままである。



関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-16

『売上猫くん on MySQL』開発日記 - 番外2 - MySQLミラーサイト

MySQL サイトが今朝から落ちてる。 レファレンスマニュアルが見れない、つまり開発できない。Googleのキャッシュは遅すぎる。 MySQLの全機能を網羅し、信頼の置けるドキュメントはここにしかない(と思う)。「MySQLの開発者はこういうときどうしているのだろう?」等と思いつつ、、、ミラーサイトをみつけた。これタイの大学のサイト。Googleキャッシュよりはずっと早い。 この大学のトップページにはなぜか秋篠宮殿下が…



関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-15

『売上猫くん on MySQL』開発日記 - 番外1 - 全データベース削除→リストア

あるサーバにあるデータベースダンプを別のサーバに移動。その後、MySQLのすべてのデータベースを削除し、リストアのテストを行おう思い、まず、

> drop database information_schema
(だったと思う)

を実行してみた。 すると、「information_schemaは削除できない」旨のメッセージが表示される。
その後、mysqlを再起動しようとするとエラーが出て起動しない。 データフォルダをみると、mysqlを含むすべてのデータベースは削除されている。エラーログをチェック(←これ大事)すると、 mysql データベースは起動に必須らしい。そこで、元のサーバから無理やりこのmysql フォルダをコピーし(サーバ停止無、こんなことやっていいいのか?)、丸ごと、起動しなくなった別サーバ内にコピー。 その後は再起動できた(ここまで半日潰れる)。

そこで、

> show databases

を実行すると、やはり表示されるのは、mysql データベースのみ。 そこで、コマンドプロンプトからリストアを実行すると、以下のようなエラーが出る。

InnoDB: Error: table test/parent already exists in InnoDB internal
InnoDB: data dictionary. Have you deleted the .frm file
InnoDB: and not used DROP TABLE? Have you used DROP DATABASE
InnoDB: for InnoDB tables in MySQL version <= 3.23.43? InnoDB: See the Restrictions section of the InnoDB manual. InnoDB: You can drop the orphaned table inside InnoDB by InnoDB: creating an InnoDB table with the same name in another
InnoDB: database and moving the .frm file to the current database.
InnoDB: Then MySQL thinks the table exists, and DROP TABLE will
InnoDB: succeed.

InnoDB内部の記録と不整合があるらしいので、一旦、同名の空のデータベースを作成し、それを削除したあとにもう一度リストアをやってみるとやっと成功。 めでたし、めでたし

参考サイト:トラブルシューティング InnoDB データ ディクショナリ操作



関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-03

SonicWALLの新製品テクニカルセミナー

先日、SonicWALLの新しいTotalSecure TZシリーズ(TZ100/TZ200/TZ210のセミナーに行ってきた。

セミナーは2時間で最初の一時間がマーケ、後の一時間がテクニカルな内容であった。以下、その備忘録。

マーケ
2008年、UTM製品の国内の出荷台数シェアは、Juniper(NetScreen)、SonicWALL、Fortinet、Cisco、Checkpointの順。 同年の金額によるシェアは、Fortinet、Juniper、Cisco、SonicWALL、Checkpointの順。 Sonicは台数は出てるのに金額が低い、つまり、Sonicは中小向けの安いUTM製品に強みを持っている。

あと、営業さんが資料等で強調していたのは、「他社製品に比べ、コストパフォーマンスがいいですよ」ということ。


テクニカル---新製品の特徴
  1. TZ180以前の機種で標準付属していたSonicOS Standardが無くなり、全機種がEnhanced(5.x) に統合された
  2. TZ180に比しUTMパフォーマンスが2.5~5倍Up(10Mbps→25Mbps~50Mbs)
  3. GAVシグネチャーが上位機種(NSA?)と同等に。 TZ100も?
  4. アプリケーションファイヤウォール(TZ210のみ)
  5. SSL-VPN(ユーザ数:1~10、機種/オプションにより異なる)
  6. 冗長構成 --- 予備機(同機種)を一台用意し、障害発生時に切り替えて運用
アプリケーションファイヤウォールは近頃流行らしく、WinnyやSkypeといった企業にとって都合の悪いアプリの通信を遮断、またはユーザ毎に管理できる。 また、企業がブラウザをFirefoxに統一しようとする場合、IEによる通信を遮断してしまい、間接的にFirefoxのインストールを強制する、という使いかたもあるらしい。 社員が一杯いたらGoogle Chrome をインストールしてシークレットモードで使おうとする不心得者もいる筈だが、どこまでのアプリケーションに対応可能なのか、アプリケーションのシグネチャはカスタマイズできるのかは、次回聞くことにしよう。 確か、カスタマイズはできると記憶している。

エンジニアは、TZより上位のシリーズはマルチコアCPUによりDPI(パケットのIPヘッダ部分だけではなく、データ部分を検査する機能)が高速化されていることを強調していた(が、今回のTZとは関係ないので、"マルチコアアーキテクチャ"と言いたかっただけと違うんかと)。
また、RFDPI(Reassembly Free Deep Packet Inspection)も強調。本機能は、他メーカー機と異なり、パケットをメモリ上に展開すること無く直接検査するため、非常に高速だとか。 こちらはTZシリーズでも採用している。
この2つの機能はSonicWALLの"売り"であるらしく、昨年のハイエンドのE-Class(ベンツかいな)のセミナーでも濃い説明があった。


尚、今回配布された「かんたんUTM導入ガイド」という小冊子(非売品)には、UTMのことがとてもよくまとめられている。 巻末の 文言によるとこの小冊子は、アスキーの「NETWORK MAGAZINE」の08/9月~09/2月号でSonicWALLのエンジニアが書いた記事を再編集したもの、とのこと。



以上

見つけモノ
SonicWALLのYouTube動画サイト(英語)

2010-02-19

サイト証明書の更新方法

 SSL で Web サイト証明書を使っている企業は多いと思いますが、事務所移転やサーバ移転等の理由から、内容を一部変更してサイト証明書の更新を行いたい場合があると思います。
 Windows Server 環境の場合は、もう一つ仮想 Web サイトを用意すれば、比較的容易にサイト証明書の更新申請を行うことができます。

 手順は次のとおりです。

1. 仮想 Web サイトの準備
 IIS の場合は、「規定の Webサイト」の他に「管理者のWebサイト」が用意されていますので、「管理者のWebサイト」を使うだけで問題はありませんが、必要に応じて Web サイトを追加してください。
 以下の図のように、仮想 Web サイトは停止中のままでかまいません。


2. CSR(証明書発行要求書)の発行と証明書申請
 仮想 Web サイトの「ディレクトリのセキュリティ」タブより CSR の発行を行います。

 途中、証明書の名前や組織名といった情報を求められますが、ここで最新のものを入力していきます。
 この画面より発行した CSR を、証明書発行サービスサイト(Global Sign 等)の証明書更新申請画面の CSR 欄に貼り付けて申請を行うと、更新済のサイト情報で証明書の発行が可能となります。

 Global Sign 社のマニュアルに詳しく発行方法が記載されていますので、それに倣って CSR を作成し、証明書更新申請画面の SCR 貼り付け欄に貼り付けて申請を行うと便利でしょう。

(参考)[CSR生成] Microsoft Internet Information Services 6.0(新規)の CSR 発行方法

『売上猫くん on MySQL』開発日記 ― 1 始めに

昨年1月にFileMakerの新バージョンがリリースされ、ややモチベーションがアップ。 大人の事情によりMySQL 版の「FlexSql売管」は取り止め、暇をみつけて「売上猫くん 4.5」の MySQL版を作ろう、と思い立ったのが去年3月。 今後、当Blogではこの開発工程を綴ります。

概要
「売上猫くん4.5」の後継バージョン『売上猫くん on MySQL』、を、FileMaker Pro 10/MySQL 5.1 を使用し開発する。 完成後、『売上猫くん on MySQL』を流用し、データベースにFileMakerを使用した『売上猫くん5.0』、MS SQL-Server を使用した『売上猫くんon MSSQL』を開発する。可能であれば、最終的に3つのシステムが同一のFileMakerファイル上で動作するようにし、アップグレードを含む開発効率のアップを図る。

システム要件
  • 基本機能は「売上猫くん 4.5」に準じる
  • 見積/売上登録時の取引先/商品の入力方法改善
  • マルチウインドウ対応
  • データベースバックアップ/リカバリ機能(MySQL/MSSQLのみ)
  • ユーザ管理/ログイン機能
  • ユーザインターフェイスの改善

開発環境
データベース:MySQL Community Server 5.1.30
開発ツール
 FileMaker Pro Advanced 10 (Windows/Macintosh)
 MySQL Administrator (→開発終了!)
 phpMyAdmin
 MySQL Workbench
ドキュメント作成
 A5:SQL Mk-2
サーバ(MySQL用)
 CPU: Dual-Core AMD Opteron 1212 2GHz/8GB RAM
 OS: Windows Server 2008 Enterprise
ODBC: MySQL ODBC 5.1 ドライバ




2010/12/16 開発ツール加筆、記事一部削除

2010-01-26

The Same Trouble Again in FMS10 Installation

I mentioned how to "forcibly" fix incompatibilities between FileMaker Server 9 Advanced, IIS, and Java in the article on June 16, 2008, and once again, the same trouble took place with FileMaker Server 10 Advanced!
Being a little smarter this time around, I fortunately found a way to handle this trouble without reinstalling Java, IIS, and FMS10.

The followings are what have happened and how I fixed the problem:

- What I did and what happened -
1. Uninstalled FMS9 first, since FMS9 had already been installed on this Windows Server 2003 to prevent incompatibility between FMS9 and FMS10.
2. Installed FMS10 and added php to IIS via FileMaker Server 10 Admin Console, however, the previously installed ASP.NET's behaviour became odd enough that my web browser would not load .aspx files any more.

* This trouble did not take place when I clean installed FMS10 on a 32-bit version Windows Server 2008, so the symptom could be caused if you uninstall an older version of FMS before installing FMS10 or try to reinstall FMS10.

- How I fixed it -
If you install FMS9/10 when the IIS has alreay ASP.NET installed, some parts of ASP.NET would stop functioning properly. So, you can fix this by reinstalling ASP.NET.

1. Just in case, take a backup of wwwroot and the subsidiary directories.
2. Install FMS10 and check out if your browser is able to load .aspx files from the web server. If not, go on to the next step.
3. Choose [Control Panel] -> [Add and delete programs] in Windows Server 2003, and highlight [Application Servers] from [Add and delete Windows components]. Click "Details...", deselect [ASP.NET] from the list shown, and click "OK."
4. Click "Next" to uninstall ASP.NET.
5. Restart IIS Admin Service and World Wide Web Publishing Service. Make sure ASP.NET is not listed on [Web Service Expansion] in the IIS.
6. Choose [Control Panel] -> [Add and delete programs] in Windows Server 2003, and highlight [Application Servers] from [Add and delete Windows components]. Click "Details...", tick off [ASP.NET] from the list shown, and click "OK."
7. Restart IIS Admin Service and World Wide Web Publishing Service. Make sure ASP.NET is listed with the version number on [Web Service Expansion] in the IIS.
8. Make sure that your web browser loads .aspx files properly. Also check out if php works accordingly.

2010-01-25

FMS10 のインストールでもトラブル発生

 2008/06/16 の記事で FileMaker Server 9 Advanced のインストールトラブルと無理矢理とも言えるトラブル回避策について書きましたが、今回 FileMaker Server 10 Advanced のインストール時にも同様の現象が発生したので、アプリケーションの再インストールをしない方向で対応してみました。

 以下、現象と対応方法です。

【現象】
 Windows Server 2003 に FMS9 がすでに入っていたため、FMS9 をまずアンインストール。
 その後、FMS10 をインストールしてから、FileMaker Server 10 Admin Console から php 機能を IIS に追加すると、IIS にインストールされていた ASP.NET 環境の挙動がおかしくなる。
 Web ブラウザから .aspx ファイルが読み込まれなくなる。

 Windows Server 2008 (32bit バージョン)にクリーンインストールした FMS10 ではこの現象は発生しなかったため、旧バージョンの FMS アンインストールや、FMS10 の再インストールを行うと発生する現象の可能性がある。

【対応】
 IIS に ASP.NET がすでに稼働中の状態で、FMS9/10 をインストールすると、ASP.NET の機能の一部が正常に動作しなくなるようです。このため、ASP.NET を再インストールすることで解決します。

1. 念のため、wwwroot 以下の環境をバックアップしておきます。
2. FMS10 をインストールし、.aspx ファイルが読み込めるかどうか確認します。読み込めなかった場合は次のステップに進みます。
3. Windows Server 2003 の「コントロールパネル」→「プログラムの追加と削除」を選択し、「Windows コンポーネントの追加と削除」より[アプリケーションサーバー]を反転させ、“詳細”ボタンをクリックして[ASP.NET]のチェックを外し、“OK”をクリックします。
4. “次へ”ボタンをクリックすると ASP.NET がアンインストールされます。
5. IIS Admin Service、World Wide Web Publishing Service を再起動し、IIS マネージャーの「Web サービス拡張」にASP.NET が登録されていないことを確認します。
6. Windows Server 2003 の「コントロールパネル」→「プログラムの追加と削除」を選択し、「Windows コンポーネントの追加と削除」より[アプリケーションサーバー]を反転させ、“詳細”ボタンをクリックして[ASP.NET]のチェックを付け、“OK”をクリックします。
7. IIS Admin Service、World Wide Web Publishing Service を再起動し、IIS マネージャーの「Web サービス拡張」にASP.NET がバージョン入りで登録されていることを確認します。
8. Web ブラウザを使って .aspx ファイルが読み込めたら成功です。php 環境も動作するか併せて確認してみてください。

2010-01-19

Dell のファン交換でハマる

 個人で使用している Dell600SC を起動すると BIOS から以下のメッセージが表示されるようになりました。

Alert! Back system fan was not detected.
Strike the F1 key to continue, F2 to run the setup utility.

 ケースカバーを外して電源を入れてみると、確かにケースファン(FAN2)が回転しなかったため、ファンを交換することにしました。マザーボードに挿さっていたファンは JMC/DATECH の 1238-12HBTA-4 というモデルです(写真左)。



 今回購入したのは KAZE-JYUNI SY1225SL12SH という 12cm, 1900RPM というタイプのファンです(上記写真右)。

 ファンをセットし、コネクタを挿そうとしましたが、コネクタの形状がマザーボードのコネクタスロットに合わず、挿せませんでした。以下の写真のように、DELL で提供されているファンは平型のコネクタで、市販のファンは多少厚みのあるコネクタになっています。

 暫定策として、コネクタを 4 ピン電源ケーブルに変換し、HDD の電源ケーブルとつないでファンを回していますが、これですと BIOS の FAN2 コネクタの接続状態が検出できないため、上記の BIOS エラーが解消しません。


 そこでこのコネクタを変換するためのケーブルをネット検索しましたが見つかりませんでした。
 量販店で聞いてみたところ、DELL の部品コネクタは特殊な形状をしており、市販されていない場合があるということで、このファンのコネクタもそれに該当してしまったようです。

 ここで考えられる対策は次のとおりです。

1. ダメ元でコネクタ変換ケーブルを扱っている業者のページをもう少し頑張って検索する。
2. コネクタのプラスチック部分を削って挿せるようにする。
3. DELL のコネクタ部分を新しいファンのコネクタ部分に半田付けする。
4. 正規品の DELL ケースファンを取り寄せる。

 2. と 3. の方法はケーブルコネクタそのものを加工してしまうので、失敗するとその時点でアウトですが、どっちみちダメなら最終手段として試してみる価値はあるかもしれません。

2010-01-14

通信環境の常識はもはや変わった! 海外出張装備2010

http://ascii.jp/elem/000/000/489/489323/

Mac Mini を使ってみる

 弊社の Mac OS X 環境を最新のものにするため、Mac OS X 10.6 Snow Leopard がプリインストールされている Mac Mini を購入して動かしてみました。
 以下、Mac Mini の接続とセットアップについて書いてみることにします。

さっそく接続

 Mac Mini には モニタ、マウス、キーボード等の周辺機器が付属していないため、Windows 環境で利用している 2 台切替用の KVM スイッチにこの Mac Mini を接続しました。


(Mac Mini を KVM スイッチに接続したときの様子)

 現在使っている KVM スイッチは、ELECOM 社の KVM-KP2N というモデルです(Shift + Scroll Lock キーでマシン切替)。 上の完成写真をご覧頂くとわかるように、PS/2 マウスおよび PS/2 キーボードのコネクタと、VGA 端子による構成ですので、Mac Mini 本体に接続するには、USB 変換、VGA 変換が必要となります。

 PS/2→USB 変換は ELECOM 社の USB-P2KM という変換パーツを使い、キーボード・マウスの 2 つのPS/2 端子を 1 本の USB 端子に纏めました。

 Mac Mini に付属のビデオケーブルは DVI なので、これを VGA に変換する必要があるのですが、変換パーツがネットショップで見つからなかったので、Apple 社純正品の Apple Mini DVI-VGAアダプタを別途購入して繋げてみました。 
 Mac Mini に電源を投入すると、モニタ、マウス、キーボードが無事認識されましたので、私と同じように、既存の VGA モニタ、PS/2マウス・キーボードを Mac Mini で共有してみたい方は参考になるかもしれません。

ここまでは良かったが...キーボードで日本語が打てない

 Windows 用の JIS 配列キーボードを Mac 環境に接続した直後は、英数字は打てても日本語が打てません。これはキーボード配列が Mac OS 環境に登録されていないことと、Windows 環境で使っている JIS キーボードの配列が Mac 環境では異なる理由からのようです。
 当然、コマンドキーに相当するキーが認識されない関係で、ことえり切り替えのショートカットキーも利きません。
 いろいろ探し回った結果、以下の有難いサイトに辿り着きました。

Windows用USBキーボードをMacで使う

 このサイトでは、Windows キーボードが Mac で認識されない理由だけでなく、Windows 用のキーボード配列を Mac OS に認識させるファイルのインストーラーまで配布されています。詳細は上記ページをご覧頂くとして、早速インストールと設定を行ったところ、ことえりで日本語入力ができるようになりました。
 ただし、前述したように、コマンドキーに相当するキーは認識されないため、コマンドキー + スペースバーによることえり/英数字切り替えはできません。
 この代わりとして、以下のように [Caps Lock キーの機能]を以下のように設定することで CapsLock キーを押すたびに英字と日本語入力が切り替わるようになります。


その他試した設定

ここまで準備できたら、今後の運用のために必須のマシン環境を整えていきます。
1.ClamXav のインストール
Mac OS 向けに無償で配布されているアンチウィルスソフトウェアです。以下のサイトからダウンロードしてインストールしました。
ClamXav
 常駐監視機能はないようですが(ざっと読んだだけでは見当たらなかった)、定義もまめに更新されているようですので、手動ウィルススキャンツールとしてインストールしておくと良いと思います。
 なお、Server 版の Mac OS X 10.6 Snow Leopard には ClamXav がバンドルされているようです。

2. VNC
 Mac OS 環境を VNC クライアントから閲覧できるようにするには、「システム環境設定」→「共有」を選択し、「画面共有」メニュー項目を選択して“編集...”ボタンを押し、以下のように「VNC 使用者が画面を操作することを許可」という項目にチェックを付けます。


これで VNC クライアントからこの MAC OS の画面を参照できるようになります。接続時が確立された直後に "WriteExact: Socket Error while writing." というエラーメッセージが表示されることがあります。

 接続時の Quick Option が AUTO (auto select best settings) になっていることが原因ですので、他のオプションを選択して接続してみてください。


3.Windows Active Directory への参加
 Windows Active Directory 環境からこの Mac Mini にアクセスさせるには、「システム管理設定」の「共有」から設定を行います。
 左ペインに表示される共有項目より、「ファイル共有」にチェックを付け、右ペインの“詳細設定”ボタンをクリックするとダイアログが表示されますので、この中から「SMB(Windows) を使用してファイルやフォルダを共有」にチェックをつけて、Mac Mini のデフォルト認証アカウントを選択しておきます。


 このダイアログを閉じ、共有するフォルダやディスクを登録し、アクセス権限を付与します。


 次に Active Directory への参加権限を Mac Mini のアカウントに付与します。
 「システム管理設定」の「アカウント」を選択し、表示されるダイアログの左ペインより、「ログインオプション」を選択し、右ペインの一番下に表示されている「ネットワークアカウントサーバ」の“接続...”ボタンを押して Active Directory ドメイン名を入力します。


 すると、次のように[クライアントコンピュータ ID](デフォルトで入力されているので変更不要)、[AD 管理ユーザ]、[AD 管理パスワード]入力欄が表示されますので、Windows Active Directory で使用しているドメイン管理者名およびパスワードを入力し、“ディレクトリユーティリティを開く...”ボタンを押します。


 すると「ディレクトリユーティリティ」ダイアログが開きますので、この一覧に表示されている「Active Directory」にチェックを付けてダブルクリックすると、以下のような画面が開きますので、内容を確認して“バインド...”ボタンを押すと、MacMini が Active Directory 環境で認識されるようになります。

 これで、Windows のエクスプローラからこのマシンおよび共有フォルダにアクセスできるようになります。

がしかし、Mac Mini から Active Directory が参照できず...。

 上記のように設定を行い、Active Directory から Mac Mini 環境にアクセスできるようになったのは良いのですが、未だ Mac Mini 環境から Active Directory を参照できていません。
 Finder から共有(ネットワーク)を見ようとすると、という寂しいアイコンが一つ表示されたままです。
 因みに、Mac OS X 10.3 Panther の頃はここでドメインの一覧が表示されるようになっていたのですが、同じように閲覧できるようにするには、この他にどのような設定を行えばよいのでしょうか...。

 この解決方法をご存じの方がいらっしゃいましたら、情報をいただけると幸いです。

2009-12-25

FileMaker V10による在庫管理、一考 その3

前回作成した在庫アプリ(ZaikoTestV0.fp7)の課題メモ

0.在庫と商品のテーブル分離
複数ユーザによる同時アクセス競合をできるだけ回避するため、在庫と商品のテーブルは分離し、在庫以外の商品情報はもっぱら商品テーブルに持たせる。 在庫テーブルは在庫データ専用とする。

1.競合発生時の処理
1-1 書き込みループ 
ZaikoTestV0.fp7では在庫更新時に競合エラーが発生すると、最終保存時点までRevert(ロールバック)してしまうので、競合するユーザの在庫書き込み処理が終了し、自身の在庫書き込みが成功するまで、書き込みをループさせる(最大ループ数有)。

1-2 遅延オプション
FileMaker Server 10 Advanced を使用すると、スペック的には999ユーザまでが同時アクセス可能となる。 つまり、最大999ユーザが特定の商品の在庫数を同時更新する可能性がある。
人気の新商品のリリース時に膨大な数の受注が想定される場合は、逐次処理を行うのではなく、一定間隔で明細レコードを集計して、在庫を更新するようなオプションを考慮する。 もちろん、在庫の算出は、“一定間隔”の分、遅延する。

2.在庫算出時点
特定の日付を指定して、その日付時点の在庫数を算出する場合は、「商品別末日時点在庫テーブル」を作成して月次処理を行い、この際に各商品の末日時点の在庫数をこのテーブルに書き込む。
これにより、日付指定により在庫を算出する場合でも、クエリの対象となるデータを最大1~2カ月程度に限定できる(高速化)。

以上


【関連リンク】


2012/8/1追記:
当社の在庫管理の講習で使用してるサンプルシステム「FMEasy在庫」を公開しました。フリー版/開発版のダウンロードは→こちら

【FMEasy在庫 の画面】

2009-12-24

FileMaker V10による在庫管理、一考 その2

前回作成した在庫アプリは新規出庫しか在庫と連動していなかったので、出庫伝票の更新/削除時も在庫が変更するように、修正してみた。 どんなものか見てみたい方は下記からどーぞ(パスワードはかかってませんよ)




【関連リンク】

2012/8/1追記:
当社の在庫管理の講習で使用してるサンプルシステム「FMEasy在庫」を公開しました。フリー版/開発版のダウンロードは→こちら

【FMEasy在庫 の画面】

ODBC ドライバ DataDirect SequeLink を使って FileMaker Pro にアクセスしたときの問題点

 FileMaker Pro 対応の ODBC ドライバは DataDirect SequeLink となっていますが、今回はこのドライバを使って FileMaker Pro にアクセスした場合の問題点について書いていきます。

備考:
1. php から ODBC 接続する方法として PDO を使っています。PDO を有効にするには、php.ini の以下の行を追加し、Web サーバを再起動しておく必要があります。

  extension=php_pdo.dll
  extension=php_pdo_odbc.dll

2. PDO ではシステム DSN を指定する必要があるため、SequeLink ドライバを指定して適当な名前のシステム DSN を事前に登録しておく必要があります。
php ソースの記述例は次のとおりです。
//$dbh = new PDO ("odbc:DSN=データソース名;UID=ユーザー名;PWD=パスワード");

try {
     $pdo = new PDO("odbc:dsn=test;host=127.0.0.1", "Admin", "somePWD");
 $sql = "select * from testdb where recno=1";
 $rec = $pdo->query($sql);
               //レコードセットから特定の列を取りだすときは bindColum を使用
 $rec->bindColumn("ID", $ID);
     $rec->fetch();

 echo $ID;

} catch(PDOException $e){
    var_dump($e->getMessage());
}

 上記のような php スクプトを連続操作を実行すると、ODBC ドライバの動作が不安定になることがわかりました。
 
 返されたエラーは次のとおりです。

1) Session refused by service, connection closed.

 このエラーはサーバプロセスが接続要求を受理できなかったときに発生します。
 このエラー発生後、FileMaker Pro ファイルを閉じたり、一度 Windows をログオフしたりしたのですが、それでも現象が改善せず、マシンを再起動することによってようやく復旧しました。

2) Maximum number of sessions reached.

 このエラーは設定済のアクティブセッション数を超過した場合に発生し、その後のクライアント接続要求は拒否されてしまうようです。
 このエラー発生後、ファイルメーカー Pro ファイルを一度閉じることによって復旧しました。

 以下のサイトにエラーコードの一覧が用意されていますので、その他のエラー内容と原因も参照できます。
SequeLink のエラーメッセージ一覧

 ただ、これだけ動作が不安定だと、ODBC 接続実験としては面白いですが、とても運用レベルには耐えられないという印象です。また、CD に付属の SequeLink は 64bit 対応ではないため、別途購入する必要がある(しかも金額不明)というのも利用者を遠ざける原因になってしまうかもしれません。
SequeLink® 5.5 Client for ODBC 製品紹介ページ


ODBC 接続に関する続きの記事はこちら:
API 別/サーバ別FileMaker カスタムWebパフォーマンス比較