投稿者「mod_poppo」のアーカイブ

AIでも生成できる技術記事に価値はあるのか

最近、Qiitaの「タイムライン」(指定したタグのついた記事を新着順に表示してくれる機能)を眺めていると、ある特徴を持った記事が散見されるようになった。その特徴とは、

  • 内容が当たり障りないというか、オリジナルの知見とか著者の感情のようなものが少なく、淡白である
  • セクションに番号が振られている
  • 著者のページを見に行くと、毎日のように記事を公開している

である。そう、AIで生成された可能性が高い記事だ。

最近見かけるようになったAI生成された技術記事について何点か思うところがあるので、書いておく。

続きを読む

WSL2へVS CodeからSSH接続する/VS Codeを使いこなしたい

最近はメインのテキストエディターとしてVisual Studio Codeを使っています。しかし、いまいち使いこなせている気がしません。

作業内容としては、最近はGHCのSIMDプリミティブの実装をやっていて、x86-64 WindowsマシンのWSL2で作業することが多いです。しかし、私のメインマシンはMacで、MacでFirefoxを開きつつ、リモートデスクトップでWindowsにつなぎ、その上でターミナルとVS Codeを立ち上げて作業していました。「直接Windowsで作業しろよ」とか言われそうですね。

このやり方では困ったことがあって、Mac miniのネットワークの問題なのか、時々リモートデスクトップが固まります。固まっている間はエディターへの入力もできなくなります。

リモートデスクトップ越しではなく、手元のVS Codeを使えばこの問題を回避できそうです。ネットワーク接続はファイルを開くタイミングと保存するタイミングで繋がっていればいいわけですからね。つまり、MacのVS CodeからWindows機のWSL2へSSH接続するのです。

(昔使っていたEmacsにもSSH越しに作業するモードがありました。)

というわけで、重い腰を上げてVS CodeでSSH越しに作業する方法を調べました。

続きを読む

「オイラーの定数ガンマ γで旅する数学の世界」を読んだ

ずっと積んであった「オイラーの定数ガンマ γで旅する数学の世界」を読みました。

この本は私が学部生の頃(2010年代前半)に生協書籍部で見つけて、面白そうだったので買った本です。しかし、この本にはある欠点(後述)があり、学部の時は読むのを断念しました。

この本はどういう本か

数学を代表する定数といえば、円周率π、自然対数の底e、虚数単位iが挙がるでしょう。少し物知りな人は、第4の定数(実数としては、第3の定数)としてオイラーの定数γ(ガンマ)を挙げるかもしれません。

この本は、タイトルの通り、オイラーの定数ガンマの話題を扱った本です。教科書というよりは、読み物です。数学に関するエピソードがふんだんに散りばめられています。

関連する話題として、調和級数、ゼータ関数なども扱っています。本の後半は素数定理とリーマン予想の話題です。

双子素数の逆数和の話で「Pentium FDIVバグが見つかるきっかけになったのが双子素数の逆数和の計算だった」というエピソードに触れられており、プログラマーとしては興味深かったです。

翻訳の質が低い

学部生の時にこの本を読むのを断念したのは、翻訳の質が低いと感じたからです。日本語がこなれていないというか。(これは邦訳だけを読んだ感想です。この記事は英語の原著を読まずに書かれています。)

私が翻訳の質について敏感であるという側面は多分あります。私は中学生の頃に2chの「ハリーポッターの邦訳のここがおかしい」みたいなスレッドに入り浸っていました(そのスレッドでは、Lily, Petunia姉妹の上下が邦訳ではグダグダになっているとか、vanishとbanishを取り違えている疑惑とか、The Boy Who LivedとThe boy who livedの訳し分けとかを語っていました)。大学以降では、IT技術の記事を扱っているpostd.ccというサイトの翻訳の質が低いようなことを短文投稿SNSで愚痴っていました。

多少翻訳の質が低くても、気にせずに読める人は多いのでしょう。しかし、私にとっては翻訳の質が低いのはノイズになるのでした。今回も「読んだ」というよりは「スキミングした」の方が近いかもしれません。

翻訳の質の定量化は難しいですが、引っかかった箇所を具体的にいくつか挙げます。私の手元にあるのは初版第2刷です。

xii(序文):

場合によって必要になるのは,彼の名前Eulerの発音の仕方でしょう.もちろん,“Oiler”ですが.

これ日本語の本ですよね。「Oiler」ってどう見ても英語圏向けの注釈ですよね。日本語版に要ります?要らないでしょ、「オイラー」ってすでに何回も書いているのに。全体的に、「日本語の本にしよう」という気概が足りないのではないかと思います。

5ページ:

ネイピアは確かにlogarithmという語(ratioとnumberを意味するラテン語を組み合わせた語)を作り,タイトルに含めましたが,…

「ratio」と「number」は英語の原著での表現なのだと思いますが、そこは日本語に訳さないのか!?と思ってしまいました。

18ページ、オイラーについて:

この定義は1770年刊の彼のベストセラーになった代数学の教科書,Complete Introduction to Algebraに出てきます.

オイラーが書いた本は多分英語ではないですよね。Elements of Algebra – Wikipediaによるとロシア語か?タイトルの英語への直訳がComplete Introduction to Algebraなのだと思いますが、日本語に訳すにあたってはタイトルも日本語に訳して、必要なら原語でのタイトルも併記する形にするべきだったと思います。

132ページ:

現代的なコンピュータで「芸術的(state-of-the-art)」なソフトウェアを使って計算すれば簡単にできます.

state-of-the-artは「芸術的」ではないですね……。最近AI周りでSOTAという語をよく見るようになりましたが、辞書を引くと「最先端」という意味が出てきます。直訳すると「技術(art)の現在の状態」→その時点での最高の技術を集めたもの、てな感じでしょうか。

こういう誤訳は、単発なら可愛いものですが、それ以外の部分で「全体的に質が低い」という印象を与えてしまうと、「質が低い」ことのエビデンスとして使われてしまうということです。

261ページ:

セルバーグは,1942年に,ハーディのオリジナルの結果をさらに進めて,すべての非自明な零点の正の部分は臨界線上にあることを示しました(これは微妙ですが,重要な区別です.例えば,ℤは無限ですが,ℝと比べた正確な大きさを測定すると0です).

「零点の正の部分」って意味伝わりますか?前後の文脈から判断して、「非自明な零点のうち臨界線上にあるものの存在割合(proportion)が正である」という風に私は解釈しましたが、合っているかは知りません(Selberg (1942)を読めばいいのでしょうが)。とにかく、もっと良い訳し方があったのではないかと思います。

このほかにも、一文が長すぎたり、直訳調だったりします。日本語ネイティブならもっと流暢な日本語にできないのか?と思ってしまいますが、訓練していないと難しいんでしょうね。


まあ翻訳にケチをつける人(私のような)がより良い翻訳をできるのか?というとそれは別問題だと思います。しかし、お金を出して買った本がイマイチだった時に愚痴る権利は2800円+税の分(実際は大学生協でさらに1割引)くらいはあると思います。

繰り返しますが、多くの人は翻訳の質を気にせずに読めると思います。ただ、私のように翻訳の質が気になる人(下手な訳がノイズになる人)は英語の原著を買った方が良いかもしれません。原著は多分これです:Amazon | Gamma: Exploring Euler’s Constant (Princeton Science Library) | Havil, Julian, Dyson, Freeman | Mathematical Physics

前にも共立出版の本をレビューしました(「数学ソフトウェアの作り方」を読んだ)が、共立出版のWebサイトを見ても誤植等の報告をどこにすればいいのかよくわからないんですよね(「お問い合わせ」でいいのか?)。そんなに自信があるならもうちょっと品質を頑張って欲しいものです。

言語処理系がLLVMに依存することの良し悪し

最近のプログラミング言語処理系を見ていると、バックエンドをLLVMに任せているものがちょいちょいあります。Rust, Swift, Juliaなどは一例に過ぎません。

私もプログラミング言語処理系の開発者として、LLVMを使うコンパイラーを触ったりしています。GHCのLLVMバックエンドを触ったりSML#をAArch64に対応させたりHaskellからLLVMを呼び出してJITコンパイルしたり、です。

LLVMは強力で便利なのですが、依存することのデメリットも感じるようになってきました。

続きを読む

GHCへの私の貢献2024

この記事はHaskell Advent Calendar 2024の24日目の記事です。


私はここ数年、Haskellの主要な処理系であるGHCに趣味で貢献しています。この記事では、今年(2024年)行なった貢献を紹介します。バグ報告のみ(修正は他の人)のものも含みますが、その場合はその旨を書いています。

同様の記事を去年(2023年)も書きました:GHCへの私の貢献2023

GHC 9.12に入ったものは「GHC 9.12の新機能」でも触れています。

こういう記事を書く目的は、一つにはOSSへの貢献の対価として名誉が欲しいというものがあります。そのほかに、自分用の備忘録という目的もあります(あのバグはどのバージョンで修正されたんだっけ、ということがたまにあります)。あとは、単純にGHCの開発状況やホットな話題を皆さんに知って欲しいというのもあります(私の趣味全開なので、非常に偏った視点ではありますが)。

GHCへの貢献方法は去年の記事を読んでください。

続きを読む

コンパイル時定数しか受け付けない引数

普通のプログラミング言語の普通の関数は、実行時に決まる値を受け取ることができます。

# 疑似コード
def foo(x: int, y: int) = print(x + y)

x = parseInt(readLine())
# x の値は実行時に決まる
foo(x + 4, 2 * x) # x + 4 や 2 * x の値も実行時に決まる

これに対して、「コンパイル時に決まる値しか受け付けない引数」を表現できると便利な場面があるのではないかと思うことが最近ありました。

続きを読む

LunarMLと文字列フォーマット

LunarMLをLuaの代替として使う際、Luaの機能を自然に使えると良さそうです。例えば、文字列フォーマット関数 string.format を呼び出す際には現状では引数の型キャストが必要ですが、フォーマット文字列にいい感じの型をつければキャストが不要になるのではないでしょうか。

ML系言語の仲間であるOCamlには、フォーマット文字列が期待される文脈で特別な型付けを行う機能があります。LunarMLでも似たようなことをするといいのではないか、というわけで検討します(検討するだけならタダなので)。

続きを読む