Un nouveau monde parfumé

香り立つ備忘録

この記事は08:19つくば発秋葉原行通勤快速のTX車内で書いています

TXにおける車両の選び方ベストプラクティス

  • 基本的には最後尾車両

    • TXは2~4号車が電動車(モーターがあってうるさい)、1,6号車が制御付随車(ないので静か)になっている
    • 空気抵抗で揺れない最後尾車両が一番静かで快適
    • ただし、秋葉原行きの最後尾1号車は平日始発〜9:00まで女性専用車両なので注意
  • 初期配備車(TX-2x51~2x66)までの車両は3,4号車

    • 初期車両は椅子が固い
    • 見分け方は編成番号のほか、先頭運転席の窓の下に赤いラインがあるかとか、車両横の青い「つくばエクスプレス」の表示の上に赤いラインがあるかとか
    • ロングシート化改造を受けた車両の椅子は柔らかいのでもともとクロスシートだった3,4号車がよい
      • どの編成が改造済みかは不明

気が向いたらまたつくばエクスプレスハックを朝のTX車内で書きます。

AWS で爆速エンコード -自動化編-

続きます。

pikachuism.hatenablog.com

ffmpeg から nvenc を使ったエンコードができたので、これを自動でやっていくことになります。

続きを読む

AWS で爆速エンコード -準備編-

こんにちは。みなさんは録画をする人でしょうか。

このブログを読みに来るようなオタクの皆さんの場合、日々増え続ける 15Mbps の MPEG-TS との戦いを往々にして繰り広げているものと思います。
我が家の録画サーバーも録画済データが 1TB に迫り、いよいよ真面目にエンコードをしていかないと先行きが不安です。

しかしながらエンコードにはCPUパワーとなおも多大な時間を要します。
試しにウチの録画管理に使っている LIVA (Bay-Trail-M Celeron N2807) で x264 によるエンコードを試してみたところ、30分の動画を処理するのに8時間強を要しました。未エンコード件数は400件近くあり、不眠不休で頑張らせても100日ほどかかることになりますね。

とてもじゃないけどやってらんないので、Amazon パワーでぶん殴っていくことを考えました。

続きを読む

つらいときに押すボタン

この記事は クソアプリ Advent Calendar 2016 の11日目の記事です。

遅れました。すみません。

qiita.com

作ったクソアプリについて

僕の大学では来週22日から期末試験*1が始まります。元々3学期制を敷いていた名残でやや変則的なスケジュールですが、つまりこれから試験勉強に最終レポートに追われるつらい学生の増える時期です。

そんなときはこのボタンを押しましょう。

f:id:pikatenor:20161211080400p:plain:w600
つらい.ピカチュウ.net

運が良ければ同じタイミングでつらさを感じている人がいるかもしれません。
もし同じつらさを抱えている人がいればそっとわかってあげましょう。

f:id:pikatenor:20161211080607p:plain:w600

アプリの説明は以上です。


このままではポエムで終わってしまい、この Advent Calendar は Qiita に作られたものです。なので少しだけ使ったものの話をします。

というかこれ、実は去年の今頃につくったクソアプリのリニューアルなんですね。
↓2015年版(一応 http://tsurai-tk.herokuapp.com/ で今も動いています) f:id:pikatenor:20161211080626p:plain

大変素朴な見た目をしています。

というのもテスト勉強がつらくなったときにふと思いつきで、諸事情で作ったアプリのコードを再利用(というかほとんどのコードを削除 )して20分ぐらいで作ったアプリで、あまりにも素朴なので作り直したいなあ、と思いながら1年が過ぎ、またこの時期に新たに作り直すことにしたという訳です。

本当はもっと見た目に凝ろうと思っていましたが、時間がなかったのでとりあえずこれにて公開します。

2015年版は Sinatra で書きましたが、今回は勉強も兼ねて Meteor というフレームワークで書いています。

Meteor について

Meteor は JavaScript(node.js) のフルスタックWebアプリケーションフレームワークで、サーバーからクライアントまでまるっとJSで書けます。
2014年には1.0がリリースされ、まあ使ってみても良いんじゃないかと思ったので使ってみました。

Meteor を選んだ理由の一つに、リアルタイム同期が非常に強力というのがあります。

見ての通り つらい.ピカチュウ.net はリアルタイムでカウンターを同期しており、2015年版では WebSocket を直にゴリゴリ使って雑に jQuery でページを書き換えていました。

Meteor ではUIビューのほとんど全ての状態がリアルタイムに同期されます。
試しに同じブラウザ上で2つタブを開いて、片方のタブでログインすると、その状態が即座に他のタブにも反映されます。えげつない。
つらみの新規書き込み、削除も一瞬です。

また、作っていて感じたことですが Meteor ではクライアントのコードとサーバーのコードがかなり共有され、割とビビります。
サーバー側でモデル(MongoDB*2)の操作を行うコードがクライアント側でもそのまま動きます。厳密には minimongo が Mongo ライクなクエリをローカルでインメモリストアに対し実行しつつ、リモートにリクエストを投げています。このため、同期しつつもスムーズな動きを実現しています。

あまりにもサーバーのコードとクライアントのコードが渾然一体としているため、大規模になった際の維持が難しそうだと感じましたが、少なくともこういったしょぼいアプリを書き捨てるにはうってつけです。

Advent Calendar に登録しておきながらすっかり忘れていたためあわててアプリを作り始めましたが、0時頃から実装を始めておよそ2時間で機能の実装が終わりました。実際やってることはチュートリアルの Todo アプリと何ら変わりないですが。

まあその後 CSS を書いたりデプロイしていたらさらに2時間ほどかかりました。VPS に置いた dokku のアップデートに失敗して nginx の設定を崩壊させたまま放置していたのが敗因です。

とりあえず、作るだけならあまりにも簡単に作れてしまう Meteor のご紹介でした。詳しくはググってくれ。インターネットには他にいくらでも良質な紹介記事がある。


以下余談

CSS は本当に最高

デザインスキル というか CSS 力が無さ過ぎてクソアプリ一つ作るのにも時間を掛けてしまってつらい

そういえばこの前、サークルの引退祝いにこんなものをもらった。

CSS IS AWESOME. よくわかる。

Meteor を Heroku/Dokku にデプロイする

よーしできたしデプロイすっかと思ったがすこし手間取ってつらかった

パッとひっかかるこの jordansissel/heroku-buildpack-meteor は最新の Meteor 1.4 に対応していない。こっちの AdmitHub/meteor-buildpack-horse を使おう。

そもそも手間取ったのは先述の通り僕が nginx を破壊したせいだったんだけども。

クソアプリの文脈

以下はクソアプリ作りが間に合わなかった時にしようと思っていた話。

saikoh.tk という内輪でウケるためのアプリを作ったら微妙に内輪を越えてウケてしまい、調子に乗ってこんなイベントを実施したり、学園祭で肉を焼いたりしたとか

つらい.ピカチュウ.net はこの「リアルタイムでカウンターが増えると妙に面白い」という文脈を受けたものであるとか

そもそも saikoh.tk 自体さらに前に作った ganoff.tk というクソアプリの文脈を受けており…

という話をしようと思ったが、話すと長くなるし、身内以外に伝わる気がさっぱりしないので、この話はまた今度にします。

*1:厳密には秋Bモジュール期末試験

*2:ちなみに Meteor ではデータベースに MongoDB 以外を使うための現実的な選択肢があまりありません

node.js with nvm with systemd

先のこたつ記事の補足というか何というか

サラッと Hubot を常駐と書きましたが、当然そのサービスの自動起動には systemd を使いたいですね? 使いたいですね? 使いましょう。

systemd 氏は実行ユーザーなんかも指定できるわけですが、環境変数の設定までは面倒を見てくれないので、そのへんをやっていく必要があります。

nvm でインストールしたお好きなバージョンの node で Unit ファイルを書くと、おおよそ次のような感じになります。

[Unit]
Description=Hoge
Requires=network.target
After=network.target

[Service]
Type=simple
WorkingDirectory=/path/to/application
User=<user>

Environment=ENV=production

ExecStart=/home/<user>/.nvm/versions/node/<version>/bin/node <mainfile>.js

[Install]
WantedBy=multi-user.target

kotatsubot の場合は次のようになっています。

/etc/systemd/system/kotatsubot.service

[Unit]
Description=KotatsuBot
Requires=network.target
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/kotatsu/kotatsubot
User=kotatsu

Restart=always
RestartSec=10

Environment=PATH=/home/kotatsu/.nvm/versions/node/v6.9.1/bin HUBOT_SLACK_TOKEN=hogehoge

ExecStart=/home/kotatsu/kotatsubot/bin/hubot --name kotatsubot -a slack -l kotatsu

[Install]
WantedBy=multi-user.target

Note that, ExecStart の1つめの実行ファイル名に記述できるのはフルパスのみです。$PATH も見てくれないし変数も展開してくれない。甘えるな。.js はフルパスじゃなくて良いの だって WorkingDirectory してるから

/usr/local/nvm なんかにシステムワイドに nvm をインストールしている場合もほぼ同じ方法が取れるはずです。

この方法だと nvm の設定によらずバージョンが固定されてしまうじゃないかという議論*1はあるのですが、僕はむしろ実行バージョンが固定されない方がヤなのでこの方法をとっています。あと ExecStart からラッパースクリプト呼ぶの好きじゃないんですよね(原理主義)。bin/hubot だってラッパーじゃないかと言われると返す言葉がありませんが。

なんなら bin/hubot に1行 . /home/user/.nvm/nvm.sh と書き足すのもいいかと思います。

以上、よき systemd ライフを。

Internet of こたつ

現代日本において必需の暖房器具とされているこたつ。皆さんのご家庭にもこたつは実装されているものと思います。

f:id:pikatenor:20161205234255p:plain (Figure.1 こたつ)

皆さんこのような経験はありませんでしょうか。

「一日中こたつのスイッチ入れっぱなしで外出してしまい電気代がマッハ」
「家に帰ったら即あったかいこたつにスライドインしたい」

今回はそのような問題の解決を目指すべく、インターネットに繋がったこたつを作りました。
猫も杓子もアイオオティーの時代です。流行りには乗っていきましょう。

遅くなりました。こちらは klis Advent Calendar 2016 6日目の記事、klis14のかみかみがお送りします。

続きを読む

ご報告

以前エントリした「ガールズ&パンツァー 劇場版」を12回観た話の記事ですが、その後

を積み増しているので本日現在までの最終的な(劇場での)視聴回数は15回になります。

以上です。

続きを読む