ポジティブ丸メガネ

3年目エンジニアです。

4Kテレビを買うときに重要視したこと

最近4Kテレビを買いました。買ったのはこれ。

買って3日くらいしか経っていませんが、テレビが大きくてきれいなだけでなんだかQoLが上がった気がしています。我ながら単純である。

まずはじめに、Before -> Afterをどうぞ。Afterがちょっとわかりにくいな。

f:id:seiya-orz:20171120221122j:plainf:id:seiya-orz:20171120221152j:plain

テレビ台内に余裕で収まっていたのが、テレビ台から余裕ではみ出しちゃうサイズになってます。

★追記(2017/12/28) 4Kレグザの動画配信サービス「Amazonプライム・ビデオ」対応について|テレビ|REGZA:東芝〈レグザ〉

購入した49BZ710XがアップデートでAmazonプライムビデオに対応しました!しかも4Kビデオも見れる!ヒャッホウ!!みるこれボタンからプライムビデオアプリを起動することができます。早速使ってみましたが、やはり動きは多少もっさりしている感はありますが許容範囲内!テレビだけで見れるとか、もうこいつ最強やないか。。。

買う前の私の生活

  • BRAVIA 32型 07年製を5年ほど使ってた
  • PS4FIFAサッカーゲーム)やJRPGを主にプレイ
  • nasneでアニメを毎日視聴
  • バラエティやスポーツ番組も視聴
  • 朝はニュース番組を視聴
  • たまにPS4のAmazonPrimeビデオで映画とか視聴

という感じ。まあ1日平均2〜3時間くらいはテレビが点いてる。ずっと集中して見ているわけではないけど。ちなみに10畳位の部屋に住んでいて、視聴距離は近くて2m弱、遠くて3m弱でした。

購入の動機

  • 大きい画面でゲームしたい
  • きれいな画面でゲームしたい
  • nasneではできない2番組同時録画をしたい
    • アニメはnasne、バラエティ・スポーツ番組はテレビで録画とかしたかった
    • アニメもテレビにしたいけど、電車で見られるようにこのアプリつかってお出かけ転送したいからnasneにしてる
  • 仕事柄、目が悪くなってきたのか、3m弱から見ていると見えづらくなってきてた

てな感じです。前半3つが主ですね。

この時点での買う条件は

  • 4K
  • 40インチ以上
  • 2番組録画可能
  • 外付け挿せば録画可能

あたりで考えてました。

重要視したこと

さて本題。本当に正しいかどうかはわからないけど、調べていくと最終的には下記を重要視しました。読んでいただければわかるかもしれませんが、はじめは予算10万くらいでしたが、やっぱり高価格帯のほうが満足できそうだということで予算を15万強に引き上げました。

応答速度

ゲームをする私にとっては応答速度は非常に重要でした。昔、AQUOSを使っていたとき、パワプロをプレイすると、○ボタンを押して、画面上でバットがスイングされるのが0.5秒後・・・そんな時代がありました。なかなか辛くて、慣れてしまえばなんとかなりますが、とてもイライラしていました。

今回、調べていると、応答速度という観点ではREGZAが圧倒的に良いようでした。低遅延モード(ゲームモード)も存在しているので、特にいいと。ひとまずREGZAで絞ることに。購入したもの以外だと、下記あたりを見てました。型落ちとかも全然ありかなとも。

HDR対応

HDRとは、簡単に言うと「明暗を表現できる幅が広い」機能のこと。私的にはこれも非常に重要だと思っていて、よくきれいな景色を写真で取ったときに、なんか暗かったり、暗くなりきらなかったりと、不満があることが多いのです。HDR対応であればその部分の表現力が高くなるので、より映像に満足できるのではないかと考えたわけです。

ただ、HDR対応を謳っていても、なんちゃってHDRというのが非常に多いらしい。よって高価格帯を探すことに(まんまと策略にハマっている気もするが)。

言わずもがな4K

これもなんちゃって4Kというのがあるらしく、RGBWのものはなんちゃって4Kなんだって。 the360.life

まあそんなに大差ないかもしれないけど、どうせならいいの買っちゃうかーって感じ。どうせ長く使うし。

音がいいこと

音もなかなか重要だと思っています。別に、スピーカー買えばいいええがなって話ですが、追加でお金もかかるしスペースもいるしで、テレビにいいスピーカーがついていればお得だなあと思ってました。

この時点で、購入した710Xが最有力候補に。

パネル方式

VAとIPSというのがあるらしい。 tv-erabikata.at.webry.info

ヨドバシカメラとかで、REGZAの510X(VA)と710X(IPS)を比較してみたんですが、VAのほうは映り込みがひどい感じがした。暗い画面だとめっちゃ自分の顔が映り込んで、すごい萎えた。やっぱ実機見るの大事。

リモコン操作の応答速度

はじめはこの観点なかったですが、これは地味に効いてくるかなーと思います。BRAVIAの8000Eとかも見てたんですが、操作が少し重い。

Androidが入ってるというのもなんか印象悪い。スマホ用のOSを無理やりTVに載せてるなんて、重いに決まってる。ただ、Primeビデオを見れるのは羨ましいけど。

とにかくこの点でもREGZAは優れている様子。

購入するお店で気をつけたこと

私は、コジマネットで購入しました。ずっと価格.comを見ていましたが、やはり最安で争っているお店は、保証等の対応周りで不安が残りました。そこそこ高い買い物なので、ちゃんと保証してくれるところがいいなーと思ってました。

コジマネットの場合は、5年保証も無料でついてくるし、送料無料だし、たまたまGoogleHomeMiniもついてくるしで、総合的に見ると、最安店で5年保証つけた値段+5000円くらいだったのでコジマネットで決定。

とにかく

  • お店の対応がしっかりしているか
  • 保証がついているか

をしっかり見たほうがよさそうです。

49BZ710Xのレビュー

上記重要視ポイントを鑑みると、49BZ710Xになりました。

  • 4K&HDR対応
    • レビューもかなり高い
    • 実際とてもきれい
  • スピーカーがいい
    • 重低音バズーカが搭載されていて重低音がすごい
    • 実際かなりすごくて、臨場感がすごい
  • 応答速度が高い
    • FIFAやってみましたけど、まじでストレスフリー
  • 画面がでかい
    • 本当は43インチくらいがよかったんですが、710Xは49〜しかなかったの
    • でも使ってみるとそれがよくて離れてみてもよく見えるし迫力がすごい
  • 録画視聴時に早送りボタンみたいなのでCM飛ばしできる
    • nasneでもできるんですが、REGZAでもできて感動した

結局約16万でしたが、5年保証もついてるし、なかなか満足。テレビ見るの楽しいし、ゲームするの楽しいし、最高です。買ってよかった!

周辺機器

外付けHDDはこれ。使ってみても、音ほとんどしないし、コンパクトだし、安いし。問題なく動作してます。

HDMIケーブルはこれ。HDR対応だし。やすいし。安すぎだし。ビビるわ。

あとは前から使ってるけどPS4×nasne。マジ最強。録画した番組をスマホに予め転送しておけば、通信無しでスマホで見れる。アプリでその機能使うには買い切り600円くらい払わないとあかんけど、安いもん。最近は映像の良さを求めてPS4 Proにしておけばよかったとめちゃくちゃ後悔してる。

nasne 1TBモデル (CUHJ-15004)

nasne 1TBモデル (CUHJ-15004)

おわりに

高い買い物しちゃいましたが、めちゃくちゃ満足してます。普段から家に引きこもってるインドア人間なので、余計によかったのかもしれない。もともとあんまりお金を使わない(飲み会行かないお酒全く飲まないタバコ吸わない)タイプなので、こういう買い物はたいていイイヤツ買いがち。でもいい感じ。

よい4Kテレビライフを!

RxSwiftのオペレータdistinctUntilChangedに混乱した

combineLatestで10個くらいCombineしていたので、ストリームに流れるイベントの量がバカにならなくなってきたので、各Variableでは値が変化したときだけイベントが流れるようにしたかった。

オペレータを探すときは、まず下記記事を読むことが多かった。今回はここのなかのdistinctUntilChangedがかなり近い!となった。

qiita.com

本当に過去に流れたことのある値はもう流れなくなるのかが少し疑問だったので、公式も見ることに。

ReactiveX - Distinct operator

The Distinct operator filters an Observable by only allowing items through that have not already been emitted.

んー確かに流れなさそうな感じ。でも一旦実装してみることにした。

すると、普通に0--1--0の0が流れてる!おや??となってよく見ると、

RxMarbles: Interactive diagrams of Rx Observables

こちらが正しかったみたい。結論としては、distinctdistinctUntilChangedは違うし、RxSwiftにはそもそもdistinctはなさそう。

結果的には欲しい機能が元々用意されていて助かりましたという話でした。

RxSwiftでUITextFieldにコードから値を代入してもイベントが流れない

環境

業務でiOSアプリ開発ではRxSwiftとMVVMを導入しています。開発をはじめて1ヶ月半というところです。

  • Xcode 8.3.1
  • Swift 3
  • RxSwift 3.5.0

TL;DR

  • textField.text = "hoge"してもtextFieldのストリームにイベントが流れてこない
  • コードから代入したら、textField.sendActions(for: .valueChange)してやれば流れる

何をしようとして何が起こった

後輩くんが、日付とメッセージを入力する画面をつくっていました(本当はもっとたくさん入力する)。日付毎に入力するタイプのものなので、ユーザーが選択した日付に対応するメッセージがRealmに存在していた場合は、メッセージ入力フォームに予め値を入れておいてあげる必要がありました。また、日付とメッセージが入力されていた場合、保存ボタンを有効にするようにしていました。

組んでいたストリームの流れは、

  1. VC:dateField → VM:date
  2. VM:dateの値でRealmのデータを検索して、
    • 存在すればVM:messageに代入
    • しなければなにもしない
  3. VM:messageTemp → VC:messageField
  4. VM:date & message が入力されていればVM:isSaveButtonEnabledをtrueに
  5. VM:isSaveButtonEnabled → VC:saveButton.isEnabled

というシンプルなものでした。レビューした感じだと、日付に対応するデータが存在しない場合はうまく動いていましたし、存在する場合でもmessageFieldにRealmから取ってきたデータがバインドされていました。しかし、存在する場合にsaveButtonが有効になっていませんでした。

messageFieldに値は入力されているのに、ボタンは有効になっていない。messageFieldをタップすれば有効になる。そんな状態でした。

原因と解決策

ひとまずあらゆるストリームに.debug()をつけて原因を調べてみました。すると、上記の2.までは流れているが3.にイベントが流れてきていませんでした。

何が原因なのかググってみると、下記issueを発見。1年以上前のissue。。。

github.com

さてさて、読んでみるとこんなことが書いてありました。

this does not work because it’s not a control event. And as far as I remember its not possible to observe text property via KVO. The only “hack” that you can make is to tell manually to UIControl that value has changed via sendActionsForControlEvents then it will notify your observers

なるほど、コードから代入するのはControl Eventじゃないからうまく動いていないようです。よってそのEventを自分でハックすればできるよって感じですね。

なので早速3.をbind(to:)ではなくsubscribe()で下記のように書くようにしました。

vm.message.subscribe(onNext: { [weak self] message in 
    self?.messageField.text = message
    self?.messageField.sendActions(for: .valueChanged)
})....

すると想定したように保存ボタンが有効になるようになりました。

この状況を簡単に再現したものを作ってみたのでよかったら見てみてください。TwoWayBinding*.swiftです。

github.com

しかし、先程のissueを読み進めていくとこんなことが書いてありました。

Well, I thing that values in the UITextField and UITextView are always reflection of some values of Model or ViewModel layer. So I don’t understand why programmatic changes of text property should “send” events.

いやー本当にそのとおりですね。ちゃんと設計すればこの問題は起こらなかったですし、それに気づけなかった僕はまだまだダメです。

おわり