tag:blogger.com,1999:blog-13306666989704237282024-03-14T17:54:45.120+09:00won't fixLife with Web Browser Engine (Gecko, WebKit and etc), Mobile and etc.Makotohttp://www.blogger.com/profile/06587987793631355128noreply@blogger.comBlogger375125tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com1tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com0tag: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/06587987793631355128noreply@blogger.com1tag: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/06587987793631355128noreply@blogger.com0tag:blogger.com,1999:blog-1330666698970423728.post-62085069677944085212020-11-30T16:49:00.003+09:002023-04-22T08:25:06.988+09:00Apple M1のSHA512命令<p>新しいARM Crypto Extensionだと、中国系のSM3とかSHA3とかSHA512とかの専用命令があるのだけど、Appleは比較的こういうところに投資をしてるので、Appleのチップだと実装されている。</p>
<p>パフォーマンス的な情報はインターネットに転がっていないので、試しに手元で実装してみた。データはいつもの通りのNSSでのデータ。<p>
<p>実装前のデータはこれ。</p>
<pre style="font-size: 10pt; background-color: #e0e0e0;"># mode in opreps cxreps context op time(sec) thrgput
sha512_e 1Gb 15M 0 0.000 10000.000 10.000 168Mb</pre>
<p>実装するとこうなる</p>
<pre style="font-size: 10pt; background-color: #e0e0e0;"># mode in opreps cxreps context op time(sec) thrgput
sha512_e 4Gb 47M 0 0.000 10000.000 10.000 503Mb</pre>
<p>SHA1、SHA256と同様に3倍くらい速くなる感じですね。</p>
<p>SHA256とは違って、ROUNDに対するレジスタが足りないので、<code>ext</code>を使って、利用するベクタを選択しながらループしないといけないのでシンプルにはならない</p>
<pre style="font-size: 10pt; background-color: #e0e0e0;">
#define ROUND(n, a, b, c, d, e, f, g, h, w0, w1, w2, w3, w4) \
{ \
uint64x2_t t, fg, de; \
t = vaddq_u64(a, vld1q_u64(K512 + n * 2)); \
t = vreinterpretq_u64_u8(vextq_u8(vreinterpretq_u8_u64(t), \
vreinterpretq_u8_u64(t), 8)); \
de = vreinterpretq_u64_u8(vextq_u8(vreinterpretq_u8_u64(w1), \
vreinterpretq_u8_u64(w2), 8)); \
fg = vreinterpretq_u64_u8(vextq_u8(vreinterpretq_u8_u64(w2), \
vreinterpretq_u8_u64(w3), 8)); \
w3 = vaddq_u64(w3, t); \
w3 = vsha512hq_u64(w3, fg, de); \
w4 = vaddq_u64(w1, w3); \
w3 = vsha512h2q_u64(w3, w1, w0); \
if (n < 32) { \
a = vsha512su0q_u64(a, b); \
a = vsha512su1q_u64(a, h, \
vextq_u8(vreinterpretq_u8_u64(e), \
vreinterpretq_u8_u64(f), 8)); \
} \
}</pre>
<p>なお、SHA512のIntrinsicsはgccの最新であれば実装されているが、clangの場合は最新のコードでも実装されていないので、インラインアセンブラ使うなりアセンブラで書かないといけない</p>Makotohttp://www.blogger.com/profile/06587987793631355128noreply@blogger.com0tag:blogger.com,1999:blog-1330666698970423728.post-12070724827501895452020-11-24T18:03:00.008+09:002020-11-24T18:16:03.053+09:00Apple M1におけるARM Crypto Extensionのベンチマーク<p>MacBook Airを入手したので。NSS (<a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS">https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS</a>) に含まれるbltestでのベンチデータ。比較対象にAWSのm6g.mediumのデータを置いておく</p>
<h3>Apple M1 with ARM Crypto Extension (xcode's clang)</h3>
<pre style="font-size: 10pt; background-color: #e0e0e0;"># mode in symmkey opreps cxreps context op time(sec) thrgput
aes_ecb_e 24Gb 256 1B 0 0.000 10000.000 10.001 2Gb
aes_ecb_d 23Gb 256 1B 0 0.000 10000.000 10.000 2Gb
aes_cbc_e 7Gb 256 532M 0 0.000 10000.000 10.000 812Mb
aes_cbc_d 24Gb 256 1B 0 0.000 10000.000 10.001 2Gb
# mode in opreps cxreps context op time(sec) thrgput
sha1_e 8Gb 282M 0 0.000 10000.000 10.000 861Mb
sha256_e 8Gb 155M 0 0.000 10000.000 10.000 828Mb</pre>
<h3>AWS m6g.medium with ARM Crypto Extension (Ubuntu's clang 10)</h3>
<pre style="font-size: 10pt; background-color: #e0e0e0;"># mode in symmkey opreps cxreps context op time(sec) thrgput
aes_ecb_e 8Gb 256 550M 0 0.000 10000.000 10.000 840Mb
aes_ecb_d 7Gb 256 502M 0 0.000 10000.000 10.000 766Mb
aes_cbc_e 6Gb 256 465M 0 0.000 10000.000 10.000 710Mb
aes_cbc_d 6Gb 256 442M 0 0.000 10002.000 10.002 674Mb
# mode in opreps cxreps context op time(sec) thrgput
sha1_e 4Gb 141M 0 0.000 10000.000 10.000 430Mb
sha256_e 3Gb 66M 0 0.000 10000.000 10.000 354Mb</pre>
<p>AES-CBCモードのEncryptionだけなぜか遅いという結果。ECBモードだと変わらないので、clangが生成したコードがApple M1のパイプラインでペナルティが発生するような状態と推測される。
<p>なお、ARM Crypto Extensionを無効にすることもできるので、その場合。</p>
<h3>Apple M1 without ARM Crypto Extension</h3>
<pre style="font-size: 10pt; background-color: #e0e0e0;"># mode in symmkey opreps cxreps context op time(sec) thrgput
aes_ecb_e 2Gb 256 155M 0 0.000 10000.000 10.000 236Mb
aes_ecb_d 2Gb 256 143M 0 0.000 10000.000 10.001 218Mb
aes_cbc_e 1Gb 256 133M 0 0.000 10000.000 10.000 203Mb
aes_cbc_d 1Gb 256 130M 0 0.000 10000.000 10.000 199Mb
# mode in opreps cxreps context op time(sec) thrgput
sha1_e 3Gb 108M 0 0.000 10000.000 10.000 331Mb
sha256_e 1Gb 21M 0 0.000 10000.000 10.000 113Mb</pre>
<h3>AWS m6g.medium without ARM Crypto Extension</h3>
<pre style="font-size: 10pt; background-color: #e0e0e0;"># mode in symmkey opreps cxreps context op time(sec) thrgput
aes_ecb_e 1Gb 256 82M 0 0.000 10000.000 10.000 126Mb
aes_ecb_d 1Gb 256 80M 0 0.000 10000.000 10.000 122Mb
aes_cbc_e 1Gb 256 81M 0 0.000 10000.000 10.000 124Mb
aes_cbc_d 1Gb 256 73M 0 0.000 10000.000 10.000 112Mb
# mode in opreps cxreps context op time(sec) thrgput
sha1_e 1Gb 45M 0 0.000 10000.000 10.000 139Mb
sha256_e 872Mb 16M 0 0.000 10000.000 10.000 87Mb</pre>Makotohttp://www.blogger.com/profile/06587987793631355128noreply@blogger.com0tag:blogger.com,1999:blog-1330666698970423728.post-58595583873569578592020-10-19T14:44:00.004+09:002020-10-19T14:46:14.128+09:00AWSのarm64インスタンスでarmhfなバイナリを動かす<p>自分用メモ。AWSのa1またはm6インスタンス上のUbuntu 20.04はarm64バイナリは実行できるが、32-bitなARM、例えばarmhfは実行できない。チップはA32を実行できるようなので、<a href="https://wiki.debian.org/Multiarch/HOWTO">multiarch</a>を使えば動く。これでA32のテストも可能。</p>
例えば、
<pre>
dpkg --add-architecture armhf
appt update
apt install gcc-arm-linux-gnueabihf libc6:armhf
</pre>
な感じ。Makotohttp://www.blogger.com/profile/06587987793631355128noreply@blogger.com0tag:blogger.com,1999:blog-1330666698970423728.post-25368849071779899842020-09-16T16:16:00.005+09:002020-09-16T16:33:18.288+09:00Chat Channels of Web Engine<p>メジャーブラウザを作っている三者 (Apple、Google、Mozilla) は知ってる限り、各ブラウザプロジェクト用チャットチャンネルを持っている。FreenodeにChromiumとWebKitのチャンネルはあるのだけど、実際そんなに使われているわけではなくて、別のものを使っている。AppleとGoogleは<a href="https://slack.com/">Slack</a>に、Mozillaは<a href="https://matrix.org/">Matrix</a>上に存在する。Mozillaも社内向けには別のチャンネルがあるし、ずっとIRCサーバーを運用してたのだけど、最近Matrixに移行した</p>
<h4>Chromium</h4>
<p><a href="https://chromium.slack.com">https://chromium.slack.com/</a>。chromium.orgアカウントを持っているとか、彼らにとってのパートナー会社であれば、Slackのチャットサーバーに入ることはできる [<a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/Nr-SENBRPI0">*</a>]</p>
<h4>Gecko</h4>
<p><a href="https://chat.mozilla.org/">https://chat.mozilla.org/</a>。githubアカウントでもFirefoxアカウントでも入ることが可能</p>
<h4>WebKit</h4>
<p><a href="https://webkit.slack.com/">https://webkit.slack.com/</a>。<a href="https://webkit.org/getting-started/">https://webkit.org/getting-started/</a>に招待リンクがあるから、そこから入ることはできる</p>
<p>メモとして残しておく</p>Makotohttp://www.blogger.com/profile/06587987793631355128noreply@blogger.com0tag:blogger.com,1999:blog-1330666698970423728.post-90009263535780324222020-09-08T00:04:00.006+09:002020-09-08T13:11:58.006+09:00IS_PRIVATE on Windows 10 20H1<p>昔書いた<a href="https://wontfix.blogspot.com/2016/08/how-to-use-microsoft-imes-private-mode.html">How to use Microsoft IME's private mode on not IE/Edige</a>の続きの話。</p>
<p>このとき調べたようにMicrosoft IMEにおけるPrivate Mode (変換情報を学習しない) という機能は、Microsoft IMEがIE内部の隠しAPIを呼ぶことで実現してた。そのためMicrosoft EdgeやInternet Explorerでのみ使える機能で他社のWeb Browserでは使うことができなかった (というかWeb Browserに限定しないけど)。</p>
<p>で時は過ぎ、Microsoft EdgeがChromiumベースになることになった。Chromiumベースになったということでこれで晴れて公開APIができると思ったけど、全くそんなことはなかった。ただ、<a href="https://source.chromium.org/chromium/chromium/src/+/b8c45b5c2483d18ecc00f4cea6e63b2d4f040a16">非常に面白いパッチ</a>がChromiumに入った。</p>
<pre style="background: #E0E0E0;">For TSF1 on Windows 10, we need to set input scope to IS_PRIVATE if we
are in "Incognito" or "guest" mode.
Bug: 958054
Change-Id: I35e4adec0fd1800cff1ec2fcfe7983e2a65540e8
Reviewed-on: <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1591886">https://chromium-review.googlesource.com/c/chromium/src/+/1591886</a>
Commit-Queue: Siye Liu <siliu@microsoft.com>
Reviewed-by: Yohei Yukawa <yukawa@chromium.org>
Cr-Commit-Position: refs/heads/master@{#657438}</pre>
<p>この修正を見たところ、「以前Microsoft IMEは<a href="https://docs.microsoft.com/en-us/windows/win32/api/inputscope/ne-inputscope-inputscope">IS_PRIVATE</a>を見てないはずなのに。もしかしてWindows Insiderビルドで直ってたの?」と思ったのだけど、ダウンロード可能なWindows Insiderビルド+Chrome Canaryで全然直ってない。あれ?ということで、MicrosoftのIMEチームへ直接コンタクトしてみたところ、「IMEチームのバグリストには存在してるんですが。。。」的な回答が返ってきた。さすが自分がいたころ (10年以上前) と一緒で、縦割りすぎて横連携できない会社のままだなぁと思ったのだが、それで放置しても誰も得をしないので、IMEチームの人といろいろやり取りして、Windows 10 20H1のMicrosoft IMEではInputScopeのIS_PRIVATEを見るようにしてもらいました。IS_PRIVATEをつけてる場合は、IMEは学習しないようになっているため、もしアプリケーションでIMEの学習機能を無効にしたいのであれば、IS_PRIVATEを使ってください。<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1549394">FirefoxでもWindows 10 20H1を使えばプライベートモードであれば学習しない</a>ようにしてます。</p>
Makotohttp://www.blogger.com/profile/06587987793631355128noreply@blogger.com0