2019年1月30日水曜日

ポストスクリプトのプログラミング(5) : runコマンドの問題と利用

Postscriptはプログラミング言語であることを、ずっと前に取り上げた。一通り幾何学模様を描いて遊んでみた後、基本部分はマスターできたと思う。最近は、幾何学の問題を解くときにときどき利用している程度だったが、パワーポイントやキーノートで図形を描くのはストレスが溜まる作業だということがわかったので、思い切ってpostscriptsで図形作成をすべてやってみる方向に切り替えることにした。そもそも、プログラミングというのはうまくいったら楽しいし、また、うまくいったプログラムは再利用できるから、最初は大変だが、だんだん楽になっていくという利点もある。

ということで、今回は、プログラム(リソース)の再利用、 つまりライブラリと呼ばれるものを使う方法を採用しようと考えた。いろいろ調べてみると、runというコマンドが使えることがわかった。これについては、後で詳述することにして、まずはrunを使うことになった経緯について述べておく。



Postscriptには「関数」という概念がない。その代わりに、procedure(「手続き」と訳している人もいる)という、コマンドのまとまりを再定義する方法を利用する。ただ、procedureへの変数の受け渡しは定義されてない。たとえば、円を2つ書くコマンドをdarc(=="double arc")というprocedureにまとめる方法は、

/darc {
  x0 y0 r0 0 360 arc
  x1 y1 r1 0 360 arc
} def

とする。こうすると、procedureである"double_circle"が定義される。

では、このprocedureの中で定義されている「変数」x0, y0, ...などはどうやって渡すのか、というと、スタックを利用するのだ。たとえば、procedureの定義において、

/darc {
 /r1 exch def
 /y1 exch def
 /x1 exch def
 /r0 exch def
 /y0 exch def
 /x0 exch def

 x0 y0 r0 0 360 arc
 x1 y1 r1 0 360 arc
} def

という具合に、スタックからデータを受け取るコマンドを書き込む。注意するのは、取り込む順番だ。このprocedureを使う段になって、

0 1 5 10 12 7 darc

とやると、(x0, y0, r0, x1, y1, r1)=(0, 1, 5, 10, 12, 7)という対応でprocedureに取り込まれる。procedureの中では、7, 12, 10, 5, 1, 0という順番でスタックの取り込みが行われるので、r1, y1, x1, y0, y0, x0の順番で「変数」を定義する。

このように、procedureをたくさん定義しておけば、次にプログラムを書くときに、それを再利用することができる。しかし、ファイルの中に長々とcut&pasteするのは、見栄えと読みやすさを犠牲にする。一般のプログラミング言語のようにライブラリにまとめて一括読み取りができると便利だ。例えば、C言語の#includeとか、LaTeXのusepackageみたいな機能だ。

Postscriptに関する古い解説文書を読むと、この機能に対応するのは"run"だと書いてある。たとえば、先ほどのdarcのprocedureを別のファイルdarc.psに書いておき、それを新しいファイルappli_darc.psで再利用するときは、appli_darc.psの中で、

(darc.ps) run

とすれば、darc.psの内容がappli_darc.psで再利用できるというわけだ。



ところが、この手法を用いてmacOSで、appli_darc.psをopenすると、エラーが発生して読み込むことができない。書式が悪いのか、読み込みの定義が間違っていたのか、といろいろと疑ってみたが、どうもどこもおかしくない。長いこと検索してみると、ついにこの問題の核心をついていると思われるdiscussionを見つけることができた。

この議論で引用されているMITの元記事はリンク切れしていて読めなかったが、こちらのページで内容は大体わかった。ghostscriptの脆弱性(vulnerability)が、2018年8月にgoogleのエンジニアによって発見されたという内容だ。

結局、runコマンドによって外部ファイルを読み込めるようにしてしまうと、悪意のあるコードや命令を埋め込まれてしまうという内容だ。これを受けて、macOSのpreviewや、Adobeシステムの製品では、runを含むpsファイルはエラーが出るように修正されている、ということらしい。

天体観測の画像処理などでもよく利用するImage Magickもgsのライブラリを利用しているので、同じ脆弱性をはらんでいるそうだ。パッチが公開されているらしい。

ただ、macOSにデフォルトで入っているgsコマンドを利用すれば、runを含むposgtscriptファイルを実行することがは可能である、とdiscussionに書いてあった。そこで、試してみるとちゃんとrunコマンドが動くことが確認できた。

また、ps2pdf -dNOSAFERでもrun付きpsファイルをpdfに変換することができる。ちょっと手間だが、ps2pdf -dNOSAFER ps_with_run.ps; open ps_with_run.pdfと打ち込むか、次にようなbashスクリプトを書いて(psviewと命名し、chmod 755 psviewとしておく)、利用すればよい。

[psview]

#!/bin/bash

if [ $# -eq 1 ]; then
  fname=`head -1 $1.ps`
  if [ ${fname} == "%!PS-Adobe-3.0" -o ${fname} == "%!PS-adobe-3.0" ]; then
      ps2pdf -dNOSAFER $1.ps; open -a preview $1.pdf
      exit 1
  else 
      echo "Error. File must be of Postscript."
      exit 0
  fi
  exit 1
fi

cat << __EOF__
The argument must be the name of the postscript file 
to be processed with ghostview, and to be opened with preview.
__EOF__

exit 0

runコマンドのvulnerabilityがあることを認識し、あくまでpsviewで開くのは自作のpostscriptファイルだけとわきまえておけば、これでrunを利用した自作のprocedureのライブラリを使ってプログラム群を構築することができる!
 

2019年1月17日木曜日

ダイナブックを買うのはやめた

ダイナブックの役員に柳瀬 唯夫 元首相秘書官が就任した、という報道が東京新聞に載っていた。

改めて言う必要もないだろうが、改めて言っておこう。柳瀬氏は首相からの指示を受け、安倍総理大臣の親友が経営する「加計学園」が新たに設置を狙った獣医学部の許認可を巡り、「総理大臣の友達だから」という私的な理由で便宜を図り、愛媛県に「設立許可を出すよう働きかけ」を行った疑いがあるとして、国会で追及を受けた人物である。

この汚職疑惑に関して、国会は真実をあぶり出すことはできず、柳瀬氏は知らない間に担当の職を辞し、経済産業省の要職を渡り歩きながら、最後は「天下り」で合浦李という官僚にとっての「ゴールデンロード」を歩くことになった。心の浅瀬からお祝い申し上げたい。

ところで、ダイナブックといえばラップトップパソコンの代名詞であり、東芝が先鞭を付けたPCのポータブル化への世界的な出発点となった製品だ。 世界をリードしていたといってよい。それが、業績不振や東芝の不正会計の問題のあおりを受けて、昨年東芝のPC部門はすべてシャープに売却された。シャープ自体も、台湾の企業に買収されていることを考えると、日本の電子産業、電気機器業界は惨めな限りである。

柳瀬氏がどうしてダイナブックの非常勤取締役になれるのであろうか?wikipediaを見ると、彼は長らく経済産業省で原発政策を推進してきた人物だという。 東芝はながらく原発事業を推進してきたが、最近、買収したアメリカのWH社の事業破綻に伴い、東芝の本体が傾いてしまうほどの「大穴」を開けてしまった。こんな沈没船に対し、いまさら原発仲間のコネを使って、しかも売り渡したSharp-Dynabookへ天下りなどできるのであろうか?もしできるのだとしたら、病気の猫から血を搾り取るダニかノミのように思えるが、本当のところはわからない。

私もダイナブックをこれまでに3、4台買っているし、現役でも一つ使っているので、ある意味「ダイナブックファン」である(VAIOは一台も買ったことがない)。サポートのために登録していたのだが、東芝のPC事業が落ち目となった3、4年前に、突然東芝から手紙が送られてきて、「サポート事業を中国の会社に売却するので、あなたの個人データを中国の会社に渡すことになったがよいか?」と言われたので非常に驚いたことがある。あのときは、ダイナブックはもうダメか、と非常に落胆したのだが、シャープに売却となって少しは安堵していたのである。

しかし、今回の報道を受けて、新しい「シャープのダイナブック」から購入するのはもうやめることにした。(古いのは使い続けます。)

一方で、興味が出てきたのがVAIOである。最近のソニーの製品をみると、昔の輝きをすこしずつ取り戻しているような気がする。もちろん、ソニーもVAIOを切り離してしまったが、独立した先でよく頑張っていると思う。個人的には、ソニーがRaspberry PIを製造を引き受けているという点も、高評価につながっている。

落ち目の日本経済を救ってくれそうなのは、ソニーとアイリスオーヤマになるのだろうか、と現在注目している。(個人的には、アイリスオーヤマの製品は嫌いなので、あまり購入したことはないのですが。)

2019年1月16日水曜日

人工流れ星:ALEの挑戦

明日、1/17に鹿児島の内之浦宇宙空間観測所から打ち上げ予定だったイプシロン4号機の打ち上げは、1/18の朝に打ち上げ延期となったそうだが、この三段式固体燃料ロケットは今回複数の衛星を打ち上げる予定で、その一つにALEという民間会社が製作した「人工流れ星発生衛星」が含まれている。

ALE...ビールの種類だとおもったらそうではなく、Astro Live Experiencesという会社名の省略だという。この会社は 「人工流れ星」を作り出して、花火のようなお祭り企画を売りモノにしたいと考えている。

筋金入りの天文ファンには、こういう「偽物」は非常に評判が悪いようだが、一般の人にはずいぶん好意的に受け入れられているようだ。国内外のメディアでも最近しきりに紹介されている(もちろん、これはこの会社のプロモーション部門の売り込みなんだろうが)。

ただ、技術的にはちょっと興味がある。まず、流れ星の中身は、様々な重金属を練りこんだ鉄球だと思う。花火と同じように炎色反応を応用しているはずだ。ALEによると、赤い流れ星、緑の流れ星、など様々な色をデザインできるようだ。次に、狙いの上空に流れ星を流すには、衛星の姿勢制御を精密に行う必要がある。説明によると、これは恒星の位置を観測し、それをもとに計算して角度や位置を割り出すそうである。これはなかなか面白いシステムだと思う。GPSとかは使わないのが、"Astro"っぽい感じでいい。

打ち上げはうまくいくだろうが、試練はその後にまっているはずだ。というのも、衛星から物体を打ち出す、つまり投げ捨てる わけだから、地球をすでに回っている既存の衛星、特にISSにとってみたら、とんでもない話である。したがって、国際的な協議の結果、この流れ星衛星はずいぶん軌道高度を下げて運用するように要請されているらしい。したがって、イプシロンが衛星を投入する高度は結構高いだろうから、なんらかの方法で、地球に向かって高度を下げる運転が必要となる。

昔、ザクとガンダムが地球上空で戦闘を行なった際、少佐の部下クラウンは無残にも大気との摩擦で燃え尽きた。 スペースシャトル、コロンビアも大気圏突入に失敗し、大破した。だいたい、ハヤブサだって燃え尽きた。重力とのバランスをとりながら、少しずつ高度を落とすのは意外に難しいのではないだろうか?

次の試練は姿勢制御だろう。3つほどバランスコントローラーが付いているらしいが、一つでも壊れたら運用停止するようJAXAやNASAから求められているらしい。それはそうだ。鉄球の行き先が制御できないようでは、恐ろしくておちおち寝てもいられない。広島の上空に流すつもりが、平壌や北京の上空に落としてしまったら、第三次世界大戦の火蓋を切るロケットが飛んでくる可能性だってある。ここが一番の正念場になるはずだ。

もちろん、打ち上げの衝撃で、弾丸発射装置(銃?)の故障なども考えられる。

成功を祈る。

2019年1月15日火曜日

ラズベリーパイとは何か:What is Raspberry Pi ?

gcjの記事でも書いたが、最近MR.ROBOTというアメリカのTVドラマを見たのだが、そこで"Raspberry PI"が出てきた。数年前に雑誌でその存在を知って、たしか1冊教科書を買ったような気がする。が、他のプロジェクトに時間を取られて、なかなかその詳細に触れることができなかった。

研究予算が5000円ほど余ったので、今回購入してみようと思い立った。注文する前に、ラズベリーパイとはなにか整理しておこう。

ラズベリーパイは、極小のM/B(マザーボード)だ。つまり、コンピュータの基盤である。自作PCが十年ほど前に大流行りしたときには、こんな小さなM/Bは売ってなかった。
Raspberry PIの最初のモデルは 2012年の発売だそうだ。

Rapsberry PI B+ 1.2 (2014発売):画像はwikipediaより


ちなみに、今までに作った自作PCの中で一番小さかったのは、英国に住んでいたときに作った「ベアボーン」というタイプのものだった(厳密にいうとベアボーンはキットのことで、M/Bの大きさの規格は意味しないが)。RHLをインストールし、NICを二枚挿しして自作ルーターとして使用したのが、今では懐かしい思い出となってしまった....あのベアボーンでも、Raspberry Piと比べたら、象みたいなものだ。だいたい、最近のルーターもずいぶん小さくなったが、Raspberry Piはそれよりも一回り小さい。

この小さなM/Bの目的は、プログラミングの教育だそうである。創始者はEben Uptonという英国人(より正確にはウェールズ出身)で、彼はケンブリッジ大学を卒業後、母校に就職しコンピュータサイエンスを教えていた研究者であり、その後カリフォルニアの半導体会社Broadcom Co.に転身した技術者でもある(Intelに派遣されていたこともあるようだ)。そして、ラズベリーパイ財団を立ち上げた起業家、実業家でもある。

イギリスのコンピューターと言えば、最近では携帯、スマートフォン、パッドなどに使用されているARM社のRISC型CPUが有名だが、 ラズベリーパイもARMコアをパッケージしたBroadcom社のSoCを利用している(SoCというのは、CPU, GPU, Display, SDRAM, USBなどのチップやコントローラーを固めて詰め込んだデバイス/チップのこと)。ちなみに、ARM社は2016年にソフトバンクに買収されてしまったので、「日系」と言えるのかもしれない....

製造は、ウェールズにあるSony UKの工場がメインで、その他、中国と日本でも製造しているとのこと(日本での製造も、愛知にあるソニーの工場で行われているそうだ)。ちなみに、私が購入したのはMade in United Kingdomだった。

ラズベリーパイは日本では「ラズパイ」と呼ばれる場合もあるそうだ。ただ、ヤマダ電機などには売ってないので、私はamazon.co.jpで注文して購入することにした。値段は5000円ちょっとなので、買い求めやすいと思う。ただ、これを買っても基盤だけなので、記憶装置となるmicro SDカードとか、キーボード、モニターなどは別に用意する必要がある。もちろん、常日頃から計算機をいじっている人はそういうのは余りがあるので、使い回しするだけだ。映像出力はHDMIなので、私は自宅のテレビをまずはモニターがわりにして使おうと思っている。





2019年1月14日月曜日

チバニアンの問題(2)

チバニアンの認定について、日本国内で「内輪もめ」が起きてしまい、国際会議での審査が凍結されてしまった件について調べてみたら、いろいろと面白いことがわかった。

まず、当初の申請をおこなった国内グループとはどういう人なのか調べてみた。国立極地研究所のプレスリリースに、申請者のリストがあった。このリストはアルファベット順なので、研究を主導する人がどなたか、わかりにくい。産総研のプレスリリースをみると、そのあたりが明確になる。それによると、茨城大学の岡田教授、国立極地研究所の菅沼准教授、千葉大学の亀尾准教授、国立科学博物館の久保田研究員といった方々であるようだ。つまり、「きちんとした科学者のグループ」であることがわかる。

一方、異議を唱えた団体とはどんなグループなのか調べてみた。たとえば、毎日新聞には「別団体」と書かれているだけで、どんなグループかはっきりしない。そこで、個人のブログなどを参考に調べてみると、 「古関東深海盆ジオパーク認証推進協議会」という団体であることがわかった。その代表は、茨城大学の楡井教授であるという。この「評議会」についての資料は著しく少なく、正体は不明だ。この団体は、チバニアンの地層がある養老渓谷の場所に、勝手にコンクリート階段を設置したことで報道されたことがある。

さらに調べてみると、いろいろなNPO法人の理事長の職に楡井氏がついているらしいことが判明した。たとえば、「日本地質汚染審査機構」。非常に興味深いことに、この団体のホームページには、安倍明恵夫人からの激励の色紙の写真が貼り付けてあった。色紙には「平成二十八年10月26日」という日付がある。(2016年といえば、森友学園や加計学園に関する活発な動きがあった頃ではないだろうか?)

楡井教授の経歴が気になるところである。まず科研費の情報からは茨城大学には2003-2005年の間は確実に所属(広域水圏環境科学教育研究センター)しているらしいことがわかった。 しかし、現在は、この研究センターには所属していないようだ。2012年2月に開催された講演会の資料には「茨城大学名誉教授」とあるので、その前に退職なさったようだ。

検索を続けると、意外な資料から彼の初期における経歴がわかった。それが久米宏のラジオ番組の過去ログだ。2015年7月に、ラジオ番組に出演し、久米宏と対談したらしい。この資料によると、出身は福島県会津地方出身で、大阪市立大学の学部と大学院を卒業しているそうだ。卒業後の1970年に千葉県庁に就職している。役場の定年は60歳だから、2000年前後に定年退職したことになる。つまり、役人の天下りのような形で国立大学の茨城大学に再就職したということだろう。つまり、この方は、研究者というよりは、実務経験をもった元役人という感じがする。

このラジオ番組で、楡井さんはチバニアン(彼はチバシアンと名付けたかったようだが)の宣伝を行なっているから、2015年7月の段階では、彼は異議を申し立てるどころか、推進派 だったことがわかる。ところが2017年6月の申請時には、研究者グループのリストには名を連ねていないから、2015.7-2017.6の間になにかがあったのは確かである。

同じ茨城大学には、チバニアン提案者の中心人物である岡田教授がいる。彼は理工学系の学科の教授であり、楡井さんの所属していた研究センターとは異なる。想像するに、正統的な研究者である大学教授と、元役人が再就職して誕生した大学教授との間には、意見の隔たりがあったのではないか、ということである。

ここまで調べると、この「異議」というのが科学的に根拠のあるものではないことが薄々わかってきて、なんだか馬鹿らしい気分になってきた。事実、IUGSの審査は、この「異議」について気にもかけなかったらしく、中断していた二次審査を無事に通過したということである。

多くの報道で、今年中にも正式に決定される見込みであると報じられている。安心した!きっと、今年の秋、冬に吉報があるはずである。

2019年1月13日日曜日

チバニアンの問題

チバニアンとはなんだろうか?ジュラ紀とか白亜紀とかと同じような地質年代を表す時代名らしいのだが、詳しいことを知らなかったので、調べてみることにした。

まずは基本事項から始めよう。地質の年代は大雑把な分類から次第に細分化されていく。まず一番大きな枠組みが「代」、eraと呼ばれる単位だ(注:正確には代の上の枠組みとして「累代」、aeonというのがあるが、あまり使わない気がする...もちろん、とあるスーパーの名前は別にして。)。代(era)は、古生代、中生代、新生代の3つからなる。チバニアンが属するのは新生代だ。

次の年代が、紀、すなわちperiod/epoch(英語の用語の違いがいまひとつわからないが)。 有名なものに、中生代に属するジュラ紀とか白亜紀とかがあるが、新生代の場合は、第三紀と第四紀からなる。チバニアンは第四紀に属する。

第四紀というのは大雑把に言って人類が誕生してからの時代である。アウストラロピテクスが生きていた時代が400万-300万年前で、第四紀はこの辺りから始まる。

第四紀は更新世と完新世に別れるが、結局後者は「人の時代」つまり有史以降の現代ということだ。

更新世にはカラブリアン(カラブリア期)とかジェラシアン(ジェラシア期)いう名前がついた「期」、すなわちage、があるが、それ以降の時代には名前がついていない。カラブリアンというのは、最近、霧ヶ峰とか、上田の砥石城の前にある虚空蔵山だとか、そういう山塊を形成する安山岩溶岩がカラブリアンであることを知ったばかりだ。

第四紀の中で名前がついていない77万年前から12万年前の地質時代をチバニアン、すなわち「チバ期」 と呼ぼうというのが、2017年6月に日本の地質学者が国際地学会IUGSに提案した内容だという。この時代に何が起きたかというと、最後の地磁気反転が発生した時代なのである。おそらく、地層中の金属鉱物の磁化方向が反転していることを利用して、この時代を特徴付けるのであろう。

同時期に、イタリアの地学会から「イオニアン」が提案されたようだが、2017年11月の予備審査でチバニアンに軍配が上がり、日本の報道機関などで「チバ期」誕生か?と大きく盛り上がったのは記憶に新しい。

しかし、この後、チバニアンという地質年代名の認定に関しては、予想しなかった事態が発生し、審査が凍結されてしまった。2018年5月、「チバニアン」という名称をIUGSに提出した国内のグループが2つに分裂し、片方が片方を「嘘つき」と糾弾したのである。つまり、磁気反転のデータを捏造したと異議を唱えた。日本国内でもめている状態では、これ以上の国際的な議論は無駄になりかねない、と感じたIUGSは審査を凍結してしまった。「チバニアン」の夢が遠ざかったように感じた人も多かったのではないだろうか?

一体全体、この「内輪もめ」とはなんなのか、調べてみることにした

2019年1月10日木曜日

gcjが消えた

javaはインタープリタのようなものであるが、コンパイラに改良されたjavaが存在し、それがgcjである。gccの中にバンドルされていたので、気軽に使っていた時期がある。ただ、実行速度はあまり早くなかったので、ちょっと研究には使えなかった。

色々あって、数値計算の研究から遠ざかっていたが、最近また少しずつプログラミングを始めた。きっかけはMR.ROBOTというアメリカのドラマである。linuxを使ってハッキングをしかける若者の話で、なかなか面白い。ドラマのタイトルにはunix系の専門用語が使われていて、例えば、eps2.1-kernel-panic.ksdとか、eps2.2-init-5.fveとか、eps2.9-python_pt1.p7zとかといった感じである。しかし、pythonやVisual Basicは出てくるのにjavaが出てこない。ちょっと不思議な感じがした。

こんなこともあって、自分のマシンに入れてなかった言語を入れてみることを思いついた。先日はMS Officeのインストールだけでも、あれほど苦労してしまったので、今回も苦労するかもしれない、という漠然とした恐れはあった。が、それはhomebrewのおかげで杞憂に終わった。ありがとう、homebrew!

 インストールしたかったのはfortranだが、g77やg95は消え(古いヴァージョンはまだ動かせるようだが)、ifortは有償になってしまったので、gfortranを入れることにした。調べると、これはgcc 8.2に最近はバンドルされているそうなので、brew install gccとしてgccをアップデートすることにした。(gccは元からmacOSに入っている。/usr/bin/gcc。homebrewでインストールしたgccはgcc-8として実行する。/usr/local/bin/gcc-8。)

そういえば、gcjもgccにバンドルされているはず。久しぶりにgcjとタイプしてみたが、そんなコマンドはない、というメッセージが出た。調べてみると、gcjは2016年にgccから外され、開発も終了したという。この事実は驚きであった。

そもそもjava自体が、最近はあまり表舞台に出てきてないようである。ただ、多くのアプリケーションはいまだにjavaで書かれているようで、人気の言語ではあるが、しかし段々とその汎用性が薄れて、開発用途に合わせた新しい言語で記述されるケースが増えているという話である。これも驚きの事実であった。

mac関連だと、LLVMとかswiftとか、新しい言葉が出てきた。gcc -vとやるとLLVM version 10.0.0.0とか出てくる。VMの一種らしい。だとするとjavaのextensionだろう。