Volatile memory

物覚えの悪いわたしの、備忘録的な技術系ブログです。

何語で書くか?

ヨットというちょっと洒落たチンチロリンAndroidで動かす話の続きです。

一昔前はAndroidといえばJavaだったんですが、 今どきはいろんな選択肢があるようです。

せっかくC#で書いたんだからXamarinするだろとか思ったんですが、 せっかくAndroidでやるのにC#やだなーとか

わたし、Kotolinなんですよねー。

あ、プログラミング言語を使う人ってなんか呼び名あるじゃないですか。 有名なとこではLispプログラマをLisperと呼ぶとかそういうのです。 「言語 プログラマー 呼び名」ぐらいでググるとまとめがいっぱい出てきます。

HaskellerとかRubyistとか、だいたい「何々する人」なので「er」とか「ist」とかをあとにくっつけます。 個人的にはJavaだったらジャバラ―だろうとか思うんですがあまり同意してもらえることはないです。

Rustaceansなんていうのもありますね。カニの類らしいです。 防御力高そうですね。

防御力といえばスカラは防御力を上げる魔法ですね。 こっちも強そうです。

そこいくとKotlinは弱そうですね。 握力弱くてビールの栓抜けないみたいな。 ちなみにKotlinする人はKotlinerだそうです。

でもKotlinする人はKotlinでよくないですか? 「みぽりん」みたいなもんですね。

かわいいので流行るといいな―。 なんてどうでもいいことを今日も考え…

そうじゃないですね。 Androidでヨットを動かすのに、Kotlinで書きたいな―とかそういう話です。 呼び名とかわりとどうでもいいです。

最近Intellij Ideaを最新のやつにしたんですよね。 Toolboxとかってボタン一つで更新してくれるんで気軽にやっちゃいますね。

さっそくAndroid用のプロジェクトを作りましょう。

新規プロジェクト作成…

なんじゃこりゃ?

AndroidのAの字も見当たりません。

気軽にアップデートしたらダメですね…orz

スマホでヨットやりたい

と、思いませんかぁ♪

井上陽水ですね。

えーっと、PC用にヨット作ったんですけど、 あ、意味不明ですね。セレブがパーティする豪華な船とかじゃなくて 地味にサイコロ転がすゲームです。 家にサイコロがなかったのでアプリつくっちゃったんですね。

あ、Bitwardenは地味にやろうとしてます。

急に脈絡のないこと始めることがあります
こんな私だけど笑って許してね
ずっと大切にしてね
永久保証の私だから

西野カナですね。

すみません、新しいこと始めようとしました…

話は戻るというかヨットなんですけど、 PC使ってる時って他にすることあるじゃないですか。 だったら電車乗ってる時とかちょっと手持ち豚さん…

はい、狙いましたね。 流行るかなとかちょっと思ってます。

まあ、そういう時にスマホでできると便利じゃないですか。

えと、わたしのばあいAndroidなのでiPhoneの方ごめんなさい。

…特にそれで困る人いないですね。 iPhoneにはもっと面白いアプリがいっぱいあります。

Androidにもありますね。 っていうかヨットもあるかもですね。

調べてみましょう。

play.google.com

30個ぐらいありますね。

じゃあ、31個目作りますか。

もうちょっとでランキングが成立しそうなのでこれも貼ってみます。

最強のパッスワードを求めて。

Bitwardenにさんざん脅された*1ので、強力なパスワードを作りたいと思います。

パッスワードになっちゃいましたがただの打ち間違いです。 そのままにしといたら流行らないかなとか ちょっとだけ思ってます。

おすすめされた以下のサイトを見てみます。

www.makeuseof.com

英語です。 この業界ではありがちですね。 今回は、わたしの超訳でお送りしながらパスワード考えます。

パスワードをサービスごとに変えるのは今どきあたり前田のクラッカーだけどよ? そんなもんおっぼえらんねえだろ? ヒャッハー

モヒカン*2にしてはいいこと言いますね。 常識的です。

なのでた。俺様がプライスレスなバレねえパスワードの作り方教えてやンよ。

しかも親切です。

普通はこういう難しいことをずらずらいうわけだ。

10文字以上とか辞書に載ってる単語は使うなとか特殊文字使えとかそういうのが上げられてます。

俺様にいわせりゃ3つだけだ。

押尾先輩だったらこれで2個しか言わないとか大技かましてくるやつですね。 この先輩はちゃんと3つというか3ステップ言ってくれます。

すテップ1. 覚えやすい基本パスワードをキメる。

まずだ。お前が覚えやすくて他のやつはわかんねえ基本パスワードをキメろ。

と言われてもですが、ちゃんと具体的なキメ方も教えてくれます。

辞書からもってこい。

おっと、いきなり掟破りですね。上の方でやっちゃいかんと書いてあったやつです。

あっちこっちから適当に何個か選んでつなげ。

辞書どこいったかなー。 オンラインの適当なのでいいですかね。

KusuriyaNoWarumonoPeechan

こんな感じでしょうか?

歌詞をパクれ。

あんまりみんな知ってるのはダメだ。

うーん。

DarkSpiralOhNandodemoTatakau

こんな感じかな?

本からパクれ。

適当に一行パクってページ番号とかつけとくとあとから思い出したりしやすいそうです。

ShuppatsuShitaJikanKara62Byougo34

これで元の本わかる人とかちょっと嫌ですね。

まわりにあるもんについて書け。

YasumiNoHiNoHirumakaraNanisiteRundaro

オレオレ版Phonetic alphabet作れ。

B班からF班呼ぶのに「こちらBravo。Foxtrotどうぞ」とかいうのあるだろ?あれだ。

つまりA-Zから始まる自分の好きな単語をリストにしとくらしいです。 パスワード使うサービスの名前をそれに置き換えるとか。

なるほど。 これだったら一組作っとけばいろんなサービスに使えますね。 Bitwardenだったら、

BelldandyIndexTeruWagnariaAnzuReiDarknessEmiliaNonna

長いな…

すテップ2. ひねれ。

今作ったやつは覚えやすいだけでザコだ。ざぁこざぁこ♪

ちょっと嬉しくなりそうですね。

ひねって辞書に載ってないやつにすれば、バレねえ。

のだそうです。さらに具体的に教えてくれます。

母音をいじれ。

うちのお母ちゃんはボインやで―♪

失礼しました。

単に抜くとかザコだ。ざぁこざぁこ♪

いや、もういいです。

一個おきに抜け。

KsuryaNWarmonPechan

別もんになってきましたね。

母音最後に集めろ。

KsryuuiaNoWrmnauooPchneea

そこはかとなく打ちにくそうです。

aをeにしろ。

KusuriyeNoWerumonoPeechen

訛った感じになります。薬イェのウェルもの…

縮めろ。

これも4種類ぐらいあります。

最初の3文字抜け。

LdandyExUNariaUKnessLiaNa

最初抜くと違和感w

一個おきに抜け。

eladIdxeuanranueDrnsEiiNna

これさっきあったような…

最初と最後だけ残せ。

ByIxTuWaAuRiDsEaNa

カオスです。

最初だけ残せ。

BITWARDEN

これはダメですね。 組み合わせにご注意ください。

逆にしろ。

uakataTomedodnaNhOlaripSkraD

覚えれますかねこれ?w

Zipしろ。

日本語でなんていうんでしょう?

それぞれの単語の1文字目ならべて、次2文字目ならべて。だ。

関数系プログラマの人はおなじみですね。

SSJKBhhiayuikroptaaupan6g

覚えれるか?w

まあ、時間と紙があれば思い出すことはできるかもですね。

すテップ3. 数字と記号を入れろ。

定番のやつですが、 こいつが一番覚えにくいですね。

決まったやつを混ぜろ。

1セットだけオレオレ用作って覚えとけ。

オレオレルール系です。 なんか一個数字と記号の列作っておいて、 全部のパスワードに混ぜるんだそうで、

例えばこういうの決めておいて、

1$2%3^

こうですね。

B1yI$xTu2WaA%uRiD3sEaNa^

混ぜるのがめんどかったら尻尾につけるだけでもいい。

ByIxTuWaAuRiDsEaNa1$2%3^

これよくやるやつw

数えろ。

なんか数えてその数字をつけろ。

サービスの名前の母音と子音の数をつけるとか。

Bitwardenだと、母音は3個、子音は6個なので、

3SSJKBhhiayuikroptaaupan6g6

Motor Patternだ。

なんだそれ?

各単語の最初の文字を、 その文字のキーボード上の上と右にある数字と記号で置き換えるとかですね。

はい。わかりにくいですね。

元の文章のキーボードの図みろ。

元の文章でそんなこと言ってるわけないですが、見たほうがわかりやすいです。

例えば、Kだったら上たどっていくと「8」ですね。右にいくと「;」です。

なので、「K」を「8;」に取っ替えます。

8;usuriya6<o2[arumono0[eechan

尻尾につけるよりはいいですかね?

文字を数字や記号に置き換えろ。

置き換えパターンを独自にしろとか言ってます。

「a」を「@」にするとか「s」を「$」にするとかはザコだ。ざぁこ…

これも一個だけオレオレルールキメる系ですね。 「a」を「^」に「s」を「&」とか、個人的に決めちゃいます。

まず当たりません。と言ってます。

性格悪いですね。

上のやつに例で上げられてるパターンを当てはめるとこうなります。

8;u&ur[ya6<%2[^rum%n%0[eech^n

覚えれるかぁ!

いろいろ言ったけどさぁ、パスワードマネージャ最強。

おい。

というわけで、これで最強パスワード作って 最強パスワードマネージャーを使い始めようと思います。

*1:脅したのはBitwardenではなく説明ページですね。というか別に脅したわけではないですね

*2:モヒカンなのは元のページではなく、わたしの超訳ですね。ごめんなさい

よし、Bitwardenしよう。

ヨットで遊んでたのですっかり忘れてましたが、 Windows10が来年サポートが終わるとかで、 PC買い替えたらパスワード移行作業が大変だからパスワードマネージャーをどうとか。

そんな話を年末にしてたんですけどもう1ヶ月たってますね。

次に気づいたときはサポート終わってアワアワしてますね。 きっと。

そういうわけでこないだ探しといたBitwardenを使ってみようと思います。 年末にもそんなこと思ってサイト見に行ったんですけど、 英語ばっかしでいまいちどうしたらいいんだかわかりませんでした。

でも便利な世の中です。 ちょっとググれば日本語の解説が見つかります。

一番最初に出てきた日本語のサイトを見てみましょう。

これですね。 www.lifehacker.jp

これに沿ってやっていけば、 よくわかってないわたしでもなんかできるはず!

しばらくの間、無料のパスワードマネージャーといえば「LastPass」でしたが、

だそうで、最後の3つぐらいまで残ってましたねこれ。 なんか使いにくくなってるようです。 前にもこういうのありましたね。 Evernoteだったかな? まあ、無料なんでなんとも言えませんがなんだかなーと思います。

Bitwardenはそれ自体はOSSなので無料ですが、 サービスはいつまでも無料とは限りません。 でもOSSなら逃げ道はありますよね。 簡単ではないかもしれませんが。

パスワードマネージャーを選んだら、最初に登録をしなければなりません。

というわけで登録です。 説明ページにあるリンクからもいけますし、 ぐぐっても一番上にでるやつはだいたいおんなじとこに飛びます。

名前・メアド・パスワードを入れろと。 名前とメアドはいいとして、パスワード決めないとですね。

次にマスターパスワードを入力します。これは、パスワードマネージャーのロック解除をし、すべてのアカウントにアクセスできるものなので非常に重要です。

ビビらせに来ます。

したがって、マスターパスワードは強力かつ覚えやすいものにする必要があります。 助けが必要な人は、この強力かつ覚えやすいパスワードを作成する方法(英語)を参考にしてください。

参考にさせていただきましょう。

13 Ways to Make Up Passwords That Are Secure and Memorable

やっぱり英語ですねっ!

しかも13個って…

ヨットで遊んでみた!

瀬戸内クルーズとかそういう話ではないです。 サイコロ転がしてやるゲームです。 上品なチンチロリンだと思ってもらえればだいたいあってます。

でもこれ作った人はヨットでこれやってたからヨットという名前にしたとかで

まあ、わたしには関係のない話です。

お正月に動画でやってるの見て、 やりたいけどSwitchもサイコロもない。 それじゃパソコンでできるように作っちゃえ!

で、気づいたら正月終わってるやつです。

いろいろ終わってますねっ!

で、なんとか鏡餅のある内にできたのでさっそく遊んでみました。

一人で。(。_。`)チーン

みよ!この勇姿。

サイコロ振って、5をキープ!

でない!

でない!

しょうがない。ThreeDiceで22点かー。

なんて感じで遊びます。 で、延々と続けていくと、

ヨットというのが一番強い役で、5個全部そろうとかなんですが まあそうそうそろいませんよね。 こういうときはしょうがないのでそろってないけどヨット(Yacht)を選びます。 そろってないのに選ぶと0点になりま…

せんね。

例外が起こってしまいました。

        public void SelectYacht()
        {
            new List<int> { 1, 2, 3, 4, 5, 6 }.Single(n => Dice.Sum(s => s.Value == n ? 1 : 0) ==5);

            Select(YachtScore, 50);
        }

そうですね。そろってないとSingle()が例外を投げます。

そろってたら50点、そろってなかったら0点です。

        public void SelectYacht()
        {
            if (new List<int> { 1, 2, 3, 4, 5, 6 }.SingleOrDefault(n => Dice.Sum(s => s.Value == n ? 1 : 0) == 5) != 0)
            {
                Select(YachtScore, 50);
            } 
            else
            {
                Select(YachtScore, 0);
            }
        }

使ってみるの大事。

こんどこそ遊べるといいですね。

果てしないとあきらめてたらふと終わりが見えたり

ヨットの続きです。

例のとこのスコアを見ると、

kododigi.com

あれ?残りのやつって全部点数固定じゃん?

だったらそれ入れるだけじゃん?

あれ?もしかしてできちゃった?

そんな気がしたので一気にやります。 やってすぐ思ったのですが、ちゃんとチェックしないとずるし放題ですね。 そっちがめんどいです。

フルハウスの場合、3枚と2枚がないとだめなのでそれをチェックします。 で、例外が起こらなければ30点を入れるだけ。

        public void SelectFullHouse()
        {
            new List<int> { 1, 2, 3, 4, 5, 6 }.Single(n => Dice.Sum(s => s.Value == n ? 1 : 0) == 3);
            new List<int> { 1, 2, 3, 4, 5, 6 }.Single(n => Dice.Sum(s => s.Value == n ? 1 : 0) == 2);

            Select(FullHouseScore, 30);
        }

残りのも点数入れるとこは同じです。ヨットは5枚そろえばいいのでFourDiceとかと同じノリでいけます。

        public void SelectYacht()
        {
            new List<int> { 1, 2, 3, 4, 5, 6 }.Single(n => Dice.Sum(s => s.Value == n ? 1 : 0) == 5);

            Select(YachtScore, 50);
        }

難しいのはストレート系ですね。

ストレートに言っちゃえばこう。

        public void SelectSStraight()
        {
            var d1 = Dice.Any(s => s.Value == 1);
            var d2 = Dice.Any(s => s.Value == 2);
            var d3 = Dice.Any(s => s.Value == 3);
            var d4 = Dice.Any(s => s.Value == 4);
            var d5 = Dice.Any(s => s.Value == 5);
            var d6 = Dice.Any(s => s.Value == 6);

            if (((d1 && d2 && d3 && d4) || (d2 && d3 && d4 && d5) || (d3 && d4 && d5 && d6)) == false)
            {
                throw new Exception();
            }

            Select(SStraightScore, 30);
        }

だじゃれじゃないです。

さて、もしかしてひょっとして全部埋まった? これで晴れてヨットで遊べるのでしょうか?

わくわく。

全部足せばいいやつ

ヨットの続きです。惰性です。 ちなみにまだ一回もヨットで遊んでません。

点数表によると、Chance, ThreeDice, FourDiceは出た目を全部足せばいいようです。

なのでSelectNumber()をさらに分解して、 単に選ぶだけのSelect()というやつを作ります。 で、SelectNumber()をそれを使うように再定義して、 新たに全部足すやつ、SelectSum()を定義します。

        public void Select(Score score, int s)
        {
            score.Select(s);

            Reset();
        }
        public void SelectNumber(Score score, int n)
        {
            Select(score, Dice.Sum(die => die.Value == n ? n : 0));
        }
        public void SelectSum(Score score)
        {
            Select(score, Dice.Sum(die => die.Value));
        }

そうすると、SelectChance()はどんな目でもいいのでこれを呼ぶだけですね。

        public void SelectChance()
        {
            SelectSum(ChanceScore);
        }

ThreeDiceは同じ目が3つあるのをチェックしないとなのでそういうのを入れます。

        public void SelectThreeDice()
        {
            new List<int> { 1, 2, 3, 4, 5, 6 }.Single(n => Dice.Sum(s => s.Value == n ? 1 : 0) == 3);
            
            SelectSum(ThreeDiceScore);
        }

AllScoresとかFormのAllScoreLabelsとかに追加してあげると、こんな感じになります。

はい、あとちょっとでヨットで遊べます。

楽しみですね。