2022年5月31日火曜日

断定する勇気を持て

とある記事に寄せられていたコメントが,どうにも気持ち悪い文章だったので,添削した.何が気持ち悪いかって,この文章,全ての文が「〜と思う」で終わっているのである.

学生,とくにまだ文章を書くトレーニングが不足している1年生が書いてくるレポートにも,このような文章がみられることがある.そのような学生には「君の書いてきた文章は,君が思ったこと,考えたことを書いたものだろう?だとしたら,〜と思うという情報に新たな意味はあるかい?蛇足以外のナニモノでもなかろう.全て削除すべし.つまらぬ語尾を付けずに,断定せよ」と指導する.

「〜と思う」と書きたくなる気持ちはわからぬでもない.書いている内容に自信がないからである.あるいは,そのように責任をぼやかす表現がクセになってしまっているか.しかし,「〜と思う」と書いてふわっとさせれば許される,というものでもない.

断定する勇気を持っていただきたい.そのために方法は二つある.一つは,自信を持って断定するための根拠を揃えることである.これには努力が必要である.作業はしんどいかもしれないが,しっかり作業すれば,きっとその努力は報われる.頑張っていただきたい.

もう一つは,とにかくエイや!で断定してしまうことである.これは,内容がおかしいだろ!とツッコまれるリスクを伴う.しかし,若気の至りという言葉もある.歳を無駄に重ねた私のような者が根拠のない断定を行うといろいろと差し障りがあることもあるが,学生であれば許される.ぜひ,断定する経験を積んで自信を持っていただきたい.突っ込まれて窮地に立たされることがあったとしても,それも経験である.なに,命まで取られるというものでもない.気軽に考えよう.

学生諸君には,経験を積んで,断定する勇気を備えた,カッコいい大人になってほしいものである.

英語では

この話題,日本語だけでなく,英語でも同様である.おそらく他の言語でもほぼ同じことがいえよう.たまたまこんな記事をみかけた.ディビッド・セイン氏による「英語は『○○』を使えば『I think』連発がやめられる」という記事である.何を使えば I think の連発がやめられるかは,リンク先の記事を読んでいただくとして,その記事でも次のように述べられている.

英語を話すとき、やたらと「I think」(私は~だと思う)を連発してしまう日本人と会うことがあります。「I think」と言わなければ、断定的に見えてしまうのではないかという懸念があるからだと思うのですが、ネイティブからすると、同じフレーズを連発している人はどうしても稚拙にうつってしまいます。

やっぱりカッコ悪いんだ.

レポートや論文を英語で書くときは,三人称を使って客観的に書く.たとえば,「I confirmed the phenomenon through a series of experiments.」という文は,「The author confirmed 〜」と書く.なお,日本語の場合は「私は一連の実験でその現象を確認した」と書くのではなく主語を省いて「一連の実験でその現象を確認した」と書く技が使える.ただし,先日,ある原稿をproofreadingに出したら「The author 〜 という表現は old fashoned である」と直された.基本,三人称を使って,要所要所で I だの we だのを使え,ということだろう.

study, research, investigationやexperiment, resultなどを主語にするパターンもよく使う.先の例文であれば,「The series of experiments revealed the phenomenon.」である.日本語に訳せば「一連の実験でその現象が明らかにされた」となるか.モノやコトを主語にする表現は日本語ではあまり馴染みがないのではと感じる方もいるかもしれないが,そんなこともない(「モノやコトを主語にする表現は日本語ではあまり馴染みがない」という文の主語はなにか,考えてみよう).

モノやコトを主語にする表現を自由に使えるようになると,英作文の幅が広がり,より英語らしい英作文を書けるようになる.少なくとも私はそう信じている(←「〜と思う」を少しカッコつけて表現すると,こうなる).

おまけ:英会話のコツ(ヤー・ヤー・ノゥの法則)

ところで,先のディビッド・セイン氏の記事は本の紹介記事のようだが,その記事では「6つのカテゴリー」でどんな会話も続いてしまう!と説いている.しかし,私が若いころに先輩から教わった英会話のコツは,もっと簡単,単純なものだった.

曰く,「いいか?英会話は『ヤー・ヤー・ノゥの法則』で乗り切れる」とか.

とにかく「ヤー(Yeah)」と相槌を打っておき,3回に1回のタイミングで大げさに「ノォウ!(No!)」と言えばいいんだとか.なんだそれテキトーすぎるだろ.「いや,とにかく喋らせるだけ喋らせて,本当に確認したいことは,こちらから改めて確認しろ」だそうである.

「ヤー・ヤー・ノゥの法則」,それなりに使い勝手が悪くないと感じているが,いかがだろうか.信じるも信じないもあなた次第.なお,なにか問題が生じても私は責任をとれないので悪しからず.

5月下旬の話題まとめ

5月21日

今日は小粒な話題ばかりです.

Vangelis

訃報です.最近,訃報が続きますね.ギリシャの作曲家・シンセサイザー奏者の,ヴァンゲリス(Vangelis)が亡くなりました.享年79歳.「ブレードランナー」や「炎のランナー」などの映画音楽で有名な方です.ご冥福をお祈り申し上げます.

玉ちゃんドラマ

KisMyFt2の玉森裕太がドラマ「NICE FLIGHT!」に出演,初のパイロット役を演じる,だそうです.玉ちゃんていうから玉袋筋太郎かと思った(思わない).それはさておき,パイロットやCAを主役にしたドラマって定期的に出てきますね.作りやすいのかな.花型職業,なんですかね(まあ,大学教員を主役にしたドラマって地味そうで面白くなさそう).

MBTI診断

性格診断ですが,いつもの診断ゲーム系とは異なり,こちらはいちおうは真面目な診断なのかな?まあでもこういうのに一喜一憂してもしょうがないですね.と思ってしまう私は天邪鬼&マイペース.

5月22日

梅雨の走りでしょうか.雨が降りますね.

競馬

週末なので,競馬のクラスタができています.東京と中京ですね.中京競馬のメインレースは平安ステークスというレースだったようです.東京の競馬クラスタはいつもより若干小さめですかね.

フロイニ

ラジオ番組です.東京FMのFrom INI.最近,ちょいちょい話題クラスタを作るようになりましたね.幕張メッセージだの最強マンネだのといったトレンドは,ラジオの番組中で取り上げたエピソードということでしょうか.他のラジオ番組が話題クラスタを形成するときも,同様の傾向がみられます.

ファンファーレ

そしてこの話題がよくわからない.めいちゃんファンファーレ!とかいうライブイベントがあったようなんですが.セトリ最高とかいうのは,セットリストがとても良かったという意味ですよね?

5月23日

わりと賑やかなトピックマップになりました.

競馬

昨日はオークスでした.3歳牝馬の祭典,GIレースです.私が昔,競馬に注目してたころは4歳牝馬だったはずですが,年齢の数え方が変わったんですね.スターズオンアースという馬が勝ったとのこと.ところでスターズオンアースって素敵な名前ですね.地上の星,ってことかな.素敵.

ニチアサ

そして昨日は日曜日なのでニチアサのクラスタができています.仮面ライダー,プリキュア,戦隊モノのクラスタが3つあります.ニチアサのテレビシリーズ,大きなお友達に大人気?

地震

茨城県沖で地震がありました.東京はたいした揺れではありませんでしたが,気付きました.いずれにしてもたいした被害はなかったようなので,一安心です.

5月24日

昨日は気持ちの良い天気でしたね.

キンプリ

King and Prince がデビュー4周年だそうで話題になっています.ところが,King of Prism とかいうのもあってややこしい.こちらは5周年だそうです.どちらもキンプリと略すからごっちゃになる.前者はジャニーズアイドルですが後者isなに?

バイデン大統領

バイデン大統領が来日しました.横田にエアフォースワンでやってきてヘリで六本木まで飛んできたとか.裏口から入ってくるなんて失礼よね!とお怒りの向きもちらほら.まあ,羽田や成田経由で交通規制して民間人の生活を邪魔しない配慮と,好意的に受け取っておきましょう(←お人好し)

ガサ入れ

山口県の4,630万円誤送金事件,オンラインカジノの決済代行業者が3,500万円を返金したというニュース.世間では警察にガサ入れされたらたまらんから3,500万円くらい安いもんだと払ったという見立てのようですが.ま,そんなもんなんでしょうねえ.

5月25日

今日もちょうどよい気候ですね.

知床観光船

知床の観光船沈没事故,海底120mのところに沈没していた観光船を引き上げようとサルベージ作業が続いていますが,水深20mまで引き上げて曳航していた途中で落下,海底180mまで沈んでしまったそうです.難しい作業なんでしょうが,これでますますお金がかかるんでしょうね.

交流戦開幕

プロ野球です.セパ交流戦が開幕したというニュース.この交流戦っていつから始まったんでしたっけ,昔はオールスターゲームがあるくらいで,こんなイベントありませんでしたよね.

マイナカード

マイナンバーカードの普及が遅れているから健康保険証を原則廃止にしてマイナンバーカードを保険証にしようという乱暴な政策です.あんたたちが信用ならんから普及せえへんのよ?っていう根本的なところから改善せにゃあかんと思うわけですが.

5月26日

いろいろ忙しいのです……

ハンターハンター

HUNTERxHUNTERという人気漫画が連載再開という話題です.作家の冨樫義博氏がツイッターの公式アカウントを作ったら,1日で100万フォロアーが付いたというほどの大人気,だそうです.少年ジャンプの漫画人気は未だ衰えずというところでしょうか.

シャインマスカット

シャインマスカットというブドウの高級品種が中国に買ってに持ち出されたという事件のニュースです.品種育成者が得られるはずの許諾料に換算すると年間100億円の損失が発生するだろうと農水省が試算しました.

大井記念

そして平日なのに競馬の話題です.地方競馬ですね.大井記念ということは,Tokyo City Keibaでしょうか.トゥインクルレースとか,話題でしたよね.

5月27日

今日の東京は鬱陶しい雨ですね.

なにわ男子

ジャニーズのアイドルグループ「なにわ男子」の話題です.関西Jr.時代の楽曲収録1stアルバム「1st Love」が発表になったとか,デビューツアーが開催決定したとか,ドラマの主題歌が決まったとか,こういうのを破竹の勢いというのでしょうか.

PS5

「プレイステーション5(PS5)」の生産を大幅に拡大するという方針が,ソニーインタラクティブ社長のジム・ライアン氏が発表したという話題です.明るいニュース?ですね.

ネット文化クイズ

平成生まれを対象としたインターネット文化クイズだそうですが.昭和生まれがチャレンジしてみたところ,楽勝で全問正解でした.

5月28日

土砂降りだったり急に晴れたり,日本も熱帯になりました?

なにわ男子

なにわ男子の話題が昨日からずっと続いています.デビューツアーが発表になったんでしょうか.調べてみたら,「1stアルバム『1st Love』リリース&ツアーを発表」というニュースがあったんですね.

Travis Japan

さてこちらもジャニーズです.トラビス・ジャパン,縮めてトラジャだそうです.トラジャと聞くと私はジャニタレなんかじゃなくてトアルコトラジャを連想してしまいます.プレミアムコーヒーですね.

ドラゴンクエスト

ドラゴンクエスト,1986年5月27日に「ドラゴンクエスト」がファミコンで発売され,今年で36周年だそうです.そのほか,今日は何の日?という話題が重なりました.小松菜の日,百人一首の日,背骨の日,だとか.せ,背骨の日?

5月29日

なんか固定化されてきた感がありますな.

競馬

はい,週末です.競馬です.東京と中京のクラスタができております.それぞれ,水色と黄色のクラスタですね.3年前,これを始めたときには競馬のクラスタなんてなかったと思います.Twitterがつまらなくなってきたということでしょうか.

アニガサキ

アニガサキ,これもときどき出てくるクラスタですね.アニメでしたっけ.大きなお友達向けのやつですか.

ハリーポッター

ハリーポッターが金曜ロードショーで放映されたんですね.ハリーポッターも,好きな人は好きですね.私は一度も観たことがありません.

5月30日

予想通り競馬の大きなクラスタができていました.

ダービー

昨日は東京優駿,ダービーでした.ダービーを制したのはドウデュース,レースレコードも更新だそうですね.ところでドウデュースという名前を見聞きすると,どうしても村上ショージの「ドゥーン!」というギャグが脳裏に浮かんでしまうのは私だけでしょうか?

ニチアサ

ニチアサのクラスタもできています.もう日曜日は競馬かこれかという感じです.右上のアクアマリン色のクラスタはプリキュア,中央にあるベージュのクラスタは戦隊モノ,暴太郎戦隊ドンブラザーズですね.

CL決勝

野球の話題で盛り上がることが多いTwitterですが,これはサッカーの話題です.欧州サッカー,チャンピオンズリーグの決勝戦が行われ,レアル・マドリードとリバプールが対戦,1 - 0でレアル・マドリードがリバプールを制したというニュースでした.

5月31日

早いもので今日で5月も終わりです.昨日の話題は小粒なものが多かった印象です.

日本マジ

海外に行っていた千原せいじが帰国時の検疫対応に激怒してSNSで痛烈批判,だそうです.まあ,いろいろと問題はありますわな.そろそろこのコントみたいな3年間を終わらせなければあかんでしょう.それにしても「もう日本が発展することはないから発展途上国ではなく転落途上国だ」というツイートを見かけて,誰うま……と思ってしまった.

モナコGP

F1グランプリです.雨の中モナコグランプリが行われたというニュース.F1も開催されると,話題になります.まだモータースポーツのファン層はそれなりにあるということでしょうか.

あなたを召喚する魔法陣と詠唱セリフ

診断系です.4ndan.com です.あなたを召喚する魔法陣と詠唱セリフだそうです.やってみました.「召喚口上:慈悲なき天泣!出でよ、あなた!」だそうです.なにこれ面白いの?

2022年5月29日日曜日

ベクトルの内積で導く加法定理

オイラーの公式から三角関数の加法定理は簡単に導けるよという話を紹介したところ,「三角関数の加法定理を導くのにオイラーの公式を持ち出すのは,小学生に銃を向けているようなものだ」とのご意見をいただいた.

オーケー,では高校生が習う数学の範囲で解く,エクセレントな加法定理の導き方を紹介しよう.この方法は,M大学のD先生が教えてくださった方法である.


この図をみていだきたい.単位円上に,ベクトルa,bを描く.たまたま0<α, β<π/2の範囲で描いているが,αとβの角度はなんでもよい.

そして,ベクトルの内積を用いて三角関数の加法定理を導く方法は次のとおりである.実にシンプル.簡単な方法で目から鱗である.

2022年5月26日木曜日

「オイラーの公式」の美しさ

数学の授業で「オイラーの公式」の美しさについて滔々と語ったところ,学生から「その美しさがわからない」という感想が出た.オイラーの公式とは,次の式で指数関数と三角関数が結ばれるというものである.

指数関数と三角関数が,こんな簡単な式で結ばれるというだけでもう十分に美しいと思うのだが,オイラーの公式を使うといろいろな証明が簡単にできるという事例を紹介しよう.少しは美しさについて気づいてもらえるだろうか.

三角関数の加法定理の導出

三角関数の加法定理を導出する手順も,オイラーの公式を用いると実に簡単になる.三角関数を高校生に教えることが必要か不要かという議論が先般,話題になったが,高校数学で三角関数の加法定理を暗記せよという苦痛を味わった皆さんも多いことだろう.咲いた咲いたコスモス云々というなんだかよくわからない呪文を私も唱えたことがある.

しかし,本来,数学は暗記科目ではない.加法定理など,憶える必要はないのだ.そしてそれに続く倍角の公式やら半角の公式やらも,加法定理からいちいち導けばよろしい.公式を憶えることが重要なのではなく,さっと導くことができることが大切だ(受験数学に限っていえば,限られた時間のなかでスッと引き出すために,憶えておくことは無駄ではないかもしれないが).

そしてオイラーの公式を使えば次のようにとても簡単に導出できる.美しい.


三角関数の微分の導出

三角関数を微分したらどうなるんだっけ……,これも,オイラーの公式から簡単に導出できる.次のようにすればよい.オイラーの公式自体は指数関数と三角関数のマクローリン展開から導くことができる.数学はいろいろと密接に関連している体系的な学問なのだ.あー,美しい.

2022年5月22日日曜日

Herokuアプリ,データのバックアップ方法

備忘録として,稼働中のHerokuアプリからローカルの開発版へデータを反映させる方法をメモしておく.

Heroku Postgres データベースからデータをエクスポートする.新しいバックアップを作成してダウンロードするという方法でできる.その手順は次のとおり.

$ heroku pg:backups:capture
$ heroku pg:backups:download

この操作をすると,ローカルに lateset.dump というダンプファイルができる.

このダンプファイルから,データをローカルの Postgres データベースにリストアする.その方法は次のとおり.

$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump

ただし,ここで myuser はローカルで利用しているデータベースのユーザ名,mydb は,利用しているデータベース名である.Rails の開発環境ならば,application名_development というデータベース名のはず.

これで,稼働中のデータが開発環境に反映される.

(Heroku Dev Center どおりにやれば,問題なくできる)



三角関数は木の高さを測る道具ではない

高校で三角関数を教えるのはナンセンスという趣旨の発言をした某議員がSNSで炎上している.

(数学)教育は重要な投資

なんでも,三角関数の代わりに金融リテラシーを教えるべきだそう.ところが,金融リテラシーっていうから,たとえば株価の予測に関する原理的なところとか,もっと踏み込んで教えるべきだというご主張かと思ったが,そうではないらしい.株価の変動は時事刻々と変化するデータで,しかも周期性がみられる典型的な時系列データ.フーリエ変換して特徴量を抽出,それを機械学習でどうこう,みたいな,世界で闘えるレベルの知識を高校生から叩き込むべきだ,っていう勇ましい話ではないみたい.あれ?そもそもフーリエ変換するのに三角関数の知識がなければできないぞ?おやおや.

将来世界で闘える大人になれそうな高校生数名にピンポイントで教えればいい?いや,それでもいいと思うよ?そんなことができればだけれど.その高校生数名って,高校生の時点でどうやって発掘するんだろう.こういうことって確率事象だから,成功者の人数を確実に増やすには,分母をできるだけ大きくするしかない.これって研究の世界でも同じで,ノーベル賞受賞者を増やすためには,研究の質を上げるとともに,研究者を増やすしかない.このへんの理屈をきちんと理解するためには,三角関数だけじゃなくて,確率・統計の知識も重要だ.確率や統計もしっかり学んでおくべきだということがわかる.

そう考えると,高校生に三角関数をきちんと学ばせるのは,投資的な意味でも効果は高い.物理学を応用する分野では必須であるだけでなく,先に挙げた時系列データを扱う分野では確実に使う.世界で闘えるレベルでなくとも,少なくとも多少高度な分析を行いたいのであれば知ってないとまずい.なので,三角関数を高校で学んだ結果は応用が効く.理系だけ知っていればいいというものでもない.

三角関数こそまだ高校で教えられているけれど,現在の高校数学では行列が外されている.まあ,行列はあくまで一つの例だが,これまで,このような投資を軽んじてきたからこそ,日本が没落しつつあるというのは言い過ぎか.

社会科学における応用例

つい最近,幾何的なプログラミングをしていて三角関数を利用したばかりだが,ここでは,もう一つの利用例として,社会科学における三角関数の応用例を紹介しよう.

我々が2019年からずっと続けてきている,ツイッターのトレンドを分析するTWtrendsシステム( https://twt.iiojun.com/ で稼働中),これは,社会科学の範疇に含まれる研究事例といってよいだろう.本ブログでもこれまで,「SNSを新聞代わりにできるか?」や「オンライン講義開始で何が起こったか」という記事で紹介してきた.

この図は,TWtrends画面の一部を切り取ったものである.上には,その日のTwitterトレンドが並ぶ.それぞれをクリックすると,トレンドに関連するツイート群から構築された共起ネットワーク図が表示され,トレンドの内容が概観できるという仕組みである.

図の下部には,その日のトレンドから構成されたトピックマップが描かれている.トピックマップとは,関連するトレンドを一つにまとめたものである.同じ話題でも複数のキーワードで盛り上がると,トレンドの単語がいくつも取り上げられるという特徴があるので,それを一目で確認できるようにしたものだ.

では関連するトレンドをどう見極めるか.ここで三角関数が登場する.全てのトレンドに関する単語空間を用意し,その空間にばら撒かれた単語群から似たような単語をまとめる際に,コサイン類似度と呼ばれる指標を用いている.この指標は,コサイン類似度という名前に「コサイン」が出てくるとおり,三角関数のcosに由来する.ベクトルの内積と大きさから計算されるので明示的にcosは出てこないが,理屈を理解するには三角関数の知識が不可欠である.詳しく知りたい方は,次の参考文献をご覧ください.

Iio, J. (2019) TWtrends ― A Visualization System on Topic Maps Extracted from Twitter Trends, IADIS International Journal on WWW/Internet, Vol. 17, No. 2, pp. 104-118.

2022年5月20日金曜日

五月中旬の話題まとめ

5月11日

今日もいい天気です.

BTS

BTS人気,すごいですね.世界的に大人気,もちろん日本でもたくさんのファンがいるようです.新しいアルバムのトラックリストが発表になって盛り上がっているということでしょうか.

うたコン

そしてこちらはNHKの音楽番組です.音楽番組も密結合の話題クラスタになりがちです.なぜなら楽曲名のリストを皆がばしばし投稿して,それがそれぞれのトレンドになるから.そして皆さん,受信料がーとかなんとか文句いうくせに,しっかり番組は視聴しているのね(まあ,観てる層と文句言ってる層は違う!ということだろうけれど)

オオタニサン

大谷選手が今シーズンも大暴れです.連続ホームランに満塁ホームランと,話題にこと欠きません.不景気で鬱々としている昨今,オオタニサンの活躍は胸がスッとします.

5月12日

お天気は下り坂だそうです.

上島竜兵

大きな話題になりました.ダチョウ倶楽部の上島隆平が亡くなったという知らせ.享年61歳,まだ若いのに,寂しいニュースです.コロナ禍で芸にも制限が加わり,いろいろ悩んでいたんですかね.真面目な方だったんでしょう.ご冥福をお祈り申し上げます.

APEX募集

ゴールド,シルバー,ブロンズなどのトレンドが並ぶ右上のクラスタ,読み解くのが難しかったのですが,どうもApex Legendsというゲームの新シリーズが始まるので一緒に遊ぶメンバー募集,ということらしい.プレイヤーのランクがゴールドやらシルバーやら,ということなんでしょう.合ってる?

ノーヒットノーラン

ソフトバンクの東浜投手がノーヒットノーランを達成したというニュースです.今年は,完全試合だのノーノーだの,投手の活躍が目立ちますね.何か投手に有利になるようなルールの変更があったんでしょうか?投手戦は緊迫感がありますね.私自身は,両チームがボコスカ打つ乱打戦のほうが好きですが……

5月13日

今日は13日の金曜日ですよ.

ウマ娘キャラ診断

ウマ娘ってゲームだけじゃなくてアニメもやってるんですね.それで歴代名馬の馬名が並んでいるので,あ,これはウマ娘なんだな?ってすぐに分かりますが,密結合の具合から,はてこれは診断系では?とおもい調べてみると,ウマ娘キャラ診断というゲームでした.

睡眠クロノタイプ診断

珍しく診断系が二つ重なりました.こちらは睡眠クロノタイプ診断というものです.睡眠のタイプを何々型ですと診断してくれるというもの.あまり面白味を感じないのですが…… 失礼.

細田博之

また議員の失言です.「給料月に100万円しかもらっていない」だそうです.いいんですよ?有能ならね.以下,ノーコメント.

5月14日

昨夜少し飲みすぎました.二日酔い気味です.

楽天モバイル

楽天モバイルが料金プランを改定したというニュース.月に1GB以内の利用であれば0円というプランを修正.フリーミアムというビジネスモデルがあるのでそれ自体は悪くないと思うけれど,「正直0円で利用してもらっても困る」とぶっちゃけるのは,ちょいとかっこ悪くないかい?

ローマの休日

金曜ロードショーで「ローマの休日」が放送されたそうです.金ローはときどき話題クラスタになります.オードリー・ヘップバーン.いまでも根強い人気を誇ります.素晴らしいですね.

弦月藤士郎3D

こじらせハラスメントというものらしいんですが,アニメですか?これがよくわからない.誰か詳しいかた教えろください.

5月15日

海外では脱マスクが進んでいるようですね.

フロイニ

From INI というラジオ番組でしょうか.ANNといい,今日も一日〇〇三昧といい,ラジオ番組が大きなクラスタを作るケースがしばしばみられます.Twitterとラジオは相性がよいのでしょうか.

競馬

そして昨日は土曜日でしたので,競馬のクラスタもできています.東京のメインレースは京王杯スプリングカップというレースだったようです.GIIレースですね.メイケイエール号が優勝したとのこと.

🦀さん復活

そしてこれがよくわからないんですが,どうもゲーム実況系?のYouTuberでレトルトさんというかたと🦀さんという方のアカウントが凍結されて,また復活したというような,そんな出来事があったようです.絵文字もトレンドになるというのはちょっと面白い.

5月16日

どうにもはっきりしない天気ですね.

競馬

日曜日の競馬はヴィクトリアマイル,GIレースでした.エメラルドグリーンでしょうか,大きなクラスタができています.勝ったのは白馬のソダシ.マイルまでの短いレースは得意とのことです.次は買ってみようかな.

プリキュア

今日のニチアサはプリキュアのようです.巨大プリンやフルーツパーラーなど,美味しそうな話題が満載です.

オオタニサン

そして大谷選手.ホームラン,通算100号が出たと思ったら二試合連続で101号.もうすごすぎて何とコメントしてよいやら.元気をもらえますね.

5月17日

訃報が続きますね.

河村亮

日テレの河村亮アナウンサーが急死というニュースです.54歳,まだまだ若い,というか私とそう歳かわらんじゃん.ご冥福をお祈り申し上げます.

茶番劇

これがよくわからないんですが「ゆっくり茶番劇」とかいう文化があって,東方Projectに出てくるキャラクターに音声合成で声をあてて新たな作品を作ってどうこうというものらしいのですが,それでちょいとちやほやされたYouTuberが図にのって「ゆっくり茶番劇」を商標登録したから使いたいならライセンス契約して10万円払いな?」などと無茶苦茶なことを言い出したら元祖が出てきてフルボッコ←イマココ,みたいな展開?いずれにしても,人の褌で相撲を取ってるくせに恥ずかしいやつだなあ,ってことで合ってますでしょうか?

関ジャニ∞

関ジャニ∞,7枚目のNewシングル「喝采」が7月6日リリース決定,というニュースです.ジャニーズは強いな.ところで関ジャニ∞はいま何人いるんでしょうか.ジャニーズのグループ,不祥事やらなんやらでポロポロと人数が減っていきますね.

5月18日

初夏の快適さが戻ってきました.

4630万円

山口県で町役場のうっかりさんが4630万円を誤送金してしまいさらに送金された男性が「ネットカジノで溶かしちゃったからもう返されへんねんもーん」と開き直っているとかいう,なんだか事実は小説より奇なりというポンコツなニュースがぶすぶすと燻っています.さて真相はいかに?

ファミマで初夏のホロ祭り

ファミリーマートがVTuberグループ 「ホロライブ」とコラボし,「hololive×FamilyMart #ホロマート 初夏のホロまつり」というキャンペーンを5月17日から開始したというニュースが話題です.が,正直,よくわかりません.

佐久間大介

アイドル案件です.Snow Manの佐久間大介が,一晩で黒髪からピンク髪にしたというニュース.「ピンクおかえり」とSNSで大反響,ということらしいです.錦鯉のまさのりさんではないが,どうせ皆こうなるのよ?と白髪頭の私は声を大にして主張したい.

5月19日

犯人はヤス.

SixTONES高地優吾

SixTONESの高地優吾が「夏の夜の夢」という舞台に出演というニュースです.日刊スポーツの記事に載っている役者の雁首写真をみると,ひとりだけ茶髪でチャラいやつがいますね.そう,こーちくんです.がんばれー

嫁募集ツイートメーカー

診断系,shindanmakerです.やってみました.「嫁募集・20代・色白・厚化粧NG・Eカップ・160cm以上・面白い・アウトドア派・甘えさせてくれる」だそうです.くだらない.

SixTONES「わたし」MV

SixTONESの話題が被りました.公式ツイッターによると,SixTONES「わたし」Music Video 100万再生ありがとうございます✨💐,だそうです.人気ですね.

5月20日

徐々にコロナ前の生活が戻りつつある感じがしてきましたね.

田口容疑者

昨日の大きなニュースは,山口の4630万円誤送金事件です.田口翔容疑者が逮捕されました.役場で誤送金しちゃった担当者のほうが注目されていませんが,それでいいのかな?って.ミスにしても度が過ぎるので,きちんと検証すべきではないのかな.

フランクフルト

サッカーの話題です.長谷部選手と鎌田選手が活躍したチーム,フランクフルトがヨーロッパリーグで優勝したというニュースです.野球の話題が多いTwitterですが,たまにサッカーの話題が盛り上がることもありますね.

ウマ娘

ウマ娘のゲームで新しいなにかがあったようです.

この他に,昨日は維新の藤巻健太が「高校では三角関数より金融経済をやるべきだ」みたいな発言をして,ネット上で大炎上,フルボッコという話題が目を惹きました.ふざけたこと言うんじゃないよっていう感想です.ほんとボンボン議員(議員一族らしい)ってどうしようもないわ.

2022年5月18日水曜日

ルービックキューブ・シミュレータ

ことの発端は,ねとらぼの記事だった.

ルービックキューブは「2次元」にすると分かりやすい……? 画期的な動画が「天才的発想」「すごいことをしていることだけ分かった」と話題

記事で紹介されているTwitterに投稿されたGIFアニメがとてもよくできている.ルービックキューブを操作する3次元の動きを2次元上の同心円にマップしたら,分かりやすいんじゃないか,というアイデアをアニメーションで具現化したものである.

たしかにとても分かりやすい.ん?分かりやすい?気がする.たしかにくるくる回す操作を円上の移動で表現すれば,何が行われているのか一目で把握することができる.

しかし,「すごいことをしていることだけが分かった」という感想は,しごくもっともなものである.たしかに,これを見ていると分かった気になるのだが,いかんせん,アニメーションの動画が速すぎて,何が行われているのかさっぱり分からない.

そこで,これ,自分で動かせれば分かりやすくなるんじゃね?と,思いたって作ったのが,この,ルービックキューブ・シミュレータである.https://www.iiojun.com/RubiksCube/ にアクセスすると遊べるので,ぜひ,試してみて.

右側の矢印ボタンで,ルービックキューブを操作できる.青のボタンが上の同心円,緑のボタンが左の同心円,赤のボタンが右の同心円に対応する.それぞれ,外側,真ん中,内側の円上のコマを操作できる.

右矢印で時計回り,左矢印で反時計回りである.回す方向を間違えないように.クイックハックで作ったので,アニメーションはしないが,注意深くみればきちんと操作できていることが分かるだろう(アニメーションさせるようにするのはさほど難しくなさそうなので,そのうち時間ができたら改造してみようかな).

さて,これで動作を確認すれば,ルービックキューブの仕組みが分かるだろう……と思ったものの,実際にやってみたら,これがなかなか難しい.ルービックキューブのパズルって,本当によく考えられたものだと改めて感心した.

こんな状態までぐちゃぐちゃになったら,とてもじゃないが自分では元に戻せない……

ちなみに,マジもんなシミュレータはこちらにある.私が作ったおもちゃのプログラムなんて泣いて逃げ出すレベルの凄さです.

2022年5月10日火曜日

5月上旬の話題まとめ

5月1日

いよいよ5月ですね.

あなたをファンタジーRPGのNPC化

密結合の塊は(競馬でなければ)典型的な診断系ゲームです.今回は「あなたをファンタジーRPGのNPC化!!」というテーマ,4ndan.comです.「〜に例えると」ですらない.NPCっていうのは Non Playable Character,つまり,コンピュータが操作するようなキャラクターのことですね.

競馬

競馬は東京競馬と阪神競馬のクラスタが2つ,できました.どちらも茶色いクラスタになったのは,たまたまです.

AZUNA

これもまたよくわからないので教えてください.アニガサキ?虹が咲?ラブライブという言葉もみえるので,アニメですね?ラブライブ関係のアニメーションということでしょうか.このジャンルは全くわかりません.

5月2日

連休の谷間,皆さんいかがお過ごしですか?

天皇賞

昨日は春の天皇賞でした.ちょっと珍しいアクシデントがあったようですね.シルバーソニックに騎乗していた川田騎手がスタート直後に落馬,シルバーソニックはそのまま3,200mをカラ馬で駆け抜け,見事2着でゴール……って,騎手が乗っていないぶん有利なわけですが,それにしても騎手が乗っていないのに自ら3キロ強を走り切ったというのがすごい.

ALGS

ゲームの大会ですね.というか,今風にいえばeスポーツですか.Apex Legends Global Series という世界大会です.日本から4チームが出場して,盛り上がっていたようです.

BTS三昧

NHK-FMラジオがときどきやる「今日は一日〇〇三昧」はかならずTwitterの話題クラスタになります.それも大きな.まあ,楽曲の名前を皆がツイートするから,自然とそうなるということでしょう.で,昨日はBTS三昧でした.BTSも人気ありますね.

5月3日

連休後半の天気はどうでしょうか?

GWの谷間

昨日は月曜日,平日で大型連休の谷間ということでした.珍しく我が社も臨時休業日ということだったのですが,オンライン会議が1つ,リアルな会議が1つあり,小金井まで出かけていきましたよ.まあ,いい気分転換になりましたが.ところで話題クラスタは連休繋がりということでしょうか,eスポーツの話題と繋がってしまいました.閾値を低くしたので,こういうことも起こり得ます.そこはご容赦を.

オシム訃報

サッカーの日本代表チーム監督を務めたこともあるイビチャ・オシムの訃報です.私はサッカーに興味がないので,気の利いたコメントのひとつもできないのですが……,ご冥福をお祈りいたします.

地震

京都南部を震源とする地震があったようですね.関西を中心に話題になっていたようです.日本は地震国なので,震度4程度では驚きません.とはいえ,大きな地震が来てもらっても困りますが.

5月4日

今日はみどりの日.新緑が綺麗です.

Apex

真ん中に位置する,フラットラインだのレプリケーターだののトレンドがよくわからなくて,追いかけてみたらApex Legendsというゲームの話題のようです.新しい武器?なんだかよく分かりませんが,話題になっていました.

かきつばた記念

地方競馬,名古屋競馬のかきつばた記念というレースですね.中央競馬だけじゃなくて地方競馬にも手を出すのか!ツイッタラーの皆さんはw.このかきつばた記念,中央との交流レースなんですか?中央のほうが上,ということもないんでしょうが,地方競馬うまが中央の馬をやっつけた,みたいなニュースでした.

地震

最近,地震が多いですね.京都で地震があり,東京でも地震がありました.昨日の東京の地震は震源地が小金井のあたりだったそうです.ただし震源地が160kmとたいへん深い.夜にその地震があったころ,私は調布の深大寺あたりにいて,震源地にとても近いところにいました.でも,あ,地震?というくらいだったかな.

5月5日

連休もそろそろ終わりに向かっています,寂しいねー

ラブライブ三昧

ごっついクラスタができていました.NHKのFMラジオで「今日は一日ラブライブ三昧」という番組をやっていたせいです.三昧シリーズはいつも大きな話題クラスタになりますね.それもかなり密結合の.それは曲名を皆さんが羅列するからです.

クトゥルフ神話

こちらは診断系です.4ndan.com で「あなたをクトゥルフ神話の神格化!!」だそうです.ファンタジー系も人気ですね.そういうの好きな層が喰いつきそう.

刀ミュ

そして刀剣乱舞です.刀ミュっていうのはミュージカルですかね.声優さんたちが歌って踊って,という感じ?毎度,突っ込んでおりますが,私は刀剣乱舞よりは工具維新派です.もっとも,とうの芸人たちは飽きてしまったようで,最近はもう工具維新のコント,やらなくなっちゃいましたね.

5月6日

珍しく今日は私も休みです(が,自宅でテレワークモード.結局ずっと働いてました)

Invest in Kishida

インベスト・イン・キシダだか岸田に投資だかしらないけど,結局のところ賃金をグァーッと上げれば金利上げられるし緩やかなインフレは許容範囲になる.そしたら円安は止まるし,それで一気に問題解決なのでは?

BTS Proof

BTSの新アルバムProofが発表になって,スタンダードとコンパクトという二種類が設定されていることがわかったとかなんとか.BTS,世界的に人気なんですね.

渡辺裕之

訃報です.俳優の渡辺裕之さんが亡くなりました.享年66歳,私はよく知りませんでしたが,ファイトー!イッパーツ!の宣伝でお馴染みの方だったんですね.ご冥福をお祈り申し上げます.

5月7日

昨日は休みの予定だったのに……(呼び出されました)ぎゃふん

大野雄大

昨日の中日 - 阪神戦では,中日の大野投手が9回まで完全投球,すなわち打者27人全員をアウトにするという好投を見せたものの,打線が振るわず延長戦になり,10回に打たれて完全試合ならず,という状況だったそうです.中日打線が残念ということでしょうか.阪神の投手も頑張りました.

連休明け

今年のゴールデンウィークは,2日と6日をお休みにすると10連休という大型連休だったわけですが,昨日は出勤したという方々も多かったようです.私も休みに,というか自宅で仕事をする予定だったのですが,呼び出されてしまい出勤しました.

あなたをコロッケに例えると

診断系です.4ndan.com です.あなたをコロッケに例えると,だそうです.毎回,よう考えますなあ.なんでコロッケ?と思いきや,5月6日はコロッケの日だからですね.

5月8日

10連休だった皆さんは本日が最終日ですね.

競馬

競馬のクラスタがたくさんできていました.右上の黄色は中京,メインレースは京都新聞杯でしょうか.中央のピンクは東京です.プリンシパルステークスというレースがメインレースですか.両者に比べると小さめのクラスタですが,新潟競馬のクラスタもできていました.

INI

グローバルボーイズグループINIというアイドルグループが担当するTokyo FMの番組「From INI」が話題です.このINIというグループを寡聞にして存じ上げなかったのですが,韓国のBTSに対抗して日本でも!ということなんでしょうか.うまくいくといいですね.

スクールアイドル

TVアニメ「ラブライブ!虹ヶ咲学園スクールアイドル同好会」が人気です.私にはよくわからない世界ですが,根強い人気があるようですね.

5月9日

大型連休も終わりました.今日からまたいつもの日常です.

NHKマイルカップ

昨日の東京メインレースはG1のNHKマイルカップでした.1着4番人気2着3番人気と1-2位はそこそこ順当だったものの3着に大穴が飛び込んできて3連単は153万馬券という素敵な展開だったようです.100円の馬券が153万円.1000円買ってれば1,530万円.夢がありますね(穴オヤジ並感).

Kentucky Derby

昨日はもうひとつ,海外競馬のニュースも飛び込んできました.現地時間7日(日本時間8日朝)に米国で行われたケンタッキーダービーです.こちらは繰り上がりで出走した最低人気の馬が1着になったそうで,こちらも大波乱です.夢がありますね(穴オヤジ並感,本日二度目).

F1

F1レースの話題です.マイアミグランプリの予選が行われたのでしょうか.日本人の角田選手も活躍しているようですね.

5月10日

昨日は連休明け初日からフルスロットルでした.

GW明け

予想されていたことですが,「GW終わった」「連休オワタ」等の繰言がたくさん投稿され,大きなクラスタを作りました.みなさん,お仕事頑張りましょうね.私も,連休明け早々に,朝から晩まで馬車馬のように働きましたわ.

グリーン券詐取

元参議院議員が現職国会議員を騙り,新幹線の特急券とグリーン券を詐取しようとしたというしょぼい犯罪の話題です.ホンマ,どうしようもない連中ですなー.誰ぞが,議員なんて特権与えず抽選で選ぶようにしたらええんや,と仰ってましたが,本当にそう思います.

F1

昨日に引き続きF1の話題が盛り上がっています.昨日は予選の話題,今日は本戦ということでしょうか.話題を紐解いてみると,初開催マイアミGPでフェルスタッペンが2連勝した,ということらしいです.

2022年5月8日日曜日

感性評価システムの実装

学生が「映画ポスターの感性評価をしたい」というので,簡単な感性評価システムを作った.バックエンドは以下の手順で簡単に作成できる.

RailsアプリをAPIモードで作成

以下の手順でRailsアプリを作成する.なお,下記の赤字部分,生データを用意する手順は本記事では省略する.

$ bundle init

$ bundle config set path vendor/bundle

$ sed -i -e 's/# rails/rails/' Gemfile

$ bundle install

bundle exec rails new . -f --api

bin/rails g model poster title:string url:string

bin/rails g controller posters_controller index

bin/rails g model evaluation poster:references arousal:integer valence:integer

bin/rails g controller evaluations_controller create

bin/rails db:create

bin/rails db:migrate

(db/seeds.rb に映画データのシードを用意しておく)

$ bin/rails db:seed

次のように,コントローラはごく簡単でよい.APIモードのアプリなのでビューは作らない.なお,今回の例は同時に3つのポスターを評価するという前提である.

app/controllers/posters_controller.rb を次のように記述する.

class PostersController < ApplicationController

  def index

    @posters = Poster.all.sample(3)

    render json: @posters

  end

end

実に単純で,Posterテーブルに格納された全てのデータから3つのデータをランダムサンプリングして提示するだけである.APIモードで作っているので,クライアントにはJSON形式でレスポンスが返る.

続いて app/controllers/evaluations_controller.rb である.今回は実験用の単純なアプリなので,ストロングパラメータの取扱いなどは全て省略している.もう少し上手な書き方がありそうだが,とりあえずのquick hackである.

class EvaluationsController < ApplicationController

  def create

    arousal = [ params['arousal_0'], params['arousal_1'], params['arousal_2'] ]

    valence = [ params['valence_0'], params['valence_1'], params['valence_2'] ]

    posters = [ params['posters_0'], params['posters_1'], params['posters_2'] ]

    i = 0

    while i < arousal.length do

      e = Evaluation.create(arousal: arousal[i], valence: valence[i])

      p = Poster.find(posters[i].to_i)

      p.evaluations << e

      i += 1

    end

    redirect_to root_path

  end

end

app/models/poster.rb にも一行(has_manyの行)追加する.

class Poster < ApplicationRecord

  has_many :evaluations

end

ルーティング設定(config/routes.rb)は以下の通りとする.

Rails.application.routes.draw do

  root "posters#index"

  resources :evaluations, only: [ :create ]

end

以上でバックエンドの基本的な準備は終了である.これを,SSL対応で動かすとか,developmentモードのままで運用する際に手配しなければならない手順などについては,後述する.

フロント側のコード

フロントエンドは単純なHTML/CSS/JavaScriptによるシンプルなSPA(Single Page Application)である.バックエンドとはAJAXで通信する.

JQuery,JQuery-UI,Bootstrapを使用している.必要なライブラリは全て今回デプロイしたサーバにダウンロードして使っている.それぞれを利用時にCDNから直接ダウンロードするようにしてもよい.どちらでも構わない.

まずHTML(rp.html)である.

<!DOCTYPE html>

<html lang="ja" xml:lang="ja" xmlns="http://www.w3.org/1999/xhtml">

<head>

  <meta charset="utf-8" />

  <meta name="viewport" content="width=device-width, initial-scale=1" />

  <meta name="keywords" content="" />

  <meta name="description" content="" />

  <title>RandomPoster</title>

  <!-- for Bootstrap 5 -->

  <link rel="stylesheet" 

        href="bootstrap-5.0.2-dist/css/bootstrap.min.css">

  <script src="bootstrap-5.0.2-dist/js/bootstrap.bundle.min.js"></script>

  <!-- for jQuery & jQuery-UI -->

  <link rel="stylesheet" href="jquery-ui-1.13.1/jquery-ui.css">

  <script src="jquery-3.6.0.min.js"></script>

  <script src="jquery-ui-1.13.1/jquery-ui.js"></script>

  <!-- for this application -->

  <script src="rp.js"></script>

  <link rel="stylesheet" href="rp.css">

</head>

<body>

  <div class="container">

    <h1>Emotional Analysis on Movie Posters</h1>

    <div class="row mb-3">

      <div class="col-4">

        <img class="col-12" id="image-0" src="poster.gif">

        <div class="row">

          <div class="col-4 text-left my-2">High ←</div>

          <div class="col-4 text-center my-2">覚醒度</div>

          <div class="col-4 text-end my-2">→ Low</div>

        </div>

        <div id="slider-a0"></div>

        <div class="row">

          <div class="col-4 text-left my-2">Positive ←</div>

          <div class="col-4 text-center my-2">感情価</div>

          <div class="col-4 text-end my-2">→ Negative</div>

        </div>

        <div id="slider-v0"></div>

      </div>


      <div class="col-4">

        <img class="col-12" id="image-1" src="poster.gif">

        <div class="row">

          <div class="col-4 text-left my-2">High ←</div>

          <div class="col-4 text-center my-2">覚醒度</div>

          <div class="col-4 text-end my-2">→ Low</div>

        </div>

        <div id="slider-a1"></div>

        <div class="row">

          <div class="col-4 text-left my-2">Positive ←</div>

          <div class="col-4 text-center my-2">感情価</div>

          <div class="col-4 text-end my-2">→ Negative</div>

        </div>

        <div id="slider-v1"></div>

      </div>

      <div class="col-4">

        <img class="col-12" id="image-2" src="poster.gif">

        <div class="row">

          <div class="col-4 text-left my-2">High ←</div>

          <div class="col-4 text-center my-2">覚醒度</div>

          <div class="col-4 text-end my-2">→ Low</div>

        </div>

        <div id="slider-a2"></div>

        <div class="row">

          <div class="col-4 text-left my-2">Positive ←</div>

          <div class="col-4 text-center my-2">感情価</div>

          <div class="col-4 text-end my-2">→ Negative</div>

        </div>

        <div id="slider-v2"></div>

      </div>

    </div>


    <button id="submit" class="btn btn-primary">送信</button>

  </div>

</body>

</html>

idの命名規則を少し工夫した.<img>タグによるポスターの表示,その下に覚醒度(arousal)と感情価(valence)を操作するスライダーUIが表示される<div>タグ部分,それぞれを,image-{#}, slider-a{#}, slider-v{#} と番号付きで設定している箇所がポイントである.このようにすることによって,JavaScript側からそれぞれをモジュールとして統一的に扱えるようにしている.詳しくはJavaScriptのプログラムと付き合わせてみてほしい.

<img>タグ部分は,AJAXでサーバ側から提供されるランダム提示の映画ポスターが配置される.非同期で通信が行われるため,通信待ちの間,表示されるプレースホルダとして"poster.gif"というアニメーション画像を用意した.このアニメーション画像で「Now loading……」というアニメーションを表示する.

JavaScriptのコード(rp.js)は次のとおりである.コード内の「(サーバ名)」部分は,運用するサーバのドメイン名を入れる.また,サーバとはSSLでAJAX通信をする前提であり,ポート番号は3443にしているが,これも事情に合わせて変更して構わない.

$( function() { // this function runs when the page is loaded


  // evaluation records

  var ers = [];


  // definition of the initialization function

  var init = function(data) {

    ers.length = 0; // ers <- [];

    data.forEach( (item, i) => {

      ers.push({ posters: item["id"], arousal: 5, valence: 5 });

      $( "#image-"+i ).attr("src", item["url"]);

      $( "#slider-a"+i ).slider({ min: 1, max: 9, step: 1, value: 5,

        slide: function(event, ui) { ers[i].arousal = ui.value; } });

      $( "#slider-v"+i ).slider({ min: 1, max: 9, step: 1, value: 5,

        slide: function(event, ui) { ers[i].valence = ui.value; } });

    });

  }


  // function definition callbacked when the submit button pressed

  $("#submit").click(function() {

    //convert 'ers' to 'params' for the server

    var params = {};

    ers.forEach( (item, i) => {

      params["posters_"+i] = item.posters;

      params["arousal_"+i] = item.arousal;

      params["valence_"+i] = item.valence;


      // set loading images

      $( "#image-"+i ).attr("src", "poster.gif");

    });


    // post the user's evaluation data to the server

    $.ajax({

      url: "http://(サーバ名):3443/evaluations",

      type: "POST", dataType: "json", data: params

    }).done(function(data) {

      // re-initialization must be performed after submit an evaluation

      init(data);

    }).fail(function(XMLHttpRequest, textStatus, errorThrown) {});

  });


  // initialization must be conducted at the end of resource loading...

  $.ajax("http://(サーバ名):3443", { dataType: "json" })

   .done(function(data) {

     init(data);

  });

});

このプログラムは,初期化する関数 init() と,送信ボタンをクリックしてコールバックする無名関数による実装から構成されている.

スライダーを操作した値は,配列 ers に格納される.ers の中身は,[ { posters: X0, arousal: Y0, valence: Z0 }, { posters: X1, arousal: Y1, valence: Z1 }, { posters: X2, arousal: Y2, valence: Z2 } ]というように,対象となるポスターのid番号,arousal と valence の値が格納される.

init() では,AJAXでサーバにポスターの情報をリクエストする.サーバからデータを受信すると,ers.push({ posters: item["id"], arousal: 5, valence: 5 })というように,ポスターのid番号が設定され,arousal と valence は標準の5に指定される(min: 1, max: 9, step: 1なので,中央の値は5である).続いて,<img id="image-{#}">と<div id="slider-[av]{#}"> がそれぞれ設定される.これでサーバから受信したデータに基づいて画面が構築される,という具合である.ここで,先ほど述べたidの工夫が生きていることがわかるだろう.

送信ボタンのクリックで呼ばれるコールバック関数も,さほど複雑なことをしているわけではない.ers がオブジェクトの配列であること,パラメータの表記が若干異なることを吸収するために,データ形式を若干,変換してからPOSTしているだけである.なお,その際,POSTする前にプレースホルダを "poster.gif" に置き換えているので,ここで通信の遅延が生じても,ローディングイメージが表示されるのでユーザフレンドリーなインタフェースを提供できている.

データがサーバに無事ポストされれば,それで1回の評価は終了である.すぐに次の評価に移れるように,init(data)をし直して初期状態に戻る(映画ポスターはランダムに選ばれるので,画面は変化する).POSTした後のサーバ側で,redirect_to root_path している点もミソである.この記述をしているので,POSTのレスポンスとして新たなランダムデータがJSON形式で送り返される.それを再描画すれば,新しい画面になるという寸法である.

おまけのようなCSS(rp.css)は次のとおり.

#slider-a0 .ui-slider-handle { background:#0088ff; border:2px solid #000088; }

#slider-v0 .ui-slider-handle { background:#0088ff; border:2px solid #000088; }

#slider-a1 .ui-slider-handle { background:#0088ff; border:2px solid #000088; }

#slider-v1 .ui-slider-handle { background:#0088ff; border:2px solid #000088; }

#slider-a2 .ui-slider-handle { background:#0088ff; border:2px solid #000088; }

#slider-v2 .ui-slider-handle { background:#0088ff; border:2px solid #000088; }

ui-slider-handle が標準だとはっきりしないので,そこに色をつけるだけのものである.まとめて設定できるはずだが,うまくいかないので個別に指定している..ui-slider-handle というクラス指定子だけでまとめて設定できないのは何故だろう?(要確認事項)

サーバへの配備

フロントのコードはまとめてApacheウェブサーバのドキュメントルート以下に配備.Rails側は3443ポートで動作させる.ただし,CORS対策の設定やBlocked hostの対応など,少し,準備が必要である.

CORS対策として,まず,Gemfileに次を追加し,bundle install する.

gem "rack-cors"

config/application.rb に以下を追加する.これでCORSへの対策はOK.

    config.middleware.insert_before 0, Rack::Cors do

      allow do

        origins "*"

        resource "*",

          headers: :any,

          methods: [:get, :post, :options, :head]

      end

    end

  end

Blocked host の対策として,config/environments/development.rb に以下を追加する.

  config.hosts << "(サーバ名)"

また,サーバをSSLで通信するように起動する方法として,config/puma.rb にその設定を記述するという説明がネットで散見されるが,どうしてもうまくいかなかったので,次の方法でサーバを起動することで対応した.キーと証明書は,Let's Encrypt で取得したものをコピーして使用している.このあたりも,きちんと対応する必要があろう.とりあえずはこれでOKかもしれないが.

$ bin/rails s -b "ssl://0.0.0.0:3443?key=(キー)&cert=(証明書)"

以上で準備OKである.rp.html へアクセスすると,次のようなアプリを利用できる.