B.G、初めてひとりカラオケをする。

この記事は、B.G ひとり Advent Calendar 2018 1日目です。
B.G ひとり Advent Calendar 2018 - Adventar

今年も残り1ヶ月となり、特に今年は感慨深い年になったので、いろいろやってみようということで↑を立てました。

今日は、いろいろと考えていたことのひとつである、「ひとりカラオケ」にチャレンジしてきました。

当初は、ワンカラとかを考えていましたが、

ワンカラ|ひとりカラオケ専門店

料金が高いのと、オールする体力体調じゃなかったので、

昼のカラ鉄にしました。

ワンカラ|ひとりカラオケ専門店

とはいえカラ鉄も、行ってみてわかったのですが、この時期は特別料金で、御一人様は30分単位だけでフリーはやってないんですね・・・。

いろいろ準備してたものが使えなくなったので、いろいろ調整しながら3時間きっちり歌ってきました。

WANDSのシングルスコレクションだけで結構時間を使ってしまったので、アルバム曲は厳選に厳選を重ねました。

BRADIO椎名へきる坂本真綾水樹奈々、あと今季話題のグリッドマン新旧など、結局WANDS以外は、1、2曲になってしまいました。

ワンドリンクで3時間で2000円くらいでしたので、1杯で喉をもたせるのは苦労しました。

歌った後の採点では最高点が「MILLION MILES AWAY」の90点だったのですが、退店時のリストでは「星のない空の下で」が96点というのは意外でした。

僕の十八番の「世界が終るまでは・・・」や「Jumpin'Jack Boy 」が70点台なのがショックです・・・。

総じてやっぱり「WANDSは難しい」というのが浮き彫りになりました。

まあ全部原曲キーでしたし、原曲キーが2つ3つ上というのが多いんですよねWANDSは・・・。

ちょっと想定以上にコスパが悪かったので、今後は時間や料金も考えて再チャレンジしないとダメですね・・・。

以上です。

追記:

2000円超えていた原因が、3時間1分で30分ぶん取られていた可能性。
きっちり3時間じゃなかった・・・orz

Dependency Injection

Dependency Injection(DI、依存性の注入)は、コンポーネント間の依存関係を外部から注入できるようにしたパターン。

猿でも分かる! Dependency Injection: 依存性の注入 - Qiita

括弧で括った文字列を作るファクトリークラスがあるとして、括弧の種類を引数などで外部から指定(しかも定数よりオブジェクトなどで)できた方が依存性が低い。

これで、

(ABCDE)
delete brackets_
<VWXYZ>
delete brackets_

スマートに括弧の種類を差し替えられた。

Sample/designpattern/dependency_injection/dependency_injection/src/dependency_injection at master · bg1bgst333/Sample · GitHub

MVP

MVPは、MVCのControllerとPMのPresentationModelを合体したようなPresenterを使った手法。

MVCモデルの問題点を解決するPMモデルとMVPモデル - GeekなNooblog

処理内容はPMのバージョンと同じ。

class_custom_view::notify()
class_view::notify()
class_custom_presenter::changed()
class_custom_presenter::changed(), subject is view!
class_custom_model::func(1, 2)
class_model::notify()
class_custom_presenter::changed()
class_custom_presenter::changed(), subject is model!
()
class_presenter::notify()
class_custom_view::changed()
(1 + 2 = 3)
class_view::changed()
class_custom_view::notify()
class_view::notify()
class_custom_presenter::changed()
class_custom_presenter::changed(), subject is view!
class_custom_model::func(1, -2)
class_model::notify()
class_custom_presenter::changed()
class_custom_presenter::changed(), subject is model!
<>
class_presenter::notify()
class_custom_view::changed()
<1 + -2 = -1>
class_view::changed()

こちらも記号が変わった。

Sample/designpattern/mvp/mvp/src/mvp at master · bg1bgst333/Sample · GitHub

PM

PMは、PresentationModelという表示などに特化したModelが、ViewとModelの間に入るような手法。

MVCモデルの問題点を解決するPMモデルとMVPモデル - GeekなNooblog

1と2を渡して実行した場合は、足した結果が0以上なので数式を囲む記号としては"()"が使われる。
しかし、1と-2では、0未満なので記号"<>"が使われるという処理が、PresentationModelに入ってる。

class_custom_view::notify()
class_view::notify()
class_custom_controller::changed()
class_custom_model::func(1, 2)
class_model::notify()
class_custom_presentation_model::changed()
()
class_presentation_model::changed()
class_presentation_model::notify()
class_custom_view::changed()
(1 + 2 = 3)
class_view::changed()
custom_view_ptr->result_ = 3
class_custom_view::notify()
class_view::notify()
class_custom_controller::changed()
class_custom_model::func(1, -2)
class_model::notify()
class_custom_presentation_model::changed()
<>
class_presentation_model::changed()
class_presentation_model::notify()
class_custom_view::changed()
<1 + -2 = -1>
class_view::changed()
custom_view_ptr->result_ = -1

記号が変わった。

Sample/designpattern/pm/pm/src/pm at master · bg1bgst333/Sample · GitHub

@Test

JUnitは、Javaユニットテストツール。

EclipseでJUnitを使う方法(JUnit):技術空間

@Testで、テストメソッドを作って、通るか試す。
AddClass.javaで、

aとbを足した結果を返すadd。
MainClass.javaで、

addObj.addの結果を出力。
ここで、

testフォルダの追加
testフォルダの追加

testフォルダの追加。

新たなソースフォルダーとする
新たなソースフォルダーとする

新たなソースフォルダーとする。

ライブラリの追加
ライブラリの追加

ライブラリの追加。

JUnit
JUnit

JUnit

JUnit4でいいか
JUnit4でいいか

JUnit4でいいか。
testフォルダの下のannotationTestフォルダの下に、AddClassTest.javaを追加し、

とテストメソッド書く。

JUnitテストを実行
JUnitテストを実行

JUnitテストを実行。

緑色で成功となればテストが通ったということ
緑色で成功となればテストが通ったということ

緑色で成功となればテストが通ったということ。

// annotationTestパッケージ.
package annotationTest;	// annotationTestパッケージとしておく.

// 加算クラス
public class AddClass {	// AddClassの定義.

	// 加算add.
	public int add(int a, int b){

		// aとbを足した結果を返す.
		return a - b;	// a - bの結果を返す.(これにしたらテストは失敗する.)

	}

}

実装を間違えたりすると、

赤でテスト失敗となる
赤でテスト失敗となる

赤でテスト失敗となる。

さっきの成功版で本番実行すると、

result = 30

こうなる。正しい結果。

Sample/junit/annotationTest/annotationTest/src/annotationTest at master · bg1bgst333/Sample · GitHub

@SuppressWarnings

@SuppressWarningsは、指定された設定値ごとに、特定の警告を抑制する。

@SuppressWarningsとは | ハックノート

TestClass.javaは、

@Deprecatedの付いたprint。
MainClass.javaは、

// メインクラス
public class MainClass{	// MainClassの定義

	// Javaのエントリポイント
	public static void main(String[] args){	// mainメソッドの定義

		// TestClassオブジェクトを作成し, TestClassオブジェクトに格納.
		TestClass t = new TestClass();	// TestClassオブジェクトをTestClassのtに格納.
		t.print();	// t.printで表示.

	}

}

t.printで出力。
この場合、

このような警告が出てしまう。
このような警告が出てしまう。

コンパイル時に、このような警告が出てしまう。
非推奨なメソッドの警告を抑制するには、

@SuppressWarnings("deprecation")を付ける。

警告が出なくなった
警告が出なくなった

警告が出なくなった。

TestClass print!

実行結果は変化なし。

Sample/java/annotationSuppressWarnings/annotationSuppressWarnings/src/annotationSuppressWarnings at master · bg1bgst333/Sample · GitHub

@Deprecated

@Deprecatedは、このメソッドが非推奨であることを示す。

Javaアノテーションメモ(Hishidama's Java annotation Memo)

TestClass.javaは、

"TestClass print!"と出力。@Deprecatedを付けている。
MainClass.javaは、

TestClassオブジェクトtを生成し、t.printで表示。
しかし、

printに打ち消し線が引いてある
printに打ち消し線が引いてある

非推奨なので、printに打ち消し線が引いてある。

定義元にもこのように打ち消し線が表示される
定義元にもこのように打ち消し線が表示される

定義元にもこのように打ち消し線が表示される。

TestClass print!

非推奨だが、コンパイルは通るし、使えないわけではない。

Sample/java/annotationDeprecated/annotationDeprecated/src/annotationDeprecated at master · bg1bgst333/Sample · GitHub