Mastodonクライアントのまとめ(iOS版)

標準

Mastodonが日本で流行り始めてから早いもので3ヶ月が経とうとしています。この3ヶ月弱でスマートフォン向けのクライアントが多いに増えました。特にiOS版の最初はAmaroqの一つだけでしたね。しかし、今は十数のクライアントがAppStoreに登録されています。ので、それに伴って「どれが便利なんだろう」「わざわざインストールして試すのが面倒」といった声が散見されるようになったので、それぞれのアプリの長所や短所、特徴などを簡単にまとめていきます。クライアント乗り換えの際の一助となれば幸いです。ちなみに、私の中では内蔵ブラウザで表示させているだけのアプリはクライアントとは認めていませんのでご承知おきください。紹介順序は使いやすさの順序ではないですよ。あと、私のiOSは英語に設定してあるので、スクショでは英語でも実際は日本語で使えるものもあります。つまり、スクショは参考までに

最終更新:2017/07/04

評価基準

  • LTL … ローカルタイムラインを見れるか
  • FTL … 連合タイムラインを見れるか
  • 通知 … 通知がちゃんとリアルタイムで通知されるか
  • 安定動作 … いきなりクラッシュしたりしないか、良くわからないエラーを吐かないか
  • デザイン … 見やすさ
  • 複数アカウント … 複数のアカウントでログインできるか
  • iPad … iPad版がAppStoreで配信されているか

Amaroq

ダウンロード
Mastodonクライアントとしては老舗っていう感じなくらい、初期から存在するアプリです。安定動作はしますが、機能の豊富さとしては少し劣る点を感じます。是もなく非もなくと言った感じですが、ローカルタイムラインが見れないっていうのは個人的には大きいですねローカルタイムライン見れました。しかしながら、はじめの一歩としてのアプリならとても使い勝手が良いと思います。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad
×


Tootdon

ダウンロード
個人的に一番気に入っているアプリです。デザイン、動作が共に良くて通知もリアルタイムで届いてくれるので便利です。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad


Mustor

ダウンロード
長らくお世話になったアプリです。機能やデザインに特に不満はありませんが、通知が時々届かなかったり、いきなりアプリが終了してしまったり、内部的なバグがまだまだあるのかなと思う感じです。リリース当初から見守っているので、今後の展望も楽しみです。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad


Pawoo

ダウンロード
Pixivが運営しているアプリです。大企業が運営、開発しているため、安定性、使いやすさはピカイチだと思います。pawoo.net以外のインスタンスで利用すると、不便はしない程度の機能制限がかかるらしいです。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad
△?


GON

ダウンロード
触った感じ他のアプリに比べて軽いような気がしますが、安定性に欠ける点があります。リロードする度にフォントサイズが変わったり。ただ、最低限までUIを絞っているわりには他のアプリと同程度の機能を有しているので、その点では捨てられません。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad


Friends.nico

ダウンロード
ニコニコ動画を運営しているドワンゴが開発しているクライアントです。Pawooに比べると若干マイナーな感じはしますが、それでも使用感はPawooに劣らない感じです。さすが大企業の力…けど若干カクつく感じはします。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad
△? ×


Tootle

ダウンロード
最近リリースされた遅生まれのクライアントです。タイムラインにフィルターをかけられたりなどの独自の機能が見られますが、安定性ではまだ欠ける点がありそうです。今後の展望に期待。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad


Mameleon

ダウンロード
遅生まれのアプリです。しかしながらサッパリとしたUIを基調としており、とても使いやすくなるように考えられています。しかし、時々謎のエラーを吐いたりと不安定な部分も見られます。開発者さんには今後も頑張っていただきたい。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad
△? ×


11t

ダウンロード
こちらも遅生まれのアプリです。他のアプリに比べると機能が少なかったりなど不便な点が多く見受けられます。あとちょっと動作もレスポンスが無かったりと改良すべき点も多いです。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad
× × × × ×


Mastodonをメンテナンス状態に切り替える方法

標準

Mastodonのインスタンスをメンテナンス状態に切り替えずに停止していたりすると、404(Not Found)だとか502(Bad Gateway)だとかが周りのインスタンスに返してしまうことになり、結果としてPuSH購読を切られてしまう事になります。そうすると一時的にでも(PuSHの更新が7日周期なので最長7日)連合タイムラインが寂しいことになったりと、インスタンス利用者にも迷惑をかけてしまう事になりかねません。

というわけで今後の為にもしっかりと503(Service Unavailable)を返すように設定しながら、メンテナンスが安心して出来るようにNGINXを設定しましょう。

NGINXの設定ファイル

NGINXの設定ファイル(*.conf)は基本的に /etc/nginx/conf.d に全部入っています。この中に拡張子.confのファイルを入れていくことで色々と設定できます。ココらへんの詳しい仕様は適当にググってみるとよく分かると思います。

私のインスタンスでは、公式ドキュメントにもある設定例を基本的に引用してNGINXの設定をしました。今回は、この公式ドキュメント通りの設定でNGINXを動かしていることを前提に説明していきます。

以下のようにMastodonの設定ファイルを書き換えます。

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 80;
  listen [::]:80;
  server_name haruhi-mstdn.club; #ドメイン名
  # Useful for Let's Encrypt
  location /.well-known/acme-challenge/ { allow all; }
  location / { return 301 https://$host$request_uri; }
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name haruhi-mstdn.club; #ドメイン名

  ssl_protocols TLSv1.2;
  ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;

  #必要なファイルが存在するパスを指定
  ssl_certificate     /etc/letsencrypt/live/haruhi-mstdn.club/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/haruhi-mstdn.club/privkey.pem;
  ssl_dhparam         /etc/ssl/certs/dhparam.pem;

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 0;

  #パスを指定
  root /root/mastodon/public;

  gzip on;
  gzip_disable "msie6";
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

  add_header Strict-Transport-Security "max-age=31536000";

  location / {
    try_files $uri @proxy;
  }

  location ~ ^/(assets|system/media_attachments/files|system/accounts/avatars) {
    add_header Cache-Control "public, max-age=31536000, immutable";
  }

  location @proxy {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";
    proxy_pass_header Server;

    proxy_pass http://127.0.0.1:3000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_intercept_errors on;

    tcp_nodelay on;
  }

  location /api/v1/streaming {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";

    proxy_pass http://localhost:4000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  error_page 500 501 502 504 /50x.html; #500,501,502,504はそのまま
  error_page 503 @maintenance; #503は新たに定義する
  location @maintenance {
    root /var/www/error_pages; #表示させたいhtmlファイルが存在するパスを指定
    rewrite ^(.*)$ /custom_503.html break; #表示させたいhtmlファイルにリダイレクト
    internal; #表面上はリダイレクトしたように見せない
  }

  #ここからメンテナンス状態するかどうかの判定
  set $maintenance false;

  #/var/tmp/503というファイルが存在すればメンテナンスモードに切り替え
  if (-e /var/tmp/503) {
    set $maintenance true;
  }

  #自分はいつも通りにアクセスできるように
  if ($remote_addr = "***.***.***.***") {
  set $maintenance false;
  }

  #メンテナンスモードになっているなら503を返す
  if ($maintenance = true) {
    return 503;
  }
  #ここまで判定
}

一部カスタムが必要な部分がありますが、基本的にはこの通りに書けばちゃんと動くと思います。書き換えた後には nginx -t を実行し、反映させる時は systemctl restart nginx をお忘れなきよう。

表示させるHTMLファイル

デフォルトの503ページでも機能を果たしていれば別に問題は無いのですが、やはりアクセスしてくれた利用者には「いつまで続くのか」「何をしているのか」を明示したいものです。というわけで、専用の503ページを作っていきます。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <title>メンテナンス中</title>
    <meta charset="UTF-8" />
    <style>
      article#main {
      width:80%;
      margin:0 auto;
    }
    </style>
  </head>
  <body>
    <article id="main">
      <h1>メンテナンス中</h1>
      <h2>503 - Service Unavailable</h2>
      現在、Mastodonのアップデートに伴う臨時メンテナンスを行っております。ご不便をおかけしますが、ご理解とご協力の程をよろしくお願いいたします。
      <ul>
        <li>期間:XX時XX分~XX時XX分(予定)</li>
        <li>内容:Mastodon 1.x.x -> 1.x.xへのアップデート</li>
      </ul>
    </article>
  </body>
</html>

これを先程のNGINXで設定したディレクトリに入れます。ファイル自身やディレクトリに対してchmodを使ってパーミッションを変更することを絶対に忘れないで下さいね。そうしないと、せっかくファイルを作っても外部からアクセスすることが出来ません。

メンテナンスモードに切り替え

いよいよ実際にメンテナンスモードに切り替えていきます。今回の設定では /var/tmp/503 が存在するか否かで判定をしていますので、touch /var/tmp/503 を実行するだけで切り替えられます。超便利!逆にメンテナンスモードを解除する時は rm -f /var/tmp/503 を実行するだけです。


tor(外部IP)で確認してみると、しっかりと専用503ページが表示されていることが分かります。しかもURLもそのまま。

この切替さえ忘れなければPuSH購読を切られること無く安心してメンテナンスを行うことが出来るので、是非活用してみてください。

何か不具合などが有りましたらお気軽にコメント下さい。よろしくお願いします。

モンテカルロ法を用いた円周率の近似値算出

標準

今日は先日暇つぶしでやってみた、モンテカルロ法を用いた円周率の近似値を求めるプログラムについて書いていきます。

モンテカルロ法とは

モンテカルロ法とは何かしらの数値計算を乱数を用いて近似値を得る手法の総称です。「モンテカルロ」という名前はカジノで有名な都市の名前からとられたそうです。このモンテカルロ法は円周率を求める以外にも「巡回セールスマン問題」などの数値計算も可能にする、使いによってはとても優れた計算手法です。ではまずはこれを使ってどう円周率の近似値を得るか考えていきます。

どうやって円周率を求めるか

まずは半径r=1、中心角θ=90°の扇形を描きます。この時の扇形の面積Sは、それをちょうど覆う正方形の面積 1×1=1 に対してS=pi/4になります。

上記の図の正方形の左下の頂点を座標平面の原点と定めて、点(x,y) (但し、0≦x≦1, 0≦y≦1をいずれも満たす)を乱数を用いて定めます。そうすると、試行回数Nに対して定めた点が扇形に含まれる回数Xの割合は、正方形に対する扇形の面積の割合に近似して、これを用いるとpiは以下のように近似させることが出来ます。

ちなみに、定めた点が扇形に含まれているかどうかは原点からの距離dが1以下であるか否かで判別することが出来ます。

実際に求める

今回は自分が一番得意なPHPを使って円周率の近似値を得ようと思います。

<?
//変数初期化
$count=0;
$start=1;
$max=100000000;
for($i=$start;$i<=$max;$i++) {
    //点を定める
    $x=(double)(mt_rand(0,1000000000)/1000000000);
    $y=(double)(mt_rand(0,1000000000)/1000000000);

    //距離を三平方の定理を用いて算出
    $d=$x*$x + $y*$y;

    //扇形に含まれる場合
    if($d <= 1.00000000) {
        $count++;
    }

    //結果出力
    print(sprintf("( %.9f , %.9f ) d = %.9f ( %d / %d ) pi = %.9f\n",$x,$y,$d,$count,$i,4.0*($count/$i)));
}
//最終結果出力
$pi=4.0*($count/$max);
print(sprintf("%.9f",$pi));
?>

PHPでは乱数(正確には「疑似乱数」)を生成する関数として、rand()mt_rand()random_int()などありますが、今回はより高速に、より良い(偏らない)乱数を生成出来るという特性をもつメルセンヌ・ツイスターを利用したmt_randを用いてみました。

早速これで1億回試行してみると以下のような値を取得することが出来ました。

pi = 3.141529200

(たまたま)小数点以下4桁まで正確に算出することが出来ました。この算出結果は、1億回の試行でも大きく外れてしまうこともありますし、精度良く求めることもあるという揺らめきの中での算出とはなりますが、いかにして精度良く算出できるか、極める価値がありそうですよね。

今回はこれで以上です。

Mastodonのカスタム方法

標準

Mastodonのインスタンスを構築する方法は検索すれば山ほどヒットするので、その分資料が少ないインスタンスのカスタム方法について今日は説明します。インスタンスの構築する方法についての記事はや「Mastodon(マストドン)のインスタンスをCentOS7で立ててみる」、「CentOS7でmastodonを建てる」辺りを見れば完璧ではないかなと思います。

追記:以下のサイトもとても参考になります。

ちなみに私が運営するmastodonのインスタンスは haruhi-mstdn.club ですので、よろしくお願いします。

表示される言葉のカスタム

config/locales に入っている大量の言語ファイルをカスタムしていくことで新たな言語(語録集)や表示される文言を簡単に変えることが出来ます。

---
ja:
  about:
    about_mastodon: Mastodon は&lt;em&gt;自由でオープンソース&lt;/em&gt;なソーシャルネットワークです。商用プラットフォームの代替となる&lt;em&gt;分散型&lt;/em&gt;を採用し、あなたのやりとりが一つの会社によって独占されるのを防ぎます。信頼できるインスタンスを選択してください &amp;mdash; どのインスタンスを選んでも、誰とでもやりとりすることができます。 だれでも自分の Mastodon インスタンスを作ることができ、シームレスに&lt;em&gt;ソーシャルネットワーク&lt;/em&gt;に参加できます。
    about_this: ご利用前にお読みください
    apps: アプリ
    business_email: 'メールアドレス:'
    closed_registrations: 現在このインスタンスでの新規登録は受け付けていません。
    contact: 連絡先
    description_headline: "%{domain} とは?"
    domain_count_after: 個のインスタンス
    domain_count_before: 接続中
    features:
      api: アプリやその他サービスにAPIを公開
      blocks: 豊富なブロックやミュート機能
      characters: 1つの投稿は500文字まで利用可能
      chronology: 時系列順のタイムライン
      ethics: 広告もトラッキングもありません
      gifv: GIFVや短い動画にも対応
      privacy: 投稿ごとに公開範囲を細かく設定可能
      public: 公開タイムライン
    features_headline: Mastodon の特徴
    get_started: 参加する
    links: リンク
    other_instances: 他のインスタンス
    source_code: ソースコード
    status_count_after: トゥート
    status_count_before: トゥート数
    terms: プライバシーポリシー
    user_count_after: 人
    user_count_before: ユーザー数
(以下略)

画像のカスタム

うちのインスタンスはアニメ愛好家向けだからゾウさんなんか表示しないで自分の推しキャラを出したい!という方におすすめです。Mastodonで使われる画像は app/assets/images app/javascript/images に格納されています。ここに代わりの画像を置いてあげることで任意の画像を背景やトップページのゾウさんの代わりに表示させることが出来ます。最終的には以下のような感じになれば正解です。

CSSとJavaScriptのカスタム

これも同じように app/assets/stylesheets app/javascript/stylesapp/assets/javascripts app/javascript/mastodon に格納されている.scssファイルと.jsファイルをを編集することで変更することが出来ます。私の場合、背景が左揃いになっているのが気に食わなかったので、中央揃い(background-position:50% 50%;)にするなどのカスタムをしました。

最後に反映させよう

画像、CSS、JavaScriptファイルは動的なサイトにするため(?)に圧縮されています。この圧縮過程を飛ばしてしまうと反映はいつまで経ってもされないので忘れないようにします。
まずは実際にMastodonで使えるようにメディアファイル集assetsを作成します。コマンドラインに以下のように打ち込みます。

//assetsフォルダを全消去したい場合。全てをやり直したい人向け。
# docker-compose run --rm web rails assets:clobber

//assetsフォルダにある昔のものを消去したい場合。普段はこっちで十分かな。
# docker-compose run --rm web rails assets:clean

//上の2つのコマンドのうちどちらかを実行したら、メディアファイル群を事前コンパイルする。
# docker-compose run --rm web rails assets:precompile

//mastodon全体を再ビルド
# docker-compose build

//mastodonを再起動
# docker-compose restart

追記(2017/07/06):Mastodonをスタートアップスクリプトで立ち上げた場合はdockerを使わないのでこちらのご指摘の通りやってみてください。

これで色々とカスタムの幅が広がったので、自分だけのインスタンスを発展させていってください。それでは。

追記(2017/04/28):当ブログの記事を見て、「出来なかった!」「困った!」といった問題があればコメントをお願いします。

追記(2017/06/18):Mastodon 1.4.1からディレクトリ構造に色々と変更が加わった、という旨のご報告をいただきましたので最新の情報に更新しました。ご報告ありがとうございました。

Mastodonをはじめよう

標準

1週間ほど前から日本国内でアツくなり始めたMastodon(マストドン)。このページでは始め方や仕組み、各プラットフォーム(iOS, Android, Windows, Linux, MacOS…)でのクライアントなどを紹介、説明していきます。

Mastodonとは?

Mastodonは他のSNSでは見られない「分散型」という仕組みを採用しています。個人でも企業でも誰でも簡単にそれぞれの拠点となる「インスタンス」を立ち上げることが出来て、それぞれのインスタンスがそれぞれのサービスとして機能します。それぞれが独立して機能していますので、それぞれのインスタンスが各管理者の意向で動きます。意向というのは例えば運営方針や、メンテナンスのタイミング、話題などです。

と言っても、各インスタンスが独立しているからと言ってそれぞれのインスタンス同士でコミュニケーションがとれないというわけではありません。多くのインスタンスは数百ものインスタンスと「連合」を組んでおり、その連合を組んでいるインスタンス同士であれば普段からフォローをしていなくても「トゥート」をお互いに見ることも可能ですし、連合を組んでいないインスタンス同士でも、「リモートフォロー」をすることで新たにそのインスタンス同士で連合を組むことが出来ます。

このようにオープンソースであることを最大限まで活用して運営されているMastodon。これからも目が離せない新サービスになりそうです。

インスタンスを選ぶ

次は自分が登録するインスタンスを選びましょう。単純にSNSとしてのMastodonを楽しみたいのであれば日本人の多いインスタンスの方がきっと楽しいでしょうし、専門の分野について話したいのであればそれに適したインスタンスを選ぶと良いでしょう。そんな感じにインスタンスを決めるためにインスタンス一覧がいくつか用意されています。ぜひ活用してください。

日本だけでも結構ジャンル別のインスタンスに別れてるんですね。私は「mstdn.jp」と「x0r.be」と「pawoo.net」の3つのインスタンスに登録しています。なお、現段階ではアカウント削除については対応していないので、くれぐれも注意してください。また、無名の海外のインスタンスに登録したりすると凄くアウェー感あふれることになるかもしれない点も注意が必要です。

クライアントを使おう

いざMastodonを頻繁に使おうとしても、いちいちブラウザからインスタンスにアクセスしているようでは通信容量も多くなりますし、なにより面倒です。そこで使うのが専用クライアント。これを使うことでより一層便利にMastodonを使うことが出来ますので、ぜひ利用してみては。

対応 クライアント名 備考
Android Tusky Androidでは見た感じ最もポピュラーなクライアント。
11t
TootyFruity リリース前なので不安定。
iOS Amaroq 現在はこれしかiOSはありません。
Windows Capella 開発途上なので私の環境では結構不安定でした。
Mastodon UWP app UWP版です。他に比べるとまだほとんど機能はありません。
Windows/Linux/Mac Web-based Desktop Client デスクトップで単独アプリとして楽しめます。結構安定しています。

ブラウザ拡張でより賢く

この章はChromeユーザー対象の文になってしまいますが、ご容赦ください。Chromeには拡張機能が用意されていて、それを使うことでMastodonをより便利に、賢く使うことが出来ます。

とりあえずTooterです。この拡張機能は普段Twitterを使っている方は簡単にTwitterとMastodonの両方に同じ内容を投稿することが出来ます。いちいち画面を切り替えて投稿していて、煩わしい思いをしている方には嬉しい機能です。公式ページ(twitter.comの一部)でのツイート、tweetdeckの両方で使うことが出来ます。



最後に

Mastodonの成長は1週間でmstdn.jpのユーザー数が7万人を超えるほど、めまぐるしい成長を遂げました。これからも暫くはその成長は衰えることは無いでしょう。初期の方はあまりの急成長さで新規会員の登録を中止したり、サーバーを急遽補強したり色々と大変でした。今では7万人を越すユーザー数を獲得している過去にも、途中で全ユーザーのデータが吹っ飛んで0からのスタートを2回していますが、これだけユーザー数が集まるってのは相当ですよね。それだけの魅力があるのだから、これから先もサービスも含めて更に成長していくことを心から願っています。

WordPressを軽量化する

標準

はじめに

ウェブページのロード時間が訪問者のその後の行動に大きく影響を与えることは広く知られていますし、日々のネットサーフィンを思い返してみてもそれは自明です。こちらのマーケティングなどの解析をテーマにしているブログでは

  • 47%の利用者が2秒以内のロード時間を望んでいる
  • 40%の利用者が3秒以上のロード時間では閲覧を諦める

と記述されている程です。

当サイトの実情

P3 (Plugin Performance Profiler)というロードに必要な時間などを計測する専用のプラグインで計測してみたところ、以下のような結果が出ました。


計測結果によるとロード完了までに3.42秒かかっています。これでは遅すぎます。せめて2秒台に収めたいですね。ということで対策を講じていきます。

具体的な対策

今回はWP Super Cacheというプラグインを利用していきます。画像の方の対策はあまりロード時間には一般的には影響を及ぼさなさそうなのでしません。

基本的には設定画面にあるものを推奨に持っていくだけで大丈夫です。これだけでも凄く効果があります。

効果はいかほど?

これらの設定を施した後に再びロード時間を計測してみます。

効果は絶大ですね!なんとロード時間は1.50秒まで短縮されました。これでロード時間の長さによる直帰率は大分下げられたはず・・・閲覧数が増えると良いな。

最後に

慣れていれば5分位で軽量化出来るので世の中はとても便利ですね。ロード時間の長さで悩んでいるサイト管理者の方はぜひ試してみてください。

Nevermindを購入しました

標準

少し前の話になりますが、Nevermindという精神恐怖系のホラゲーを購入しました。購入動機は友人の家に遊びに行ったりする時に何かゲームが欲しいので目についた短編物がNevermindだったという訳です。Steamから1980円で購入することが出来ます。(2017年2月12日現在)

Nevermind
Nevermind
Developer: Flying Mollusk
Price: 19,99 €

コンセプト

このゲームのコンセプトは、精神科医が患者の脳内に潜入して患者の持つ過去のトラウマを探し当て、治療するというものです。トラウマに見ていて心地よいものなんて存在する訳無いですから、当然プレーしているうちに精神が蝕まれていきます…。他のホラーゲームに比べては驚かす系のイベントは少ない方ですが、少ない分違う面でプレーヤーを恐怖に陥れてくれます。

ゲームの流れ

ゲームはまず患者の脳内に入るところから始めます。タイムマシンのようなカプセルに入れられて間もなくすると、患者の脳内に入ることが出来ます。トラウマは患者自身も思い出したくはないものなので、基本的に記憶の奥底にあるため、そこまで潜入していく必要があります。ところどころ問題を解かねば進めないチェックポイントや、少し頭を使わないと進めないところなどもあり、一筋縄ではいかないのが面白いです。また、道端にところどころ挿絵のようなものが落ちていて、それを最終的に10枚集めるのがゲーム進行部分の目標です。その後、その集めた10枚の中から本当にトラウマに関与する5枚を選び実際のストーリー通りに並び替えるまでがゲームの流れです。また、全編で日本語の字幕が付いているので、英語が分からない!という方でも安心してプレーすることが出来ます。

バイオフィードバック

このゲームではバイオフィードバックという独自のシステムを導入しています。どういうものなのかというと、プレーヤー自身の心拍数・顔の表情の変化をゲームが監視することで、常にゲーム内の恐怖度が変化するというのです。プレーヤーが恐怖や焦りなどを感じれば感じるほどゲームは恐怖の強い方向へ進んでいきます。いかに精神科医として冷静に進められるか試されるわけです。このバイオフィードバックを利用するためには、対応している心拍センサー(Apple Watchなど)や対応した3Dウェブカメラなどが必要で敷居は高いですが、もし揃っているならとてもゲームを面白くしてくれるでしょう。もしこれらの機器が無かったとしても、ゲーム内の恐怖レベルは常に最高になってくれるらしいので安心です。←

総括

精神恐怖系のタグがつけられるのがよく分かるくらいにプレーしていて精神が削られます。しかしながら、プレーしても損することはないし、一人でプレーするのに勇気が必要なほどでも無いのである意味気軽にプレーできるのでおすすめです。割引の時は結構安くなるので、この機会に是非。(最安値396円)

AMDのCrossFire構成の方法(更新版)

標準

まずはじめに

大分前に投稿しましたCrossFire構成の記事の直後、OSが吹き飛んだり色々と不安定になり解体していたのですが、今日復活させてみたところ普通に安定してCrossFireの構成が出来たのでここにその記録を残しておきます。

大まかな手順は前回と変わりありませんが、今回はブリッジケーブルを接続して構成したところ驚くほどに安定するようになりました。前回とは大違いです。

3Dmarkでベンチマーク

次に3Dmarkの記録です。
3DmarkのAdvanced Editionを購入したのでより細かい測定が可能になりましたが、ここでは概要だけを紹介していきます。

▼▼▼ Radeon R7 260X x1の時 ▼▼▼

FireStrike:3800点

TimeSpy:1441点

▼▼▼ Radeon R7 260X x2の時 ▼▼▼

FireStrike:4871点(1.3倍)

TimeSpy:2268点(1.6倍)

重ければ重いほどその効果が一層出てくるようで最大1.6倍のスコア向上を記録しました。まぁ、1回しか測定していないのでなんとも言えませんが、少なくともCrossFireは成功しているようで一安心です。

では昔の不安定さは何だったのか

前回CrossFireを構成した時も今回もブリッジケーブルの有無やビデオカードの順番を入れ替えたり色々とやった結果最適なものを見つけたつもりだったのですが、今回はなぜか問題を起こすことも無く正常に動いてくれました。ドライバの更新なのか何なのか…

ともあれビデオカードを一つ冬眠させたまま過ごすという生活も終わりましたし、正しい方法も見出だせたので良かったです。近々ゲームのレビューの連投大会を行いますのでお楽しみに!

Twitter上のツイートを利用した日本語学習(第二弾)

標準

前回1000万ツイート程を収集した上での日本語学習を実施しましたが、今回は更に倍にして2000万ツイートにしてみましたので、それを詳しくまとめていきます。

準備段階

今回は自作のPHPプログラムを使いまして、2062万4138ツイートを収集しました。前回は1161万2661ツイートでしたので、約2倍です。
これで日本語学習の精度は上がるのだろうか、精度は別問題にしてもどれくらい学習が変わるのか、これを今回は調べていきます。
準備段階は前回までの記事に全て纏まっていますので、そちらを参考にしていただくとして先に進んでいきます。また、このページの最後に実際に使った学習ファイルをダウンロード出来るようにしましたので、ご活用ください。(結構重いです)

ベクトル演算の結果

今回も例のごとく単語のベクトル演算をしてもらいました。参考とするために、前回と同じ演算です。早速見ていきましょう。

yoshipc@ubuntu:~/twitter/word2vec$ ./word-analogy tweets-train.bin
Enter three words (EXIT to break): 現在 地球 未来

Word: 現在  Position in vocabulary: 674

Word: 地球  Position in vocabulary: 3337

Word: 未来  Position in vocabulary: 1570

                                              Word              Distance
------------------------------------------------------------------------
                                            世界		0.603715
                                            人類		0.578384
                                            宇宙		0.550593
                                            現実		0.538544
                                            運命		0.516235
                                   明るい未来		0.514421
                                               空		0.510775
                                         この世		0.501839
                                            僕ら		0.501282
                                      希望の光		0.499918
                                         この街		0.493066
                                               夢		0.492678
                                            人間		0.489397
                                               道		0.489035
                                            太陽		0.487439
                                         きっと		0.486102
                                            永劫		0.480969
                                         セカイ		0.477885
                                         未来へ		0.475911
                                            生命		0.470979
                                            大地		0.469094
                                         生き方		0.466944
                                            叡智		0.463096
                                            きみ		0.462352
                                         侵略者		0.461892
                                            人生		0.459877
                                      君の笑顔		0.453077
                                            虚像		0.451170
                                               心		0.450787
                                            こと		0.447146
                                   大切なもの		0.447091
                                            道標		0.446497
                                         この国		0.446489
                                            遠く		0.445713
                                         大海原		0.445700
                                         地平線		0.445120
                                   ひとりでに		0.444735
                                            キミ		0.444560
                                         未来を		0.444312
                                      彼方から		0.444180


Enter three words (EXIT to break): 恐竜 噴火 人類

Word: 恐竜  Position in vocabulary: 14523

Word: 噴火  Position in vocabulary: 25009

Word: 人類  Position in vocabulary: 4424

                                              Word              Distance
------------------------------------------------------------------------
                                      日本国民		0.504782
                                      国際社会		0.498614
                                   放射能漏れ		0.486438
                                            瓦解		0.485425
                                            収束		0.477185
                                            国民		0.472936
                                      電源喪失		0.471543
                                            人民		0.465190
                                      政権交代		0.464547
                                         未曾有		0.464171
                                      日本民族		0.462117
                                            国家		0.450937
                                            滅亡		0.450119
                                            事象		0.449914
                                メルトダウン		0.447464
                                      われわれ		0.444761
                                            地球		0.444433
                                               瀕		0.441625
                                      日本政府		0.440596
                                            過ち		0.440204
                                   大東亜戦争		0.439783
                                            履行		0.437771
                                      原発事故		0.435660
                                            停戦		0.432246
                                            是認		0.431025
                                      敵国条項		0.430867
                                            直面		0.428798
                                            行使		0.427611
                                         中国軍		0.426728
                                            失政		0.426705
                                      武力行使		0.426567
                                         我が国		0.424916
                                      安倍政権		0.424625
                                      巨大地震		0.423229
                                            暴落		0.422987
                                            存在		0.422820
                                      金融危機		0.421636
                                            戦後		0.420972
                                            事態		0.419899
                                            戦没		0.419073

Enter three words (EXIT to break): 過去 戦争 未来

Word: 過去  Position in vocabulary: 1033

Word: 戦争  Position in vocabulary: 2559

Word: 未来  Position in vocabulary: 1570

                                              Word              Distance
------------------------------------------------------------------------
                                            平和		0.522789
                                            侵略		0.517995
                                            国家		0.517953
                                      民主主義		0.513909
                                            争い		0.508577
                                            独裁		0.508006
                                            恐慌		0.491936
                                            戦い		0.487261
                                            破滅		0.485378
                                      侵略戦争		0.484970
                                            革命		0.484187
                                            秩序		0.481204
                                            滅ぶ		0.479859
                                      日本侵略		0.476639
                                            圧政		0.475845
                                      世界平和		0.475404
                                      資本主義		0.475313
                             第三次世界大戦		0.475173
                                      社会主義		0.474103
                                            支配		0.473573
                                            中露		0.472770
                                            僕ら		0.472601
                                            我々		0.472268
                                   日本の農業		0.472103
                                         私たち		0.470849
                                      共産主義		0.468439
                                   新自由主義		0.466063
                                   ニヒリズム		0.465786
                                               国		0.465224
                                         核戦争		0.465120
                                            滅亡		0.464730
                                            闘い		0.464701
                                   明るい未来		0.464211
                                      保護主義		0.462045
                                            紛争		0.459765
                                            滅び		0.458792
                                            鎖国		0.456679
                                         為政者		0.455943
                                      全体主義		0.455139
                                            反乱		0.454954


Enter three words (EXIT to break): 現在 核戦争 未来 

Word: 現在  Position in vocabulary: 674

Word: 核戦争  Position in vocabulary: 69314

Word: 未来  Position in vocabulary: 1570

                                              Word              Distance
------------------------------------------------------------------------
                                            戦争		0.569488
                                            現実		0.550737
                                      人類滅亡		0.528336
                                            破滅		0.518106
                                      保護主義		0.512427
                                            滅ぶ		0.503720
                                      全体主義		0.494948
                                            運命		0.493296
                                            滅び		0.492078
                                      世界平和		0.489570
                             第三次世界大戦		0.489473
                                      民主主義		0.488292
                                            平和		0.487700
                                      共産主義		0.483427
                             ナショナリズム		0.482726
                                   明るい未来		0.482302
                                      社会主義		0.481790
                                            独裁		0.479569
                                            人類		0.475583
                                      世界恐慌		0.469627
                                            恐慌		0.469290
                                   ファシズム		0.469131
                                ポピュリズム		0.467034
                                            中露		0.466852
                                            侵略		0.466768
                                         未来を		0.466476
                                      独裁国家		0.466271
                                            災い		0.465553
                                            専制		0.464848
                                            滅亡		0.464760
                                            永劫		0.462897
                                            こと		0.462651
                                            無力		0.461402
                                         権力者		0.459051
                                            災厄		0.459035
                                            虚像		0.457459
                                トランプ政権		0.457113
                                      侵略戦争		0.454696
                                            政権		0.454047
                                            それ		0.453413


Enter three words (EXIT to break): 女性 かわいい 男性

Word: 女性  Position in vocabulary: 492

Word: かわいい  Position in vocabulary: 275

Word: 男性  Position in vocabulary: 841

                                              Word              Distance
------------------------------------------------------------------------
                                         可愛い		0.888274
                                      カワイイ		0.761770
                                   かっこいい		0.757136
                                      かわゆい		0.748681
                                   かわいいよ		0.730760
                                      かわいー		0.703242
                                      可愛い〜		0.691793
                                   カッコイイ		0.671846
                                   かわいかっ		0.653079
                                      可愛かっ		0.652575
                                            すき		0.645260
                                   かわいい〜		0.639327
                                      可愛いい		0.631806
                                      可愛いー		0.631314
                                         萌える		0.616470
                                         似合う		0.616324
                                      格好いい		0.607348
                                      かわいく		0.593961
                                   可愛らしい		0.580756
                                   かわいい~		0.576812
                                         可愛く		0.575392
                                      あざとい		0.572130
                                      めんこい		0.571543
                                   かわいいー		0.571391
                                かわいらしい		0.566938
                                         ずるい		0.565993
                                   かわいいっ		0.565969
                                      かわいっ		0.565026
                                   愛くるしい		0.558229
                                      かわいぃ		0.557168
                                   ちっちゃい		0.549026
                                      可愛いっ		0.547052
                                         かわい		0.545649
                                      色っぽい		0.545449
                                   おもしろい		0.543379
                                            可愛		0.543249
                                      かわゆし		0.543152
                                      かわい〜		0.538648
                                      可愛いぃ		0.537529
                                      可愛い~		0.536874

ちょっと良くわからないので、前回の結果と比較してみます。

着色は両方の演算結果に登場した単語です。一見すると1000万ツイート分の結果を濃縮したのが2000万ツイート分の結果という感じな気がします。これを何か数字で傾向を算出出来れば良いのですが、このような分野には疎いものでよくわかりません。何か良い手段が有りましたら、コメントなどでお知らせください。

また、「恐竜 噴火 人類」の演算結果ではなぜか原発系の用語が殆どなくなりました。他にも色々な変化が見られました。やっぱり日本語モデルを2倍にするだけでも変化はあるんですね。次は関連語出力です。

関連語出力

早速見ていきます。

yoshipc@ubuntu:~/twitter/word2vec$ ./distance tweets-train.bin
Enter word or sentence (EXIT to break): トランプ

Word: トランプ  Position in vocabulary: 661

                                              Word       Cosine distance
------------------------------------------------------------------------
                                   トランプ氏		0.843974
                                      ヒラリー		0.814557
                                   クリントン		0.773175
                       ドナルド・トランプ		0.709894
                             トランプ大統領		0.706651
                    ヒラリー・クリントン		0.685431
                       トランプ次期大統領		0.674865
                                         民主党		0.671567
                                   次期大統領		0.660402
                    バーニー・サンダース		0.657438
                                      対立候補		0.646014
                                      アメリカ		0.640917
                          ドゥテルテ大統領		0.636720
                          リベラルメディア		0.635047
                                      極右政党		0.634951
                                      ネオコン		0.632521
                                   アメリカ人		0.632108
                                         共和党		0.631699
                                      副大統領		0.631480
                                            選挙		0.628310
                 エスタブリッシュメント		0.627984
                                      リベラル		0.626295
                          ドナルドトランプ		0.625530
                                         選挙後		0.624006
                                   ウォール街		0.622957
                                クリントン氏		0.621994
                                      選挙結果		0.615811
                                   オハイオ州		0.615090
                                            米国		0.614540
                                         大統領		0.613802
                                         アサド		0.610111
                                   大統領選挙		0.608435
                                         オバマ		0.607592
                                         安倍氏		0.604816
                          反グローバリズム		0.604310
                                   ネタニヤフ		0.602129
                                ポピュリスト		0.601324
                                         選挙戦		0.601310
                                   ドゥテルテ		0.600674
                                         ルペン		0.599487

Enter word or sentence (EXIT to break): ハルヒ

Word: ハルヒ  Position in vocabulary: 23003

                                              Word       Cosine distance
------------------------------------------------------------------------
                                      ストパン		0.645798
                                      けいおん		0.638650
                                      とらドラ		0.636988
                                花咲くいろは		0.632872
                                   らき☆すた		0.628135
                                      シュタゲ		0.627787
                                      ギルクラ		0.617519
                                          TARITARI		0.612508
                                グレンラガン		0.612221
                                      まどマギ		0.610592
                                シンフォギア		0.608070
                                      らきすた		0.606560
                             のんのんびより		0.602893
                                      バカテス		0.602474
                                         SHIROBAKO		0.601572
                                         ギアス		0.596853
                                         化物語		0.596690
                                   けいおん!		0.589731
                             ハヤテのごとく		0.586546
                             リリカルなのは		0.584632
              ウィッチクラフトワークス		0.584533
                                         結界師		0.584402
                                      かんなぎ		0.579284
                                   キルラキル		0.578478
                                      リトバス		0.577740
                          ブラックラグーン		0.577532
                                      ひぐらし		0.572559
                                      バクマン		0.568581
                          エルフェンリート		0.567559
                                      クラナド		0.566878
                          涼宮ハルヒの憂鬱		0.566182
                          アクセルワールド		0.565847
                                      きんモザ		0.565820
                                カブトボーグ		0.563231
                          アルスラーン戦記		0.561105
                                      プリリズ		0.559184
                 ストライクウィッチーズ		0.558513
                     対魔導学園35試験小隊		0.558363
                                      これゾン		0.558080
                                生徒会の一存		0.557798

Enter word or sentence (EXIT to break): Twitter

Word: Twitter  Position in vocabulary: 583

                                              Word       Cosine distance
------------------------------------------------------------------------
                                   ツイッター		0.869226
                                           twitter		0.845602
                                タイムライン		0.690816
                                   ついったー		0.646548
                                          Facebook		0.642719
                                      インスタ		0.632823
                                               SNS		0.613419
                             フェイスブック		0.602303
                             Twitter		0.578967
                             インスタグラム		0.563292
                                          facebook		0.560759
                                              LINE		0.552092
                                   ツィッター		0.539288
                                         Instagram		0.533319
                                      ツイート		0.524300
                                         SNS		0.520925
                                                TL		0.514066
                                         ニコ動		0.505256
                                      ツイッタ		0.496323
                                カカオトーク		0.491717
                                         ネット		0.490409
                                      ネット上		0.486285
                                             Slack		0.485163
                                               sns		0.479989
                                   アカウント		0.478253
                                         カイブ		0.477760
                                プッシュ通知		0.473205
                                         スパム		0.464073
                                            TL		0.459924
                                            GitHub		0.458841
                                            reddit		0.458549
                                            通知		0.456949
                                ツイッター上		0.456893
                                            携帯		0.456676
                                         プロフ		0.454460
                                      スカイプ		0.454132
                                      ブラウザ		0.454094
                                   コメント欄		0.453342
                                            safari		0.452758
                                            Flickr		0.450859

こちらも、結果を見ただけではよく分かりませんので、別にまとめてみます。

サンプル数が2つしか無いのではっきりとしたことは言えませんが、終わった話題(=安定した話題)は1000万と2000万では入れ替わりがそう激しくありませんが、常に変動し続ける話題(=不安定な話題)は変化が大きいです。この不安定な話題の代表が「アニメ」であって、比較を見てからも分かるように安定した話題と比較すれば大きく結果が異なっているのが分かります。

考察

Twitterという常に変動する言葉の辞書を活用することで今回一番良くわかったのは「何の話題がHOTなのか」です。例えば、関連語出力でも顕著に出ましたが、大統領選挙は現在さほど話題にはなっていませんが、アニメは1年中放送しているものなので常に話題が変動していきます。このような変化を大きく影響を受けることがよく分かりました。これからは更に日本語を収集する手段を考えながら精度の高い日本語のモデルを作っていけたらと思います。続編をお楽しみに!(ちなみに1000万ツイート収集するのに低スペックのパソコンでは16日かかりました。2000万で1ヶ月ちょいです。)

日本語モデル(?)の頒布

“tweets-train.zip” をダウンロード tweets-train.zip – 207 回のダウンロード – 462 MB


こちらが2000万ツイート分の日本語モデルです。著作権等は放棄しますが、自作発言、二次配布、商用利用はお控えください。また、予期せぬタイミングで削除に至る可能性も有りますので、その点もご承知おきください。ご利用時になにかコメントいただけると励みになります。よろしくお願いします。

追記(2017/08/11):今日の出来事に触発されたので、もう一回、ツイート長期収集を再開します。

HTML5.1勧告での変更点の紹介

標準

先月始めの11月1日、W3C(World Wide Web Consortium;ワールド・ワイド・ウェブ・コンソーシアム)からHTML5.1を勧告する文書が公開されました。今回はHTML5.1に搭載された新機能がとても便利なものが多かったと個人的に思ったので、まとめていきます。また、利用できるブラウザについてはCan I use…?で調べて、一般的なPC用のブラウザについての情報についてのみ紹介しています。(※編集当時の情報です。)

picture要素

img要素にpictureやsource属性が追加されました。これを使うことで、低解像度環境で画像を表示させたい時、例えばトリミングなどして見やすくした画像を表示させることが出来ます。実際にChromeで試してみました。

しっかりと分岐されているのが分かります。以下のようにHTMLを記述すると実装できます。

<picture>
   <source media="screen and (max-width: 980px)" srcset="small.png">
   <img src="large.png" alt="#">
</picture>

source要素のmedia属性で指定しているmax-widthはメディアクエリで解像度の指定ができるので便利です。メディアクエリと同様、source要素は複数追加することが出来ます。この機能はIE以外の全てのブラウザで利用できます。

sizes属性とsrcset属性

sizes属性とsrcset属性はimg要素に対して追加されたもので、組み合わせて使うことで閲覧環境によってブラウザが判断した上で、最適な画像を読み込んでくれるように切り替えることが出来ます。

<img src="large.png"
     sizes="50vw"
     srcset="small.png 320w, smaller.png 640w">

sizes属性ではビューポート(≒ブラウザの横幅)の何%で画像を表示させたいかを指定します。単位のvwは「Viewport Width」の略です。また、srcset属性では「画像のパス 表示させたい解像度(単位:w)」をコンマ繋ぎで記述します。利用例1では採寸基準がブラウザ幅の50%になるので、620pxの時に320wの画像、1280pxの時に640wの画像を表示するように出来ます。また、sizes属性にはメディアクエリを使うことが出来、以下のように更に細かい分岐が可能になります。

<img src="large.png"
     sizes="(max-width: 640px) 100vw, 50vw"
     srcset="smaller.png 320w, small.png 640w">

利用例2ではsizes属性にメディアクエリを加えました。これをすることで、640px以下の環境では採寸基準はブラウザ幅の100%、それ以上では50%になり、これによってスマホ版とデスクトップ版とでカラム数を異なるものにしたいという望みをより簡単に、より最適に実現させることが出来るようになりました。しかしながら、この属性はIEには対応していません。そんな時はpicturefillというライブラリを使うことで解決することが出来ます。

また、srcset属性には相対的な比率を「*.png 1x, *.png 2x」という感じで記述する方法がありますが、この記述を採用した場合はsizes属性を使用することは出来ません。今回は詳しい説明を省きます。

details要素とsummary要素

details要素とsummary要素が追加されたことで、難解な用語を簡単にHTMLだけを使って表示させることが出来るようになりました。

<details>
   <summary>詳細見出し</summary>
   <p>簡単にHTMLだけを使って詳しい説明ができます。</p>
</details>

記述法は至って簡単で、上記の通りです。この記述だけで以下のサンプルのように簡単に説明するための展開タブが実装できます。※IE、Edgeは利用できません。


 

詳細見出し

簡単にHTMLだけを使って詳しい説明ができます。

 


sortable属性

table要素にsortable属性を追加することが出来るようになりました。これによって、テーブルの中でもその列のものがソート出来るのか出来ないのかをブラウザー側に示すことが出来ますが、現段階ではどのブラウザでもソートするまでの機能を実装しているものはありません。しかし、将来的にはソート出来るブラウザが登場するものと見られ、これからの発展が期待されます。ここでは、実際のソースを掲載します。

<table sortable="sortable">
   <thead>
     <tr>
       <th sorted="1">名前</th>
       <th sorted="2">数学Ⅲ</th>
       <th>物理</th>
     </tr>
   </thead>
   <tbody>
     <tr>
       <td>Aくん</td>
       <td>73</td>
       <td>83</td>
     </tr>
     <tr>
       <td>Bくん</td>
       <td>52</td>
       <td>43</td>
     </tr>
   </tbody>
</table>

menu要素とmenuitem要素

これらを使うことで、JavaScriptなどを一切利用せずにHTMLのみでコンテクストメニュー(右クリックメニュー)を展開させることが出来ます。この要素は現在はFirefoxしか対応していませんが、順次Chromeなどのブラウザでも利用できるようになる予定です。また、対応していないブラウザが殆どの為、現在実装するとそのまま出てきてしまいますので、CSSなどで隠すようにしてください。

<p contextmenu="context-menu">
   ここを右クリック<!--// 反応する領域を定義 //-->
</p>

<menu type="context" id="context-menu">
   <menuitem type="checkbox" checked="true">チェック1</menuitem>
   <menuitem type="checkbox">チェック2</menuitem>
   <menuitem type="checkbox" disabled>無効化</menuitem>
   <menuitem type="command" onclick="alert('押されました。')">コマンド</menuitem>
   <menuitem type="radio" name="radio" checked="true">ラジオ1</menuitem>
   <menuitem type="radio" name="radio">ラジオ2</menuitem>
</menu>

サンプルを実装すると以下のようになります。Firefoxで見てみてください。


ここを右クリック


最後に/補足

ここまでHTML5.1での追加要素を説明してきましたが、一部に過ぎません。この他にもAPI関連やイベント関連などたくさんあります。また、追加ではなく変更されたものや、廃止されたものもあります。これからHTML5.2や5.3がリリースされるのではないかというのが世間一般の予測ですが、これから更にHTMLが便利になっていくことを考えるととても楽しみです。