【MVVM】 ViewModel の_プロパティ記述

Android Java ではあまり見かけなかったその記述。

Kotlin では、たくさん見かけてはいましたが、
個人的な明示記述小技かと思っていました。


private val _items = MutableLiveData<List<Task>>().apply { value = emptyList() }
val items: LiveData<List<Task>>
    get() = _items


private val _dataLoading = MutableLiveData<Boolean>()
val dataLoading: LiveData<Boolean>
    get() = _dataLoading

android-architecture/TasksViewModel.kt at todo-mvvm-live-kotlin · googlesamples/android-architecture


private val _repositories = MutableLiveData<List<Repo>>()
val repositories : LiveData<List<Repo>>
    get() = _repositories

android - Kotlin: Read Only access of Immutable Type to an Internal Variable of a Mutable Type - Stack Overflow


private val _models = ConflatedBroadcastChannel<Model>()
override val models: ReceiveChannel<Model> get() = _models.openSubscription()

private val _events = Channel<Event>(RENDEZVOUS)
override val events: SendChannel<Event> get() = _events

SdkSearch/SearchPresenter.kt at JakeWharton/SdkSearch

Kotlin公式リファレンスにも書かれていたのですね!

Names for backing properties
If a class has two properties which are conceptually the same but one is part of a public API and another is an implementation detail, use an underscore as the prefix for the name of the private property:


class C {
  private val _elementList = mutableListOf<Element>()
  val elementList: List<Element>
      get() = _elementList
}

Properties and Fields: Getters, Setters, const, lateinit - Kotlin Programming Language

クラス内の処理実装に利用するのが _elementList で、
外部にただ公開するだけのが elementList。

こうやって並べてみると、自然に馴染じめてしまう不思議。

ViewModel作成時のイメージとして持っておくと良い。

👉【Kotlin】バッキング・フィールド/プロパティ
👉【MVVM】ViewModel インスタンスの取得


さくらVPSでWEBアクセスできないなど。

状況

さくらVPSでUbuntu。

「ufw」という簡単でわかりやすいツールがあるんだと。
iptables のラッパーらしいが。


# ufw allow 80

のような操作で、簡単に穴あけできる。

だが、しかし、塞がったままででした。

なにやっても #80アクセスできません。

nc コマンド 使い方メモ - Qiita

公式アナウンス

※ さくらのVPSデフォルト設定であるiptables以外のファイアウォールをご利用になりたい場合は、再起動時に設定が2重に反映されてしまう可能性がありますため、/etc/network/if-pre-up.d/iptables の削除が必要となります。あわせて、iptablesのルール情報である /etc/iptables/iptables.rules も不要となりますため削除いただくこと推奨いたします。

さくらのVPS、スタートアップスクリプト「Ubuntu ufw」を更新しました – さくらのVPSニュース

初期設定では ssh/icmpのみ許可しています。
/etc/network/if-pre-up.d/iptables より、下記設定ファイルを読み込んでおります。

OSセットアップ情報(Ubuntu16.04 LTS) – さくらのサポート情報

まとめ

さくらのVPS(クラウドも含む可能性があります)のUbuntu 16.04 LTS環境では、2017-12-07現在、netfilter-persistentパッケージをインストールした状態でも設定が上書きされてiptablesのフィルタリング設定が元に戻ってしまう可能性があるようです。

netfilter-persistent が動かないよ @ さくら - Qiita

結局、利用は以下の2つのパターン。


// ufw を使う。 iptables の設定で上書きさせない。
# rm /etc/network/if-pre-upid/iptables
# rm /etc/iptables/iptables.rules
# reboot

# ufw enable
# ufw allow 80
# systemctl enable ufw


// iptables を使う。ufw を無効化。
# iptables -I INPUT 5 -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
# iptables-save > /etc/iptables/iptables.rules
# ufw disable
# systemctl disable ufw
# reboot

ufw では届かない設定があるので、ルールの変更は「ufw」と「iptables」コマンドを併用しないほうがよいのだろう。

はまる。


Android バージョンシェア 2019-03-31

ふと、

Android Studio 備え付けのツールで

確認してみましたよ、

「バージョンシェア」。

明らかに、古すぎですね。

仕方なくブラウザを開き、

Distribution dashboard  |  Android Developers へ。

半年近く前のやつ。

古すぎ。

 

調べる

なので、そんなサイトを探す。

Mobile & Tablet Android Version Market Share Worldwide | StatCounter Global Stats

Android OS version market share over time | AppBrain

各凡例の分け方が違うが、

数字や傾向は似ているので、

簡単に平均をとっちゃう。

 

結果

日本のような先進国では、

これより上位バージョン寄りであることは、

Playコンソールの数字からもよく分かる。

👉Android OS バージョン確認方法 (platform versions)




👉【公式 2018-05-07】Android Pie のバージョンシェア がやっと 10%超えている件