Mastodonは技術面がクソ

2017年4月26日 23時02分 スルメ 未分類

どこがクソ?

OStatus周り

OStatusとかその辺のGNU Social/Mastodonが実装している仕組みは、投稿ごとに投稿したユーザーをフォローしているユーザーにこんな投稿があったよ、とHTTPリクエストで知らせる仕組みである。

一人ひとりが自分のインスタンスを持ち、一時間に10回程度しか投稿しないなら成り立つシステムだが、mstdn.jpなどの大規模インスタンスだと、軽いDoSになる。

これを解決しつつ互換性を保持する方法として、HTTPリクエストを同一インスタンスに投げる回数が多い場合、WebSocket接続を確立しそちらで通信するという手段を考えたが、よく考えるとこの方法ではスケールができない。

なにか根本的な解決法を見つける必要がありそうだ。

API

accept-languageかなにかでAPIのレスポンスの[“error”]が変わる。しかもaccept-languageに依存しないエラーの検出方法がない。[“error_type”]かなにかを用意するべきだ。

Web

Reactを使っているせいでUserScriptからなどの拡張性がないが、これはMastodonが悪いのではなくReactが悪い。

Riot.jsであれば、カスタムタグ名がHTML内に残るのでまだましなのだが・・・

あと、連合タイムラインを開いて眠ると起きた頃にはswapが使われている。

いいタイミングで投稿をメモリから消去してほしい(難しいのはわかっているが)。

Linuxでバッテリーの情報を取る

2017年4月5日 15時09分 スルメ Linux

ノートパソコンだとだいたいバッテリーがあると思いますが、Linuxでは/sys/class/power_supply/下を見ることでバッテリーの状態を取得できます。

まず、/sys/class/power_supply/BAT0が大体の環境ではバッテリーになります(バッテリーが何個も積んである場合だとBAT1,BAT2と増えていく?)

その下の

capacity = 100~0?のバッテリーの残量

status = バッテリーの状態(充電されているか、充電済みかどうか、など)

などを見るとバッテリーの情報がわかります。

これを使えばTwitterにバッテリーの状態を垂れ流したり、バッテリーの充電が終わったら通知を送る、といったプログラムが書けます。

nginxからPHPがアクセスできなくなってたのを直した

2017年3月25日 06時23分 スルメ nginx

直しました。

なんで死んでたん

nginxをnginx-mainlineにするときにもろもろ設定が上書きされてて、fastcgi_paramsがfastcgi_params.pacsaveとしてリネームされてたからです。

ちょっとPHPを動かすためにそこに数行書き足していたので、それが消えて死んでいました。

解決方法

diffを取ったところ大きな違いはなさそうだったので、mv fastcgi_params.pacsave fastcgi_paramsしました。

広告をやめて、常時HTTPSにしました

2017年3月22日 12時31分 スルメ お知らせ

忍者AdMaxをやめて常時HTTPS化しました。

なんで広告やめて常時HTTPSにしたのか

どうせこのブログに来る人間の半分ぐらいは広告ブロッカーを入れてると判断したのと、広告の利用規約に縛られない記事を書きたかったのと、HTTP/2の恩恵を受けるためと、HTTPSをなんとなく通したかったためです。

ffmpegを使って、すでに用意してある映像をRTMPで生放送する

2017年3月2日 22時43分 スルメ ffmpeg

そのまま突っ込むと早送りみたいになってしまうので。

実際には事前に録画しておいて、生放送ではその映像を流したいときとかに便利。

 

SafariでNPNのみ対応のHTTP/2サーバーにつなぐと動画が再生できない

2017年2月19日 22時22分 スルメ Safari

タイトルの通り。

NPNしか対応してないHTTP/2サーバーなんてあるのか?と思うかもしれませんが、OpenSSLが1.0.2未満だとそういうことが有りえます。

今回はkyoppieのメディア用サーバーをHTTP/2に対応させようと思ったけどうまく行かず放っておいたらSafariで動画が見れなくなってました。ごめんなさい。

 

nginxのetagの実装

2017年2月16日 01時45分 スルメ nginx

https://github.com/nginx/nginx/blob/b9a031622b7bf586a9c724dade16abfac188f2f2/src/http/ngx_http_core_module.c#L1819-L1821

ここ。

最終更新日時をhex化したものとレスポンスの大きさ(Content-Length)をhexにしたものを-で繋げてるっぽい。

意外と日本語での説明なかったので書いておきます。

Cyro氏のアルセウス取得方法の解説

2017年2月5日 22時50分 Reiju 有用そうな情報

Cyro氏による、このトリックについての翻訳済みの文章および解説は公開を許諾されています。詳細はこちらへ

こんにちは、Reijuです。Cyro氏が十年来に解明した、アルセウスの取得方法を解説します。

私の翻訳ではどうしてもわかりづらいことが多いので、改めて書こうと思いました。

まず、重要なステップはこちらです。

続きを読む