久しぶりにWMware入れてみようとダウンロードしました。ここ最近はPlayerが個人が無料で利用出来るって事で使ってたんですが、今はProも個人は無料😁 ちょっとビックリでしたが、まあ、ダウンロードしてインストール。
なんか随分スムーズになった感じがします。ちょっと遊んでみようかと思いますが、やる事もあるので程々に😉
自分の記録用
久しぶりにWMware入れてみようとダウンロードしました。ここ最近はPlayerが個人が無料で利用出来るって事で使ってたんですが、今はProも個人は無料😁 ちょっとビックリでしたが、まあ、ダウンロードしてインストール。
先日からちょいょいやらかしてます。夜勤明けに忘れたり、先週末はひたすらコーディングが気になり、すっかり忘れました。そんな訳で今のストリークが3だったりします😓 それでも継続は力? 本日Amazonギフト600円分頂きました。前回5月14日から49日での達成です。前回が40日での達成だったので大幅に伸びたのはやらかしてるからですね。でも、継続します。ああっ、楽天はもっと貯めないと交換出来ないので今回は諦めた。でも、今後は検討してみようかと思います。しかし、現時点で確認しても楽天は無くなってる。どうも不安定ですね。
頑張って書いてるんですが時間掛かってます。やる事が多過ぎて時短は厳しい😓
今後この画面にLightGBMやTensorFlow使った予測も入れ込めれば64bit化した恩恵が更に深まる。この辺りは優先的に進めたいと思ってます。特にTensorFlowの予測に期待しているので早い段階で使える事が確認出来れば学習も同時に進められるので効率も良いかも。
BIGって発売当初からほぼ買ってます。まあ、色々とね。これまで末等の数百円とかはありました。普通のBIGは確か末等の次は千円程度の当りもあったかとおもいますが、それなんかも当りって感じではなく、まあ、宝くじの下1桁的な感覚のものですよね。だって開始当初は今の数百円の末等は無く、千円程度が末等だった記憶です。でまあ、今回当たったのは、高額ではないのですが、
開発もしてますよ。
WinUI3のデータグリッドでは基本的にDataGridTextColumnを使いますが、文字の色や背景、ツールチップを追加等は派生クラスをいちいち定義するのが結局一番効率が良いのかな?例えばタイム型データマイニングだと
internal class DataGridTextColumnTimeDM : DataGridTextColumn { protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem) { Border border = new Border { HorizontalAlignment = HorizontalAlignment.Stretch, // セル内で均等に広がる VerticalAlignment = VerticalAlignment.Stretch, // 上下も均等に広がる Padding = new Thickness(5) // 適度な余白 }; TextBlock textBlock = new TextBlock { TextAlignment = TextAlignment.Center, // テキストを中央揃え HorizontalAlignment = HorizontalAlignment.Center, // 左右中央揃え VerticalAlignment = VerticalAlignment.Center // 上下中央揃え }; if (dataItem is RaceDetailInfo item) { textBlock.Text = item.TimeDM; // 現在のテーマを取得 var theme = Application.Current.RequestedTheme; // 文字色を変更 switch (item.TimeDMRank) { case 1: border.Background = new Microsoft.UI.Xaml.Media.SolidColorBrush(SaraD64Constants.BackColor1); textBlock.Foreground = new SolidColorBrush(Colors.Black); break; case 2: border.Background = new Microsoft.UI.Xaml.Media.SolidColorBrush(SaraD64Constants.BackColor2); textBlock.Foreground = new SolidColorBrush(Colors.Black); break; case 3: border.Background = new Microsoft.UI.Xaml.Media.SolidColorBrush(SaraD64Constants.BackColor3); textBlock.Foreground = new SolidColorBrush(Colors.Black); break; default: // その他 textBlock.Foreground = new SolidColorBrush(theme == ApplicationTheme.Dark ? Colors.White : Colors.Black); break; } // ツールチップ追加 ToolTipService.SetToolTip(textBlock, item.TimeDMToolTip); } border.Child = textBlock; // Border に TextBlock を含める return border; } }
ああ、現在のテーマチェックして一応ダークモードとライトモードで切り替えは自分でやる必要があるっぽい。まっ、テーマ的に全て色を統一してれば自動にって方法があるのかもですが、これまで色にあくまでも近い形にしたいので深く考えずに少しだけ考慮しておこうかと。ただ、実際自分はダークモードしか使わないので、一通り形になった時に念のためにライトモードは試してからリリースしなきゃだなぁっと。
まだまだ全然途中ですが、
滅茶苦茶堅そうだけど、まあ、グランプリだしちょっとだけ参戦😉
ああ、13年程度使ってきた三菱の冷蔵庫が...製氷機能がダメだ。まあ、この冷蔵庫は問題多過ぎで、買った時から気になってたけど、氷庫の裏側に氷が頻繁に落ちる。オフシーズンに氷をあまり使わないとカビが発生する。現在の三菱の冷蔵庫もこの氷が裏側に落ちるらしいので選択肢から排除。うちは元々パナで3台程度ハズレ引いたのでパナも除外してます。残るは日立か東芝か?悩む所ですが、東芝が気になるのは問い合わせ先。フリーダイヤルがあるんですが、携帯電話はナビダイヤル。以前もここに書いた気がするけど、このナビダイヤルに掛けさせる企業の姿勢が本当に疑問。こちらがかけ放題や無料通話アプリでもナビダイヤルは課金されます。なら、普通の固定電話番号を用意してくれた方がどうとでもなる。フリーダイヤルは携帯番号認識して撥ねられる。固定電話なんて既に解約済みです。時代にマッチしない企業にはあまり関わり持ちたくないんですよねぇ。
Windowsフォームアプリでは
var columnNames = new string[] { "umaban", "bamei", "kishu", "choukyosi", "tansho", "fukusho", "bataijyu", "mark", "chaku" }; var columnHeader = new string[] { "馬番", "馬名", "騎手", "調教師", "単勝", "複勝", "馬体重", "印", "着順" }; var columnWidth = new int[] { 30, 201, 88, 88, 60, 130, 60, 30, 30 }; for (int i = 0; i < columnNames.Length; i++) { DataGridViewColumn tbCol = new DataGridViewTextBoxColumn(); tbCol.Name = columnNames[i]; tbCol.HeaderText = columnHeader[i]; tbCol.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; tbCol.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; tbCol.ReadOnly = true; tbCol.SortMode = DataGridViewColumnSortMode.NotSortable; dgv.Columns.Add(tbCol); dgv.Columns[columnNames[i]].Width = columnWidth[i]; }
って感じでC#で定義してたりしました。素人的にWin UI3でデータグリッド使うにはxamlで
<Grid Grid.Row="1"> <controls:DataGrid x:Name="RaceDetailGrid" AutoGenerateColumns="False" HeadersVisibility="Column" CanUserResizeColumns="False" SelectionMode="Single" RowHeight="30" CanUserSortColumns="False" > <controls:DataGrid.Columns> <controls:DataGridTextColumn Header="馬番" Binding="{Binding Umaban}" Width="60"/> <controls:DataGridTextColumn Header="馬名" Binding="{Binding Bamei}" Width="200"/> <controls:DataGridTextColumn Header="服" Binding="{Binding Fuku}" Width="80"/> <controls:DataGridTextColumn Header="騎手" Binding="{Binding Kishu}" Width="120"/> <controls:DataGridTextColumn Header="調教師" Binding="{Binding Chokyosi}" Width="120"/> <controls:DataGridTextColumn Header="単勝" Binding="{Binding Tansho}" Width="80"/> <controls:DataGridTextColumn Header="複勝" Binding="{Binding Fukusho}" Width="140"/> <controls:DataGridTextColumn Header="馬体重" Binding="{Binding Bataiju}" Width="100"/> <controls:DataGridTextColumn Header="印" Binding="{Binding Mark}" Width="60"/> <controls:DataGridTextColumn Header="着順" Binding="{Binding Chaku}" Width="80"/> </controls:DataGrid.Columns> </controls:DataGrid> </Grid>
としてみてたのですが、今後こんなの増えてくるとってのと今回カスタム列タイプも試したのでその為にもスマートに定義が出来ればと思い、Copilotに質問ぶつけて得た方法は
public class DataGridColumnDefinition { public string Header { get; set; } public string BindingPath { get; set; } public int Width { get; set; } public string ColumnType { get; set; } // 列の種類を文字列で管理 }
として定義用クラスを用意し、
private void DesignRaceDetailGrid(DataGrid dataGrid) { var columnDefinitions = new List<DataGridColumnDefinition> { new DataGridColumnDefinition { Header = "馬番", BindingPath = "Umaban", Width = 60, ColumnType = "Text" }, new DataGridColumnDefinition { Header = "馬名", BindingPath = "Bamei", Width = 200, ColumnType = "Text" }, new DataGridColumnDefinition { Header = "服", BindingPath = "Fuku", Width = 80, ColumnType = "Text" }, new DataGridColumnDefinition { Header = "騎手", BindingPath = "Kishu", Width = 120, ColumnType = "Text" }, new DataGridColumnDefinition { Header = "調教師", BindingPath = "Chokyosi", Width = 120, ColumnType = "Text" }, new DataGridColumnDefinition { Header = "単勝", BindingPath = "Tansho", Width = 80, ColumnType = "Text" }, new DataGridColumnDefinition { Header = "複勝", BindingPath = "Fukusho", Width = 140, ColumnType = "Text" }, new DataGridColumnDefinition { Header = "馬体重", BindingPath = "Bataiju", Width = 100, ColumnType = "Text" }, new DataGridColumnDefinition { Header = "印", BindingPath = "Mark", Width = 60, ColumnType = "Text" }, new DataGridColumnDefinition { Header = "着順", BindingPath = "Chaku", Width = 60, ColumnType = "Text" }, }; foreach (var column in columnDefinitions) { DataGridColumn dataGridColumn; switch (column.ColumnType) { case "Text": dataGridColumn = new DataGridTextColumn { Header = column.Header, Binding = new Binding { Path = new PropertyPath(column.BindingPath) }, Width = new DataGridLength(column.Width, DataGridLengthUnitType.Pixel) }; break; default: throw new InvalidOperationException($"未対応の列タイプ: {column.ColumnType}"); } dataGrid.Columns.Add(dataGridColumn); } }
定義しやすさとメンテしやすさと思ってしてみました。
自分自身も期待している部分もあるのでちょっとだけ頑張ってはいるんですが、例えば、アプリの終了です。こんなのこれまでWindowsアプリだろうと、言っちゃえばDOSや他のOSなんかでも普通に終了的にすれば問題無いのに、Win UI3だと違うっぽいです。これで昨晩かなり時間を費やしました。
基本的にWin UI3なら
Application.Current.Exit(); // アプリケーションを終了
とすれば良いってCopilotとかに言われてしても、終了時にエラーが出るしまつorz まあ、そんなのはいつもの事なので、更に突っ込んだ質問ぶつけてもなかなか良い回答は得られずでしたが、結局の所
Process.GetCurrentProcess().Kill(); // アプリを強制終了
とすれば、一応エラー無しで終われる事を確認しました。が、なんでそんな事に時間費やすんだろうって疑問はねぇ^^; まあ、なにやらリソースが解放されてないのがって事ではって話だが、そんなの勝手に処理しろよってね。でまあ、
定義的な話は別として、JRA-VANの有料サービス契約してJV-Linkを使ってデータ取得するのは基本なんです。自分が感じた感覚的な話ではありますが、JRA-VANはソフトウェア開発においては素人の集団でほぼ役に立たないJRAからの天下り的なメンバーなんだと感じます。いや、あくまで外野の感じたフィーリングからなので、実際にはどうなのかは知りませんのであしからず。
そんな事は別にしてJRA-VANが提供するData Labのデータ提供を活用してデータ取得するにはJV-Linkの利用を強要してるのは既成事実。これが32bit環境を強要しているのも事実。何度かここでも書いてますが、AutoMLやLightGBM、多分TensorFlowもなんだと思いますが64bitを要求してます。で、Data-Labの提供データを利用するアプリとしては32bitに制限されるので、ここまではアプリ本体を32bitで行いData-LabのデータをSQLiteに蓄積して利用する方向で、64bitが必要な部分に関しては外部プロセスとして連携する事で実現してきました。
最近やってた事はTensorFlowでの機械学習なんですが、これの実装でまた外部? もう外部多過ぎだよねぇっと考えて、単にJV-Link経由でデータ取得する部分のみ32bitで外部プロセスとしておけば、残りのアプリ本体は64bitで行けるんじゃないかって話です。
で、ここまでWindowsフォームアプリの開発してきました。これってそもそもの始まりは、多分Visual Basicなんだと思います。MS-DOSの時代にMS-DOSに乗せる形で起動してたWindows Version 2.1辺りとかまではアプリ開発も非常にハードルが高く、Cなんかで苦労して色々する所を、記憶的には曖昧ですが、Windows 95辺りでMS-DOSから独立(?)して単独なOSとして動くようになり、アプリ開発をビジュアル的な行える様にしたのがVBの始まりだったと思います。これに慣れているとWin UI3とかでって本当に原始的? この辺りは流石MSです(笑) 最先端OSのWindows 11的なアプリにはWin UI3を使う事でって事の様なんですが、これが本当に地味なもので、ここ最近は何度もトライして挫折の繰り返しorz ただ、今回はちょっと本腰入れての取り組みなので今日も1日やってました。
思う所があり、今ならまだ間に合う? いや、年齢的にね、ここで気合い入れればまだやり遂げられる? JRA-VANのJV-Linkの64bit化について公式は相変わらずの無反応。諸々が64bitでないと動かない為に外部プロセスとして実装試みてきましたが、これが間違った対応だったんじゃないかと思えてきました。JV-Linkを使ってデータ取得する部分は確かに32bitでなければ動きませんが、その取得したデータを64bitのアプリに渡す32bitの外部プロセスを作って64bitアプリから利用するって考えれば、全てがスムーズに行える様に思えてきました。
まあ、64bit化してアプリを作り直すならWindowsフォームアプリではなく、最近のWindows11的なアプリにしていく必要があるかなぁって事でWin UI3になる訳です。これまでにも何度かWin UI3はいじってみたのですが、Windowsフォームに比べたら、まあ所謂Visualって事ではなくコード書くんかい!ってなものね。これが本当に面倒な気がしてますが、楽に開発出来ないのか知りたいです。なので、まっさらな状態からやる事になるので、しばらくは「さらだ」の開発は「さらだ64」目指すので頓挫する可能性もありますし、ちょっと時間頂く事になるかと思います。ってここに書くのも微妙ですが、サポートサイトに書いちゃうと確定事項的に後戻りも出来なくなる気がするので、あえてこちらに書きます。ユーザー様の何人かはこちらにも着て頂いているかと思うので😅
朝から色々やってたら、結局Win5の締切に間に合わずですが、まあ、当たらんから良いか(笑)