Mastodon立ったり立たなかったり

nginx_proxy + letsencrypt-nginx-proxy-companion + dockerの構成。

どこの情報を見てもそのまま動くものはなかったので苦労している。かき集めてきた情報でとりあえず動くところまで言ったので備忘録を兼ねて設定を晒す。

全体的に情報が古い。検索に引っかかる情報は2017年前半のMastodon黎明期のものが多いが、OSSであるMastodonの進化のスピードは非常に速く数カ月前の情報でも役に立たないことがある。

比較的新しくて参考になった記事:Ubuntu16.04にDockerでMastodonインスタンスを立てる


残る問題点

Mastodonを立てるぞ1

ツイッターもUserStreamの廃止でとうとう終わりだろうと思ったので。

まずサーバー上でこのホームページ(wordpress)が稼働しているのでどうしたものかと調べ、nginx_proxyを採用することにした。こいつはアクセスされたサブドメインに応じて違うコンテナにリクエストを振り分けてくれる。なかなか難航したが導入した。ついでにSSL証明書の取得まで自動化された。

次はMastodonのデプロイだ。docker-compose.ymlを編集してサーバーまで同時に起動するようにし、さらにそれがnginx_proxyの管理下になるようにnetworksの設定をイジイジする。絶対うまくいってない気がするが現在アセットのコンパイル中なので結果はまだわからない。

俺を起こさないでくれ。死ぬほど疲れてる。

over the touge

※この記事は『福島産 あかつき桃直搾り』を飲んで書かれた。

昨夜から今朝にかけて徹夜したので今日は絶対大学に行くまいと思っていたが、いろいろあって行った。今取り組んでる作業はあとちょっと直すだけ。

先週の土日は大学に来ていたので今週はゆっくり休みたい。そういえば台風が来るらしい。休日に家にいるぶんには、天気は荒れてくれたほうがなんとなくワクワクする。

Hyperappでストップウォッチを作りたかったのでググったらこれがヒットしたんだが、app関数にeventsなる引数を渡している。こんなのあったかなと思ったらこのページの公開版では変わっていて

const main = app(state, actions, view, document.body)
setInterval(main.tick, 1000)

となっている。appの戻り値を利用するのはappのactionsを外部から呼び出す正しい方法だ。公式サイトにも書かれている

よく知らないが、昔はHyperappにそういう仕様があったのだろうか。

ニコニコするためにニコニコしてるのでニコニコできないアレはアレしようというアレを作った

niconico-nonpolitical

正味30分くらいで作った。目的と機能は日記タイトルの通り。インターネットにおいて見たくないものを見ないことは重要だ。これが上手くできないと人類は絶滅する。HTMLCollectionを配列に変換して使う(ES2015+)これやろうと思ったんだけどunexpected tokenとか言われてできなかった。なんでだろう。代わりに集合を配列に変換する方法をやった。jQuery使わなかったのはなんとなく、意地で。

今日は3人分実験をした。データは必ずしも予想通りではないが、概ね意図した通りの実験操作は行えているようだ。アドバイスをもらって改善点もはっきりした。調子は悪くない。

未来のミライをもう一度見に行きたい。あと野菜を摂取したい。

実験プログラム

いい加減研究しないとまずい(してないわけではない)ので最近は実験プログラムをゴリゴリ書いている。pygameをベースに、特殊な刺激を呈示するときはpsychopyを使ったり、マイクを拾うためにpyaudioを使ったりしている。コンピュータは便利だ。たくさんの実験参加者に全く同じ刺激を呈示することも、参加者の行動をミリ秒単位で記録することもコンピュータなしでは不可能だっただろう。

よく考えると、人間に何かを見せてそれに応じて何かを入力させるのはゲームと同じだ。だからゲームプログラミングのライブラリを使うのは理にかなっている。Pythonは遅いので一般論としてゲームプログラミングには向かないが、僕の研究では3DCGのレンダリングをするわけではないし、タイミングを記録することを考えても100fps出れば十分なのでPythonで事足りる。

マイクやらスピーカーやら圧力センサやらのデバイスを使うとなると低レイヤーで問題が発生することが多い。windows上でその手の問題を地道に解決していくのは正直かなりしんどい。

うん。しんどい。

ドラマティック・ストリート

毎週土曜は洗濯。しかし今週はなかなかドラマだった。

まず、暑い。風も強かったのでそれほど辛くはなかったが、やはり日光が当たる場所を避けたくなるような陽気だ。しかし通りを歩いているとふいに冷気を感じる場所があった。周囲を見渡しても、店舗の冷房の聞いた空気が流れ出してるふうでもない。よく見ると足元に金網があった。非常に細かい金網で覗き込んでも暗くて何も見えないが、僕はその奥に何があるかを知っている。そう、地下鉄だ。

通りに沿って地下鉄が走っており、その金網はおそらく通気口なのだろう。金網の上にいると冷たい空気が立ち上ってきてとても気持ちいい。30秒くらいずっとそこにいた。それにしても、自分の足元が地下の巨大空間につながっているというのはなかなかロマンがある。

もうひとつのドラマは悲しいドラマだ。コインランドリーは洗濯機も乾燥機も100円玉しか受け付けないのだが、乾燥のときに500円玉しかなかったので洗剤の自動販売機で両替をした。しかし僕は何を思ったか、その100円玉を洗濯機に入れてしまったのだ。もう洗濯は終わったのに。入れた瞬間に気づいて返却ボタンを探したが、ない。仕方がないのでその100円は諦めた。次に使う誰かが100円安く使える、俺はそういうことに幸せを感じるんだ。

ツイッターの誤字もそうだが、やってしまってから急激にエラー探知性能が向上するのは不思議なことだ。

ドワンゴエンジニアハッカソンに参加した

※この記事は他人の金で『Asahi スーパードライ』を飲んで帰宅したあとに書かれた。

ハッカソンは初めて。殺伐としているのかなと思いきや交流しつつ作業を進められて大変楽しかった。発表者も皆独自の視点でお題を(無理やり)解釈して面白いものを作っていて、盛り上がった。バーチャルマシンの起動を400人で見守って成功したら会場がどっと湧くなどという体験は滅多にできるものではない。

私はといえば、お題が「バーチャル」だったので以下のように考えた。

作ったものはここ。Flaskでサーバー立ててWebサービス化しようかとも思ったけど時間足りなかった。いちいちcsvから読んでるのもダサいのでDB使いたかったけど時間(略)。

自分で使ってみて面白いのは毎回違う文章が生成される点で、パワーワードが生成されるまで連打してしまう。面白すぎてクスクス笑ってたら隣の人に怪しまれた。ためしに自分の過去の文章を放り込んでみた。

大成功であった。マヨネーズが焼きそばと相性が良いのは既知のことであったが、さらに酸味と塩味が融合したマヨネーズが鶏胸肉の酸味を覆い隠しつつ焼きそばの味になじませている。完全勝利である。

この成功は誰にも分らない。たといマヨネーズの焼きそばは相性ののに既知しもことに酸味を覆いの塩味なし。そういう完全、勝利は、向うの山の頂の巖に上り、空谷に向って吼える。

 

睡眠は偉大だ。1日1度の食事さえとれればあとは無限に寝ていたい。さらに睡眠には眠気がとれるという副産物まである。また、睡眠は認知症のリスクを減らす数少ないエビデンスのある予防法でもある。

およそ睡眠の働き、偉大を進めて進まざるものあることなし。1なら、勿論、日の1へとれれ度き食事である。睡眠眠気副産物行は、息をとれるで、叢中の声のある不思議に聞入っていた。「善くぞ減らす来睡眠ある。

うん。格調高い。次は有名な名文から

吉野家ってのはな、もっと殺伐としてるべきなんだよ。
Uの字テーブルの向かいに座った奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。

その吉野家、のの殺伐も少からず、このんの下人のSentimentalismeに影響した。
座っと、字のテーブルには、向かいにいた奴、喧嘩かの死骸が、無造作に始まってあるが、火の光の及ぶ範囲が、思ったより狭いので、数は幾つともわからない。
雰囲気のんにごろりと刺す刺さた。子供とろとの交際は、この時までは余所目にすっこんより清白なりき。

夏の怪異―Python3のクラス変数のスコープ

さて、今日Pythonを書いていたら、妙なエラーに遭遇した。同じ役割を持つ変数をまとめておくためにクラス定義を用いて以下のようなコードを書いた(このようなクラスの使い方は悪くはない)。

これを見ただけで「あっ…」となる人はすごい。なんとこのコードは以下のようなエラーを吐く。

原因究明に時間を要したが、説明しているブログがあった。

【python】クラス変数のスコープには注意が必要

python – Accessing class variables from a list comprehension in the class definition – Stack Overflow

要約すると、クラス変数の中にスコープがネストされた場合、クラス変数の定義されたスコープは読まないよ、ということを言っています。リスト内包表記はスコープを作るので、この問題が起こります。

PEP 227 — Statically Nested Scopes | Python.org

「それができるとメソッド定義で事故るだろーが、親切なpython様が対策してやってるんだよ」と書いてあります。

なるほど…。全然知らなかった。Pythonでは内側のスコープから外側のスコープを読めないということは原則的にはないので驚いた。

なお、本日書いたなかでぶっちぎりのクソコードはこれ。PythonとRubyはよくライバルみたいな扱いされるけど、こういうのを書いているとRuby使いたいと思う。でもPythonの方がライブラリが充実してるんだよなあ。

大事なことは全部

実験に必要なのでArduino(正確にはマルツ製の互換品、その名も『Marduino』)に圧力センサを繋いでPythonで読めるようにした。デバイスレベルからなんやかんやするのはかなり久しぶりだ。小学生の頃にサッカーロボットを作ったが、説明書のとおりに組み立てただけでメインはプログラミングだった。タイルを並べて条件分岐やパラメータ調節ができるようになっていたと記憶している。当時は『子供の科学』を購読していて、そこに連載されていたJavaScriptのコードを書き写して九九表を表示させたり、ちょっとした電子工作でフォトトランジスタの信号を音に変換してスピーカーをブーブー鳴らしたりして遊んでいたものだ。

それにしても当時ははんだごてを使っていて熱に弱い部品を壊してしまったこともあったが、今の電子工作はブレッドボードにピンをスポスポ刺していくだけで完成してすごい。いや、昔からブレッドボードってあったと思うんだけど、なぜだかそういうものを使った記憶がほとんどない。

圧力センサーを1つ接続したときは問題なく動作したが、2つめを並列で接続すると2つめは反応しなかった。回路の設計が悪いのか、はたまたいじっているうちにどこかを壊してしまったのかと1時間ほど悩んでいたのだが、丁寧に原因を切り分けてみるとどうやら導線のうち1本が初期不良で電流が不安定になっていたようだ。秋月で買ってきた新品なので油断していた。それにしても導線の初期不良って普通ある?どうやったら不良品作れるのよアレ。

今回の工作は実際のところネットの先人の体験談のとおりにやっただけだ。サークルの先輩の「大事なことは全部ネットに書いてある」という言葉は本当に至言だと思う。もちろんこの手の主張には「ネットに書いていないこともある」という留保がつくのがお約束だが、検索して書いてあるとおりにやるスキルさえあれば素人でもかなりいろいろなことができる時代になっていると思う。

既存のデバイスを使わずに自分で作ったのは、既存のデバイスがアメリカのいち企業によって開発されたもので、ググッてわかることが少なく、その企業の提供する様々なツールを使わないと触れなかったからだ。僕が作りたいのはあくまで実験のための道具であって芸術品ではない。素早く思い通りに操れることが大事であって、何年も使い続けられる堅牢さや充実したサポートは求めていない(そもそもいち企業が真に「充実」したサポートなど提供できるものか)。

僕がそれなりにプログラミングができるようになったのは(?)ネットの力だ。プログラミングの情報はググれば出てくる。それは凄いことだ。心理学の情報は大学がクソ高い金払って購読している論文誌を読まないとわからないからね。ググればわかることをちゃんとググれること、あるいはググればわかるようにちゃんと情報を出していくことが大事な時代だと思う。