leopardgeckoのブログ

Macの関連事項など

Planckキーボードのスイッチとキーキャップ。

あれからPlanckを色々いじっている最中ですが、記録も兼ねて現時点でのスイッチとキーキャップの状況を書いておくことにします。この手のキーボードは個人の好みが反映される度合いが強すぎて内容をそのまま流用できることはあまりないと思うのですが、何かの点が参考になれば幸いです。

とりあえずキースイッチはこんな感じで。

f:id:leopardgecko:20171010111834j:plain

スイッチはすべてGateronのもので、基本はご覧の通りの赤軸です。修飾キーとして使うキーは小指で押しっぱなしにしても楽になるように、赤軸よりもさらに軽いGateronの白軸(Clear軸)に変えてみました。また、一番下の段の並びはまだ慣れずに押し間違いも多いので、LowerとRaiseキーは茶軸に変えて、さらにバネは白軸のものを入れてみました。これが意外といい感じで、重さは白軸と同じですがタクタイル感があるので押し間違いがあれば気がつきます。

さらに一番下の左から二番目のキーは配列設定を切り替えるなど特殊な機能のレイヤーに移動するキーに設定して、重くてクリッキーな緑軸にしてみました。うっかり誤爆すると面倒なことになるキーなので、両隣の白軸とは重さも感触も全く異なるキーを選びました。

Planckのプレートはスイッチ周囲にわずかに余裕があるので、はんだ付けした後でもスイッチのトップカバーを外して中の軸やバネを交換することができます。実際私は最初は全部赤軸で作ったのですが、後から軸とバネを上記のように交換しています。カバーの外し方については「cherry mx open」などのキーワードで検索すればスイッチを簡単に分解できる動画が色々見つかりますので参考にしてみてください。道具はダイソーでも売っている先が細いピンセットがあれば十分で、特殊な工具は必要ありません。作業自体も一度やり方がわかれば意外と簡単なものです。

スイッチを分解できるようになると軸とバネの組み合わせが自由になりますから、Gateronの白軸用のバネと茶軸を組み合わせて軽いタクタイルのスイッチを作ったり、黒軸用のバネに青軸を組み合わせて重いクリッキーなスイッチを作ることもできます。

ちなみにGateronのボディにCherry MX純正の軸を入れることもできるのですが、中身は微妙に違いがあるようです。Cherry MX純正の青軸をGateronに入れてみたところ例のカチカチ音があまりしなくなりました。茶軸などのタクタイルタイプでは違いはほとんど感じられませんでした。

 

キーキャップはたまたま余っていたCherry Profileのものを流用して、LowerとRaiseキーだけクリアタイプに変えてみました。クリアのキーキャップはCherry MXのテスターを買ったらついてきたものです。

f:id:leopardgecko:20171010112310j:plain

なぜこの二つだけクリアなのかというと、ここにLEDを仕込んだからです。発光させるとこうなります。

f:id:leopardgecko:20171010112508p:plain

気が変わったらLEDを変更できるように、スイッチの中に丸ピンICソケットを仕込んでLEDを差し替え可能な仕様にしています。スペースキーや左上のキーにもソケットを入れて、気分次第でそちらにLEDを差し替えることもできるようにしてみました。上に書いたスイッチの分解ができればトップカバーを外して中にソケットを入れるだけなので大した手間ではありません。

ちなみに、ここに入れられるLEDは3mmのいわゆる砲弾型か2x3x4mmの角形です。Planckは横からスイッチが見えるタイプのキーボードなので、いくらか見栄えの良い(と私が勝手に思っている)2x3x4mmのLEDを入れてみました。

 

実はPlanck用にXSA profileのキーキャップも入手したのですが、OEMやCherry profileとは違って指を置く位置に傾斜がついていないので指の収まりが今一つで、ホーミングキー(突起などがついている「F」と「J」キー)は他のキーよりわずかに深めになっているだけなので違いがわかりにくいなど、少々使いにくいものでした。見た目はスッキリしていて格好良いのですが、残念ながら使用感の問題で今のところはお蔵入りになっています。

 

今使っているスイッチやキーキャップはまだ暫定的なもので、今後も検討を重ねて何がベストなのかを探っていきたいと思っています。

 

キーボードの機能的な中身、つまりキーマップについてはまた別の記事で書くことにします。

PlanckキーボードをMacでカスタマイズしてみよう。 <応用編>

はじめに

前回の記事でPlanckの基本的なカスタマイズ方法の紹介をしましたが、今回は他にいくつか実例を紹介します。これはPlanckというよりはQMK Firmware全般の説明になるのかもしれません。(記事を書くのにまだ慣れないPlanckを使っているのでタイプミスが多くて大変です・・・😅 )

以下、全て「keymap.c」ファイルの書き換えの説明です。特に説明がなければそのファイルの中の「[_QWERTY]」の設定を書き換えます。「keymap.c」については前回記事を参照してください。

右側にもシフトキーを追加する。

シフトキーが左側にしかないのは不便です。この際、右側にも追加してしまいましょう。かといって右側のキーが減ってしまうのは困るので、長押しでシフトキーの役割を兼用するように書き換えます。私はエンターキーと「'」キーの位置を入れ替えていて、「'」キーをシフトキー兼用にしています。その場合は、「KC_QUOT」を「MT(MOD_RSFT,KC_QUOT)」に書き換え、「KC_ENT」と位置を入れ替えます。

長押しと判定されるまでの時間の調節はこちらのサイトが参考になります。

Windowsでも使うときのために「半角/全角」キーを追加する。

Planckはコンパクトなキーボードですから持ち歩いて他の場所で使うのも楽です。メインマシンはMacでもWindows機を使う機会もあるでしょうから、キーボードをどちらでも使えれば便利です。そこでWin機でも日本語入力ができるように「半角/全角」キーを追加してみます。キーの位置ですが、デフォルト設定では一番左下のキーはバックライトキーであり、バックライトを使わないなら何の役にも立ちません。そこでこれを「半角/全角」キーに変更してしまいます。単に「BACKLIT」を「KC_ZKHK」に書き換えても良いのですが、独立したキーにしてしまうと肝心のMacで使う時に何の役にも立たなくなってしまってもったいないので、長押しした時にはコントロールキーとして使えるようにしてみます。その場合は「CTL_T(KC_ZKHK)」と記述します。デフォルトのコントロールキーの位置は押しにくいので一石二鳥と言えるでしょう。

音量調節を細かくする。

キーボードでの音量調節は割合大雑把なので、イヤホンで音楽を聴いている時などはもっと細かく音量調節をしたくなります。Macには細かい音量調節のショートカットがあり、「Shift」と「Option」を押しながら音量調節キーを押すと標準の四分の1の単位で音量調節ができるようになります。これをPlanckの設定に反映するには、「KC_VOLD」を「LALT(LSFT(KC_VOLD))」、「KC_VOLU」を「LALT(LSFT(KC_VOLU))」に書き換えます。

メディアキーの割り当てを修正する。

デフォルトでは曲送りのキーは「KC_MNXT」になっているのですが、これはあくまでWindows用であってMac本来の曲送りのキーではありません。このままでも一応iTunesでは動作するのですが他のソフトでは動作しないことがあります。例えば私の環境ではAmazon Musicで曲送りができませんでした。iTunes以外の音楽再生ソフトを使う可能性があるならばMac本来の曲送りのキーである「KC_MFFD」に変更しておいた方が無難です。ちなみに曲戻しのキーは「KC_MRWD」です。

レイヤーを増やす。

コマンドキーやコントロールキーなどは一番下の段にありますが、これはこれで良いとしても、もっと楽にアプローチできるキーも修飾キーとして使えれば便利です。ただ単に修飾キーも兼ねるだけなら上で挙げた例のように記述すれば良いのですが、ここではデフォルトのレイヤーである「Lower」や「Raise」とは別にオリジナルのレイヤーを作って、「a」キーの左隣という好位置にある「Esc」キーの長押しで呼び出せるようにしてみます。

「keymap.c」の最初の方にある「enum planck_layers」というところがレイヤー名の定義をしているところなので、ここにオリジナルのレイヤー名を追加します。とりあえず「_MYESC」としてみます。下の画像のように「_ADJUST」の後に一行追加するのですが、「_ADJUST」の後ろに「,」を付け加えるのをお忘れなく。

f:id:leopardgecko:20170914075454p:plain

あとは下の方にある「_ADJUST」の設定の下に、新たに「_MYESC」の設定を加えます。他のレイヤー設定をいったんコピペして好きなキーに書き換えると良いでしょう。下の例はカーソルやページの移動を割り当てたレイヤーです。どうしてそんなものをわざわざ作ったかというと、他に使っている60%サイズキーボードの設定を引き継ぎたかったからです。デフォルトのカーソルキーは最下段ですからホームポジションから遠くて押しにくいですし。他のキーボードで慣れている設定があればそのままPlanckでも使えるというわけです。

レイヤーの書き足しの際には「_ADJUST」の最後にある「}」の後に「,」を付け加えてください。これを忘れるとコンパイル時にエラーになります。

f:id:leopardgecko:20170914080059p:plain

 

「ESC」キーの長押しにこのレイヤー呼び出し機能を割り振るには、「[_QWERTY]」のところにある「KC_ESC」を「LT(_MYESC,KC_ESC)」に書き換えます。コンパクトサイズのメカニカルキーボードはFnキーで独自機能を呼び出せるものが多いですが、こういうやり方でそれっぽい機能を再現できます。

テンキーっぽく使える設定

さらなる応用として、下のようにテンキーっぽく使えるレイヤーを作ることもできます。Planckはテンキーと同じ格子状の配列ですから、通常配列のテンキーレスキーボードより数字入力が格段に楽になります。

f:id:leopardgecko:20170914124627p:plain

私は一番左上の「Tab」キーの長押しにこのテンキーっぽいレイヤーの呼び出し機能を割り振っています。数字をどのキーに割り振るかで少々悩みましたが、右手をホームポジションから動かさずにタイプできる位置にしてみました。

 

長押しの併用は基本的にどのキーに割り振ることもできますが、これを設定すると当たり前ですが元のキーの押しっぱなしの入力はできなくなりますのでご注意を。

とりあえず今回はこのくらいで。

PlanckキーボードをMacでカスタマイズしてみよう。 <導入編>

2018/12/25追記:最新版のQMK Firmware対応のため記事を全面的に改定。

はじめに

今回は「Planck」というキーボードの話です。

一部で有名な(?)Planckといういわゆる40%サイズの格子型キーボードがあります。と言われても興味のない方には何のことやらさっぱりでしょうが、要するにこういう形の非常にコンパクトかつシンプルなキーボードです。

f:id:leopardgecko:20170913224757j:plain

小さいのですがメカニカルキーボードなので打鍵感はしっかりしたもので、外装は肉厚のアルミでガッシリ感や高級感も感じられます。金属外装のためかサイズの割に重量もあるので意外なほど安定感もあります。ただしこれは一般の店舗やネットショップなどでは売っておらず、MassDropなどでのみ入手できる組み立てキットという特殊な部類のキーボードになります。

組み立て式なのでCherry MX互換のどんなスイッチでも選べる(その気になればキーひとつ単位で様々な種類のスイッチを選ぶことも可能)ということの他に、ファームウェアを書き換えることでハード的にキーマップがいくらでも好きなように変更できるという特徴があります。つまりMacやPCでキーリマップソフトを使う必要がなく、どの本体に繋いでも自分がカスタマイズしたキーマップがそのまま使えるということです。(これはPlanckのみの特徴ではなく、このような機能がある組み立て式キーボードはサイズや形状が違うものが他に何種類も出ています)

私はこのPlanckをごく最近入手したのですが、組み立てはすぐに終わったものの、いざMacでキーマップの作成や転送をやろうとすると入門向けの情報が少ない上に内容が古くてそのままでは使えない情報が結構あり、意外と苦労してしまいました。MassDropでは大人気のキーボードなので日本での情報もそれなりにあるだろうと考えていたのですが少々甘かったようです。そこで備忘録も兼ねて、Planckのキーマップ設定をMacでカスタマイズする手順を紹介することにしました。

本体の入手方法や組み立て方などは他のサイトにお任せするとして、説明はすでに組み立てが終わっているところから始めます。

組み立てただけでもUS配列のキーボードとして普通に使えるのですが、日本語入力には専用のキーが欲しいですし、デフォルトのキーマップを変更したい人もいるでしょう。キーマップを書き換える機能を使うにはいくつかの準備が必要になります。

必要ソフトの導入

QMK Firmwareを入れる前にHomebrewの導入が必要です。Homebrewをお使いでない方はこの際入れてしまってください。(そうすれば私が別記事で紹介しているjRogueというゲームをターミナルで遊ぶことも出来ますよ!😉 )

次にQMK Firmwareをインストールします。(英文で問題ない方は公式サイトのガイドに従って導入すれば良いので以下の記事を読む必要はありません)

まずターミナルでQMK Firmwareを入れたいディレクトリに移動して、以下のコマンドを入力すればダウンロードとインストールが完了します。インストールには結構時間がかかりますので気長に待ってください。

git clone https://github.com/qmk/qmk_firmware.git
cd qmk_firmware
util/qmk_install.sh

作成した環境のテスト

キーマップをコンパイルしてPlanckに転送できるかどうかをテストしてみます。

PlanckをMacに繋いだ状態で、以下のコマンドを入力します。この場合の「rev4」というのはPlanckのPCBのバージョンですので、適宜お持ちのPCBのバージョンに書き換えてください。ちなみに2018年12月現在での最新バージョンは「rev6」です。このmakeコマンドはqmk_firmwareディレクトリで実行してください。

make planck/rev4:default:dfu

追記:バージョンがrev6の場合は以下のように「dfu-util」としてください。

make planck/rev6:default:dfu-util

 

デフォルトのキーマップがコンパイルされてファームウェアの転送待ちの状態になるので、Planckの裏にある小さなボタンを尖ったもので押してファームウェアが書き換えられるモードに切り替えます。少し待ってPlanckから電子音が鳴りターミナルに以下のようなメッセージが表示されれれば成功です。

Bootloader Version: 0x00 (0)
 〜中略〜
Validating... Success
0x6980 bytes written into 0x7000 bytes memory (94.20%).

自分用のキーマップフォルダを作成

次に、自分用のキーマップを作るフォルダを作成します。QMK Firmwareのインストールで作成されたフォルダをqmk_firmware→keyboards→planck→keymapsと辿っていき、keymapsフォルダの中に自分用のフォルダを作ります。ここでは仮に「leopardgecko」というフォルダを作ったとします。keymapsフォルダの中にある「default」というフォルダを探し、その中にあるファイル(config.h、keymap.c、rules.mk)を先ほど作った「leopardgecko」フォルダの中にコピーします。そのファイルのうちの「keymap.c」がキーマップを設定するファイルです。

カスタマイズ例(「英数」「かな」キーを追加する)

カスタマイズの一例として、スペースキーの両隣にある「Lower」と「Raise」キーを一回押しすると「英数」「かな」キーとして動作する方法を紹介します。もちろん長押しの時は「Lower」と「Raise」としての本来の動作をします。US配列のキーボードを使っている人にはcommandキーのリマップでおなじみのカスタマイズですが、この設定をキーボード本体に保存できるのが最大の違いです。

先ほどコピーした「keymap.c」をテキスト編集できるソフトで開くと「[_QWERTY] = {」という行があります。その下に「KC_云々」というような記述が並んでいるところが基本レイヤー(要は普段使うところ)のキー設定です。

f:id:leopardgecko:20170913225638p:plain

ここの「LOWER」を「LT(_LOWER,KC_LANG2)」に書き換え、「RAISE」を「LT(_RAISE,KC_LANG1)」に書き換えます。これで「Lower」「Raise」キーが一回押しの時はそれぞれ「英数」「かな」キーとしても動作するようになります。

Planckに設定ファイルを転送

このキーマップをPlanckに転送するには、先ほどのテストと同じ要領で以下のように入力します。ここで「rev4」というのは先ほどのテストの時にも出てきたPlanckのPCBのバーションですので、お持ちのPCBのバージョンに書き換えてください。「leopardgecko」というところは先ほど作成したフォルダの名前にしてください。

make planck/rev4:leopardgecko:dfu

(rev6の場合は上と同じように「dfu」を「dfu-util」に変えてください)

 

これでファームウェアコンパイルされ自動的にPlanckに転送されます。Planckから電子音が鳴ったら成功です。

 

デフォルトのキーマップに戻したい時は、テストの時に行った

make planck/rev4:default:dfu

と入力すればOKです。

(rev6の場合は上と同じように「dfu」を「dfu-util」に変えてください)

 

おまけ

コンパイルするときにいちいちqmk_firmwareディレクトリに移動するのは面倒です。そこで、.bashrcに以下のような記述を加えておくと「planck」と入力しただけでコンパイルから転送までやってくれます。この例は書類フォルダにqmk_firmwareを入れた場合ですので、ディレクトリは適宜変更してください。

alias planck='make -C ~/Documents/qmk_firmware/ planck/rev4:leopardgecko:dfu'

日本語版ローグ(Rogue 5.4)for macOS よもやま話 その5。<カウンターカルチャー>

以前の記事で公開したMac用日本語版ローグ(Rogue)についての雑談です。

ローグ5.4の和訳作業をしている時に不思議に感じたことの一つに、「幻覚をおこす水薬」で起こる作用がやたらと凝っているということがあります。モンスターやアイテムがめまぐるしく変化するのはプレイ画面を見ているだけでもわかりますが、例えば色が出てくるメッセージのときは表示される色の名前がランダムに変わったりしますし、メッセージの内容も幻覚時かそうでないかで変わるものが結構あるのです。それ自体はゲームの進行にはほとんど関係がないので、ほとんどが単なるお遊びの要素です。

↓ 例:「目が見えなくなる水薬」や「空中に浮き上がる水薬」で使用時のメッセージが変わる。

f:id:leopardgecko:20170909231835p:plain

これはローグの製作者が「幻覚」に強い思い入れを持っていた証なのではないかと思います。私がそう感じたもう一つの根拠として、ソースコードに隠された(?)名称があります。「幻覚をおこす水薬」は元の英語版では「hallucination」なのですが、ソースコードの注釈には「LSD」と書いてあるのです。つまりこの水薬は実在の幻覚剤であるLSDをモチーフにしたものだったことがわかります。

↓ ソースコードに「LSD」と書いてある

f:id:leopardgecko:20170909232017p:plain

アメリカでLSDが全盛だったのは60年代後半から70年代始めのサイケデリックブームの時期でしょう。ローグが作られた1980年はすでに収束に向かっていた頃でしょうが、まだ70年代の記憶は新しい時期でしょう。製作者もLSDの使用経験があったのかもしれませんし、少なくとも身近に感じていたのは確かでしょう。

ここで突然スティーブ・ジョブズの話題に移りますが、ジョブズは60年代の音楽や文化すなわちカウンターカルチャーが大好きな人で、ボブ・ディランビートルズのディープなマニアでしたしLSDマリファナの経験もありました。ジョブズが活躍を始めた時期、つまり70年代後半はエレクトロニクスとカウンターカルチャーが非常に接近していた時期だったと言えるでしょう。これはアメリカ独自の現象だったのではないかという気がします。

ローグの製作者もジョブズと同様にカウンターカルチャーに強い親近感を覚えていたのではないかと思います。LSDの件に加えて、もう一つ根拠があります。添付文書の「【運命の洞窟】へのガイド」を見ると、オプションの説明でキャラクターの名前を変更する例がありますが、その名前は「Blue Meanie」と書いてあります。これは1968年に製作されたサイケデリックなアニメ映画の「イエロー・サブマリン」に出てくるキャラクターの名前で、この映画にはビートルズがアニメのキャラクターとして主演しています。ローグの製作者もジョブズ同様にビートルズのファンだったのでしょう。

↓ 「【運命の洞窟】へのガイド」より抜粋

f:id:leopardgecko:20170909234131p:plain

こういったことを総合的に考えてみると、70年代後半から80年代前半にかけてエレクトロニクスとカウンターカルチャーの親和性が非常に高い時期があったのだと思います。ローグがただのお硬くて真面目なファンタジーではなく、どことなく人を食ったようなユーモアに満ち溢れているのはそういうところからも来ているのではないかなと思った次第です。

2017/10/30 追記:

ローグの作者の一人であるKen ArnoldさんがLSDについてほんの僅かですが触れているコメントを発見しました。リンクはこちらです。(ちなみにこのコメントには他の重大な情報も含まれています)

Ken Arnoldさんが言うには、「LSDはスイスの科学者によって発見された。しかしバークレーLSDで何をやるかを考え出したと言えるだろう」だそうです。

Ken Arnoldさんはカリフォルニア大学バークレー校の学生でしたが、そこにローグの最初のバージョンを作ったメンバーの一人であるMichael Toyさんが編入してきたためにKen Arnoldさんもローグの開発に関わることになりました。バークレー校はローグ開発の重要な舞台であり、LSDと関係の深い場所でもあるということなのでしょう。

日本語版ローグ(Rogue 5.4)for macOS よもやま話 その4。<仕様変更>

以前の記事で公開したMac用日本語版ローグ(Rogue)についての雑談です。

jRogue for macOS(以下jRogue)には少しだけオリジナルとは変更しているところがあるのですが、今回はその説明をします。

オリジナルのRogue 5.4はHomebrewでインストールすることができますが、そちらで遊んだことがある人であればjRogueとの違いがすぐに目につくだろうと思います。パッと見たときにすぐわかる違いの一つは、jRogueでは背景を黒、文字を白に設定していることです。

Homebrew版Rogue 5.4を背景を白に設定しているターミナルで起動すると、以下のような画面になります。

f:id:leopardgecko:20170823163341p:plain

jRogueではターミナルの設定に関わらず背景は黒で表示されます。

f:id:leopardgecko:20170823163356p:plain

カラーモードでも同様です。

f:id:leopardgecko:20170823163411p:plain

黒を背景にしたのは、昔の端末はそういうものが一般的だっただろうということもあるのですが、一番はこの方がゲーム画面としてより適切であろうという考えからです。

もう一つの違いは、オリジナルはプレイヤーの位置にカーソルが表示されますが、jRogueではあえてカーソル表示をしないようにしています。これは私が外観をカスタマイズする上で参考にしたメッセージ分離型ローグの仕様を反映したものですが、カーソルの有無をじっくりと見比べた結果、カーソルはない方が美しいだろうという私の勝手な個人的判断も含まれています。ただしカーソルを消すとプレイヤーの位置がわかりにくくなってしまうのでオリジナルのままにしておくべきか非常に迷いました。オプションで選択できるようにしようかとも考えたのですが、やたらと複雑にするのも良くないだろうと思い、えいやっと思い切って現在の仕様に固定しました。

他にはオリジナルではスコア表示画面で最新のスコアの行が反転表示されない不具合があったので修正しました。また、遠くの怪物がわかる水薬を飲むと他の部屋にいる怪物が反転表示されるようになるのですが、jRogueの元になっている5.4pのソースではカラー表示の時は反転表示がされない不具合があったので関数を追加するなどして動作の修正を行いました。多分これはMacだけの問題ではなく元のWindowsLinux版でもカラーでは反転表示されないのではないかと思うのですが、私はWindowsLinuxも使っていないので検討できません。下の画像に遠くの怪物が知覚できる状態の例を出しますが、プレイヤーがいる部屋以外の怪物が反転表示されているのがお分かりになるかと思います。

f:id:leopardgecko:20170823170319p:plain

 

最後に、細かいところですがオプションの「持ち物の表示方式」が「上書き(Overwrite)」になるように修正しています。オリジナルのソースコードMacでそのままコンパイルすると「クリア(Clear)」がデフォルトになります。何が違うかというと、「上書き」の場合はマップを表示したまま画面の右上に持ち物を表示するのですが、「クリア」の場合はマップ画面をいったん消して持ち物だけを表示します。Rogueの歴史の中では「上書き」が最新の表示方式らしいのですが、当時は「clear-to-end-of-line」という機能を持たない端末は表示速度が遅くなるため、そういう端末では旧来の「クリア」がデフォルトになる仕組みになっていたようです。Macのターミナルでは「clear-to-end-of-line」の機能はないと判定されて「クリア」の設定になってしまうのですが、今のMacで表示速度が問題になることはありません。表示が速い端末では「上書き」で表示するのが開発者が意図した動作でしょうから、そのように修正しました。

これが「上書き(Overwrite)」の持ち物表示。

f:id:leopardgecko:20170823223835p:plain

こちらが 「クリア(Clear)」。マップなどの表示が画面からいったん消える。

f:id:leopardgecko:20170823223945p:plain

 

不具合の修正はともかく、オリジナルからの仕様変更はやって良いものかどうか悩むところです。私としてはRogueを単に歴史的な遺産としてそのまま保存するのではなく、2017年の今でも楽しく遊べるゲームとして再現したいと思っています。あくまで元のままのオリジナル性にこだわる方は、MacではHomebrew版のRogueをお使いになることをお勧めします。

(ただしHomebrew版には上述の持ち物の表示方式の問題とスコア表示の際に最新の行が反転表示されないという不具合もあるのですが・・・)

日本語版ローグ(Rogue 5.4)for macOS よもやま話 その3。<走る>

以前の記事で公開したMac用日本語版ローグ(Rogue)についての雑談です。

今回は走る動作についての説明をしてみます。

シフトキーとコントロールキーの違い

ローグで移動するためには「hjkl」キーをタイプするのは皆さんよくご存知でしょうが、シフトキーまたはコントロールキーを押しながら移動キーをタイプすると走ることができます。

シフトキーを押した場合は、モンスターにぶつかったりアイテムの上に乗って拾ったりするところまで進みます。動かないモンスターにもぶつかってしまうので、むやみに使うと危険なコマンドです。氷の怪物に衝突して一瞬でゲームオーバーになってしまうこともありますから。

コントロールキーを押した場合は、ぶつかる前に自分の隣に何かを見つけると止まります。比較的安全なコマンドだと言えるでしょう。

慣れるまではコントロールキーだけを使った方が良いでしょうが、明らかに止まる必要がないところを駈け抜けるときにシフトキーを使うなど使い分けをすれば動作のサクサク感が上がるでしょう。

言葉だけで動作の違いを説明するのは難しいので、一例を動画でお見せします。

www.youtube.com

 

オプションの「jump」とは

jRogue for macOSでは走るときに動いている様子が一コマ一コマ表示されますが、オプション設定で瞬間移動させることも可能です。そのためには、「o」キーでオプション設定を呼び出し、「移動中の表示を行わない ("jump")」を「True」に設定します。

設定を変えるには、オプション画面が表示されたらリターンキーを押して設定を変えたい行にカーソルを移動し、オン(True)にしたい場合は「t」を、オフ(False)にしたい場合は「f」を押すだけです。

アニメ表示はいらないのでサクサクと進めたい時には便利な設定です。

www.youtube.com

 

オプションの「passgo」とは

オプションの「通路の角で止まらずに進む ("passgo")」で、通路を走るときに曲がり角で止まるかどうかの設定をすることができます。

もともと初期のRogueでは曲がり角で止まるのがデフォルトの動作で、のちのバージョンで曲がった通路でもドアからドアまで一気に走ることができるオプションが追加されたようです。曲がり角で止まらなければならない理由も特にないと思いますので、これは常に「True」にしておいて良いのではないでしょうか。

初期Rogueの雰囲気を味わいたいオールドファンであれば、あえて「False」に設定するのもありでしょう。GUI版のオリジナルモードやCUI版のデフォルト設定は「False」になっています。

www.youtube.com

 

Rogueは非常に古い黎明期のコンピューターRPGですが、走るという単純な行動に対する設定だけでもこれだけのバリエーションがあるのは驚きです。Rogueの制作者たち自身がRogueを愛し丁寧に作っていた証であろうと思います。

GeekToolでお天気表示

注:これは古い記事です。Geekletで天気を表示する記事はこのリンク先が最新版になります。
ここの記事は記録のために一応残しておきますが今後は改訂されません。最新版をご覧ください。

はじめに

GeekToolとはMacのデスクトップをカスタマイズできるソフトです。デスクトップに色々なものを表示できて便利なのですが、スクリプトが公開されているものでなければ自分でスクリプトを書かなければなりません。
天気を表示するスクリプトはネットで公開されているものは情報が古くて今では使えないものが多い上に自力で作るとなるとHTMLソースを解析する必要があるなど結構大変な作業が必要になります。そこでこちらではAccuWeatherという天気予報サイトを利用したスクリプトをご紹介します。私自身も使っているものなので、天気予報サイトの仕様変更などがあった場合にはそれに対応すべく適宜更新していく予定です。
(GeekTool自体の使い方は他の入門用サイトを参照してください)

例えば下の画像のような感じで表示させるとします。
一番上の小さめの数字が本日の最高・最低気温。その右が直近2時間くらいの変化を教えてくれる予報。一番大きな文字が現在の気温・天気、その下の小さな文字が紫外線・雲量・湿度・気圧・風量・風向き、その左が現在の天気の画像です。
中段のずらっと並んだ画像と文字が時間単位の天気予報で、とりあえず16時間後まで表示しています。
下段が明日と週末の天気予報です。
それぞれ独立したスクリプトなので、どれか好きなものだけを表示させることもできます。
スクリプトのコピペや画像の位置合わせが面倒な方は、記事の最後の方でGeekletをダウンロードできますのでご利用ください。

f:id:leopardgecko:20190918133616p:plain

事前準備

下で紹介するスクリプトは初期状態では東京都江東区の天気が表示される設定になっていますので、表示したい地域に合わせてそれぞれのスクリプトを書き換える必要があります。
まず、https://www.accuweather.com/en/jp/japan-weatherにアクセスします。天気を表示したい市や区の名前をローマ字で入力して検索してそこを選ぶと、その地域の天気が表示されるようになります。その段階でWebブラウザに表示されているURLをどこかに保存しておいてください。

https://www.accuweather.com/en/jp/場所/数字/weather-forecast/数字

のような形式になっているはずです。例えば東京都江東区の場合は

https://www.accuweather.com/en/jp/koto-ku/221230/weather-forecast/221230

という形になります。URLに「weather-forecast」が入っていない場合はサイト内の「NOW」のタブをクリックしてみてください。
スクリプトにはそれぞれ「# 場所のURL」の下に

WEATHER_URL=${WEATHER_URL:='https://www.accuweather.com/en/jp/koto-ku/221230/weather-forecast/221230'}

という記述がありますが、この赤い文字で示した部分が表示したい場所のURLなので、ここを上で保存したURLに書き換えてください。

スクリプトをいちいち全部書き換えるのは面倒臭い!という方は、「~/.bashrc」に

export WEATHER_URL='https://www.accuweather.com/en/jp/koto-ku/221230/weather-forecast/221230'

のような形で記入すれば全てのスクリプトがその設定で動作します。(「.bashrc」が何だかわからないという人はググってください)

英語ではなく日本語で表示したい場合は、URLの「/en/」のところを「/ja/」に書き換えてください。ただし海外のサイトなので日本語は微妙な感じです。「/de/」でドイツ語、「/zh/」で中国語など、他の言語での表示も一応可能です。

スクリプト内部でcurlを使っていますので、社内での使用などでプロキシを指定する必要がある場合はプロキシの設定を~/.curlrcや~/.bashrcに記載するなどしてください。

<各スクリプトの説明>

現在の気温と天気

現在の気温と天気を表示してリアルな画像の天気アイコンを取得するスクリプトを下に示します。

天気アイコンの画像は「/tmp/weather_now.png」に保存されるので、GeekToolの「Image」をデスクトップにドラッグ&ドロップしてURLを「file://localhost/private/tmp/weather_now.png」と指定してください。
(ここで配布しているGeekletを使うならばこの作業は必要ありません)

スクリプトはPropertiesウインドウの「Refresh every 〜s」のところで表示を更新する秒数を設定してください。私は300秒に設定しています。他のスクリプトも同様に最後にRefreshの秒数を設定してください。これを忘れると表示が定期的に更新されません。
ちなみにこのスクリプトは画像表示を自動的に更新する仕組みになっているので、画像の方はRefreshを設定する必要はありません。

画像をリアルではなく他と同じシンプルなものにしたい場合は、スクリプトの最後の方の「https://vortex.accuweather.com/adc2010/images/icons-numbered/」のところを「https://vortex.accuweather.com/adc2010/images/slate/icons/」に変えてください。

最高気温と最低気温

今日の最高気温と最低気温の表示は以下の通りです。

直近の天気予報

直近120分の天気の変化を教えてくれます。AccuWeatherではこの予報を「MINUTECAST」と呼んでいるようです。上の画像では8分後に雨が降ってくる予報になっています。雨が短時間のときは時間単位の予報に表示されないこともあるので、これも見ておくと安心でしょう。
天気に変化があるときは分単位で表示が変わるので、Refreshは60〜180秒くらいに設定しておくのがお勧めです。
120分間天気に変化がなければ表示は出てきませんが、スクリプト内の

# 120分間天気に変化がない時のMINUTECASTの表示(0 変化がなければ表示しない、1 常に表示する)
MC_SHOW=0

というところの「MC_SHOW=0」を「MC_SHOW=1」に書き換えれば常時表示させることもできます。スクリプトは以下の通りです。

時間単位

以下は現在時刻から7時間後までと、8時間後から15時間後までのスクリプトです。これは等幅フォントを指定しないと表示がずれますのでご注意を。日本語で表示させる場合は日本語を等幅で表示できるフォント(全角文字が半角文字2個分の幅になるフォント。Osaka等幅やRictyなど)を指定してください。(上の画像ではOsaka等幅を指定しています。英語表示ならMonacoやMenloなどでも問題ありません)

天気アイコンの画像は「/tmp/weather_hour_0.png」から連番で「/tmp/weather_hour_7.png」まで保存されるので、上の応用で画像を一つずつ貼り付けて並べてください。
この作業は非常に面倒なので、ここで配布しているGeekletを使った方が良いでしょう。また、画像をまとめて並び替えるためのAppleScriptを同封しています。これを開いて実行し指示の通りに数値を入力していけば配布した画像Geekletを好きな場所に綺麗に並べることができます。画像の場所やサイズを変えたい時に使ってください。

まず一つ目、現在時刻から7時間後までのスクリプトはこんな感じです。

視認性を上げるためにAMとPMの色を変えています。他の色に変えたい場合は「# AMとPMの色」のところで「AM_COLOR」と「PM_COLOR」をそれぞれ指定してください。色と数値の対応はそこのコメントに書いてある通りです。色を変えたくない場合は「0」を指定してください。

8時間後から15時間後までは下のようになります。上のスクリプトの応用ですから内容はほとんど同じです。 天気アイコンの画像は「/tmp/weather_hour_8.png」から連番で「/tmp/weather_hour_15.png」まで保存されます。

スクリプトの「# 何時間後?」というところの「LATER=」の後の数値を「16」にすれば16時間後から24時間後の表示にすることもできます。その場合は天気アイコンの画像は「/tmp/weather_hour_16.png」から連番で「/tmp/weather_hour_23.png」になります。

明日の天気

明日の天気は以下の通り。
表示される文章を詳細なものと簡略化されたもののどちらかを選んで設定することができます。スクリプトの「# 天気の詳細」というところの「DETAIL=」の後の文字を「longPhrase」にすれば詳細な文章、「phrase」にすれば簡略化された文章になります。デフォルトでは詳細表示ですが、文章が長すぎると感じる場合は簡略表示が良いでしょう。
時間単位のスクリプトと同じような感じで、Tomorrowの文字色を変えることができます。ちなみに黒は「30」ですが十の位を4にする、つまり「40」を指定すると文字色ではなく背景色を黒にすることもできます。
天気アイコンは「/tmp/weather_tomorrow.png」に保存されます。
「# 何日後?」のところの「LATER=」の後の数字を書き換えれば、2日後や3日後などの天気を表示できます。工夫すれば週間天気予報もできるでしょう。

明日の紫外線、雲量、風速・風向き、降水確率

明日の紫外線、雲の量、風速と風向き、降水確率の表示は以下の通りです。
こんなにたくさん表示はいらないという場合は、スクリプトの設定を書き換えて表示したいものだけ選ぶことができます。
また、明日の天気と同じようにスクリプトを書き換えると表示される日を変えることができます。

週末の天気

週末の天気は以下の通り。土曜日までは同じ週の週末、日曜日になると次の週の週末の天気が表示されます。
表示される文章を詳細なものと簡略化されたもののどちらかを選んで設定することができます。スクリプトの「# 天気の詳細」というところの「DETAIL=」の後の文字を「longPhrase」にすれば詳細な文章、「phrase」にすれば簡略化された文章になります。デフォルトでは詳細表示です。お好みでどうぞ。
時間単位のスクリプトと同じような感じで、土曜日と日曜日の文字色を変えることができます。ちなみに赤は「31」ですが十の位を4にする、つまり「41」を指定すると例で挙げた画像のように文字色ではなく背景色を赤にすることもできます。
天気アイコンの画像が置かれる場所は土曜日が「/tmp/weather_sat.png」、日曜日が「/tmp/weather_sun.png」です。

Geekletのダウンロード

ここで紹介したスクリプトと画像表示のGeekletを一括してダウンロードできます。
スクリプトの見出しと同じファイル名をつけておきましたので、必要なものだけダブルクリックして使ってください。スクリプトはここの記事のコピペでも大した手間ではないですが、画像の設定や位置の変更は手作業でやるとかなり大変なのでこちらを使うことをお勧めします。
ここの記事では説明していない週間天気や24時間表示のGeekletもおまけで入っています。
[Geekletのダウンロード]

さいごに

他にもAccuWeatherには色々な予報がありますので、これまでに挙げたスクリプトの仕組みがわかれば様々な応用が可能でしょう。要はHTMLソースの中から欲しい情報をゲットするためのキーワードを拾ってテキストを整形しているだけですから、キーワードを確実に拾えるパターンを見つけさえすればOKです。

ここのスクリプトの転載や改造などは自由にしていただいて構いませんが、公開するならばこのブログへの言及をお願いします

更新履歴

2019/10/2 .bashrcにURLを記入しておけばスクリプトを書き換えずに済むようにした。文字と画像の表示変更が連動するようにした。時間表示の画像を並び替えるためのAppleScriptを追加。週間天気や24時間表示のGeekletをおまけで追加。
2019/10/1 時間単位の予報でわずかな仕様変更によると思われる状況に対処。直近の天気(MUNITECAST)で細部の修正。
2019/9/19 各国語表示に対応。日本語表記にしたい場合は「場所のURL」の/en/を/ja/に書き換えてください。/de/でドイツ語、/fr/でフランス語、などなどです。時間単位の表示をカスタマイズしやすいように修正。
2019/9/18 天気のフレーズにコンマが入っていると表示が崩れてしまう問題を修正。明日の降水確率などを表示するスクリプトを追加。
2019/9/14 雲量、湿度、風速・風向きのスクリプトを追加。他スクリプトの細部の修正。
2019/9/13 あまりにも強引なデータの拾い方を反省して、データを整形してキーワードから必要な情報を拾っていくスタイルに改訂。
2019/9/12 AccuWeatherの大幅な仕様変更に合わせてスクリプトを全面的に書き換え。以前のスクリプトを使っている場合は時間単位の表示が画像とずれますので、画像の位置を適宜修正するか画像表示用のGeekletをダウンロードして使用してください。
2019/4/12 明日の天気の表示が崩れる問題を修正。
2019/2/4 細部の修正。スクリプトGitHubからのソース埋め込みで表示するように変更。
2019/1/23 AccuWeatherの仕様変更に合わせて、現在の天気と気温、時間単位、明日の天気の表示が崩れる問題を修正。
2018/12/12 直近の天気予報(MUNITECAST)の変化がない時とサービス停止中には表示しないように仕様変更。
2018/5/9 AccuWeatherの仕様変更(User-Agent関係)に合わせてスクリプトを若干修正。(それぞれのスクリプトの「# 元データ取得」のところだけコピペで書き直せばOKです)
2018/3/14 Geekletの配布開始。
2017/11/21 AccuWeatherの仕様変更に合わせてスクリプト修正。カラー設定の変更をやりやすいように記述追加。