いつでも発展途上

猫と珈琲とゲームが大好きです。ITエンジニアらしいです。メモ代わりにいろいろ書いています。

技術書典9「分散SNS萬本 vol.2」でわくわくした

こんにちは。ブログがめったに更新されないやまこです。

いきなりですが、技術書典9で頒布された「分散SNS萬本 vol.2」がとてもおもしろかったので紹介します。

techbookfest.org

分散SNSってなに?

ものすごく雑に紹介すると「Mastodon みたいなの」なんですが、そもそも Mastodon 自体があまり正しく知られていないというか mstdn.jp の譲渡騒ぎ等もあって「オワコン」と認識しているひとも多いのではないかと思います。

なのですが、じつは Mastodon をはじめとする分散SNSは、いますごくおもしろい状況でもあります。

ActivityPub というオープンプロトコルを実装した OSSMastodon のほかにも、Misskey, Pixelfed, Pleroma, microblog.pub など多くあります(本書で紹介されています)。それらは OSS ですので、個人が自由にサーバを建てることができ、それらのひとつに登録したユーザは、リモートフォローや連合の仕組みによって、サーバ間の垣根を超えたタイムラインを構築することができます。

イメージ的には、ホームタイムラインに TwitterFacebook, Instagram のユーザがまざって表示されるような状態になります。しかも個人が建てているサーバが多いので、お一人様サーバから大規模な企業運営のサーバまでいろいろあり、なかなかにカオスでたのしい。

ロートルな筆者としては、レンタルサーバでホームページを作って CGI を動かしていたころのような DIY 感に、とてもワクワクするのです。

各章の感想

筆者自身も小さな Mastodon サーバを運用していますが、本書の著者たちは分散SNSに造詣が深く、知らないトピックばかりで「へえ〜」の連続で楽しめました。

  • サーバーセキュリティチェックリスト
    • h12o さんによる超・実用的!!な Mastodon セキュリティチェックリスト。鯖管としてはぜひチェックしないと…と思わされました…
  • 激動と戦いの分散主義/Twitter という比較対象
    • いずれも TheDesk の作者 Cutls P さんによる分散SNSについてのコラム。テクニカルターム満載ながらエモい回想録、個人的にすごく好きな文章でした
  • PixelFed2020
    • 前村雄一さんによる、画像投稿に用途をしぼった PixelFed の本格的な紹介。こんな実装も生まれてしまうのが楽しいです
  • P2P 型分散SNS コラム
    • ひだるまさんによる、P2P 型の分散SNSの紹介です。全く知らない内容で新鮮に読めました…!
  • Matrix.org
    • Nakaya さんによる、分散型コミュニケーションプロトコル Matrix の紹介です。Mozilla が採用したりなどで注目も高く、分散SNS自体に興味がないひとも気になる内容なのではと思えました
  • Pleroma 運用話
    • 本書の主催・国見小道さんによる超・本格的な Pleroma 運用ドキュメント。これ単体で一冊の本にしてもよいのではというぐらいのボリュームで圧倒されました! Mastodon はちょっと重たいので軽量な Pleroma には惹かれました…
  • microblog.pub インストール
    • こちらも国見小道さんによる、お一人様サーバに最適な microblog.pub を建ててみた記事。すごいパワーで試されているのがすごい…!(語彙が少なめ)

全篇通して、筆者が建ててみたいと思ったのは PixelFed のサーバでした。華やかで楽しそう…(サーバの管理がたいへんそうとかは脇に置いといて…)

というわけで

読みましょう!それでみなさんも分散SNSの連合 (federation) がつくりだす小宇宙、Fediverse にぜひ参加しましょう :-)

筆者のみなさま、よいご本をありがとうございました。とても楽しい時を過ごせました。

JavaScript で選択したテキストを取得する

これで、ブラウザ上でマウス等で選択したテキストを単に取得します。

window.getSelection().toString();

するのですが、選択されている範囲に、特定の要素が含まれているかどうかをチェックしたいときもあります。

たとえば id="hoge" な要素で選択されているかどうか見たいときは、こんなかんじ。

var element = document.getElementById("hoge");
var sel = window.getSelection();
if (sel.containsNode(element, true)) {
    console.log(sel.toString());
}

Selection#containsNode の第二引数に true を指定すると、すこしでも要素が含まれていれば true が返ってくるようです。細かい動作はちょっと調べきれていませんが、false を指定するとけっこう判定がシビアな感じ。

注意点

参考

Mastodon アップグレードメモ 2020年6月

趣味で運用している Mastodon のサーバを 2.8.0 から 3.1.4 に上げたときのメモです。

環境

方針

  • リリースノート の Upgrade notes に従ってやっていく
  • 一気にあげると崩壊しそうなので、だいたい db:migrate が発生する単位ぐらいであげていきました。

ハマったこと

yarn install が停まる

yarn install が何度かこんなメッセージで停止しました。

Browserslist: caniuse-lite is outdated. Please run next command `yarn upgrade`

色々ググった結果 browserslist の内容を最新にするといいらしいとわかり npx browserslist@latest --update-db を実行したら、うまくいきました。

$ npx browserslist@latest --update-db
npx: 11個のパッケージを3.759秒でインストールしました。
Current version: 1.0.30000986
New version: 1.0.30001081
Updating caniuse-lite…
warning " > react-redux-loading-bar@4.0.8" has incorrect peer dependency "react-redux@^3.0.0 || ^4.0.0 || ^5.0.0".
caniuse-lite has been successfully updated

参考

node.js のバージョンアップが必要

v3.1.0rc1 以降は Node.js のバージョン 10 以降が必要になります。自鯖は 8 だったのでアップグレードしました。

CentOS の場合は公式から RPM パッケージを持ってくる必要があります。root でやります。

curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum install -y nodejs

node -v して v10.21.0 になっていることが確認できました。

参考

bundle install できなかったバージョンがある

3.0.1 より後のバージョンで、なんかいろいろ bundle install で問題が発生していたのでいくつかスキップしました。おかげで 3.0.1 から一気に 3.1.4 へ。

参考

Redis のバージョンアップが必要

v3.1.3 以降は Redis 4 以降がサポート対象になるとのことで Redis のバージョンもあげました。

yum install epel-release
yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum info redis --enablerepo=remi

これで最新バージョン 6 が入りました。

参考

まとめ

  • バージョンアップはこまめにやろう
  • 参考サイトの作者さま、ありがとう

リモートでインセプションデッキの「やらないことリスト」を試してみる会 に参加しました

リモートでインセプションデッキの「やらないことリスト」を試してみる会 に参加してきました。インセプションデッキとは何かはググってください(手抜き)! 書籍「アジャイルサムライ」で有名になったやつです。

達人ファシリテーター(私の中で)ガオリュウさんが、リモートでどのようなファシリテーションをされるか模索中ということで、興味津々で参加させていただきました。

全体のながれ

1. 今日期待することを出し合う

Zoom のブレイクアウトルームを使って参加者が数人ずつ+ファシリテーター1名 に分かれ、今日の場に期待することをあげていきました。 皆さんリモートでどうファシリテートするのか、やらないことリストとはどんなものか、との期待が(当然ながら)あるようでした。

2. しくじり先生登場!

Kaz さんによるオンラインでのファシリテーション失敗談。ITリテラシーの高めな人が集まっても、各自の自宅のインターネット回線がよわいとラグが発生しまくってオフラインと同じようにはいかない、という貴重なお話でした。なるほどー・・・

3. リモートで「リモートでやらなくなったこと」をあげていく (Google スプレッドシート)

お題「リモートでやらなくなったこと」を協力者4人で Google スプレッドシートに書いていきます。付箋がなくてもこれならリアルタイムで更新されるのがみんなで見られていいですね。

4. リモートで付箋を使って整理していく (miro)

ここからはワークショップぽい流れに。miro を使って前項であがったやらないことリストを付箋に貼り、それを協力者4人で以下にわけていきます。

  • やらなくなったけど、やる とすること
  • やらない or やる にしたけど、ちょっと考えていきたいこと(やり方とか本当にやる/やらないで良いか議論したいとか)

長距離通勤などだれもが無駄と思いそうなことは「やらない」のまま残るけど、本屋さんに行く・散髪する・ちょっとした会議 などは「やる」に移動されていき、議論の余地がありそうなことが可視化されていくのが面白かったです。

5. みんなで感想を言い合う

再びブレイクアウトルームに入って感想を語りあい、最後に全員で共有します。

得られた気づき

  • リモートでもやりようによっては、十分ワークショップできる!! んだけど、ワザと慣れは必要そう
  • 参加者の回線が使いたいツールに耐えられそうかどうかは、事前に確認したほうがよさげ
  • Google スプレッドシート最強! Excel ライクならみんな使い方を知ってるし、回線がよわくてもつかえる!
  • miroCSV から付箋のインポート・エクスポートできるのが超べんり!

個人的に感じたこと

  • みんな(無駄な)通勤はしたくない
  • みんな(無駄な)会議はしたくない
  • みんなコミュニケーションに飢えている
  • ガオリュウさんの「場をあたためる力」はリモートでも衰えない

見学もOKということで見ているだけでも楽しめる勉強会だったと思いますが、オンラインだと気軽に離席できるのもメリットっぽいです。 運営のみなさま、楽しい学びの場をありがとうございました。

rails-erd で Rails アプリの ERD を出力する

ERD は Entity Relationship Diagram の略でテーブルの関係図です。はじめてのアプリを触るときに ERD があるとモデル周りの構造がわかりやすくなります。

なお反映されるのはあくまで DB 上のもので、Active Record 上で定義している制約などは反映されません。 -> よくみたらちゃんと反映されていました。

手順

Graphviz というツールが必要なので Homebrew から事前に入れておきます(macOSの場合)。

brew install graphviz

Gemfilegem "rails-erd" を追記したうえで

bundle install
bundle exec erd

とするとカレントディレクトリに erd.pdf が作成されます。

参考

新しいプログラミング言語を覚えるときにしていること

1. オフィシャルサイトを見る

オフィシャルサイトにはその言語の制作者がもっとも伝えたいことが書かれており、情報の鮮度も良いため、あれこれググるより効率的なことがしばしばあります。

だいたい英語ですが、最近は非ネイティブに配慮したやさしい英語を用いているサイトが多く助かります。日本語翻訳がある場合は、感謝のあまり錐揉みジャンプしつつ利用させてもらいます。

そのプログラミング言語が生まれた経緯や、設計思想なども読んでおくと、あとあと役立ちます。その言語の本来の用途から大幅に外れたコードを書くと、将来の誰か(自分ふくむ)が泣くことになるでしょう…

2. 言語処理系を手元のマシンで使えるようにする

オフィシャルサイトからそのプログラミング言語の処理系をダウンロードしてきて、手元のマシンで Hello World します。

3. プロダクトコードを読む

  • 3-1. 業務で扱う対象となるコードが目の前にあれば、まずはそれを読みます
  • 3-2. その言語で書かれた有名なプロダクトのコードが Github 等で公開されていれば、それを読みます

例: Ruby ですと tDiary とか昔はよく読んでました。いまは Mastodon をたまに。

できれば 3-1. だけでなく 3-2. もやっておくと、その言語でのだいたいのお作法なんかがわかります。気合の入った人や C/C++ のわかる人は、言語自体のソースコードとかも読むと楽しいかもしれないです。

4. 自分でなにか作る

これが一番大事です。とにかく自分で手を動かしてなんか作ります。大切なことは ハードルを上げすぎない ことです…!

あまり大きなプログラムですと挫折するので、私は だじゃれ bot の移植をよくしています。これはテキストファイルからだじゃれを読み込んでランダムに抽出し、SNS に投稿するというシンプルなものですが、覚えたい言語でこれを移植することにより以下のことがわかります。

  • 言語機能の調べ方(疑似乱数はどう生成するの?とか)
  • File I/O のやり方
  • ライブラリの探し方、使い方
  • デバッグのやり方、エラーメッセージの見方
  • その言語の雰囲気(アバウトですが、意外に大事)

手を動かすと、ささいなことで悩みます。オフィシャルのチュートリアル(あれば)を読むなり、ググりまくるなり、人に聞きまくるなりでどうにか動作までもっていければ、しめたものです。

例: Scala に移植してみた

5. 継続的に情報を収集する

イベントや勉強会に参加する、SNS でタグやエバンジェリストを追う、著名プロダクトの更新やニュースをチェックする、同僚に聞く、などなど。


他にも、こんなことをやると良いよ、自分はこうやっているよ、などがあればぜひコメントで教えてください。

TV版「トライガン」をいまさら全話観た

Amazonプライム・ビデオで「トライガン」テレビアニメ版を全話観た。原作漫画はリアルタイムで読破していたが、アニメは初めてだ。

終盤では原作漫画とは違う展開になるが、これはこれでうまくまとまっていてよかった。Amazonレビューでは酷評もあるようだ。たしかに若干誇張が強いところもあるが、たった26話であの壮大な話をもらさず語るのは無理というものだろう。

ヴァッシュの苦悩も、ウルフウッドのもがきもよく伝わってきた。保険屋さん二人は漫画より活躍していた気がするが、これはアニメならではのサービスだろう。

この短さで Gung-Ho-Guns を全員登場させているのも驚かされた(連載中に放映終了のため一部出てないキャラはいる)。ただ本当にちょっとしか写らないキャラもいる。尺の都合で仕方がないのだが、どうにか個性を表現しようと頑張ってる感じは伝わる。

そして、なんといっても、ガンアクションが売りのこの作品で「動く」のは最高に強い。ヴァッシュが撃つ!神父が撃つ!保険屋さんも撃つ!!心躍るバトル!!!それなのに主人公は人を殺さない主義。こんな作品、ほかにはない(知らない)。

600億$$(ダブドル) の男

600億$$(ダブドル) の男

 

ちなみに映画のほうも良かったので、そっちもおススメである。

劇場版 TRIGUN Badlands Rumble

劇場版 TRIGUN Badlands Rumble

 

※一部主語が大きすぎた表現を修正しました