2023/02/05

Encoding

 自動投票機能の実装を始めたのが昨年10月。WebView2から始めて、ここ数週間はAngleSharpで足踏みorz AngleSharpは情報が少なくてグーグル先生に訊ねてもなかなか回答が得られませんでした。もしかするとAngleSharpは鬼門で皆さん使わないからなのかもと思い始めました。

Visual Studio 2022 Community Edition 17.4.4
AngleSharp 1.0.1
AngleSharp.Js 0.15.0
jint 2.10.4

この組み合わせでどうにか動作はする事までは確認出来んですが、あくまでも開発環境として確認出来ただけでコーディング方法が本家(?)のドキュメントみてもいまいちでした。環境は常に最新バージョンでそろえればってのはAngleSharpには当てはまりませんでした。これに気付くのに1週間以上掛ったかも。

くじけた訳ではないですが、AngleSharpでの続行は断念してみました。で、Microsoft本家の機能であるHttpClientで挑んでみようと数日前からグーグル先生を質問攻め。そもそもMicrosoftの解説通りに試してもエンコーディングのエラーが出たりして躓いて、ふと、もう1年以上前にJRA-VAN提供のJVData_Struct.csクラスが上手く動かなかった事を思い出しました。あの時は"Shift_JIS"でしたが、今回は"EUC-JP"。

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

を事前にしておかないと、Encording.GetEncoding().GetString()とかでエラーになったんですが、今回はresponse.Content.ReadAsStringAsync()でエンコードのエラーが出て1日悩んだ末にでした。これでやっとHttpClientでスタートラインに着けました。

2023/01/27

Microsoft Rewards 3回目

 前回2022/11/24だったので2ヶ月と3日で達成。デイリーストリークは173日。今回もぬかりなく続けられました。トータルで1,950円分のAmazonギフト券を得ました。Amazonではしょっちゅう買い物するので重宝します。継続は力なり!

2023/01/24

スクレイピング

 ここまでWebView2利用して進めてきたんですが、自分の技量が足りないのか苦労してます。単に入金処理だけでも未だに自分の思い描く動作が得られていませんorz まあ、そもそも根本的にインターネット周りのプログラミング経験がない。TCP/IPなんかのソケット通信は経験してたりしますがHTMLだとかJavaScriptなんかは基本的な事は分かります。でも、ほぼ素人レベルと同じかも。

で、先週色々と見ていて「スクレイピング」って言葉を初めて見かけ、AngleSharpでって事でグーグル先生のお世話になっております。別にネット上の情報収集したい訳じゃないので、どストライクな方法ではない気もしますが、自動ログインとかも出来そうなので情報収集しています。WebView2ではサイトがまあ見えている状態でごにょごにょして結果を得るので視覚的に分かり易いのですが、その分もっさりなのと、そのもっさりを待つプログラミングが適切に出来ていないのが原因な部分もありそうで難航してるので、少し踏み込んで行ける方法が見つかればと。

2023/01/06

複数テーブルからのデータ表示

 C#でのプログラミングもそうですが、Windowsアプリとか、プログラミング経験(言語ではBASIC,Pascal,FORTRAN,PL/I,HPL,C等)だけは長いけど(43~44年程)、プロとしてはもう30年近く前に引退し、趣味的に継続してるだけなので躓いてばかりです。個別のテーブルからのデータ表示ならDataGridViewで実装なんかもしてます。

今や悩んでいるのは大まかに3つのテーブルから日時でソートして一覧表示して観たい。なのでDataGridViewでは行毎に列の内容が異なるから使えない。あっ、まあ、主となるキーが日時なんで、そこは固定してそれ以外を大きな列に複数の情報を含むものにすれば可能かもですが見え方は微妙かなっと。内容に色付けとかして見やすくする為に表示にはRichTextBoxを使ってみようかとは決めてみた。

複数テーブルから取得したデータを格納してソート。その後にデータ種別で飾りながらRichTextBoxに書き出そうと思ってます。その格納方法で悩んでます。配列、リスト、ディクショナリーとかC#にはある感じですが、要素数が不定なので配列は不向き。リストかディクショナリーですが、ディクショナリーだとキーの重複が出来ない。なので日時でソートする上でキーは日時なんだけど、日時だけでは重複が確実に無いかは微妙かなって所が今検討中。ただ、キーを基にデータをって使い方はしないのでリストの方が適してるかな。文字列のリストとして文字列の先頭に日時を置いてソート時に使用して以降に諸々のデータを文字列として連結してRichTextBoxに書き出す時にそれなりの内容でってのがベストな気がしてきた。

もう少し検討してみます。

追記 2023.1.8 21:49
ディクショナリーで進めてます。キーはDatetimeで、バリューは3つのテーブルの必要な項目を含むクラスを定義して行けそうです😁

2023/01/04

Android-x86をVMwareの仮想マシンに入れてみた

 正月のお遊びでって事でもないが、実はこれって以前書いたPlaystation5のスクショなんかを手軽にPCに入れるって事で調べるとBlueStacksとかいうPC上のAndroidエミュレーターなのかな。これ入れてそれにPS App入れればみたいな話を見かけ、昨年暮れにBlueStacksについて調べてインストールを試みた。でも、これはそもそものインストールでインストール先変更に疑問があり中断。開発に質問のメールしたが普通に年末年始があるのか知らないが音信不通😅

で、その時に色々と調べている時に見かけたのがAndroid自体をPCにインストールって事で今回のAndroid-x86の話になる。で、早速ISOをダウンロードしてインストールしてみる。解説をグーグル先生を頼りに探して試みる。@ITの記事を参考に進めてみるが躓いた。記事を少し進んで読むとVMwareの仮想マシンのおすすめ設定なんかもあるので参考にすると良いのかも。自己流で適当に作成したら躓いたので真似してみた。で、更にインストールの説明で

  1. Advanced optionsを選択
  2. Auto_installationを選択
  3. Yesを選択
の後が問題。Reboot選択するとコマンドプロンプトになり、どうしていいのか不明。CDとかLSなんかのUnixライクなコマンドは使えるようだが全く進めない。で、ここで普通にRebootではなくRun Android-x86を選択すれば起動する。

で、更にここで日本語入力する為にPlayストアで「google」って入れてgoogle 日本語入力を探して入れるってのがねぇ。相当探しました。で、グーグル先生に確認すると既に提供止めてて今はgboardとかいうのがって話でした。

VMwareで仮想マシン立ち上げると相当待たされます。

画像貼り付けがなんか変になったけど修正方法不明orz


2023/01/03

VMware Workstation 17 Player

 新年早々元日に新バージョンがリリースされているのは発見。インストールまではしたんですが、仮想マシンの作成なんかは時間が取れずに先程からトライ中。まあ、当然の事ながら仮想マシンに入れるOSの選択肢に「Windows11 x64」があり以前書いたおまじないは不要です。ただ、動きはもっさりしてるので、その辺りのおまじないは相変わらず必要かもなのでOSインストール後にしてみます。インストールには正味30分程度で完了するのは有難いです。何時の頃のWindowsか忘れましたが普通に1時間以上掛かるのに何度かインストールし直しとかねぇ。もう、苦行でしかなかったです。

以前にも気が付いてはいましたが、Windowsをインストールして個人用に設定するにはマイクロソフトのアカウントでログインが必要です。普段使いのPC用にクリーンインストールのし直しとかなら良いんですが、仮想マシンは諸々のテストなんかで使いたい。それが実マシンにも反映される事を前回仮想マシン構築後にお試しソフトのインストールとかした時です。仮想マシンに入れたソフトが実マシンにも勝手に入って来て、何だ?ってなりました😅

仮想マシンのみばえ

まあ、取敢えず今回も仮想マシンはフルハイビジョンにしてみました。いや、これ、今作ってるアプリが一般的にどう見えるのかのテストにも必要なんで前から用意しようと。


2023/01/02

43NANO75JPAにBluetoothワイヤレスイヤホンのペアリング

 昨年9月にPCモニター用に購入して快適に使ってましたが、Bluetoothのワイヤレスイヤホンのペアリングが出来ずにアマプラの視聴では態々PC起動してPCにワイヤレスイヤホンをペアリングして視聴してました。昨年の大晦日に再度ペアリングに挑んでみました。

結果から書くとまあ普通に出来ました。まあ、取説とかそもそもあまり見なくなり自力で何とか使う努力する習慣からテレビの[設定]→[詳細設定]→[機器設定]→[外部デバイス]から[Bluetoothコントローラーの接続]するんだと決めつけて何度かしてたんです。で、ふと画面見ながら、そこに並ぶデバイスは全てテレビへの入力デバイスでテレビからの出力デバイスじゃない事にやっと気が付き、[設定]→[スピーカー設定]→[Bluetoothデバイス]がある事に気が付き、そこからペアリングすれば問題なくペアリングが出来ました😂

まあ、当たり前な気もしますが、ほんの少し違う見方でメニュー辿っていたので何で出来ないのか苦労しました。これで、アマプラの映画はPC無しで節電にもなるのでやれやれです。

KeyPreviewはあるがMousePreviewが無い

 元日はだらだらと生産的な作業はせずのんびりと過ごしました。が、今日からは気合入れて挑んでます。マウスの[進む][戻る]ボタン対応をアプリに実装する処理を考えてました。フォームのMouseDownイベントハンドラ追加しても、フォーム上のコントロールが置かれている場所では先にコントールのイベントに行くらしくフォールのイベントハンドラには飛んでこない。グーグル先生に聞くともう10年以上前から多くの方が悩んでるのが分かる。しかも、具体的な解決策はねぇ~orz

フォーム上に配置した全てのコントロールにイベントハンドラ追加すれば問題は解決するんだと思うが当然多くの方はスマートな方法ではないと判断して苦労している模様。まあ、そんな事はMSは関知せずかな。まあ、実装においてそれで実現しておけばしのげるのは確かかと。

private void RedirectMouseDown(object sender, MouseEventArgs e)
{
    Control control = (Control)sender;
    Point screenPoint = control.PointToScreen(new Point(e.X, e.Y));
    Point formPoint = PointToClient(screenPoint);
    MouseEventArgs args = new MouseEventArgs(e.Button, e.Clicks,formPoint.X, formPoint.Y, e.Delta);
    OnMouseDown(args);
}
これを定義しておいてフォームのLoadイベント内で
foreach (Control control in Controls)
{
    control.MouseDown += RedirectMouseDown;
}
ってすれば、まあ、取敢えず機能するっぽい。

追記 2023.1.3 10:39
新年早々甘かったorz 上記のControlsコレクションにはコンテナタイプのコントロールだと内部の物には適応されないです。なので再帰的に全てのコントロールを取得するメソッドを用意してイベントハンドラを追加する必要がありました。

private Control[] GetAllControls(Control tc)
{
    ArrayList al = new ArrayList();
    foreach (Control c in tc.Controls)
    {
        al.Add(c);
        al.AddRange(GetAllControls(c));
    }
    return (Control[])al.ToArray(typeof(Control));
}
としてフォームのLoadでは
Control[] allControls = GetAllControls(this);
foreach (Control control in allControls)
と修正する。

2022/12/31

グランツーリスモ7購入から1か月ちょっと

 PS5購入して直ぐに始めたGT7も現在提供されているメニューブックは完了してコレクションも本日最後の車が中古車で出たので完了。

ここかは地道に走ってCr.貯めて残りの空欄埋めていくだけかな? 残りの車にはたぶんCr.20億とかもあるので途方もない額が必要になるので気長に遊ぼうかと😜

ミッションは相当苦労しそうで、はなっからコンプリートは目指しません。オールゴールドで貰える車とか取れば必要になる額も減りますが、難題多くて気力が出ません。金策で走っているルマンのコースも車を色々と変えてます。

現在はスクリーンショットを取ってPS5でUSBメモリに入れ、そのUSBメモリをPCにって感じでしてるのが面倒な作業です。もっと手軽に出来ると助かるけど、まあ、なんかあるか調べてみようかと😉

2022/12/15

着せかえカーペット用ヒーター DC-3NK 3畳相当

 昨日夜勤明けに妻からLINEが入り、ホットカーペットが壊れたので寒いので早急に次をって頼まれたので帰宅後即amazonで検索してみると山善とかアイリスオーヤマとか1万円未満でありましたがここまでパナで十数年×2枚で...最初のは30年程前に、まあカバー付きで7~8万円した気がするけど違うかな~😒 こたつの値段と混同してるかもだけど、2枚目は記憶にない。まあ、ここまでハズレを引いてないので中国製ではあるが決めようとしたが、納期が数か月後っとorz まあ、別にamazonにこだわってないので楽天市場で検索するとあす楽対応でコジマ発見。即発注して宅配業者は佐川...ヤマトなら発注後に配達時間指定出来るのでってか、少し前には佐川も出来た時があったんだが、ここ最近はそのメールが届かない。不安もあったが今朝帰宅後確認すると既に配達に出ているにはなっていて午前10時前には届きました。

2016年9月に発売されてものらしいが、製品自体はまだ箱の中。箱には特に明記無く、製品には何年製か明記されてはいると思うけど。6年も前の製品とはねぇ。まあ、こんなの毎年新商品出す程気合入れてないとは思うが。また10年以上頑張ってくれれば文句はないかな。

¥14,485
-¥285(ポイント)
-¥700(クーポン)
支払¥13,500

2022/12/13

GT7金策: ル・マン24時間 レーシングサーキット

 

このサーキットで行われているWORLD TOURING CAR 700はPP700制限で時間30分となっていて最高報酬金額Cr.55,000,000です。クリーンボーナス込みだとCr82,500,000可能なんですが、そもそもリアルで40分弱連続でプレーが必要なので時間的な拘束は長いです。東京エクスプレスウェイで行われるGT-Rカップは10分程度でCr.12,000,000なので気軽にプレーが可能です。

使用する車はメニューブックこなしてエンディングまで行った後なのでどこで手に入れたか不明ですが(笑)既にガレージにあったトヨタ「86 Gr.B Rally Car」(ラリーカー)。IMタイヤとミッション購入して設定は

車高を前後最低の120mmにする。
最高速度300km/hにする。

レース展開としてはトータル7周するんですが、燃料が2周でガス欠になります。ガス欠状態でピットロードに侵入してタイヤ交換と燃料満タンしてピットアウトを繰り返します。最初の2周で1位に上がれますが、ピットストップで後退。また1位にしてピットストップ。3回のピットストップ後には最後の1周なので1位にしてゴール。

年末期限の招待状で合計Cr.800,000,000程度まだ必要なのでこの金策でも10回はこなす必要がある。しかし、それ以降もレジェンドカーの中にはCr2,000,000,000なんて途方もないものまであるので先は長いです。

追記 2022.12.14
最初はガス欠とかしましたが、慣れるとってか2回目以降は無駄に加速したりせずにやれば楽に勝てます。ただ、天候が厄介で雨が本降りになったりすると240km/h辺りで普通にふらついて危険です。敵車も苦労してる感じなので無理せずに行けば問題ないですね。

2022/12/12

DualSense 充電スタンド CFI-ZDS1J

 毎日の様にGT7に励んでます。ってのも、招待状が今月末で期限を迎えるのでその前に招待状が無いと購入出来ない車を買う必要があるので金策に苦労してます。諸々の攻略情報は修正が入ったりとかで使えないものばかり、トマホークに1億Cr.投資した後に修正の事を知る始末orz

まあ、そんなんで、コントローラーの電池の持ちが非常に悪く頻繁に充電しなきゃならないのですが、PS5に繋いで本体の電源が入っているかスリープ的な充電状態にする必要がある。で、色々とサードパーティ製品なんかも検討しましたが、純正品が高いと思ってたけど、ACアダプター付属している点でサードパーティー製では別途購入が必要なACアダプターを考えると断然安い事が判明し購入を決断してamazonにてここでも書いてるMS Rewardsで頂いた600円分のギフト券とdポイント2,537ptsで本日到着。ACアダプターのコードも十分に長いので問題なく設置。無事に1回目の充電も終えました。

2022/12/04

webView2で表示されている値の取得

 自動運転関連で、入力やボタン処理はまあ簡単に出来たんですが、入金処理後に残高がどうなのか表示しようかと、webView2内で表示されているものの取得をどうするのか...

入金処理があらかた出来た感じな書き込みをしたのが10月末なので実に1か月以上路頭に迷ってたんですねorz グーグル先生の限界だと判断し、なんと13年振りにMSDNフォーラムに質問投げてみました。質問投稿して仕事に行ってたので確認出来たのは仕事後に帰宅してからなんですが、実際には質問投稿からわずか2時間で回答して頂いてました😂

Java Script的には.textContentかinnerTextが正解なんだと思うけどinnerHTMLまで結果が同じなので判断は微妙