(12/05/01~)

12/05/02

3G & GPS Sierra Wireless 3G Card (MC8781)
 触る暇がなく放置中だった奴を。

 JustSlate.com からPayPal 経由で購入。発送まで二週間、到着まで10日ってトコでした。

 郵便受けに、この袋で投げ込まれていたのでちょっとビックリ。袋の中がプチプチになっているとは言え...。

  

 内容物はこんな感じ。MC8781 とアンテナが二本です。

 MC8781 を固定するネジは付いていませんので、会社のネジ入れから適当なものを持ってきました。暫定的でよければ、TW317A5 のシールドを止めているネジが使えます。

  

 とりあえずこんな感じで組み込んでみました。

 TW317A5 の電源を入れ、認識しているトコまでは確認しました。ただ、僕個人はスマホを持っていないのでデータ通信カード (SIM) がありません。

 ちゃんと触ったわけではありませんが、とりあえずの感想 (?) を。

 いきなり思惑が外れた感がありますが、もう少し調べてみたいと思います。JustSlates.com の FAQ は事前に読んでるんですけどね...。

ONKYO TW317A5 コーナー
 てな訳で、ONKYO TW317A5 コーナー の記事を更新してあります。

続・3G & GPS Sierra Wireless 3G Card (MC8781)
 やっぱりスタンドアロンで使えるようです。詳細はこちらで。


12/05/07

バリうま。
 お客さんから貰ったお魚を料理しました。貴重な蛋白質...略して "キチョタン" です (w

 貰ったのはアイゴというお魚です。ヒレにトゲがあり、ことごとくどれにも毒があります。

 包丁は使わず、キッチンバサミで処理します。

  1. 胸ビレを落とす
  2. 尾ビレを落とす
  3. 背中のヒレを身ごと切り取る。
  4. 腹ビレを身ごと切り取る。
  5. 頭を落とす
  6. ワタを出して流水ですすぐ。
 こんな感じです。

 頭や切り取ったヒレ、ワタ等は鍋で煮て捨てます。生魚臭さを取るためでもありますが、生のまま捨てるとゴミ出しの日にビニール袋を突き破ったトゲでやられかねないからです。毒は蛋白質なので、40℃を超えると不活性化します。刺された時も火傷をしない程度の熱めのお湯に患部を浸すと痛みが和らぎます。

 ムニエルにしてみました。アイゴは最初から昆布風味なので、クレイジーソルトだけで味付けして食べてみました。煮付けの魚のように身がキレイに取れるので食べやすい魚だと思います。

 アイゴだけに 「"バリ" うま」です...なんでかって、九州地方ではこの魚の事を "バリ" と呼ぶからです。「お前 "バリうま" 言いたかっただけだろ!」...とかいう外野の声は放っておいて、お味は 「昆布締めしたスズキ」...もっと分り易く言えば、「カール うすあじ」 です。

カール うすあじ?
 何故、クレイジーソルトで味付けしただけのアイゴが "カール"...それも "うすあじ" なのかと申しますと、カールのあの味は昆布の味なのです。

 "アイゴ + クレイジーソルト" と "カール うすしお味" は以下の共通点があります。

 そりゃ、カールの味になりますよね。半信半疑な方は "カール うすあじ" の成分表 をご覧下さい。


12/05/13

小ネタを幾つか。
 書きたいと思います。

IBConsole で Create Shadow するには?
 Interbase / Firebird のサーバが Windows の場合に Create Shadow するのなら、

Create Shadow 1 AUTO 'C:/TEST_DB/DATA.IDB';

 このように、パスデリミタとしてスラッシュを使うとうまくいきます。ちなみに \ を使うと、"C:\Windows\System32" とかの中にシャドウができてしまいます...しかも変な名前で。サーバに Linux ばっか使ってると、この件を忘れがちです。

uBDE_CONFIG
 アプリケーションから BDE のエリアスを操作するためのクラスを Delphi VCL Tips"53.今更ながら BDE (Borland Database Engine)" に追記してあります。

Angry IP Scanner
 LAN 内の IP アドレスの生存確認が簡単に行えるツール。

 社内 PC の台数が増えてきて、もはや IP の管理がワケワカメな場合に。

MASPRO MOVT2
 車のアナログ TV 搭載カーナビでワンセグを視聴するためのチューナ。

 自家用車にコイツを取り付けてみたので、簡単にレビューを。

 ...とはいえ、ちょっとした問題点も。  ワンセグをマルチチャンネルで VHF に飛ばす方式ならばリモコンもリモコン受光部も要らない (すべてカーナビ側で操作) のでもっと配線が楽になるのに。あと、結局 A ピラーカバー外したりしないと線だらけで見栄えが悪くなるので、"配線簡単ラクチンポン" とはいかないかも。

SHGetFolderPath()
 最近の Delphi では GetHomePath() を呼ぶとアプリケーションフォルダを取得できる。"53.今更ながら BDE (Borland Database Engine)" にもそれが書いてあるけれど、この関数は Delphi XE で追加されたもののようだ...意外に新しかったのだな。

 XE 以前の Delphi で GetHomePath() を実装しようとすると、SHGetFolderPath() API が必要になるが、これは SHFolder を uses する事で利用可能となる。なお、SHGetFolderPath()の第二引数には CSIDL_APPDATA (0x001A) を指定する。

InstallAware 7 to 2012
 うん?InstallAware 7 をインストールしてある環境だと、2012 (XE2 付属の InstallAware は最初から 2012 です) へのアップデートを促されるような?InstallAware 7 へのパッチでは対処できない問題があったのだろうか?等と思いつつインストールしてみたら、"これ CodeGear Special Edition のアップデートじゃないやん!"

 インストール途中で "Free" を選ぶ事もできますが、この場合には VS を持っていなくてはならないようですし、恐らく Delphi 付属のものよりダウングレードになってしまうと思われます...紛らわしい通知はやめて欲しいなぁ。せめて "Upgrade Offer" とかの文字が入っていればなぁ。

 なお、Delphi VCL Tips"52.InstallAware" は InstallAware 2012 対応となっています。


12/05/14

調べ物をしていると...
 全然関係のない事が検索にヒットして徒労に終わることがしょっちゅうなのだけれど、それでも 「ほほぅ」 と思うような情報があったりもする。

 その時にブックマークに入れればいいのだが、本題とは関係がないためにそのままスルーしてしまう事が多い。そして後になって 「あぁ...コレってなんだったっけなぁ...」 と悩む事になる。このサイトは自身の備忘録も兼ねているのだ...だから、「そんなの知ってるわ、ボケ!」 とか言わないでね。人間の脳ミソは無限ではないのだから。

Firebird で各種ステータスを得る
 ENGINE_VERSION の件は Firebird FAQ にも載っているのだけれど、他に何があるのか調べてなかったな。

/* 接続している DB のフルパスを取得する */
SELECT rdb$get_context('SYSTEM''DB_NAME'FROM rdb$database;

/* 現在接続しているクライアントの IP アドレスを取得する */
SELECT rdb$get_context('SYSTEM''CLIENT_ADDRESS'FROM rdb$database;

/* サーバへの接続形態 (ネットワークプロトコル) を得る */
SELECT rdb$get_context('SYSTEM''NETWORK_PROTOCOL'FROM rdb$database;

/* 現在接続しているクライアントのユーザ名を取得する */
SELECT rdb$get_context('SYSTEM''CURRENT_USER'FROM rdb$database;

/* 現在接続しているクライアントのロールを取得する */
SELECT rdb$get_context('SYSTEM''CURRENT_ROLE'FROM rdb$database;

/* 現在接続しているクライアントのセッション ID を取得する */
SELECT rdb$get_context('SYSTEM''SESSION_ID'FROM rdb$database;

/* 現在接続しているクライアントのトランザクション ID を取得する */
SELECT rdb$get_context('SYSTEM''TRANSACTION_ID'FROM rdb$database;

/* 現在接続しているクライアントのアイソレーション (トランザクション分離) レベルを取得する */
SELECT rdb$get_context('SYSTEM''ISOLATION_LEVEL'FROM rdb$database;

/* サーバのバージョンを取得する (2.1 以降) */
SELECT rdb$get_context('SYSTEM''ENGINE_VERSION'FROM rdb$database;

 結構使えそうなのがあるじゃないか。rdb$get_context の詳細についてはリファレンスマニュアルを参照の事。

Delphi 絡みの Firebird FAQ
 元が Interbase だけに、イロイロあります。

 他の DB にはこんな項目ないですよね (w

Embarcadero の優待アップグレード2種
 現在、2 つの優待アップグレードがありますね。

 アップグレード対象の Delphi を持っていないヒトが普通に Delphi XE2 Pro を買おうとすると \98,000 です。アップグレード対象であっても \50,000 となります。

 さて、Delphi に興味がある方が今回の優待アップグレードを賢く使う方法はと言うと、

  1. C++Builder 発売15周年記念キャンペーン で、C++Builder XE2 を \50,000 で入手
  2. 15,000円 で Delphi / C++Builder XE2 か らRAD Studio XE2 へアップグレード! を \15,000 で入手
  3. 「Delphi XE2 を Get だぜ!」
 合計 \65,000 で Delphi XE2 を Get です。アップグレード対象の方がこれをやっちゃうと Delphi 単体を購入するよりも +\15,000 となりますが、C++Builder や RadPHP、Prism、そしてそれらの過去のバージョンも入手できると考えれば充分に元は取れるでしょう。

 C++Builder 発売15周年記念キャンペーン の C++Builder は "C++Builder を持っていなくても購入可能" というのがミソですよ。だから、「Delphi のアップグレード対象製品を持っていなくとも、通常より \33,000 OFF かつ、他の製品も入手できる」 という事になります。限定 500 本、6/29 迄なのでお早めに。

 客観的に考えれば、ここで紹介したのは "Delphi を入手するために C++Builder を踏み台にする" という方法だったり...(w

Firebird のクライアントのバージョンを取得する
 Interbase もそうですが、Firebird をインストールすると、利用しているクライアント DLL のバージョンが判らなくなる事があります...自分でインストールしたのだから、バージョン位は判りそうなものですが、IBX を使ったりすると GDS32.DLL にリネームしたりするものですから、複数の場所に GDS32.DLL が存在するという事態になってしまう事があるのです。

 つまり、"実際にアプリケーションでロードされている GDS32.DLL を知る必要がある" 訳ですね。

uses
  ..., IBIntf;

var
  VerStr: AnsiString;
  Buf: array [0..MAX_PATH] of AnsiChar;
  GDSLib: IGDSLibrary;
begin
  GDSLib := GetGDSLibrary;
  GDSLib.LoadIBLibrary;
  try
    GDSLib.isc_get_client_version(@Buf);
    VerStr := PAnsiChar(@Buf);
//  VerStr := Format('%1.2f', [GDSLib.GetIBClientVersion]); // Interbase
  finally
    GDSLib.FreeIBLibrary;
  end;
  ShowMessage(VerStr);
end;

 このコードは GDS32.DLL のクライアントバージョンを返します (Firebird / Interbase サーバが起動している必要はありません)。例えば、Firebird 2.1.4 のクライアント DLL が入っている環境であれば、"WI-V6.3.4.18393 Firebird 2.1" が返ってきます。

 Interbase の場合には、コメント行のような感じでバーションを取得できるのですが、Firebird だと 6.3 が返ってきてしまう上、リリースバージョンまでは判りません。

 もっと簡単に "実際にロードしている GDS32.DLL のバージョン" を知る方法はないのでしょうかね?単純にやろうとするなら、GetFileVersionInfo() で GDS32.DLL のファイルバージョンを調べるとかでしょうけど、Interbase って、"DLL のファイルバージョン = クライアント DLL のバージョン" になっていましたっけ?今、Interbase をアンインストールしているので確認できないのですが...。

 追記: Firebird も 1.5 とかだとクライアント DLL のファイルバージョンは Firebird のバージョンとは違いますね。


12/05/16

Firebird で各種ステータスを得る (その 2)
 Firebird 2.1.x またはそれ以降では "モニタリングテーブル (Monitoring Tables)" を監視する事で、各種ステータスを得ることができます。

 具体的には、

Select * From MON$ATTACHMENTS

 このような SQL を投げます。得られる情報は以下の通りです。

Field Description
MON$ATTACHMENT_ID 接続 ID
MON$SERVER_PID サーバプロセス ID
MON$STATE 接続ステータス (0=アイドル / 1=アクティブ)
MON$ATTACHMENT_NAME 接続されているデータベース名
MON$USER 接続しているユーザ名
MON$ROLE 接続しているユーザのロール
MON$REMOTE_PROTOCOL 接続プロトコル
MON$REMOTE_ADDRESS 接続しているユーザの IP アドレス
MON$REMOTE_PID 接続クライアントのプロセス ID
MON$CHARACTER_SET_ID 接続キャラクタセット ID
MON$TIMESTAMP 接続開始時刻
MON$GARBAGE_COLLECTION ガベージコレクションフラグ
MON$REMOTE_PROCESS 接続クライアント (アプリケーション) 名
MON$STAT_ID 統計 ID

 接続しているクライアントの IP アドレスや、接続しているクライアント (アプリケーション) まで判るのは便利ですね。


12/05/19

RAD Studio XE2 Update 4 Hotfix for FireMonkey and C++
 リリースされました。「ブラーが!」の件や、StringGrid の描画がおかしい件等が修正されている模様です。今回のアップデートはアンインストールを伴いません。

 詳細については "Update 4 Hotfix 1 now available for Delphi, C++Builder and RAD Studio XE2" を参照して下さい。


12/05/21

日食
 朝という事と曇天だったというせいもあって、なんだかイマイチだった>熊本地方。

コンビネーション ~ SNP の無効化 ~
 Mr.XRAY 氏の掲示板の SNP に関する投稿を見て、「そういや、ふーさんもコレの記事を書いていたな」 と、思い出した。

 こういうのはスクリプトで処理するのが早い。Vista / 7 でも同一スクリプトで実行可能にするためには、 OS のバージョン判定を行わなくてはならない。OS のバージョンを返す EXE を一つ作れば簡単なのだが、ここは標準の機能だけでやってみる事にする。

 とりあえず、先人がスクリプトを書いていないかググってみる...あった。"Windowsのバージョン毎に処理を分岐させる [コマンドプロンプト] (Diary on wind)" にてスクリプトを入手。今回の目的のためだけなら systeminfo.exe による判別は不要だが、何かの時に使うこともあるかもしれない。若干アレンジした "OS バージョン毎に処理できるスクリプトのテンプレート" を作ってみた。

::==============================================================================
:: OS 判定
::==============================================================================
@ECHO OFF
CLS
SETLOCAL ENABLEEXTENSIONS

VER | FIND "NT" > NUL
IF %ERRORLEVEL% EQU 0 GOTO WinNT

VER | FIND "2000" > NUL
IF %ERRORLEVEL% EQU 0 GOTO Win2000

VER | FIND "XP" > NUL
IF %ERRORLEVEL% EQU 0 GOTO WinXP

IF NOT EXIST %SystemRoot%\System32\systeminfo.exe GOTO WinUnknown
FOR /F "tokens=2 delims=," %%a IN ('%SystemRoot%\System32\systeminfo.exe /FO CSV /NH') DO SET osvers=%%a

ECHO %osvers% | FIND "Windows Server 2003" > NUL
IF %ERRORLEVEL% EQU 0 GOTO Win2003

ECHO %osvers% | FIND "Windows Vista" > NUL
IF %ERRORLEVEL% EQU 0 GOTO WinVista

ECHO %osvers% | FIND "Windows Server 2008 R2" > NUL
IF %ERRORLEVEL% EQU 0 GOTO Win2008R2

ECHO %osvers% | FIND "Windows Server 2008" > NUL
IF %ERRORLEVEL% EQU 0 GOTO Win2008

ECHO %osvers% | FIND "Windows 7" > NUL
IF %ERRORLEVEL% EQU 0 GOTO Win7

ECHO %osvers% | FIND "Windows 8" > NUL
IF %ERRORLEVEL% EQU 0 GOTO Win8

GOTO WinUnknown

::==============================================================================
:: OS 毎の処理
::==============================================================================

::------------------------------------------------------------------------------
:: Windows NT
::------------------------------------------------------------------------------
:WinNT
ECHO [Windows NT] detected. 

GOTO EXIT

::------------------------------------------------------------------------------
:: Windows 2000
::------------------------------------------------------------------------------
:Win2000
ECHO [Windows 2000] detected. 

GOTO EXIT

::------------------------------------------------------------------------------
:: Windows XP
::------------------------------------------------------------------------------
:WinXP
ECHO [Windows XP] detected. 

GOTO EXIT

::------------------------------------------------------------------------------
:: Windows Server 2003
::------------------------------------------------------------------------------
:Win2003
ECHO [Windows Server 2003] detected. 

GOTO EXIT

::------------------------------------------------------------------------------
:: Windows Vista
::------------------------------------------------------------------------------
:WinVista
ECHO [Windows Vista] detected. 

GOTO EXIT

::------------------------------------------------------------------------------
:: Windows Server 2008
::------------------------------------------------------------------------------
:Win2008
ECHO [Windows Server 2008] detected. 

GOTO EXIT

::------------------------------------------------------------------------------
:: Windows Server 2008 R2
::------------------------------------------------------------------------------
:Win2008R2
ECHO [Windows Server 2008 R2] detected. 

GOTO EXIT

::------------------------------------------------------------------------------
:: Windows 7
::------------------------------------------------------------------------------
:Win7
ECHO [Windows 7] detected. 

GOTO EXIT

::------------------------------------------------------------------------------
:: Windows 8
::------------------------------------------------------------------------------
:Win8
ECHO [Windows 8] detected. 

GOTO EXIT

::------------------------------------------------------------------------------
:: Unknown Windows
::------------------------------------------------------------------------------
:WinUnknown
ECHO [Unknown Windows] detected. 

GOTO EXIT


::==============================================================================
:: 終了
::==============================================================================

:EXIT
PAUSE

 さて、このテンプレートを元にした SNP 無効化のスクリプトを書いてみる。

::==============================================================================
:: OS 判定
::==============================================================================
@ECHO OFF
cls
SETLOCAL ENABLEEXTENSIONS

VER | FIND "NT" > NUL
IF %ERRORLEVEL% EQU 0 GOTO WinNT

VER | FIND "2000" > NUL
IF %ERRORLEVEL% EQU 0 GOTO Win2000

VER | FIND "XP" > NUL
IF %ERRORLEVEL% EQU 0 GOTO WinXP

IF NOT EXIST %SystemRoot%\System32\systeminfo.exe GOTO WinUnknown
FOR /F "tokens=2 delims=," %%a IN ('%SystemRoot%\System32\systeminfo.exe /FO CSV /NH') DO SET osvers=%%a

ECHO %osvers% | FIND "Windows Server 2003" > NUL
IF %ERRORLEVEL% EQU 0 GOTO Win2003

ECHO %osvers% | FIND "Windows Vista" > NUL
IF %ERRORLEVEL% EQU 0 GOTO WinVista

ECHO %osvers% | FIND "Windows Server 2008 R2" > NUL
IF %ERRORLEVEL% EQU 0 GOTO Win2008R2

ECHO %osvers% | FIND "Windows Server 2008" > NUL
IF %ERRORLEVEL% EQU 0 GOTO Win2008

ECHO %osvers% | FIND "Windows 7" > NUL
IF %ERRORLEVEL% EQU 0 GOTO Win7

ECHO %osvers% | FIND "Windows 8" > NUL
IF %ERRORLEVEL% EQU 0 GOTO Win8

GOTO WinUnknown

::==============================================================================
:: OS 毎の処理
::==============================================================================

::------------------------------------------------------------------------------
:: Windows NT / 2000 / XP / Server 2003 / その他
::------------------------------------------------------------------------------
:WinNT
:Win2000
:WinXP
:Win2003
:WinUnknown
GOTO EXIT

::------------------------------------------------------------------------------
:: Windows Vista / Server 2008
::------------------------------------------------------------------------------
:WinVista
:Win2008

netsh int tcp set global rss=disabled
netsh int tcp set global chimney=disabled
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableTCPA /t REG_DWORD /d "0" /f
netsh int tcp show global
ECHO 変更を有効にするには Windows の再起動が必要です。

GOTO EXIT

::------------------------------------------------------------------------------
:: Windows 7 / 8 / Server 2008 R2
::------------------------------------------------------------------------------
:Win7
:Win8
:Win2008R2

netsh int tcp set global rss=disabled
netsh int tcp set global chimney=disabled
netsh int tcp set global netdma=disabled
netsh int tcp show global

GOTO EXIT


::==============================================================================
:: 終了
::==============================================================================

:EXIT
PAUSE

 間違って対象ではない OS で実行しても大丈夫だし、Vista と 7 では実行される処理も異なる。元ネタは "[Windows 7編]ネットワーク設定を標準で使ってはいけない (ITpro)" でした。

Infoseek
 さて、本日を持って Infoseek のページが大量に死んだ (死ぬ) 訳だが。

Firebird サーバに接続されている PC の一覧を得る
 Firebird サーバが稼動しているマシンで、自分に接続に来ているクライアントを確認する方法です。

 5/16 の雑談で書いた "モニタリングテーブルを参照する方法"Firebird 2.1 以降でないと使えませんが、こちらは Firebird 2.0.x 等でも使えます。加えて言うならば Interbase でも使える方法です。


 BACK   古いのを読む   新しいのを読む