tag:blogger.com,1999:blog-13306666989704237282025-01-19T20:06:35.245+09:00won't fixLife with Web Browser Engine (Gecko, WebKit and etc), Mobile and etc.Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]Blogger380125tag:blogger.com,1999:blog-1330666698970423728.post-79406183002279677272025-01-12T15:38:00.003+09:002025-01-12T23:39:20.818+09:00HiFive Premier P550を手に入れた<p>SiFive P550というコア使ったHiFive Premiver P550というボードを入手した。メモリ16GBが日本円で約60000円強。前買ったUnmatchedはドルだと$250高かったけど、円的にはそんなに変わらず。円安...</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizaJV9avlU39Knu3jHC2u9zYVMfRmZAZV2_LdZhOhsXT3rVJMOlGvar1YP273om1QRp3DYpkw0_zHLVq-5dO5BIosr3Gg4KzNigBiqiWsLJ9RysG6m2S9D9slxFUr_KCj0HP7jaHMEB30KsXs-kyUelfnqoOqfIjUBAWMJLpV1A0bAV0W1J8aM5ZnTsi4m/s3611/PXL_20250110_111734728~2.jpg" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" width="400" data-original-height="3185" data-original-width="3611" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizaJV9avlU39Knu3jHC2u9zYVMfRmZAZV2_LdZhOhsXT3rVJMOlGvar1YP273om1QRp3DYpkw0_zHLVq-5dO5BIosr3Gg4KzNigBiqiWsLJ9RysG6m2S9D9slxFUr_KCj0HP7jaHMEB30KsXs-kyUelfnqoOqfIjUBAWMJLpV1A0bAV0W1J8aM5ZnTsi4m/s400/PXL_20250110_111734728~2.jpg"/></a></div>
<h2>Install Ubuntu to SSD</h2>
<p>確かまだPremier P550対応のDTSなどLinuxのコードはメインラインには入ってないけど、eMMCにはUbuntu 24.04 TLSがプレインストールされていてシリアルコンソール経由でログインすることが出来るが、SATAポートがこのボードに存在しているので、SSDにインストールすることにする</p>
<h3>イメージを取得</h3>
<p><a href="https://github.com/sifive/hifive-premier-p550-ubuntu/releases/tag/2024.11.00">https://github.com/sifive/hifive-premier-p550-ubuntu/releases/tag/2024.11.00</a>にUbuntuのイメージが置かれているので、これを入手する</p>
<h3>ディスクに書き込む</h3>
<p>まずxzで圧縮されているので、展開</p>
<pre>xz -d ubuntu-24.04-preinstalled-server-riscv64.img.xz</pre>
<p>SSDが/dev/sdaだとして、ddコマンドでディスクに書き込む</p>
<pre>dd if=ubuntu-24.04-preinstalled-server-riscv64.img of=/dev/sda bs=1M</pre>
<p>この状態でリブートするとSSDが(hd0)になるので、SSD経由でブートする。ただし、eMMCはこのイメージを書き込んであるっぽいので、GPTのUUIDが全部一緒になるので、好みにおおじてGPTを変えてupdate-grubかけたほうがよい</p>
<h2>Unix Bench</h2>
<pre>
------------------------------------------------------------------------
Benchmark Run: Sun Jan 12 2025 06:34:27 - 07:02:47
4 CPUs in system; running 1 parallel copy of tests
Dhrystone 2 using register variables 12927124.9 lps (10.0 s, 7 samples)
Double-Precision Whetstone 2641.1 MWIPS (9.9 s, 7 samples)
Execl Throughput 1176.6 lps (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 229490.7 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 72809.9 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 374429.0 KBps (30.0 s, 2 samples)
Pipe Throughput 475331.9 lps (10.0 s, 7 samples)
Pipe-based Context Switching 31965.9 lps (10.0 s, 7 samples)
Process Creation 2703.0 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 3510.5 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 1154.5 lpm (60.0 s, 2 samples)
System Call Overhead 590916.1 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 12927124.9 1107.7
Double-Precision Whetstone 55.0 2641.1 480.2
Execl Throughput 43.0 1176.6 273.6
File Copy 1024 bufsize 2000 maxblocks 3960.0 229490.7 579.5
File Copy 256 bufsize 500 maxblocks 1655.0 72809.9 439.9
File Copy 4096 bufsize 8000 maxblocks 5800.0 374429.0 645.6
Pipe Throughput 12440.0 475331.9 382.1
Pipe-based Context Switching 4000.0 31965.9 79.9
Process Creation 126.0 2703.0 214.5
Shell Scripts (1 concurrent) 42.4 3510.5 828.0
Shell Scripts (8 concurrent) 6.0 1154.5 1924.2
System Call Overhead 15000.0 590916.1 393.9
========
System Benchmarks Index Score 463.6
------------------------------------------------------------------------
Benchmark Run: Sun Jan 12 2025 07:02:47 - 07:31:09
4 CPUs in system; running 4 parallel copies of tests
Dhrystone 2 using register variables 51689178.8 lps (10.0 s, 7 samples)
Double-Precision Whetstone 10560.7 MWIPS (9.9 s, 7 samples)
Execl Throughput 4324.4 lps (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 758792.3 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 282576.0 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 1383510.8 KBps (30.0 s, 2 samples)
Pipe Throughput 1893625.3 lps (10.0 s, 7 samples)
Pipe-based Context Switching 218013.6 lps (10.0 s, 7 samples)
Process Creation 9020.4 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 9097.3 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 1184.8 lpm (60.1 s, 2 samples)
System Call Overhead 2362850.1 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 51689178.8 4429.2
Double-Precision Whetstone 55.0 10560.7 1920.1
Execl Throughput 43.0 4324.4 1005.7
File Copy 1024 bufsize 2000 maxblocks 3960.0 758792.3 1916.1
File Copy 256 bufsize 500 maxblocks 1655.0 282576.0 1707.4
File Copy 4096 bufsize 8000 maxblocks 5800.0 1383510.8 2385.4
Pipe Throughput 12440.0 1893625.3 1522.2
Pipe-based Context Switching 4000.0 218013.6 545.0
Process Creation 126.0 9020.4 715.9
Shell Scripts (1 concurrent) 42.4 9097.3 2145.6
Shell Scripts (8 concurrent) 6.0 1184.8 1974.6
System Call Overhead 15000.0 2362850.1 1575.2
========
System Benchmarks Index Score 1591.8
</pre>
<p>大体Unmatchedの2倍くらいの速度</p>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-42288162675526082982025-01-10T16:37:00.004+09:002025-01-10T16:39:13.175+09:002024年に買ったもの<p>買ったものを書いているけど、これ以外には、家 (賃貸) のトレイが壊れたため、結果として新しいトイレのユニットに入れ替わった (元のトイレは25年前のもの)。今どきトイレは水の使用量が少なくなっていたりするけど、そもそもシャワートイレにしないところが、大家...とは思ったが</p>
<h3><a href="https://store.google.com/jp/product/pixel_8a">Google Pixel 8a</a></h3>
<p>これをメイン機にして、いままで使っていたPixel 6aをテスト機に格下げしました。前までの手頃値段感はなくなったけど継続して買っている。個人的にPixel買っている理由は、Androidのアップデートが長期的に行われそうなところ、aシリーズであれば手頃な値段に落ち着いていることと、万一画面が割れたとしても、<a href="https://www.icracked.jp/service/pixel/">iCracked</a>で当日持ち帰りの修理が可能なところ (Googleでの修理扱いになる) なだけで、これを満たしているのであればどれでもいいんだが</p>
<h3><a href="https://panasonic.jp/dish/products/NP-TML1.html">Panasonic 食器洗い乾燥機 SOLOTA NP-TML1</a></h3>
<p>5月に購入。食洗機があると生活が変わるという記事を見たりするのだけど、ふと買ってしまった。確かに便利だし、寝る前に洗い忘れて、朝マグカップを洗うなんてことは日常だったので、生活はより楽にはなった。ただこの食洗機のレビューにいつも書いてあることだけど、これが受け入れられるかどうかで評価が変わる</p>
<ul>
<li>洗浄、乾燥で合計2時間かかる</li>
<li>大きさが用途に合わないと、使い物にならない</li>
</ul>
<p>ただ台数は売れないだろうから、ずっと同じものを5年以上売るんだろうね (Panasonicのロボット掃除機みたく)</p>
<h3><a href="https://www.zojirushi.co.jp/syohin/kitchen/oven_range/es-gw/">象印 オーブンレンジ EVERINO ES-GW26</a></h3>
<p>10月に購入。元々持っていたオーブンレンジ (三菱電機製) は20年以上使っていたしまったく壊れる気配がなかったのだが、新しいものが欲しくなって購入。今どきの電子レンジってこんなに機能豊富なんだなと改めて感動。スチームオーブンと迷ったけど、十分満足</p>
<h3><a href="www.delonghi.com/ja-jp/p/KG79J">デロンギ コーヒーグラインダー KG79J</a></h3>
<p>12月に購入。コーヒー自体はドルチェグストを使っているのだけど、種類に飽きてきてコーヒー豆を買ってきたくなったのでミルを購入。価格も手頃だし、機能自体は挽く粗さを選べたり満足なのだが掃除が超面倒。メンテンス性が悪いという評判は見てたのだけど、これがね...</p>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-73785528228441499542025-01-07T02:00:00.028+09:002025-01-07T02:00:00.120+09:00RISC-VにおけるCrypto命令 (Crypto Extension)<p>やっとこさVector Extensionも1.0になり、そろそろいろんなExtensionを実装したSoCも出てくるとは思うけど、年末の移動時間のなかでいろいろ現在のCrypto Extensionを勉強してた</p>
<p>Crypto ExtensioもScalar命令版とVector命令版の2つがあって、Scalar版は組み込みとか用途向けの、レジスタとかを増やしたくない実装用で、Vectorはその名の通りVectorレジスタを使ったもの。試しにAESのEncryptionを実装してみる</p>
<h3>Scalar版</h3>
<p>Scalar版は以下のようになる。</p>
<pre style="background: #f0f0f0;">
void
riscv64zkn_aes_encrypt_block_128(uint64_t* expandedKey,
uint8_t *output,
const uint8_t *input)
{
uint64_t state0 = *((uint64_t *)input);
uint64_t state1 = *((uint64_t *)(input + 8));
// Add round key 0 to initial state
state0 = state0 ^ *expandedKey++;
state1 = state1 ^ *expandedKey++;
for (int i = 1; i < 10; r++) {
uint64_t c0 = __riscv_aes64esm(state0, state1);
uint64_t c1 = __riscv_aes64esm(state1, state0);
state0 = c0 ^ *expandedKey++;
state1 = c1 ^ *expandedKey++;
}
// Final round
uint64_t c0 = __riscv_aes64es(state0, state1);
uint64_t c1 = __riscv_aes64es(state1, state0);
state0 = c0 ^ *expandedKey++;
state1 = c1 ^ *expandedKey;
*((uint64_t *)output) = state0;
*((uint64_t *)(output + 8)) = state1;
}
</pre>
<h3>Vector版</h3>
<p>Vector版。まだVector Crypto ExtensionのIntrinics命令はStableじゃないので、インラインアセンブラ使ってる。</p>
<pre style="background: #f0f0f0;">
static vuint32m4_t
vaesz_vs(vuint32m4_t rd, vuint32m4_t vs2)
{
__asm__("vaesz.vs %0, %1" : "+vr"(rd) : "vr"(vs2));
return rd;
}
static vuint32m4_t
vaesem_vs(vuint32m4_t rd, vuint32m4_t vs2)
{
__asm__("vaesem.vs %0, %1" : "+vr"(rd) : "vr"(vs2));
return rd;
}
static vuint32m4_t
vaesef_vs(vuint32m4_t rd, vuint32m4_t vs2)
{
__asm__("vaesef.vs %0, %1" : "+vr"(rd) : "vr"(vs2));
return rd;
}
SECStatus
riscv64zvkn_aes_encrypt_block_128(uint32_t* expandedKey,
uint8_t *output,
const uint8_t *input)
{
size_t vl = __riscv_vsetvl_e32m4(4);
vuint32m4_t state = __riscv_vle32_v_u32m4((const uint32_t *)input, vl);
// Add round key 0 to initial state
vuint32m4_t K = __riscv_vle32_v_u32m4(expandedKey, vl);
expandedKey += 4;
state = vaesz_vs(state, K);
for (int i = 1; i < 10; r++) {
K = __riscv_vle32_v_u32m4(expandedKey, vl);
expandedKey += 4;
state = vaesem_vs(state, K);
}
// Final round
K = __riscv_vle32_v_u32m4(expandedKey, vl);
state = vaesef_vs(state, K);
__riscv_vse32_v_u32m4((uint32_t *)output, state, vl);
}
</pre>
<h3>Conclusion</h3>
<ul>
<li>RISC-Vの場合Load/Restoreをまとめないとvlenの長さを指定するvsetvliが大量に利用することになるので、速さに直結するかもということと、コンパイラ (gcc、LLVM) の最適化もまだまだっぽい</li>
<li>両方ともx86のAES-NIに似た感じなので、AES-NIの経験値があれば、難しくないかも</li>
</ul>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-82599909805442184052024-09-27T16:02:00.008+09:002024-09-28T20:37:32.203+09:00So-net 光 with フレッツS から別会社の光コラボ回線への転用が地雷すぎる<p>自分のオープンソースへのコントリビューションする際のメアドのドメインはずっとso-net.ne.jpなのだが (もちろん別にドメイン持ってるし、それを使ったメアドもある) 、いろいろ思うこともあり、自宅の回線をSo-netではない回線に変えることにした
<p>そもそもフレッツ使っているのは2020年ころまでADSL使ってのもあって、NTTから工事手数料無料でフレッツ光に切り替えるキャンペーンを使ったからってのが一番の理由なのだが</p>
<p>当然のことながらPPoEだと遅いときがたまにあるので、IPoEオプションを使っているのだが、別の光コラボ回線に切り替えるにあたって、解約する必要があるようなので、先にSo-net側のIPv6オプションをWeb上で解約した (はずだった) </p>
<p>解約したのに関わらず、解約申込み中のままになっており、数日待てど一切ステータスが変化しない<p>
<div class="separator" style="clear: both;"><img alt="" border="0" width="420" data-original-height="290" data-original-width="898" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhuAHSFRVxHFPSJeyRi-ZcxnUF6-XDhggvuMYoY0R-reIusxXeRrYu06NOqUpmp6cEG1RjK0dXqNATgBnsXS3sxUqKe0VsVsQZK3Hpe2i21TreN_1V5Pwkte64w-QK6l5aH02S5fuqdkoVjIfn1erEYMvf4sYyaKIulYXslDVeVZttTYueHSv4_5UQxpQT/s320/Screenshot%202024-09-27%20at%2015-34-21%20%E5%88%A9%E7%94%A8%E7%8A%B6%E6%B3%81%E7%85%A7%E4%BC%9A%20v6%E3%83%97%E3%83%A9%E3%82%B9%20%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%20So-net%20%28%E3%82%BD%E3%83%8D%E3%83%83%E3%83%88%29.png"/></div>
<p>おそらく月末処理にしているか、間違えて解約する人向けに数日待つ仕様にしているのだろうが、こっちとしては、光コラボ回線への切り替えの日付が決まっているので、即時解約されないと困る</p>
<p>そのため、サポートに問い合わせると、初めの担当者は「転用の日にコース変更とIPv6オプションの解約をWebからすれば問題ない」と回答してきたのだが、どうも転用という作業がどういうことがたぶんわかってないようだ</p>
<p>いろんな情報を集めると、転用元のIPoEが解約されていないと転用先でIPoEが使えないため、下手すると転用の契約自体がキャンセルされるなりして、両方つかえなくなることも起きるらしい</p>
<p>安全に行くなら切り替えの前の日にはIPoEが解約されていたほうがいい感じなので、もう一度サポートに問い合わせた</p>
<p>サポートに「いつ解約になるのかを教えて欲しい。転用が控えているのですぐ解約できないと困る」と伝えたところ、サポート経由だと即時解約が可能らしく、その担当者経由で即時解約してもらった<p>
<p>Webページでのオプション変更では解決できず、サポートにチャットをしないと (So-netは電話サポートは別契約が必要)、解決しないだなんて、地雷だよな</p>
<p>なお、Googleで検索した際に表示されるこれもウソ。こっちは1週間待ったけど、解約申込み中にままだった</p>
<div class="separator" style="clear: both;"><img alt="" border="0" width="420" data-original-height="612" data-original-width="1376" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4a8RHeJzt4baXUwvOB0Uj2bJd794sLWpewD5zXqJY_EFIO9Rrj9RK1p-FnyFDgFupdfzDnEdahgiRjA9pi-JvM9SFjzOMJuQYe5Fzb22mSvG8dPF9SRoxnDk6YxKfN5w8SHJIy5cFRm4VdepxOQN_rBNGfoFx7Bi4db1mT9j_P91uQ-m7b7DugANxVkvK/s320/Screenshot%202024-09-27%20at%2015-58-32%20so-net%20ipv6%20%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%20%E8%A7%A3%E7%B4%84%20%E6%97%A5%E6%95%B0%20-%20Google%20%E6%A4%9C%E7%B4%A2.png"/></div>
<h3>2024/9/28追記</h3>
<p>1日経って、転用当日 (というよりも転用先の工事予定時間すぎ) に接続を見てみたところ、転用先のIPoEでつながっておらず、従来のフレッツのままということが判明</p>
<p>以前説明してもらったようにIPoEが未だに使えているという状態 = 転用に失敗しているということで、しょうがなくSo-netにまたチャットサポートを投げてみたところ、「エラーが発生してて、解約処理ができてない」ということがやっとわかった</p>
<p>サポートの人に苦言するのは申し訳ないけれど、ちゃんとした社内の技術担当がフレッツ側にチケット投げて作業すればいいはずの話のようにしか聞こえないのに、サポートの人はうちではいつできるのかわからないの一点張りでこの問題の解決する道筋がでないので、積んだ状態。ホント困った。このせいで来月も料金発生するのかと思うと、So-netはISPとしてひどい有様になったんんだなぁと残念な気持ちになった。はぁ</p>
<p>あと別会社の光コラボ回線への転用は、その転用元にとってはユーザーが逃げるということでもあり、そういうところのサポートを対応したくないという気持ちはわかるのだが、出てくるサポートの人が不正確な情報をユーザーに説明するのはどうかと思う</p>
<p>最初の人は切り替わってからコース変更で問題ない (v6オプションのことは触れない) と言っていたり、切り替えにあたってFAQなりWebのセルフサポートで済むようにすれば、ユーザー側は無駄なコストをかけなくてすむし、サポートへの問い合わせというコストを払う必要もないわけだ</p>
<p>So-netはNuro光で良い話を聞かないけど、なるほどなーと思える対応でした。まだ終わってないけどな</p>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-44690522596052769412024-08-01T16:20:00.004+09:002024-08-01T16:27:32.957+09:00Android 14 (Credential Manager) におけるパスキー対応が面倒すぎる<p>DroidKaigiにココらへんの話をしようと思って、CfP書いたけど落ちたので、自分用の覚書。</p>
<p>Firefox (GeckoView) AndroidでCredentail Managerの対応を入れたのが、GeckoViewとしてはバイナリサイズを大きくしたくないため、JetPackを一切使わずにCredential Manager経由で<a href="https://www.w3.org/TR/webauthn-2/">WebAuthn</a>対応を行うコードをJavaでスクラッチで書いた。おそらくJavaでスクラッチで書いたのはChromeとGeckoViewだけだし、おそらくこの2つの製品以外でスクラッチ実装がされることは今後もないと思う。 </p>
<p>しかもGeckoViewはWebブラウザエンジンなわけだから、いろんなWebサイトで実行可能な必要がある (= オリジンを正確に設定する必要がある)。この値を設定するのもおそらくBlinkとGeckoの2つの製品以外でほぼ存在しないであろう。なので、実装にあたって、実装者、すなわち自分しか被害者がいない事例がいろいろあることになるわけだ。自分はGoogleの人じゃないので、社内情報アクセスできないからね。 </p>
<h3>従来の実装方法 </h3>
<p>Google Mobile Service (GMS) にFIDO API (<a href="https://developers.google.com/android/reference/com/google/android/gms/fido/fido2/package-summary">https://developers.google.com/android/reference/com/google/android/gms/fido/fido2/package-summary</a>)が提供されていた。これを使うことでWebAuthnの実装が簡単にできるようになっている。またとあるバージョン以降であればパスキーをGoogle Password Managerに登録することが可能。これは古いAndroidでも動作する。 </p>
<h3>Credential Managerとは </h3>
<p>Andorid 14から Credential Managerという仕組みが追加された。このCredential Managerはサービスとして実装されるもので、サードパーティに対して認証要求を移譲できる。ただこのサービスには3つのメソッドしか存在しなくて、登録・認証・削除があるだけだ。幅広い認証情報を扱えるようにAndroidチームの人は考えためであろうけど、この3つのメソッドには引数がBundleしか実質存在しない。すなわちアプリケーションはBundleに各々好き勝手に情報を入れると、OSにインストールされたCredential Managerサービスたちが、登録成功とか返すようになっている。なおBundleに何入れるべきか?なんてものも存在しない </p>
<h3>Credential Managerを使ったパスキー実装 </h3>
<p>パスキーを実装するには、このBundleになにかを入れる必要があるのだが、そんな情報はdeveloper.android.comには一切存在しない。GeckoViewでは<a href="https://searchfox.org/mozilla-central/rev/e637cd67f98ed4272d13a96db9a7674689122dcb/mobile/android/geckoview/src/main/java/org/mozilla/gecko/WebAuthnCredentialManager.java#40-62">一通りのBundle定義</a>をしているが、これらはJetPackのコードとChromeのコードから持ってきている。オープンソースだったからいいようなものだが、これらの謎定義はGoogle社内でしか共有されていないような感じなので、まぁなんというかEU頑張れって感じ。ここには入れていないが、Google Password Managerだけ無視するっぽく見える定義もあったりする</p>
<p>実際問題、JetPackを使った場合はここらのBundle問題はJetPack側で吸収されるので、そこらは問題になりえないのだが、問題はリクエスト用のJSONは自分たちで組み立てないといけないってことだ。 なので、WebAuthnの仕様をちゃんと理解しないといけない。それをアプリケーション開発者に求めるのはどうかと思う。なおレスポンスもJSONむき出しで渡される。検証とかしたい場合は、むき出しで渡されたJSONデータを展開して検証しないといけない。 </p>
<p>以前のGMSのFIDO APIではJSONむき出しな仕組みにはなっていない。引数はBuilderが用意されているので、必要なパラメータを設定するだけで行える。ちなみにGeckoViewでいうと、<a href="https://searchfox.org/mozilla-central/rev/e637cd67f98ed4272d13a96db9a7674689122dcb/mobile/android/geckoview/src/main/java/org/mozilla/gecko/WebAuthnCredentialManager.java#72-79">これがCredential Manager版</a>で<a href="https://searchfox.org/mozilla-central/rev/e637cd67f98ed4272d13a96db9a7674689122dcb/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/WebAuthnTokenManager.java#68-74">ここがFIDO API版</a>なのだが、Credential Manager版は自分でJSONを組み立てるのに対して、FIDO API版はBuilderで引数を組み立てる。 </p>
<p>あと、検証時 (Assertion) には落とし穴が実は存在してて、クライアントサイドで検証する際には、レスポンスのJSONの ClientDataJsonハッシュを使って検証を行うわけだけど、レスポンス内のこの値は正しくない可能性があって、リクエスト時にBundleに入れたClientDataJsonのハッシュが正しい値だったりする (これは2日悩んだ)</p>
<h3>現在のCredential Managerがどの認証方法を対応しているか? </h3>
<p>そんな方法はない。 </p>
<p>とりあえず試してみて、サービスがTYPE_NO_CREATE_OPTIONSを返してくれれば、たぶん対応していないということがわかる。なお、1Passwordは最初のリクエストでサービス自体がクラッシュしたりするので正しく動かなかったりする。GeckoViewだと登録時はResident KeyがRequiredのときだけCrednetial Managerを使うようにしているが、Preferredの場合にどうするかは決めかねている。 </p>
<p>また、認証を行おうとしてるクレデンシャルがGoogle Password Managerで認証可能かどうか?みたいなのはFIDO API経由で確認は可能なので、認証可能であればGMSのFIDO2 APIを使って、認証できない場合は Credential Managerを使ういうこともできる。GeckoViewもChromeもそのようなコードを入れている。</p>
<h3>結論 </h3>
<p>GMSのFIDO APIがCredential Manager対応すれば、みんなハッピーだったのでは?やっとサードパーティ製品で対応が増えてきたところだしさ</p>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-29495125221158601852023-05-11T17:41:00.004+09:002023-05-11T17:45:14.203+09:00Firefox Androidにおけるresident key (Discoverable Credentials) 対応<p><a href="https://wontfix.blogspot.com/2023/03/google-mobile-servicefidopasskey.html">これ<a/>の続き</p>
<p>Firefox AndroidにおいてはWebAuthnの実装をGoogleの<a href="https://developers.google.com/identity/fido/android/native-apps">FIDO2ライブラリ</a>を使っている。このライブラリはWebAuthn APIをそのままJavaのインターフェイスにしたようなものなので、Firefox AndroidにおけるWebAuthnの対応はこのライブラリの実装内容に依存している。</p>
<p>今年になってこのライブラリがアップデートされ、resident key (Discoverable Credentials) 対応が含まれた。ただ残念?なことにそのAPIを使うと、CredentialsがGoogle Password Managerで他のデバイスとGoogleアカウントを通じて同期するようになる。要は勝手にPasskey対応になってしまう。もちろん同期しないオプションなんてアプリケーション側が使えるAPIには存在しない。なお、デバイスがGoogleアカウントにサインインしてない場合、Passkeyが作成できないというエラーでWebAuthn APIは失敗する。</p>
<p>このような状況なので、いくつか懸念点はあるんだが、Firefox AndroidのStable版はabout:configを使えるわけではないので、デフォルトオフで実装は入れておいた。Firefox 114のBetaおよびNightlyでabout:configで該当設定を変更すれば使えるようになる。</p>
<p>PasskeysがGoogleアカウント経由で同期されるということは、例えば、ChromeでPasskeyを使ってサインインした場合、そこで利用されたCredentialがFirefoxでも使えてしまう (もちろん逆も同じ)。そのような感じでいろいろどうかと思う動作がいろいろあるので、<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1831137">Bug 1831137</a>に解決しないといけない問題は書いてある。個人的にはAndroid 14以上の場合だけ使えるようにしてもいいかもだけど、まだ最終的な結論は決めてない。なぜAndroid 14以降なのかというと、このバージョンではCredential Provier Serviceというものが導入される予定で、Autofill Serviceのようにシステム側で使うように設定しておけば、Google Passowrd Managerではなく、設定したサードパーティのサービスが使える予定らしい。Android 14が出てから考えよう</p>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-9428932293792963052023-04-22T08:24:00.003+09:002023-04-22T08:24:50.917+09:00MacBook Air (2020) M1のUSB-Cポートが壊れたのでApple Storeで交換 (修理) した<p>最近、ビデオ会議のときはMacBook Airを使っている。理由は自宅で使っているDebian/sidな環境でスピーカーフォンが使えたり使えなかったりと不安定だからなのだが (これはpipewireに変わってから頻発してるので、どうにか原因は突き止めたいと思っている)、ミーティングの時間にMacBook Airを使おうとしたら、電源が入らなくなっている。USB-Cポートが一つ壊れていたのだが、こっちのポートも壊れたか、マザーボード自体壊れたっぽい。新しいものを買うという選択肢もあるのだけど、すぐ直ったらラッキーなので、Apple Storeに修理の予約を入れた。</p>
<p>Apple Storeで現象の説明 (電源が入らない) を説明した後、USB-Cポートも一つ壊れているので、両方壊れているのかもしれないという話をしたところ、一回中身見ますね、ってことで自分のMacBook Airをバックヤードに持っていって、分解して調査をしてもらった。</p>
<p>その後、すぐ戻ってきて、</p>
<ul>
<li>壊れたUSB-Cポートは、どうもゴムらしきものが挟まっていて、それが原因っぽい</li>
<li>今まで使えてたUSB-Cポートは洗浄してみてどうなるかを調べる</li>
</ul>
<p>という話になり、作業した後にチェックすると、今まで使えてたUSB-Cポートはちゃんと動作する (= 充電が開始され、電源が入る) ようになり、もう一つの前から壊れてたポートは、動かなかったり動いたりと不安定な状態だった。「このままでもいいですけど、ボード交換という修理も可能です。交換の場合は15000円強になります」という説明を受けて、それだったら修理にするということで修理に出した。値段の大部分は作業料で、実際のボード部分は2000円らしい</p>
<p>修理に出したのが夕方で翌日の夕方には修理完了ということで、Apple Storeでピックアップ可能になってた。一日でピックアップできるのは非常に満足だった。昔東芝が秋葉原のサービスセンター持ってた時に、運が良くてすぐピックアップ可能だったのだけど、販売元が修理の際にちゃんと説明してくれるのは非常に満足度高いよねと</p>
Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-89228281812077483092023-03-24T12:32:00.012+09:002023-04-03T19:02:47.493+09:00How to build Firefox for Linux/riscv64 on Ubuntu 22.10 + Unmatched<p>A people asks me about how to build Firefox/riscv64. Since all patches to build it are merged, so the instruction is updated from <a href="/2021/07/firefox-on-linuxriscv64.html">previous</a>. The following instruction is on Ubuntu 22.10 on riscv64gc</p>
<ol>
<li>Clone firefox code from mozilla official repository
<ul><li><code>hg clone https://hg.mozilla.org/mozilla-central</code> (Mercurial)</li>
<li><code>git clone https://github.com/mozilla/gecko-dev</code> (git).</li></ul></li>
<li>Change current directory to cloned directory
<ul><li><code>cd mozilla-central</code> (if using mercurial)</li>
<li><code>cd gecko-dev</code> (if using git)</li></ul></li>
<li>Create <code>mozconfig</code> file in current dicrectory. File content is the following
<pre style="background-color: #e0e0e0;">mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir
mk_add_options AUTOCLOBBER=1
ac_add_options --enable-application=browser
ac_add_options --disable-debug
ac_add_options --enable-optimize
ac_add_options --disable-tests
ac_add_options --without-wasm-sandboxed-libraries</pre>
</li>
<li>Install rust. See <a href="https://rustup.rs/">rustup.rs</a></li>
<li>Install clang and nodejs
<ul><li><code>sudo apt install clang nodejs</code></li></ul></li>
<li>Run <code>./mach bootstrap</code> and select "2. Firefox for Desktop"</li>
<li>Run <code>./mach configure</code>
<li>Run <code>./mach build</code>. It spends 8-9 hours.
</ol>
<p>Enjoy!</p>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-89556212829868264462023-03-22T10:47:00.008+09:002023-03-22T10:54:41.628+09:00Google Mobile ServiceのFIDOパッケージを使うと勝手にPasskey対応になる<p>Google Mobile Service (GMS) に<a href="https://developers.google.com/android/reference/com/google/android/gms/fido/package-summary">FIDOのパッケージがあるんだが</a>、今年リリースされたVersion 19で<a href="https://w3c.github.io/webauthn/">WebAuthn</a>におけるDiscoverable Credentials (Resident key)の対応ができる<a href="https://developers.google.com/android/reference/com/google/android/gms/fido/fido2/api/common/AuthenticatorSelectionCriteria.Builder#setResidentKeyRequirement(com.google.android.gms.fido.fido2.api.common.ResidentKeyRequirement)">API</a>が追加されている。</p>
<p>Blinkを使っていないとあるWeb BrowserのAndroid版におけるWebAuthn対応はこのGMSのパッケージを使っているおかげで、Resident keyの対応をしていなかったのだが、このパッケージのバージョンにアップデートすれば解決するかも?と考えて、手元で修正コードを書いてみたんだけど、以下のように表示されて勝手に<a href="https://fidoalliance.org/passkeys/">Passkey</a>対応になるっぽい。</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-XEBeHt5W8sZbmBkQYQJWJht8jq_PnxXdILDW-dPqfJbip2ePN8_Px4QyvxzNehgV_g5fvMVmsLGCkkbKMFC8JRjlY4P7xW0OfzXWCTyLDL0Hine_6DLaruWGtSG_0Bh40li9dUJlmmZ9iWPc0cCw6GqOLdZKzCTiMFw8yNPTnB1xENWYYOLaJNdoPA/s1077/passkey.png" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" width="320" data-original-height="1021" data-original-width="1077" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-XEBeHt5W8sZbmBkQYQJWJht8jq_PnxXdILDW-dPqfJbip2ePN8_Px4QyvxzNehgV_g5fvMVmsLGCkkbKMFC8JRjlY4P7xW0OfzXWCTyLDL0Hine_6DLaruWGtSG_0Bh40li9dUJlmmZ9iWPc0cCw6GqOLdZKzCTiMFw8yNPTnB1xENWYYOLaJNdoPA/s320/passkey.png"/></a></div>
<p>上記のように勝手にPasskey対応になってしまい、しかもGoogleアカウント内に同期されちゃうから、とあるWeb Browserの事情だと実装するには、いろんな人たちの許可取らないといけないので、Resident key対応は一時中断することにした。個人的にはPasskeyを使うかどうかのオプションが欲しいのだけどないっぽいし、あの検索会社自体の都合でそれをつけてくれるのはないだろうな、しかもこのパッケージ、GMSだし。</p>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-22402488481461540912023-03-16T13:37:00.001+09:002023-03-22T11:48:54.700+09:00Pixel 6aの画面が割れたのでiCrackedで修理した<p>仕事でスマホOSの開発、デバイスリリースもやったし、今もスマホOS向けのWebブラウザ作ってる仕事をしてるわけだが、なんでもスマホに取り込むということはなおさら信用できない。今回旅先でPixel 6aを落として画面を割ったときも、ガラス面が割れるだけだと良かったのだけど、パネルごと割れてしまって、画面が映らなくなった。そんな状態になったら、画面を確認することはできないわけだから、飛行機のチケットとか (QRコード)、電子マネーのチャージとかもできないわけで。そもそも落とす自分が悪いわけだけど、スマホにすべて取り込むというのは正直ないなと改めて思う。</p>
<p>そんな話はさておき、自分が所有しているアメリカン・エクスプレスではスマホの盗難・故障に対する保証制度 (<a href="https://www.americanexpress.com/ja-jp/benefits/insurance/nac-insurance/smartphone-protection/">スマートフォン・プロテクション</a>) というものがあり、修理金額の一部を補填してくれるので、それを行った。そのときのお話。</p>
<p>まず、この保証制度を申し込むためには、以下のものが必要になる</p>
<ul>
<li>そのスマートフォンを買った際の領収書。Pixelの場合はGoogleから買った際に送られてくるメールで問題なし</li>
<li>故障を証明する写真。今回は画面が割れている本体の画像</li>
<li>修理内容、代金を証明する書類。今回の場合はiCrackedで修理を行ったので、その作業が書かれた書類。修理されたときに渡される</li>
</ul>
<p>今回の修理は<a href="https://www.icracked.jp/service/pixel/">iCracked</a>で行った。ここはGoogleの正規サービスプロバイダなので、ここで修理しても本体保証は変わらないらしい。店舗自体が都内にはいくつもあるのでネットで申し込んで空いていれば当日に修理を行ってもらえる。修理時間も1時間もかからないので、郵送よりも実店舗に直接行くのが便利だと思う。</p>
<p>なお、AMEXのスマートフォン・プロテクション、申込みから実質2営業日くらいでお金が振り込まれるので、非常に便利でした。でもGoogleはUSでやっているPreferred Careを日本で展開できないのはなんでだろう。売れてないんだろうな</p>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-32579913854831856612023-03-07T19:33:00.006+09:002023-03-07T19:37:08.158+09:00Oliveに移行しようとしたら、利用可能な口座がありませんと言われる<p>親への生活費とか家賃の振り込みを毎月行う必要があり、銀行自体も各々で違うので振り込み手数料をできる限り安くする方法をいろいろとっていたのだが、三井住友銀行 (SMBC) でOliveというサービスが始まり、手数料を下げられそうだったので、移行することにした。</p>
<p>アプリをインストールして、SMBC IDというアカウントを作り、早速口座を移行しようとしたら、"Oliveアカウントに切替可能な口座がありません" というエラーが起きた。<a href="https://www.smbc.co.jp/kojin/olive-account/update/simulation/">Oliveアカウントの切替診断</a> から辿れるFAQを見ても、不可能条件に合致しておらず、SMBC Directから口座の種類を見ても "残高別金利型普通預金" なので、全く理由がわからない。しいてあげれば、この口座はさくら銀行時代に作ったものをずっと使っている。キャッシュカードもSMBCに変更してるし、なにか内部で変な契約になっているしか思えない。</p>
<p>悩んでも仕方ないので、SMBCのチャットサポートで問い合わせようにしても、混雑してて問い合わせできないので、SMBC Direct経由でメールで問い合わせた。</p>
<p>一日後、返事があり、どうも自分の口座は「カードローン(総合口座型)」というものなっているらしく (検索してもほぼ情報が存在しない)、カードローン口座の契約を止めればOliveへの切替可能とのことで家の近くの支店でカードローン口座を止めてきた。銀行の受付で説明しても「???」な顔をされたので、これに合致する人はすくないのではと思う。</p>
<p>なんで、こんな契約になってかをいろいろ思い出してみると、心当たりがあって、口座を作った時に「給料振り込み口座にしていただければ、10万円まで口座残高がマイナスになっても可能」というようなものを契約した覚えがたしかにあり (あの頃は新卒社会人でいろいろ借金あった)、それが銀行が変わってくにつれ、最終的に「カードローン(総合口座型)」という契約になったんだろうと推測される。ただ、SMBC Directやアプリで見ても "残高別金利型普通預金" としか表示されないので、わかるはずないよねと。</p>
<p>利用可能な口座がありませんと言われる人は、SMBC Directのメール問い合わせで聞くといいと思う。結果として実店舗行くことになると思うけど</p>
<p>なお補足だが、銀行に問い合わせた時、切替不可能な条件に以下があったのは笑った。そりゃそうか。</p>
<blockquote style="background-color: #e0e0e0;">* 口座名義に銀行のシステム上反映することのできない漢字が含まれる場合</blockquote>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-75962197361814399412023-01-06T22:16:00.002+09:002023-01-06T22:16:22.935+09:002022年に買ったもの<p>今年は書く内容のあるものを買ってないなぁと思いながら。</p>
<h3>clockwork DevTerm R1</h3>
<p><a href="https://wontfix.blogspot.com/2022/06/risc-vclockwork-devterm.html">ここにすでに書いてある</a>が、補足。</p>
<ul>
<li>キーボードがしょぼくて、ゆっくりじゃないと入力がほぼ不可能。結果としてUSBキーボード差さないと使い物にならない。</li>
<li>ローエンドの阿里巴巴のチップ、GPUがまともに入ってないので、表示に関してはただ表示できるレベルの遅さ</li>
</ul>
<p>初めてRISC-V64デバイス買うのであればいいけど、SiFiveのボード持ってるから、まぁ触らなくなっちゃった</p>
<h3><a href="https://www.logicool.co.jp/ja-jp/products/mice/lift-vertical-ergonomic-mouse.910-006488.html">Logicool LIFT</a></h3>
<p><a href="https://www.logicool.co.jp/ja-jp/products/mice/mx-vertical-ergonomic-mouse.910-005452.html">MX Vertical</a>ユーザーだったのだけど、トラッキングが調子悪くなってきて (今までのLogicool製品では経験なかった)、買い替えるデバイスをどれにしようか考えてるときに発売になったので。サイズ感はこっちのほうが好みなので、買ってよかった。</p>
<h3><a href="https://store.google.com/jp/product/pixel_6a">Google Pixel 6a</a></h3>
<p>前まで使ってたPixel 4aの画面を割ってしまったので。Pixel 4aのAndroidのバージョンも13で打ち止めだし、14へ向けてのデバイスが欲しかったので購入。充電時とかに無駄に熱くなるとかちょっと重いとか、Pixel 4aに比べると出来がいいとは思わなないけど、しょうがないよね。</p>
<p>なお、画面を割ったPixel 4aは、東急ハンズに入ってる <a href="https://www.icracked.jp/service/pixel/">iCracked</a> (Googleの正規修理業者) に持ち込んで画面を交換してもらいました。1時間30分くらいで交換終了して約2万円ほど。壊してもいい検証機に格下げ。</p>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-14700543236393043272022-12-06T15:30:00.001+09:002022-12-06T15:30:40.734+09:00Firefox for macOS版をLinux上でビルドする<p>自分用メモ</p>
<p>Firefoxのビルド環境はカスタムビルドされたclangを使っているため、Linux上でmacOS版のビルドができたりする。実際AWS/GCP上のTaskCluster (MozillaのCI) ではmacOS版はLinuxでクロスビルドしてる。問題はSDKのヘッダとかなんだが、まぁ<a href="https://github.com/phracker/MacOSX-SDKs">ここら</a>からもってくるなり別のmacOS環境からSDKのヘッダ・ライブラリ一式を持ってこればどうにかなる。</p>
<p>mozconfigファイルはこんな感じでいけるはず</p>
<pre>
mk_add_options MACOS_SDK_DIR=/other/MacOS-SDKs/MacOSX11.3.sdk
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir-macos
ac_add_options --target=x86_64-apple-darwin
ac_add_options --enable-debug
ac_add_options --enable-optimize
ac_add_options --enable-tests
ac_add_options --with-macos-sdk=/other/MacOS-SDKs/MacOSX11.3.sdk
</pre>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-14577916801250299292022-06-02T21:12:00.007+09:002022-06-04T02:01:07.277+09:00RISC-VなClockwork DevTermがやってきた<p><a href="https://www.clockworkpi.com/devterm">Clockworkが発売してるDevTerm</a>にRISC-V64なボードが追加されてたので買ったところ届きました。</p>
<div><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgg4reEHgI1qR46i3UT_QDpAc-NG_Q9UmN5AvOoElxZYx-gIMbNbJJGwQgD9IYzzT3Txs5LcWgmUjv-URwqOOKT9GiHSAPS6f7Y-ELROr9YZAYSFQqgZNlfKcIfWeXv08kIo4OgPIIcb3IuQTUipFOliOBOFUGLJ4ts3Zm6VuKa7UprGBBAuvdXPsz-oA/s1600/PXL_20220601_044004452.jpg" width="500"/></div>
<p>中のパーツは組み立てる必要がある。電源はUSB-C経由だが、18650バッテリー搭載可能。</p>
<div><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMzrSVKLGgqO9CW2MzPJqlNmq4zA_sWstdTGxkaiQ_mJytiyBISACN-7bnMXbkfZhUI3N5m3TysgboH8MP99mprHIownewC9eoYuOj0fczkJLfvsYmiVGwZ6L1I0jW8xalt3Pix8JX8Dxt1Po8avYCjs0FhvDQG7Q0JwEHZ7FZi7MmWAdqBytLNnyQKw/s1600/PXL_20220601_072450579.jpg" width="500"/></div>
<p>なお、このボードは阿里巴巴のXuanTie C906コアなAllwinner D1使っているのでこんな感じ。</p>
<pre style="background-color: #e0e0e0; white-space: pre-wrap;">
cpi@devterm-R01:~$ uname -a
Linux devterm-R01 5.4.61 #12 PREEMPT Wed Mar 30 14:44:22 CST 2022 riscv64 riscv64 riscv64 GNU/Linux
cpi@devterm-R01:~$ cat /proc/cpuinfo
processor : 0
hart : 0
isa : rv64imafdcvu
mmu : sv39
</pre>
<p>だそうです。Vecter Extension!</p>
<p>同梱のSDカードにUbuntu 22.04ベースの起動イメージが入っているのだが、これは<a href="http://dl.clockworkpi.com/">http://dl.clockworkpi.com/</a>からダウンロード可能。なお、スクラッチから作る方法も<a href="https://github.com/clockworkpi/DevTerm/wiki/Create-DevTerm-R01-OS-image-from-scratch">公開されている</a></p>
<p>なお、参考にUnix Bench</p>
<pre>
========================================================================
BYTE UNIX Benchmarks (Version 5.1.3)
System: devterm-R01: GNU/Linux
OS: GNU/Linux -- 5.4.61 -- #12 PREEMPT Wed Mar 30 14:44:22 CST 2022
Machine: riscv64 (riscv64)
Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
16:18:46 up 3 min, 2 users, load average: 0.92, 1.11, 0.53; runlevel 2022-06-02
------------------------------------------------------------------------
Benchmark Run: Fri Jun 03 2022 16:18:46 - 16:46:57
1 CPU in system; running 1 parallel copy of tests
Dhrystone 2 using register variables 2958013.9 lps (10.0 s, 7 samples)
Double-Precision Whetstone 1045.0 MWIPS (9.9 s, 7 samples)
Execl Throughput 254.0 lps (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 44255.0 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 12537.2 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 116663.8 KBps (30.0 s, 2 samples)
Pipe Throughput 163270.2 lps (10.0 s, 7 samples)
Pipe-based Context Switching 26226.4 lps (10.0 s, 7 samples)
Process Creation 696.3 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 567.4 lpm (60.1 s, 2 samples)
Shell Scripts (8 concurrent) 73.9 lpm (60.5 s, 2 samples)
System Call Overhead 383377.8 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 2958013.9 253.5
Double-Precision Whetstone 55.0 1045.0 190.0
Execl Throughput 43.0 254.0 59.1
File Copy 1024 bufsize 2000 maxblocks 3960.0 44255.0 111.8
File Copy 256 bufsize 500 maxblocks 1655.0 12537.2 75.8
File Copy 4096 bufsize 8000 maxblocks 5800.0 116663.8 201.1
Pipe Throughput 12440.0 163270.2 131.2
Pipe-based Context Switching 4000.0 26226.4 65.6
Process Creation 126.0 696.3 55.3
Shell Scripts (1 concurrent) 42.4 567.4 133.8
Shell Scripts (8 concurrent) 6.0 73.9 123.1
System Call Overhead 15000.0 383377.8 255.6
========
System Benchmarks Index Score 120.8</pre>
Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-73735198856233250342022-05-24T20:42:00.002+09:002022-05-24T22:35:31.531+09:00Intl.MessageFormat<p><a href="https://www.wantedly.com/companies/wantedly/post_articles/400195">hi18n (i18nライブラリ) の紹介 (1) 設計思想と基本方針</a>というのを見た。このブログ記事を見るとこれは文字列翻訳のメッセージフォーマットを行うライブラリの話らしい。翻訳というのは、Localizaiton (L10N) と呼ぶもので、Internationalization (i18n) とは違う。i18nというのは、文字翻訳じゃなくて、多言語を扱う、表示するということを基本指す。例えば日本語が表示できるとか入力ができるとか。まずwantedly社は正しい言葉を使うようにしてほしい。</p>
<p>さて、本題。</p>
<p>こういうメッセージフォーマットというのは、どうもいろいろ各社持っているらしく、車輪の再発明を各社でやっている状況らしい。そんな状態は労働力の無駄でしかないので、ECMA-402で<a href="https://github.com/tc39/proposal-intl-messageformat">Intl.MessageFormat</a>というのを作ることになった。元のベースはFirefoxで使っている<a href="https://projectfluent.org/">Fluent</a>と呼んでいるライブラリで、そもそもそれはFirefox OSのときに作られた仕組み (今は某社で働いてるZibiがFirefox OSのころからやってて、これをFirefox本体へ持ち込むときにECMA-402のいろんな仕様も追加してた)。</p>
<p>Intl.MessageFormatはただのAPIだけど、メッセージフォーマットの仕様は<a href="https://github.com/unicode-org/message-format-wg/blob/main/spec.md">The MessageFormat 2.0 Specification</a>に現時点のドラフトがある。ICU4Xで使えればWASMでも使えるので、自社で同じような機能の車輪の再発明を行っているのであれば、ここでいろいろ意見を言えば取り込まれると思うよ</p>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-1446565393316857232021-12-31T11:12:00.032+09:002022-01-04T18:29:42.391+09:002021年に買ったもの<h3><a href="https://store.google.com/product/pixel_4a">Google Pixel 4a</a></h3>
<p>XPERIA XZ2 Compactを使っていたのだが、3度目の修理になったタイミングでメイン端末の代わりとして購入。XPERIA XZシリーズはほんと出来が悪かったし、ドコモ経由で買ってたので、修理代が非常に安く、あれでは元を取れてないのではと思うものだった。</p>
<p>Googleはこのくらいのミッドレンジの端末が一番コスパいいと思うので続けてほしいと思う。そもそも昔のNexusのときと違ってAOSPそのままではなくなってるし、どれがリファレンスなんだかわからなくなってはいるが。</p>
<h3><a href="https://www.sifive.com/boards/hifive-unmatched">HiFive Unmatched</a></h3>
<p>2020年にオーダーしたものだったけど、5月くらいに到着。Mini-ITXなケースと電源、AMDのPCIeなGPUを用意すると、普通にLinuxが実用速度でボートするRISC-Vボードなので、いろんなコードを試しにポートしてみた。今年くらいにリリースされるようなSoCだと今度はSIMDとかCrypto Extensionとか実装されてそうし、新しいSoCが入ったボードが出たら買うだろうな。</p>
<h3><a href="https://www.tp-link.com/jp/business-networking/unmanaged-switch/tl-sg105-m2/">TP-Link 5ポート 2.5Gbps ハブ アンマネージ スイッチングハブ TL-SG105-M2</a></h3>
<p>コスパはいいTP-Linkが最安クラスの2.5Gbpsハブを発売したので、早速購入。結構熱は持つけど、速度としては安定してる。そういえば、自分が100Mbpsなハブを買ったのもこのくらいの値段になったころだったなぁと思い出した。</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=goforboneyar-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B08VH4Q3NR&linkId=d1792dad745c2099e47dc7acce6e6559&bc1=ffffff&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr"></iframe></p>
<h3><a href="https://www.switchbot.jp/products/switchbot-smart-humidifier">SwitchBotスマート加湿器</a></h3>
<p>部屋が乾燥してて朝起きると喉の調子がわるいので、購入。加湿器を買うんだったらくだらないものを買おうと思い、SwitchBotにした。はっきりいうと加湿器なんてずっとつけっぱなしだし、タンクの水がなくなっているという情報をスマホで見ても、だから?って感じなので、スマホとかからコントロールするような機能は改めていらないなと。</p>
<h3><a href="https://nestle.jp/brand/ndg/product/#product05">ネスカフェ ドルチェグスト MINI ME</a></h3>
<p>家でコーヒーの飲む時は一杯毎ドリップして飲んでいたのだけど、面倒になって、コストコでMINI MEを購入。自分のような面倒くさがりな人にとってはこういうカプセルのものが理にかなってた。</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=goforboneyar-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B07PQ3686K&linkId=a737ae6bc281aa85e7fcaba5b8d78d6a&bc1=ffffff&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr"></iframe>
<h3><a href="https://book.yamazen.co.jp/product/cook/c_others/entry-9954.html">山善 エアフライヤー YAF-C120</a></h3>
<p>普通の電気フライヤーは持ってはいるのだけど、油の処理がもったいない気がしてて、エアフライヤーで代替できないかと思って購入。はっきりいうと中途半端過ぎて、代替にならなかった。200℃だと微妙に温度が足りない感。たしかにフライドポテトとかは簡単にできるのだけど、その程度かなぁ。今後も使い続けるかは微妙。</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=goforboneyar-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B093PRWJPY&linkId=c0644a7346c5e03c0a97d319ef8116be&bc1=ffffff&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr"></iframe>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-40065170122047290492021-11-30T10:19:00.005+09:002021-11-30T10:20:18.779+09:00Web Speech APIのSpeechSynthesisEvent.elapsedTimeは秒を返すのだけど<p>バグレポートを受け取って気づいたのだけど、<a href="https://wicg.github.io/speech-api/#dom-speechsynthesisevent-elapsedtime">SpeechSynthesisEvent.elapsedTime</a>は秒を返すのが正しい。ただほとんどのブラウザがこの値を秒で返していなかった (例外はFirefox for Linuxくらいかも)。なので、Safariも最近直っていたので、<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1732498">Firefox側も直した</a>。</p>
<p>ここまでは普通の話なのだが、バグ報告をした人がChromeでも同じ問題が起きるとしてバグを報告したのだが、<a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1253036">このバグ</a>が滑稽。Chromeはバグを受け付けるとQAが出てくるのだけど、そのQAがまずWeb APIの仕様を理解してないし、理解しようともしない。その人を乗り越えないと、Bug Triageさえちゃんとやってくれないようで、バグを認識させるためにはそのQAが投げ出すまで付き合ってあげないといけなくて、非常に無駄なコストがかかる。google.comじゃなくてchromium.orgのメアドを使っているからどこかのベンダーなんだと予想してるのだけど、そうだったらもっとまともな会社使おうよと、Google。</p>
<p>そもそもWeb Platform test (wpt) でTest failure発生させられる話だったら、そういうテストケースを書いておいて、さくっとwptに入れちゃうのだけど、このissueに関してはwptを書きようがないので、まぁChromeチームはずっと放置すると読んでる。</p>
<p>なお、Bug Triageに関してはMozillaは詳しい人かチームマネージャがやるので、大概ちゃんとした人が見ることになることが多い。こんな感じでBug Triageをちゃんとやらない製品はバグ修正とかにコストかけない (または評価システム上、評価されない) だろうなぁと勝手に思ってる。</p>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-55336591378440625652021-10-08T23:37:00.004+09:002021-10-08T23:44:02.909+09:00いまさらながらAndroidのAutofill Frameworkの困った話<p>AndroidのAutofillというのは、カスタムコントロールを使わないアプリにとっては実装は難しくはないのだが、カスタムビューを実装しているアプリでは、自分でいろいろな情報を提供しないといけない。実際には、<a href="https://developer.android.com/guide/topics/text/autofill-optimize?hl=ja">自動入力用にアプリを最適化する</a>に書かれているように、システムがAutofill用の情報を要求してきたら提供する、フォーカスの状態をシステムに通知するなどを追加実装する必要がある。</p>
<p>全部のアプリケーションでそのような実装しているとは限らないので、実装していないような昔のアプリケーション用にAndroidはおせっかいな機能を追加している。<a href="https://developer.android.com/reference/android/service/autofill/AutofillService#compatibility-mode">互換モード</a>だ。これはアクセシビリティの実装を用いたautofillのエミュレーションを提供するもので、カスタムビューがアクセシビリティ機能の実装をしている場合は、それを利用してAutofill情報を設定する。そもそもアクセシビリティの実装しててAutofillの実装しないアプリがあるのかと問い詰めたいところではあるが。</p>
<p>この互換モードというのは自動的に切り替わるわけではなくて、Autofillサービス側で事前に設定をする。だから例えばアプリがAutofillの実装を入れたとしても、アプリ側からこの互換モードを無効にする方法は残念ながらない。この互換モードが動作してしまうと、アクセシビリティノードの走査が走ってしまうため、当然ながらパフォーマンス問題を引き起こす。アクセシビリティノードの走査はandroid.view.Viewの実装内で行われているから、<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1734552">該当コードを実行しないようにすれば</a>、アクセシビリティノードの走査が実行されなくなるので、ある程度は回避可能ではある。残念ながらある程度ね。</p>
<p>この互換モードで実行しているかどうかは、こんな感じで調べられると思う。</p>
<pre style="background-color: #e0e0e0;">
public boolean isCompatibilityMode(Context context) {
try {
final AccessibilityManager manager =
(AccessibilityManager) context.getSystemService(
Context.ACCESSIBILITY_SERVICE);
if (manager == null) {
return false;
}
final List<AccessibilityServiceInfo> serviceInfoList =
manager.getEnabledAccessibilityServiceList(0);
if (serviceInfoList == null) {
return false;
}
for (final AccessibilityServiceInfo info : serviceInfoList) {
if (info.getId().equals(
"android/com.android.server.autofill.AutofillCompatAccessibilityService"
)) {
return true;
}
}
} catch (final Exception e) {
}
return false;
}</pre>
<p>アクセシビリティノードを走査させないようにしたとしても、互換モードは引き続きおせっかいなコードを実行する。この互換モードが動作する際には、CompatibilityBridgeと呼ばれるものがアクセシビリティイベントをウォッチするようになる (これについては無効にする方法はない)。そのためアクセシビリティイベントを発火させるとそれに応じて勝手にAutofillの互換コードが実行されてしまう。例えば<a href="https://developer.android.com/reference/android/view/accessibility/AccessibilityEvent#TYPE_VIEW_FOCUSED">AccessibilityEvent.TYPE_VIEW_FOCUSED</a>のイベントを受け取ると、<a href="https://developer.android.com/reference/android/view/autofill/AutofillManager#notifyViewEntered(android.view.View)">AutofillManager.notifyViewEntered</a>を呼び指したりする。そのため内部でAutofillフォーカスがアクセシビリティノード上に移動する。たとえアプリケーションがAutofill情報を提供してたとしてもだ。AndroidのAutofillはフォーカスが移った際にAutofill用のリクエストをAutofillサービスに渡すので、互換モードでかつ、もしアプリがAutofillの実装をしてた場合、2度リクエストが飛ぶという困ったことになってる。</p>
<p>今どきのWebブラウザというにはOSのAPIはUI Processで実行される。Webコンテンツ内のアクセシビリティ情報をコンテンツのロード時にContent Processで集められ、集まった後UI Processへ送られる。アクセシビリティ情報の収集というのは非常に重い処理なので、UI Processへ送られるのは、ブラウザにとっては相当後になる。なので下手をするとAutofillフォーカスが予期もしてないアクセシビリティノードに奪われた状態でAutofillサービスがAutofillのUIを出したりしようとするので、ブラウザにとっては予期しない動作になりがちになる。例えば、<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1693152">Bug 1693152</a>とか<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1715549">Bug 1715549</a>とか。</p>
<p>このように残念な互換モードを使っているAutofillサービスで有名なのはBitwarden。昔Bitwardenの開発者になんで互換モードに設定しているの?って聞いたけどよくわからない答えを返してきたので、今度こそどうにか止めさせるつもり。このような問題に引っかかるのはたぶん自分だけだと思いたいし、Androidはこの互換モードをアプリ側から止める方法を提供してほしかった。</p>
<p>なお、Bitwardenを使ってて、たまにChromeとかでもAutofillが動かないという話があれば、おそらくこのパターンの話。</p>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-9946441991714616082021-09-02T19:56:00.002+09:002021-09-02T19:56:46.634+09:00OSのIME関連APIとWebブラウザは相性が悪い<p>今どきのWebブラウザは複数のプロセスで動くことが前提になっている。Chromeで言えば、メイン(UI)プロセスとレンダラープロセス。Firefox用語であればChromeプロセスとコンテンツプロセスという感じで別れて動作している。Webコンテンツはコンテンツ用のプロセスで表示され、文字入力はUI用プロセスで動作している。だから入力された文字はコンテンツ用のプロセスへプロセス間通信で送られ、コンテンツ用プロセスで内部的に描画されるいることになる (実際に画面上に描画されるのがGPUプロセスだったりUIプロセスだったりするけど)。</p>
<p>今どきのOSで使われるIMEのためのAPIは入力された文字をただアプリケーションに渡すだけではなく、様々なことを要求してくる。例えば文字変換の精度を上げるために現在入力している場所周辺の文字情報をアプリケーションへ要求したり、文字変換用パネルウィンドウの表示位置を決定するために、アプリケーションが文字入力している表示座標の問い合わせをアプリケーションへ行ったりする。</p>
<p>Webブラウザは反応速度を上げるため、基本的にはブロッキングするようなプロセス間通信を許可しない (もちろん例外がないわけではないが)。プロセス間通信は基本的に非同期で行われてる。たとえば、コンテンツ用プロセスがビジーな状況というのは結構ありがちな状況で、その状況下で同期モデルなプロセス間通信を使うと、当然のことながら、そのプロセス間通信が正常終了するまでに長い時間がかかり、反応速度が非常に悪くなる。なので基本的には非同期なプロセス間通信を利用している。</p>
<p>この非同期なプロセス間通信のみを許可するというところが、非常にIME関連APIとの相性を悪くしている。なぜなら多くのケースでこれらのAPIが非同期API (例えば引数で渡されたコールバック関数経由で値を渡す) ではなくて、同期APIになってたりする。または、非同期的なレスポンス (エラーコードとして、今はPendingだからまた問い合わせてねというものを返す) を返すことが可能であっても、そのエラーコードを見てくれなかったりなど、まぁWebブラウザがこういうモデルを要求しているというニーズにIME関連APIがマッチしてない。APIデザインが最後発であるAndroidでさえ、残念ながらここらがすべて非同期になってない。</p>
<p>そんなこと言っていても、OS側がこちらの欲しいAPIを実装してくれるわけでもないので、ChromeもFirefoxもいろんな手を使ってこの状況下でもIMEを動かすようにしている。ただうまく行かないケースになった場合、例えばIMEの候補ウィンドウが間違った場所に表示されてしまったりするのは、これらのブラウザ側のハックがうまく動かなかったケースになる。Android版になると、メインプロセス内でもブラウザのメインスレッドとAndroidのUIスレッドが別になるので、より複雑さを増したりする。</p>
<p>なお、Apple (macOS) はWebKit2のときにこの問題を解決するめに非公開の非同期API群を作って対処した。Appleズルい</p>
Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-51440447356178113892021-07-02T15:27:00.009+09:002023-04-03T19:09:26.244+09:00Firefox on Linux/riscv64<p><strong>This step is out of date since I have merged all patches to trunk. Please read <a href="https://wontfix.blogspot.com/2023/03/how-to-build-firefox-for-linuxriscv64.html">How to build Firefox for Linux/riscv64 on Ubuntu 22.10 + Unmatched</a> instead.</strong></p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit7m0JpUrZP3RX3_BBPQqkT_HYZA5iXarYsTe252Zc8It-jNLX603KRogp97_nJg8iD-nbqkvZNlJ6ccL-2MLDHee_0PVsu87DuSOKbhL4ztwoNIQWPKHKNdJUHELYmbSi6FEzAzUDANq_/s1280/firefox.png" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" width="400" data-original-height="1024" data-original-width="1280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit7m0JpUrZP3RX3_BBPQqkT_HYZA5iXarYsTe252Zc8It-jNLX603KRogp97_nJg8iD-nbqkvZNlJ6ccL-2MLDHee_0PVsu87DuSOKbhL4ztwoNIQWPKHKNdJUHELYmbSi6FEzAzUDANq_/s400/firefox.png"/></a></div>
<p>Although I don't land all patches to mozilla-central yet, source code is <a href="https://github.com/makotokato/gecko-dev/tree/riscv64">https://github.com/makotokato/gecko-dev/tree/riscv64</a>.</p>
<p>To build this, you have to build nodejs v16.0 since Firefox build sytem requires it. So I recommend that you setup cross compile environemnt instead of building on Unmatched board host.</p>
<p>Also, this is .mozconfig sample.</p>
<pre style="background-color: #e8e8e8;">
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir
mk_add_options AUTOCLOBBER=1
ac_add_options NODEJS=/home/makoto/node-v16/bin/node
ac_add_options --enable-application=browser
ac_add_options --disable-debug
ac_add_options --enable-optimize
export CC=gcc
export CXX=g++</pre>
<p>If using corss compile,</p>
<pre style="background-color: #e8e8e8;">
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir
mk_add_options AUTOCLOBBER=1
ac_add_options --enable-application=browser
ac_add_options --disable-debug
ac_add_options --enable-optimize
ac_add_options --target=riscv64
export CC=riscv64-linux-gnu-gcc
export CXX=riscv64-linux-gnu-g++
export HOST_CC=gcc
export HOST_CXX=g++</pre>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]1tag:blogger.com,1999:blog-1330666698970423728.post-81230969009880251512021-06-07T16:22:00.006+09:002021-06-07T16:27:48.808+09:00HiFive Unmatched にUbuntuをインストールする<p>デフォルトのSDカードには、OpenEmbededな環境のLinuxがインストールされているのだが、いろいろパッケージをアップデートしたいので、NVMeを取り付けて、そこにUbuntuをインストールした。</p>
<p><a href="https://blogjawn.stufftoread.com/install-ubuntu-on-hifive-unmatched.html">Install Ubuntu on HiFive Unmatched</a>に方法が書いてあるのだが、この方法だと実はブートしない。</p>
<pre style="background-color: #e0e0e0">u-boot-update</pre>
<p>した後、</p>
<p><span style="font-family: monospace;">/boot/extlinux/extlinux.conf</span>を直接編集して、以下のようにfdt行を追加してdtbファイルを指定しないといけない。</p>
<pre style="background-color: #e0e0e0">
label l0
menu label Ubuntu 21.04 5.11.0-1007-generic
linux /boot/vmlinuz-5.11.0-1007-generic
initrd /boot/initrd.img-5.11.0-1007-generic
fdt /lib/firmware/5.11.0-1007-generic/device-tree/sifive/hifive-unmatched-a00.dtb
append root=LABEL=cloudimg-rootfs ro earlycon
</pre>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-31018661943433694442021-05-31T18:44:00.003+09:002021-05-31T18:55:51.214+09:00HiFive Unmatchedが届いた<p>RISC-Vの話は、実際のシリコンでの話は少く、大概エミュレーター作ったとかFPGAに実装してみてるとかが多く、(FPGAじゃない) 実際のシリコンでの話ってのは少ない。シリコンのデザインをしてる会社のプレゼンテーションを見ると大体このくらいのパフォーマンスという話は出ているが、実シリコンの話はプレゼンテーションの中の(都合のよい)話でしかなく、ソフトウェアエンジニアであれば、実際のシリコン上での動作を見てみたいものだ。</p>
<p>ということで、半年前くらいにオーダーしてた<a href="https://www.sifive.com/boards/hifive-unmatched">HiFive Unmatched</a>が届いた。このボードはSiFiveのSoC (SiFive Freedom U740) を載せており、しかもPCIe、NVMeスロット付という自分が待ち望んでいた感じのもの。ただしお値段は$679+4,200円。Mac Mini買える値段。</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFT-NHdXwDlrpcLAaTuKSDzChyZUpq1GbnlnHXaNmdQgph7ZNhYjPCYxA8NtauDVxyv0E_-ahJC1dPUGG4ITdzMZWpxpHrkrzZmL1tCMJBHIkivvieY436ttDIiKeOL5DgK3wmOCKvisoP/s2048/PXL_20210531_051955488%257E2.jpg" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" width="400" data-original-height="1932" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFT-NHdXwDlrpcLAaTuKSDzChyZUpq1GbnlnHXaNmdQgph7ZNhYjPCYxA8NtauDVxyv0E_-ahJC1dPUGG4ITdzMZWpxpHrkrzZmL1tCMJBHIkivvieY436ttDIiKeOL5DgK3wmOCKvisoP/s400/PXL_20210531_051955488%257E2.jpg"/></a></div>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb3ZWOc2Mo1DSjHWPfRFafRFICfwKThdj1fNNkCKDpjIiG96TmH2H3HVgl16fElG0Kbu1LL2LXPEk645QBuO_ZMYsBI0Ya8LEZ9k1ouOZOY9c0c21VCXFWRwGnnPKwSE42vwFAW0jdAWA1/s2048/PXL_20210531_053425397%257E2.jpg" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" height="320" data-original-height="2048" data-original-width="1887" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb3ZWOc2Mo1DSjHWPfRFafRFICfwKThdj1fNNkCKDpjIiG96TmH2H3HVgl16fElG0Kbu1LL2LXPEk645QBuO_ZMYsBI0Ya8LEZ9k1ouOZOY9c0c21VCXFWRwGnnPKwSE42vwFAW0jdAWA1/s320/PXL_20210531_053425397%257E2.jpg"/></a></div>
<p>簡単にUNIX Benchmarks走らせた結果。RasPi3クラスかなって程度だが、コンパイラ自体の成熟度が増せばいろいろ違うだろうし、そもそもこのテストはSDカード上で行っているので、ストレージをSDカードからNVMeに変更すればまた違う</p>
<pre>
BYTE UNIX Benchmarks (Version 5.1.3)
System: unmatched: GNU/Linux
OS: GNU/Linux -- 5.11.10 -- #1 SMP Wed Apr 7 17:37:34 UTC 2021
Machine: riscv64 (riscv64)
Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
08:19:19 up 16 min, 1 user, load average: 0.32, 0.23, 0.21; runlevel 2020-12-17
------------------------------------------------------------------------
Benchmark Run: Mon May 31 2021 08:19:19 - 08:47:43
4 CPUs in system; running 1 parallel copy of tests
Dhrystone 2 using register variables 4443367.3 lps (10.0 s, 7 samples)
Double-Precision Whetstone 1189.1 MWIPS (9.8 s, 7 samples)
Execl Throughput 1502.3 lps (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 85504.8 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 40618.3 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 116919.4 KBps (30.0 s, 2 samples)
Pipe Throughput 299710.9 lps (10.0 s, 7 samples)
Pipe-based Context Switching 54294.3 lps (10.0 s, 7 samples)
Process Creation 2426.7 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 905.7 lpm (60.1 s, 2 samples)
Shell Scripts (8 concurrent) 358.4 lpm (60.1 s, 2 samples)
System Call Overhead 586221.6 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 4443367.3 380.8
Double-Precision Whetstone 55.0 1189.1 216.2
Execl Throughput 43.0 1502.3 349.4
File Copy 1024 bufsize 2000 maxblocks 3960.0 85504.8 215.9
File Copy 256 bufsize 500 maxblocks 1655.0 40618.3 245.4
File Copy 4096 bufsize 8000 maxblocks 5800.0 116919.4 201.6
Pipe Throughput 12440.0 299710.9 240.9
Pipe-based Context Switching 4000.0 54294.3 135.7
Process Creation 126.0 2426.7 192.6
Shell Scripts (1 concurrent) 42.4 905.7 213.6
Shell Scripts (8 concurrent) 6.0 358.4 597.3
System Call Overhead 15000.0 586221.6 390.8
========
System Benchmarks Index Score 260.2
------------------------------------------------------------------------
Benchmark Run: Mon May 31 2021 08:47:43 - 09:16:48
4 CPUs in system; running 4 parallel copies of tests
Dhrystone 2 using register variables 17753848.1 lps (10.0 s, 7 samples)
Double-Precision Whetstone 4712.2 MWIPS (9.9 s, 7 samples)
Execl Throughput 5703.9 lps (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 159065.0 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 65531.5 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 208282.9 KBps (30.2 s, 2 samples)
Pipe Throughput 1179603.9 lps (10.0 s, 7 samples)
Pipe-based Context Switching 248734.2 lps (10.0 s, 7 samples)
Process Creation 9186.8 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 2695.8 lpm (60.1 s, 2 samples)
Shell Scripts (8 concurrent) 395.6 lpm (60.1 s, 2 samples)
System Call Overhead 2176448.1 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 17753848.1 1521.3
Double-Precision Whetstone 55.0 4712.2 856.8
Execl Throughput 43.0 5703.9 1326.5
File Copy 1024 bufsize 2000 maxblocks 3960.0 159065.0 401.7
File Copy 256 bufsize 500 maxblocks 1655.0 65531.5 396.0
File Copy 4096 bufsize 8000 maxblocks 5800.0 208282.9 359.1
Pipe Throughput 12440.0 1179603.9 948.2
Pipe-based Context Switching 4000.0 248734.2 621.8
Process Creation 126.0 9186.8 729.1
Shell Scripts (1 concurrent) 42.4 2695.8 635.8
Shell Scripts (8 concurrent) 6.0 395.6 659.3
System Call Overhead 15000.0 2176448.1 1451.0
========
System Benchmarks Index Score 737.3
</pre>
<p>Windows 10Xがなくなった今、今年最大のオモチャかも</p>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-85820614618112696102021-05-21T21:57:00.001+09:002021-05-21T21:57:51.550+09:00サードパーティ製IMEは、Web Browserのプライベート・シークレットウィンドウなんて考えてくれない<p>最近のブラウザは、プライベート・シークレットモードが搭載されている。このモードになれば、ブラウザはCookieを保存しないとかいろいろプライバシーを考慮された動作になる。
ただ、いくつかの言語 (とAndroidのようなソフトウェアキーボードを使う場合)、IMEというものを仲介して文字を入力するため、プライベートモードであっても入力履歴はIMEが保存してしまうかもしれない。そのため、入力履歴を学習しないようにするのを通知する機能というのがある。</p>
<p>Androidで言えば、<a href="https://developer.android.com/reference/android/view/inputmethod/EditorInfo#IME_FLAG_NO_PERSONALIZED_LEARNING">InputMethods.IME_FLAG_NO_PERSONALIZED_LEARNING</a>、Windows 10 20H1以降のText Service Frameでの<a href="https://docs.microsoft.com/en-us/windows/win32/api/inputscope/ne-inputscope-inputscope">IS_PRIVATE</a>がそれだ (<a href="https://wontfix.blogspot.com/2020/09/isprivate-on-windows-10-20h1.html">IS_PRIVATEの話は以前のブログ参照</a>)。なお、GTKも<a href="https://gitlab.gnome.org/GNOME/gtk/-/issues/2261">4以降で機能を追加してもらった</a>。この機能を使うことでプライベートモードであれば入力履歴を学習しないようになる。ChromiumやFirefoxではこれを使っているのでプライベートモードでは学習しないようにしてる。</p>
<p>ただ、この機能が動作する条件がもう一つあって、IME側でも対処が必要であるということ。この機能をちゃんと使うのは純正IME (Androidで言えばGBoardとかGooglen日本語入力、Windowsで言えばMicrosoft IME) くらいしかない。Androidの場合だとサードパーティ製IMEでこれを使っているのはあるかもしれないけど、どうも徳島にある某社のATOK (Windows版、Android版) はこの機能を使ってない模様。自分としては (毎月330円払っているユーザーとして)直してほしいのだけど、彼等はこういうところに興味がないから言ったとしても難しそうな気がする。</p>
<p>なお、ここで触れてない (本社がクパチーノにある) 某OS は未だに存在しない機能の模様なのだが、プライバシーとかを最近重視しているのであれば、実装してほしい。</p>
Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0tag:blogger.com,1999:blog-1330666698970423728.post-91398848714333693702021-05-21T09:51:00.004+09:002021-05-21T14:03:47.606+09:00CSS疑似クラスの:read-onlyと:read-writeが仕様通りに実装されることになった<p>いろんなやりとりを仕事がらするのだけど、自分のイメージ的には、WebKitは仕様上間違ってるという話を振れば、直してくれることが多くて、BlinkはQAが変な方向に持っていくか、開発者が斜め上の方向の話にしてしまいwontfix扱いになるということが多々ある。</p>
<p>最近やっと直す方向になった、CSS疑似クラスの<code><a href="https://developer.mozilla.org/docs/Web/CSS/:read-only">:read-only</a></code> / <code><a href="https://developer.mozilla.org/docs/Web/CSS/:read-write">:read-write</a></code>がそのパターン。</p>
<p>元々は、Geckoが<code>-moz-</code>プレフィックス付きで実装してたものの一つで、その後、WebKit (確かBlinkに分かれる前) に実装されてた。しかもプレフィックスなしで。実装されたとしても、そもそも仕様として固まっていないものだったので、いろいろと差異が出るので、ちゃんと仕様として書かれたのだが、それが今回の発端である。</p>
<p>仕様がそもそもその時点のブラウザとは違う定義をしていたので (プレフィックスがあれば、別にいいやとは思うのだが、特にWebKitとBlinkがプレフィックスなし)、「これどういうこと?」と思い、WebKitとBlinkに対してバグを登録した。仕様自体を変更するという議論もありだと思っていたので、それぞれ (AppleとかGoogle) がやってくれるでしょ?ってことだしね。</p>
<p>WebKitは、さくっとこのバグを修正。エッジケースでまだ間違ってることはあるだろうけど、こっちが指摘した動作に関しては修正してくれた。</p>
<p>で一方、<a href="https://bugs.chromium.org/p/chromium/issues/detail?id=255351">Blinkはというと</a>、「これGeckoとかと同じ動作にしたからこういう動作なんでwontfix」。という結論に。個人的には「え?ならCSSWGで議論してよ」と。なぜ彼らはwontfixにする際に仕様に対してのコントリビュートとかWeb Platform Tests書くとかしないのかなぁと。たぶん人によるのだけど、残念ながら個人的にはよくあるパターン。</p>
<p>こういう状況だとGecko側もどうしようもないので (しかもGeckoだけプレフィックス付きだし、プレフィックス外すのだったらこれ結論必要だから) 困ると。ということで、<a href="https://github.com/w3c/csswg-drafts/issues/127">CSSWG行き</a>になった。(wontfixと言った張本人がなぜそっちに議論を移さないのかと本当に思うんだが)そこで議論のやり直しが発生した。</p>
<p>結論書くと、結果としては仕様を変えないということになり、emilioがGecko側をプレフィックス削除とともに仕様通りに修正を行った。</p>
<p>さて、問題はwontfixにしてしまっているBlink側ということになる。emilioがそのバグを再オープンし直したが、つい先日やっと直すことになったようで、そろそろBlinkでも直りそうということに。やれやれ。</p>
<p>そもそもBlinkは他の2つ (Gecko、WebKit) に比べて圧倒的な人的リソースを持っているわけだし、シェアも圧倒的なのだから、こういう仕様とは異なる動作の修正にリソースを割いてほしいと思うのだけど。。。。無理かなぁ。。。</p>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]1tag:blogger.com,1999:blog-1330666698970423728.post-44998020326836039612020-12-24T00:05:00.007+09:002020-12-29T15:31:18.544+09:002020年、今年買ったもの<h3><a href="https://www.oppo.com/jp/smartphone-a5-2020/">OPPO A5 2020</a></h3>
<p>サブ機&検証機として購入。値段 (安くて2万円) からすると非常に出来はいいですね。日本 (東京) でビジネスするにはSuicaがあったほうがより売れるだろうなというのはあるし、Suicaがないから別にメインで使うこともない。</p>
<p>秋に普段使いしているXPERIAを修理に出しているときに、メイン端末として使ってたので、ちょうどいいタイミングだった</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=goforboneyar-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B07YGDP5PM&linkId=13fdae2e3d2d4b66c9d0b876a981050c&bc1=ffffff&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr"></iframe>
<br><br>
<h3><a href="https://network.mobile.rakuten.co.jp/product/smartphone/rakuten-mini/">Rakuten Mini</a></h3>
<p>楽天モバイルの無料サポータープログラムにあたったのでその端末として購入。各サービスのパスワードはランダムにしているためパスワードマネージャが使えないとパスワードの入力ができないのだが、この端末は指紋認証がないため、パスワードマネージャを使うたびに (この小さい端末のソフトウェアキーボードで) 非常に長いパスワードを入力するはめになり、そのことがまったく普段使用に耐えられなかった。少なくともこのサイズでリリースするのであれば、指紋認証ないと無理。</p>
<p>なお、楽天モバイルは自分の行動範囲であれば大概つながるので、一日10GB制限な高速ネットワークの恩恵は受けている。しいてあげればWiMAXのように速度制限を夜だけにしてくれればとは思う</p>
<br><br>
<h3><a href="https://www.amd.com/en/products/cpu/amd-ryzen-9-3900x">Ryzen 9 3900X</a></h3>
<p>Zen 2のマシンが欲しかったのもあったけど、12コア24スレッドで6万円強という値段を見て、マザボとかを含めても8万円と考えたら安いと思って購入。その後電源容量が足りなくて電源も買い直し。コアが多いとFirefoxのビルド時間が短縮できて満足してます。</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=goforboneyar-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B07SXMZLP9&linkId=c6502659b071a0928e66077ceb6d58a4&bc1=ffffff&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr"></iframe>
<br><br>
<h3><a href="https://www.apple.com/jp/macbook-air/">MacBook Air 2020</a></h3>
<p>以前から持ち運び用としてMacBook 12インチを持っていたのだけど、一部キーボードが反応しなくなってきたという理由と、AppleのARM初ラップトップということで購入。Qualcomm等のチップだとARMv8.2までのサポートで、Appleくらい (あとはMarvellのThunderX3) しかARMv8.3に対応しているとかはなかったので期待してたのだけど、思ったよりも高パフォーマンスだった。</p>
<p>不満は前まで使ってたMacBookよりも重いということ</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=goforboneyar-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B08N6M5NFY&linkId=83f21076b7e2b222e3b031554823e322&bc1=ffffff&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr"></iframe>
<br><br>
<h3><a href="https://www.dyson.co.jp/air-treatment/purifiers/dyson-pure-cool-me/dyson-pure-cool-me-white-fuchsia.aspx">Dyson Pure Cool Me</a></h3>
<p>空気清浄機+扇風機的なのが欲しかったので購入。使う場所は仕事部屋 (4.5畳もない) なのでこのモデルにした。これを買ったもう一つの理由はディスカウントで2万円くらいで手に入ったということ。</p>
<p>そもそもこの仕事部屋についているエアコンが壊れてしまったので (引っ越すかどうかを決めてないので買い直してない)、この夏には欠かせないものになってた。</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=tf_til&t=goforboneyar-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B07QBB8MGM&linkId=e546440c7bfbb11184f2bfbebba1c177&bc1=ffffff&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr"></iframe>
<br><br>
<h3><a href="https://jp.sharp/hotcook/products/knhw10e/">ヘルシオ ホットクック KN-HW10E</a></h3>
<p>ちょうどコロナ禍の前に購入。電気圧力鍋を買うかどうかを悩んできたのだけど、ホットクックだと低温調理もあるし、面白そうなのでということで。材料だけ切って入れてしまえば、ある程度料理ができるという手抜き料理には役に立っている。</p>
<p>ただレシピ本とかだとこの1.6か2.4リットルのサイズのものが大半なので、1.6の方を買えばよかったかもとちょっと後悔してる</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=goforboneyar-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B081F1R8D3&linkId=4bf3b78e54db05bf732ec325749d16a3&bc1=ffffff&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr"></iframe>
<br><br>
<h3><a href="https://www.vitantonio.jp/products/waffle-baker/VWH-50-R.html">ワッフル&ホットサンドベーカーVWH-50-R</a></h3>
<p>つい12月に購入。中のプレートを外して洗えるのはいいですね。まだ購入して日が浅いのでそのくらい</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=goforboneyar-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B07ZNLDK3B&linkId=79e6fcc78796eb254022c16bb9abfa55&bc1=ffffff&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr"></iframe>Makotohttp://www.blogger.com/profile/06587987793631355128[email protected]0