クイックノート

ちょっとした発見・アイデアから知識の発掘を

VTuberの切り抜き動画に投稿の早さは重要か

バーチャルYouTuber(VTuber)の間では、
長時間の生配信がメジャーとなっており、
時間のない人向けにファンの方が、
配信の一部を切り抜いた動画を投稿していることが多くあります。

切り抜き動画を投稿されている方の中には、
生配信終了後、驚くような早さで投稿されている方もいるようですが、
この投稿の早さは重要なのだろうかというのが、
今回のテーマです。

同じコンテンツを切り抜くので、
他のファンの人と同じような箇所を切り抜くこともあり得ると考えると、
直感的にはコンテンツが被った場合は投稿の早い方が有利でしょうか。
また、情報の鮮度という意味でも投稿の早い方が有利な気もします。

ということで、
投稿の早さと動画の再生回数に関係はあるのか、
調べてみましょう。

方法

YouTube Data APIを利用して、
YouTube上に投稿された動画の情報を取得します。

取得する情報

  • 切り抜き動画の再生回数
  • 切り抜き動画の投稿時刻
  • 元動画の投稿時刻

用いる数値

APIから取得した情報を元に
以下の値を計算します。

  • 投稿までの時間 = (切り抜き動画の投稿時刻)-(元動画の投稿時刻)
  • 時間あたりの再生回数 = (切り抜き動画の再生回数) / (情報の取得時刻-切り抜き動画の投稿時刻)

元動画が投稿されてから切り抜き動画が投稿されるまでに経過した時間と、
再生回数の関係を調べます。

再生回数はAPIから動画投稿後の時間経過によって増えていくので、
経過時間で割ることで時間あたりの再生回数に注目することにします。

結果

散布図

まずは「投稿までの時間」と「時間あたりの再生回数」を
散布図でプロットして全体を眺めてみます。

f:id:u874072e:20210125145043p:plain
投稿までの時間と時間あたりの再生回数

なんとなく投稿までの時間が長くなるに連れて再生回数が下がるような傾向がありそうに見えます。
一方で、投稿までの時間はかなり偏っていて、
0〜20時間までの投稿は多いですが、
60時間以上経ってからの投稿はかなり少ないようです。

投稿までの時間の分布

投稿までの時間の偏りが分かりやすいように
ヒストグラムを見てみましょう。

f:id:u874072e:20210125150057p:plain
投稿までの時間の分布(黒線:累積分布)

半数は20時間以内に投稿されていて、
ほとんどの動画は48時間以内には投稿されていることが分かります。

数日かけてじっくりというより、
その日のうちか翌日には切り抜き動画を投稿するという場合が多いようです。

投稿までの時間と再生回数

それでは本題の投稿までの時間と再生回数の関係を見ていきましょう。

下のグラフは、投稿までの時間を一時間毎に区切って、
再生回数の平均値を示したものです。

f:id:u874072e:20210125162544p:plain
投稿までの時間と時間あたりの再生回数(青:時間毎の平均値, 赤:回帰曲線)

大まかな傾向で見ると、
10時間経過までは再生数が増加し、
それ以降は時間経過と共に再生数が減るようです。

予想では、時間経過が不利に働くので、
時間経過と共に再生回数は減っていきそうに思いましたが、
最初の10時間までは逆の傾向が見えました。
早ければ良いという訳ではなく、
ある程度時間をかけて質の高いものが求められるということでしょうか。

日数の経過と再生回数

今度は、より長い時間のスケールで見てみましょう。
下のグラフは、投稿までの時間(日数)と再生回数を
箱ひげ図で表したものです。

f:id:u874072e:20210125163725p:plain
投稿までの日数と時間あたりの再生回数(赤丸:平均値)+

一日以内に投稿された切り抜き動画は、
二日目、三日目に投稿された切り抜き動画よりも
上位25%, 中央値, 平均値, 下位25%点のいずれも高いことが分かります。

日数をまたぐ場合は、
予想通り時間の経過が単純に不利に働く傾向にありそうです。

まとめ

切り抜き動画の投稿の早さと、
再生されやすさの関係について調べてみました。

結果として、

  • 投稿までの時間と再生回数にはある程度関係がある
  • 日数をまたぐ(24時間を超える)と再生回数は減る傾向にある
  • 早すぎる投稿はむしろ再生回数が減る場合がある

という知見が得られました。

なるべくその日の内の早い投稿が望ましそうですが、
質は犠牲にしないようにすべきでしょう。

Lighsailにssh出来なくなった時の対処方法

Amazon Lightsailは仮想サーバーを月額3.5ドルから利用でき、ちょっと自分のサーバーを持ちたい時にとても便利です。私もいくつかのサイトをLightsail上で構築していたのですが、ある時突然サーバーに接続できなくなりました。

 

VPSの要とも言えるsshも使えず苦戦したのですが、なんとか復旧に至ったので、その時取った対処方法をまとめておきたいと思います。

 

 

症状

 

Lightsailインスタンスに対して、http(https)及びsshの接続ができない。(それまでは問題なく接続できていた)

 

  • インスタンス上に構築していたウェブサイトにアクセスすることができない

  • 公開鍵を利用したsshで接続できない(タイムアウトになる)

  • Lightsailのインスタンス管理のページからブラウザ経由でsshできない(真っ暗なコンソール画面の表示が続く)

 

対処方法

 

インスタンス管理の画面からインスタンスを「停止」した後に「開始」する。

インスタンスを「再起動」ではダメでした

f:id:u874072e:20201127220028j:plain

 

インスタンスを停止した場合、静的IPアドレスを使っていないと、グローバルIPアドレスが変更されるので、合わせてDNSの設定変更が必要になります。

 

Lightsailでは、静的IPアドレスが料金に含まれているので(今回初めて知りました)、静的IPアドレスを設定していない場合は、ちょうどいい機会だと思って設定してしまいましょう。Lightsailインスタンスの管理画面の「ネットワーキング」タブから設定できます。

 

インスタンスの再起動と停止→開始の違い

 

上にも少し書きましたが、今回インスタンスの「再起動」では問題の解決に至りませんでした。一般的な感覚としては「停止」してから「開始」は「再起動」と同じように思うのですが何が違うのでしょうか。

 

Lightsailのドキュメントによると、

という違いがあるようです。

 

Lightsailのインスタンスは仮想的なサーバーであり、物理的なコンピューター上に配置されています。

 

「再起動」を行った場合は、物理的には同じコンピューター上でインスタンスを起動し直します。このため、例えば、障害の原因が物理マシン上にある場合は、再起動しても解決しない場合があります。

 

一方で「停止→開始」を行った場合は、物理的なコンピューターをお引越しして、別のコンピューター上でインスタンスが起動します。物理的なマシンに障害があった場合は、別のマシンに乗り換えることで問題が解消される場合があるということになります。

 

もちろん、仮想サーバーを触る立場では、障害の原因が物理マシン上のものかどうかは知るすべがないのですが、「停止→開始」の方がより真っ白からの「再起動」になるということは覚えておいたほうが良さそうです。

 

まとめ

 

sshできないとなると、再起動くらいしか取る手段がなかったわけですが、「再起動」と「停止→開始」は同じという固定観念があったために解決が遅れてしまいました。

 

【MacBook Pro】Touch Barで音量調節などが消えた時の対応

MacBook Proにはキーボード上部に、
Touch Barと呼ばれるソフトウェアキーがあります。

予測変換をしたり、アプリケーションに合わせた操作をしたり、
音量や画面の明るさを調節したりと何かと便利なので多用しています。

ところが、先日下の画像のように、
Touch Barの右側が真っ暗になる現象に遭遇しました。

f:id:u874072e:20200924092217p:plain
Touch Barの右側が消えた

本来なら、ここに音量調節などが表示されているのですが、
消えて黒くなっています。

しばらくそのまま使っていたのですが、
結構不便ななので直してみました。

以降では、その時に行った対応をまとめておきます。

症状

Touch Barで音量などを調節する右側の領域が表示されず真っ暗になっている。

原因

Control Stripでエラーが生じている。

※Touch Barの右側の音量などを操作する部分はControl Stripと呼ばれるようです。

対応

Control Stripを再起動する。

困った時の再起動で解決でした。
問題が起こってるのはControl Stripの部分だけなので、
Control Stripだけを再起動して対応しました。

手順は以下の通りです。

  1. 「Cmd+Space」で「Spotlight検索」を起動
  2. 「Terminal.app」と入力してEnter
    f:id:u874072e:20200924093410p:plain
    ターミナルを起動
  3. ターミナル上で「killall ControlStrip」と入力してEnter
    f:id:u874072e:20200924093519p:plain
    killall ControlStrip

これでControlStripが終了されて、
自動的に再起動されます。

そして、Touch Barの右側も帰ってきました。

まとめ

Touch Barはあると便利だなくらいに思っていたのですが、
いざなくなってみると結構不便で、
なくなって初めてその大切さに気付きました。

天気が西から東に変わるという話

この前、妻と次のようなやりとりがありました。
妻「最近急に雨降ること多いから、雨雲レーダーアプリ入れた!」
私「じゃあ西側の雨雲見とけば良さそうだね」
妻「なんで西側?」
私「雲は西から東に動くからね」
妻「ふーん」

天気が西から東に向かって変わるというのは常識的な話だと思っていたのですが、
知らない人もいるようですね。

そこで、なぜ天気が西から東に変わるのかを説明してみましょう。

偏西風のせい

最初に答えを言ってしまうと、
偏西風によって雲が西から東に流れるから、
多くの場合、日本の天気は西から東に向かって変わっていきます。

偏西風とは、日本の上空に吹いている西風(西から東に向かう風)です。
学校で学んで記憶に残っている人も多いのではないでしょうか。
一方で、偏西風がなぜ吹いているのかは、
意外と知らない人も多いのではないでしょうか。

なぜ偏西風が吹いているのか

天気が西から東に変わる原因は偏西風ですが、
なぜ西から東に向かって風が吹いているのでしょうか。

その理由は次の二つです。

  1. 南北の温度差による大気の循環
  2. 南北方向の大気の循環が自転の影響によって曲がる

順にみていきましょう。

南北の大気の循環

地球では、赤道付近の気温が高く、
北極・南極付近の気温が低くなります。

空気は温められることで、膨張し上空へ昇っていくため、
赤道付近では上昇気流が発生します。
逆に、北極・南極付近では下降気流が発生します。

この南北の温度差で空気が大きく移動する循環が生まれるのですが、
単純に、赤道で昇って北極・南極で降りるだけにはなりません。

実際には下の図のように、
赤道で昇った空気は北極までたどり着く前に下降し、
北極付近で下降した空気は赤道にたどり着く前に上昇します。

その間に挟まれた領域では、
南側に下降気流、北側に上昇気流が生じていて、
地表付近では南から北に向かって大きな大気の流れが生じます。

f:id:u874072e:20200923222449p:plain
大気循環の略図

この南から北に向かう大気の流れが、
日本上空の雲の流れに影響を与えることになります。

自転による曲がり

上の話だと、風は南風(南から北に向かう風)になり、
一見、偏西風とは関係なさそうに思えます。

ところが、この南風が地球の自転の影響を受けることで、
西風に化けるのです。

コリオリの力

地球のように回転しているものの上で行われる運動には、
コリオリの力と呼ばれる力が働きます。

コリオリの力については、下の動画を見ると雰囲気を掴みやすいと思います。

北半球では、コリオリの力によって、
進行方向に対して右向きに曲がって動くようになります。

南風から西風に

南から北に向かう風が、 コリオリの力を受けると、どのような風になるでしょうか。

コリオリの力は北半球では右向きに働くので、
北を向いた時の右手方向、つまり、東側に力が働くことになります。

南から北に向かう大気の流れは、
コリオリ力によって、西から東に向かう方向に傾けられます。

この傾けられた大気の流れが偏西風の正体です。
そして、この風が雲を西から東へと運び、
日本の天気を西から東に向かって変えているのですね。

まとめ

常識の一つである「天気は西から東に変わる」の理由を、
掘り下げていく形で説明してみました。

これで天気は西から東に変わるが頭から離れなく... なることを祈ります。

CD/DVDブートができない時に対応したこと【HP PC】

「PCを廃棄するために、
CD/DVDブートするタイプのハードディスク消去ツールを使っていたところ、
CD/DVDブートができなくて次に進めない」
という相談を受けた時に対応した内容をまとめておきます。

環境

ざっくりとした環境は下の通り

PC: HPのデスクトップPC
ファームウェア: UEFI
OS: Windows 8

ブートの問題なのでOSは直接は関係ないですが、
このくらいの年代だとファームウェアUEFIであることが多く、
今回のブートの問題にも関わって来ていました。

症状

ハードディスク消去ツールの説明書の手順に沿って、
BIOSを起動し、ブートの「起動順序」を設定しようとするものの、
CD/DVDドライブが見当たらない。

※ブートデバイスとしてUEFIブートにいくつか項目が表示されていて、レガシーブートに何も表示されない

原因

セキュアブートが有効で、
レガシーブートが無効になっている。

HPのサポートページを調べると以下のようなページが見つかりました。

support.hp.com

出荷時の設定でセキュアブートが有効になっていて、
このセキュアブートが有効の状態ではCD/DVDからのブートを含んだ
レガシーブートができないことが原因のようでした。

対処法

基本的にはサポートページに沿って、
1. セキュアブートを無効
1. レガシーブートを有効
1. 起動順序を設定 しました。

セキュアブートの無効化

セキュアブートが有効だと、
レガシーブートを有効にできないようなので、
まずはセキュアブートを無効にします。

  1. PC起動直後「F10」連打でBIOSを起動する
  2. 「セキュリティ 」→「セキュアブート構成」を選択
  3. 「セキュアブート」を無効にする

レガシーブートの有効化

続いてレガシーブートを有効にします。

  1. 上の「セキュアブート構成」画面から「レガシーブート」を有効にする

起動順序を設定

  1. BIOSの画面から「起動順序」を選択
  2. レガシーブートのCD/DVDドライブを一番上に持ってくる
  3. 「F5」キーでUEFIブートを無効にする

今の場合、UEFIブートは邪魔になりそうなので、
無効にしておきました。

あとはBIOS設定を保存して再起動で、
めでたくCD/DVDブートができました。

用語豆知識

UEFI

UEFIとはUnified Extensible Firmware Interfaceの略で、
従来のBIOSに変わる新しいファームウェアの形態です。

UEFIに対して、従来のBIOSを「レガシーBIOS」と呼びます。
従来のBIOSを使ったブートを「レガシーブート」と呼びます。

セキュアブート

名前の通りセキュアにブートするための方式です。
下手なソフトウェアを起動しないようにしてくれるのですが、
CD/DVDブートを含んだレガシーブートも禁止されてしまうので、
今回は無効にする必要がありました。

まとめ

一昔前なら普通にできていた操作ができなくなることは結構あるものですね。 常に情報をアップデートすることの大切さを感じた事例でした。

正方形グリッドレイアウトを作りたい

ホームページを縦横の格子状に分割して、
要素を配置するグリッドレイアウト。

一つ一つの格子の幅と高さは指定する必要があるのですが、
画面のサイズに合わせてレスポンシブにしたいと思う場面は多々あります。

レスポンシブにする最も単純な方法は%で指定することですが、
画面の縦長・横長に応じて格子も縦長・横長になると不便なこともあります。

horidashiWebを作るときに、
正方形のグリッドを作るのにちょっと苦戦したので、
ここでその方法をまとめておきます。

f:id:u874072e:20200828151043p:plain
正方形グリッドレイアウト

画面いっぱいに配置する場合はvwが使える

まずは、horidashiWebのように画面幅いっぱいを使って、
グリッドレイアウトによる配置を行う場合です。

この場合は、ビューポートの幅に対する比率を指定するvwが使えます。

例えば下のように、
grid-template-columnsでグリッドの列の幅をビューポート幅の10%(10vw)
に指定して、10列分作って埋め尽くします。
grid-auto-rowsでグリッドの行の高さを幅と同じく10vwとして、
正方形グリッドの完成です。

<div id="" 
     style="display:grid; 
            grid-auto-rows:10vw; 
            grid-template-columns:repeat(10,10vw)">
<div>A</div><div>B</div><div>C</div><div>D</div><div>E</div><div>F</div><div>G</div><div style="grid-row:span 2; grid-column:span 2; background-color:lightblue">H</div><div>I</div><div>J</div><div>K</div><div>L</div><div style="grid-row:span 3; grid-column:span 3; background-color: tomato">M</div><div>N</div><div>O</div><div>P</div><div>Q</div><div>R</div><div style="grid-row:span 2; grid-column:span 2; background-color:lightyellow">S</div><div>T</div><div>U</div><div>V</div><div>W</div><div>X</div><div>Y</div><div>G</div>
</div>

全て同じ大きさだと味気ないので、
いくつかはgrid-row,grid-columnでサイズを変えています。

結果は下のようになります。
ただし、vwはブラウザの幅を基準にした割合になってしまうので、
はてなブログのようにサイドバーや余白などがあると、
突き抜けてしまいます。
そこで、下を表示するために、10vwの変わりに4vwとして微調整してます。

A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
G

親要素の幅いっぱいに配置する

ブラウザの幅いっぱいに配置する場合はvwでよかったのですが、
上のように、ブログの記事枠に納めようとするとvwは使えません。

それでは、親要素の幅いっぱいに配置するにはどうすれば良いでしょうか。

この場合、cssだけでどうにかする方法はなさそうなので、
javascriptの出番です。

下のコードでは、Nで列の数を指定して、
要素の幅をN分割した長さの正方形で、
グリッドを生成しています。

また、$(window).resizeで、
ウィンドウサイズが変更される度に、
グリッドの間隔を調整するようにしています。

<div id="grid" style="display:grid;">
<div>A</div><div>B</div><div>C</div><div>D</div><div>E</div><div>F</div><div>G</div><div style="grid-row:span 2; grid-column:span 2; background-color:lightblue">H</div><div>I</div><div>J</div><div>K</div><div>L</div><div style="grid-row:span 3; grid-column:span 3; background-color: tomato">M</div><div>N</div><div>O</div><div>P</div><div>Q</div><div>R</div><div style="grid-row:span 2; grid-column:span 2; background-color:lightyellow">S</div><div>T</div><div>U</div><div>V</div><div>W</div><div>X</div><div>Y</div><div>G</div>
</div>

<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha256-4+XzXVhsDmqanXGHaHvgh1gMQKX40OUvDEBTu8JcmNs=" crossorigin="anonymous"></script>
<script>
    function adjust_grid(){
        var N = 10
        var size = $("#grid").width()/N
        $("#grid").css({'grid-auto-rows': size,
        'grid-template-columns': `repeat(${N}, ${size}px)`,
        'display':grid})
    }
    adjust_grid()
    $(window).resize(function(){
        adjust_grid()
    })
</script>

これで、下のように、記事欄の幅をいっぱい使って、
正方形を配置できました。

A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
G

まとめ

レスポンシブに格子の幅と高さの揃えた
正方形のグリッドレイアウトを作る方法を紹介しました。

ブラウザの幅いっぱいを使う場合には、
vwでビューポートの幅を参照すればcssのみでできます。

一方で、記事欄の幅いっぱいに広げるような場合には、
javascriptを使って、要素の幅を取得する必要がありそうです。

アクセスを集めるほど表示が小さくなるWebサービス紹介サイト「horidashiWeb」

Webサービスが身近な存在となり、
日々新しいWebサービスが現れています。

そんな中には、沢山のWebサービスの中に埋もれていくサービスもあり、
サービスをいかに認知してもらうかは開発者の大きな課題となっています。

通常はランキング等を通して、
アクセスを集めたサービスがよりユーザーの目に触れやすくなり、
さらにアクセスを増やすという正のフィードバックがかかります。
一旦アクセスを集めてからの加速は凄まじいですが、
一方で、埋もれるサービスを量産しやすい構造とも言えます。

そこで、あえて逆のアプローチをとり、
アクセスを集めるほどユーザーの目につきにくくなるような
Webサービスの紹介サイト「horidashiWeb」を作ってみました。

クリック数が増えると表示が小さくなる

通常であれば、よくクリックされるWebサービスを上位に表示したりして、
よりユーザーの目を引くように配置されます。

horidashiWebでは、逆にクリック数が増えるほど一覧の中で小さく表示します。

トップページにアクセスすると、
下の図のように登録されたWebサービスの一覧が表示されます。

f:id:u874072e:20200828130839p:plain
トップページ

ここで、真ん中の「切り抜き動画投稿サイト」を何度かクリックすると、
下の図のように、表示が小さくなりました。

f:id:u874072e:20200828131019p:plain
クリックしたサイトが小さくなる

これで、クリック数が少ないサイトほど大きく目立つようになります。

アクセスの平準化を狙う

通常のアクセス数が増えたサービスを目立たせるという、
正のフィードバックによるアプローチでは、
アクセスが集中するものと、そうでないものの格差が開き、
サービスが埋もれる原因となります。

逆に、アクセスを集めたものをユーザーの目に触れにくくする
負のフィードバックをかけることで、
未だアクセス数が少ないサイトにユーザーが流れやすくなります。
アクセス数が少なかったサイトがアクセスされるようになると、
そのサイトの表示も小さくなって、また別のサイトにアクセスが流れる・・・
といったように、様々なサイトにユーザーがアクセスすることが期待されます。

人とは違うことをしたい人へ

現在、大きく成功を納めているのは、正のフィードバックによって、
使われるものをより使われるものにするアプローチですが、
これが絶対に成功のアルゴリズムという訳ではありません。

下の本でも言われていたことですが、
みんなが使うようなサービスを使いたいという人がいる一方で、
人とは違うサービスを使いたい人もいるため、
アルゴリズムの正解は一つではありません。

そんな中で、特定のサービスへの集中を生み出し、
その他沢山のサービスを埋もれさせてしまうのはもったいないように思います。
サービスにも沢山の正解があって、
それを使いたいと思う人がいるはずです。

そして、そんなサービスを埋もれさせないように、
負のフィードバックをかけるというのも一つの正解になれば幸いです。

プライバシーポリシー