2013年12月25日水曜日

TTFフォント名の変更

バーコード印刷ができない。

何が印刷されるか… 代わりに*ID番号*が印刷されてしまう、ということでした。

原因を探っていますと、どうもフォント名がWindowsによって異なるみたいでした。

"Thirty Ninth Bar"と思っていたものが、実は"Thirty Ninth Bar Plain"だった!

では、フォント名を"Thirty Ninth Bar Plain"→"Thirty Ninth Bar"に変換する処置を企てましょうと…

レジストリ編集「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink」を試みましたが、うまくいかず。

最終的にttfname3というツールを使用させていただきました。こちらから。

このような流れになります:
  • TTFからXMLを出力。
  • XMLを編集。
  • TTF+XMLで、新しいTTFを出力。

まず、XMLを出力します。

ttfname3.exe "Thirty Ninth Bar.ttf" -o "Thirty Ninth Bar.xml"

出力されたXMLは次の通り:

<?xml version="1.0"?>
<Fonts>
<Font>
  <!-- ****************** Font(0) ****************** -->

  <Header
    Ascender="1956"
    Descender="-430"
    TypoAscender="1956"
    TypoDescender="-410"
    WinAscender="1956"
    WinDescender="412"
    AverageCharWidth="1188"
    Codepage1="00002b87"
    Codepage2="b02d5bc3" />

  <Name>

    <!-- Copyright -->
    <T n="1,0,0000,0"></T>
    <T n="3,1,0409,0"></T>

    <!-- Family -->
    <T n="1,0,0000,1">Thirty Ninth Bar</T>
    <T n="3,1,0409,1">Thirty Ninth Bar</T>

    <!-- Subfamily -->
    <T n="1,0,0000,2">Plain</T>
    <T n="3,1,0409,2">Plain</T>

    <!-- UniqueIdentifier -->
    <T n="1,0,0000,3">FontMonger:Thirty Ninth Bar Plain</T>
    <T n="3,1,0409,3">FontMonger:Thirty Ninth Bar Plain</T>

    <!-- FullName -->
    <T n="1,0,0000,4">Thirty Ninth Bar Plain</T>
    <T n="3,1,0409,4">Thirty Ninth Bar Plain</T>

    <!-- Version -->
    <T n="1,0,0000,5"></T>
    <T n="3,1,0409,5"></T>

    <!-- PostscriptName -->
    <T n="1,0,0000,6">ThirtyNinthBarPlain</T>
    <T n="3,1,0409,6">ThirtyNinthBarPlain</T>

    <!-- Trademark -->
    <T n="1,0,0000,7"></T>
    <T n="3,1,0409,7"></T>

  </Name>
</Font>
</Fonts>

さて、ことごとく"Plain"を取り払います。"Plain"だけになっているものは、"Regular"に変更します。

    <!-- Subfamily -->
    <T n="1,0,0000,2">Regular</T>
    <T n="3,1,0409,2">Regular</T>

書き戻します。

ttfname3.exe "Thirty Ninth Bar.ttf" "Thirty Ninth Bar.xml" -o "Thirty Ninth Bar Regular.ttf"

古いフォントを削除し、新しいフォントを追加、パソコンの再起動が必要。これで変更できているはずです。

2013年12月18日水曜日

Windows 8 「ファイル履歴」機能で、バックアップができなくなった

ファイルの自動バックアップに、「ファイル履歴」機能を活用しています。一応バックアップをこれに頼っているので、動かなくなると、ちょっと困ります。

或る時から正常に終了しなくなりました。

そして、イベントビューアにはこのようなログが・・・
構成 C:\Users\Sola\AppData\Local\Microsoft\Windows\FileHistory\Configuration\Config でユーザー ライブラリの変更のスキャンと変更されたファイルのバックアップを実行できません

ログに出てきます、この辺のフォルダ「C:\Users\Sola\AppData\Local\Microsoft\Windows\FileHistory\Configuration」の中身はこの通りです。


ESENT(JetBlue)をご利用のようです。そこで、OSに付属のesentutlで破損チェックを実施いたしました。


「Integrity check completed.  Database is CORRUPTED!」

壊れていると言っています。

esentutl /p を使っても直らない。

直し方が判りません。

仕方なく、バックアップのデータを削除することにしました。

FileHistoryフォルダ、「C:\Users\Sola\AppData\Local\Microsoft\Windows\FileHistory」フォルダそのものを削除して、バックアップ先のFileHistoryも、名前を変えて、新規の状態に戻しました。

データベースは一度壊れると大変です。。。

2013年8月28日水曜日

TortoiseSvnに要望していた事項をついに実現頂きました!


Commit画面で、[Show log]ボタンの追加をお願いします、という内容です。感謝!

2013年7月18日木曜日

VNCで漢字キーが使える環境

次の環境では、[Show Connection Options...]→[Japanese keyboard]をオンにすれば、直後から、漢字キーの押下で、VNC先のMSIMEが反応しました。

UltraVNC X64 Viewer 1.0.9.6.2 → VNC サーバーフリーエディション 4.1.2k4
UltraVNC X64 Viewer 1.0.9.6.2 → UltraVNC 1.1.9.1


---

こちらの環境では、[Show Connection Options...]→[Japanese keyboard]をオンにした後、[Alt]+[漢字キー]の組み合わせで反応するようです。

UltraVNC X64 Viewer 1.0.9.6.2 → Ultr@VNC Win32 Server SC 20.3

2013年7月17日水曜日

PostgreSQL8.2サービスは起動して停止しました。…

現象:
「ローカルコンピューター上のPostgreSQL Database Server 8.2サービスは起動して停止しました。サービスの中には、ほかのサービスやプログラムで使用されていない場合は自動的に停止するものがあります。」

Try "postgres --help" for more information.



――――――――――
修正案 (1) "C:\Program" ファイルを削除

ある日突然、PostgreSQL 8.2 が起動しなくなったのであれば疑わしいです…

なにかの拍子で Program というファイルが C:\ に作成される事案があるようです。
このファイルがあると PostgreSQL 8.2 が起動直後に終了する、という問題がありました。

このファイルを削除すると、サービスが起動できるようになりました。

――――――――――
修正案 (2) pg_hba.conf で IPv6 の localhost を許可

セットアップ直後から pgsql-8.2 サービスが起動しないのであれば、疑わしいです。

localhost が IPv6 の localhost → ::1 として解決されてしまい、 接続拒否になっている可能性です。

pg_hba.conf にて、::1/128 を許可しましょう。

---
# IPv6 local connections:
host all all ::1/128 md5
---

――――――――――
修正案 (3) -w オプションを削除

-wを消すとうまくいく事例が有るようです。

レジストリエディタを起動。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\pgsql-8.2

ImagePathについて、

"C:\Program Files (x86)\PostgreSQL\8.2\bin\pg_ctl.exe" runservice -w -N "pgsql-8.2" -D "C:\Program Files (x86)\PostgreSQL\8.2\data\"

から

"C:\Program Files (x86)\PostgreSQL\8.2\bin\pg_ctl.exe" runservice -N "pgsql-8.2" -D "C:\Program Files (x86)\PostgreSQL\8.2\data\"

2013年6月17日月曜日

IIS6以上CGIでのstderr落ち問題

502 - Web サーバーがゲートウェイまたはプロキシ サーバーとして動作しているときに、無効な応答を受信しました。

検索中のページに問題があるため、ページを表示できません。Web サーバーがゲートウェイまたはプロキシ サーバーとして動作し、上位のコンテンツ サーバーと通信しているときに、コンテンツ サーバーから無効な応答を受信しました。


(2016/8/2 追記) ISAPI 拡張では stdout/stderr を使いませんので、存在しません。GetStdHandle を呼び出しても恐らく NULL が返ってくるだろうので、NULL アクセスで Access Violation になり、エラー落ちするのだと考えられます。
What is an ISAPI Extension? に記述のある EXTENSION_CONTROL_BLOCKReadClient WriteClient を代わりに呼び出すだけです。

さて、エラーは次の条件下で発生するようです:
  • IIS6以上を使っている。
  • phpやperlなどを使っている。CGI/ISAPIに関係なく。
  • stderrに何かを出力する。 

可能性の高い例として、外部プログラムがstderrに出力する場合が挙げられます。

対策例:

exec("pdftk.exe 2>&1", $output, $retval);

コマンドの末尾に"2>&1"をくっ付けて、stderrからstdoutにリダイレクションするか、
"2>NUL"で、Nullデバイスに捨てるのが手っ取り早い対策です。。。

参考:

PHP StdErr after Exec()
http://stackoverflow.com/questions/2320608/php-stderr-after-exec

php5でのexecとstderr
http://dd-kaihatsu-room.blogspot.jp/2013/03/php5execstderr.html

2013年6月12日水曜日

IE10が起動できない。GPUレンダリングをオフに

IE10が起動できない… 数日前までは問題なかったのに…

WinDbgで追跡した結果… DirectX関係で失敗している事が判明。

「GPUレンダリングではなく、ソフトウェアレンダリングを使用する*」をオン(チェック入れる)にしたら、起動するようになりました。


IEを起動できない場合は、「コントロールパネル」から「インターネット オプション」を開きます。

---

Microsoft社のサポート情報がヒットしましたので、参考までに。

初心者でもわかる! IE で GPU レンダリングを無効にする (IE10/IE9)
http://support.microsoft.com/kb/2618121/ja

2013年6月6日木曜日

アバストは疑わしいプログラムを分析しています

アバストは疑わしいプログラムを分析しています
このプログラムはアバストサンドボックス内で稼動しています。これにより、仮にソフトが悪意のあるものであったとしても、コンピュータにダメージを与えることはできません。

設定を変更する

自動サンドボックスを有効にする→オフ

これでもう警告が出なくなりました。

業務用パソコンだと、運用するにはしんどいです。


2013年6月3日月曜日

事務用パソコンの選択は、デスクトップかノートか?

「ノートを推したい」派の意見

  • ケーブル類が少ないので、3Sの適用が手軽。
  • LANは無線化できて、
  • 外には電源ケーブルとマウスの線ぐらいしか出ない。

「ノートを推しているんじゃありませんよ」派の反対意見

  • マルチモニタが想定されていない。できない訳ではないが、ディスプレイを増設すると、目の高さが合わないそういうことを気にせず増設している会社が有った。。。
  • ノートには、テンキーを装備して居ない機種が多い2013年現在、横長ワイドが流行っていて、テンキー装備の物が多い。
  • 買い替えの場合、前と同じキーボードを使う、という訳にはいかない。
  • 社長が買い替えに至る動機、ストーリーや美談が、ない。。。

ネットで調べた情報(デスクトップ PC は絶対に無くならない? )

  • デスクトップの良さ:
    • 処理能力が高い
    • 周辺機器をより多く接続できる
    • モニタのサイズが大きい
    • マルチモニタに適する
    • 臨場感(ゲーム・映画)
    • 故障時は自分で修理したり、部品交換ができる

2013年5月28日火曜日

QRコードを業務利用する上で陥ったワナ

最大フィールド長でテスト

  • QRコードは情報量が多くなれば大きくなるほど、寸法も大きくなります。
  • 情報量に比例して、読み取り可能性が反比例します。
  • という事で、最も情報量が多くなる状態でQRコードの読み取りテストを実施致します。
  • スキャン画像のワンセルが5ピクセルを下回ると厳しい戦いになる恐れが有ります。
  • そういう場合は独自でQRコードデコーダに手入れしたり等の追加作業が必要になるでしょう。

情報量が多くなると、寸法を大きくしないといけなくなります

  • 弊社の実績では、
    「発注書に印刷しますQRコード(バージョン数24、誤り訂正レベルL)を、
    300 dpi 白黒のPDFスキャンで有効に読み取るには、
    35mm以上の寸法が必要、という結果が得られました。」

用途に向き不向きが有ります

この度採用致しました、zxingの場合…
  • 向いている用途は、携帯電話でQRコードを認識する:
    • カラーCCDカメラ搭載で、カラー画像を使用できる
      • カラー画像は、ピクセル境界を補間する際に都合が良いです。
    • 速度優先、読み取り精度は重視しない実装になっている
      • ストリーミング的な使用に適しています
    • 何度でも画像の角度を変えて読み取りできるので、数十回のうち一回でも認識できたらOk
  • 向いていない用途は、スキャンした画像のQRコードを認識する:
    • モノクロスキャナで読み取り、モノクロ画像しか使用できない。
      • ピクセル境界が補間しにくく都合が悪い
    • 読み取り精度を優先したい、速度は要求されない実装、にはなっていない。
      • 流れ作業(ストリーミング)で、検出→認識 という流れになっている。
      • 検出の段階でミス、例えばバージョン番号の想定間違い等、を起こしたら、後工程は必ず失敗する。
    • 読み取りは一回のみで、一回でも認識できなかったらダメ、な用途には向かない。
      • ストリーミング構造なので、前工程での失敗が許されない、という用途は想定外。

テストデータだけだと、必要項目の漏れに気づきにくいです

  • 納品してから、あの項目、この項目が入っていない、という事が有りました。

空行も想定します

  • 改行でフィールドを区切る場合、フィールドに何も内容が無い場合、つまり空行が有る事も想定します。

QRコード入りの用紙かどうか、判別する方法も検討します

  • QRコード入り伝票が1枚以上有り、更に途中で図面が入ったりとかする場合、
  • QRコードの認識ミスの解釈が複数できてしまう
    • それは図面だ!
    • QRコードを読み取りできなかった。
  • 機械で判別できるようにするには、更に別のバーコードなり、QRコードが必要。
  • 又は、「ページ数/ページ総数」を各ページのQRコードに含むことで、歯抜けが判るような工夫も考えられる。例えば、1/3と2/3があって、3/3がなければ、抜けている、ということは機械的に判別できます。

2013年4月9日火曜日

IIS7.5で、証明書の関連付けに失敗する

「サイトバインドの編集」
「詳細:指定されたログオンセッションは存在しません。そのセッションは既に終了している可能性があります。(HRESULTからの例外:0x80070520)」

いずれかに該当する場合、失敗するようです:
  • MMC IIS Managerの「サーバ証明書」を使わずに、MMC 証明書スナップインで証明書を取り込んだ。
  • 「この証明書のエクスポートを許可する」チェックを外してインポートした。

うまくいく手順:
  • %windir%\system32\inetsrv\InetMgr.exe を起動。
  • 左側ツリーにて「DD5(DD5\Administrator)」を開く。
  • 中央の機能ビューにて「IIS」→「サーバー証明書」を開く。
  • 右側操作パネルにて「インポート」をクリック。
  • 「証明書ファイル」と「パスワード」を入力し、「この証明書のエクスポートを許可する」チェック入れる。
  • 「OK」

参考:

Error HRESULT: 0x80070520 when adding SSL binding in IIS
http://blogs.msdn.com/b/kaushal/archive/2012/10/07/error-hresult-0x80070520-when-adding-ssl-binding-in-iis.aspx

2013年4月5日金曜日

ATL/MFC トレースツール…動作を停止しました


「ATL Trace Toolは動作を停止しました。」
「問題の解決策をオンラインで確認できます。」

MSDNのATLサンプルにソースコードが含まれるので、デバッグしました。

  kernel32.dll!_InterlockedIncrement@4()  + 0x9 バイト 
> AtlTraceTool8.exe!CAtlTraceSettings::TryAddRef()  行 92 + 0xd バイト C++
  AtlTraceTool8.exe!CAtlAllocator::TakeSnapshot()  行 450 + 0xe バイト C++
  AtlTraceTool8.exe!AtlTraceSnapshotProcess(unsigned long dwProcess=4164784)  行 462 C++
  AtlTraceTool8.exe!CTraceToolDlg::PopulateTree()  行 294 C++
  AtlTraceTool8.exe!CTraceToolDlg::OnInitDialog()  行 193 C++

どうやら相性問題のようです。

タスクマネージャーで、hkcmd.exeigfxpers.exeを強制終了すれば立ち上がるようになりました。

2013年4月4日木曜日

mailtoでは、UTF-8か、SJISか

クリックしてみてください: メール送信 (SJIS) メール送信 (UTF-8)

本ページはUTF-8エンコードです。

Internet Explorer 10 (Windows 7)で、
  • Windows Live メール Version 2011、SJIS→正常、UTF-8→化ける
  • Mozilla Thunderbird 17.0.4、SJIS→化ける、UTF-8→正常
Google Chrome 26 (Windows 7)で、
  • Windows Live メール Version 2011、SJIS→正常、UTF-8→化ける
  • Mozilla Thunderbird 17.0.4、SJIS→化ける、UTF-8→正常
Firefox 17.0 (Windows 7)で、
  • Windows Live メール Version 2011、SJIS→無反応、UTF-8→正常
  • Mozilla Thunderbird 17.0.4、SJIS→無反応、UTF-8→正常
Safari 5.1.7 (Windows 7)で、
  • Windows Live メール Version 2011、SJIS→正常、UTF-8→化ける
  • Mozilla Thunderbird 17.0.4、SJIS→文字化け、UTF-8→正常
Internet Explorer 8 (Windows XP)で、
  • Outlook Express 6、SJIS→正常、UTF-8→文字化け
所見:
  • 日本語版のWindows環境では、SJISが無難の様です。
  • Thunderbirdについては、UTF-8が良い様です。しかしThunderbirdを使っているかどうかを知るのは難しい。別リンクを作る等の工夫が要りそうです。
  • Firefoxについては、UTF-8が良い様です。
  • iPadFirefox 15.0.1&Safari 4.0.2(Mac OS X 10.5)では、UTF-8が良い様です。

2013年4月3日水曜日

デジドルツール

TIFF/PDF編集ソフトをご案内致します。

yPDFEditor:PDF編集ソフト
※ [release]をクリックし、Setup_yPDFEditor_x_x.exe をダウンロード&実行してください。
 
 
PDFBun:PDF分割ソフト
※ [release]をクリックし、Setup_PDFBun_x_x.exe をダウンロード&実行してください。
 
 
jtifedit3:TIFF編集ソフト
※ [release]をクリックし、Setup_jtifedit3_x_x_x.exe をダウンロード&実行してください。

2013年3月18日月曜日

php5でのexecとstderr

stderrをstdoutにリダイレクトする事で、stderrが用意されないIIS6で落ちるのを防ぐことができます。

exec("pdftk.exe 2>&1", $output, $retval);

問題点:stderrとstdoutの区別が付かなくなってしまいます。エラー表示(stderr)なのか、情報(stdout)なのか。
 
proc_openを使うと、個別に対応可能ですが、手間です。
 
成功・失敗だけを見たいのであれば、$retvalを見れば十分な場合も多いです。
 
良識的なコマンドラインツールは、次のような$retvalを返すように考えられ作られています。
0 = 成功
0 以外 = 失敗 (正だけではなく、負の場合も有るので注意が必要。アクセス違反を意味する 0xC0000005 つまり -1073741819 等。)
 
そういう場合ではstderrをstdoutに結合する方法も有効と思います。

2013年3月16日土曜日

IIS6にはstderrが無い?

Webサーバ上でコマンドラインアプリを動かすことは良くある事と思います。

正常に動作し、エラーが出なければ何も問題無いのですが、エラーが起こったらstderrに詳細を流す事が多いです。

Apacheではstderrに流されても平気ないのですが、

IIS6だと、アプリが強制終了になる事を確認しています…

多分stderrが未定義なんじゃないかと思います。

CGIはstdinやstdoutや環境変数で子プロセスとやり取りすると思うのですが、

ISAPIはDLLであり、WebサーバとはAPI呼び出しで結合していますから… stdin/stdout/stderrを使っていない・存在しない。

子プロセスを開く際に、stderrへの出力を補足(リダイレクション)し、そのまま捨てるか、どこかに放流する必要が有ります。

2013年3月15日金曜日

Softbank 103P アドレス帳(VCF)の一括書き出し・取り込み手順

本体→microSD
  • ツール
  • SDバックアップ
  • データ参照
  • 1 電話帳
  • [メニュー]
  • 5 microSDへコピー
  • 暗証番号入力
  • 全件microSDへコピーしますか? YES

microSD、保存先と思われるファイルパス
D:\PRIVATE\MYFOLDER\Utility\Contacts\Contacts.BCK\XXXXXX00.VCF

出力例:
BEGIN:VCARD
VERSION:2.1
N;CHARSET=SHIFT_JIS:枚岡合金工具;株式会社;;;
SOUND;X-IRMC-N;CHARSET=SHIFT_JIS:ヒラオカゴウキンコウグ;カブシキガイシャ;;;
TEL;CELL:0667582001
EMAIL;WORK:info@sg-loy.co.jp
ADR;CHARSET=SHIFT_JIS;ENCODING=QUOTED-PRINTABLE;WORK:;;2-7-22;=91=E5=8D=E3=
=8Es=90=B6=96=EC=8B=E6=92F=92=86;=91=E5=8D=E3=95{;544-0013;=93=FA=96{
NOTE;CHARSET=SHIFT_JIS;ENCODING=QUOTED-PRINTABLE:=83=81=83=82
X-NO:10
X-CLASS:PUBLIC
END:VCARD

microSD→本体
  • ツール
  • SDバックアップ
  • データ参照
  • 電話帳
  • ファイル選択。例:XXXXXX00
  • [メニュー]
  • 4 全件本体へ上書きコピー
  • 端末暗証番号入力
  • 全件本体へコピーしますか? YES
  • 本体の登録内容が削除されます よろしいですか? YES

2013年2月27日水曜日

AutoIncrementStepを先に…

諸事情により、手でDataSetをコーディングしているのですが…、
 dtJ.Columns["受注MT"].AutoIncrement = true;
 dtJ.Columns["受注MT"].AutoIncrementStep = -1;
 dtJ.Columns["受注MT"].AutoIncrementSeed = -1;
どうも AutoIncrementStep と AutoIncrementSeed には入れる順序が有るようです。

AutoIncrementSeed を先にしますと、受注MTが16の時、新しい行には15が割り当たりました。これはマズい。

AutoIncrementStep を先にしますと、受注MTが-1になります。

2013年2月8日金曜日

StrCmpLogicalW的な、数字順の並び替え(C#)

個人的には、Regex.ReplacePadLeft(19, '0')で良いと思うのです…

        class Strn_comparer : IComparer {
            #region IComparer メンバ

            public int Compare(string x, string y) {
                int t = Norm(x).CompareTo(Norm(y));
                if (t != 0) return t;
                return x.CompareTo(y);
            }

            static string Norm(string x) {
                return Regex.Replace(x, "\\d+", Pad);
            }

            static string Pad(Match M) {
                return M.Value.PadLeft(19, '0');
            }

            #endregion
        }

C-1 → C-0000000000000000001
C-11 → C-0000000000000000011
C-2 → C-0000000000000000002

これで単純な文字列比較ができるようになります。

しかし、文字列が長くなり、メモリも消費しまくりなきらいは有ります。

いかがなものでしょうか。