・
嘘をつくな
お客さんとの話で一番困るのは嘘をつかれる事。正直に言ってもらえれば怒ったりもしないのに、嘘をつくから要らぬトコに飛び火したり問題解決が遅くなる。こっちは嘘の情報を元に情報収集とかしちゃうから (もちろん無駄な努力をしてる訳よね) 手間も掛かる。
客:「管理用 PC のネットワークがつながりません」
俺:「あ、それは複合機屋さんが管理用に入れた奴ですからウチが下手に触る訳にはいかないんですよ」
客:「でもネットワークのせいだと思うんですよ、インターネット繋がらないし、DocuWorks 動かないし」
俺:「他の PC ではどうなんです?」
客:「インターネットできます。メールもとれます。でも DocuWorks...」
俺:「いあいあ、DocuWorks はその管理用 PC がホストになってて、他の PC はそれを見にいってるだけじゃないですか」
客:「ネットワークのせいだと思うんですけど...」
俺:「だーかーらー、管理用 PC のネットワーク機能が働いてないんでしょ?そしたら、その PC の不具合じゃないですか、他の PC はインターネットとかに繋がるんだし」
客:「複合機屋さんに電話したら、ネットワークがおかしいから、ルータやハブをリセットしてくれと言われました」
俺:「(゚Д゚)ハァ? 意味ないっしょ、他の PC はネットワーク正常なんだから」
客:「とにかく困るんです...昨日までは普通に動いていたのに...」
俺:「どう考えても管理用 PC がおかしいでしょ?昨日まで正常だったと言うのなら。複合機屋さんは来ないの?セットで売っておいて」
客:「はぁ...ネットワークの問題が解消しない事にはどうにもならないと。故障診断でも複合機に問題はないから、と」
俺:「そういう問題じゃないと思うんですがね。おかしくないですか、その複合機屋さんの対応は。管理用 PC だけがおかしいのなら、複合機屋さんを呼ぶべきでは?」
埒があかないので行ってみたら、ハブとルータを繋ぐ LAN ケーブルが抜けてたというオチ。「すいません、掃除して移動したんです。その時ですかね...」掃除してその後に動かなくなったんだったらそう言えと。そもそもネットワーク全滅じゃねーか。LAN ケーブル抜いたのなら抜いたとそう言えと。他の PC ではメール取れるんじゃなかったのかよ。
多分、複合機屋さんには正直に「ネットワーク全滅してる」と言ったのでしょうな。だから当然複合機屋さんは来ないし、「ルータやハブをリセットしてくれ」発言の筋も通る。そして頑なにネットワークの問題だと決めつけた物の言い方をする理由もわかる...そりゃそうだ、身に覚えがあるんだから。自分が間違ってたのなら素直に "ゴメンナサイ" すればいいのだ。それができないヒトが最近多いように思う。
直接会ったり、電話して怒鳴ったりした訳じゃないけど、あらぬ嫌疑をかけちゃってゴメンナサイね、某複合機屋さん。キミんトコの DocuWorks はいい製品だよね。
・
何もしていない
お客さんとの話でよく出てくる言葉。
客:「外部から社内に繋げなくなった。困るのでどうにかしてくれ」
(ポートに穴開けてあります)
俺:「インターネットとかは OK なんですか?」
客:「インターネットは繋がる」
俺:「何か PC にソフトを入れたとか、ネットワークに繋がる新しいハードを追加したとかありませんか?」
客:「ない。いきなり昨日からおかしくなった」
俺:「インターネットできるって事はルータとかは問題ないって事ですよねぇ?」
客:「お宅に LAN 環境整備やってもらったんだから、どうにかしろ」
埒があかないので行ってみたら、どこぞの会社を呼んでルータを取り替えていたというオチ。曰く「インターネットが遅かったからルータを変えた」そうな。いあいあ、替えるなら替えると事前に言え。つーか、NAT の設定がしてある事位は業者に伝えろ。それができないのなら交換前にこっちに電話一本寄こせ。
・
何もしていない Part II
これまた。
客:「お宅のシステム (ソフトウェア) が動かん、どうにかせれ」
俺:「えっと、エラーはどんなのが?」
客:「"サーバに接続できません" らしい」
俺:「インターネットとかは OK なんですか?」
客:「インターネットは繋がる」
俺:「サーバの共有フォルダは見れますか?」
客:「見れる」
俺:「何か PC にソフトを入れたとか、ネットワークに繋がる新しいハードを追加したとかありませんか?」
客:「ない。いきなり昨日からおかしくなった」
埒があかないので行ってみたら、どこぞの会社を呼んで複合機を入れ替えていたというオチ。複合機屋さん (Docuworks じゃない別のトコ) がデスクトップ PC に何故か "無線 LAN 接続ツール" をインストールしていて (デスクトップで有線なのに?)、そのツールがスタートアップで 192.168.0.50 に IP を設定していた。ちなみにこの IP はその複合機の IP アドレスでもある...IP アドレス重複すりゃそうなるわな。インターネットにも繋がらないし、共有フォルダも見れないじゃないスか、お客さん。
・
筋を通せ!
"適当な嘘をついてその場を切り抜けられる" のは "日曜日よりの使者" 位のもんだろう...嘘はやっぱりどこかで辻褄が合わなくなるのだから。
・
東アジアの文字幅
Ambiguous 属性を持つ文字は東アジアでは全角扱いにすればいい事は以前どこかで書いたけれど、それ以上に扱いに困るのは Neutral 属性の文字。これらは基本的に固定ピッチで扱えない文字なのだ。
固定ピッチで扱えないのだから、単純な話 Neutral 属性の文字は無視すればいいのだけれど、そうもいかない事もある。だからといって、Ambiguous 属性同様に東アジアでは全角扱いにすればいいかといえばそうでもない。例えば "Tiburón" という文字列だが、エディタによってはアキュート付きの o だけが FULL_WIDTH で描画される事がある。これはあまりに見苦しい。
要はこういう事なのだ。以前の東アジアの文字コードに含まれていたアルファベット以外のラテン文字は Ambiguous 属性で (文字幅=エレメント数が前提だから)、含まれていなかった ダイアクリティカルマーク 付き文字等は Neutral 属性が割り当てられている。 だから、キリル文字 / ロシア語 / ギリシャ語 を "MS ゴシック" で表示しようとすると FULL_WIDTH、"Tahoma" で表示させると HALF_WIDTH となり、ダイアクリティカルマーク 付き文字も HALF_WIDTH だったり FULL_WIDTH だったりする、と (フォントリンクされるから)。
ダイアクリティカルマーク 付き文字のうちの幾つかは "結合文字列のみでしか表現できない" ものもあり、そのような文字列はコードエディタのような固定ピッチのエディタでは無視してもいいと思うが、少なくとも結合文字列でない文字は普通にアルファベットと同じ幅で表示したいと思うのが正直な所だろうと思う。
困るのはフォントでの文字幅の扱い。"MS ゴシック" を使うとギリシア文字とかだけ FULL_WIDTH になっちゃうのは Ambiguous 属性 になってるからだけど、何故か σ (シグマ) の異体字である ς なんかは Neutral 属性だったりする。もうね、どうしろと。こうなってくると、Fullwidth / Wide 属性じゃない文字以外は "マージンを取った HALF_WIDTH で描画するしかない" と思われる。東アジアの言語だけ考慮 (+ Neutral 属性文字は無視) すればいいのであれば、Ambiguous 属性を FULL_WIDTH で描画すればいい、と。
・
TEditor 2.52 for "Unicode 版 Delphi"
...てな訳で、ダイアクリティカルマーク 付き文字対応版。とはいえ、フォントの問題は依然として残ったままなので、各自用途に応じて修正されたし。
何を修正したのかというと、フォントリンクされた Neutral 属性の文字の位置/幅がズレてしまう問題。ついでに、BMP 領域外の FULL_WIDTH 文字の同様の問題。例えば、"Tahoma" を使うと、ダイアクリティカルマーク 付き文字や BMP 領域外の FULL_WIDTH 文字の一部はフォントリンクされてしまうので、描画位置がズレてしまう (別のフォントなのに、描画計算は "Tahoma" ベースで行われてしまうから)。
なお、固定ピッチで FULL_WIDTH 文字がキレイに描画される (BMP 以外も含めて) のは "IPA ゴシック" ではないかと個人的には思う。事業仕分けされんなよ、IPA。
・
フォントリンク
この機構を最大限に活用し、固定ピッチのコードエディタで問題をなくすには、
フォントリンクに頼ってしまうと Delphi の IDE でお分かりのように、指定できるフォントが限られてしまう。「お、これはいいな」と思ったらサロゲートペアが表示されなかったりとか。本当は分類別にフォントを指定できたほうがいいのは言うまでもない。
・
TEditor 2.52 for "Unicode 版 Delphi" Rel.4
公開。修正箇所は "doc\HISTORY_Unicode.txt" に書き留めておく事にした。フォントの指定が柔軟に行えるようになっている。
・
MECSUtils 1.40
リリース。MecsIsFullWidth() にオーバーロード関数が増えている。TEditor 2.52 for "Unicode 版 Delphi" ではこのバージョン以降が必要となる...つーか、TEditor で必要になったので機能を追加した。
・
フォントリンク
Neutral 属性の文字がある以上、フォントリンク機能はコードエディタ等の固定ピッチを必要とする場面では役に立たない事が多い。プロポーショナルであればフォントリンク機能様々なのだけれど。Tahoma とかはフォントリンクのおかげで幅広く文字を表示できるのだけれど、プロポーショナルフォントだから Delphi のコードエディタには使えなかったりするし。
結局、固定ピッチを必要とする場面ではフォントリンク機能を最大限活かしつつ、自前でフォントを切り替える方が確実だと思う。"単一のフォント + フォントリンク" で解決しようとするのは無理があるって事。コードエディタに限った話ではなく、印刷もそうだよね...日本では固定ピッチで印刷する事が結構多いから。
・
東アジアの文字幅
固定ピッチに於いて、単に ANSI を Unicode 対応させるだけだったら、東アジアの文字幅 を考慮すればよかった。しかし、"ダイアクリティカルマーク 付き文字等の Neutral 属性の文字をどうにかしたい"、
"Unicode なのだから世界中の文字を固定ピッチで表示させたい" という事になってくると 「そんな都合のいい固定ピッチフォントは存在しない」という現実に直面する事となる。ここ最近の話の内容をかいつまんで話すとそういう事だ。
・
"MS ゴシック" がダメなら "メイリオ" を使えばいいじゃない?
...いえ、それはプロポーショナルフォントです。
・
その他に固定ピッチで困ること (Unicode)
結合文字列...例えば http://www.unicode.org/versions/Unicode5.0.0/ch15.pdf の Fig.15-11 の組み合わせなんかは、"理論上可能な結合文字列" なのだけれど、音楽記号フォントを導入したとしてもこれらは 1 つの文字 (結合文字列) として扱われない事がある。つまり、OS やフォントの都合で結合したりしなかったりするので、"実際の表示では何文字分になるのか?" というのを事前に知る方法がない、という点が一番痛い。
アラビア文字は"キャレット移動方向がいきなり逆になる"とか、"矩形無理じゃん" とか、"文章の書き方で文字の表示が変わる (固定ピッチ実現のためにプロポーショナルフォントを 1 文字ずつ描画するなんて事ができないよね)" とか厄介な事が多くある。
アラビア文字に関連して "制御文字"。基本的に幅という概念はない。これって文字じゃなくて、JIS Code の <SI> / <SO> とかに似ている。<SI> / <SO> と決定的に違うのは、制御文字というよりマークアップに近いので、表示しておかないと (明示的に保持しておかないと) 意味合いが失われてしまうという事だ。
異体字セレクタは文字の後ろに修飾するものがあるので、常に次のエレメントを読まなくてはならなくなる...どのフォントにどの異体字が含まれているかなんて調べるのは無理だし。
・
異体字セレクタ
結合文字列の一種。特定のコードポイントの文字に異体字があった場合、続くエレメントで異体字を指定する。"廣" のコードポイントは U+5EE3 だけど、"まだれに黄" も U+5EE3 となる。これらを区別するためには、元となるコードポイントの後に U+E0100 のような異体字セレクタを付加する事となる。そして、フォントを切り替える と (フォント切り替えは OS がやってくれる事になってるけど、何に切り替わるのかは...?)。
察しのいいヒトは気付いたかもしれないけれど、漢字用に用意されている異体字セレクタは "サロゲートペア" だったりする。
・
TEditor 2.52 for "Unicode 版 Delphi" Rel.5
公開。修正点はバグ Fix。そこそこの DL 数はあるみたいでなにより。バグの報告は掲示板へどうぞ。
・
TEditor 2.52 for "Unicode 版 Delphi" Rel.6
公開。SKRegExp を利用した htSearch.pas を Extras に同梱。正規表現検索も可能になった。もちろん、通常の検索も可能。
あまりテストはしていないので叩き台程度に考えておくと精神衛生上よろしいかと。
BACK | 古いのを読む | 新しいのを読む |