The Rule Of 2

「Chrome」の深刻なセキュリティ脆弱性、70%はメモリー安全性の問題 - ZDNet Japan を読んでいたら、「The Rule of 2」なるものが出てきた。その記事によれば

モリー管理関係の脆弱性が大きな問題になっていることなどから、最近では、Chromeの開発者は「Rule Of 2」と呼ばれるルールに従うことになっている。

このルールは、新機能を実装する際には、書いているコードが以下の3つの条件のうち2つに当てはまってはならないというものだ。

ということなのだけど、「2つ(以上?)に当てはまってはいけない」のなら、 「CやC++で書かれたコードで信頼できない入力を処理する」とか 「CやC++で書かれたコードをサンドボックスなしで実行する」みたいのもアウトなわけでそれは…? (FirefoxならRustで…ってのがあるかもしれないけどChromeはそういうのないよねえ) そもそも三条件のすぐ後に出てくるベン図

f:id:finalfusion:20200527001420p:plain
"Rule of Two"
を見ると"Dont' Do This"なのは2つじゃなくて3つの条件を満たす場合のような。

ということで翻訳元の記事 Chrome: 70% of all security bugs are memory safety issues | ZDNet を見てみると

According to this rule, whenever engineers write a new Chrome feature, their code must not break more than two of the following conditions:

  • The code handles untrustworthy inputs
  • The code runs with no sandbox
  • The code is written in an unsafe programming language (C/C++)

はい。"more than two of the following conditions"なので、2つってことはありませんわな。

ところで、翻訳記事、翻訳元記事とは別に記事中にリンクのあるThe Rule Of 2 を見ると

When you write code to parse, evaluate, or otherwise handle untrustworthy inputs from the Internet — which is almost everything we do in a web browser! — we like to follow a simple rule to make sure it's safe enough to do so. The Rule Of 2 is: Pick no more than 2 of

  • untrustworthy inputs;
  • unsafe implementation language; and
  • high privilege.

という3条件なのでニュアンスが微妙に違う気がしないでもない。

行動を変えるデザイン

オライリージャパンの来月の新刊予定に今回のタイトルにも使った名前の本があった。

O'Reilly Japan - Books :: New and Upcoming

行動を変えるデザイン 978-4-87311-914-4 3,740円 2020年06月

行動経済学などは最近気になって軽く追いかけている分野ではあるのでどんなものか気になる。 が、いつものことだけど近刊予定に載った段階では原著タイトルなどは書いてくれていないので、 自分で調べる。

書名で検索するとAmazon楽天ブックスには既に登録されていた。

これで原著者の名前がわかったので、これを使ってAmazonで検索すると原著らしいものが見つかった。 しかし、今年(2020年)の7月に新版が発売予定になっていて、旧版(には現時点ではなっていないけど)の出版は2013年だった。

オライリー(本社の方)のサイトは自社での電子書籍販売を止めて以降はすごく使いにくくなっていて、 Online Safari の契約していないとろくな情報がとれないので新版でどういう更新があったのかなどはまったくわからない。 更新のボリュームなどによっては2013年の内容ベースの翻訳なら買うのは微妙だなあ。

日本のAmazonだと旧版が394ページ、新版が200ページになってるけど、アメリカのAmazonでは新版のページ数は 382ページだった。全体のボリュームとしてはちょっと減ったという感じだけど

LongPtr

VBA には LongPtr というデータ型があるということをYouTubeでとある番組を見て知った。 その番組中では LongPtr を32bit環境では32bit長の符号付整数になり 64bit環境では64bit長の符号付整数になるデータ型であるといった説明をしていたのだけど、 Ptrという部分を見るに単純な整数型ではなくてポインターを収めるためのものという気がする。

たとえば Win32API_PtrSafe.TXT の GetWindowLongPtrA function (winuser.h) - Win32 apps | Microsoft Docs の辺りを見るとこんな感じになっていて

#If Win64 Then
Declare PtrSafe Function GetWindowLongPtr Lib "user32" Alias "GetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
Declare PtrSafe Function SetWindowLongPtr Lib "user32" Alias "SetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Declare PtrSafe Function GetClassLongPtr Lib "user32" Alias "GetClassLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
Declare PtrSafe Function SetClassLongPtr Lib "user32" Alias "SetClassLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
#Else
Declare PtrSafe Function GetWindowLongPtr Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
Declare PtrSafe Function SetWindowLongPtr Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Declare PtrSafe Function GetClassLongPtr Lib "user32" Alias "GetClassLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
Declare PtrSafe Function SetClassLongPtr Lib "user32" Alias "SetClassLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr

32bit Windowsでは32bit、64bit Windowsでは64bitになる部分に LongPtrが使われている。

ちなみにMicrosoftのサイト データ型の概要 | Microsoft Docs にあった説明ではこう。

LongPtr は、32 ビット環境では Long に変換され、64 ビット環境では LongLong に変換されるので、実際のデータ型ではありません。 LongPtr を使用して Declare ステートメントポインター値とハンドル値を表す必要があり、このようにすると 32 ビットと 64 ビットの両方の環境で実行できる移植性の高いコードを作成できます。

まあMicrosoftのサイトの別のところでは(環境により大きさの異なる)整数型と読めるような記述もあったりするんだけど、 LongPtr データ型 | Microsoft Docs にはこういう記述がある。

注意

LongPtr は、32 ビット環境では Long に変換され、64 ビット環境では LongLong に変換されるので、実際のデータ型ではありません。 LongPtr を使用すると、32 ビット環境と 64 ビット環境の両方で実行できる移植性のあるコードを作成できます。 ポインターおよびハンドラーには LongPtr を使用してください。

「ハンドラー」?と疑問に思ったので英語での記述を確かめてみると

LongPtr is not a true data type because it transforms to a Long in 32-bit environments, or a LongLong in 64-bit environments. Using LongPtr enables writing portable code that can run in both 32-bit and 64-bit environments. Use LongPtr for pointers and handles.

「ハンドル」(複数)だった。なぜに日本語訳で化けた?

翻訳についての雑感

鳥の歌いまは絶え

ようやく買った。 本文はまだこれから読むところなのだけど、先にあとがきを読んでいて 強く印象に残ったところがあったので以下に引用する。

余談だが、訳者の酒匂氏が浅倉久志氏と電話で話していたおりに、Where Late the Sweet Birds Song をどうやってタイトルにふさわしい日本語にしたらいいかと悩んでいる、と相談したところ、 「そういうのはこう訳せばいいんだよ」と、さらっと『鳥の歌いまは絶え』と訳されたのだそうである。 さすが名匠という言葉の選択で、印象的なエピソードとしてここに記しておきたい。

この小説の原題を気にしたことはなかったけど、なるほどこういうタイトルであの邦題になってたのね。

公称型

翻訳絡みでもうひとつ。

どうもこのギョーカイの翻訳について書こうとするとほぼ文句しか出てこないのは 我が身を振り返っても(商業的な翻訳はやったことないが)どうにかしたいところではあるのだけど、 今回も「ケチ」をつけてしまう次第。

最近になってこの「公称型」という語をちらほら見かけるようになったので、気になってちょっと調べてみたところ どうも Nominal Typing の訳として使っているようだ。 英語から日本語にある用語を持ち込んでくるときに 英語では動詞の活用形だった部分が日本語(カタカナ表記)では原型になってしまうことは、 たとえば punched card → パンチカードのようにそこそこ見られる現象だと思う。

とは言え、原型のカタカナ表記をすっ飛ばした上に動詞ではなく名詞から日本語にしてしまうというのはいただけない。 ついでに言えば、「公称」も英和辞典を見れば nominal の訳としてでてくることもあるものだけど nominal typing の訳に使うのはどうだろうか。

鉄山靠

鉄山靠(てつざんこう)という中国拳法の技がある。 バーチャファイター - Wikipedia拳児 - Wikipedia でご存知の方もそこそこいることだろう。

この鉄山靠の靠という字、鉄山靠という語が辞書になければ入力するのに苦労していたのだけど (「コウ」で見つかる場合もあるが、「コウ」と読む漢字は結構ある)、 訓読みがあったということをつい最近知った 靠れる(もたれる)とは - 靠れるの読み方 Weblio辞書

鉄山靠のあの動きは「もたれる」とは少し違うような気もするけど、まあそれはそれ。

ゲームボーイ

31年前の今日、ゲームボーイが発売された。らしい。 1989年4月21日、携帯型ゲーム機「ゲームボーイ」が発売されました:今日は何の日? - Engadget 日本版

日付はすっかり忘れてたけど(セガサターンや初代プレステは覚えてる)、確か発売日に渋谷まで買いに行ったんだよね。 買ったのは今はもうない量販店(店舗のあった建物は残ってるけど)で、本体2台とテトリス2本あとクイックスだったかなあ。

特にオチはない。

追記。 テトリスは6月発売と記事にあった。 だとするとソフトはなにを買ってたんだ?

ゲームボーイ

31年前の今日、ゲームボーイが発売された。らしい。 1989年4月21日、携帯型ゲーム機「ゲームボーイ」が発売されました:今日は何の日? - Engadget 日本版

日付はすっかり忘れてたけど(セガサターンや初代プレステは覚えてる)、確か発売日に渋谷まで買いに行ったんだよね。 買ったのは今はもうない量販店(店舗のあった建物は残ってるけど)で、本体2台とテトリス2本あとクイックスだったかなあ。

特にオチはない。