memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

ProcessingのIDEを起動したときに最後に編集していたスケッチを開く

卒業研究をはじめ、自分の研究でもプロトタイプ作成にProcessingを使っています。Arduinoもそうです。

両者とも無料で利用が可能なのですが寄付も受け付けています。アカデミックなので無用かもしれませんが、このツールがないと大変なので、できるものなら少額でも寄付したいところです。。。

それは後々考えるとして、ProcessingのIDE(って呼んでいいのかわかりませんが)の不満が1つあります。その内容は以下の通りです。

Processingを起動すると、新規のスケッチからスタートします。

恐らく、これにはポリシーがあるのではないかと思います。

スケッチブックを広げたところをイメージすると、たぶん、どんな状況であれ、まず最初は真っ白なキャンバスがあるんじゃないか。。。という価値観からかもしれませんし、共有パソコンなどで作業しているときに、他の人が作成したスケッチが立ち上がるのはまずい。。。ということだったのかもしれません。想像の域を出ません。

Procesingで少し大きめのアプリを作るときには2、3日続けてあちこちで(研究室だったり自宅だったり電車内だったり)IDEを立ち上げるので、そのたびに「開く」を選択したり、履歴から探すのはちょっと面倒でした。

とりあえず、以下の方法で実現できましたのでご紹介。環境はMacです。Windowsではちょっと工夫が必要かと思います。以下のファイルを作成し実行権を与えてホームにおきます。あとは、これをDockにいれてクリックすれば、最後に編集したスケッチが一発で開けます。

#!/bin/sh
open `cat $HOME/Library/Processing/recent.txt | tail -n 1`

上記の内容は見ての通りですが、Processingではファイルを開いた履歴をrecent.txtというファイルに格納しています。たぶん、Windowsも同じと思います。このファイルの最後の行のパスが最後のスケッチ(PDEファイル)のパスになります。tailコマンドでこれを1行取り出して、openするだけです。Windowsならstartコマンドでいけるんじゃないでしょうか?

はい。

ある程度、経験が必要かもしれませんが、プログラミングの基礎を勉強した後は、このような「メンドクセー」と思ったときが勉強のタイミングと思います。その動機が残っている?うちに、インターネットで調べて実現方法を探り完成させる。こういうのって記憶にも残るし、単純に嬉しいし、楽だし。また、このエントリーみたいにログとして残しておくと、あとで自分が忘れてしまっても見つけることができます。

必要は発明の母、いや、必要は上達の機会ってことです。

Rubyの発明家であるまつもと先生も以下のように仰っています。個人の面倒を何とかする以上に全体のことまで視野に入れたら。。。そりゃすごいことです。そういう人が増えると世の中よくなりますよ。きっと。

怠惰:全体の労力を減らすために手間を惜しまない気質。この気質のも主は、役立つプログラムを書いてみんなの苦労を減らしたり、同じ質問に何度も答えなくても言いように文書を書いたりする。

codeiq.jp


■2017/5/26 ちょっと追記

こんなことをしなくてもProcessingにそういう選択肢があったような気がしたな。。。と思い、行きの電車で少し調査してみました。確か、昔のProcessingは使えていたような気もして。。。

Processingの設定画面にはそれらしいものはありません。で、詳細設定はテキストファイル(preferences.txt)に格納されているので、それをみると「last.sketch.restore」というそれらしいプロパティがありました。

早速、last.sketch.restoreでぐぐってみると、過去にProcessingのフォーラムの議論がありました。どうやら無くなって復活を望む声があったということがわかりました。

forum.processing.org

とりあえず、現在のProcessingではlast.sketch.restoreはどう扱われているのか気になりまして、Processingはgithubにソースがありますので確認してみました。

github.com

app/src/processing/app/Base.javaにそれらしいものがあり、このプロパティを読み込んで処理していたであろう形跡が見つかりました。

restoreSketches()というメソッドで恐らく、このlast.sketch.restoreのtrue/falseを取得して、その後、Processingの起動時にrecent.txtにある最後のスケッチを開くか処理していたのではないかと思います。

f:id:ke_takahashi:20170526100829p:plain

restoreSketches()というメソッド自体はもう削除されているようで跡形もありませんでした(リポジトリを追うのも有意義ではないのでやめましたが、たぶんどこかのバージョンのソースには残っていると思います)。

なぜ、削除されたのか。。。とか、その影響によってその後、どのように使われていたたのか。。。など考えるのも一興ですね。ソフトウェア考古学的な(笑)

でも、なんでlast.sketch.restoreを残しているのかなぁ?削除してもよさそうですけどねぇ。。。使われていないものは残さないようにしないとあとで消せなくなる。。。あるあるです。

本日は健康診断。腹減った。。。