展示会の大事さ

こんにちはmtjです

仕事上あまり外に出る機会はありませんが いざ展示会等含めて他のシステム、物を見る事は大事だなと感じます。
主にソフトの話にはなりますがやはり別業界のソフト、システムを見ると勉強になることが多々あります。

細かくはその業界での知識になるかもしれませんがデザイン、システム全般はソフトであれば使える、応用できることが多いです。

良いデザインがあればそのデザインを学び、面白い動作であればそれを覚えたり等システムの挙動として覚えることが多かったりします。
コードは見えないので真似する事はできませんがそれ以外ではかなり勉強になる事は多いです。

特にお客さんに提案したりできる事が増えるためやはりそういった外部からの刺激は大事だなと感じます。

URLからhtmlのリンクタグを作成するpythonスクリプト

11月になりようやく肌寒くなってまいりましたね。
個人的にはもう少し暖かい気候が続いてほしかったです。
暑くも寒くもない方が過ごしやすいので。
(先週末記事を書いたのですが、今週は暖かそうですね)

それはさておき今回は題の通り、
URLを与えてhtmlのリンクタグを作成するプログラムを作成した話となります。
ただそれだけのプログラムなのですが、
毎度参考のリンクのタグを手作業で作るのが面倒だったのと、
検索してみたところurlのタイトルを自動で取得してリンクタグを作成してくれるサービスは
特に見当たらなかったため、自前で作成した次第です。

今回は実行のしやすさを考えてpythonのスクリプトで作成しました。

必要なpip

pip install requests beautifulsoup4 pyperclip

作成したコード

import requests
from bs4 import BeautifulSoup
import pyperclip
import sys

# URLからhtmlのタイトルを取得
def get_html_title_from_url(url: str) -> str:
    try:
        response = requests.get(url)
        response.raise_for_status()  # HTTPエラーが発生した場合は例外を発生させる
        # バイナリのcontentを渡してエンコードをよしなにしてもらう
        soup = BeautifulSoup(response.content, 'html.parser') 
        # ページのタイトルを取得
        title = soup.title.string if soup.title else 'No Title' 
        return title
    except requests.RequestException as e:
        print(f"HTTPリクエスト中にエラーが発生しました: {e}")
        return ""

# URLとタイトルからhtmlのリンクタグを作成
def create_html_link(url: str, title: str) -> str:
    return f'<a href="{url}" title="{title}">{title}</a>'

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("使用法: python create_link_tag.py URL")
    else:
        url = sys.argv[1]
        title = get_html_title_from_url(url)
        html_link = create_html_link(url, title)
        print(html_link)
        pyperclip.copy(html_link) # クリップボードにコピー
        print("リンクがクリップボードにコピーされました。")

urlをコマンドライン引数で与えることでリンクタグが出力されます。
無精のためクリップボードにコピーまで行われます。

試しに前回の私の記事のURLを与えてみると、、、

Microsoft IMEの不具合によるSendKeysの動作不良 | 計測制御ソフト受託開発 インフォテック ブログ

<a href="https://www.infortec.co.jp/blog/archives/Item_3080" title="Microsoft IMEの不具合によるSendKeysの動作不良 | 計測制御ソフト受託開発 インフォテック ブログ">Microsoft IMEの不具合によるSendKeysの動作不良 | 計測制御ソフト受託開発 インフォテック ブログ</a>

と出力され、問題なく動作します。
これでチョット楽できます✌

ちなみに今回のコードはほとんどMicrosoft Copilotくんに指示を与えて書いてもらいました。
普段使っておらず不慣れな言語の小規模なコードを作成してもらうのに、
チャットAIは本当に便利ですね。

おかげで、面倒なちょっとした手作業をpythonやbatで自動化するのも楽に行えます。
便利な時代になりました。もっと便利になって欲しいですね!以上です。

かんたん見積

ご希望の依頼内容を入力頂くと、最短1時間以内に「かんたん見積金額」をご連絡する「かんたん見積」サービスを開始致しました。
無料で見積をさせて頂きますので、初めてのシステム開発でも気兼ね無く安心してご依頼頂けると考えております。

「工場の生産ラインで使用する検査ソフトを作成したい」、「研究に使用する画像処理ソフトを作成したい」、「既存設備のソフトに機能追加を行いたい」など、ご要望がございましたら、まずは「かんたん見積」で見積のご依頼をお願い致します。

趣味と仕事

こんにちは 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万人規模のログインサーバーを建てる必要はないので

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

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

C#のインタフェースでテンプレートメソッドパターン

9月ももう末ですね。
ようやく涼しくなって来てありがたいです。今夏は暑すぎました。。。

最近今更のように少しずつデザインパターンを学習(再学習含む)しています。
学習中にJavaのコードをC#で書き換える写経をしています。

そんな中でAbstractクラスで実装されがちなテンプレートメソッドパターンを
C#の場合はインタフェースのみで実現できることに気が付きました。
(Javaはおそらく完全な実現は無理そうです、
 インタフェースでfinal defaultなメソッドは宣言できないみたいなので)

実現方法は
「C#8.0でインタフェースにデフォルト実装メソッドを定義し、sealedで修飾」
です。

実現例:

/// <summary> 表示インタフェース </summary>
public interface IDisplay {
    /// <summary> オープンします。 </summary>
    void Open();
    /// <summary> プリントします。 </summary>
    void Print();
    /// <summary> クローズします。 </summary>
    void Close();

    /// <summary> 表示します。 </summary>
    sealed void Display() {
        Open();
        Print();
        Close();
    }
}

「C#8.0以降なら似たようなことをできるものの
 C#にはfinal修飾子がないため実現できない」と思っていたのですが、
デフォルト実装したメソッドをsealedで修飾可能なことに今更気付きました。
(というかそもそもメソッドにsealed修飾できることを知りませんでした)

これならデフォルト実装したテンプレートメソッドを
継承先のクラスにより上書きされてしまうことを防げますね。

実際にテンプレートメソッドパターンを実装することはあまりないかもしれませんが、
インタフェースにsealedなデフォルト実装メソッドを宣言可能なことは
知っているといずれ役立ちそうな気がします。

※調べてみると2019年に既に気付いていた方がおりますね。
 もしかして皆さん知っておられるのでしょうか。

Template Method Pattern C# 8.0風味 #デザインパターン – Qiita

以上です。

工場の検査設備PCソフトのリプレイス

先週末にお客様工場のPCソフト更新に行ってきました。

以前に別会社さんが作成されたPCソフトの出来が良くないため、インフォテックで全てリプレイスを行った案件です。

同じような設備が4台あり、元々は設備ごとに微妙に異なるPCソフトを使用していましたが、インフォテックが作成したソフトでは、1種類のソフトで全ての設備が動作するようにしました。バラバラのソフトにすると保守に無駄に時間とコストがかかり、お客様の不利益になるので良くないです。

今回は最後の4台目の設備のPCソフト更新でした。
さすがに4台目になると慣れたもので、旧部材の撤去・新PCの設置・ADとI/Oの配線変更・動作検証などスムーズに進みました。

プログラマーの知識

こんにちはmtjです。

プログラマーという職業はおそらくですがプログラムに詳しいと思われるでしょう
しかし、プログラムに詳しいという事は大体がPC自体の動作に詳しい人達です。

そしてソフトの使用される分野に対しても詳しい人が多いです。
画像処理であれば画像処理の動き、カメラ等の知識
3Dプログラムであれば3D空間の演算等それらの処理
ゲームプログラミングであればゲームの知識

その分野の知識がなければ言われたコードは書けるもののその先に踏み込む事は不可能だと思っています。
なので自分たちは新しい分野のソフトを作る時にその分野の知識も同時に仕入れています。

そういった知識を入れる事を忘れずに 取り残されないようにしていきたいです