趣味と仕事

こんにちは mtjです。

プログラマーをやっている人であればわかると思いますが結構趣味と仕事の内容が被ってきたりします

家でサーバーを立ち上げて何か趣味のWEBサービスを立ち上げたり
それこそ何かのソフトを作ったりまあまああります。

使う知識も仕事で知ったことだったり、趣味で得た知識を仕事でも使ったりします。

そういう意味ではプログラマーという仕事は結構境界が曖昧で使える知識も多岐に渡っているんだと感じます。
ゲームのコントローラー等を自作したりハード関係に波及できたりもします。

覚えて知識を本当に色々なとこで活用できるのでなかなか楽しいですね

Microsoft IMEの不具合によるSendKeysの動作不良

1. はじめに
つい先日、Windows10の特定モデルのPCにて、
プログラムからキー送信を行うのAPIであるSendKeysを使用した機能が動作しない、
という不具合が報告されてきました。
その原因及び回避方法が特定できましたので、その共有となります。

2. 原因
原因はタイトルに記載していますが、おそらくMicrosoft IMEの不具合で、
IMEが半角の場合にSendKeysが動作しないことがあるようです。
(IMEが全角の場合は動作することに気付き、原因に辿り着けました)
Windows 10 version 2004 以降の新しいIMEにはどうも不具合があり、
PCによっては入力時などに問題が発生することがあるそうです。

3. 回避方法
問題を回避するには、
IMEの設定にて「以前のバージョンの Microsoft IME を使う」をオンにすることで回避可能となります。
これによりIMEが半角時でもSendKeysが動作しました。

このIMEの設定は以下のレジストリを変更することでも設定可能です。
> レジストリキー:HKCU¥SOFTWARE¥Microsoft¥Input¥TSF¥Tsf3Override¥{03b5835f-f03c-411b-9ce2-aa23e1171e36}
> 名前:NoTsf3Override2
> 種別:DWORD値
> 値:1
次の記事から引用させていただいております。ありがとうございます。
「以前のバージョンのMicrosoft IMEを使う」をコマンドで変更する方法を検証してみた : ITインフラに悩まされてる日常

上記設定のレジストリ値は、
・管理者権限なしでプログラムから編集可能
・PCの再起動なしで反映可能(IMEのプロセスの再起動により反映)
のため、プログラムからも容易に設定変更可能です。
なのでこの回避方法は、人手による設定変更なしでプログラムだけで完結できます。

4. おわりに
最初は全く見当が付かなかったのですが無事解決して良かったです。
調べている過程で知ったのですが、
どうもSendKeysはWindows10以降まともにサポートされていないようです。
PCによっては動作しないことがまれにあり使用は非推奨である旨の書き込みをちらほら見かけました。
そのため、今回の件もMicrosoft IMEだけが原因でなくSendKeys側にも問題があるのかもしれません。
今後はSendKeysの使用には慎重になろうと思います。

参考:
「以前のバージョンの Microsoft IME のご使用について | Microsoft Japan Windows Technology Support Blog
Windows10の「Microsoft IME」を以前のバージョンに戻したら、ソフトの挙動が安定した話。 | メモノローグ

アライメントの画像処理

ウェハなどの対象ワークの検査を行う前に、位置や傾きのアライメント(位置合わせ)を行うことが良くあります。
アライメントを画像処理で行う場合、調整する4点を求めて射影変換を行うことが多いです。

今回行った案件では、2点だけ求めて簡易なアライメントを行うため、アフィン変換を使用しました。

社内ライブラリで内部的にアフィン変換を使用することはありましたが、ライブラリのAPIとして外部から実行出来るようになっていなかったので、今回APIに追加を行いました。1点から3点の任意点数でアフィン変換が行えるようになっています。

失敗から学ぶこと

こんにちは mtjです。

失敗から学ぶということで ソフトは基本失敗から学ぶ事が多いです
なので自分は成功事例も失敗事例も色々な物を見ています、開発秘話等の難しかった所等を見るのはかなり好きです。

そういった事例を蓄えておくことで事前に収集しなければいけない情報もわかるようになります
その情報を元に発生するかもしれない動作以外の問題について対策していきます

よくある話だとサーバーのログイン関連でしょうか
同時にログインされる想定人数等を元にソフト、サーバーの規模等を決めていきます。
同時に約10人しかログインしないサーバーに1万人規模のログインサーバーを建てる必要はないので

それ以外にもサーバーであれば今後のスケール等を元にそういった実装も加えていくのもいいかもしれません

というように設計は経験、知識で要求機能以外の問題点を確認していくと思います。
自分は同じ業界の友達とニュースになったような不具合等で雑談する時もあります
いろんな業界の人がいるので勉強になることも多いです。