(2013/07/01~)
2013/07/01

TurboPower プロジェクト

現状を調べてみました。

Abbrevia と Orpheus は活発なようですね。

FileMaker 8 Server / Pro

HDD がフッ飛んだ PC の FileMaker 8 環境をどうにかしてくれというお話。

FileMaker 8 Server は XP Professional または Windows Server 2003 にしかインストールできない。とりあえず XP はどうにかなったものの、普通に XP へ FileMaker 8 Server を入れても正しく動作しない (インストールはできるが管理ツールで接続できない。サービスを起動してもすぐに終了してしまう)。解決方法はと言うと、日付を 2008/09/22 以前にした上で FileMaker 8 Server をインストールすればいいようだ。

そして今度はクライアントの方の FileMaker 8 Pro が FileMaker 8 Server に接続できないときたもんだ。どうすればいいかと言うと、こちらも日付を 2008/09/22 以前にした上で FileMaker 8 Pro をインストールすればいいようだ。これの制限は証明書の期限に係る問題のようで、FileMaker のナレッジベースにも記述がある。FileMaker 9 には問題解決用のパッチが提供されているのだけれど、残念ながら Filemaker 7 / 8 には提供されていない。

...何このデートクラック的な解決方法は。

 See Also:


2013/07/02

Canon MG6130

貰い物。このプリンタは巷の評判通り、電源投入から印刷可能になるまでの時間がもの凄く長い。複合機並み...あるいはそれ以上。加えて、ウォームアップ時にノズル掃除を行うのか、やたらとインクの減りが早い...まぁ、インクカートリッジの容量が少ないのも一因ではあるのだろうけれど。

電源入れっぱなしで使えばさほど問題はないのだけれど、電気代やらなにやらを考えると 「それはどうなんだろう?」 と思ってしまう...家庭用には全く向いていないな。むしろ、会社でガンガン使うならアリかもしれない。けれど、純正インクカートリッジ (BCI-326+325/6MP)がアホらしい程高い (6色で5,000円弱) ので、BCI-326+325/6MP 互換インクを使って使い潰す気で扱った方がいいと思う (6色で500円程度)。ガンガン使うのなら、インク詰まりの可能性もあまりないと思われるので。

純正インクカートリッジ には IC チップが付いているので詰め替えはオススメしない。リセッターが付いていたとしても、IC チップ付きの互換インクの方がお手軽でいいように思う。断っておくけれど、互換インクを薦めているのは MG6130 の (主にインクの) コストパフォーマンスがあまりにも悪いからであって、コスパがそれ程悪くない機種や、家庭用で使う場合...特に印刷頻度が低い場合には高くても純正インクカートリッジをお勧めする。

MG6130 をイロイロ触ってみて、「まだ使えるのに何でくれるんだろ?」 という疑問が一気に氷解した (w

互換インク

コスパを考えずに純正インクを買えるのなら、もちろんそうした方がいいのは当たり前。互換インクで本体を壊す事があるのも承知しているし、全く普通に使える事があるのも承知している。

純正インクとあまりにも特性のかけ離れた互換インク (を使ったカートリッジ) は詰まりやすいのだけれども、粗悪インクかどうかは実際に試してみない事には判らない。それと、上にも書いたけれど、印刷頻度が少ない場合もインク詰まりを起こしやすい...純正ですらクリーニングを行わなくてはならない場合があるのだし。

Amazon とかのレビューでは、"互換インクを Amazon で購入してもいないのに低評価を付けている" ヒトが居るので、互換インクを使いたいのなら評価がバラけている場合にはレビューを注意深く読んだ方がいいように思う。注意を付け加えておくならば、互換インクは同じ商品ページにあってもショップによって売っているものが違ったりするので、当たりを引いたのならそのショップの直販サイトがあるのかを確認し、以後はショップ指定で購入した方がいいかもしれない。


2013/07/04

Excel が対応しているファイルフォーマット

Delphi 等からタイプライブラリの取り込みを行うと、"xlほにゃらら" という利用可能なファイルフォーマットが得られます。

例えば Excel 2010 (Excel 14.0) のタイプライブラリを取り込むと以下のような定数が得られます。Delphi 付属の Excel2000.pas や ExcelXP.pas の記述よりも種類が多いのが判ると思います。

定数 説明 拡張子
xlAddIn 18Microsoft Excel 97-2003 アドイン.xls
xlAddIn8 18Microsoft Excel 97-2003 アドイン.xls
xlCSV 6CSV.csv
xlCSVMac 22Macintosh CSV.csv
xlCSVMSDOS 24MS-DOS CSV.csv
xlCSVWindows 23Windows CSV.csv
xlCurrentPlatformText -4158現在のプラットフォームのテキスト (TSV).txt / .tsv
xlDBF2 7DBF2 (dBASE II).dbf
xlDBF3 8DBF3 (dBASE III).dbf
xlDBF4 11DBF4 (dBASE IV).dbf
xlDIF 9DIF (Data Interchange Format: VisiCalc).dif
xlExcel12 50Excel12 (Excel 2007 バイナリブック).xlsb
xlExcel2 16Excel2.xls
xlExcel2FarEast 27Excel2 FarEast.xls
xlExcel3 29Excel3.xls
xlExcel4 33Excel4.xls
xlExcel4Workbook 35Excel4 ブック.xlw
xlExcel5 39Excel5.xls
xlExcel7 39Excel7 (Excel 95).xls
xlExcel8 56Excel8 (Excel 97).xls
xlExcel9795 43Excel9795 (Excel 95 / 97).xls
xlHtml 44HTML 形式.htm
xlIntlAddIn 26International Add-In.xla
xlIntlMacro 25International Macro.xlm
xlOpenDocumentSpreadsheet 60OpenDocument スプレッドシートを開く.ods
xlOpenXMLAddIn 55XML アドインを開く.ods
xlOpenXMLTemplate 54XML テンプレートを開く.xltx
xlOpenXMLTemplateMacroEnabled53マクロを有効にした XML テンプレートを開く.xltm
xlOpenXMLWorkbook 51XML ブックを開く.xlsx
xlOpenXMLWorkbookMacroEnabled52マクロを有効にした XML ブックを開く.xlsm
xlSYLK 2SYLK (Symbolic Link: Microsoft Multiplan).slk
xlTemplate 17テンプレート.xlt
xlTemplate8 17テンプレート 8.xlt
xlTextMac 19Macintosh テキスト.txt
xlTextMSDOS 21MS-DOS テキスト.txt
xlTextPrinter 36プリンター テキスト.prn
xlTextWindows 20Windows テキスト.txt
xlUnicodeText 42Unicode テキスト.txt
xlWebArchive 45Web アーカイブ.mht
xlWJ2WD1 14WJ2WD1 (Lotus 1-2-3 R2.1J / 2.2J / 2.3J).wj2 + .wd1
xlWJ3 40WJ3 (Lotus 1-2-3 R2.4J / 2.5J).wj3
xlWJ3FJ3 41WJ3FJ3 (Lotus 1-2-3 R2.4J / 2.5J).wj3 + .fj3
xlWK1 5WK1 (Lotus 2.x).wk1
xlWK1ALL 31WK1ALL (Lotus 2.x .all).wk1 + .all
xlWK1FMT 30WK1FMT (Lotus 2.x .fmt).wk1 + .fmt
xlWK3 15WK3 (Lotus 3.x).wk3
xlWK3FM3 32WK3FM3 (Lotus 3.x / Lotus 1-2-3 Windows).wk3 + .fm3
xlWK4 38WK4 (Lotus 4.0 / Lotus 1-2-3 R5J).wk4
xlWKS 4ワークシート (Microsoft Works for MS-DOS).wks
xlWorkbookDefault 51ブックの既定.xlsx / .xls
xlWorkbookNormal -4143ブックの標準.xls
xlWorks2FarEast 28Microsoft Works Version 2.0 for Windows FarEas.wks
xlWQ1 34WQ1 (Quattro Pro for MS-DOS).wq1
xlXMLSpreadsheet 46XML スプレッドシート.xml

Worksheet.SaveAs() メソッドでこれらを指定できますが、保存できない形式もあるので注意が必要です。Delphi から Excel を操作する方法は、Mr.XRAY さんのサイトの以下の記事が参考になると思います。

 See Also:

...この話はここで終わりではないのです。

タイプライブラリの取り込みによってファイルフォーマットの定数を得られましたが、実は上に列挙した以外の定数も使えます

定数 説明 拡張子
xlPDF 57Adobe Portable Document Format (PDF).pdf
xlXPS 58XML Paper Specification (XPS).xps

上記定数を使えば、Worksheet.ExportAsFixedFormat() メソッドを使わなくとも、Worksheet.SaveAs() メソッドで PDF を吐く事ができます (Excel 2010 で確認)。

 See Also:

Excel のバージョン

Excel を Delphi から操作する場合、Excel のバージョンを調べて処理を分岐させたい事があります。Application.Version で調べられるのですが、バージョンの値は以下のようになっています。

Excel バージョン
Excel 957
Excel 978
Excel 20009
Excel 2002 (XP)10
Excel 200311
Excel 200712
Excel 201014
Excel 201315

Delphi もですが、アメリカでは "13" という番号が忌避されているようですね (Delphi 2009 が 12.0 で Delphi 2010 は 14.0)。でも、2013 はいいんだ...変なの。


2013/07/05

OpenDialog / SaveDialog の呪い

Delphi 2007 でメンテしている少々古いアプリケーションに追加機能の要望があったので実装したのだけれど、当方の環境で実行すると正しく動作するのに、先方の環境だと動作しなかった。

デバッグ用に ShowMessage() を仕込んでどこで止まっているのかを調べたのだけれど、新しく追加した機能では止まっていなかった...正確にはそこに入る前でアドレス違反でコケていた。「はぁ?アドレス違反?Create していないオブジェクトでも触ってるのか?」 と一瞬思ったけれど、当方の環境で正常動作する以上それはない。よくよく調べてみたら、SaveDialog.Execute() を抜けた時点でアドレス違反になった。

...あぁ、そうかアレか。

という事で、呪いを回避するためのオマジナイである "UseLatestCommonDialogs := False;" を記述したら正常動作した。最初は SaveDialog.Execute() の直上に以下のようなコードを書いたのだけれど、効果はなかった。

if DebugHook <> 0 then
  UseLatestCommonDialogs := False;

つまり、今回の件は何らかの外部デバッガのせいではないという事だ。それが判ったので、追加した機能の直上で記述せず *.dpr に記述してアプリ全体に効くようにした...一つで出るなら他の箇所でも出る可能性が高いからだ。ちなみに、デバッグビルドでもリリースビルドでも (デバッグ版 DCU の使用の有無に関係なく) アドレス違反が起きた。

DebugHook を判定して UseLatestCommonDialogs を False にする場合には *.dpr に書くのではなく、個々の OpenDialog / SaveDialog の Execute の直上に個々に書くようにした方がいい。何故なら、外部デバッガでフックされるのは外部デバッガからアプリケーションが呼び出された場合とは限らないからだ。アプリケーション起動後にアタッチされた場合には効果がない。どのタイミングでデバッガにアタッチされるかアプリケーションからは知る由もない (アタッチされた時に発生するウィンドウメッセージってありましたっけ?) のだから、面倒でもやはり個々に記述するしかない。

それと、"デバッガにフックされていない場合には OS 標準のダイアログを出したい" のであれば、

UseLatestCommonDialogs := (DebugHook = 0);

こちらの記述の方がいいように思う。一連の問題の件は OpenDialog / SaveDialog の Option プロパティの ofOldStyleDialog を True にしても同じ効果が得られるとは思うが、記述が少々メンドイ事になる。

UseLatestCommonDialogs

何故 UseLatestCommonDialogs を記述すると正常動作するようになるのかはよくわからない。前にも書いたけれど、この件ではいくつもの QC が挙がっている。例えばコレ。

現象としては、

...等々あるのだけれど、確実に再現させる方法がない。AV が発生する環境では発生するし、発生しない環境では発生しない。発生する環境でも 100% 発生する訳ではなく、ランダムにクラッシュする。対処療法として UseLatestCommonDialogs を False にするというのが知られているだけだったりする。デバッグ実行でのみこの現象が発生する場合には IDE を巻き込んで落ちるので原因の特定は困難。こればかりは SysOp が Need Feedback にしてしまうのも仕方ない気がする...だって確実な再現方法がないんだもの。

今現在ググル先生に尋ねてみると、他の開発環境でも問題は出るようだが、2009~2010 年時点では殆ど情報がなかった事だけは覚えている。


2013/07/06

Delphi Launcher 3.00

 [DownLoad]

特に問題も見当たらないようなので 3.00 として公開。

GCT.EXE

 [DownLoad: gct_100.zip]

コードテンプレート 7 種を所定の位置に生成するアプリケーションです (ガリレオ IDE 用。ソースコード付き)。Delphi IDE 起動前に実行して使います。詳細は readme.txt を読んでください。

私の認識が間違っていなければ、コードテンプレートには日付等を自動で入れる事はできなかったと思います。例えばコメントで

{ 2013/07/06 ADD DEKO begin }

...

{ 2013/07/06 ADD DEKO end }

このような記述はできないと思います (日付部分をジャンプポイントにして手入力するなら話は別ですが...)。GCT.EXE は特定の文字列を置換した後、所定の位置へコードテンプレートを生成します。

GCT.EXE で生成されるコードテンプレートは [コードエディタ右クリック | 囲む] で使えるものが 4 種、Ctrl+J で使えるものが 3 種含まれています。以下のようなコードが吐かれます。

[ubcadd (template_ubcadd.xml)]
{ 2013/07/06 ADD DEKO begin }
<選択されたソースコード>
{ 2013/07/06 ADD DEKO end }

[ubcmod (template_ubcmod.xml)]
{ 2013/07/06 MOD DEKO begin }
{
<選択されたソースコード>
}{ 2013/07/06 MOD DEKO end }

[ubcdel (template_ubcdel.xml)]
{ 2013/07/06 DEL DEKO begin }
{
<選択されたソースコード>
}
{ 2013/07/06 DEL DEKO end }

[ucadd (template_ucadd.xml)]
// 2013/07/06 ADD DEKO

[ucmod (template_ucmod.xml)]
// 2013/07/06 MOD DEKO

[ucdel (template_ucdel.xml)]
// 2013/07/06 DEL DEKO

[ucdels (template_ucdels.xml)]
// <選択されたソースコード> // 2013/07/06 DEL DEKO

日付は勝手に入ります。作成者は GCT.EXE に引数を渡す事で指定できます。作成者の指定は任意です。

つまり、GCT.EXE は "都度変更されるコードテンプレートを生成するためのプログラム" という事になります。一度作ったら変更しなくていいようなコードテンプレートはそのまま所定のフォルダに置いておけばいいので、GCT.EXE の出る幕はありません。

「書式が気に食わない」 とか 「他にも追加したい」 という事であれば自由に改変してください...とても短いソースコードなので、改変は簡単だと思います (コードが汚いのはご容赦ください)。GCT.EXE を Delphi Launcher のプリプロセッサに仕込んでおくと、「事前に実行しそこねたーーー」 という事もないので便利です (コードテンプレートが IDE に認識されているのであれば、IDE 起動中に実行してもちゃんと差し替えられますけどね)。

何か面白いコードテンプレートができたら、フォーラムに投稿してくださいねー。

 See Also:

(ユーザ) コードテンプレートの保存先

デフォルトで C:\Users\<USER>\Documents\RAD Studio\code_templates (C:\Documents and Settings\<USER>\My Documents\RAD Studio\code_templates) になります。この保存先はガリレオ IDE 共通なので、コードテンプレートを Delphi 2007 で作っても XE4 で使えます。

CSIDL は CSIDL_PERSONAL / CSIDL_MYDOCUMENTS、Known Folder ID だと FOLDERID_Documents 以下の \RAD Studio\code_templates となります。


2013/07/13

Windows 8.1ではマニフェストのsupportedOSにWindows 8.1に対応する項目を追加しておかないとGetVersion(Ex)が正しい結果を返さなくなるらしい

ふーさんのツイートを見て、忘れないうちに更新しようと思い立つ。

こういうのって後でやろうとすると忘れちゃいますからね。フォーラムにも追記しました。

R ボタン (L ボタン) が効かなくなった Nintendo 3DS を修理する

http://togetter.com/li/365728

先人の知恵に倣って、上の子の 3DS を修理してみました。3DS の分解には #0 の精密ドライバー(+) が必要ですが、ダイソーの 5、6 本組の精密ドライバーセットの中に入っています。修理方法を簡単にまとめると、

  1. 裏面のカバーのネジを 4 本外す (カバーにくっついているので完全には外れない)
  2. 裏面のカバーを外し、バッテリーを外す
  3. 黒いネジ 10 本と、カートリッジ挿入口にある銀色のネジ 1 本を外す (バッテリーを抜いた場所にある銀色のネジを外す必要はない)
  4. ケースをゆっくり 90°開く (ヒンジ側から開けてはいけない)
  5. R ボタンと L ボタンから伸びているフレキシブルケーブルの先のコネクタを抜く
  6. (以下 R ボタンの修理方法) 外れたケースのシールドを外す (ネジ 3 本)
  7. R ボタンの基板を押さえている黒いプラスチックパーツを外す (ネジ 1 本)
  8. スイッチを洗浄する (スイッチを分解する必要はない)
  9. 元通りに組み上げる

これだけなのですが、問題はどうやって洗浄するかです。コンタクトスプレー (接点復活剤) は持ってないし、わざわざ買いに行くのもアレですし。要は、スイッチ内部に油膜のような汚れがある状態なのだと思うのです。これを洗い流してやればいい、と。水は論外として、自宅にある使えそうなものと言えば...

冬に活躍する霜取りスプレーがありました。この霜取りスプレーの成分はアルコールと炭酸ガスなので汚れを落とすだけならこれでいいでしょう (成分表はよく確認してくださいね)。炭酸ガスのスプレーなのでスイッチ内部まで浸透し、かつエアダスターのような吹き飛ばし効果もありそうです。

あらゆる方向からスプレーしてスイッチをカチカチ&グニグニする事を数回繰り返し、乾燥した事を確認して組み上げ、電源 ON...直りました。ただ、アルコールによる洗浄だと脱脂してしまうので、コンタクトスプレーでの洗浄の方がいいような気はします...下の子の 3DS もそのうち同じような事になるかもしれないので、今度コンタクトスプレーを買っておこう。

ついでにこの霜取りスプレーを使って3DS をキレイに拭いてあげました。メガネ拭きにスプレーしてそれでゴシゴシ (3DS に直接スプレーしちゃダメですよ)...アイツラ、お菓子食べた手で 3DS 触るから画面は汚いし、なんだか油っぽかったし (w


2013/07/30

ライフハック (その1)

マットな質感のマウスってあるじゃないですか?あれって経年劣化しやすくて、劣化するとベタベタしてくる事が多いんですよね。

塗装が剥げてきてベタベタし出すと 「全部塗装剥がしたい!」と思うのですが、中性洗剤でも界面活性剤でも落ちません。これを剥がすにはアルコールを使います。上で書いた霜取りスプレーでも落ちます。お悩みの方はお試しあれ。

ノートパソコンの "インテル入ってるシール" のフチにホコリが付いて困った経験はありませんか?セロハンテープやシールの跡とかもアルコールで取れます...逆に言えば、ゴムとか両面テープのような接着剤が使われている所にアルコールを使ってはいけないという事ですね。

ライフハック (その2)

白いプラスチックって黄色く変色するじゃないですか?アレを白くする Retr0Brite って手法があるんですけど、夏の紫外線がお肌の大敵な季節になったのでちょっとやってみました。

 紫外線が多い季節なので Retr0bright をやってみた (togetter)

PC-9801 VM / VX が思ったより白くならない?いえいえ、それって元からそういう色ですから。


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