開発しているサービスのセキュリティ向上のため、
ログイン時に連続して失敗した場合に一定時間のログイン制限処理を実装します。
ログイン時のエラー情報は既にDBに記録されていたので、
単純にログイン開始時及びエラー時にDBを検索しようと思ったのですが、
データ数次第で検索に時間がかかる・DBと接続できない場合に取得不可など、
ログイン処理の長時間化や動作不良の懸念がありました。
そのため、ログイン時にはDB検索を行わずに済むよう、
エラー記録時にサーバーにてキャッシュし、
ログイン処理にてエラー情報取得時にキャッシュから取得する方針にしました。
またこれだけだとサーバーが再起動した際にはキャッシュが消えてしまうので、
初期化時にDBを検索し、有効な情報のみキャッシュに追加することにします。
この方針で仕様を練り直して、問題なく動作するように実装したいと思います。
画像描画GUIに多角形選択機能を追加
社内ライブラリに実装しています画像描画GUIに、新たに「多角形の範囲選択機能」を追加しました。これまでの矩形選択や楕円選択に加え、より柔軟で精密な範囲指定が可能になります。
製品検査や研究用途で画像を扱う際、対象物が必ずしも矩形や楕円の形状とは限りません。例えば、検査領域の形状や微細構造の解析では、複雑な輪郭を持つ対象を正確に切り出す必要があります。多角形選択機能を使えば、任意の頂点を指定して自由な形状で範囲を選択できるため、従来の選択方式では難しかった精密な処理が可能になります。
ペイントソフトライクな操作性
操作感にもこだわりました。多角形選択の挙動は、GIMPなどのペイントソフトに近づけて設計しています。クリックで頂点を追加し、開始点クリックで選択完了。頂点のドラッグにも対応しています。直感的な操作で、初めて使う方でもすぐに慣れていただけます。
技術的なポイント
多角形選択の実装には、頂点情報をベクトル形式で保持し、リアルタイムでポリゴン描画を行うアルゴリズムを採用しています。選択範囲のマスク生成や、画像処理ライブラリとの連携もスムーズに行えるよう設計されており、OpenCVなどとの統合も容易です。既存の業務システムへの組み込みも柔軟に対応可能です。
コードの良し悪し
こんにちは mtjです
プログラムという物はいろんな書き方があり 結果は同じでも多種多様なコードが生まれます
見やすい、短いコードもあれば 処理速度が早い、メモリ使用率が低いコード等 結果は同じですが 効果は様々なコードがあります。
どのコードが一番良いかを判断するためにはソフトが稼働する端末のスペック、どの程度の時間まで許容できるか できそうか
演算量で言えば 時間あたりのデータ数等様々な情報が必要になります
全てを満足に満たせるコードがあれば良いのですが 演算速度を高めようとすると可読性、負荷が高くなったり等やはり課題は出てきます。
そういった要求スペックを満たすコードを作るのが自分たちの役目だと思ってますし そこがプログラムの楽しさでもあると思ってます。
システムを作る場合にはそういった情報も漏らさず確認、推測していきたいですね
WordPressにて記事を投稿できなくなる問題を解決
先月からブログを投稿できなくなっておりました。
手が空いたので本日調査したところ、無事解決できたので、
以下にまとめます。
#症状
WordPressの投稿画面にて、寄稿者権限でないにも関わらず、「公開」ボタンが非表示となり、
代わりに「レビュー待ちとして送信」ボタンが表示されていました。
「レビュー待ちとして送信」ボタンをクリックするとエラーになり、
投稿はおろかレビュー待ちとして送信もできず。
#解決策
プラグイン Incorrect Datetime Bug Fix (※) をインストールして有効化しました。
※データの日付が ’0000-00-00 00:00:00′ の場合エラーとする設定を無効化するプラグイン
Incorrect Datetime Bug Fix – WordPress plugin | WordPress.org
#経緯
レンタルサーバーの更新が先月頭にあったのでそれによるものではないかと言う話になり、
レンタルサーバー運営に問い合わせ。
↓
WordPressが古過ぎるのが原因ではないかと言われる。
↓
WordPressの更新は手間なので一旦保留に。
↓
他の解決策を探す。
一番初めに見つかるのはDBの容量不足だが、容量は問題なし。
↓
解決策は見つからないものの、wp-config.phpにて
define('WP_DEBUG', true);
を設定するとデバッグモードとなりエラーログなど出力できると判明。
→WordPressで新規投稿ができなくなった原因がプラグインだった | #interest_ae
↓
レンタルサーバーコントロールパネルから wp-config.php を開き、デバッグモードをオンに。
↓
投稿画面を開くと以下のエラーログが表示。
WordPress database error: [Incorrect datetime value: '0000-00-00 00:00:00' for column 'post_date_gmt' at row 1]
INSERT INTO …
…
VALUES (…,’0000-00-00 00:00:00′,…)
↓
エラー内容で検索して解決策記載ページを発見!
→MySQLで設定変えたら、WordPressで投稿時に「Incorrect datetime value」エラーが出たので対処法 – たぬきのぶろぐ
#推測される原因
推測なのですが、おそらくレンタルサーバーの更新によりMySqlのバージョンが更新され、
その際に日付が無効値 ‘0000-00-00’ の場合に
エラーとなる設定が追加されたのではないかと思われます。
しかしWordPressの投稿開始時にDBに仮挿入される初期データ内の日付が、
ログを見るに ‘0000-00-00’ のため、投稿開始時にエラーとなり投稿できなくなってしまったのかと。
その問題となる設定を Incorrect Datetime Bug Fix プラグインは無効化してくれるので、
エラーにならずに投稿開始できるようになったのでしょう。
—
調べてみたらすんなり解決して良かったです。
毎度のことながら、Webの先人達に感謝!
OpenCV4 × YOLOによる物体検出技術の製造業向け応用
近年、製造業における品質管理や自動化のニーズが高まる中、画像処理技術の進化が注目されています。弊社では現在、社内画像処理ライブラリにOpenCV4とYOLO(You Only Look Once)を組み合わせた物体検出機能の追加を進めており、生産ラインでの外観検査や誤組検査への応用を視野に入れた事前検証を行っています。
OpenCV4とYOLOの技術的特徴
OpenCVは画像処理の定番ライブラリであり、フィルタ処理や輪郭抽出、幾何変換など多彩な機能を備えています。一方、YOLOは深層学習ベースの物体検出アルゴリズムで、画像内の複数の対象物を高速かつ高精度に検出できる点が特長です。これらを組み合わせることで、従来のルールベースの検査では困難だった複雑な形状や微細な違いの検出が可能になります。
製造現場での活用例
- 外観検査:製造工程でのOK品/NG品をリアルタイムで選別
- 誤組検査:部品の有無や配置の誤りを自動判定
- 工程監視:作業手順の逸脱や異常動作の検出
これらの検査は、従来は人手に頼っていた部分が多く、検査精度や作業負荷に課題がありました。画像処理による自動化は、検査品質の均一化と省人化を同時に実現する手段として、今後ますます重要性を増すと考えられます。
今後の予定
弊社では、検証段階で得られた知見をもとに、製造業向けに最適化された画像処理ライブラリの開発を進めてまいります。現場のニーズに即した柔軟なソリューション提供を目指しています。
Macの容量削減
VS for Macがサポート終了してからはMacで開発を行うことがなくなったため、
Macの用途はもっぱら次の3つです。
・MAUIのビルド(のためにWindowsのVSとペアリング)
・iPhoneアプリのリリース申請
・iPhoneアプリの証明書更新
今回MAUI9.0(.NET9.0)に対応する必要が生じ、
そのビルドのためにXcodeのバージョンアップを行おうと思ったのですが、
OSが対応していなかったためまずはOSの更新から行うことになりました。
しかし、Macの容量はもうパンパンで残り2GB(そんなことあります?)となっていたので、
Finder上で目に付いた不要そうなファイルを整理しました。
それにより空きが8GB弱となり、ダウンロードされるOSの容量7GB弱分を確保できたので
意気揚々と更新を開始したのですが、容量が足りないと怒られました。
更新時に25GB弱必要だそうです。Oh…
設定のストレージから整理しろ(※)と言われたのでストレージを見てみたところ、
詳細を確認可能な項目の内、デベロッパの項目が47GBと抜きんでていました。
※Macにいまだに不慣れなのでiOSと同じ形式でストレージが管理できるの失念していました
中身を見てみるとXcode関係で、
iOSデバイスサポートのセクションに数GB単位の項目がずらりと並んでいました。
消せそうだと思い調べてみたところ、
ここは、実機デバッグをするとシンボル情報などが実機からダウンロードされて保存されるようです。
実機のOSバージョン毎に追加され、一つが大きいので、肥大化しやすいようです。
消しても次回接続したときにまた作成されます。
とのことだったので全て削除して50GB以上の空きができ、
無事OSの更新を開始できました。
長年デバッグのために接続したデバイス・OSの情報が蓄積され続けていたのですね。。。
以下のキャプチャは消している最中のものです。
大分容量に余裕が出たので、
MAUIのビルドのためにVSとMacをペアリングする際によく容量が少なくなってると注意を受けて
Xamarinのキャッシュを削除していたのですが、その必要もなくなりそうで良かったです。
以上です。
特定の言語
こんにちは mtj です
自分は昔はCOBOLだったり JAVAだったりそれこそC,C++等も覚えたりしましたが
JAVAを勉強している時に別の学生に言われたことは「C++が一番なんじゃないの?」のようなセリフでした
おそらくどこかの教授の受売のような話なのでしょうが 自分は用途に対する利点と欠点はあったとしても〇〇の言語が一番のような話は無いと思っています。
同じようにCが基礎 だから覚えないといけない という話も基本無視するレベルの話だと思っています。
言語はその時々で必要な物を選択できてこそエンジニアだと思っています
時々は必要な開発期間、コスト等すべて含めてとなります
C#よりC++のほうが実行速度が早くとも 実行時間が100秒が99秒になるレベルであればコストが一番低い方を選択するべきだと思っています
OpenCV4で実現するテンプレートマッチングのマスク処理対応
製造業における画像処理技術は、品質管理や工程監視においてますます重要性を増しています。弊社では社内画像ライブラリをOpenCV2からOpenCV4へとアップグレードし、テンプレートマッチングにおけるマスク処理への対応を実現しました。
OpenCV2の限界とOpenCV4の進化
OpenCV2では、テンプレートマッチングにおいてマスク画像を使用することができず、背景ノイズや不要領域が一致率に影響を与えるケースが多くありました。これにより、微細な部品の検出や位置合わせにおいて誤検出が発生するリスクがありました。
OpenCV4では、テンプレートマッチングにマスク画像を指定できるようになり、テンプレート画像の中で注目すべき領域だけを比較対象にすることが可能となりました。これにより、検出精度の向上と誤検出の低減が期待できます。
製造現場での活用例
例えば、電子部品の外観検査において、端子部分のみをテンプレートとしてマッチングさせることで、基板の模様や背景の影響を排除できます。これにより、検査工程の自動化がより高精度に行えるようになり、不良品の流出防止にもつながります。
今後の展望
弊社では、OpenCV4の導入を皮切りに、AIベースの画像認識技術(YOLOやTensorFlowなど)との連携も視野に入れ、より高度な検査・分析システムの構築を進めています。画像処理の精度と柔軟性を両立させることで、製造業のDX(デジタルトランスフォーメーション)を支援してまいります。
画像処理の導入や既存システムの改善をご検討中の方は、ぜひお気軽にご相談ください。
数学の面白さ
こんにちは mtj です
プログラマーに数学がいるかいらないかについては自分はプログラムを書くだけならいらないと思っている派です
現代であれば誰かが作ったライブラリを使えば計算も気にせず思った通りの物がだいたい作れてしまいます。
しかし プログラムはそういったとこまで自分が作るので楽しいという側面があります。
物理現象等を再現するのに大事になってくるのが数学、各学問の計算式等になります
自分も学生の時に物理と流体の本を読みながら流体のシミュレーターのような物を作成しました
再現に必要な計算式をピックアップしコードに落とし込み 実際の流体動作の再現をできた時はかなり楽しい物でした
アナログな電気回路を再現するならそれらの知識 自分がやったような流体であれば物理系の知識 波形、光学であればそういった知識等
現実世界で発生している現象をデジタル、ソフトで再現するというのはソフトの触り始めとしても悪くないのではないかと思いました
それこそ始めたてはコンソールでHello worldを出したりしますが 慣れてきたら自分で頭を作って作るアプリが一番楽しいと思います
C#11と12の機能いくつか
本日から弊社のメインとなる案件のプロジェクトにて
使用可能なC#のバージョンが12まで引き上げられました。
(今までは9や10でした。)
使用可能になった11と12の機能にさらっと目を通して来たので、
知らなかった便利そうな機能や使ってみたかった機能を4つほど紹介してみます。
1. 生文字列リテラル
string longTxt = """
toooooooooooooooooooo...
looooooooooooooooooong...
teeeeeeeeeeeeeeeeeeeeeext...
""";
文字列をダブルクォーテーション3つで囲うことで、
エスケープなしで改行や特殊記号などを含めた生の文字列を
ソース内に直接記述可能となるそうです。
改行を含んだ長文の文字列の可読性が改善されてかなり便利そうなのですが、
社内ツールの英語化用日本語抽出ツールに対応が必要になりそうなのは懸念点です。
C# 11 の新機能 – C# ガイド – C# | Microsoft Learn
2. コレクション式
List<int> No = [1, 2, 3];
リストなどのコレクションの値をpythonのような構文で
簡潔に作成できるようになったようです。
毎度冗長だな、、、と思いながら書いていたのでありがたいです。
C# 12 の新機能 – C# ガイド – C# | Microsoft Learn
3. ファイル修飾子
file class LocalObject { }
可視性を記述されたソースファイル内に限定する修飾子です。
ファイル外のクラスとは名前の競合も起こらないので、
そのソースでしか使用しないちょっとしたクラスを定義するのに便利そうです。
使ってみたかったのでうれしいです。
ファイル キーワード – C# reference | Microsoft Learn
4. usingによるタプルのエイリアス
using AtoF = (int A, int B, int C, int D, int E, int F);
usingによりタプルに名前を付けることができます。
何度か登場して冗長に感じるもクラスにするほどではないタプルを
省略して書けるので便利そうです。
使いたいことが今まで何度かあって、
その度に言語バージョンに泣かされていたのでこれもうれしいです。
タプル型 – C# reference | Microsoft Learn
以上です。
他の機能も含め新機能使っていきたいです。
