TI9観戦/ナウいScala開発環境/口内炎の予感

日曜なので意識的に在宅していた。

TI9観戦

Dota2のTI9がアツい。FnaticがVPに勝つ番狂わせが起きるかと思いきや起きなかった。Dota2の試合時間はだいたい30分から40分くらいだ。ヒーローは大まかにスキルで戦うヒーローと通常攻撃で戦うヒーローに分類される。前者の方が早熟だが、金を稼いでアイテムが揃うにつれて後者の方が強くなる(基本的に時間が経てば金は貯まる)。金を横軸・強さを縦軸に取ると当然右上がりのグラフになるが、グラフの形はヒーローごとに様々だ。たとえば特定のアイテムを持つことで格段に強くなるということがある。プロレベルの試合では味方のヒーローに重要アイテムが入り、かつ敵のヒーローがまだ重要アイテムを手に入れていない絶妙なタイミングで戦いを仕掛けに行くということもある。そこで勝てば金が手に入り、また有利になる。

しかしこうして有利を拡大していっても決めきれなければ大器晩成型のヒーローによって逆転されることもある。たとえばMedusaは通常攻撃が4体攻撃になるスキルを持つ。単純に考えて通常攻撃を強化するアイテムのもたらす恩恵は4倍だ。だから強力なアイテムを揃える前に勝ちきらなければならない。

ナウいScala開発環境

以前vscodeでScala開発を試みたときはまともに使える拡張機能がなく補完が効かなかったのだが、今はMetalsを入れるだけでいい。補完があるとプログラミングは楽だ。ミスに気づくのは早ければ早いほどいい。

今はActivityPubの実装に挑戦している。仕様が固まっているものなのでTDDしている。ActivityPubではObjectはTypeという属性を持つことを定めているが、これは予約語なので`type`と表現する必要がありややこしい。ScalaTestの機能と思っていたmatcherが実はPlayの機能だったりして難しい。フレームワーク周りの知識がない。

素人丸出しのアレだが、package hogeはそのファイルの内容をhogeに所属させるために使うことを知った。つまり他のファイルからhoge.fugaという呼び出しができるようになる。ファイルでもオブジェクトでもクラスでもなく「パッケージに所属させる」という操作の感覚が新しかった。

今日はもうひとつ、droneのデプロイもした。droneはCIの一種でgitリポジトリにpushしたときに.drone.ymlを読んで自動でテストやビルドを行う。1回毎にdockerコンテナを作って捨てることでクリーンな環境でテストできるのがdroneの特徴だが、1回毎にsbtの初期化を行うせいで(貧弱なサーバーでは)1時間以上かかってしまい、タイムアウトしてしまった。

口内炎の予感

口内の傷が嫌な感じに痛み出していて口内炎になりそうで嫌だ。口内炎は食事が楽しめないのが辛い。ただ、火曜に右上の親知らずを抜くのでどうせ1週間くらいはろくな食事ができない。

ネットにイライラ

最近自宅のネットが遅い。具体的には22時にgoogleのスピードテストで1Mbpsを切る。さすがにこれは不便だ。ニコ生は最高3Mbps(視聴側)なのに。

僕が契約しているプロバイダは速度を保証していない。速度が保証されている回線もなくはないのだが、10Mbps保証で月額17万円だ。とても払えない。インターネットのトラフィックはこれから先減る要因が思いつかないのでどんどん増えるだろう。社会インフラなのだから税金突っ込んででも強化してほしいものだ。現状は余裕のある業者と契約するというゲームになってしまっている。

それにネット回線の情報を検索するとステマが多すぎる。不自然なURLやタイトルのブログがお決まりのようにNURO光を勧めてきて怪しい。

似たようなケースに新幹線宿泊パックがある。新幹線とホテルをセットで予約すると結構安くなるという、それ自体は知っておくとオトクなパックなのだが、これも検索するとステマっぽいブログがヒットする。「新幹線宿泊パック」という特定の商品を紹介するためだけにブログを立ち上げるやつがどこにいるんだよ。

amazonはクソ出品者サクラレビューが横行し、医療情報をググればWELQ、料理のレシピをググればクックパッドの素人レシピがヒットする世の中になってしまった。悲しい。

ちなみに僕は医療情報検索を作ってみたQuugleをよく使う。Google検索にはデフォルトで「-いかがでしたか -調べてみました」を付加しているし、uBlacklistでトレンドブログと侍エンジニア塾は非表示にしている。自衛が大事だし、だからこそこの手のフィルターを使えない物理郵便のスパムが許せないのだ。

ニコニコ動画のランキングが新しくなった

※私はドワンゴに雇用されているが、この記事は自由意志に基づいて執筆され、報酬は発生していない。

大きな変更なので告知ページが作られている。

僕はプレミアム会員なので5つのカラムを自由にカスタマイズできる。欲張りなのでどのジャンルも取りこぼさずに、かつ自由に使えるカラムも欲しかった。そのためにはデフォルトカラムを上手く使う必要がある。

カラムをカスタマイズするときはジャンルは3つまでしか設定できない。しかしデフォルト状態では各カラムのジャンル数は左から順に4, 2, 5, 3, 1だ。一見してわかるとおり、一番右のカラムのその他ジャンルを左から2番目のカラムに加えるだけで自由になるカラムが1つできる。僕はここに例のアレタグを入れた。

こうすると左から2番目のカラムは(音楽・サウンド)・ダンス・その他の3ジャンルになるのだが、その他の再生数が多すぎて他の2ジャンルの動画が見えなくなった。そこでその他を左から4番目のカラムのラジオと入れ替えた。完成形はこんな感じだ。

最上段に広告が入る。ランキングの順位に広告ポイントが影響しなくなった代わりに、固定広告欄が設けられた。順位に広告ポイントが影響しないということは、ランキング自体の質は向上していることが期待される。

Kyashを止められて復活した/cilliaとしらスタ

Kyashを止められて復活した

昨夜Kyashで映画のチケットを取ろうとしたら僕のKyashが凍結されていた。調べてみるとよくあることらしい。違反行為に心当たりなどない旨を届け出たところ、今日には凍結が解除された。あっさり止めて、チェックしたらすぐ戻すというのはいかにも今風のスタンスだと思った。

Kyashはスマホアプリであり、支払いサービスだ。クレジットカードやコンビニ支払いなどでKyashにお金をチャージする。各ユーザーにはVISAの番号が付与されていて、チャージした範囲内でデビットカードのように支払いを行える。クレジットカードによる自動チャージを登録しておけばチャージを気にする必要はない。現金じゃないのに「キャッシュ」なのでとても迷惑なネーミングだ。

そんなことをして何のメリットがあるのかと思うだろうが、2%という無視できない量のポイントがつく。どこでどういう仕組みで価値が発生しているのかイマイチわからないが、とにかくKyashの運営者はがっぽり儲けていて、2%ものキャッシュバックを行うことができる。

実はわからなくもない。店から手数料を取っているのだ。店はKyash支払い対応というメリットを買い、それによって集客力を高めている。

cilliaとしらスタ

cilliaというボカロ調教師がいる。ボーカロイドを人間らしく発声させるためには繊細な調整が必要であり、cilliaはそれが超うまい人だ。彼女が米津玄師の『海の幽霊』をカバーした動画がこれだ。

さらに、しらいしりょう(しらスタ)というYouTuberも紹介したい。彼はボーカルトレーナーであり、いろいろなヒット曲の歌い方を分析してわかりやすく説明する動画で支持を伸ばしている。

ボカロに歌わせるのも人に歌を教えるのも、人間が陥りがちなミスを防いで意識的に表現を組み立てていかねばならないという点では同じだ。全然違う方向から知った2人が同じようなことをしているのがなんとなく面白くて紹介した。

既存の作品をコピー・カバーするだけのものでもそこには必ず自分の色が加わるので世界の人々にはどんどんそういう遊びをやってもらってニコニコ動画に投稿してほしい。

 

Dockerコンテナ内で作ったファイルの所有者はrootになる

※この記事は『プライムリッチ』を飲んで書かれた。

『プライムリッチ』はアルコールが6%で重い。しばらく昏倒していて起きて作業している。

室温記録システムのサーバをScala+Play Frameworkで作っている。サーバ環境のもろもろの事情と技術的興味でDockerで環境構築をしたいが知見が少ない。参考にしているのはこれだ。

一点ハマりポイントを発見したので共有する。『プロジェクトの初期化』の節の内容を実行するとホスト側にプロジェクトが生成されるが、これらのファイルは所有者がrootになっているのでchown -Rしないと編集できない。永続的に解決したいのなら参考はこのあたり

てかこれ当該記事のコメント欄に書くべきだな…Qiitaアカウント作るか。Qiitaアカウントを持っていないのは必要になったことがないからだ。自分で発信プラットフォームを持つことには価値があると思っているけど、Qiitaが潰れる可能性と僕がさくらインターネットに972円を払い忘れる確率だとどっちが高いかな。後者だね普通に。

dアニメストアのプレイヤーのコントロールのポップアップが邪魔だ

dアニメストアの問題点

dアニメストアのプレイヤーはこんな感じで、左下の30秒巻き戻り・30秒早送りボタンにカーソルを乗せると下の図のように10秒か30秒を選べるボックスがポップアップする。

このボックスの当たり判定は下図の緑色の領域であり、困ったことに見た目よりかなり大きい。このポップアップが表示されている間は緑色で囲まれた領域のシークバーをクリックすることはできない。また、カーソルが緑色の領域の外に出ない限りこのポップアップは消えない。

この性質は30秒早送りボタン、音量調節ボタン、設定ボタンの全てに共通している。するとどのような問題が起きるか。

シークしたいときにカーソルをシークバーに乗せようとするのだが、シークバーの当たり判定は非常に細い(下図参照)ので間違ってその下にあるボタンにカーソルを乗せてしまう。

動画にすると以下のようなイライラが発生する。

Netflixの場合

Netflixにも同じ問題がある。ただし以下の違いによって体験はそれほど悪くない。

  1. ポップアップの見た目と当たり判定の差が小さい
  2. ポップアップが消えるときにはアニメーションがない
  3. 全体的にUIが大きい

Amazonプライムビデオの場合

AmazonプライムビデオはUIデザインが違うのでこの問題はない。再生エリアの上でマウスを動かすと下図のようにコントロールが画面に重なって表示される。展開を必要とするコントロールは右上にまとめられ、クリックしないと開かない。

操作性は悪くないのだが再生中の動画の上にコントロールが重なって表示されることには賛否があるだろう。僕は嫌いだ。

Youtube・ニコニコ動画の場合

いずれもコントロールはクリックしないと展開されないようになっている。

先輩の金で豚みそ漬けを食べた/Akka HTTP/徳が低い

関連企業に勤めている先輩とご飯に行ってきた(ごちそうになった)。かねてから色々と相談に乗ってもらっており、会社員として無事にスタートを切った姿を見せることができて嬉しい。

入社直後で意識が高まっているので、以前中途半端に勉強してやめたScalaを触っている。具体的にはAkka HTTPで軽めのwebアプリを作ろうとしている。日本語の情報が少ないのは困難だが、Rails(!)のチュートリアルを見て自分の知りたいことを英語で何というのか調べて、それからドキュメントに検索をかけている。

僕は徳が低い男だ。すぐ怒り、間違いを認めず、そのくせ自分のプライドが傷つけられることにばかり敏感で打たれ弱い。新しい環境でこれらの欠点を自覚することが多く嫌になる。だが、道理とは関係なく自分を強く見せて社会的に優位に立とうとするのは、サルとしては自然な行動だ。つまりこういう心のはたらきをなくすことは難しい。人間社会はヒトに厳しいのだ。どうしてこうなってしまったのやら。

Mastodon諦めました/Spotify諦めました

今日はコンピュータに嫌われた一日だった。悲しい。

Mastodon

再びマストドン立てようと思ったんだがメールが送れないのと他インスタンスとの通信ができないトラブルを解決できず諦めた。どちらも初めて出くわした。

前者は名前解決なんちゃらのエラー、後者はどうやらSSLと関係があるようだったが僕の知識では理解できなかった。そもそもMastodonは恐ろしく複雑だ。使いやすくする努力はされているが少しでも不具合が起きるとそれを解決するためにはとんでもない知識と労力が必要になる。

Spotify

Spotifyでローカルの音楽ファイルを再生したかったのだが、mp3にしか対応していなかった。そこで急遽音楽フォルダ内を全部掘ってmp3じゃないファイルをmp3に変えるスクリプトを書いた。

しかしそうして生成したファイルをSpotifyで再生しようとすると、再生ボタンを押した瞬間にSpotifyアプリが終了する。ターミナルからアプリを開いているとログが残るが、終了時に表示されるのはこれだ。

[0228/053947.271857:ERROR:input_method_base.cc(146)] Not implemented reached in virtual ui::InputMethodKeyboardController *ui::InputMethodBase::GetInputMethodKeyboardController()Using InputMethodKeyboardControllerStub
Segmentation fault (コアダンプ)

うーん。軽く調べてみるとChromiumのバグの疑いが強く、2018年11月辺りに報告が頻発している。しかしローカルの曲を再生するときだけこうなるのでSpotify側にも問題がありそうだ。

TikTokはマジでヤバい

※この記事は『麦とホップ』を飲んで振り回して動画を撮影したあと書かれた。

若い人の流行りの勉強の一環としてTikTokを触ってみた。このアプリはコンテンツの消費と生産の両方をものすごいスピードで加速させる仕組みが備わっている。触ってみてこれまでの「何者にもなれない人間がプリセットに従ってアイドル体験するアプリ」という印象は吹き飛んだ。これはYouTubeのCMも悪いだろうが。

まずひたすら上げられている動画を見ていった。ホーム画面ではスマホの縦画面をフルに使って動画が表示される。これは僕の自分の動画だが、基本的にはレコメンド動画のようだ。大胆に動画の上にUIをオーバーレイ表示していくスタイルはニコニコの遺伝子を感じないでもない。各動画ではLikeと投稿者のフォローが可能だ。おそらくレコメンドにも影響している。

動画の長さの上限は15秒らしい。CM1本分で非常に短い。動画を見終わるか興味がなかったら画面を上にスワイプすると下から次の動画が出てくる。体感できるロード時間はない。即座に次の動画の再生が始まる。動画が短く、次の動画に移動するまでのタイムラグもないので結果としてものすごい数の動画を次々と見ることになる。ここでもうひとつすごいのは、レコメンドで出せるレベルのハイレベルな動画が全く尽きないことだ。純粋なコンテンツ量でも相当すごいのではないか。

ここまでの説明では、なんらかの方法によって大量生産された上質なコンテンツをひたすら消費し続けるアプリに見えてしまうだろう。しかしそれはTikTokの一面でしかない。動画撮影・編集機能も圧倒的だ。まずBGMとして多くの曲、それも最新の曲の中から好きなものを選べる(どうもワーナーと契約しているらしい)。それを聞きながら動画を撮影したら今度は編集だ。編集画面もスマホ向けに洗練されており、動画の時間的編集やエフェクト操作などが効率的に行える(複数のエフェクトが同時に適用できないなど制約はある)。これは触ってみてくれとしか言えない。

TikTokで人気のある動画は2種類。ひとつは単純に出演者がすごいもの。ダンスやスポーツ、歌などはこちらに分類される。YouTubeでもどこでもウケるタイプだ。もうひとつは編集が上手いもの。誰でもTikTokの機能に習熟すれば高いレベルの動画が作れるようになる。結局あちこちで聞く宣伝文句と同じことを言っていて自分でも困っているのだが、「誰でもレベルの高い動画が作れる」というのは「誰でもレベルの高い自己表現ができる」という意味であって「誰でも同じような動画になる」という意味ではない。

冗談抜きで5年後のコンテンツ業界にはTikTokで動画編集のイロハを学んだ世代が猛烈な殴り込みをかけてくるだろう。編集の技術が評価されるというのはニコニコのMAD文化と共通している。ニコニコが育んだ「誰でもクリエイターになれる」という夢を継承してブラッシュアップしたのがTikTokなのだと感じた。これは恐ろしいアプリだ。

ペーパーレス

※この記事は『本麒麟』を飲んで書かれた。

引越しに備えてモノを減らしている。壊れたプリンターをずっと放置していたのでどう捨てればよいか調べたら金がかかるらしい。世知辛い。

ペーパーレスを目指している。物理本は場所を取るし、劣化するし、紙は森林を破壊する(スギ林は破壊しろ)。論文はPDFで手に入るのでGoodReaderでiPadで読むし、本を買うときも電子書籍があるかは重要な基準だ。KindleはAmazonが潰れると読めなくなるので(真顔)PDFで売られているのが最も望ましいが、なかなかそうはいかない。

Kindleの弱点は人に貸すという行為ができないことだ。アメリカのAmazonではある「貸す」機能(一定期間他人に読む権利を移し自分は読めなくなる)は日本版では消されている。カス。