新規記事の投稿を行うことで、非表示にすることが可能です。
2023年02月24日
Lazarusで CPUIDで自分のPCのSSE対応状況を見る
SIMD命令を使ってみたくて、それには自分のPCでどのSSE/SVX命令に対応してるかどうか知る必要があります。
そこで書いてみました。結果、自分のPCは中古なのでSVX2まで対応でした。
それでも単精度の浮動小数点なら1度に8つの積+和が出来てしまいます。→ 実際にSIMD命令を使った関数
以下の使い方は GetSSE を呼び出すと列挙型が帰るので 使いたい命令があるかどうかは
if 使いたい命令 in GetSSE() then 〜
表示するなら対応する SSEname に文字列を用意しています。
昔にdelphiで作ったものを引っ張りだして修正したので sseに固執した名前付けだったり Lazarusなのにintelアセンブラ書式なのはご容赦下さい。
以下がGetSSE
そこで書いてみました。結果、自分のPCは中古なのでSVX2まで対応でした。
それでも単精度の浮動小数点なら1度に8つの積+和が出来てしまいます。→ 実際にSIMD命令を使った関数
以下の使い方は GetSSE を呼び出すと列挙型が帰るので 使いたい命令があるかどうかは
if 使いたい命令 in GetSSE() then 〜
表示するなら対応する SSEname に文字列を用意しています。
var i: TSSEMODE; s:string;
begin
s:=''; for i := low(SSEname) to High(SSEname) do
if i in d then s := s + ' ' + SSEname[i];
昔にdelphiで作ったものを引っ張りだして修正したので sseに固執した名前付けだったり Lazarusなのにintelアセンブラ書式なのはご容赦下さい。
以下がGetSSE
{$ASMMODE intel}
type
TSSEMODE = (sseSSE2, sseSSE3, sseFMA, sseSSE41, sseSSE42, sseAVX, sseAVX2, sseAVX512F, sseAVX512DQ);
TSSEMODEset = set of TSSEMODE;
const SSEname: array [low(TSSEMODE)..High(TSSEMODE)] of string =
('SSE2', 'SSE3', 'FMA', 'SSE41', 'SSE42', 'AVX', 'AVX2', 'AVX512F', 'AVX512DQ');
function GetSSE(): TSSEMODEset;
var iSZ, iDX, iCX, iBX: DWORD;
begin
asm
MOV EAX,0
CPUID
MOV iSZ,EAX
MOV EAX,1
CPUID
MOV iDX,EDX
MOV iCX,ECX
MOV EAX,7
MOV ECX,0
CPUID
MOV iBX,EBX
end ['EAX', 'ECX', 'EDX', 'EBX'];
if iSZ < 7 then iBX := 0;
Result := [];
if (iDX and (1 shl 26)) <> 0 then Include(Result, sseSSE2);
if (iCX and (1 shl 0)) <> 0 then Include(Result, sseSSE3);
if (iCX and (1 shl 12)) <> 0 then Include(Result, sseFMA);
if (iCX and (1 shl 19)) <> 0 then Include(Result, sseSSE41);
if (iCX and (1 shl 20)) <> 0 then Include(Result, sseSSE42);
if (iCX and (1 shl 28)) <> 0 then Include(Result, sseAVX);
if (iBX and (1 shl 5)) <> 0 then Include(Result, sseAVX2);
if (iBX and (1 shl 16)) <> 0 then Include(Result, sseAVX512F);
if (iBX and (1 shl 17)) <> 0 then Include(Result, sseAVX512DQ);
end;
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
2023年02月23日
Lazarusの文字化け対策
Lazarusの文字列はUTF8です。
そこにShiftJisを使おうとすると、最初の内はどうやっても勝手にUTF8になって文字化けして大変でした
windowsのコンソールアプリでwrite('漢字');でさえUTF8だから文字化けするのです
そしてShiftJisにいったん変換しても何かの呪いのように代入したり文字列連結すると文字化けする。
その仕組みがやっと分かりました。
LazarusのAnsiStringはコードページを変数内に持っていたのです。
そして文字定数はUTF8ですから文字列加算(連結)すればUTF8に変換されてしまう訳です。
そのあたりの細かい話をまとめてみました。
Lazarusの文字列変換
そこにShiftJisを使おうとすると、最初の内はどうやっても勝手にUTF8になって文字化けして大変でした
windowsのコンソールアプリでwrite('漢字');でさえUTF8だから文字化けするのです
そしてShiftJisにいったん変換しても何かの呪いのように代入したり文字列連結すると文字化けする。
その仕組みがやっと分かりました。
LazarusのAnsiStringはコードページを変数内に持っていたのです。
そして文字定数はUTF8ですから文字列加算(連結)すればUTF8に変換されてしまう訳です。
そのあたりの細かい話をまとめてみました。
Lazarusの文字列変換
タグ:文字列
2023年02月22日
確定申告
実際に成功した やよい白色申告で確定申告するまので手順はコッチ
以下は確定申告出来るまでの迷走と愚痴
私の現在の職業は農家だ。
200a程の米作りと冬場はブロッコリ なすびを栽培してる。
母親が高齢で様子を見る必要もあり、採算度外視という状況で完全な赤字事業。
米は個別販売でもしなければ農協を通せば機械代も賄えない。
ブロッコリーは単位時間あたりの売上は良いが私は毎年のように失敗してあまり稼げていない
なすびも5a程なので稼げていないブロッコリーよりもさらに少ないが夏場は忙しい。
よって確定申告もやよいの白色申告オンラインでJAバンクと連携させて 保険の控除とかややこしい事をしないでも赤字だからと オンライン申告で納税ゼロ円。
で、今年もやよいの白色申告オンライン確定申告操作をとマイナンバーを家族分入力したら、終わりと思っていたら、利用者識別番号と暗証番号を要求される。 利用者識別番号を知るには先にE-TAXにマイナンバーでログインしなければならない。 それをスマホでやろうとしたらE-TAXアプリは終了だからマイナポータルアプリを使えといわれて、その通りにしたら「データが変更されている可能性があります。再度ログインをして下さい。」でけっきょく繋がらない。
再度PCでICリーダーでE-TAXにログインして利用者識別番号は得られた。 が、マイページには何もない。電子申請したんだから名前とか住所くらい入っているべきだろうに。順に入力してゆくと チェックして出る画面で納税用確認番号 というのが設定出来るようなので、これが暗証番号かとやよい側に 入力してみたが、これも違うようだ。
再度 納税用確認番号 の所を見ると 納税用確認番号が消えているので また入力すると なんかエラーになってログアウトされたような画面。 ブラウザの戻るだけでもエラーになるので使い難い事、これ以上のものはないくらい。
というわけで まだ申告出来ていない。 とにかくページが重い。クリックにしても反応しない。 そして同じマイナンバーカードを受け付けるのにマイナポータルとEーTAXと申請先毎にアプリとブラウザへのインストールを要求される。
同じEーTAXなのに「受付」と「E-TAX」で別のセットアップが要求される。 管理者として実行が必要だからブラウザからエクスプローラーに戻らないといけない。で「E-TAX」の方は何度指示通りやってもインストールしろとはじかれる。インストール時間も結構長い。 結局 「変更等届出(個人の方用)利用者識別番号・暗証番号を忘れた方」を提出中という状況。これも「受付」の中からなら住所氏名年齢を入力しなくてすむのに外側でさせるからこうなる。
というか「受付」の中で暗証番号設定くらい出来るべきではないかと思う。
と書いた後で検索したら、出来るようだ。
しかし朝8時になると「ICカードリーダーで読み取り」の画面から先に進まない。 まあアクセスが集中するんだろうから仕方ないだろうけど。
結局 「ICカードリーダーで読み取り」ではなくスマホからのマイナポータルからQRコードを読み取ってログイン出来た。
以下は確定申告出来るまでの迷走と愚痴
私の現在の職業は農家だ。
200a程の米作りと冬場はブロッコリ なすびを栽培してる。
母親が高齢で様子を見る必要もあり、採算度外視という状況で完全な赤字事業。
米は個別販売でもしなければ農協を通せば機械代も賄えない。
ブロッコリーは単位時間あたりの売上は良いが私は毎年のように失敗してあまり稼げていない
なすびも5a程なので稼げていないブロッコリーよりもさらに少ないが夏場は忙しい。
よって確定申告もやよいの白色申告オンラインでJAバンクと連携させて 保険の控除とかややこしい事をしないでも赤字だからと オンライン申告で納税ゼロ円。
で、今年もやよいの白色申告オンライン確定申告操作をとマイナンバーを家族分入力したら、終わりと思っていたら、利用者識別番号と暗証番号を要求される。 利用者識別番号を知るには先にE-TAXにマイナンバーでログインしなければならない。 それをスマホでやろうとしたらE-TAXアプリは終了だからマイナポータルアプリを使えといわれて、その通りにしたら「データが変更されている可能性があります。再度ログインをして下さい。」でけっきょく繋がらない。
再度PCでICリーダーでE-TAXにログインして利用者識別番号は得られた。 が、マイページには何もない。電子申請したんだから名前とか住所くらい入っているべきだろうに。順に入力してゆくと チェックして出る画面で納税用確認番号 というのが設定出来るようなので、これが暗証番号かとやよい側に 入力してみたが、これも違うようだ。
再度 納税用確認番号 の所を見ると 納税用確認番号が消えているので また入力すると なんかエラーになってログアウトされたような画面。 ブラウザの戻るだけでもエラーになるので使い難い事、これ以上のものはないくらい。
というわけで まだ申告出来ていない。 とにかくページが重い。クリックにしても反応しない。 そして同じマイナンバーカードを受け付けるのにマイナポータルとEーTAXと申請先毎にアプリとブラウザへのインストールを要求される。
同じEーTAXなのに「受付」と「E-TAX」で別のセットアップが要求される。 管理者として実行が必要だからブラウザからエクスプローラーに戻らないといけない。で「E-TAX」の方は何度指示通りやってもインストールしろとはじかれる。インストール時間も結構長い。 結局 「変更等届出(個人の方用)利用者識別番号・暗証番号を忘れた方」を提出中という状況。これも「受付」の中からなら住所氏名年齢を入力しなくてすむのに外側でさせるからこうなる。
というか「受付」の中で暗証番号設定くらい出来るべきではないかと思う。
と書いた後で検索したら、出来るようだ。
しかし朝8時になると「ICカードリーダーで読み取り」の画面から先に進まない。 まあアクセスが集中するんだろうから仕方ないだろうけど。
結局 「ICカードリーダーで読み取り」ではなくスマホからのマイナポータルからQRコードを読み取ってログイン出来た。
2023年02月21日
ロータリーエンジンの曲線
前回、サイクロイド曲線によるポンプ曲線をJavaScriptで描いたので、ロータリーエンジンの曲線に挑戦してみました。
外側はトロコイド曲線 ですがローターは計算式で表現が難しい曲線です。
包絡曲線を微分方程式で解く方法もあるようですが、データを回転させながら地道に削ってゆく処理で得ています。
内側を固定して外側を回転させる図を用意しています
外側はトロコイド曲線 ですがローターは計算式で表現が難しい曲線です。
包絡曲線を微分方程式で解く方法もあるようですが、データを回転させながら地道に削ってゆく処理で得ています。
内側を固定して外側を回転させる図を用意しています
2023年02月19日
PascalコードをJavaScriptへ変換する補助機能
サイクロイド曲線とかトロコイド曲線を描くのにJavaScriptを使ったのですが、
回転変換が入りまくるのでPascalで検証してからJavaScriptに変換してるわけです。
変換といっても、短いコードなら簡単なのですが、長くなると結構厄介です。
特にPascalだと begin end を {} に置換する必要もあり一から書くのと同等かもしれません。
構造体を使うとJavaScriptに直すのに厄介だから配列だけにしてと工夫はしてるのですけどね。
LazarusにはPas2JS.exe という PascalコードをJavaScriptに変換してくれるツールも付いているのですが
全体をJavaScript環境で動くように変換してくれるため、一部のコードだけというのは逆に面倒。
それで1回目の作業でやってた置換作業を組み込んだツールを作りました。
begin end の置換の他 for while if と型定義を外してくれます。
自分のコードを変換する目的だから、それ以外の範囲には対応していません。
例えば、変換結果に対して 配列なら var a; と型定義が外れているだけなので var a=[]; と手直しが必要になります。
pascalだと変数定義を先頭でしてるのですが、それをJavaScriptに持ち込むと先頭に変数定義がならんで汚いので ローカル変数定義部は消して letを適当に入れるようにしています
まあwindowsのexeなので警告が出てexeはダウンロード出来ないかもしれません。
ソースも置いてあるので使いたい人はどうぞ。=>ClipBd電卓
回転変換が入りまくるのでPascalで検証してからJavaScriptに変換してるわけです。
変換といっても、短いコードなら簡単なのですが、長くなると結構厄介です。
特にPascalだと begin end を {} に置換する必要もあり一から書くのと同等かもしれません。
構造体を使うとJavaScriptに直すのに厄介だから配列だけにしてと工夫はしてるのですけどね。
LazarusにはPas2JS.exe という PascalコードをJavaScriptに変換してくれるツールも付いているのですが
全体をJavaScript環境で動くように変換してくれるため、一部のコードだけというのは逆に面倒。
それで1回目の作業でやってた置換作業を組み込んだツールを作りました。
begin end の置換の他 for while if と型定義を外してくれます。
自分のコードを変換する目的だから、それ以外の範囲には対応していません。
例えば、変換結果に対して 配列なら var a; と型定義が外れているだけなので var a=[]; と手直しが必要になります。
pascalだと変数定義を先頭でしてるのですが、それをJavaScriptに持ち込むと先頭に変数定義がならんで汚いので ローカル変数定義部は消して letを適当に入れるようにしています
まあwindowsのexeなので警告が出てexeはダウンロード出来ないかもしれません。
ソースも置いてあるので使いたい人はどうぞ。=>ClipBd電卓
タグ:パスカル JavaScript
2023年02月14日
学生の頃の夢 サイクロイドロータリー
学生の頃、専門は機械工学でした。
ロータリーエンジンに憧れまして、あれはトロコイド曲線なのですが、サイクロイド曲線の方が摩擦も少なく性能が良いものが作れるのではと妄想していました。
30年以上前に作っていたサイクロイドポンプ曲線を表示するツールを作り直して思い出に浸っています
上記の動いてるものはJavaScriptで作ったもの。
同じものやWindowsのexeは 作ったwindowsEXEの場所
こんな曲線を螺旋にして圧縮機と膨張を別にするエンジンとか
スポンジで作って掃除機を作るとか
お金があればやってみたいですね
2023年02月09日
ExFATで間違えて消したソースファイルの復活ツール作ったよ
購入した中古ノートのCドライブが容量偽装の話は前回書きましたが
そんなわけでSDカード上で作業をしていたのです。
でやってしまいました。 目が薄いせいで間違えて作成途中のソースファイルを消してしまいました。
Cドライブならゴミ箱もあるのですけどね。
それで マイクロソフトのwinfrも試してみたのですが ExFATだとテキストファイルは非対応のよう。
検索しても無償といいながら有償だったり 全体を一挙に復活するものばかりのようです。
FATの時代なら、デバッガーでファイルの先頭文字を書き換えたら復活出来たのにと思い
ExFATの消去したファイルのテキストをクリップボードにcopyするツールを作りました。
Lazarus(64bit)のソース付きです。 Lazarus(32bit)では動作が変とか デバッグモードで何かエラーが出るとか問題はあるようですが
とりあえず自分の目的は叶ったのでこれでOKかなと。
テキストファイル以外や文字コードが違う場合で動かない等はソース付きですから自分で対応して下さい。
↓
ExFATview
そんなわけでSDカード上で作業をしていたのです。
でやってしまいました。 目が薄いせいで間違えて作成途中のソースファイルを消してしまいました。
Cドライブならゴミ箱もあるのですけどね。
それで マイクロソフトのwinfrも試してみたのですが ExFATだとテキストファイルは非対応のよう。
検索しても無償といいながら有償だったり 全体を一挙に復活するものばかりのようです。
FATの時代なら、デバッガーでファイルの先頭文字を書き換えたら復活出来たのにと思い
ExFATの消去したファイルのテキストをクリップボードにcopyするツールを作りました。
Lazarus(64bit)のソース付きです。 Lazarus(32bit)では動作が変とか デバッグモードで何かエラーが出るとか問題はあるようですが
とりあえず自分の目的は叶ったのでこれでOKかなと。
テキストファイル以外や文字コードが違う場合で動かない等はソース付きですから自分で対応して下さい。
↓
ExFATview
2023年02月04日
購入したノートPCのSSDが容量偽装だった話
CドライブがSSDの中古ノートPCを購入して1か月。色々と開発ツールを入れたりしてCドライブの容量が半分を超えたころ04WebServerが起動しなくなったりLazarusのコンパイルが失敗するようになったり不具合が多発するようになった。
私は以前から中国製の激安SDとかUSB-SSDに騙され続けて・・いや楽しんでいたんだけどね。
だからこの現象には心当たりがある。
不要なLINUXとかアンインストールを繰り返して空き容量が半分以上となったとたんに動かなくなったアプリも動くようになり、不具合は解消した。
つまりはSSDが容量偽装状態となっていたのだ。
中国製の容量偽装SDもそうだが、実容量を超えない限りは問題なく使える。ほんと良く出来ている。
まあ意図的に容量偽装するなら半分というのは中途半端(中国製だと1桁は当然2桁も)だから、たぶん内部のアドレスラインの断線だろうと思う。
補償期間だけどSSDを交換となると それまでにインストールとか設定とかかけた時間と見合わない。
だからHDDは外付けで対応する事にした。
ただCドライブをそのまま使っていてまた同じような事になると問題だから実容量を超えない対策をする。
それは簡単でパーティションを半分にしてしまえばよい。
CドライブでもNTFSならそれは可能。
[コンピューターの管理]->[ディスクの管理]でCドライブのディスクの縮小を動作中に出来てしまう。
実際 2Tと表示されるが中身は32Gの中国製品でもこの手法で普通に使えている。
どうせSSDを交換してもどうせ壊れる。
HDDもSSDも壊れてほしくない時に壊れるもの。
だったらこうして時間を節約する方がよほどまし・・・・・と自分に言い訳しながら
私は以前から中国製の激安SDとかUSB-SSDに騙され続けて・・いや楽しんでいたんだけどね。
だからこの現象には心当たりがある。
不要なLINUXとかアンインストールを繰り返して空き容量が半分以上となったとたんに動かなくなったアプリも動くようになり、不具合は解消した。
つまりはSSDが容量偽装状態となっていたのだ。
中国製の容量偽装SDもそうだが、実容量を超えない限りは問題なく使える。ほんと良く出来ている。
まあ意図的に容量偽装するなら半分というのは中途半端(中国製だと1桁は当然2桁も)だから、たぶん内部のアドレスラインの断線だろうと思う。
補償期間だけどSSDを交換となると それまでにインストールとか設定とかかけた時間と見合わない。
だからHDDは外付けで対応する事にした。
ただCドライブをそのまま使っていてまた同じような事になると問題だから実容量を超えない対策をする。
それは簡単でパーティションを半分にしてしまえばよい。
CドライブでもNTFSならそれは可能。
[コンピューターの管理]->[ディスクの管理]でCドライブのディスクの縮小を動作中に出来てしまう。
実際 2Tと表示されるが中身は32Gの中国製品でもこの手法で普通に使えている。
どうせSSDを交換してもどうせ壊れる。
HDDもSSDも壊れてほしくない時に壊れるもの。
だったらこうして時間を節約する方がよほどまし・・・・・と自分に言い訳しながら
2023年02月02日
置き去りにされたwindowsシステムカラー
Delphiからだと思うが 色は24bitだがデータ幅は32bitなので 余る8ビットを システムカラーに割り当てておき
色設定にシステムカラーを使えるようにしている方式がある。
ところが、win10では相当数が未サポートとなり、コントロールパネルからシステムカラーを設定するツールも消えてしまった。「設定」で変更されるのはCOLOR_DESKTOPくらいだ。
ところで私も老人になり画面が白いとすぐに目が疲れてしまうようになった。だから出来るだけ色設定でダークにしてるのだが、古い32bitアプリの色が変更出来ない問題に直面。
32bitのころは windowsのコントロールパネルで設定出来るので、そんなツールの需要も無かったのか ほとんど見つからない。
そこで 今日、sysColorを設定するツールを作ってみた。
やってみると、Win10ではタイトルバーの色のように変えられない部分や、アプリによってsysColorに対応してない部分があることで 下手に固定にすると文字が見えなくなる問題があり、使うアプリによってsysColorを変える必要があると感じた。
32bitアプリをなくそうとでもしてるのかと勘繰りたくなる仕打ちだね。
とりあえず作ってみたので公開してみた。
https://urame.sakura.ne.jp/w/wiki.cgi?page=Win32SysCol
これから自分で使ってみるけど、今日はもう目が疲れた。
システムカラーを変更するとブラウザの表示にも反映する事がある。
このブログの編集画面がそう。COLOR_WINDOWが背景で COLOR_WINDOWTEXTが文字になってくれる。
しかしwikiの方は COLOR_WINDOWTEXTだけに反応するから COLOR_WINDOWTEXTをclWhiteにすると文字が見えなくなってしまう。
なかなか厄介な事になってるよね
色設定にシステムカラーを使えるようにしている方式がある。
ところが、win10では相当数が未サポートとなり、コントロールパネルからシステムカラーを設定するツールも消えてしまった。「設定」で変更されるのはCOLOR_DESKTOPくらいだ。
ところで私も老人になり画面が白いとすぐに目が疲れてしまうようになった。だから出来るだけ色設定でダークにしてるのだが、古い32bitアプリの色が変更出来ない問題に直面。
32bitのころは windowsのコントロールパネルで設定出来るので、そんなツールの需要も無かったのか ほとんど見つからない。
そこで 今日、sysColorを設定するツールを作ってみた。
やってみると、Win10ではタイトルバーの色のように変えられない部分や、アプリによってsysColorに対応してない部分があることで 下手に固定にすると文字が見えなくなる問題があり、使うアプリによってsysColorを変える必要があると感じた。
32bitアプリをなくそうとでもしてるのかと勘繰りたくなる仕打ちだね。
とりあえず作ってみたので公開してみた。
https://urame.sakura.ne.jp/w/wiki.cgi?page=Win32SysCol
これから自分で使ってみるけど、今日はもう目が疲れた。
システムカラーを変更するとブラウザの表示にも反映する事がある。
このブログの編集画面がそう。COLOR_WINDOWが背景で COLOR_WINDOWTEXTが文字になってくれる。
しかしwikiの方は COLOR_WINDOWTEXTだけに反応するから COLOR_WINDOWTEXTをclWhiteにすると文字が見えなくなってしまう。
なかなか厄介な事になってるよね