旧字フォントをつくった

IPAexフォントからこの旧字(正字)フォントを作ったときの方法を簡単に紹介します。

といっても、難しいことは何もしていません。実はIPAexフォントはもとから旧字の情報を持っているのです。
どういうことかといいますと、TTFフォントには内部にGSUB(たぶんGlyph Substituteの略)テーブルというものを持っていまして、そこに所謂新字体と旧字体の対応が書かれているのです。
これによって、ソフトウェアによってはそこの情報を読み取って全ての文字を旧字体にするといったことが簡単にできるようになっています。

が、ソフトウェアによってと書いたとおり、それを出来るソフトウェアはほとんどありません。詳しくは知りませんが、Adobe Indesignのようなプロ向けの(高価な)DTPソフトくらいだと思います。
そこで、このテーブルに載っている情報を元に、新字体のグリフを旧字体のものに置き換えてしまうことで、どのような環境でも旧字体で表示するフォントを作りました。

私はブラウザの表示フォントをこれに指定しているのですが、使っていて結構便利です(便利とは一体)

・例えば大学のサイトを見に行ったら、おおーかっこいい、となったりします(流体物理学研究室 | Kyoto University, Department of Physics)。
f:id:suzusime:20160417002553p:plain

なお、GSUBテーブルというとあまり耳慣れないかも知れませんが、実は縦書きの際に文字の形が変わるというのはこの機能を使って実現されています。
そもそも、もともとこんなフォントを作ろうと思ったのは、全ての文字を縦書き字形に置き換えたフォントを作ろうとしたためです。

私はサークル(KMC)のslack上で「はんこbot」なる、受け取った文字列をはんこ状に配置した画像を生成するbotを作りました。
ただ、imagemagickを使っていたために縦書き字形で表示することが出来ませんでした。
で、どうするのかと考えた結果、フォント自体を弄ってしまえばいいと気付いて、少しFontforgeスクリプトの書き方を調べ、縦書き字形フォントを作りました。
そしてそれを応用すれば旧字フォントが作れると気付いて、旧字フォントもついでに作ったのでした。

・はんこbotがちゃんと縦書きの字形(長音符など)を表示している例
f:id:suzusime:20160417004043p:plain


さて、肝心の作り方ですが、FontForgepythonの使えるコンピュータ上で次のようなスクリプトをipaexm.ttfと同じディレクトリで実行するだけです(実行は `$ fontforge -script hoge.py` )。

# -*- coding: utf-8 -*-
import fontforge;

sfn=fontforge.open("ipaexm.ttf")

sblist=[] #置換するグリフリスト
glyphs=sfn.glyphs()
for item in glyphs:
    table=item.getPosSub("'trad' 旧字体 lookup 19 subtable")
    if len(table) != 0:
        sblist.append( (item.glyphname, table[0][2]) )

nfn=sfn #新しいフォントオブジェクト
for item in sblist:
    sfn.selection.select(item[1])
    sfn.copy()
    nfn.selection.select(item[0])
    nfn.paste()

#名前の設定
nfn.fontname="Hanyu1MinchoR"
nfn.fullname="Hanyu1MinchoRegular"
nfn.familyname="Hanyu1Mincho"
#保存
nfn.save("hanyu1min.sfd") #sfdファイルを保存する
nfn.generate("ipaexm_trad.ttf", bitmap_type="", flags=('opentype')) #ttfフォントを出力する

……だったら良かったのですが、実は私の環境(debian 8)では最後のttfフォントの生成がうまくいきませんでした。
そこでsfdファイル(中間ファイル)を出力し(下から二行目)、そのsfdファイルを別PC(Windows)のFontForgeのほうで開いてttfフォントを出力すればうまくいきました。
たぶん最初の環境ではFontForgeのバージョンが古かったとかそういうことだと思うのですがよく分からないです。

ちなみに縦書きフォントを作りたいときは(サブ)テーブルの名前として "'trad' 旧字体 lookup 19 subtable" の代わりに "'vert' 縦書き字形【廃止】 lookup 0 subtable" を指定すれば良いです。
このあたりの情報はGUIFontForgeでIPAex明朝を開いて調べました。なお、フォントによってテーブルの名前は異なります。

FontForgeで使えるスクリプトは独自のスクリプトpythonがありますが、どちらもほぼ初見だったので、どうせなら汎用性が高い方ということでpythonを選びました。

このフォントの問題点としては、自分が旧字と思っているものでも旧字として扱われないことがあることでしょうか。例えば「真」と「眞」とか。IPAexフォントを作った人の考え方に依存しているので仕方がないことですが。
本当は自力で変換テーブルを作れば良いわけですが、そこまでのやる気はないかなぁと(ちなみにそういうフォントは五月雨明朝(梅雨空文庫)や馬酔木明朝(
旧字フォント 馬酔木明朝)などいくつかあるみたいです)。

今回はまあFontForgeスクリプトでお手軽にフォント編集できるよ、ということでひとつ。

Pietサーバーの建立を手伝った話

私の入っているサークルKMC(京大マイコンクラブ)はエイプリルフール企画として「KMCはKPC(京大Pietクラブ)に改名しました」というものをやりました。
kmc.hatenablog.jp

その中でPietでサーバーを立てるというものがあり、それを手伝うことになったので、何をしたかを書いておこうと思います。
なお、最終的に立ち上がったPietサーバーはこちらです→ http://april-2016.kmc.gr.jp/ (本日限定)

前日まで

KMCでは毎年エイプリルフール企画をしていたようなのですが、今年の企画が形になったのは3日前のことだったらしいです。
私はKMC部員で在りながらPietがわからない(!)ので、「大変そうだなー」と思いながらPietを打つひとたちを眺めていました。
したことといえば、UTF-8の文字列しか吐けないPietで如何にPNGバイナリを返すかということについての相談に乗ったくらいです。コードは一行も書いていません。
(なお、結局それは無理と言うことでbase64エンコーディングしたPNG画像を返すことになりました。先程のアドレスにアクセスしてソースを表示してみるとその苦労の跡がわかるかと思います)


で、なんとか間に合って公開されたーというのを自宅からサークルのSlackで見て、お疲れ様、と思いつつ寝ようかとしていたのでした。

応召

が、Pietサーバーには問題がありました。
重いのです。
最初に公開したものでは繫がってからPNG画像を返すまでが約8秒とのこと。しかもそれは運が良かったときのみで、たいていは「502 Bad Gateway」を返すという状況でした。
で、
f:id:suzusime:20160401165124p:plain
ということで、「まじかー」とか呟きながら小雨降る今出川通りを自転車で駆け下りて部室に急行したのです。

補足をすると、駆逐艦というのは部室にある同じ型のPC群のことで、それぞれAbukuma、Inazuma、Ikazuchi、Hibiki、Akatsukiという名前が付いています。今回は(まともに使われていない)これらを動員してPietサーバーの負荷を分散させようという話でした。
で、それらのうちAbukumaとInazumaには私が「普通にUbuntuとかDebianだと面白くないし~」とかいってScientific Linux 7.1を入れていた訳です(他の駆逐艦にはUbuntuが入っていました)。はい、自業自得ですね。Scientific Linuxがよくわからんとかいわれたら行くしかない。

うーん、深夜0時に呼び出される学生サークルKMC、やばいですね!
深夜に呼び出されるとか良く聞くインフラエンジニア力が鍛えられます。

IP固定

まずやってほしいと言われたのがAbukumaのIP固定です。Inazumaのほうは前からサーバーとして動かしていたのでIPが固定されていたのですが、Abukumaのほうはサーバーとして動かすつもりがなかったのでそんなことはしていなかったのです。ならそんなOSを突っ込むなって話ですね。
というわけで、

# nmtui

で便利なTUIを使ってIPアドレスゲートウェイDNSサーバーを設定して、

# systemctl restart network.service

で再起動という作業を、(よくわかっていないまま勘で適当に設定して動かなかったので)何度か繰り返しました。ゲートウェイってなんだっけとかいってたので、最後はInazumaのほうの設定を見る始末。
それでちゃんと設定したはずなのに、何故か上手くいきません。ネットの接続テストに「阿武隈 - 艦これWiki」に繫がるかどうかを使っていたのですが、network.serviceを再起動した瞬間だけ繫がって、しかしすぐにまた切れる……
なんだこれと言っていたのですが、隣でAkatsukiにロードバランサを立てるべく頑張っていたwass80君がみて、IPが競合していることを見抜きました。意思疎通をミスって他のマシンと同じIPに固定していたのでした。一瞬で見抜けるのすごい。
それで無事IPが固定されました(すぐできると思っていたのに意外と長かった)。

Pietサーバーを立てる

全体の構成は次の通り。
まずAkatukiがfrontになって外からの要求を受け、nginxが良い感じにこれらを分散させてbackの三台(Abukuma、Inazuma、Hibiki)に立ったPietサーバーに転送します。
Akatukiのほうの設定はwass80君が頑張ってくれていたので、私の任務はbackのほうにPietサーバーを立てることでした。
が、wassがdockerのファイルを作ってくれていたので、dockerをインストールして

$ docker run --rm -p 80:18080 -it wass80/piet-server ./server.sh

とすれば一瞬でサーバーが立ちました。
これを3つのサーバーでやって、はい、おしまい!
Akatsukiの設定も終わったようなのでこれでできた! 帰れる!


……というわけにはいきませんでした。

謎のサイトにとばされる

ちゃんと立ったはずのPietサーバー、しかし、Akatsukiの80番ポートに繫ぐと何故か謎の海外サイトに飛ばされる…… ローカルIPへの転送設定しかしていないはずなのに…!
wassが頑張って調べていましたし、遠隔で強い人たちがみてくれていたのですが、よくわからず……

私は微妙に手持ちぶさたになっていたので、Abukumaのほうに代わりにfrontを立ててみようとしました。
……nginxがWebサーバーだということすら今日まで知らなかったのですがね。
www.saintsouth.net
この辺りの文書を適当に読んで適当に設定しました。
そしてlocalhostに繫いでみたら、なんかうまくサーバーが立っているようでした。

それで、AkatsukiではなくAbukumaのほうをfrontにするように方針転換し、遠隔で部内DNSの向きを変えてもらいました。

世界に公開したい

が、Akatsuki以外の部室のPCから、一回繫がったはずなのに、なぜかまた繫がらなくなります(前のキャッシュが残っていた説が有力)。
ここでファイアウォールがあることを思い出したので、

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --reload

してみると、部室内からは http://april-2016.kmc.gr.jp/ に繫ぐと正しく画像が返ってくるようになりました。

しかしまだ、部室外からは502エラーしかみられませんでした。ただ、ふつうの502エラーではなくカスタマイズした502エラーページが表示されていたので、どうも部室までは辿れているらしい、とわかります。が、なぜそうなるのかが分からず。

しばし悩みましたが、遠隔でみてくださった先輩から情報が。
外から http://april-2016.kmc.gr.jp/ にアクセスしたときに先につながる、部室の別のサーバーのnginxの設定が、もとのAkatsukiに飛ばすようになったままだったのです。
部室内からアクセスするときは内部のDNSでAbukumaに飛ぶようになっていたので繫がっていました。
別サーバーのnginxから呼び出していることを完全に失念していた為のミスでした……

これで、めでたくPietサーバーは世界に再公開されることになりました。





この最後のツイートが、そのときのものです。約6時間、長い戦いでした。

結果として、Pietサーバーにアクセスすると、5秒以内くらいには画像が返ってくるようになりました。速い! 最高!!!
たかがWebサーバーに物理サーバー4台も要求するなんてPietはクソ。

まとめ


この一言に尽きる気がしました。

まあnginxは結構簡単にWebサーバーを立てられることが分かったので良かったです。好きでやっている分にはデスマも楽しい。あと林檎ジュースおいしかった。

世の中ではいろんな会社のひとが、もっと大変なことをやっていたんだろうなぁ……と思いつつ。

岐阜春景

旅行っぽいことをしたのでその記録。

経緯



ネットで岐阜羽島を調べたら在来線の駅はなくて大丈夫かなと思ったが、岐阜羽島で途中下車すると岐阜から再入場できるとWikipediaにあったので適当に信じていくことにした(基本的に東海道線東海道新幹線は同じ路線という扱いなので新幹線の乗車券で在来線に乗っても良い)。

岐阜羽島

f:id:suzusime:20160327222239j:plain


このあとも岐阜市内でたくさんのパトカーを見た。サミットのための警備だという警官は話していたが、それが伊勢志摩サミットのことを指しているならばあと二ヶ月もこれを続けるということだから大変な話である。
警官に、京都に行く途中に岐阜でちょっと観光でもしようとしていると話したところ、岐阜城にでも行ってみると良いといわれたので行ってみることにした。この時点で美濃赤坂線は別に良いかという気分になっていた。
名鉄名鉄岐阜駅まで行く。笠松行きだったので終点笠松で乗り換えて特急で一駅。特別車と一般車という謎の案内があり、そもそも特急に無料に乗れるのかすら謎だったが、指定席の特別車だけ有料という仕組みだと放送があった。英訳で一般車がNon-Reservedなら自由席・指定席でいいじゃんと思ったり。ここに限らず、私鉄の特急は各社で無料か有料かまちまちで初見では難しいなぁと。

名鉄羽島線新羽島駅より岐阜羽島駅を望む
f:id:suzusime:20160327222954j:plain

二両編成で地方の私鉄だなぁという感じ
f:id:suzusime:20160327223257j:plain

岐阜

名鉄岐阜駅のなかで岐阜市観光案内地図を見つけたのでそれを手に街へ繰り出す。
長良川とそのそばに聳え立つ金華山岐阜城のある山)を撮った写真が載っていて綺麗だったのでこれを見ようと歩き始めた。途中の商工会議所で鮎菓子祭りみたいなものをやっていたがもう半分終わっていたので少し覗いただけで退散。そこまででも思いの外遠かったので、諦めてバスに乗る。長良橋で下車。

橋を渡っていくと雄大な長良の流れ。最高~~とかそんな適当な気分になった。
f:id:suzusime:20160327224905j:plain

だだっ広いのだ。そのために、岐阜がこの川で成り立っている街なのだなと思わされる。
春の陽気でぽかぽかして、この大きな川がゆったりのどかに流れているのと合っていた。

長良川対岸から金華山を望む
f:id:suzusime:20160327225254j:plain
わかるだろうか、山の頂上に小さく城が見えるのが。
望遠で撮影したものが次になる。
f:id:suzusime:20160327225354j:plain
今からこれに登る(登ると行ってもロープウェイだが)。

鵜飼いの鮎漁の時期に出る船(これは観光客が乗る為のもの?)が繫がれていた。
f:id:suzusime:20160327225527j:plain

川原町なる、風情ある街並みの残る通りがすぐそばにあった。観光地図曰く「戦前のような風景」。好き。
f:id:suzusime:20160327225705j:plain

春爛漫の岐阜公園へ
f:id:suzusime:20160327225911j:plain
f:id:suzusime:20160327230044j:plain
f:id:suzusime:20160327230117j:plain

ロープウェイで山頂にある岐阜城
f:id:suzusime:20160327230301j:plain

頂上からは岐阜市街が見渡せる
f:id:suzusime:20160327230429j:plain

更に入場料を払って岐阜城に登ると、そこからの眺めは素晴らしかった。あんなこんもりとした山の頂上にあるものだから、四方に下の街が見下ろせるのだ。
春だからか霞がかっていて、長良川とそれが生んだ濃尾平野一面に広がる岐阜の街の民家の屋根に沈みつつある日の光がきらきらと反射していて、すばらしい景色であった。
この岐阜城はかつて織田信長の居城であって、ここで天下布武の宣言をしたらしいのだが、それに納得できるくらいには「国見」が出来た。天下が見下ろせる場所にあった。
技術が足らないせいでうまく写真で伝えられないのが残念である。
f:id:suzusime:20160327231207j:plain

帰路

帰りは「伊奈波(いなば)神社跡」なる興味深いものを地図で見つけたのでそれを見に行こうかと思い、山道を徒歩で下りようと思っていたのだが、想像以上に厳しい崖を下りなくてはならず、荷物も多かったのですぐに諦めてロープウェイを使って下りた。
そのロープウェイでのガイドで知ったのだが、板垣退助が刺殺され「板垣死すとも自由は死せず」という有名な言葉を残したのはここ岐阜公園なのであった。ということで板垣の銅像を軽く見たりしたが、すでにカメラの電池が切れていたので写真はない。

そのあとは東海道線で京都までまっすぐ向かった訳だが、岐阜でけっこう遊んでしまったので京都にまで辿り着くのは9時頃になってしまった。
だが、時刻表すら持たない思いつきでの旅行は面白かった。いつもは18きっぷをもつにしても、遠くまで行こうとするので予定を立てずに行くという訳にはいかない。
今日は京都に新幹線で行くだけで時間にとても余裕があったのでこんな旅が出来たのだ。
途中下車の旅はいいなぁ。

宿題

少女達の笑顔とともに (劇場版ガルパンの感想)

先程ガルパンの映画を観てきました。二度目です。
以降、余韻に浸りつつそれについての感慨を綴ります。
思い浮かんだことを散発的に書いていくのでまとまりがないことはご容赦を。
ネタバレしかないのでまだ観ていない人は即閉じて下さい。そして映画館に行くと良いと思います。

続きを読む

平成27年12月14日

○授業
1.解析力学:眠くて50分遅刻。微笑清純変換……じゃなく微小正準変換の話。まあゆっくりなので理解はできているかな
3.力学続論:ブーメランの運動解析。角運動量という概念を未だ理解できていなくてとてもまずい。なぜ回転面が変化するんだ。
5.情報基礎実践:C言語入門。やる気なし。ラベル文の挙動を学んだ。

○勉強
・基礎化学実験のレポートをした。今回は楽。ただ有機化学が全然理解できていないので反応機構が載っている本を探す羽目に。巻末参考文献に載っていた『ベーシック有機化学』が手軽でよかった。
・公共哲学の入門書を借りてきた。
多様体ゼミの次回の準備をしなくてはいけないのだがまだ復習中。§8からが抽象的になってきて何がどの概念かまだ整理できていない。

○他
・インフルエンザの予防接種を受けた。
折口信夫「學問の道」の全文は以下。

學問の道

國學の學徒の部隊(イクサ)
たゝかひに今し出で立つ

國學の學徒は、若く
いさぎよきこころ興奮(ホコリ)に
白き頰 知識に照り
淸きまみ 學に輝く。

いくさびと 皆かく若き
見つつ我(ワレ) 涕流れぬ
かくばかり 尊きことの
かくばかり 榮(ハ)えあるわざに
若き世を 我や經にける。

汝が千人(チタリ) いくさに起たば
學問は こゝに廢れむ
汝(イマシ)らの千人の一人
ひとりだに 生きてしあらば、
國學は やがて興らむ

ますら雄の わかるゝ時は、
いさぎよく わかるといふぞ。
汝(ナレ)が手を 我に與へよ。
我(ワレ)が手を きしと汝(ナ)はとれ。

國學の學徒は強し。
いでさらば、今は訣れむ。

反歌
國學の學徒たゝかふ。
神軍天降るなし まさにたゝかふ。

たゝかへる 空に向かひて、
ひたぶるに 我が若人は眦を裂く

手の本を捨てゝたゝかふ身に沁しみて
戀しかるらし。學問の道
(昭和十八年十一月十四日國學院大學學徒出陣壯行會)

もはや各節が自然と口にでるくらいになっている。愛唱歌とでもいうのか。けしてそんな風なものでもなかろうに。五七調のなせる業か。

“面白い”フリーソフトのはなし

この記事は KMC Advent Calendar 2015 の 11日目の記事です。

昨日は kmc-id: wass80 君の

mesos+marathon+docker と slack の shell チャンネルの話 - KMC活動ブログ

でした。

予定では今日はTeXのOTFパッケージ関連の話を書こうと思っていたのですが、想定以上に闇が深くて間に合わなかったので、フリーソフトコレクター(自称)としてのちょっとして随筆をお送りすることになりました。

では、気付いたら長くなっていた前書きから。


 世には無数のソフトウェアが存在します。中には、インターネットにおいて万人に対し無料で公開されているソフトウェアがあります。このようなものを、本稿では「フリーソフト」ということにしましょう。フリーソフトウェア財団などがいうところの「自由なソフトウェア」という意味ではありません。特に、個人や小さな企業が自分の目的に沿ってつくり、それを一般にも公開している……そういった趣味的なものをここでは扱うことにします。

 フリーソフトはその性質上、少し興味を持っただけで、気軽に試してみることができます。自分が本当にそれを必要としているかといったことを考える必要などありません。強いて言うならハードディスクの容量を心配するくらい。その心配にしても、落としてみてつまらなかったら後で消せば良いのです。まるで、図書館の本棚を眺めて、ふと面白そうだなと思った本を手にとって、前書きを読んで、パラパラと捲り、後書きや解説を少し読み、著者略歴を確認して、またそっと本棚に戻すかのように。

 ここでソフトウェアを本に譬えました。そう、ソフトウェアというのは本のようなものなのです。私たちは本を様々な目的の為に読みます。娯楽の為、必要な情報を得る為、難しい本を読んだと自慢する為、et cetera。ソフトウェアでも似たようなものです。娯楽を得る為のゲーム、実利を得る為の実用ソフトウェア、こんな変なものも扱えると自慢する為の(?)難解プログラミング言語

 もちろん、これらは排他的なものではなく、いくつかの目的を兼ねているものがほとんどでしょう。そして、本を読む時の目的としてあらゆる本についていえることであろうことが「自分の持っていなかった思想に触れる」ことです。それはソフトウェアについても言えるでしょう。ソフトウェアが自分には思いもよらなかった思想を示してくれることがあるのです。それは鮮烈な体験です。ソフトの実用性など関係なく、強烈に印象に残るのです。

 ようやく、本稿の目的を述べるところまで来ることができました。本稿では、上述の「図書館」で渉猟するなかで私が見つけた「“面白い”フリーソフト」、即ち私が常識と思っていたことを破ってくれたフリーソフトをいくつか紹介してみたいと思います。

1.Cat System 2

f:id:suzusime:20151211041148p:plain

CatSystem2 Web

 ……硬い文体に疲れました。以降はゆるめの文体でいきます。

 さてさて、Cat System 2はエロゲメーカーうぃんどみるのゲームで使われているゲームエンジンです。

 はい、いきなりエロゲの話がでてきてしまいましたね。安心して下さい、この記事は全年齢対象です。このソフトが与えてくれた知見は別にエロとは関係ないです。

 ちなみにうぃんどみるは「はぴねす」や「祝福のカンパネラ」を世に出した会社で す。最近はE-moteという技術を導入したゲームを作っていますね。「ウィッチズガーデン」の体験版を少しやってみましたが良い感じでしたね。どこかのレビューサイト曰く、「思いやりに溢れた」世界を描くことに定評があるらしいです。

 話が逸れました。閑話休題。嚙みまみた(違
ここで扱っている以上わかるとは思いますが、このゲームエンジンとそれに関わる開発ツールをうぃんどみるは一般に公開しました。会社などが使う際にはライセンス料がかかるとのことですが、個人が試しに使ってみるぶんには無料ということで、私は早速ダウンロードしていろいろと試していました。

 そして、このゲームエンジンで使うスクリプトの文法に驚きました。というのも、なんとこのスクリプトでは「半角英数字を命令用の特殊な文字として扱う」のです。例えば、

	春だった。

	frameoff fade 30 //「fade 30」を指定しなければ瞬間的に非表示
	wait             //コマンド直後はwait必須

	wait 180

	frameon fade 15
	wait //必須

	夏になった。

 

こんな風に書きます(マニュアルより引用)。この中で「春だった。」と「夏になった。」は普通の文字列として表示され、他のwaitなどはコマンドとして解釈されるのです。

 これは衝撃的でした。たとえば、“Hello, world!”とスクリプトに入力しても動かないのです。半角英数字を出力するためには専用の命令を使わないといけません。例えば、TeXでは普通に入力した英数字はそのまま出力され、\記号を用いることで命令を呼び出しますが、それと全く逆になっているのです。

 何故こんな仕様になっているのだろう、そう少し考えてみると、これの合理性に気付きました。そう、この言語はエロゲの本文と演出を記述する為の言語です。その中に英数字はほとんど登場しません。もし登場するにしても、この分野ではたいてい全角英数字が使われます(おそらくフォントによって文字幅が異なると困るので半角英数字を避けるのです)。つまり、半角英数は基本的に文字列として登場しません。ならば、エスケープする必要などないのです。エスケープしなくて済むなら、それだけ入力者の負担が減るのは明かです。まさに、このスクリプトの文法はエロゲの制作に特化しているのです。

 これが教えてくれたのは、目標とするものをきちんと見定めることの重要性です。私なんかがもしこのようなものを作ろうとすれば、何も考えずにTeXのような文法を考えてしまっていたでしょう。これは不必要な一般化です(無意識に、一般化しようとしてしまうのが人の性です。数学や物理学ならばいいのですが……)。世界展開などする気がない、と漢らしく断言できるならば、このCat System 2 スクリプトの文法は素晴らしいの一言に尽きます。ここに私は「プロの道具」の雰囲気を感じ、甚く感動したのです……

2.きらきら筆(Light EDitor)

f:id:suzusime:20151211041151p:plain

きらきら筆 Download

 これはいわゆるお絵かきソフトという分類に属するソフトになります。特徴を言うなら……“非常に使いにくい”。ええ、たぶん、これを初見の人が直観でまともに使うのは不可能でしょう。というのも、これは漫画家の都築和彦さんが「自分で使うために作った」ソフトウェアらしいのです(公式サイトトップには巫女さんの絵がありますね。良いですね)。時は溯り25年くらい前……PC-98パソコン通信Nifty-Serve、鮪だ、似非キース、そんな言葉が飛び交っていたらしい時代の話。その頃は自分のほしい機能を備えたお絵かきソフトがなかったのでしょうか、漫画家である氏は自分でお絵かきソフトを作ってしまったようです。

 びっくりしました。今ではなかなか考えられません。

 ……でも、ですよ。もともとソフトは使いたい人が作るのが当然自分が一番使いたいようにできるわけですよね。自分好みの「道具」なのです。場合によっては他人が使えなくともいいわけです。よくプログラマが自分の為に書くちょっとしたスクリプトみたいに。

 お絵かきソフトを自分で作ると聞いて驚いてしまったのは、単にそれが大規模なソフトだという先入観がある為でしょう。もともとどんなソフトにも差異はないはずなのに。あの途方もないUnixにしたって、確か最初にUnix上で動かされたプログラムはゲームだったはずです。そんなふうに、自分が欲しいと思ったら自分で作ることを試しに考えてみるのも悪くないのではないでしょうか。こういう初心を思い出させてくれるソフトでした。
(……もうちょっと色々と書きたいことがあったのですが、だんだん疲れてきています(現在AM2:05@部室)。ひとつ断っておきたいのは、これは決してこのソフトが初見の人に使いづらいということを攻撃したい訳ではないということです。純粋に“面白い”と思いました)

3.萌ディタ

f:id:suzusime:20151211041153p:plain

萌ディタ:: o v e r D O S E ::

 最後は萌ディタです。もう一つ紹介したいソフトがあった気がしますが、忘れてしまったのでこれで最後にします。

 萌ディタ。名前の通り、「萌え」を求めるために、背景に自由に画像を設定できるようにしたテキストエディタです。ですが、これだけではありません(これだけではあまり面白くありませんね)。なんと、このテキストエディタの内部処理はjavascriptで書かれていて、それを変更すれば自由に挙動を変えられるのです。また、一行入力ウインドウがついていて、それに適当なjavascriptの文を入れると実行できるのです。

 私はjavascriptを勉強していないのでほとんど使えなかったのですが、それでも面白いなと思いました。よくテキストエディタにはマクロ機能がありますが、その弄れる範囲がエディタの機能全て、になっているようなものです(たぶん)。例えば文字を1文字入力するごとに間にスペースを入れる、そんなあほみたいな処理が書けました。「こんな夢を感じるテキストエディタは初めてだ!」なんて言っていましたね。

 あとで考えてみたら、EmacsLispなんかもこんな風になっているのかも知れないなと気付きました。これは萌ディタに限ったことではなかったでしょう。でも、たといEmacsみたいなソフトが凄いと分かっても、「まあそれは凄いわなー」で終わっていたような気がするのです。

 そうです。ギャップ萌えっていうやつです。こういう不真面目そうなソフトがちゃんとしている。いいですよねー。似たような例をいくつか思い出しました。妹認証、つんでれんこ、TOMOYO Linux(最後のは真面目っぽい)。

 こういうのが本当に好きなんですよね。ゆるい見た目で中身はしっかり。そういうのを私は作りたい。絵を練習しようと思ったのもその辺りが関係しています。ゆるい見た目で敷居を低く、抵抗なく受け入れてもらえて、それであとで驚きが待っている。そういう体験を提供したい。

 

 ……うん。そうですね。ちょっと最後は真面目っぽくなりました。このあたりで締めましょう。

 私はKMCに入って以来いろいろとやっているのですが、なんだかんだまだ形には残せていません。今まで色々本も読んだし、色々ソフトを見てきました。そろそろ自分の得てきたものを表現したいと思うところです。

 しばらく待っていて下さい。なにか出しますよ、なにか。今はちょっとしたゲームのために絵とシナリオを書こうとしつつも進捗が生まれていないところなのですが……(でも共同開発者もいるのでこれはきっと完成させます(決意表明))


 明日は kmc-id: prime さんの「C89記念! ANSI C89コンパイラを作る」を予定しています。

 お楽しみに!