この記事は TUT Advent Calendar 2017 の25日目の記事です。

こんにちは、やんてねです。

このブログに記事を書くのも、 昨年の TUT Advent Calendar の記事 以来1年ぶりということで、 ここ1年間の自分の多忙さ(あるいは怠惰さ)がよくわかるなあと思います。 技科大に学部1年に入学してから6年、もう修士2年で最後の年なのですが、 この1年は他の5年間に比べてとても濃い時間でした。

語りたいことはたくさんあります。 今年は、就活がありましたし、 Mastodon インスタンス Fla.red を立てましたし、 修士生活あと半年というところであろうことか研究室変更をしましたし、 今年の冬コミで出すコンピュータクラブの部誌に記事も書きました。 就活に関しては ころんさんがわかりやすく書かれているので 二番煎じは避けようと思います。 (自分個人の就活に関しては直接聞いてもらえればお答えします)。 研究室変更に関しては、まあ色々と込み入った事情もあり、 ここで語るべきことではないと思うのでこちらも避けたいと思います。 部誌に関しては、 きのうアカハナさんが書かれた通り なので、こちらに関しても二番煎じかなと (記事の見どころなんかを書いても良かったかも知れませんが)。 ということで、相も変わらず Fla.red のご紹介をばさせてもらおうかなと、そう思っております。

Fla.red ってなんやねん

もともとは技科大生向けに作った Mastodon インスタンスです。 Mastodon とは何か、分散型ソーシャルネットワークの理念、みたいなところについては、 Mastodon Advent Calendar の記事を読まれると良いと思います。

今では技科大生以外にも開かれたインスタンスになっており、 ありがたいことに最近では技科大生以外のユーザもローカルTLで見かけるようになりましたが、 Fla.redのページを見るとわかる通り各所各所に技科大ネタを詰め込んでいます。

Fla.red の特徴

技科大ネタを満載していることはわかった、 じゃあ Fla.red って他のインスタンスとどこが違うの、 という話になりますが、4つの特徴があります。

コードスニペット

1つ目はコードスニペットを投稿できることです。 Markdown 風に、バッククオート3つの行で括るとコードスニペットになります。 開始行のバッククオートに続いて言語名を指定することもできます。 例えば、以下のように投稿すると

ライプニッツの公式で円周率を求める。

```ruby
puts Array.new(1_000_000) { |n|
  4.0 / (1 + 4 * n) - 4.0 / (3 + 4 * n)
}.inject(:+)
```

3.141592153589902

このように表示されます。

このようにハイライトされるのは Fla.red から見たときだけで、 他のインスタンスから同トゥートを見ても残念ながらコードスニペットは表示されませんが、 Markdown でも採用されている記法なのでそのまま見ても読みやすいものと思います。

数式

数式を含むトゥートを投稿することができます。 KaTeX を使っているため、描画が高速です。

インラインで使いたい際には$でくくります。 ディスプレイモードで使いたい際には\[\]の行でくくります。

例えば、以下のように投稿すると

ライプニッツの公式は、以下のとおり。

\[
\pi = 4\sum^{\infty}_{n=0}\frac{(-1)^n}{2n + 1}
\]

$\pi$が求まるよ!

このように表示されます。

こちらも Fla.red から見たときだけレンダされます。 他のインスタンスから見たときは、、、 うーん、さすがに TeX の数式を目でパージングするのは難しそうです。

豊富なカスタム絵文字

すし

おいしそうなさまざまな寿司ネタのすしの絵文字が揃っています。 すし絵文字は GitHub にて CC-BY で公開しています

:bintoro: :ebi: :ebiten: :hamachi: :ika: :ikra: :maguro: :negitoro: :salmon: :tai: :tamago: :uni: :zukema:

加えて、まぐろにはアニメーションによる「流れるすし」の絵文字が用意されています。 上から右、上から下、上から左、右から下、右から左、右から上…と12種類の「流れ方」がサポートされています。 なので、秩序立って並べれば回転寿司をトゥート中に再現することだって可能です。 くわしくは、ぜひ Fla.red にアカウント登録して試してみてください!

ベン図

さまざまなパターンのベン図が揃っています。 自然言語だと、たとえば 「えんぴつまたはシャープペンシルを持ってきてください」と言われたときは :or: の意味になりますが、 「ケーキまたはプリンを買ってきてください」と言われたときは :xor: の意味になり、文脈によって指すパターンはバラバラです。 文脈から推測できればよいのですが、現実には判断が難しいことも少なくありません。

ベン図の絵文字があれば、先ほどのような「または」の曖昧性除去に役立つことはもちろんですが、 ほかにも「雨が降っている :conditional: 傘を持っている ならそろそろここを出ましょうか。」 のような、自然言語ではなかなか表せないようなパターンも自由自在に表現できます。

:abjunction: :and: :conditional: :contradiction: :eq: :nand: :nor: :not: :or: :proposition: :tautology: :xor:

その他

他にも、統計屋さんが大好き各種分布の絵文字 :norm_dist: :powlaw_dist: :t_dist: :uniform_dist: や、町中で見かける道路標識の絵文字 :jrs_207_a: :jrs_214_2_d: :jrs_301: :jrs_407_b: :jrs_316: :jrs_319: :jrs_325: :jrs_325_2: 、ウンチがあるのに尿がないのは何事かという勢いにまかせて作った検尿容器絵文字 :pee: などなど、さまざまな使うかどうかを差し置いた思いつきの絵文字を多数そろえています。

最新リリースに追従

独自機能を持ったインスタンスはなかなか最新リリースに追従することが難しく、 古いバージョンにとどまっているところも多いのですが、 このインスタンスは極力迅速に最新リリースに追従しています。

もちろん私の時間がとれるかどうかにもよるのですが、 今後も、拡張機能とのコンフリクトが起こらない限りはリリースの当日中にはアップグレードをしたいなと思っています。

コントリビュート

Fla.red のソースコードは ここ で公開しています。

バグ報告や新機能の要望はIssueにお願いします。 もちろんPull Requestも大歓迎です。

ちょっとだけ鯖缶の苦労話を

サーバにはリトアニアの格安 VPS である Time4VPS(リンク: アフィリエイトあり|なし) の Standard VPS S Plan を使っています。 さすがにリトアニアと日本では距離があるため、 メディアサーバからの動画の再生などでラグを感じる部分はあるのですが、 それ以外には大きな不便は感じていません。

苦労と言えば、Time4VPS の Standard VPS は OpenVZ サーバであることがあります。 カーネルバージョンが 2.6.32 で固定されているため、 Docker を使って気軽にドカーッと Mastodon を立てることができませんでした (少し値段は上がりますが、Standard VPS ではなく KVM Linux VPS を選べば Docker を使うこともできます)。 とはいえ、Docker を使わずとも公式の Mastodon Production Guide 通りに作業をすれば簡単に立ち上げられるので大した苦労ではありません。 強いて言えば、アップグレードが少し大変ですが…。

インスタンスをたてよう

2年契約をすれば、月あたり2.99ユーロで Mastodon インスタンスを立てられます。 支払い方法も、クレジットカードのほか、PayPal、Bitcoinなどいろいろサポートしています。 ちょっと勇気をだして、ちょっと手間をかけて、インスタンスを立ててみましょう! ここまでこのダラダラと書かれた記事を読まれたあなたなら、きっとできます。 あなたの勇気が、真の分散型ソーシャルネットワークの夢への大きな一歩になります。

おわりに

25日になってから、バタバタと書き始めたこの記事ですが、 とりあえずクリスマス中に書き終えることができました。 今年の TUT Advent Calendar の締めくくりがこんなグダグダした記事になってしまい、 ホント申し訳ありませんでした…。

思い返せば、学部3年のときに TUT Advent Calendar 2014 を気まぐれで立ててから、もう4年目です。 自分が卒業したらどうなるのかなあ、 続いていくのかなあと心配に思っていましたが、 今回は813さんが Advent Calendar を立ててくださりとても嬉しかったです(ありがとうございます!)。 来年以降も続いていって、あわよくば自分も卒業生として参加できたら嬉しいなあと、そう思っています。

TODO: 近いうちに乱文を直す