2023/02/27

記憶力の低下がね~

 若い頃はとかって話をする時点で爺確定なんだけど、まあ、還暦までもう3ヶ月切りましたので否定はしない😃 未だにC#の事を勉強(?)しながらプログラミングしてるのですが、グーグル先生に沢山教えてもらっても直ぐに忘れる。で、またググるorz まあ、そんな感じなんでここに記録してるんですが、任意の型宣言で重宝するのがタプル型。これも少し前に覚えたんですが、この「タプル」って言葉が思い出せない。タプルに説明はあるが、なかなか重宝して使っているのに記憶に残らない。

2023/02/20

データベース構造の見直し

 現在進めているデータベース設計はもう1年以上前からなんですが、当初から問題はあったんですが、先に進める為に特に手を加えずにいました。フルセットアップ(1986年辺りからなのかな)で登録内容をステータスバーに表示させる為に処理毎にApplication.DoEvent()を呼び出しているので14時間程度掛かる処理で出来上がるデータベースファイルは57ギガバイトとかの巨大なものです。これを最適化する処理は3時間弱とかだった。

先週ふとオッズ関連の作業してて、今のまま進めるのは得策じゃないと判断し、オッズ及び票数のテーブル設計を変更する事にした。これまでは開発当初利用してたコードファーストでのデータベース作成の名残で親子関係を持つテーブル構成で設計してたんですが、これがデータベースへの登録処理で大きな負担になっている事は分かっていました。更にこの親子関連のデータ項目保持の為にデータベースファイルが肥大化してるんだとの認識もしてました。
親テーブルに基本情報を持ち、子テーブルに個々の目のデータを入れる設計なので、単勝だとまあ最大18頭分のデータが子テーブルに入るんですが、三連単に至っては最大4,896個ものデータがレース毎に入る訳でこの可変なデータを1つのテーブルに収めるのが良いのか悪いのかが、データベースファイルとして基本的な事を理解してると思い判断してたんですがsqlite3を信じて決断(笑)。3日程度掛かる変更作業を夜勤明けにこなして週末のレースには挑める様に終わらせました。まあ、日曜日のレースはWIN5の1レース目の予想中に気を失って気が付いたのは夕方の全レース終了後orz まあ、フェブラリーステークスも1番人気→3番人気→4番人気の固い決着だし、WIN5も5万円台の決着なんで、当然そんな固い予想はしないので結果オーライでした😁

修正後の高速セットアップ(Application.DoEventの呼び出しは最小限に抑える)では今まで2時間程度だったのが1時間40分で済みました。出来上がったデータベースファイルは12ギガバイト程度までダイエットが出来、最適化に要する時間が7分弱とか! 色々な動作が機敏になる副作用があり、手間暇かけたかいがありました。今後はこのバージョンで開発進める事に。

2023/02/15

SQLiteでのDBNull.Value.Equals(value)

SQLiteでExecuteScalarで値を取得する際に

var value = cmd.ExecuteScalar();
if (DBNull.Value.Equals(value))
{
    // 存在しない
}
else
{
    // 存在する
}

としても上手く判定出来ない?デバッグ作業で分かったのは

if (DBNull.Value.Equals(value)
{
    // 存在しない
}
else if (value == null)
{
    // null
}
else
{
    // 存在する
}

とすると「存在しない」ではなく「null」になる。これが現在利用している環境のバグなのか仕様なのか謎だな!

追記 2023.2.16 18:25
Windows 11 Pro 22H2 ビルド 22621.1265
Visual Studio Community 2022 Ver. 17.4.4
Sysrem.Data.SQLite.Core Ver. 1.0.116

2023/02/11

やばいな~

 八方ふさがりです。自分の器量が足りないのか、webViewで程々に理解して進められてましたが、AngleSharpとHttpClientではここ数週間スタックしてますorz 自分の無能さに疲れる。

webViewでは基本的な部分は抑えられてるかと思います。どうやって調べてどうやってそれを実装するか。AngleSharpにしてもHttpClientにしても単純にサイトを読み込むのは出来るのですが、ログインさせる為の処理はまっくた進展出来ない。

どちらが最善なのかも全く比べる段階にも至らないorz それがEncordingがネックになっているのか、そもそものインターフェースが理解出来ていないのか。本当にやばいです!

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でスタートラインに着けました。