ざつだ ん。 (12/05/01~)
12/05/02
・
3G & GPS Sierra Wireless 3G Card (MC8781)
触る暇がなく放置中だった奴を。
JustSlate.com からPayPal 経由で購入。発送まで二週間、到着まで10日ってトコでした。
郵便受けに、この袋で投げ込まれていたのでちょっとビックリ。袋の中がプチプチになっているとは言え...。
内容物はこんな感じ。MC8781 とアンテナが二本です。
MC8781 を固定するネジは付いていませんので、会社のネジ入れから適当なものを持ってきました。暫定的でよければ、TW317A5 のシールドを止めているネジが使えます。
とりあえずこんな感じで組み込んでみました。
TW317A5 の電源を入れ、認識しているトコまでは確認しました。ただ、僕個人はスマホを持っていないのでデータ通信カード (SIM) がありません。
ちゃんと触ったわけではありませんが、とりあえずの感想 (?) を。
- モデムとして認識し、3G も GPS も COM として表示されます。
- どうやら、Windows 7 のロケーション API には対応してないようです。
- データ通信可能な SIM カードが存在しないと、"3G Watcher" により、MC8781 は無効化されてしまう?
- データ通信可能な SIM カードなしで "GPS だけ使いたい" というのは無理なの?もしかして A-GPS なの?この動画では SIM 未挿入で動いているけど?
- A-GPS ではないけど、ソフトウェアの制限で SIM 入れてないと (SIM 入れて接続確認できなければ) GPS 使えないとかかな?
- ...そうなるとアンロックするしかないような (JustSlate.com の MC8781 はアンロックされていません)。
いきなり思惑が外れた感がありますが、もう少し調べてみたいと思います。JustSlates.com の FAQ は事前に読んでるんですけどね...。
・
ONKYO TW317A5 コーナー
てな訳で、ONKYO TW317A5 コーナー の記事を更新してあります。
・
続・3G & GPS Sierra Wireless 3G Card (MC8781)
やっぱりスタンドアロンで使えるようです。詳細はこちらで。
12/05/07
・
バリうま。
お客さんから貰ったお魚を料理しました。貴重な蛋白質...略して "キチョタン" です (w
貰ったのはアイゴというお魚です。ヒレにトゲがあり、ことごとくどれにも毒があります。
包丁は使わず、キッチンバサミで処理します。
- 胸ビレを落とす
- 尾ビレを落とす
- 背中のヒレを身ごと切り取る。
- 腹ビレを身ごと切り取る。
- 頭を落とす
- ワタを出して流水ですすぐ。
こんな感じです。
頭や切り取ったヒレ、ワタ等は鍋で煮て捨てます。生魚臭さを取るためでもありますが、生のまま捨てるとゴミ出しの日にビニール袋を突き破ったトゲでやられかねないからです。毒は蛋白質なので、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 電波 -> 既存のアナログ TV で視聴可能となる。内部配線不要。
- 小さいので場所を取らない
- 配線は簡単だけれど...
- 映りは普通
...とはいえ、ちょっとした問題点も。
- VHF チャンネルは一つしか使わないので、チャンネル切り替えに付属のリモコン必須。
- エンジンノイズを拾いやすい (アクセサリだけだったらノイズは入らない)
- パーキングブレーキに連動させないと、初期設定できない。
- てか、パーキングブレーキに配線しなくちゃいけないのなら、配線が簡単とは言えないのでは?
ワンセグをマルチチャンネルで 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 に興味がある方が今回の優待アップグレードを賢く使う方法はと言うと、
- C++Builder 発売15周年記念キャンペーン で、C++Builder XE2 を \50,000 で入手
- 15,000円 で Delphi / C++Builder XE2 か らRAD Studio XE2 へアップグレード! を \15,000 で入手
- 「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 を投げます。得られる情報は以下の通りです。
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 の描画がおかしい件等が修正されている模様です。今回のアップデートはアンインストールを伴いません。
このホットフィックスにより以下のバグが修正されます。
- 25777/QC 103933
TGrid および TStringGrid の直接編集エディタが最初の列でしか開かないという問題が修正されます。
- 25786/QC 103786
GDI+ で FireMonkey のフォントのテキスト レンダリングがぼやけるという問題が修正されます。
このホットフィックスでは、GDI+ で ClearType レンダリングを使用するための次のグローバル変数が追加されています。
このグローバル変数のデフォルト値は False です。
GlobalUseGDIPlusClearType: Boolean = False;
FMX.Types へのこのグローバル変数の追加はインターフェイスの変更に当たるため、FireMonkey パッケージのバージョンが 163 に上がりました。
- 25255/QC 102941
FireMonkey の AnimateFloat のスタック オーバーフロー エラーが修正されます。
- 25844
FireMonkey の描画に関するパフォーマンスの問題が修正されます。
- 26078
FireMonkey 3D フォームを保存するたびに *.fmx ファイルのサイズが増大するという問題が修正されます。
- 25656/QC 103873
パッケージを作成したときに 403 個の余分な項目がエクスポートされるという問題が修正されます(C++)。
- 26664/QC 104210
ユーザーがロックを解除した後に FireMonkey HD フォームが反応しなくなる問題が修正されます。
- 27453/QC 104945、27479、26827/QC 104116
TSocketconnection を使っている TClientDataSet.close のエラーが修正されます。
TClientDataSet が TSocketConnection 経由で Midas サーバーに接続できない問題が修正されます。
null 文字列を OLE プロパティに代入したときのエラーが修正されます。
- 26670/QC 104073
TControl3D のアクセス違反が修正されます。
- 27216
ユーザーが iOS アプリケーションを App Store に提出できるようになります。
- 25942
[実行|プロセスにアタッチ...] が修正されます。
|
詳細については "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 サーバが稼動しているマシンで、自分に接続に来ているクライアントを確認する方法です。
- Linux の場合
netstat -tanp | grep fbserver
|
または
netstat -tanp | grep 3050
|
- Windows の場合
netstat -t -a -n -p TCP -b | find /I "3050"
|
5/16 の雑談で書いた "モニタリングテーブルを参照する方法" は Firebird 2.1 以降でないと使えませんが、こちらは Firebird 2.0.x 等でも使えます。加えて言うならば Interbase でも使える方法です。