テナモバの「今日の一曲」の仕組みの予想と、システム開発者心得について思うところ
テナモバの「今日の一曲」の仕組みの予想と、システム開発者心得について思うところ
テナモバの「今日の一曲」の仕組みの予想と、システム開発者心得について思うところ
続き。
(前半はこちら)
ストレイテナー20周年企画トリビュートアルバム「PAUSE」における、
参加曲&アーティスト12の組み合わせのうち、正解の組み合わせ1つを当てる確率は、
理論値では1/12!=2.09×10-9であることがわかっている。
これは宝くじで1等を当てる確率の約1/50であり、むちゃくちゃ低確率である。
前回の記事では、これをシミュレーションしようとしてプログラムを作ったが、
低スペックマシン故に100億回試行するのに33時間かかるという
絶望的な処理予想時間をたたき出しため、
精度の高い実験は難しいことがわかっている。
しかしトリビュートアルバムの組み合わせクイズには、
6問以上正解者に対する個別プレゼントが用意されている。
直感的にも、「全問正解」に比べて確率が高いことは容易に予想ができる。
本項ではその「6問以上正解」の確率シミュレーションを実施する。
※書いてみて振り返ってみると、
「ストレイテナー」と銘打ったタイトルの割に、
中身は思った以上に数学(大した数学の話でもないが)・プログラムチックな話が多くなってしまった。
なのでそっち系苦手な方はご注意ください。
(あんまりテナーの話してません、という意味です。)
ストレイテナー20周年企画のトリビュートアルバム「PAUSE」には、
過去の12の楽曲に対しそれぞれ(テナー本人を含め)12のアーティストが参加する。
公式サイトではこれの組み合わせを当てる参加型クイズ企画が開催されている(2017年9月末まで)。
テナーファンのみなさんは過去の経験やアーティスト間の関係性等により皆予想をたてており、
実際そうした経験則や知識に基づく予想により、闇雲に選ぶよりは正解に近い組み合わせを導けるのは事実であろう。
しかしこれを「同様に確からしい」確率モデルとして評価した場合に、
正解である1つの組み合わせを導ける確率はいかほどのものか?を調査してみたくなった。
(やはり同様に仕事に飽きたので暇つぶしである。夜間はこういうことしてるほうが頭がさえるぜ。)
これは下記のツイートに基づきちょっとだけマジになって本格的に取り組んでみようと思い至ったことによる。
なんか数値間違えてるな😂
— rmブランクスラッシュ(rm) (@rm_blank_slash) 2017年9月1日
トリビュート全組合せ11!=39916800通り
その中で1つを当てる確率≒2.5×10^-8
はぐれメタルを仲間にする確率=1/256
だからはぐれメタルを155925匹仲間にするのと同じレベルの確率。
あっ最後だけ合ってる。(´・ω・`)
※ちなみに先に訂正しておくと、
このツイートでは「全組み合わせ数=11!=39916800」と書いているが、
よく見たらトリビュート曲数は12だったので、そもそも母数の捉え方に誤りがある。
よって全組み合わせ数は12!=479001600(4億7千9百万とんで1600)が正解である(やべええええええ)
【「ストレイテナーと確率」シリーズリンク集】
ストレイテナーと確率
ストレイテナーと確率2
ストレイテナーと確率3
ストレイテナーと確率4
ストレイテナーと確率5
ストレイテナーと確率6
ストレイテナーと確率7
ストレイテナーと確率8
ストレイテナーと確率9
Unix系OS パーミッションとそのときの各種コマンドの実行結果まとめ。
きっかけは、自分所有のディレクトリだとしても、実行権(x)がないとその配下に移動(cd;Change Directory)できないことを今更知ったことに起因する。
すげー今更なんだけど、実行権(x)持ってないディレクトリって中に移動出来ないんだね。ホント今更になって知ったわ。大体755か777だから気付かなかったか。まだまだ素人ですなあ〜#unix #cd #permission
— rmブランクスラッシュ (@rm_blank_slash) 2017年6月30日
身近にいい「文字化け」の題材を見つけたので、
これを元ネタに「文字化け」について改めて振り返る、という目的で、
少しこれを深堀してみる(深堀るほどのネタにもならないが…)。
まあどっちかというとこれを単純に好奇心と興味本位で追求したいという思いの方が強いのだが。
(仕事に飽きただけである)
ストレイテナー結成20周年を記念して開設された会員制モバイルサイト「テナモバ」。
当然のごとく速攻で入会したわけだが、まあ、それはいいとして、
この「テナモバ」では、「今日の一曲」というコーナーの中で、
日替わりでストレイテナーの楽曲を1つ紹介してくれる。
この「今日の一曲」だが、ツイッターのフォロワーさん方の報告等を見る限りでは、
「紹介される順番はアルファベット順になってんじゃないか?」という疑惑がうまれた。
少なくとも2017/8/16まではこのルールが適用されていたように思うのだが、
2017/8/17以降はこのルールが撤廃され、どうも完全ランダム性になったようだ。
(どうでもいいがこのことについて、裏でエンジニアが急きょ開発を任されたのでは…と予想している。事実だとすると同職としての思いもあり、なぜか同情してしまう)
まあ「完全ランダム性になった」というのもここ1日2日の紹介内容を見たうえでの経験的予想に過ぎず
実際裏でどんなロジックが動き、紹介される曲が選定されてるのかはわからないし、
同時に8/16までの「アルファベット順」というのも数日間の動向を見たうえでの経験的予想に過ぎないため、
要するにどこまでいっても「予想」の域を出ないのだが、
もし仮に「アルファベット順」だったとして、という仮定が成り立っていたとすると
どういう曲順で曲が紹介されていったのか?を論じてみたい。
これはどちらかというとプログラマとしてのソート順に関するロジック考察が主たる題材であり、
たまたまソートされる材料(各要素)に「ストレイテナーの楽曲」がいるだけの、
要するに仕事に飽きたことによる暇つぶしである。
まあ読み物として見ていただければいい。
Oracleシーケンスの現在値を一気に何番もカウントアップする方法のメモ
個人的に、基本INCREMENT BYが「1」の(=1ずつ採番していく)シーケンスをよく使うのでたまにこういうのが必要になるのである。
「SELECT TEST_SEQ.NEXTVAL FROM DUAL」を呼び出すたびにシーケンス値が1ずつカウントアップされていくため、
「10まで進めたい」と思ったらsqlplusとかでDBに接続した後「SELECT TEST_SEQ.NEXTVAL FROM DUAL」を10回投げればいいだけである。
ただこれが「100,000(10万)まで進めたい」だとそうはいかない。
そんなときに「一気に10万まで数字を進める」やり方である。
別にここであえて語るまでもないことだが、「ひなっち」とは、
ロックバンド「ストレイテナー」「Nothing's Carved In Stone」「Fullarmor」「Killing Boy」のベーシスト「日向秀和」氏の愛称である。
(以後、本項では「ひなっち」と記載させていただく)
ひなっちは基本毎日ツイッターで「おはっち」という挨拶を心がけており、
それに対してファン(フォロワー)のアカウントの方から「おはっち」と返信(リプ)をすると、
リプした順番に応じて(大体5位くらいまで?)ひなっちから「1番おはっちおめでとう!」というようなメッセージがもらえる。
フォロワーの方たちはひなっちのおはっちでいっちばん(一番)を取るべく
気合いをいれてツイッターでまちかまえているのだ。
これはライブ会場で先頭に赴く心情と近いものがあるのだろう(勝手な予想)。
で、この「ひなっちのおはっち」に対して、
というのを知りたくなったので、
Twitter4jというJavaのツイッターAPIを使ってひなっちのおはっちをさーちし、集計してみることにした。
本項ではそのためのTwitter4jのメモと、それをもとに作成した趣味用プログラム「ひなっちおはっちさーち」について記述する。
Twitter4j公式ページ:
http://twitter4j.org/ja/index.html
※ちなみに、Twitter4jを使うにあたっては、大前提で「APPアカウント登録」みたいな作業が必要になる。
ググれば出てくるが、https://apps.twitter.com/に行って、
指示に従って「APPアカウント登録」を行い、認証に必要な以下4つのプロパティ情報を取得のうえ、
Java実行環境と同階層に「twitter4j.properties」という名前で保存する。
oauth.consumerKey=************************* oauth.consumerSecret=************************************************** oauth.accessToken=************************************************** oauth.accessTokenSecret=*********************************************
あるいは-Dのシステムパラメータで設定するとか、
Java内でConfig設定用クラスを用いて設定するとか、
いくつか方法があるみたいではあるが、とりあえずこれで。
バージョンとか設定とかにもよるのかもしれないが、サクラエディタは、中途半端にブチ切れられたUTF-8の文字コードを上位サロゲートの一部と見做して文字コード表示してしまうらしい。バイナリエディタとかで中身を見ると実際のコードは違ったりする。
例えば「あ」だが、UTF-8では「E3-81-82」の3バイト。
これを無理やり「E3」「81」「82」の1バイトずつにぶった切って保存すると、
「E3」は「U+DCE3」
「81」は「U+DC81」
「82」は「U+DC82」
で表示される。
実験として「あ」を無理やり1バイトでブチきったときのスクリーンショット↓
「E3」部分
上位サロゲートはUnicodeでU+DC00~U+DFFFの範囲なので「E3」という1バイトが勝手に上位サロゲート範囲の文字の一部として扱われてしまっている。
UTF-8の1バイト文字のコード範囲は「00」~「7F」までなので、「E3」というバイトは定義外にあたるため、
エディタの都合上無理矢理サロゲート範囲に位置づけているという考えもなくはない。
そもそも「文字」としては表現できないコード値なので、テキストエディタにこれをちゃんとコード値で表現しろというのも酷な話な気がするが
最初は「なんで突然サロゲートなんか出てきてるんだ?おい?」と思って軽くビビった。