DevDevデブ!!

プログラミングのこととか書きます。多分。。。

eARC、これ罠じゃね?

こんにちは、こんにちは。

秋アニメ始まりましたね。春、夏から放送作品数が回復してるので、アニメの消化に時間がかかってNetflixのウォッチリストの消化が滞っております。

前回のエントリがsonos arcを買ったっていう話だったんだけど、今回はsonos arcでdolby atomos体験しようと思ってeARC対応のテレビ探してたら困ったことに気づいたって話

stk132.hatenablog.com

そもそもなぜeARC対応のテレビが必要なのか?

sonos arcはeARC対応のHDMIがひとつだけで、入力はopticalだけ。

なので、BDレコーダーとかゲーム機はテレビ側のHDMI入力に接続して、ARC経由でsonos arcから音声を出力することになる。

このときテレビがeARC非対応、ARCのみだとdolby True HDの音声が送れないらしい(dolby digital plusは大丈夫)

なので、テレビのeARC対応が重要になってくるという理解

これ、AVアンプだったらアンプ側のHDMI入力に接続すりゃいいだけだから、テレビのeARC対応とか気にする必要ないんだけどね。

サウンドバー使ってる人は注意する必要がある。

(他のメーカーのサウンドバーはHDMI入力を1個だけ備えてるのが多いけど)

eARC対応のテレビ少ないw

じゃあテレビ買い換えるかな〜と思って価格.comとか見て探してたんだけど、価格.comのスペック表だとARC対応かどうかだけ記載されてて、eARCの項目がない。

なので、メーカーのサポートページとかチェックする必要があってマジでめんどくさかった。

調べた結果、全機種非対応か上位モデルだけ対応してるパターンが多いことがわかったwwwww

(2020年10月11日時点)

アクオスは調べてねーっす

REGZA: 全機種非対応

ググっても出てこなかった。AV watchの2020年のテレビの新機種紹介の記事でも非対応って書いてあったので、現時点で対応してるモデルがないっぽい。

REGZAはゲームモードが優秀ってイメージがあるので、とりあえず買うならREGZAかな〜って思ってたんですけどね〜

VIERA: HZ1800, HZ1000シリーズのみ

ソース

jpn.faq.panasonic.com

有機ELのモデルしか対応してない

BRAVIA: 4Kブラビア2020年モデルのうち、X8000Hは非対応

ソース

knowledge.support.sony.jp

LG: 有機ELのモデルとNANOシリーズは対応してるっぽ

ソース

www.lg.com

BRAVIAかLGしか選択肢がない

お金ある人は有機ELVIERAでもいいんでしょうけど、10万そこそこで抑えようと思ったらBRAVIAかLGのNANOシリーズしか選択肢が無いですね。

金額的にはREGZAのM540Xシリーズが対応してたら嬉しかったんですが、まさかのREGZA全機種非対応

ていうかREGZA、最新モデルの使用表にARCの記載すらないんですけど、なんなのマジで

www.toshiba.co.jp

待つべきか否か

現在のところ、最有力候補はLGのNANO86

www.lg.com

この機種はHDMI2.1対応というのが大きい。あとBRAVIAより安いしね。

しかし、パネルのバックライトがエッジ型なんですよね。

直下型とどれくらい差があるのかわからないけど。

ひとつ上のサイズ(55インチ)のやつは直下型なんだけど、デカくて今のテレビ台におくには厳しい。

ていうかテレビ台に設置できても視聴距離的にゲームがプレイしづらくなる。

これは待つべきか否か悩みどころですね〜。

HDMI2.1はさすがに来年のモデルでは対応してくるメーカーが多いと思うけど、eARCは対応してくるかどうか分からんよね〜。

REGZA M540XがeARC対応してたらHDMI2.1は捨ててでもこれにしてたんだけどな

sonos arcを買ったぞの巻

買っちまったぜYayYay

(部屋が暗いのでiPhoneで撮影したあとに修正かけたらおかしな色合いになってしまったw)

sonos arcって何よ?

sonosから出た新しいサウンドバー

dolby atmosに対応してる。

デカイ。横幅114cmある。

あと、高い。税込み119800円である。(アメリカだと800ドルだぜ。。。)

なぜ買った?

2013年にONKYOのBASE-V50っていうホームシアターセットを買ってずっと使ってたんだけど、次世代ゲーム機の発売に合わせてサウンド周りを刷新したかったっていうのと、BASE-V50のAVアンプが勝手に音場調整モードに入るという謎挙動を起こしていたため。

マランツのNR1711とか、単品のAVアンプへ買い替えと迷ったんだけど、今BASE-V50のアンプが収まってるところ(写真の中央部分の下)に収まらないので、sonos arcを買うことにした。

(AVアンプ、横幅44cmが標準サイズなので、デカイw)

使ってみてどうか

BASE-V50にセンタースピーカーを追加して3.1chで使ってたんだけど、それより音質は良いと思う。

あと、torneのメニュー画面でそれまでは聞こえてなかった楽器の音が聞こえるようになった。

音質的には普通に満足。

残念ながら、まだdolby atmosは体験していない。

なぜなら、うちのTV(REGZA 43J7)はeARCに対応していないため。

dolby atomos出力対応機器として、我が家にはXbox ONE Xがある。

ここが気になるsonos arc

気になる点もある

入出力がHDMI1つとopticalのみ

他のメーカーのサウンドバーだと、ARC対応のHDMIと入力のHDMIがひとつっていう構成が多いと思うんだけど、本機はARCのHDMI一つのみ。

なので、BDレコーダーとかゲーム機なんかはテレビ本体のHDMI入力に接続して、ARCを通してsonos arcからサウンド出力するという形になる。

テレビ側のHDMI入力が多くて4つで、そのうち一つ(ARC対応)はsonos arcとの接続になるので、他の機器の入力に使えるのは3つとなる。

接続機器が多い人はちょっと困るよね。AVアンプはHDMI6入力とか備えてて、HDMIのスイッチャーとしての役割も大きい。

あと、sonos arcにHDMI入力があれば、テレビ側にeARCがなくても、dolby atmos出力できたのになーとか

TVも買い替えたいが、時期が。。。

今は時期が悪いおじさんである。

とりあえずeARC対応のテレビに買い替えたいんだけど、HDMI2.1対応の機種が少ない。

LGの一部とシャープの8Kパネルの機種ぐらい?

次世代ゲーム機が4K120hz対応なので、買い換えるならHDMI2.1対応の機種にしたいんだけど、4K120hzの対応は個別のゲームタイトルによるので、HDMI2.0の機種で充分なんじゃね?って気もしてる。

(一部の描画負荷の軽いタイトル以外はRTX3080でも4k120fps安定しないので、PS5とXSXでは4K60hz対応のタイトルがほとんどなんじゃないの?と思ってる)

4K120hz出力の映像ソースって、次世代ゲーム機とPCゲームぐらいしかないはずなので、家電メーカー側には対応するメリットそんなにないんじゃないのって気もする。

e-sportsとかのガチ勢はフルHD240hz対応とかのゲーミングモニタ使うだろうし

次世代機とHDMIとか、設置場所とか

こんにちはこんにちは。

PS5の発売日と価格が発表されましたね。

Xboxと同額にしてくるとは思ってなかったので驚きです。(絶対6万いくだろと思ってた

それに加えてデジタルエディションが3万9800円(税抜き)ってのはヤバイですね。この価格ならとりあえず買っとくかって気持ちになる。

予約合戦という名のF5アタック祭り

ほとんどのECサイトは抽選予約で、早いもの勝ちでやってるのは楽天ブックスamazonだけでしたね。

やっぱり抽選より確実に予約したかったので、自分もデジタルエディションワンチャンと思って参戦したんですが、まーったくダメでした。

楽天ブックスはいわゆるソーリーページが表示されて、商品ページにたどり着けず。

Amazonはさすがのもので、商品ページ自体は表示されるんですが、カートに入れるところでエラーw

抽選予約にかけるしかないんですが、いったん気持ちが冷めちゃって、そもそもほんとに初期ロット欲しいか?っていう気持ちにもなっているw

PS4を引退させられない

PS4nasneクライアントとして大活躍しているので、TVラックのスタメンから外すことができず、PS5さんの設置場所がない。

ていうか、うちのTVラックだと横置きしたら幅ギリギリですわ。もし横方向にも排熱口があるんだとしたら、うちのラックで横置きは無理。

あと、PS5だとNetflixとかのVODサービスのクライアントアプリがいつ提供されるのか不明という問題がある。

ぶっちゃけPS4では録画したアニメとNetflixばっかり見てるんですよねwゲームあんまりしてねぇwwww

nasneがなかったら、chrome castとかfire tv stickで事足りてしまうw

PS4互換どうなってるんすか問題

先日ファミ通.comで以下の記事がでました。

www.famitsu.com

99%互換だそうです。

でもこれを見て「あーPS4のゲームディスク挿入してそのまま動くのね」って受け取るのはピュアすぎると思う。(初期PS3でのPS2互換のいざこざを知ってる世代としてはなー)

公式サイトでも「PS4のゲームディスクをそのままお使いいただけます」って感じに明示するような文言はどこにもないんですよ。

さすがにパッケージ版にしろDL版にしろ買い直しをさせるようなことはないと思うけど、検証が完了しているタイトルから順次システムアップデート後に起動可能になるみたいな感じなんじゃないの〜って疑ってますね。

(Xbox OneにおけるXbox360タイトルの互換提供と近い感じで)

ていうかさ、ソニーの中の人以外誰もPS5の実機でPS4のゲームが動いてるとこ見てないですよね多分。

コロナのせいで各ゲームショーが中止orオンライン開催になったので、そもそもプレス関係者もPS5の実機触ったことがないんじゃないかな。

普通にPS4のゲームディスク挿入してそのまま動くんだったら、TGSでその様子見せてほしいっすわ

PS5発売後もPS5版がないPS4タイトルが控えているので、互換問題は重要だと思う。

特にサイバーパンク2077のPS5アップグレードは来年になるらしいし。

あと、単純にPS5の高速SSDにインストールしてロード時間が速くなったらゲーム体験は良くなるよね。

PS5の性能を発揮できるモニタorTVがない問題

市場には製品として存在するんだけど、我が家にはない。

ほんとに4k120fpsいけるのか疑ってますけどね。でるとしても、それPC版でいったらグラフィックオプション落としまくって解像度とフレームレートに全振りした状態なんじゃないの〜?って。

pc.watch.impress.co.jp

PS5で4k120fpsを堪能しようとすると、まず入力端子としてHDMI2.1が必要で、上記記事によるとASUSが初の対応製品を出すらしい。

リフレッシュレート120hz以上の4k液晶モニタはすでに存在するんだけど、HDMI2.1の入力端子がなくて、ディスプレイポートで入力しないといけないのだけど、PS5はディスプレイポート出力に対応していない。

液晶テレビでHDMI2.1対応の4k製品はLGのがいくつかあるみたい。

まあ4k120fps対応するかどうかはゲームタイトルによるので、あまり気にしてもしょうがないところだけど。

うちの液晶モニタはフルHDでリフレッシュレート144hz対応なんだけど、HDMI1.4なのでコンシューマーゲーム機はフルHD60fpsでしか入力できない。 間違い。HDMI1.4でフルHD120hzいけます。

これならPC版があるタイトルはPC版買ってディスプレイポート出力で遊んだほうがいいかなー

液晶モニタは春先に買い替えたばっかりなので買い替えたくない。。。(このときはコンシューマーゲーム機にディスプレイポート出力がないことを失念してたんじゃ)

とはいえ。。。

やっぱりちょっと欲しいよね〜

主にtwitterでドヤる目的でw

でも自分の環境だとPS5、Xbox Series X/SよりRTX3070が出るのまってそれを買ったほうがメリットは大きそう。

SAA-C02を受けてきましたよ

AWSソリューションアーキテクトアソシエイトのリニューアル版?のSAA-C02を受けてきました。

結果は合格です。

なんか正答率はすぐには出なくなったんですかね?どれくらいの理解度だったのかはわかりません。

まあ再認定だったんで、合格しないと不味いだろって感じではある。

でも3年も経つと結構出題内容変わってますね。

参考にならんと思うけど、一応勉強方法とか書いておく

勉強方法

前提として、実務ではAWSでサービス開発してます。

勉強期間は2週間、平日は1時間、週末に3,4時間という感じ

まず読んだ本がこちら

www.sbcr.jp

ちょうどkindle版がSBクリエイティブのセールで安くなってたというのと、著者が他にもAWS本出していることから、まあ無難だろうと思って選択。

主要なサービスの概要を把握するにはいいと思います。演習問題は簡単すぎるかな。

あとは、AWSが公開しているホワイトペーパー、、、と言いたいところだけど、well-architected framewrokのホワイトペーパーの内容がつまらない上にページ量が多いのに我慢できなくて、途中で放りなげました。

あとは、blackbelt seminarの資料を読んで、udemyで販売されている演習問題のコースをやったくらいですね。

aws.amazon.com

www.udemy.com

blackbeltの資料を全部読破するのは、時間的に結構厳しいと思うので、udemyの演習問題を一周してから、理解度が浅いサービスのものに絞って読むのがいいんじゃないかと思います。

(実務でAWS触ってなくて、初受験って人は主要サービスについては全部読んだほうがいいけど)

udemyの演習問題はかなり本番の出題傾向に近いと思いました。個人的にはudemyのほうが本番試験より難易度高いと感じます。

(ちょっと誤字が多いのが気になったけど〜)

まあ、私基本演習問題1とC02対応の追加問題と高難易度問題1のトータル180問ちょいしかやってないですけどw

はい、参考になりませんでしたね。

というか新しい情報はないよ。Qiitaとかで合格体験記を探してくれ。

プロフェッショナルはとらないのか?

めんどくせぇ〜〜〜〜〜〜〜

受験料3万払って3時間の試験受けるとか、つらすぎん?

(SAA合格したら半額クーポンもらえるけど)

この手の資格、転職時ぐらいしか見られないっていうのと、自分が実務でやってるサービスのワークロード以外にあまり興味がないっていうのが強い。

SAAの試験問題読んでても、「オンプレからのデータ移行〜〜〜???シラネーヨ」って気持ちになるし。

そんなことより、今仕事でやってるサービスのアーキテクチャをいい感じにするサービスに絞って習得したいわけですよ。

SIerだといろんな要件のお客さんのシステム開発するから、持ってたほうがいいんだろうけどな〜。

ScalaTestでUsingを使うときに気をつけたいこと

ScalaTestでUsingを使っててちょっとハマったので、そのメモ

TL;DR Usingの中でfailさせてもテスト終了しないよ

Usingの中でテスト対象の処理を実行し、明示的にfailしても、テストは完走します。

なぜならUsingがTryでcatchしてしまうから。

Usingって何よ?

scala.util.Using

scala2.13から追加された、Loanパターンができるやつ。

Loanパターンっていうのは、ファイルなどのリソースを使い終わったらコードブロックを抜けるときに自動でcloseしてくれるデザインパターン

具体的にはこんな感じで使う。

Using(Source.fromFile("hoge.txt")) {sc =>
//ファイルから読みこんだ内容をあつかう処理
}

なぜUsingの中でfailしてもテスト終了しないのか

正確にはUsingにわたす関数の中でfailしてもテストが終了しない。

Usingのapplyの定義は以下のようになっている。

  def apply[R: Releasable, A](resource: => R)(f: R => A): Try[A] = Try { Using.resource(resource)(f) }

関数f実行時に例外が発生しても、Tryでくくられているため、戻り値がFailureになるわけだ。

で、ScalaTestのfailは以下のように例外をスローすることでテストを中断している。

  def fail(message: String)(implicit pos: source.Position): Nothing = {

    requireNonNull(message)
     
    throw newAssertionFailedException(Some(message),  None, pos)
  }

つまり、failでスローされた例外はUsingでキャッチされてしまうので、テストが中断せずに続行されてしまう。

ただ、その場合はUsingで実行した関数の結果がFailureになるので、以下のようにするとテストを中断させることは可能。

Using(Source.fromFile("hoge.txt") {sc => 
//ファイルを使う処理
} match {
  case Success(_) =>
  case Failure(t) => fail(t.getMessage)
}

Failureを補足して再度failを実行するだけ。

とは言っても、さすがにfailを2回書くのは違和感すごいので、自分は以下のようにしました。

Using(Source.fromFile("hoge.txt") { sc =>
  sc.mkString //SourceをStringにする
} match {
  case Failure(t) => fail(t.getMessage)
  case Success(testString) =>
  //testStringを使ってテストを実行
}

上記はテスト用データがStringでも問題ない場合でしか使えない。

InputStreamを引数にとるメソッドのテストなんかだと、Usingの中でテストを実行するしかないかも?

DockerオフィシャルのMySQLとmysql/mysql-serverを間違えるとハマる

前回のエントリに引き続き、codebuildでCI環境を作ってる最中にハマったネタ。

stk132.hatenablog.com

dockerhubにあるMySQLのイメージにDockerオフィシャルのmysqlと、オラクルのMySQLチームが管理しているmysql/mysql-serverというのがある。(もちろんこの他にもたくさんある)

ユニットテスト用のMySQLイメージのベースイメージにDockerオフィシャルの方と間違って、mysql/mysql-serverの方を指定しててハマったという話

結論から先に言うと、mysql/mysql-serverの方は設定ファイルの差分追加ができない

(もちろんやりようはある)

ローカルで全テストパスするのに、CodeBuild上でfailするテストケースがある

ローカルはコンテナじゃなくてhomebrewで入れたMySQLを使っていたんだけど、テスト用MySQLコンテナと全く同じデータでテストしたので、CodeBuild側だけfailするのはおかしい。

エラーログを見たら、期待値と実際の結果(actual)を比較してるところでactualが文字化けしてることに気づいた。

MySQLコンテナにmysql-clientで接続し、statusコマンドを打つと、

Server characterset: latin1
Db     characterset:    latin1

となっている。

なるほどね。

え〜〜〜〜〜〜ちゃんとutf8になるようにmy.cnfに設定書いて/etc/mysql/conf.d/配下に配置したハズですけどぉ〜〜〜〜〜〜〜?????

以下のページとか参考にしてさ〜

dqn.sakusakutto.jp

間違って、mysql/mysql-serverをベースイメージにしていた

なんでやねんと思い、コンテナにログインして/etc/my.cnfを見たら、

!includedir /etc/mysql/conf.d/

の記載がない。

そりゃ/etc/mysql/conf.d/に配置しても反映されませんわなw

って思って自分が書いたDockerfileを見たら、mysql/mysql-serverをベースイメージに指定してたってオチ

しかも残念なことに、/docker-entrypoint-initdb.d/配下に配置したファイルに関してはmysql/mysql-serverも反映してくれるんですよね。

そのせいで気づくのに時間がかかりました。

mysql/mysql-serverのほうがいいところもある

コンテナ立ち上げてからmysql-serverが起動して接続を受け付けられるようになるまでいくらか時間がかかると思うんだけど、mysql/mysql-serverのほうはdocker psを叩いたときにSTATUS欄にその状況を表示してくれる。

healthyって表示されてると、接続可能な状態。

まあDockerオフィシャルのほうも、接続が成功するまでmysql-clientで接続を試みるようなシェルスクリプトを書けば済む話なんですけどね。(もちろん失敗したら一定時間のスリープを挟むようにする)

AWS CodebuildでカスタムイメージのENTRYPOINTは無視されるそうです

はい出ました。またまた表題が全てのブログエントリ〜

プライベートではインプットばっかりで、実務でハマったことしかブログネタがないからしかたないね。

知ってましたか?カスタムイメージのDockerfile内で指定したENTRYPOINTは無視されるそうですよ。

github.com

公式マニュアルで見たような覚えもあるんだけど、記載が見当たらない。

知ってる人がいたらここやでって教えてくれると助かります。

一応経緯を書いていく

sbtとdockerが入ってるカスタムイメージがほしかった

Scala + Playframeworkでアプリケーションを書いておりまして、で、ユニットテストにredis、 dynamodb-local、kinesalite、MySQLを利用するので、それらをdockerで動かすために、sbtとdockerが入ってるdockerimageを必要としていたわけです。

それぞれelasticache、dynamokinesis、RDSで用意する手もあるんだけど、codebuildがビルド時間で課金されるのに対して、テスト用のelasticacheやらを常時起動させておくのは嫌ですからね。

で、実はcodebuildのオフィシャルイメージにはdockerとsbt最初から入ってるんだけど、sbtのバージョンが古いし、イメージサイズがデカすぎてなんかアレなので、他のイメージをベースに自分で作ることにしました。

github.com

つーか↑のリポジトリのDockerfile見るまでsbtが入ってるって知らなかったんですけど、オフィシャルイメージに入ってるビルドツールの一覧ってマニュアルに記載ありましたっけ?

なんか、ググったらみんなsbt使うためにカスタムイメージ使ってるけど、実はオフィシャルイメージにsbt入ってるの気づいてない人多い説あるんじゃないですかね?

カスタムイメージ作るの巻

sbtが入ってるイメージをdockerhubに公開してくれてる人がいるので、そちらをbaseイメージに使います。

github.com

registry.hub.docker.com

あとはdockerを追加したら完了って感じなんですけど、dockerってmacのdocker for macインストーラーでしか入れたことなくって、めんどくさいからcodebuildオフィシャルイメージのdockerインストールしてる部分を参考にした。参考にした。あとdockerデーモンを動かすためのwrapperスクリプトね。

このwrapperスクリプトをENTRYPOINTに指定してるのを真似したことがハマりポイントだったんだけどね

あと補足として、上記のイメージをbaseイメージ使う場合、iptablesが入ってなくてdockerデーモンの起動に失敗するので、以下のようにして必要なもんを入れました。

RUN apt-get update -y && apt-get install groff iptables awscli -y

awscliはECRにログインするのに必要。groffはなんか知らんけど入れないとawscliでエラーが起きたので入れた。

そして無視されるENTRYPOINT

カスタムイメージができたので早速ビルドしたら、dockerコマンド叩いてるところでデーモンとの通信ソケットが無いって言われてエラー。

エラー内容からしてENTRYPOINTに指定したデーモン起動のwrapperスクリプトが叩かれてないことは明白なので、適当にググったら上記のissueがヒットしましたというオチ。

修正方法としては、buildspec.ymlのinstallのところあたりで叩いて上げるだけ。

そもそもマニュアルの

docs.aws.amazon.com

このサンプル見てれば気づいた話ではありますが。

ていうか言い訳なんだけど、codebuildのマニュアルの章立てが気にいらないです。

buildspec.ymlの記法を説明する前にサンプルを大量に並べるのをやめろ。

(まあ雰囲気でわからんこともないけど)

やっぱりRDS使いたい

MySQLコンテナの立ち上がりに30秒ぐらいかかってるんですよね。。。