物理学アドベントカレンダー2021の遅刻組です。すみません。
アドベントカレンダーにかこつけた半分宣伝です。すみません。
Mitaka ご存知ですか?
国立天文台4次元宇宙プロジェクトが開発・公開しているフリーソフト「Mitaka」はご存知でしょうか?現在観測されている宇宙をデータを基に再現し、自由に宇宙を旅することが出来るソフトです。
日本の天文教育においてデファクトスタンダードともなっているツールですが、求められる操作技能や天文知識にはハードルがあり、広く一般に使われているかというと疑問が残る状態が長年続いていました。
事態が変わったのが2020年2月20日に公開されたバージョン1.6.0に追加されたプログラミング機能です。これにより高度な操作技能がなくとも、用意された拡張プログラム1を実行するだけでMitakaを楽しむ事が出来る様になりました。
筆者は日本天文教育普及研究会Mitaka WGの一員として、また野良のプログラマーとして、Mitakaのデバッグや改造、マニュアルの執筆をしています。以下のMitaka WGのサイトにマニュアル等が置いてあるGoogleドライブへのURLが掲載されています(システム上の問題で平文のみです。コピペでアクセスしてください)。
今回は野良のプログラマーとして、Mitakaのプログラミング機能の紹介を簡単に行いたいと思います。筆者の所属先とは関係のない記事です。ご了承ください。
ライセンス
Mitaka自体はフリーソフトですが、個人や教育機関の枠外での利用には許可が必要です。個人利用を超えて利用する際にはクレジット表示表示が求められます。詳しくは以下の2か所を確認してください。
また、上記ページにも明記されてはいますが、Mitakaの「状態をファイルに保存」する機能を使用して生成されたファイルや、ユーザーが作成した拡張プログラム1などはMitakaの利用規約に縛られず配布することができます。(この記事もその利用規約外の範囲で書いています)
拡張プログラムを実行してみよう
現在のMitakaには拡張プログラムのサンプルが同梱されています。Mitakaを起動し、メニューバーの「ファイル」から「コマンド定義ファイルを開く」を選択し、「sequence_sample_2.mcd」を開いてください。メニューバーのコマンドに「2020年6月21日の部分日食」が追加されていますので、クリックしてください。操作方法のガイダンスと共に部分日食の様子が再現されます。
プログラムは先述のMitaka WGのGoogleドライブ内や筆者のGitHubにいくつか公開されています。これからも増やしていくつもりです。(今回GitHubに2035年9月2日の皆既日食のプログラムを追加しました。字幕を消すプログラムresetSubtitle.mcdと共にご利用ください)
拡張プログラムを作ってみよう
ここでは一番簡単な方法である、Mitakaの保存機能を使います。まずメニューバーの「離陸・着陸」より「離陸・着陸」をクリックし、宇宙に出てください。次に「ターゲット」より好きな天体を選んでください。選んだ天体の近くに移動したら、十字キーで位置を、PageUp/PageDownで距離を調整してください。良い絵が見つかればメニューバーの「ファイル」より「状態をファイルに保存」を選び、適当なファイル名を付けて保存してください。他の天体に行くなどしても、先ほど行った実行の手順で保存したファイルを読み込むと再現できます。
Mitakaは平文のテキストである拡張子.mcdのファイルを読み込み、その記述に従います。Mitakaのコードは命令の定義と呼び出しのみです。条件分岐やループ、変数設定、四則演算は出来ません(命令の再帰的呼び出しでループを行おうとすると無限に読み込みが発生し壊れます。デバッグ作業の時に真っ先に試しました)。各命令の詳しい内容はMitakaに同梱されているマニュアル(mitaka_manual_J.pdfとfeatures_v170a.pdf)やMitaka WGのGoogleドライブ内の各種マニュアル(特にMitaka171_ProgramingManual.pdfは筆者の力作です)をご覧ください。
Mitakaのプログラミング機能はチューリング不完全ですが、長年のユーザーとしてはやりたい事はかなり自動化できると感じています。問題は求められるコンテンツの量と質に対してプログラマーが圧倒的に少ないという現状です。
年に数度、講習会兼ハッカソン的なワークショップをMitaka WGで開催しています。筆者も講師の一人です。Mitakaの開発者である加藤氏も参加されるので、開発者に直に相談するまたとない機会でもあります。次回は一応2022年1月22日(土)の予定です(Mitaka WGのFBにて事前告知済みの情報だから問題ないはず)。