毛布がない/ディスプレイの高さ/dアニメストアのスペースだけ入ったspanタグ

11/30(土)

毛布がない

風邪のあと咳が長引いていた。そろそろ収まりつつあるのだが、ハウスダストの影響もあり得ると考えて毛布をクリーニングに出した。当然だが、クリーニングに出すと自宅に毛布がなくなる。寒い。現在進行形で。賢い人間は冬が来る前に毛布をクリーニングに出していたのだろう。どうして僕にもそうしろと言ってくれなかったのか。水曜日まで耐えねばならない。

ディスプレイの高さ

僕はバロンチェアをヘッドレスト付きで使っている。頭をヘッドレストに預けると視線が上を向くのでディスプレイがある程度高い場所にあってほしい。そこでツクモでディスプレイの台を買ってきた。概ね満足しているが、一つ計算外だったのはマウスのケーブルとディスプレイ台の足がぶつかることだ。現状問題ないが、少し気にする必要がある。

dアニメストアのスペースだけ入ったDOM

dアニメストアの作品ページにはエピソードリストがある。一つひとつのエピソードは話数番号・サブタイトル・サムネイルを持つが、作品によっては各エピソードにサブタイトルを振らないものもある。そういう作品はどうなるのかなと思ったら、サブタイトルとして   (スペース) が設定されていてひっくり返った。

話数番号とサブタイトルにはマウスオーバーしたときにクリック可能であることを表現するアンダーラインを表示するスタイル(text-decoration: underline)が当てられている。つまり、スペースにアンダーラインが付加されて謎の線分が出現するのだ。

これは強気すぎる。表示すべきものがないなら要素を消せばいいのに。

学生に向けて喋った/Slackの入力欄のWYSIWYG化を許すな/ガーリィレコード『フラフープデブ』

11/12(水)

学生に向けて喋った

会社の採用イベントでエンジニアが(普段の調子で)LTをして学生に聞かせるという会があった。何らかの力学によって僕もトーク役に抜擢され、ちょっとした話をした。トップバッターというアドバンテージもあり、反応は上々。懇親会では文系からエンジニアになろうとする人がおり、自分の経験をなるべく話すようにした。

一応ここにも書いておくと(もちろん弊社人事の見解ではなく僕個人の考えだが)新卒採用はその時点の実力はそれほど重要ではない。プログラミングが好きで勉強し続けられるという適性があることをアピールするのが大事で、そのためには何かを作って見せることが有効だと思っている。

Slackの入力欄のWYSIWYG化を許すな

Slackは新機能を一部のワークスペースに導入して様子を見ることがある。僕が加入しているSlackワークスペースの1つで(幸いもっともアクティブなワークスペースではない)エディタがWYSIWYG化された。

WYSIWYG化とはどういうことか。それは入力欄に、最終的に表示されるべきものと同じものが表示されることだ。これまではそうではなかった。つまり \chao\ と入力欄に入力すると最終的には chao と表示されていた。しかしWYSIWYG化かによって入力欄に \chao\ と入力した時点で入力欄の表示が chao に書き換わるのだ。

これはクソだ。私はバカなので文章とその装飾は別々に考えたい。しかしWYSIWYGエディタでは書いている途中で既にその2つが混ざる。そして装飾されたエリアから出るために1回多く矢印キーを押す必要が生じたり、装飾されたエリアを消すことができなかったり、行頭の1文字がEnterを押さずに勝手に確定されたりする。これはクソだ。本物のクソだ。

ガーリィレコード『フラフープデブ』

僕はずっとYouTuberのガーリィレコードチャンネルを推している。11/10に公開された『フラフープデブ』はトップ10に入る神回だったので紹介する。まずは見ろ。

とにかく高井がボケてボケてボケ倒すその勢いがたまらない。冒頭の間違ったフラフープの使い方が高井の驚異的な身体能力のせいで成立してしまっているのがまず面白すぎるし、そのせいで高井が「何がおかしい?」とでも言いたげな態度なのもいい。勢い余ってザコDIYで作ったテレビ台を破壊するのはガーリィレコードチャンネルの伝統芸能の『裁判』シリーズに通じるところがある。それを慌てて直そうとする3人と、手伝うつもりで邪魔する高井。そこから絶妙なタイミングで繰り出される「雷神!」も良すぎる。ノーカットの自然体の動画でありながら、情報が洪水のように押し寄せてくる快感がある。

ニコニコチャンネルに時折投稿されるメイキング動画を見ると、自然体に見える動画でもしっかり計画し練習をしているようだ。プロの芸人というのは本当にすごい。これが毎日タダで見られるのだから(このレベルで面白い動画はそうそうないが)いい時代だ。

というわけでみんなもニコニコチャンネルのガーリィレコードチャンネル裏アカをよろしくな!!!

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側にも問題がありそうだ。