人気ブログランキング | 話題のタグを見る

体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ
AutoHotKeyで、ウィンドウがある特定の状態になった事を検出し、それに合わせてキーを送信し、自動処理を行う。

通常はスクリーン全体の任意の位置にある画像と同じイメージが検出されたら、処理を行う。

ImageSearchという命令がAutoHotKeyに用意されているが、これは確実ではない。

なぜならピクセルで一致する程度を見ているが、パラメータで不一致度が変えられるにもかかわらず、ほぼ一致していないと失敗するためだ。

Windows11では2023/11/3現在、WindowsUpdate毎にGUIが変化している。
画面のアンチエイリアシングやフォントの描画、ボタンなどのWindowsコントロールの形や色がわずかに変化しているからだ。

その影響を画像イメージも受けていて、アプリの画像であっても、Windowsイメージコントロールの上に描画しているため、影響を受けてしまう。テキストコントロールもClearTypeやOpenTextなどの描画が微妙に変化する。

しかし、テキスト文字列自体はどんなにGUIが綺麗になっても変化しない。

そのため、次の命令が有効で、なおかつ簡単で、性能も高い。
WinActive([WinTitle,WinText,ExcludeTitle,ExcludeText])

この命令が真を返せば、任意のウィンドウが表示されていることがわかる。

必要なのは、WinTextまでの部分なので、次のようになる。
if WinActive("ウィンドウのタイトルバーの文字","画面のテキスト")

これはAutoHotKeyのツール、WinSpyで取得できる。

例えば、
今開発している、RFO-BASICのAPK作成アプリの実行を自動化する。

画面は3つあり、
①プロジェクト選択画面
②APKビルド中画面(ビルド終了後自動的に③へ)
③APK完了画面

この②と③を検出して、自動化する。

WinSpyは、右上のチェックボックスをはずし、マウスクリック時の情報のみにする。

②の様子
[AutoHotKey v2] ウィンドウ画面が任意の状態になった事を\"確実に\"検出する [Windows 11] (11/3)_a0034780_18254152.png

APKビルド中は、右画面のように「Creating~」と表示されている。
ウィンドウタイトル文字列は、左WinSpy画面の上の赤枠の「Quick APK v2016-07-27 based on RFO-BASIC! v01.88.01」、
ウィンドウのテキスト文字列は下の赤枠の「Creating~」。

※WinSpy画面の最も下のAll Textでは、隠れた文字列まで表示される。

なので、
if WinActive("Quick APK v2016-07-27 based on RFO-BASIC! v01.88.01","Creating")
で検出できる。

同様に、③の様子は
[AutoHotKey v2] ウィンドウ画面が任意の状態になった事を\"確実に\"検出する [Windows 11] (11/3)_a0034780_18254667.png
このようになっている。

従って、
if WinActive("Quick APK v2016-07-27 based on RFO-BASIC! v01.88.01","Congratulations")
で検出できる。

このように②を検出したら③が検出されるまで待ち、③が表示されたら、任意のボタンを押す(ここでは4番目のボタンを押すと①に戻る)とすれば、ビルドの完了を自動監視してくれる。

実際には、③表示時にブザー鳴動し、タブキーを4つ、Enterキーを1つ送って①に戻るように組んでいる。

これで、Windowをスキャンする対象が画面イメージの重い処理でなく、ウィンドウタイトルとその内部文字列という、軽い処理になり、常駐するスクリプトがCPUに高負荷を与えないかつWindowsUpdateに影響されない、確実な処理となった。



# by k1segawa | 2023-11-03 18:45 | 仕事効率化 | Comments(0)
現在8時間労働が普通だが、これだと通勤や家事のために割く時間を含めると、労働後の疲れで何か新しい事や複雑な事をやる気が起きない。

これでは会社と家の往復しか出来なくなり、社会参加の機会が削られてしまう。

しかしもし週3日6時間の18時間/週の労働になれば、自由な時間が増え、趣味や友達との関わり合いさらには地域への貢献などに参加する事が出来る。

今は、65歳まで働いて異性との接触も、社会常識や生活していく上の知識も身に付けなかった大人が、急に会社から放り出されてまるで子供のようにオロオロしている状態だった。

しかし、会社で働きつつ、自由時間が十分にあれば、会社から放り出されても、きちんと余裕をもって生活していけるだろう。
昔の人は50歳が寿命で、今よりもずっと大人びていたし、それで人生に満足していた。

つまり、満足した人生ワークライフバランスが取れていれば、寿命は短くても、人生は充実する。
もちろん昔の人が楽をしていたわけではないが、短い人生だから、それなりに満足して生を全うしていただろう。

すると、現在の社会がAIやロボットなどで、サービスの質を落とさずに、人間が短時間労働で社会を支えられるようになれば、定年が65歳より短くなっても、人生は充実する。

人生が長すぎるとは思わないが、今の老々介護など長く生きていても充実しているとは言えない。

もし、AIによって定型のサービスなどが人の手を離れ、クリエイティブかつ緊急な作業以外を置き換える事が出来、それで労働人口が十分となれば、人々は働く事より生活を充実させることに重点を置く様になり、早い定年でも納得する。

すると、普段から納得した人生を送っていれば、「個人」が長命な事は重要では無くなって、年金や健康保険が低く抑えられ、人生で大事なことに注力していく。
結果的に老齢期が短くなり、少子化は異性との出会いが増える事で少し上向くだろう。

AIが定型のサービスに対応できるようになり、労働人口を支え、人間はクリエイティブな作業に集中でき、時間も短くなる。

AIが画像認識や音声認識で人間の指示を理解できるようになりつつある。

職人の知恵や繊細で複雑な作業はAIに学習させ、一部の人間のみ特化する。

普通の人間はAIのサポートを受け、職人の知恵を参考に、平均的な作業を行う。その作業はどんどん短時間化されていく。

長命な人生を必要としない人間は、今の年金健康保険制度全般の国家的負担を少なくし、それでも長命な人生を送りたい高所得者は自費で医療を長期間受ければよい。

少子高齢化は、AIとその手足のロボットによる短時間労働社会の実現によって(長命であることが重要視されなくなり主に高齢化が)解決する。


P.S.
きっかけとなった動画が別の意味でまとめられてた。

# by k1segawa | 2023-10-27 21:23 | Comments(0)
PCでBASICをAndroid向けに書いてて、複数行のインデント変更がメモ帳なため大変で、エディタの導入をする。
viが一番慣れてるのでWindowsのviを物色。

NeoVimというのが活発で、今本家と言えるのがvim。

ウィンドウ独立で、Windowsコマンドプロンプト上で動かすのではないものが欲しかったので、vimをまず選択。

すると、Windows 11メモ帳でずっと編集してたせいか、欧文の文字幅が結構広いのが好みだった。

しかし、vimでは日本語フォントがdefaultでMSゴシックだったので、これをBIZ UDゴシックに変更。

vimではフォントが1種類しか指定できないため、日本語フォントに含まれる欧文フォントが細く、メモ帳のような別のフォントに出来ない。

仕方が無いので、行間を空ける。

set linespace=4

これで少しはデザイン的に良くなった。

set系でguifont,guifontwideは

set guifont=BIZ_UDゴシック:h10:cSHIFTJIS:qDRAFT
set guifontwide=(なし)

と指定。2種類設定できるようだがメインしか設定できないようだ。

文字幅でambiwidthがあるが効かない。

さてあとは文字色だがコメントが薄暗く夜に見ると沈んで良く見えない。
これは後回し。

NeoVimも入れてみた。

Windows 10のコマンドプロンプト上で、

nvim

で起動する。

コマンドプロンプトのフォント設定に従うようで、こちらもBIZ UDゴシックを選択。

文字幅のambiwidthが設定できるが、singleにしても特に変化はない。

行間のlinespace や guifont(wide)も特に変化しない。

vimでは:shでコマンドプロンプトが起動したが、NeoVimではコマンドエラーになる。

あと、nvim-qtでウィンドウ独立で起動するが、フォント関係が未設定なためかアンチエイリアシングが効いてない。
.virc(.vimrc)みたいなのはどこに書くのかな。



# by k1segawa | 2023-10-25 09:52 | 仕事効率化 | Comments(0)
前回の現在時刻はきちんと動いたが、題目の通り動かないものもあるようだ。

まず、sampleのGPS。
インタープリタ上では動くのに、APKでは落ちる。

これはJavaで変換しているから、Android 10の実機のAPI29ではAPIの使い方が変化しているのだろう。2019年のAndroid 9以上対応だからな。
また、画面が横長に回転する。そして文字が大きくてはみ出す。

これもAndroidのバージョンが新しいから、必要なAPI(画面の向き設定やフォントサイズ)を呼び出してないのだろう。
これは画面回転アプリをインストールして、縦画面に固定すればよく、フォントも設定サイズを下げれば修正可能か。
GPSはインタープリタとAPK、どこで落ちているか比較(後回し)。

次に、オンラインマニュアルのGraphics。
サンプルの、
GR.RENDER
PAUSE 2000
がないと、表示されない。

これはBASIC画面にすぐ戻ってグラフィック画面を消してしまうから。
PAUSE中はキーも効かないので、少し工夫が必要だ(0.5秒毎にPAUSEしてキーを見るなど)。
気が付かないわー

最後に、BASIC画面ではフォントは変えられないし、全画面表示しかない。
これは仕方ない。だからグラフィック画面に表示して、フォントもグラフィック画面のテキストしか変えられない。ベースフォントも変えられたらいいのに。ちなみにソースに日本語入れてBASIC画面に表示はできる。

まあ、マニュアルやサンプル読んで、試行錯誤する手間はあるが、それほど旧仕様で出来ないという事もない。
めんどくさがり屋には無理かな。

コメント1行が先頭!で途中からのコメントは%。!だと落ちる!!。ブロックコメントが!!。APKツールも新しいファイルは真ん中下のRefreshボタンを押さないと出ない。

x-ploreでAPKが表示されない時日付降順にして、親フォルダBASICを閉じて再度開かないと新しいAPKが表示されない。上書きインストールする。BACKキーで戻ってアプリ終了。

RFO BASICは、コマンド引数に数式が使えない事がある。その場合変数に代入してその変数を使う。コマンドの第一引数にオブジェクトがある場合、適当な変数を書くが、その変数は消去、再表示に使う。

フォントはデフォルトで白抜きになるのでGR.COLORの第5引数を1にするなんて絶対わからない(塗りつぶし省略時のデフォルト0はおかしいだろ)。

最後にPAUSE終了後BASIC画面が表示されてしまう。すっきり終わるならGraphic.basの末尾のUNTIL(余計な明滅-ブリンク処理も入ってるが)必須。
コメントの意味はPAUSE後、BACKキー押下が入ると、その後ループのGR.SHOWやHIDEにそのまま進んで、BACKキーでグラフィック画面が終了してるのに、SHOWやHIDEしようとしてエラーになって、ONERROR文に飛んでENDがBASIC画面まで終了させるかららしい。なんてトリッキーな。

なので、最後のPAUSEは、
DO
PAUSE 500
UNTIL 0
で、末尾に、
ONERROR:
END
と書く。


More
# by k1segawa | 2023-10-08 19:38 | BASIC | Comments(0)
さて、前回で環境の作成と、一通りのプログラム作成実行方法まで記述した。

まとめると、
■条件■
Windows (今回は11 Home)
Android スマホ
APK実行はAndroid 9 以上
PCにJavaインストール
エディタはメモ帳
PCとスマホ間はスマホにx-ploreインストール
PCは共有設定(下記のBASICフォルダ)

※共有設定は、次のサイト様の「手順3 共有オプションを有効にする」が参考になる。
※つづいてフォルダの共有は、次のサイト様の「ステップ(2)フォルダ側で共有設定をONにする」が参考になる。
※x-ploreのLANサーバ設定(共有PC接続)は次のサイト様の「LANサーバ追加」が参考になる。
■環境■
インストール:
C:/Program Files (x86)/RFO-BASIC! Quick APK
ソース:
C:/Users/<ユーザ名>/Documents/BASIC(ユーザの任意)/rfo-basic/source
APK:
C:/Users/<ユーザ名>/Documents/BASIC

■手順■
1.PCでソース作成
2.APK作成ツールでビルド
3.スマホのx-ploreでPCのAPKフォルダを開く
4.APKをタップ
5.選択で、インストール、開くをタップ
6.実行結果を見る

■参考■
・スマホにもRFO-BASIC!をインストール。ロードで、サンプルソースを読む
・PCでRFO-BASIC!のマニュアルをダウンロードして読む

オンライン
Basic/assets/rfo-basic/source/Sample_Programs at master · RFO-BASIC/Basic · GitHub
RFO-BASIC! Manual

基本、PCの前でプログラムを書いて、APKビルドして、スマホでインストール実行

もちろん、スマホでもプログラムは書けるが、狭い画面で、キーボードも出してより狭くなって、参考ページもスマホで開いて、となる。
ある程度書けるようになってから、PCの前に行けない時にちょっとだけ修正や試しで作成時しか出来ないな~

実際の様子===================

1.メモ帳で時間表示プログラム作成
・PCでマニュアル開いてTimeを検索

print time()

Clock.basで保存

2.APKツールを実行
・プロジェクト Clock を、右クリックでBuild選択(記事5.再ビルドの画面で一時停止)
・スマホのx-plore実行・PCのAPKフォルダ開く
・Clock.apkタップ
・インストールボタン、開くボタンと2回タップ

3.実行結果
なんか数十桁の数字が表示

4.デバッグ
・マニュアルを読んで、システムの時間をミリ秒で表示している事を確認
・マニュアルで探すがよくわからんw
・PCで"RFO BASIC 時刻"で検索
・日本語サイトで実例はサンプルプログラムにあるとの指摘

◎スマホのサンプルプログラム(スマホのRFO-BASIC起動、メニューでロードを選択、sample-time.basを選択)の実行。
[BASIC] RFO-BASIC! Quick APK で 現在の時刻 [APK化] (10/8)_a0034780_14293271.jpg

・メニューでエディタを選んでソースを読む
・print time()ではなく、

time y$,mm$,d$,h$,m$,s$
print h$;":";m$

と認識

Clock.basをそのように編集・上書き保存

5.再ビルドに戻る
・APKツールの4つ目の「convert another program to apk」ボタンを押す
[BASIC] RFO-BASIC! Quick APK で 現在の時刻 [APK化] (10/8)_a0034780_14255697.jpg
6.2のAPKツールを実行(ビルド)へ戻る

7. 正しく「13:43」と表示

かな~


More
# by k1segawa | 2023-10-08 14:32 | BASIC | Comments(0)

by k1segawa