小規模Mastodonインスタンスを運用するコツ

補足:ドキュメント移行によりリンク変更と、tasksに関しての追記を行いました。

最近は、twitterクローンであり分散型のSNSであるMastodonが勢力を伸ばしてきているところであり、自分もハマりつつあります。

実際に運用してみてわかった、大規模Mastodonインスタンスを運用するコツとしてpixiv.netが運営しているサーバpawoo.netでは、現時点で6万人以上のユーザ数を誇るほどの規模です。

その一方で、サーバ自体はオープンソースのため、誰でも立てることができ、立てたサーバはインスタンスとして他のサーバとつながることが出来ます。

実際に私も2,3日程運用して、おひとりさまで運用しております。その時のコツというレベルでもないですが、
これから構築する人に向けてはまりそうな点などをまとめておきます。

https://mastodon.potproject.net/@potpro

では、大規模に対してここでいう小規模とは何か、というと
・主に使用ユーザは1~100人程度を想定
・気軽に構築するため、公式のDockerを使用して構築
・SSLは無料のもの(Let’s Encrypt)を使用する
・サーバはVPS、月1000円~2000円程度
そして、
・ちょっとくらいのダウンは問題なし、データは出来るだけふっ飛ばさないようにする

とします。

VPSとコストに関して

基本的に小規模で運用している方々を見るに、

さくらVPSの1GB(972円/月)やAmazon EC2(従量課金、無料枠あり)が多いと思います。

私はコスパ重視で、お名前.com VPS メモリ 2GBプラン(1,099円/月、年払い)を使用しています。

メモリ2GBと仮想3コアあれば一人でロードアベレージは通常時0.1以下です。1-10人程度であればメモリ1GB以上の好きなVPSを選べばいいと思います。

自宅で管理したいなら、自宅鯖を構築するのも手ですが、固定IPアドレスの問題や安定稼働(停電で使えなくなるとか)を考えなくてはならないため、

その点ではVPSの方が優れているでしょう。

このレベルでどのくらい運用できるのかはまあやっぱり実際に試してみないとわかりませんが、100ユーザくらいなら多分大丈夫(と思いたい。

この部分に関しては公式ドキュメントのResources-needed.mdが参考になります。まだ3つしか参考がありませんが、多分増えていくと思います。
https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Resources-needed.md

この記事はあくまで小規模が目的のため、ユーザ1000くらいを目指すなら、
脱Docker、PostgreSQLやRedisの別サーバー管理、Sidekiq threadsの増加、nginxのチューニング、ロードバランスなどが必要になってきますので、
その部分は他の誰かが解説してくれることでしょう。

Dockerコンテナの作成と構築

基本的に、公式DocumentのDocker Guideを読んで作成してください。
更新が激しいので、ここでは構築方法は解説しません。
何故なら構築方法が変更され、この記事の情報が古くなる可能性が高いからです。

自分がハマった点は、必ず公開用に立てるのであれば、タグ付きのリリース版を使用してください。
https://github.com/tootsuite/mastodon/releases
単純にgit cloneをしてクローンした最新のmasterブランチはうまく動作しない可能性が高いです。
タグ付きのreleaseブランチは、このようなコマンドでチェックアウトできます。

git clone https://github.com/tootsuite/mastodon.git
cd mastodon
git checkout $(git tag | tail -n 1)

アップデート

アップデートも余計なことはせず、公式ドキュメントのDocker Guide – updatingを見て行ってください。
公式DocumentにあるThings to look out for when upgrading Mastodon(Mastodonをアップデートするときの注意点)に記載されていることも重要なので参考にしましょう。
ミスったらデータ消えたり上手く動かなくなるのでここは慎重に。
https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md#things-to-look-out-for-when-upgrading-mastodon

このアップデート手順通りに行えば、すぐに新しくコンテナが立ち上がることでダウンタイムも数秒で済みますし、
まず失敗することはないと思われます。

しかし、万が一の時を含め、バックアップとデータ永続化は行っておきましょう。

データ永続化

一部のデータをホストOS側にマウントすることで、コンテナを誤って削除してもデータが保持される状態にします。
docker-compose.ymlの最初のコメントアウト部分を外すことで、ホストOS側のディレクトリに保存されます。
左側がホストOSのパスとなっているので、変更すれば好きな部分におけます。

version: '2'
services:

  db:
    restart: always
    image: postgres:alpine
### Uncomment to enable DB persistance
    volumes:
      - ./postgres:/var/lib/postgresql/data

  redis:
    restart: always
    image: redis:alpine
### Uncomment to enable REDIS persistance
    volumes:
      - ./redis:/data
(略)

この作業を忘れたまま本番稼働させてしまった場合は、次で紹介するdocker cpコマンドでバックアップを取り、
バックアップをマウントするディレクトリと同じ場所に置き、アップデートを行ってください。

バックアップ

小規模といえど、データのバックアップは行いたいです。

#データベース
PostgreSQLコンテナ : /var/lib/postgresql/data
#キャッシュデータ
Redisコンテナ : /data
#取得した画像等のデータ
Mastodon-webコンテナ :  /mastodon/public/system
#sidekiqデータ
sidekiqコンテナ :  /mastodon/public/system

この4つが基本的なバックアップ対象のデータです。
一番重要なのはデータベースですが、
現バージョンでは、取得した画像等のデータも一度紛失すると再取得を行ってくれず、
タイムラインに取得済みのアバター画像が何も表示されない悲しい状態に陥ってしまいます。

Dockerの場合、Docker cpコマンドを使用することでDockerコンテナからホストOSにコピーが出来ます。
例として、

docker cp mastodon_db_1:/var/lib/postgresql/data /mastodon_data/postgresql

という形です。
mastodon_dataディレクトリにpostgresqlデータが入っていることが確認できると思います。

その他、構築時に使用した.env.productionファイルも無くした場合は再構築が簡単ではなくなるため、バックアップしておいてください。
無くしてしまった場合は、稼働しているMastodon-webサーバから
docker exec -it mastodon_web_1 env
から取得することは一応可能です。

SSL対応

Mastodonサーバでは、SSLの対応はほぼ必須です。

一応httpでも動作しますが、httpとhttpsは共存できないため、httpsのサーバからリモートフォローすることが出来ない、などの弊害があるようです。

今ではLet’s encryptなどを使用してSSL対応は簡単にできるので、個人でも敷居はかなり下がっていると思います。

公式のProduction Guideでは、nginxをリバースプロキシにして、動作することが推奨されています。
公式のProduction Guideをメインに、SSLの設定は自分の過去の記事あたりにその辺は結構書いているので、よければ参考にしてください。

Centos+nginxでLet’s encrypt(certbot)導入と自動更新まで

証明書は期限が切れると使えなくなり、アクセスしてもエラーが出て正常に使えないため、Let’s Encryptを使う場合は自動更新の設定を行うこともおすすめします。

また、公式ではssl_protocols TLSv1.2;になっているため、ちょっと古いブラウザなどで使用できない可能性もあります。
使うべきではないとされているSSLv3を除いて、広く対応を行いたければ、ssl_protocols TLSv1 TLSv1.1 TLSv1.2;に変更することをお勧めします。

Cronjobs

運用するにつれ、他のインスタンスからデータを持ってきて表示するため、放置しているとデータはどんどん溜まっていきます。
それを解消するため、公式で要らないデータ等を削除できるRakeタスクが用意されています。
※特にmastodon:dailyタスクにはPuSHの購読更新処理が含まれるため、外部インスタンスから自分のトゥートが見えなくなる可能性があります。
自分も更新しなくても大丈夫だと思っていたのですが、mastodon:dailyに関しては必ず1日に1回は動かしてください(多くてもOK)。

https://github.com/tootsuite/mastodon/blob/master/lib/tasks/mastodon.rake

#いらないやつもろもろを消してくれるタスク(日一で動作)
0 3 * * * cd /var/www/mastodon && docker-compose run --rm web rake mastodon:daily
#1週間以上前の画像動画キャッシュを削除(週一で動作)
0 3 * * 1 cd /var/www/mastodon && docker-compose run --rm web rake mastodon:media:remove_remote

自分はこのようにしてcrontabで動作させています。

swapの設定

Mastodonに限らないことですがメモリが少なくなっても賄えるようにswapを設定しましょう。
swapがあれば仮想メモリとして退避することができ、遅くはなりますが少ないメモリでもリソースが確保できます。
Mastodonは1ユーザでもそこそこメモリを食います。最低でも1GB、よくて2GBはほしいところです。

特に上に書いているmastodon:dailyタスクは、動作するだけでかなりのメモリを食います。自分もメモリ不足ギリギリ回避な感じでした。

メモリ1GBの場合は3GB、2GBの場合はswapは2GB確保と合計4GBは確保しておけばととりあえず大丈夫と思います。
(Linuxディストリビューションでコマンドが違ったりします。これはcentos7の参考例です。)

//2GB確保、当然ストレージに2GB空きが無いと作れません
if=/dev/zero of=/swapfile bs=1M count=2048
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

まとめ

Mastodonを個人で運用するメリットとして、
・データを勝手に改ざんされたり削除される心配はない
・逆に自分の好きなようにデータを弄れる
・おひとり様サーバならサーバ負担に悩まされることもない(htmlのレスポンスは100ms以下!)
・SNSを運用してるって、なんかカッコいいじゃん。自分だけの空間にするもよし、鯖管で皆を導くのもよし。

という点があり、自分もかなり満足して使っています。

私は個人的にMastodonで個人鯖を立てる人を応援しております。もっとたくさん増えて、個人鯖連合を作ろう。

Xiaomi Redmi note 3 proとMi band 2を買った話

potproject.net Advent Calendar 201611日目の記事です。

やべえあと1時間しかない何書こう


Xiaomi Redmi note 3 proを買いました。結構前に。

で、1.5カ月ほど使ってみてのレビューです。中華製品は最初にレビューしても、実際のところ1カ月で壊れたりするので、買ってすぐにレビューせず1カ月間寝かせてみました。

これが買ったとき当時のものです。よく言われるのですが箱が某アレに似ています。というかまんまです。

合わせて買ったものとして、横にあるのはXiaomi Mi band 2というヘルスロギングツール。まあ簡単に言うと時計兼万歩計兼ヘルスケア用品です。

gearbestさんでredmi note 3 proは140ドルくらい。Xiaomi Mi band 2は30ドルです。

Redmi note 3 proのスペックのコストパフォーマンスだけを見るとすごく高いです。

基本的なスペックはROM 16GB,RAM 2GB,SoCはSnapdragon 650、フロントとリアカメラ、あとは指紋認証。
Snapdragon 650はantutu 70000程度のレベルで、日本で3,4万で売ってるP9 Liteあたりよりも性能はいいです。
実際のところ、日本で売られている機種は太刀打ちできないレベルのスペックという魅力があります。スペック至上主義の私としては最高です。
まあ、耐久性とかはどうなるかわかりませんが、そこは国内7位にまで落ちてしまったけどXiaomiさんのブランドということで買いました。

Xiaomi好きなんですよね。コンセプトとかブランド感を醸し出しているのに、中華っぽいところとか。
この前出した炊飯器とかもちょっとほしいくらいです。おどり炊きの創案者が開発にかかってるとかで注目してます。
でも炊飯器なので日本のコンセントで大丈夫かな・・・と思わなくもないですが・・・

結局中国サイトから発送に関してはいろいろ言われていますが、自分に限ってはかなり早い段階で着きました。というより予定通りでした。

gearbestは現在、発送方法としておなじみの「日本郵便(Japan Post)」が選べるようになっています。 (Priority Line選択時

日本郵便の場合、発送は7-10日。しかも送料無料です。1週間で届きます。いい時代ですね・・・。

で、使いごごちですが、AndroidベースのMIUIという某PhoneっぽいカスタムUIが採用されています。実際、これも使ってみたかったということも買った理由です。
かなりよくできてると思います。でもAndroidっぽくないなあと思うのですが。
あとは、指紋認証。この値段帯で指紋認証までついてるというのは本当に驚き。iPhone 6Sを持ってますが、それと同じくらいレスポンスは早いしロック解除できるので使いやすいです。
2カ月が立とうとしてますが、基本アプリの検証機として買ったものなので、壊れる気配はないです。
まあ今まで中華的なパッドを使った経験からすると、大体は突然死なのでわかんないですのよね・・・。

Mi band 2はわりとスマートな時計としても使えます。でも一番役に立ってるかなーと思うのは公式アプリで測ってくれる睡眠時間のロギング。

これはかなりの精度で寝た時間を記録してくれます。一日7時間よく寝る自分にとっては嬉しい機能です。

つーか二度寝とかもちゃんと記録されるし、布団に入っているだけだと記録されないし、どうやって判定しているのかかなり気になります。
ほかにも通知機能だったりとfitbit某製品と同じレベルの機能は備わっています。
今ならセールでこちらは25ドルくらいで売ってるのを見かけます。こういうの欲しいと思ってた人は損はないでしょう。
Xiaomiのアカウント作らないといけないのがちょっとアレですが、それくらい。

最近はモニタも買ったし、グラボも買ったし、スマホも買ったし、社会人の財力で生活レベルがどんどん上がっていきます。

次はMacBookかな。

Amazon サイバーマンデーセールでそれなりに大きめのモニタを買った

potproject.net Advent Calendar 2016
7日目の記事です。
今回はもうただのブログレビューですが多少はね。


昨日から、Amazon サイバーマンデーセールが始まりました。

最近の大型Amazonセールはプライム超優遇なので、プライム2年生の私毎回楽しみなのです。

しかし、数か月前のプライムデーは割とがっかりだったので、今回はFire TV Stickでも買うかーって感じでした。
実際はStick値引きが微妙なので買わずじまいですが。
買う気はなかったのですが、すごくいい感じのモニタがあったので即買い。

購入したものは、iiyama ディスプレイ モニター XB2783HSU-B1 27インチです。

プライム限定セールで¥19,800。価格.comの最安で¥25,800なのでかなりお買い得だと思います。

iiyamaモニタの大きめのIPS液晶で2万くらいのがほしいなーとまさにぴったりだったので買いました。

モニタを買うのは多分もう5,6年ぶりです。ちなみに前のモニタもiiyamaを使ってました。23インチIPS。

子のモニタは結構特殊なんじゃないかと思うのですが、AMVA+液晶というものです。

視野角の狭かったVAパネルを改良したAMVA+パネルの改良版、という話で、

実際前のIPSパネルと比較してもむしろ前のより視野角が広く思えます。

発色は目にわかるレベルでこちらが上です。

買ったときの値段は古い奴が高いというのに。技術の進歩を感じますね。

あとは、IPSと比べるとバックライトも抑えることができるらしく、目に優しいとかよく聞きます。

自分もかなりブルーライトに弱く、すぐ頭痛くなる時代もあったため、その点で評価して決め手に。

ついでに応答速度もちょっと早いのでゲーム向き。

img_0139

左が今回買ったiiyama XB2783HSU 27インチ。右がサブ機に落ちたiiyama XB2374HDS 23インチ

こうやって並べるとデカい。なんかすげえプロっぽい(何の)

img_0140

ついでに、モニタの右側にUSBハブ機能がついてるのがすごくうれしい。

こういうのでいいんだよこういうので。

次はダブルモニタで捗った的な記事も書きたいです。

react-nativeをとりあえずすぐ実機で動かしてみる

← 1日目 centos7+nginx+php-fpm+php7な新しい感じの環境を構築

potproject.net Advent Calendar 20162日目の記事です。


とりあえずreact-nativeをすぐ使いたい記事。

環境は一つ前のMacBook Proです。

https://facebook.github.io/react-native/docs/getting-started.html

とりあえずはここに沿っているだけなのでこの記事見るよりこっちのほうがいいかも。
で、ハマったところを紹介していきます。
こういうの、あまり使ったことないと時間かかったりすると思うので。

brew install node
brew install watchman
npm install -g react-native-cli

Androidビルド

export ANDROID_HOME=~/Library/Android/sdk
export PATH=${PATH}:${ANDROID_HOME}/tools
export PATH=${PATH}:${ANDROID_HOME}/platform-tools

Android SDKなんかがうまいこと設定されていればこれで準備OK。

丁寧にパスを通す方法も載ってます。やさしいですfacebook。

ちなみにANDROID_HOMEは通してなかった場合も結構あると思うので、ちゃんと通しましょう。

通さないとビルドに失敗します。ここもハマりポイント。

react-native init testreactnative
cd ./testreactnative
react-native run-android

testreactnativeというフォルダが作成され、テンプレ状態のものが作られるので、そのままビルド。
で、駄目。

A problem occurred configuring project ':app'.
> failed to find Build Tools revision 23.0.1
BUILD FAILED

どうやら、現状はbuild tool 23.0.1でしか動かないっぽい。
つーか普通に書いてあったがな。単なる見落とし。
つか普通にbuild.gradleを変更すればできる気がしますが、素直に23.0.1を入れて再挑戦。

Execution failed for task ':app:installDebug'.
> com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: Failed to establish session

今度はなんだろう。インストールに失敗した模様。ちゃんとUSBデバッグもやっているのだが・・・

と思ったらこれはOS特有問題で、MIUIのデフォルト設定の場合こうなるとのこと。

ちょうどMIUI8のredmi note 3 proを使っていました。

com.android.ddmlib.InstallException: Failed to establish session react-native

Developer OptionのTurn on MIUI optimizationをオフ。これは外部からのインストールを防ぐ機能なのですが、今回はそれが邪魔した模様。

testreactnative

他に、-bash: adb: command not foundとか出てたのでPATHが設定できてなかったという問題もありました。
後はAndroidもiOSも初回は起動しても表示に多少時間がかかる模様。早とちりだと見落とします。
まあいいや、次はiOSだ!

iOSビルド

react-native run-ios
reactnative-ios

iOSはXcodeの新しいものが入っている環境なら、問題なくエミュレータが立ち上がりました。

しかし、実機の場合はXcodeから実行しないと駄目なようです。

testreactnative/ios/testreactnative.xcodeprojをXcodeで開き、プロビジョニング設定後そのままRunすればOK。

特に詳しい設定もいらなそうです。ちょっと試すならこっちが楽ですね。

また時間があったら試してみます。ネタを続けるために次回に続く。


3日目→

2週間くらいSwiftを触ってみた話

swift

何故か現在SwiftでiOS開発のためよく使っているので、それに関しての雑記。

ちなみに、Swiftを2週間くらいと書いてますが、2週間前はMacすら使ったことなかったです!
なのでつまり、iOSアプリ開発自体初めてです。Objective-Cももちろんわからないです。今もわかりません。

Swiftは、Appleさんが作った新しい言語です。iOS開発のための言語と言っていいでしょう。

公式には、

Swiftは、iOS、Mac、Apple TV、Apple Watch向けのアプリケーションを開発するためにAppleが作ったプログラミング言語です。 この直感的でパワフルな言語は、今までコードを書いたことがない人でも簡単に使うことができます。 Swift – Apple(日本)

とあります。本当でしょうか。

書き方としては、kotlinとすごく似てます。元々kotlinは少しだけやったことがあったので、なんとかすんなり抵抗なく使えてます。
変数に!や?を付けるのは最初はナニコレと思うかもしれませんが、kotlinと似た感じなのですんなりいけました。
とりあえず、?はnilの可能性がある、!はnilの可能性はほぼ無しってことらしいですよ。大体Xcodeがすごく指摘してくれるのでなんとかなります。
なので、Android開発はkotlin、iOS開発はswiftとすることでかなり捗るんじゃないですかね。どっちがどっちかわからなくなりそうですが。
Objective-Cと比べれば、かなり今風な新しい言語だとは思う。でもやはりアップルの悪い癖が少しあるような言語だとも思う。

その他、使ってみてなんか思ったこと。
・変更しない変数(定数)は全部letにしないとXcodeさんから怒られる
変更しないであろう変数は全部定数宣言。
let hoge="huga"みたいな。まあ、確かにそっちがわかりやすいですな。

・ログ出力がswift1.xはprintln、swift2.0からprintに
この辺、1.xと2.xで仕様とか変わっているようです。新しく始める自分にはなんのことやら。
ググっても古いソースだと混ざっていて、最初はちょっとだけ焦ります。

・swift3.0からCっぽいfor文が廃止
for var i = 0; i < 10; i++ {}
・++や–といったCライクなインクリメントデクリメントも廃止
var i = 0
i++

これが廃止されます。なんというか、swiftは完全にCからの脱却を狙っているのかなあと思います。
やはり新しい言語は新しくわかりやすい書き方でっていうことなんでしょうか・・・
でも、多分完全に素人じゃないなら元々の書き方がわかりやすいなあ。

これらはこういう風に書き直されます。
for i in 0..<10 {}

var i = 0
i= i+1

あと、新しい言語らしく関数型っぽい書き方もできるとか。

【Swift】SwiftでC-styleのforループがなくなる話

【Swift】Swiftの++, –がなくなる話

ここで書いてるところはかなり初歩ですが、Xcodeの保管機能が優秀なおかげで割とガリガリ書けてます。
まあ、やっぱり問題点としては、当然ですけどWindowsでは使えない。
この記事もWindowsで書いているため、あまり詳しいことが書けないというジレンマ。

しかし、これで晴れてAndroid/iOSどっちもいけるエンジニアにレベルアップしました。
まだまだSwiftは新しく情報も少ないですが、iOS開発では変数名なんかはほぼ共通なので、Objective-Cのコードを見ながらSwiftで書いていけば何とか書けます。
いい言語だとは思うので、iOS開発なら積極的に使っていきたいです。

スティックPC"DG-STK2S"をWindows鯖として使う

巷で話題になったけどもうブームは過ぎたような気がしますが、スティックPCを買いました。

今回買ったのは、ドスパラで値下げセールやっていたDiginnos Stick DG-STK2S

税込 13800円で、最新ATOMなCPUであるx5-Z8300搭載、
最新WindowsであるWindows10、USBも3.0、無線LANも11ac対応、Bluetooth4.0と最近のデバイスをちゃんと揃えているところが気に入りました。

メモリ2GBなのがやっぱりおしいけれど・・・Windows10の無料枠から外れちゃうからこれ以上にはできないらしい。

買ったときは、基本的にほぼまっさらなWindows10です。しかし、唯一バンドルとしてマカフィーさんがついてきます。
マカフィーさんが常駐してるとメモリが大体80%くらいですごく重たいです。
アンチウイルスソフトを削除というのもと思うけれど、これに関しては削除を推奨します。これがあるだけでPCの動作は厳しいです。
マカフィー以外の軽いアンチウイルスソフトを入れてください。

大体マカフィーを葬ればメモリ50%前後でそれなりに快適となります。

まずはレビューですが、値段なりに非力ではありますが、なんとかブラウジングなんかに使うくらいなら問題ないと思える感じです。
特に、ブラウザ経由のYoutubeの1080pが普通に見れるのはいいです。Atomも進化しました。
動画関連はこんな感じ
・ローカルでの動画視聴
VLC:1080pでも問題なく快適 動画支援さんのおかげ
・ブラウザ(Chrome)での動画視聴
Youtube:1080pでも普通に見れる
ニコニコ:ちょっとカクつくけどまあ見れる
・ブラウザ(Chrome)でのストリーミング動画視聴
AbemaTV:ちょっと厳しいカクつき

こんな感じです。
ハードな使い方をしなければ大体はいけます。

惜しいところとして、やはりいろいろと荒っぽいところが目立つ。
・無線LANは11acを積んでいてちゃんと接続は出来たが、
ルータの横においてもアンテナが4本しか立たず、実測は100Mbpsくらいが限界でした。この辺は個体差が激しいかも。
・温度はHWMoniterだとうまく測れず、60-70℃くらいと思われる。ファンは無音とまではいかないが静かで、CPUもちゃんと動いているようだ(レビュー見ると結構不良品に当たることも多いらしい)。
・しかしみんな思ってると思うけどやっぱりメモリ2GBはきつい。ブラウザタブは3個程度に納めないと厳しい。

あと注意点としては、ACアダプターが3Aということです。MicroUSBでの給電ですが、スマートフォン用だと大体は2Aなので、そういったものを使うと当然不安定になり最悪ぶっ壊れます。

そして、このDG-STK2S君は現在、視聴/録画鯖として自宅で運用されています。
こんな非力なPCでいけるのかと思うかもしれませんが、
現状は視聴のTVTest、配信用のSpinel、録画用のEpgDataCap_Bon、全部問題なく動いてますし、動画がdropしたりなどは全くしてません。

このStickPCを鯖にする利点としては、
・Windowsサーバーにできる
普通にWindows鯖を組むとなるとOSを買わないといけないのですが、そのOS台でこの端末が買えてしまいます。
現在のWindows10 Homeの値段は最安でも14000円程度。こっちが安い!コストは正義ですね。
最近のWindowsはファイルサーバやリモート機として使えるし、ゲーム鯖とかWindowsだけだったりするし、機能は十分なはず。
まあ、負担が少ないものに限られるのですが。
・USB3.0と11acが使える
現在、11acで無線ルータに接続してますが、普通にかなり安定しています。
安定しないようでしたら、USB3.0用LANアダプタを買って運用もできますし、USB3.0に外付けHDDを繋げてファイル共有サーバにしてもいいですね。
・消費電力がめっちゃ低い
スティックPCの消費電力は大体10W程度。この機種は最大15Wです。
1カ月100円もかからないので非常に低消費。

しかし、これ単体でもかなりいろいろと遊べるガジェットだと思うので、まだまだいろいろ弄っていきたいです。

ffmpegでエンコードしたVP9(WebM)動画をブラウザで再生してみる

今回は完全に趣味の記事です。あまり役に立ちません。

今月の2/15に、ffmpeg3.0が公開されました。ffmpegはかなり有名で歴史もある動画音楽画像のエンコーダ/デコーダフリーソフトウェアです。
基本的にコマンドラインですが、覚えればほとんどの動画や音楽に変換可能です。(ライセンス絡みで変換できないものもあるけど)
自分もmp3に音楽を変換するときや、H264動画にする時などに重宝していました。

そこで、新顔の動画コーデックであるVP9(音声はopus)に変換して、対応するブラウザでただ再生しようという記事です。
VP9はVPシリーズの最新版の動画コーデックです。VPシリーズはOn2 TechnologyがGoogleに買収され、Google傘下で開発されています。
そして、Googleに買収される前から好きなコーデックでした。今やH.264のシェアが一番で、次世代規格として4K/8K放送に採用されそうなH.265/HEVCがやっぱり強いですが・・・
VP9はGoogleに買収されたおかげでオープンソースになりました。なのでその利点もあり、期待はされています。
オープンソースなので、最近のブラウザにもデコーダが組み込まれています(IE除く)。なので再生も可能なはず。
現時点では再生できるだけで配信に使用しているサイトも無いので・・・自分で作ろう。

用意する画像は、元々取っていた自分のゲームのプレイ動画を使用しました。
しかし、1時間あるので、そこそこ動きがある序盤の10秒を使いました。
いやだって・・・これを無圧縮AVIにしたら10秒で1.7GBになってしまいましたもの。
10秒でこれなんだから1時間とか無理です。エンコード時間もかかりますし。

ffmepgの設定はこんな感じです。VP9 Encoding Guideを参考にしました。

ffmpeg -i "InputFile.avi" -c:v libvpx-vp9 -b:v 1000K -threads 4 -speed (0~4) -tile-columns 0 -frame-parallel 0 -auto-alt-ref 1 -lag-in-frames 25 -g 9999 -aq-mode 0 -c:a libopus -b:a 64k -f webm "OutputFile.webm"
元動画:
動画:フルHD 1920×1080 H.264(Shadowplay) 14Mbps 01:12:20 7.28GB
音声:AAC-LC 192kbps
作成動画
動画:フルHD 1920×1080 VP9(Webm) 1Mbps設定 00:00:10 1.25MB予定
音声:opus 64kbps

エンコーダ:ffmpeg version N-78598-g98a0053(Win-x64) Lavc57.24.103 libvpx-vp9 libopus

今回は設定の
・speed0(画質優先、速度なんて関係なし)
・speed1(普通、速度はそこそこ)
・speed4(速度優先)
の3つでエンコード速度を図ります。
使用するPCのCPUとメモリは、
CPU intel-i5 2500K 4.0GHz(OverClock) Memory 8GBです。
可もなく不可もなくなPCです。

結果
speed4(速度優先) 1分30秒(x9) 動画1245KB/音楽71KB
speed1(通常) 3分20秒(x20) 動画1249KB/音楽71KB
speed0(画質優先) 20分(X120) 動画1255KB/音楽71KB

speed0・・・1つのフレームに2秒くらいかけてた。画質優先とはいえ遅すぎる。
speed1はそこそこ早くていいですね。常用はこのレベル。

ちゃんとビットレートを守ってくれてます。予測できないやつもありますから。

で、再生はGoogle Chromeで行います。html上で再生したいのであればvideoタグを書けばいいですが、ChromeはD&Dで再生できます。楽ですね。
結果はこんな感じです。どうでしょう。1Mbpsにしてはかなりいいんじゃないでしょうかね。
というか、ソースが微妙過ぎて、比較しずらいかもしれません。
元動画(H264 14Mbps)
moto
WebM動画(VP9 1Mbps)
webm

こんな感じで、完全に趣味に寄った記事でした。
これからも、VP9は個人的に応援したいところです。