複天一流:どんな手を使ってでも問題解決を図るブログ

宮本武蔵の五輪書の教えに従い、どんな手を使ってでも問題解決を図るブログです(特に、科学、数学、工学の問題についてですが)

macbook pro (M1 pro chip)に乗り換える

macbook pro (M1 pro chip)が活動開始

このところのHackintoshプロジェクトにより、いろいろ止まっていたものが動き出した感じがある。ASUSノートPCが蘇生され、VAIO-ubuntuがひさびさに起動され、そしてついに埃をかぶっていたM1チップ搭載のmacbook proに光が灯ったのである! (このブログもM1 macbook proで執筆している。)

かねてからの懸念事項だった(i)強化されたSIP(ii)CPUアーキテクチャ変更による大きな混乱(今回はrosettaというのを利用するらしい)の2つについてはまだ完全に乗り越えたわけではないが、少しずつ慣れていくはずである。いつまでもmojaveというわけにはいかないのだ。

とはいえ、M1 macbook proを購入したのは、もう2年ほど前のことである。このマシンですら「古い」のだから、世の中の動きは本当に早いと実感する。

さて、購入してから初めてまともに動かしてみたのだが、デフォルトで入っていたmacOSは(先日外部ディスクにインストールして動きが鈍くてストレスが溜まった)montereyであった。

カーネルの情報を確認してみた。

$uname -prsv
Darwin 21.4.0 Darwin Kernel Version 21.4.0: Mon Feb 21 20:35:58 PST 2022; root:xnu-8020.101.4~2/RELEASE_ARM64_T6000 arm

XNUというのはDarwinの一部だという。 wikipediaによれば、DarwinmacOSのコア部分であり、XNUはそのカーネルだという(unameの出力には"Darwin Kernel Version"と書いてあるけど...)。 カーネルの対応がARM64になっているのが、Apple M1チップ搭載マシンであることを示唆している。Intel Core系のmacbook proの場合はx86_64 i386と出る。

CPUのパフォーマンスのベンチマーク

まずはCPUの性能をベンチマークしてみよう。利用するのは最近知ったbcである。montereyのメインシェルはzshである(これはcatalinaからそうなので、それほどショックではない)。とはいえ、パフォーマンスを比較するのはmojaveなので、bashに切り替えてから実行することにする。

実行するのは

% bash
% time echo "scale=5000; a(1.0)*4.0" | bc -ql

である。円周率を5000桁まで計算させるベンチマークである。まずは、M1 mackbook pro (M1-mbp)から。

3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
22317253594081284811174502841027019385211055596446229489549303819644\
28810975665933446128475648233786783165271201909145648566923460348610\
45432664821339360726024914127372458700660631558817488152092096282925\
40917153643678925903600113305305488204665213841469519415116094330572\
70365759591953092186117381932611793105118548074462379962749567351885\
75272489122793818301194912983367336244065664308602139494639522473719\
07021798609437027705392171762931767523846748184676694051320005681271\
45263560827785771342757789609173637178721468440901224953430146549585\
37105079227968925892354201995611212902196086403441815981362977477130\

...途中省略...

74351362222477158915049530984448933309634087807693259939780541934144\
73774418426312986080998886874132604720

real 0m9.082s
user  0m8.985s
sys  0m0.084s

10秒を切った。

同じコマンドをMojave, そしてCatalinaでやってみた。

macOS Mojave (ver.10.14.6) (3.3GHz, Intel core i7): 

real    0m19.391s
user   0m19.214s
sys     0m0.044s

macOS Catalina (ver.10.15.7) (1.4GHz, Intel core i5):

real    0m14.638s
user   0m14.590s
sys     0m0.032s

参考:VAIO Linux Ubuntu (20.04.2 LTS, Focal Fossa) (1.6GHz, Intel core i5):

real    0m14.968s
user   0m14.965s
sys     0m0.000s

さすがに「新しい」マシンほど順に速くなっているが、Catalina搭載のmacbookVAIOのCPUが「やや非力」である点は注意が要るだろう。とはいえ、10年かけて倍速になったという程度であり、これは想像の範囲内である。驚きはない。

ちなみに、M1 chipの仕様には「周波数」は表示されないようである。

M1のアークテクチャはARMを基本にしているとのことであるが、 そういえば、iPhoneRaspberry piなどもARM系列である。 Intel一強だったのが、数年前から次第にARMやnvidiaなどに移ってきたのであろうか? また、AMDの最近の動向はどうなのであろうか? まだまだ「浦島状態」は続く。

最初のインストールアプリ群

最初にインストールしたのはfirefoxである(ver.102.0.1)。これはdmgでダウンロードしてそのままコピーしただけ。何の問題もない。

次にインストールしたのはhomebrewである。firefoxでhomebrewのHPに行き、指示通りにスクリプトを走らせる。それほど時間はかからない。PATHを/opt/homebrew/binに通すために、2つほどコマンドを(やはり指示通りに)打つ。これでbrewが使えるようになった。

プログラミング言語を確認する。

$gcc --verion

Apple clang version 13.1.6 (clang-1316.0.21.2.5)
Target: arm64-apple-darwin21.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

Cだけでなく、C++Objective-Cも一緒に処理してくれるclangというコンパイラになっているそうである。

$ python3 --version

Python 3.8.9

pythonはすぐに使えそうである。

$ javac
The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.com for information on installing Java.

$ which javac
/usr/bin/javac
$ which java
/usr/bin/java

javaもjavacもインストールされているが使えない状態にあるようだ。

homebrewで調べてみる。

$ brew search java
==> Formulae
google-java-format         java11                     jslint4java
java ✔                     javacc                     libreadline-java
java-service-wrapper       javarepl                   pdftk-java

==> Casks
ava                 eclipse-java        eclipse-javascript  oracle-jdk-javadoc

If you meant "java" specifically:
It was migrated from homebrew/cask to homebrew/core.

このメッセージをみると「すでにインストールされている?」という感じが何となくする。 とはいえ、javaは最近利用してないので、後回しにしよう。

もっと重要なのはgfortranである。こちらはまちがいなくインストールされてないので、確認不要でまずはインストールである。

brew install gfortran

gccの拡張パッケージのような扱いになっているので、これはgccのバージョンと同じになる。

$ gfortran --version
GNU Fortran (Homebrew GCC 13.2.0) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

次はTeX環境である。どうもMacTeXというパッケージをいれたらよかったらしいが、思いつきでやってしまったのでtexliveから入れてしまった。いずれにせよフォントの準備など結構時間がかかるが、問題なく終了して安堵である。

mactexとtexliveは設定が競合する場合もあるようなので注意が必要らしい。私は次のような順番でやったところまではうまく行った。

$brew install texlive
$brew install mactex
$sudo tlmgr update --self --all

しかし、指示にあった次のコマンドでエラーが出た。

$tlmgr paper a4
tlmgr: action not allowed in system mode: paper

texliveではこの設定はすでにやってあるらしく、あまりいじらない方がいいみたいである。試しにいろいろなオプションで文書作成してみたが、違いはあまりないようである。デフォルトで紙の大きさをA4に固定するのは、これ以上追求しないことにした。

3つ目はgimpである。ブログで画像を表示するとき、個人情報などにblurをかけるときがあるので、gimpは最初に入れたいツールの一つである。 これも簡単に終了。ちなみにhomebrewでインストールすると直接起動できる。つまり、

$ open -a gimp
$ gimp

どちらでも可能だが、なんとなく(これまで通りの)前者の方法の方が起動が早かった気がする。

4つ目はgnuplotである。このブログでも頻繁に利用しているから必須アプリである。これも問題なし。

日本語のコード変換をやってくれるnkfも(ある意味)必須であるからインストールしてしまう。

brew install gnuplot
brew install nkf

ここからが問題であった。エディタである。emacsをずっと使ってきたが、コロナウイルスが蔓延り始めたころから、atomも併用するようになった。2つともインストールしたいが、つまづいた。

emacsのインストール

emacsのインストールでは多少の問題があったが、すぐに解決できたので、終わりよければ全てよし、の状態である。

まず間違えたのが、

brew install emacs

である。terminalで起動し、利用するだけなら、これでもいいのだが、GUIベース(Cocoa?というのだろうか?)のバージョンを利用することもときどきある。

本来、そちらは、

brew install emacs --cask

でインストールできるのだが、先にcaskなしでインストールしてしまうと、次にcaskをやろうとしても「すでにemacsはインストールされており、これ以上なにもできません」みたいなエラーメッセージが出てしまい、先へ行かなくなってしまうのである。

この状態に陥ったら、いったんuninstallした後に、cask付きでインストールをやり直すのが良い。

brew uninstall emacs
brew install emacs --cask

これでGUI版が起動されることになる。

www.gnu.org

GNU emacsのHPにM-x tetrisテトリスが動く、という説明があったので、さっそくやってみた。

GUI版のemacs 29.2

「こういうのはGUIじゃなくちゃ不可能だよね」と書きたかったのだが、CLIでもテトリスが起動してしまって驚いた次第である。

CLIemacsで動いたテトリス

atomエディタのインストール

emacsは大学院の頃から使っている「古道具」であるが、atomは数年前に使い出した新しい道具である。emacsと同じキーバインドにして利用している。特に便利なのは、md(markdown)文書を自動表示してくれる点である。htmlやpdfへの変換もやってくれて便利だなと感じ始めたのが、つい最近のことである。

ところがである。atomは昨年の頭に開発が中止となったというニュースを知ったのである。

github.blog

上のHPのアナウンスによると、2022の夏頃にatomの開発陣は、更なる発展の見込みがないと判断し、atomの開発を中止するという決断をしたという。その背景には、Microsoft Visual Studioの登場(その基本技術はatomからの移譲によるものらしいが)によってAtomの利用者が減少したこともあるようだ。さらに、同年の年末にatom editorのgithubページに不正アクセスもあった(分析の結果、悪意のある機能は紛れてないそうだが)。

もともとatomを開発したのは団体としてのgithubだったこともあり、不正アクセスの分析はgithubのサイトとatomのコード両者に対して実行された。その結果「githubのサイトとそのシステムには異常がない」という結論が出た。その上で「atomのコードも大丈夫だ」というコメントが出た。これはこれで大変信頼できるコメントではあるが、atomの開発陣とgithubの中心メンバーたちは「atom開発へのエネルギー注入をやめて、その分をgithubの開発とメンテナンスに力を集約すべき」という結論に傾いたようである。

ただし、不正アクセスの可能性があったバージョンよりも古いバージョンのatomのバイナリとコードは、アーカイブされて公開され続けるそうであるから、利用しようと思えば継続することが可能である。

git cloneしてからコンパイルしてみたが、エラーメッセージが出て動かなかった。brew install atomもインストール自体はうまくいくのだが、起動を試みると同じエラーメッセージが出て、やはり動かなかった。

The application /Applications cannot be opened for an unexpected reason, error=Error Domain=NSOSStatusErrorDomain Code=-10827 "kLSNoExecutableErr: The executable is missing" UserInfo={_LSLine=3845, _LSFunction=_LSOpenStuffCallLocal}

そこで、古いバージョンのバイナリファイルをダウンロードし、解凍して、直接起動させてみることにした。

すると、rosettaをインストールしてください、というメッセージが出た。

Rosettaをインストールした後に、atomのバイナリファイルをクリックすると、どうやら起動できた。しばらくはatomで文書作成やコード作成ができそうである。まあ、一安心である。

atom ver.1.59.0の起動直後の様子

調査を続けると、次のような情報が出てきた。

qiita.com

この文書にatomが開発中止となった理由が書いてあった。「ライバル会社」にgithub自体が買収されてしまい、atomはコードと人材を根こそぎ持っていかれてしまったということである。そして、この「ライバル会社」こそがマイクロソフトだったということで、MS visual studio code(VSCode)にatomの技術がまるまる盗まれてしまったのであった。多くのユーザーは、いいものができるならいいじゃないか、ということで、あっさりとVSCodeに乗り換えてしまったらしい。

多くの開発者たちがatomを見限った影響は大きく、特にプラグインの多くがatom向けの開発をやめてしまったのはダメージである。(個人的には、markdown-preview-enhancedが使えなくなったのが非常に残念)

しかし、atomの良い点は、誰もが開発に参加でき、内容がオープンであり、誰もが機能追加を自由にやってよいという点であった。emacsキーバインドなんかも、その流れで開発されたものであるし、これこそがgithubの精神のど真ん中であったと思う。ハッカーの一部は、この文化を維持するために、pulsar editorと名前を変えて、開発を継続しているとのことである。 ということで、試しにインストールしてみた(といってもバイナリのダウンロードのみ)。

pulsar-edit.dev

起動した直後の状態をスクリーンショットしてみたが、ロゴマークが変わっただけで、ほとんどatomと同じ。

pulsar ver1.114.0 arm64の起動直後の様子

基本的な機能は維持されているし、emacs-keybindingも簡単にプラグインできた。しかし、残念ながらまともに動くmarkdown-previewプラグインは見つからなかった。特にMathJax系列の数式の表示に関しては、我々理系人間には必須の機能であるが、これがまともに表示できないのではmarkdown editorとしては候補から外さねばなるまい。

仕方ないので、以前から使っているMojaveのatom editorのプラグイン環境をM1-macbookにコピーし、atomの最後のバージョンに読み込ませて使うことにした。残念ながら、最後のバージョンで直接プラグインをダウンロードし組み込むのは困難な状況になっている。多くの貢献者たちがatom向けのメンテナンスをやめてしまったため、エラーが出て先にいけないのだ。「もはや、atomは死んだ」とか、「ゴーストタウンのようだ」というメッセージが、多くの開発者のブログに書かれていて衝撃を受けた。たぶん、atomが死ぬのは時間の問題だと思われる。せっかく、emacsの後継エディタの有力候補だったのに、あっというまにいなくなってしまいそうである。ということで、今はemacsに戻るのが正解であると考えている。