ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

2020-01-01から1年間の記事一覧

FactorioのMODを日本語化する手順

FactorioのMODを自分で日本語化したい!という人向けの記事です。 日本語化の流れは以下の通り。 1. modの圧縮ファイルを展開する 2. 日本語用localeフォルダを作成する 3. 文字列を定義するファイルをenフォルダとかからコピーしてくる 4. 追加データをinfo…

Factorio + AAI Programmable Vehiclesで自動移動&陣形形成+補給

Factorioにて採掘・戦闘を自動化するため、AAI Programmable Vehiclesと、関連MODを入れてみた。 そして、さっそく惑星内の敵性生命体を滅ぼすための制御回路を構築してみた。 An Example of Half-Automated Troop in Factorio using AAI Programmable Vehic…

Factorioでエッジカウンタ

Factorioでヒステリシスつきエッジカウンタ。 入力信号がリセット状態からセット状態になると1パルスだけ信号を出力します。 Factorio用ヒステリシス付きエッジ抽出回路 概要 Factorio用ヒステリシス付きエッジ抽出回路 詳細 以下、BluePrint. Edge Counter …

Ryzen搭載14インチノートPCの検討

今まで使っていたThinkPad X240のキーボードが不具合をおこした。修理しようかと思ったけどかなり古いPCでもあったので、買い替えることに。そこで、何を買うか検討してみた・・・が、比較表を作っただけで時間切れ。なんで各社とも、発表内容と仕様が食い違…

1日1時間Factorio

Factorio Space Explorationの進捗。 とりあえず宇宙まで行った 地上で作れるアイテムは、ほぼ全て生産自動化した ディープ・スペース・サイエンスパックを毎秒1個作れるラインを構築中 拡張総合生物カタログ、総合生物カタログ、大域生物カタログ、重要なバ…

Factorio Space Explorationメモ:貨物ロケットの自動準備

FactorioのSpace Exploration Modをプレイしていると、そのうち母星の資源が枯渇してくる。そうなると他の惑星へ資源を奪いに行く必要がある。Factorioの醍醐味は様々な工夫による作業の自動化にあるので、できれば奪った資源の輸送も自動化したい。しかし、…

Factorio スペース・エクスプローラーでのアイテム制作メモ

Factorio スペース・エクスプローラーでディープ・スペース・サイエンス・パックを含む各種パックを作ろうとすると、拡張総合~カタログのレイヤーまではそれぞれが絡み合っているため必要な工場数がよくわからない。そこで、毎秒1個生産する場合に必要な工…

Factorioでアイテム生産に必要な工場の数を試算するツール(FactorioFactoryCalculator)

Factorioでアイテム生産に必要な工場の数を試算するためのツール, FactorioFactoryCalculatorを公開しました。これを使えば、例えば製造サイエンスパックを毎秒3個作るために必要な、生産力モジュール1の工場の数やそのための発展基板工場の数などが試算でき…

重い処理中にステータス(状態)を表示するダイアログの実装(ユーザーインターフェーススレッド)

解決したい課題 MFCを使ったソフトにおいて重い処理をしている最中に、進捗等を表示するダイアログを表示したくなることは多々ある。しかし、単純にダイアログを作って表示しようとしても、以下のようにうまく行かないことが多い。 重い処理が終わるまでダイ…

logicool M705 ワイヤレスレーザーマウスを分解・修理した

logicool M705 ワイヤレスレーザーマウスを使っているのだが、ホイールの回転が悪くなってきた。内部にホコリが溜まったせいだと思い、分解・修理したので手順をメモ。 なお、M705にはいくつかのモデルが存在し、それぞれ構造が異なる。今回分解したのは2018…

Ryzen3700Xに大手裏剣 参を装着してみた(ベンチマーク編)

Ryzen3700Xに大手裏剣 参を装着してみた(装着手順編) - ドナドナされるプログラマのメモ の続き。 Wraith Prismから換装する前と後で、色々とどう変わったか調べてみた。なにしろ、サイズがちっこいので冷却能力が足りるか不安なので。 冷却性能のベンチマ…

Ryzen3700Xに大手裏剣 参を装着してみた(装着手順編)

Ryzen 3700Xに標準でついてきたWraith Prismは結構音が大きいので、CPU冷却ファンを買い替えてみた。ちょっと冷却能力に不安があったけど買ってみたのは大手裏剣 参。 www.scythe.co.jp 取付対象 寸法情報 換装手順 取り付け状況 取付対象 マザーボード:GIG…

ガンダムオンラインで回復ビームが他人から見えないことがあるバグ

ガンオンで死体を起こそうと回復ビームを当ててたら、それを遮って修理しろアピールをする人がいた。何故だろうと思ってリプレイを見てみたら、回復ビームが写っていない!そりゃ、死体を起こそうとしているのは分からないし、修理アピールもするわ。 以下、…

ガンダムオンラインのCPU使用率およびGPU使用率

ガンダムオンラインにおけるCPU使用率とGPU使用率をメモ。 CPUはRyzen3700X, GPUはGeForce GTX 1070、解像度は1920×1080で画質は最高。全ていずれもCPU使用率20%程度、GPU使用率20%程度。CPU使用率の波形から、相変わらず2スレッドぐらいしか使っておらずマ…

重いイベントハンドラの処理状況をダイアログで表示する

背景 重い処理の進捗状況をダイアログで表示する場合、自分がよくやるのは 進捗状況を示すモードレスダイアログを作成 重い処理をAfxBeginThread()により別のワーカースレッドとして起動 モードレスダイアログは適宜タイマによって状況を更新 モードレスダイ…

CListViewにポップアップメニューを追加したけどON_UPDATE_COMMAND_UIが送られてこない件について

事象 CListViewにポップアップメニューを追加し、条件に応じてメニューのEnable/Disableを切り替えようとMFCの流儀に則りON_UPDATE_COMMAND_UIのハンドラを追加した。しかし、ポップアップメニュー表示時になぜかON_UPDATE_COMMAND_UIが来ない。 原因 CListV…

ダイアログバー上のエディットボックスから文字列を取得する方法

ダイアログバー上のエディットボックスから文字列を取得するのにちょっと苦労したのでメモ。 問題の背景 ダイアログを作る場合、通常はCDialog等を継承した、そのダイアログ固有のクラスを作成する。しかしMicrosoft曰く、CDialogBarは通常固有のクラスを作…

mozjpegをつかった画像変換ソフトの開発 その8

mozjpegを多並列で実行するGUIを備えた画像変換ソフト、無事Vectorにて公開。 www.vector.co.jp そのうち、英語版もどこかで公開予定だけど、どこにしよう?Vectorってどう見ても国内オンリーなのよね。英語ページを作れる気がしない。 2020/04/24追記 githu…

CDocumentからCViewを取得する一例

今時ドキュメントビューアーキテクチャなんて人は居ないだろうけど、メモ。 CDocumentからCViewにメッセージを投げたいときや関数を直接呼び出したいときに困るのが、CViewのアドレス取得方法。特に、自分はCSplitterWndを多用したためCViewが複数あり決め打…

CArchive::ReadString, CArchive::WriteStringの罠

CArchive::ReadString()とCArchive::WriteString()を使って文字列を読み書きしようとしたら文字化けしてハマったのでメモ。 以下のようなコードを書いたら、読み込み時に文字化けした。 void Serialize(CArchive &ar){ TCHAR path[MAX_PATH+1]; if(ar.IsStor…

リソースエディタがWS_EX_COMPOSITEDを認識しない

とあるリソースをVisual Studio2019で開こうとしたら、error RC2104: undefined keyword or key name: WS_EX_COMPOSITED というエラーが出た。 error RC2104: undefined keyword or key name: WS_EX_COMPOSITED でも、おかしい。このキーワードはWindowsに存…

スキャナ設定のメモ

Canon DR-M200でモノクロ原稿を読む場合の設定メモ。 基本 明るさ 画像処理 画質調整 MozJpegGUIの設定

mozjpegをつかった画像変換ソフトの開発 その7

mozjpegを使った画像変換ソフト、開発が一段落した。 以下に121個のpngファイルを処理した場合の例を示す。64bit版では約6秒で全ファイルの処理が終わった。 MozJpegGUI 64bit ver. example なお、32bit版と64bit版を作ったが処理速度は以下のように64bit版…

_RPTN, _RPTWN等をTCHARに対応させる

Visual Studioの出力ウィンドウに文字を出力する_RPT系関数は便利だが、なぜかTCHAR版が無い。 (_RPT系関数の参考) donadona.hatenablog.jp 仕方ないので、TCHAR版を作ってみた。なお、毎回_CRT_WARNを書くのが面倒だったので入力不要としている。別のもの…

CMultiLockの問題

Semaphoreの参照カウント数を知るために、カウント数を保持するクラスを作ってみたのだがうまくカウントしてくれない。原因を調べるために、CMultiLockのコードを読んでみたらびっくりした。Unlock()とかはCSyncObjectクラスのUnlock()を呼び出すようになっ…

CEventとCMultiLock::IsLocked

CEventとCMultiLock::IsLocked()の組み合わせでちょっと悩んだのでメモ。 CSemaphoreオブジェクトAのLock待ち中にAbortできるよう、以下のように組んだ。 悩んだのは、IsLocked()。Microsoftのドキュメントでは"Nonzero if the specified object is locked; …

Visual Studioのコード上で32bit用コードと64bit用コードを切り替える

Visual StudioにてC / C++のプログラミングをする際に、32bit向けと64bit向けでコードを変えたくなる場合がある。切り替え自体は当然#ifdefでやるのだが、どの定数で判定するのが良いのだろうか?以下、整理してみた。情報ソースはマイクロソフトの以下記事…

Visual Studioでクラスが登録されていませんというエラーが出る

Visual Studioのリソースエディタで、ダイアログのクラスを追加しようとして「クラスの追加」を選び必要事項を入力したら、「クラスが登録されていません」というエラーがでてしまった。 クラスが登録されていません 直接の原因はわからないが、適切なプロジ…

mozjpegをつかった画像変換ソフトの開発 その6

マルチスレッド関連の実装方法に迷いが生じたので、ちょっと考えを整理する。 ■やりたいことは何か やりたいことはスレッドからスレッドへの通知?いや違う。それは手段であって、目的ではない。やりたいのは、 処理Aが終了したあと、その結果を使う処理Bを…

SendMessage / PostMessageにかかる時間

SendMessageやPostMessageにてメッセージを投げてから受け取るまでにかかる時間を調べてみた。Ryzen3700X @ Windows10 Prof. 1909では、SendMessage: 20us, PostMessage: 34usだった。SendMessageのほうが早いのは、WindowProcedureを速やかに呼ぶかららしい…