純喫茶 月畔

「月畔って何て読むの?」「月畔って読むのよ。」

2020年に解除した実績の一覧

今年ももう残りわずかになったので、今年解除した実績をまとめました。

卒論提出前日にライブを見に行く

2月の卒論提出日前日にTHE IDOLM@STER CINDERELLA GIRLS 7thLIVE TOUR Special 3chord♪ Glowing Rock! を見に行ったことで達成した。

全然終わってなかったけど卒論書いている場合じゃないくらいには最高のライブだった。
うっかり感想戦で終電まで飲酒してしまったけど、なんとか提出はできた。
卒業証書をまだ受け取っていない*1のでちゃんと卒業できているかは不明。

PCを自作する

7月に自作マシンにWindows10をインストールして達成した。

パソコンオタクでありながら、もうじき10歳になろうかという化石ノートマシンをずっと使っていたが今年の給付金を活用してパソコンを組み立てた。
はじめてなので何もわからないままめちゃめちゃ調べてパーツを選んだり作業をした。
グリス塗りすぎた気がするし、安いケースの電源ボタンが押しこむと戻らなかったりする*2けど動いているからいいか!
最近新しいCPUが出たり、今使っているマザボの一個新しいバージョンのやつが同じ値段になったりしているのを見てぐぬぬってなったりした。
まあ今のマシンでまだリソース使い切ったことないんですけどね。

運転免許を取得する

7月に免許センターで○×問題を50問解いて9割以上正解し、交付されたことで達成した。

身分証が欲しかったので取得したが、脳のレイテンシが高すぎるので絶対に運転はしたくない。
とはいえ今の区分だと15km/hまでしか出せないので自転車のほうが速いまである*3
運転するつもりはなくても、標識をちゃんと覚えると道路の見えかたが変わるのでおすすめです。
小特だけでゴールド免許になったら面白いと思っているので、あと5年は更新と生存を心掛けたい。

飲酒して破滅する

8月にビールを飲みすぎて達成した。

お酒を飲んだあと体調悪いなーということはあったが、ちゃんと破滅したのははじめてだった。
原因としては、しばらく飲み付けなかったところに飲み放題だったこと、適切なペースと分量を忘れていたことが挙げられる。
一人だと全然飲まないので、この時世でうっかりすると1ヶ月くらい飲んでなかったりする。実際、12月も飲まないまま終わりそう。
体もアルコールの代謝のしかたを忘れてしまっていそうなので、次に飲むときは丁寧にやっていきたい。

一人で飛行機に乗る

11月に帰省したときに達成。

一人ではない旅行では乗ったことあるけど、帰省とか一人で移動するときは専ら鉄道だったなと思った。
飛行機は楽しいからちょくちょくは乗りたいけど、空港が死ぬほど遠いのと、新幹線駅がすぐそこにあってこっちは学割もあるのが偉すぎる……。
gotoやっているうちにまた飛びたいので一生gotoやっててほしい。

塩と砂糖をまちがえる

12月のある日、夜中にミルクティーに砂糖を入れようと思って塩を入れたことで達成した。

甘いものだと思って口に含んで塩味がするとめちゃめちゃびっくりすることがわかった。
噴き出さないことには成功したが、飲み込むことはできなかった。
だいたいの場合、砂糖のほうが一度に多く入れるので砂糖のつもりで塩を入れるほうがその逆よりも被害が大きい気がする。
以来、台所で調味料を使うときは指差しと発声で確認することにしている。
👈「しお!」👈「さとう!」



もうだいぶ忘れかけていたが、意外といろいろなことが起こっていたのを思い出せたのでよかった。

2021年の目標は不老不死*4です。
ちょっと前に同じことを言ったけど、年末生まれなのでn歳の目標が来年の目標とほぼ同義になってお得。
来年もはりきってやっていきましょう。

よいお年を。

*1:何も言われていないけど、勝手に捨てられていたらちょっと嫌だなと思う

*2:いつもぎりぎり導通するくらいまで半押している

*3:自転車が無免許で乗れるの怖いなーと最近思うようになった

*4:2021年末までに限る

小型特殊免許を取った

1.5ヶ月以上前のできごとでなぜかもう書いた気になっていたが、さっき見たら書きかけで1ヶ月放置されていたのでせっかくだしということで書き上げた。

動機

自動車を運転したいという気持ちは全くなく*1、写真、住所つきの公的な身分証が欲しかっただけである*2。 小特の免許は学科試験だけで取得でき、即日で交付を受けられるのも便利だった。 原付免許のほうが万一運転したくなったときの実用性は高いが、こちらは学科試験に加えて講習が必要でそのぶん費用も時間もかかることから選択しなかった。絶対に運転しないという強い気持ちもあったし。

直接のきっかけはKyashの物理カード申請の要件として免許証などの顔写真つきの身分証が必要だったことである。このカードがめちゃめちゃ欲しかったというわけではないが、身分証はあったほうが便利だよな~~と思ったので受験を決めた。

勉強したこと

試験問題がどういうものか調べたところ、大体原付と同じらしいということはわかった。 結果的には、特に問題集を買うでもなく、ここ(https://menkyo-web.com/)の問題を1周ざっと眺める以上のことはやらなかった。 あとは一応小型特殊車輌の定義は覚えて行った*3

受験

受験は普段なら当日朝に窓口で申し込むだけらしいのだが、感染症対策のために1日あたりの定員を決めた上で事前に電話予約が必要なシステムになっていた。 前日に電話したところ、受付番号として100より大きな数字を言い渡されたのでこんなときでも受験する人は多いんだなーと思った。

当日窓口で小特の受験に来たと告げると特に珍しがられることもなく手続きが進んだ。 もらった書類に「小特」と書かれた付箋がつけられてたのはちょっと面白かった。

途中で何回か「教習所の卒業証明はあるか」とか「教習所出なくても取れるのね」みたいなことを言われたので、小特の対応には慣れてないのだろうなという印象を持った。

試験はそんなに難しいものではなく、ほとんどが問題集で見たことあるか見ればわかるでしょうという問題ばかりだった。 見たことなくてもだいたい安全なほうを答えればいいので特に困らなかった。

ただ、マニュアル車の操作に関しての問題は対策してなかったので、これに関する1問はわからなかった。

「酒は少量ならば緊張が解けて頭が冴えるので、疲れたときに飲むとよい」というサービス問題があって最高だった。

15分くらいで一通り解けたので、念のためもう1周だけ確認してから途中退出した。

わからなかった1問を含めて5つまでしか誤答できないということでやや不安があったが、無事合格していた。

待ち時間がやたらと多く、試験が終わったのが14時前だったが免許証の交付を受けたのは16時過ぎだった。

それから

免許を取得しようと思ってから1週間程度で、交通費含めて5000円以下*4で取得できたのはお得だったと思う。 この免許で運転できる車輌を身の回りで見たことがないくらいなので、実際に使用することはないだろう。 そもそも、この免許は普段から敷地内で運転しているような人が公道を通行するために取得するようなもので、自分みたいに何も触ったことがないような人間がしゅっと取るものではないんだろうなと思う。

小特のビットを見るとフルビットを目指しているように見えるようだが、今のところこれ以上ビットを増やすつもりはない。

後日、Kyashの物理カードを申し込み、無事に発行された。これでこの免許証の出番は当分ないだろう。

*1:文字通り右と左がよくわからないので運転には本当に向いてないと思う

*2:あとは変な免許持ってたら楽しいかなっていう面白半分

*3:結局出題されなかった

*4:小特に限って取得より初回更新の費用のほうが高くつくらしい

第9回シンデレラガール総選挙の出口調査をやってみた話

4月の中頃からおよそひと月にわたって第9回シンデレラガール総選挙なるイベントが行われていた。これはいわゆる人気投票企画の一種で、投票内容をゲームクライアントからTwitterに投稿することができる。この投票の動向をリアルタイムで眺められたらめちゃめちゃ楽しそうだなと思ったので、出口調査botを作ることにした。

完全に自分がリアルタイムで票が動く様子を眺めるためだけに作ったものだったが、結果的に30万ツイートぶんのデータを集めることができた。

つかったもの

  • Python + Tweepy

    Twitterのデータをリアルタイムに取得するにはStreaming APIを利用するのが一番目的に適っていると考えた。なかでもTweepyのStreamingのモジュールは、かつてUserStreamが健在だったころに自分のTwitterにおける"ふぁぼ"*1を自動で取得していたことがあり馴染みがあった。

  • Google App Script(GAS)

    取得したデータはなるべくリアルタイムに表示したいと考えていた。そのほうが見ていて楽しいので。

    データを投げたらグラフとかまで描いてくれるダッシュボードサービスないかなーと思って探していたが、結局これまた使い慣れたGASを使うことにした。

    GASを使ってGoogleスプレッドシートを更新するとブラウザから見てもリアルタイムに更新されて見えるし、そのままグラフを作ったりできるので、思っていたことは達成されそうな気がした。GASは自前のサーバなしで簡易的なWebAPIのような仕組みを作ることができて重宝している。*2

実装

  • GAS

    スプレッドシート上でアイドルごとのシートを作成して、ツイートがあればその時刻と投票が行われた場所*3を対応するシートの末尾に追記していくことにした。

    GASでは指定されたURLに対するリクエストをトリガにして実行する機能があるので、今回はツイートを検知したら内容をJSONにしてここにPOSTすることにした。

    function doPost(e) {
        try{
            var PostData = JSON.parse(e.postData.contents);
            var ss       = SpreadsheetApp.getActiveSpreadsheet();
            var sheet    = getidolsheet(PostData.idol); // アイドル名のシートが存在すればそれを返し、なければ作成
            var date = new Date();
            console.log(PostData.idol);
                
            // 行の最後に追記
            sheet.appendRow([Utilities.formatDate(date, "Asia/Tokyo", "MM/dd HH:mm:ss"), PostData.moba, PostData.sta]);
            
            // 書き込んだシートを2番目に移動する
            ss.setActiveSheet(sheet);
            ss.moveActiveSheet(2);
        } catch(e){
            console.error('Error: ' + e);
        }
    }
  • Tweepy

    投票のツイートは、アプリなどからのツイート機能におけるデフォルトの文言の一部と完全に一致するものを抽出した。viaを指定することも考えたが、どうやらアプリ側の仕様として公式クライアントなどの他のアプリを通じてツイートするようになっているようで、viaでは判断ができないことがわかった。

    投票先の判定は、内部でアイドルの一覧を持っておいてその中で完全一致するものを探す方法を取った。投票ツイートは編集可能なため表記揺れが生じると都合が悪かったからである。

    見てわかるように、文言だけ真似て捏造したようなツイートまで素直に集計してしまうシステムになっているが、そのような不正なツイートが混ざる数と比べるとこれをちゃんと区別するというのはかなりコストが高すぎるように思った。

    ツイートを収集するコードは砂場あそびをするために借りていたGCEのインスタンス上で動かした。

失敗したこと

  • 初動が遅れた

    投票が始まってからの思い付きで作りはじめたので、開始直後の3時間くらいのデータを取れなかった。投票のツイートが一番盛り上がる時間帯のひとつだっただけにもったいなかったと思う。

  • スプレッドシートのセル数の上限にひっかかった

    稼動してから数日後に記録が止まっていたので、よくログを見てみたらスプレッドシートのセル数の上限である500万セルに達してしまったようだった。1ツイートにつき1行の3セルを使うようにしていたのだが、デフォルトの設定では利用しない列がD-Z列まで空白セルとして存在していたため不必要にセル数が膨らんでしまったようだった。使わない4列以降を削除することで対応した。

  • ツイートしたユーザの情報も記録しておくとよかった

    投票期間の終了が近いころに他のサイトで同様のデータ収集が行われているのを見たときに、ユーザIDを比較することで正味何人のユーザがツイートしているか比較しているサイトがあった。今回は日時と投票先しか記録していなかったが、たしかに1ユーザあたりのツイート数がアイドルによってどれだけ変わるか比較できたら楽しそうだったなと思った。ほかにも「このアイドルに投票した人はこのアイドルにも投票しています」みたいなのもやりたかった。

感想

やはり、投票の様子がリアルタイムで可視化されるのは面白く、毎日のように開いてはにこにこしながら眺めていた。特に投票期間の序盤は目紛しく順位が入れかわっていたため、かなり見応えがあった。

全体から取得したデータを見ていると、自分がTwitterで観測している人々の投票行動とはまた違った様子が現われていたのは面白かった。

投票後のツイートの裏にはひとりあたり数百から数万の票が隠れているものの、30万票ぶん集めたらそこそこの精度で実際の得票率を見積れるだろうと高をくくっていたが実際の結果を見ると自分の集めたデータと大きくずれていて驚いた。

自分の担当*4が10位付近にいることはなんとなく知っていたが、Twitterなどを見ていると「結果発表のとき10位にいるのを見てびっくりした!*5」みたいな感想があり、純粋な気持ちで発表を驚けなかったのはちょっと惜しかったかなというような気もした。

完全に自分が見て楽しむためだけに集めていたデータであるが、思いがけずそこそこの規模のデータになったので、今年の結果を分析してみて来年の結果を予想するのに用いることができたら面白いと思う。*6

*1:"いいね"ともいう

*2:たとえば他にもSlackのスラッシュコマンドをここで運用していたりする

*3:モバマスと呼ばれるブラウザゲームとスターライトステージと呼ばれるアプリの2種類のゲームからそれぞれ投票できた

*4:速水奏さん

*5:今年は中間発表などはなく、いきなり最終結果が発表される方式だった

*6:もっとも、毎年システムが変わるのでほとんどあてにできないような気もしている

お茶漬けの日

今日昨日はお茶漬けの日、もとい日頃から応援している北上麗花さんの誕生日ということで自分もなにかしようかと考えていたところ、なぜかブログが生えた(どうして??)

もうちょっと中身のある文章を書きたかったけど、いい機会なので麗花さんを中心に自分のミリオンライブ遍歴を忘備録的にまとめておこうと思う。

ファーストコンタクト

麗花さんに関する最古の記憶はグリマス時代に遡る。もっとも、この記憶は一回インストールしてちょっと触ってみたものの全然続かなかった頃のもので、全く信頼性がない。AppStoreからインストールの履歴を見たところ、2015年4月ごろのようだということはわかった。

f:id:kuromitz:20200518002250p:plain
かつてインストールしたグリマスのアプリ

なにかの拍子で回したガチャか配布カードとして手に入れた、ちょっとレアリティの高めのカードの中に麗花さんがいたような記憶がある。カード名などの記憶はなく、なんとなく青みがかった髪が珍しいなと思ったり、名前に花という字がついていた気がするというような曖昧なことだけ覚えている。Wikiを見ても記憶にあるようなカードイラストが見当たらなかったので真相は謎のままである。

セカンドコンタクト

次に新しい記憶は2017年7月ごろのシアターデイズのリリース直後に見た「熟睡ガール 北上麗花」のカードイラストである。このイラストが印象に残っていた理由はイラスト内で彼女が手に持っている洗剤*1を当時自分も使っていたからである。実はその洗剤は食器用洗剤なのだが、どうしてそれを使って床掃除をしているんだ???と思ったことは記憶に新しい。

f:id:kuromitz:20200518002133p:plain

この頃はシアターデイズ追加組の2人が気になるかなという程度で、初回のイベントが開催されるころにはほとんど触らなくなっていた。

サードコンタクト

それから1年ちかく経過した2019年6月中旬ごろ、このイラストがあまりにも気に入ったために再びシアターデイズを触るようになった。その中でストーリーとソロ曲を1つずつ聴いていくうちに、ソロ曲の「FIND YOUR WIND」*2を聴いてハマったというのが彼女を「担当」しようと思った直接のきっかけであったように記憶している。

少なくとも、その直後7月から始まった2周年イベントでは麗花さんを選択して走っていた*3ことがわかっている。

f:id:kuromitz:20200518001954p:plain
2019年7月開催の2周年イベントの様子

まとめ

気付いたら日付も変わっていてお茶漬けの日も終わってしまった。

それまで見向きもしてこなかったキャラクターにわずか10日くらいの間で急速にハマっていたことは面白い。人生何が起こるかわからないし、どこに自分の好みがころがっているかわからない。こうして出会った縁を大事にしながらこれからも彼女を「地味に普通に」応援していこうと思う。

最後になるが、「FIND YOUR WIND」は最高なので絶対に聴いてほしい。 www.youtube.com

彼女の参加するユニット曲としては、「piece of cake」と、歌唱力の暴力として名高い「待ちぼうけのLacrima」をおすすめしておく。 youtu.be

www.youtube.com

*1:Froschというドイツの洗剤。カエルという意味があり、本物のパッケージにもカエルが描かれている

*2:ユニット曲の「花ざかりWeekend✿」だったような気もする

*3:キャラクターごとにランキングが分かれている形式のイベントだった