Mac を新調したらやること

Mac を新調したらやること。

Finder がらみ

拡張子は「表示」、隠しファイルも「表示」に変更する。

後者はターミナルから設定する必要があるが、いつも忘れてしまうためメモ。

defaults write com.apple.finder AppleShowAllFiles TRUE

ついでで

killall Finder

とやっておく。

他に apple 製品を使っているようなら、Finder サイドバーは Air Drop を表示させておいた方があとあと便利。

時刻表示

US キーボード使っているとデフォルトではアメリカ時刻になってしまうようだ。

apple メニュー -> 一般 -> 日付と時刻 で以下のパネルを表示させる。

位置情報をオンにしているなら、「現在の位置情報に基づいて、時間帯を自動的に設定」を有効にするのが一番簡単。

GitHub の SSH 接続

GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~

あたり参照。

homebrew がらみ

最近は(個人使用でも)マルチユーザー環境で使うことを意識している。

1 台の Mac でマルチアカウントで homebrew を使う

あたりを参照。

ただし、管理者アカウントのうち一人は、(自分の環境ではなく)従来通り Mac 本来の環境にインストールしておいていいかも。

Java がらみ

ワイは arm Mac では Azule というところの JDK を採用している。

こちらがダウンロードページ。.dmg を落とすのが一番楽。

プロジェクト管理には maven を使っているが、これまではバイナリなどを /usr/local や /opt に直置きしていた。
が、ユーザーによっては maven のバージョンも換えたいということがあるかもしれない、ということで、/(ユーザーホーム)/opt 以下に置くことにした。

ダウンロードページはこちら

NetBeans のダウンロードページはこちら

PostgreSQL がらみ

arm Mac 出始めの頃は、PostgreSQL.app はおろか homebrew も arm Mac にネイティブで対応していなかった。

そのせいか、macports を使って導入するケースが多かったように思う。

が、現在では両者とも arm 対応になっているので、どちらかで入れればいい・・・のだが、ここらへんはポリシーによるかも。
繰り返しになってしまうが、マルチユーザーを意識すると個々のアプリは、ユーザー各自の環境にインストールした方がいい。

だが、データベースサーバーなどを個々の環境毎に変える必要あるのか?という気はする。

こういうポリシーならば macports 由来で入れた方がいいかもしれない。

基本的なアプリなど

chrome サファリはあまり使わないんで。

Visual Studio Code エディタはお好みで。

apple の開発者証明書の引っ越し

apple に developer 登録している場合、開発者証明書を引っ越しておいた方がいいでしょう。

古いMacから新しいMacへ鍵付き証明書を持ってくる

あたりに具体的な手順が書いてある。

 

(続く)

 

 

Objective-C 再入門 -1.0.3-

今回は @autoreleasepool の話。

と言っても、私はこれに関して大して詳しくない。

オートリリースプールの使い方と基本』という素晴らしくよくまとまった記事があるので、そちらを参照してください。

オートリリースプールは通常、裏で自動的に生成・破棄されているので、基本的には意識しないで autorelease が利用できるようになっています。

ただし、無造作に独立して動いている訳ではないので、処理を長くキープし続けるような場面では、意図的にオートリリースプールを解放してあげないと、解放待ちのインスタンスでメモリが溢れてしまう危険性があります。

という解説の後に、以下のようなサンプルコードが提示されている。


// 長いループの中でオートリリースプールを生成することで、解放待ちのインスタンスが溜まってしまうのを防ぎます。
while (!isCancelled)
{
 @autoreleasepool
 {
   // この中で生成された autorelease なインスタンスは…
   self.label.text = [NSString stringWithFormat:@"Step: %d", self.step];
 }
 // 次のループ処理に入る前に release されます。
}

Xcode で Objective-C のプロジェクトを生成されると、もれなく

と @autoreleasepool{} がついてくるが、なるほど、こういう理屈だったわけですか。
 

Payara 6 を使う

WildFly, TomEE ,GlassFish ときたので、ここは当然? payara にも手を出してみる。

インストール

公式ページのここから適当なバージョンの Payara をダウンロード。
今だと JakartaEE 10 対応の Ver6 系列が落とせるので、そいつの full の方をチョイス。
web profile もあるが、違いを解説できるほど詳しくはないので今回はスルー。

なお、環境は MacOS Monterey, java17 ですが、windows 環境でも同様の手順で起動〜簡単な動作確認はできるでしょう。

解凍すれば使えるようにはなっている。

問題は置き場所だが、多分、ほとんどの人がまずはお試しで使うと思うので、/usr/local ではなく、ユーザーホームの適当なフォルダに配置すればいいと思う。

/payara6/bin

に移動して

./asadmin start-domain

でまずは起動。

ブラウザで localhost:4848 にアクセスして、以下のような管理コンソール画面が表示されればまずは Payara のインストール自体は成功しています。

なんらかの事情でインストールした(ローカル)ホスト以外のマシンからアクセスするためにはパスワード設定を有効にする必要があります。

./asadmin change-admin-password

を実行して新しい管理者とそのパスワードを設定。その後

./asadmin enable-secure-admin

を実行して、再起動すれば、外部リモートマシンから管理コンソール画面にアクセスできるようになります。

上記設定が完了すると管理画面呼び出し時にパスワード入力を求められるようになります。

 

とりあえず簡単な war ファイルをデプロイしたいんだが、その前に・・・

Payara の port を変更

8080 ポートは、WildFly や Tomcat などで使用されている場合が多いと思うので、あらかじめ 80 に変更しておきたい。

これは上のコンソール画面から簡単に行える。

画面右のノードから configurations -> server-config -> Network Config -> Network Listners の順に展開。

下図の Port: 8080 のところを 80 に変更。

glassfish と同様にその場で変更できる。再起動不要。

実際、この状態で localhost:80 にアクセスすると

というウェブページが表示される。

ここらへん、Tomcat あたりと違う。

データベース(PotgreSQL)との連携

GlassFish の時と同様、

JDBC コネクションプールの作成→データリソースの作成

とすればいいです。

ただし、GlassFish の時と違うのはコネクションプールの作成より先に jdbc ドライバをコマンドラインから登録しておくこと。

Payara 起動後、コマンドラインから

asadmin add-library (path)/postgresql-(version).jar

と入力。

Command add-library executed successfully

と返ってくれば OK牧場です。

よくわからなければ公式のブログ記事(『Using PostgreSQL with Payara Server』)参照。

コネクションプールを作成して、ping を打った時に

と Ping Succeededとなれば、設定はうまくいってます。

GlassFish の時と同様、クラスパスの設定などは不要です。
設定がうまくいってないと「クラスパスを正しくセットしる」みたいなエラーメッセージは出るんですが、真にうけない方がいいでしょう。

簡単なウェブアプリで動作確認

今回も jpa-hibernate プロジェクトを使用。

なんですが、通常の書き方だと動作しません。

しばらくハマって頭上に?マークを浮かべてたんですが、これは Payara6 で hibernate を使う時に出現するバグのようです。

GitHub isuues でスレ立ってます。

解決方法は、そこにも書いてありますが、persistence.xml に

 (persitence.xml)
            <property name="hibernate.type.xml_format_mapper" value="jaxb"/>
            <property name="hibernate.type.json_format_mapper" value="jsonb"/>

の2行を追加することです。
しかし、この解決(最終的な解決ではないですが)方法が提示されたのは、この記事書いている4日前。

当方の JakartaEE 力もあがってきているなあと思うと同時に、自由を維持していくことはそれなりの労力がかかるんだということを痛感させられます。

バグについて

なお、このバグに興味を持って、Payara のソースコードを少し読んだんだが、内部的には JavaEE 8 的な処理があって、これはちょっと根が深いかな?とは思った。

WildFly の鬼のような分量のソースコードを読むのに比べれば、負担は少ないのかもしれないが、これに取り組むのは気が引ける。。。

バグ?

データベース名に database-1 などとハイフンを入れるとハイフン以下を無視して動作するようだ。

 

 

 

M1/M2 Mac で eclipse を使う

M1 Mac で Java 開発用に eclipse を導入しようとあちこち調べたのだが、なんか筋悪の指南が多いのでメモ的にまとめ。

筋悪というのは、「eclipse の日本語版は Intel Mac 向けしかないので、それを使いましょう」的なものがほぼ全てだったから。

そんなに日本語化って重要?

多くのユーザーがいると思われる Pleiades All in One (いわゆる eclipse の日本語版)は、確かに現時点(2022/11)では Intel Mac 向けのバージョンしか上がってないのだが、公式サイトには既に M1/M2 向けのコンパイル済み eclipse がダウンロード可能になっているから。

ここで Download AArch64 を選べば、apple シリコン向けの eclipse のダウンロードが始まります。

思うに、Pleiades のは、ちょっとやり過ぎているところがあって、例えばマルチユーザー環境でこのバージョンを使うとたぶんアプリ自体が落ちます(少なくとも私の環境では落ちた)。

一方、こちらのバージョンは、JRE のバージョンやインストール先の指定もできるので、自分のホームにインストールしておけば、他のユーザーに迷惑をかけずに使えます。しかも arm ネイティブで。

Hello, eclipse

インストールが済んだら、まずはハロワ的なやつ。

今回は maven プロジェクトをチョイス。

今回は pom.xml の中身は手動で設定したが、多分、もっと上手いやり方もあるんだろう。

いつものコードを実装して run 。

コンソール出力に

Hello, eclipse

と出て、まずは一安心。

 

(続く)