投稿

Parallels Desktop + Windows11 のアクティベートで認証できない(0x80041014)

mac を入れ替えた(arm系)ため、新しい mac に Parallels Desktop + Windows11 をセットアップし、Windows をアクティベートしようとしたら 0x80041014 で認証できない ※プロダクトキーは、以前の mac(intel系) で Parallels Desktop + Windows11 を構成していたもの この場合、(物理的にもParallels的にも別だけど) Parallels 仮装マシンとして変更があったという位置づけで、プロダクトキーは使用中ということらしい ライセンス認証画面の「プロダクトキーの更新」 ではなく 「トラブルシューティング」の先にある「最近ハードウェアを変更しました」から Microsoft アカウントにログイン 後、以前使用していたマシン(今回の場合、以前の Parallels 仮想マシン)を選択すれば、アクティベート完了となった ちなみに、プロダクトキーは Win8 pro のもの(以前に Win11 pro として利用)で、今回の Win11 arm pro において、そのまま利用できました 参考 https://kb.parallels.com/jp/114051

Delphi で Generics で Interface なリスト IList

Delphi の Generics なリストを interface で作成したい 検索結果のリストを渡すとき等、リストそのものがインターフェイスじゃないので、受け取り側で TList<IHoge> の中身だけ、別のリストへコピーとかになってしまうわけです そこで IList<IHoge> みたいなのがあれば、リストそのものを代入すれば参照カウンタが上がって安全にかつ迅速に引き渡せるハズ 調べたら 型が IInterface に制約される System.Classes. IInterfaceList とかいうのがあるので、THoge(List.Items[I]) のように取り出し時にキャストしてやれば使えます ※リストは参照なので、受け取り側で変更すると受け渡し側へも影響ありです IInterfaceList で OKな方はここまでで完了 Delphi で interface のベースクラスは 「TInterfacedObject を継承してないと参照カウンタは実装されません」とかいう制約がある TList との 多重継承はNGなので、TInterfacedObjectを継承したクラスの中で TList 型の変数を持って、出入り口を作り直せとかいう事らしい(ChatGPTの回答もそれだった) 先程の IInterfaceList も private に FList: TThreadList<IInterface> とかいうリストを持ってました それって Count やら Items やら(無駄に)再定義して、使っていくうちにアレが足りないとかなりそうじゃないですか... ということで、TList をそのまま Itemプロパティとして外部に出してやるという手抜き実装 type IListGen<T> = interface function _GetList: TList<T>; property Item: TList<T> read _GetList; end; TListGen<T> = class(TInterfacedObject, IListGen<T>) private ...

eximoポイ活の「実質」とかいうのが無理すぎw

イメージ
DMでわざわざ送ってきた eximoポイ活の「実質」とかいうのが無理すぎて笑える データ無制限が 実質 2,780円(税別) その内訳が キャンペーン期間中(終了時期未定)に dカードで 50,000円以上買い物 家族3回線以上契約 ドコモ光 or home 5G(dカード ポイント対象外) dカードでドコモ料金支払い(dカード ポイント対象外) 無制限プラン利用で、条件達成のために ドコモ光や home 5G 契約というのは、食べ放題の割引のために食べ放題をもう一つ注文するような感じでしょうか dカードのポイ活そのものが、キャンペーン中のみで、ドコモへの支払い(携帯, ドコモ光, home 5G)は対象外 こんな悲しい条件を考えて、キャンペーンと大々的にDMや広告打って、ご苦労なことです まぁ、引っかかる人がいるからやってんだろうけど

FireDAC(Delphi) でSqlite の Integer(int64) が int32に変換されてしまう

FireDAC(Delphi) でSqlite の Integer(int64)型を取得すると、int32に変換されてしまう AsLargeInt プロパティで取得しても同じ Query.FieldByName('created').Value; Query.FieldByName('created').AsLargeInt; Query.FormatOptions のマッピング変更を行うことで、int64へ切り替え Query := TFDQuery.Create(nil); Query.Connection := FDConnection; Query.FormatOptions.OwnMapRules := True; Query.FormatOptions.MapRules.Add(dtInt32, dtInt64); 参考文献 データ型マッピング(FireDAC) FireDac query not reading large integers correctly

Delphi12 の複数行文字列がフォーマッタにより破壊される

Delphi12 で導入された複数行を書ける文字列を含むソースにフォーマッタ(Ctrl + D)を適用すると、文字列が破壊されてしまう フォーマッタ前 S := ''' INSERT INTO table_name (user_name) VALUES (:user_name); '''; フォーマッタ後 S := ''' INSERT INTO table_name(user_name)VALUES(: user_name); '''; 改行が詰められ、コロンの後にスペースが挿入されてしまう等 (何故か先頭行の改行はCRのみになる) SQLインジェクション回避のため、VALUEをコロンで始まるパラメータ指定している場合、意味が変わってしまうので注意(変数宣言の : スペースが適用される) フォーマッタの定義を変更するか(他で思うようにフォーマットされない可能性) "+" 演算子でつなぐしかない様子

sqlite3 で更新時に更新日時、削除時に連鎖削除のトリガー

sqlite3 で更新時に更新日時、削除時に連鎖削除のトリガーをメモ ▼更新時に updated_at へローカル時刻を保存 CREATE TRIGGER トリガー名 AFTER UPDATE ON 対象テーブル BEGIN UPDATE 対象テーブル SET updated_at = DATETIME('now', 'localtime') WHERE rowid == NEW.rowid; END ▼親テーブルのレコード削除時に、親idを持つレコードを連鎖削除 CREATE TRIGGER トリガー名 AFTER DELETE ON 親テーブル FOR EACH ROW BEGIN DELETE FROM 対象テーブル WHERE 連結フィールド = OLD.id; END

sesame が DFU process failed.:OP CODE NOT SUPPORTED と表示されてアップデートできない

sesame をアップデートしようとすると 「DFU process failed.:OP CODE NOT SUPPORTED」 と表示されてアップデートできない → 電池を抜いて再起動後に再度試みる