iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

NSCollectionLayoutDimensionの種類

iOSCompositionalLayoutを使うにあたり、サイズを指定するためのNSCollectionLayoutDimensionの種類を調べたので軽くまとめておきます👷‍♀️

NSCollectionLayoutDimensionの種類

NSCollectionLayoutDimensionの種類は下記になります。

    // dimension is computed as a fraction of the width of the containing group
    open class func fractionalWidth(_ fractionalWidth: CGFloat) -> Self

    
    // dimension is computed as a fraction of the height of the containing group
    open class func fractionalHeight(_ fractionalHeight: CGFloat) -> Self

    
    // dimension with an absolute point value
    open class func absolute(_ absoluteDimension: CGFloat) -> Self

    
    // dimension is estimated with a point value. Actual size will be determined when the content is rendered.
    open class func estimated(_ estimatedDimension: CGFloat) -> Self

fractionalWidth, fractionalHeight

コンテナサイズに対する割合を指定することで大きさを決定します。例えばコンテナの幅が100pxで、fractionalWidth(0.5)に設定するとCellの幅は50pxになるといった感じです。

absolute

サイズをptで設定します。

estimated

absolute同様にサイズをptで設定しますが、他に優先するべき制約などがある場合は無視されます。

てな感じで本日も以上となります🍺

その他の記事

yamatooo.blog

yamatooo.blog

yamatooo.blog

【FirebaseAnalytics】UserPropertyに数値ってどうやって設定するの?

A/B Testingでユーザを絞り込む際、UserPropertyを使ってユーザを絞り込もうとしていましたが、その際の条件設定に数値を扱うための演算子があり、この数値の値はどこから設定することができるのか分からなかったのでメモ🏃‍♂️

結論

クライアント側からはString値でしかFirebaseAnalyticsのUserPropertyは設定できませんが、RemoteConfigでそれらの値を数値として扱いたい場合は、RemoteConfig側がよしなに文字列を数値変換してくれるようです。

Analytics.setUserProperty("1234", forName: "new_user_of_version")

例えば、下記のA/B Testingでユーザプロパティを使って対象ユーザをフィルターする場合に、数値演算子を使うことでUserPropertyに設定した値は数値に変換され、比較演算子を使うことができます。

f:id:yum_fishing:20210713183524p:plain

数値に変換できない文字列の場合は、公式ドキュメントに明記されていませんがおそらく、対象ユーザの絞り込むが上手くいかないと思われます。

てな感じで本日も以上となります🍺

参考

firebase.google.com

その他の記事

yamatooo.blog

yamatooo.blog

yamatooo.blog

有意水準とはなんなんだ?

統計学なんもわからん状態でA/Bテストをするにあたり、有意水準という言葉の意味がよく分からんかったのでメモ🔰

結論

(僕なりの言葉でまとめてみるとこんな感じ。)

有意水準とは、特定の場合でAとBの結果に差があるかどうかを決定するためのしきい値です。

特定の場合とは、差がないと判断する範囲内の中で、発生する可能性が極めて低い位置に結果が分布した場合です。つまり下記で言うと、赤の範囲が有意水準(α, 偽陽性の確率)です。

f:id:yum_fishing:20210712170808p:plain

参照: https://techlife.cookpad.com/entry/2016/09/26/111601

この図は、200回のイベントに対するCVR10%の分布を表していて、おおよその結果は20になることがわかります。ただし、CVRが10%でも赤い部分の範囲に結果がくる場合もあります。そのような場合にAとBの結果に差があったかどうかを決定するのが優位水準です。つまりBがAと違う結果であると言える場合は下記の二通りになります。

  • Aの範囲内にBの結果が分布していない
  • Bの結果がAの有意水準内に分布している

ちなみに、この有意水準はサービスの検証などでは一般的に5%という数字が使われることが多くありますが、人の命などが関わる医療の分野では極めて低い数字が用いられるようです。その理由としては、この有意水準内で得られた結果(第一種の誤り)が人体に影響を与える可能性があるからです。ですので、医療の分野に置いてはこの水準を低く設定し、第一種の誤りを少なくしています。

てな感じで本日は以上となりますが、また今度は今回の内容とは対局にある検出力(β, 偽陰性の確率)や第二種の誤りについて書いていこうと思います🍺

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com

【Swift】特定の文字列の置き換え

今回は下記のようなsemantic versioningのバージョンを

2.34.0

下記のような数値で取り出した際のメモです。(用は文字列操作)

2340

結論

StringProtocolのreplacingOccurrencesメソッドを使うことで、特定の文字列をリプレースできます。

let versionString = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String // 2.34.0
if let version = Int(versionString.replacingOccurrences(of: ".", with: "")) {
    print(version) // 2340
}

てな感じで本日も以上となります🍺

その他の記事

yamatooo.blog

yamatooo.blog

yamatooo.blog

【Firebase Analytics】user_pseudo_idは便利

Google Analyticsに便利なカラムがあったのでメモ🔰

user_pseudo_idとは?

Google AnalyticsのイベントをBigQueryから、クエリを発行する場合ユーザ毎にデータを出力したい場合ありますよね👀

そんな時は基本的に、プロジェクト毎にアナリティクスのユーザーIDを付与する必要があると思います。

Analytics.setUserID("123456")

しかし、この値を設定しない場合でも Google Analyticsによって自動的に生成されるuser_pseudo_id(ユーザー・シェード・アイディー)を使って、 1 つのデバイスで同じアプリの同じユーザーに属するイベントの場合は、ユーザ毎のデータを取得することができるらしいです!便利ですね🎉

てな感じで本日も以上となります🍺

参考

その他の記事

yamatooo.blog

yamatooo.blog

yamatooo.blog

【CSS】flexで横並びにしたアイテムを逆順に並べる

結論

横並びの要素を逆順で並び替えたい時は下記のように

    display: flex;
    flex-direction: row-reverse;

縦並びの要素を逆順で並び替えたい時は下記のようにします.

    display: flex;
    flex-direction: column-reverse;

てな感じで本日は以上となります🍺

参考

developer.mozilla.org

その他の記事

yamatooo.blog

yamatooo.blog

yamatooo.blog

Firebase A/B Testingのアクティベーションイベントをちょっと勘違いしていた

Firebase A/B Testingを使うにあたり、アクティベーションイベントの役割を少し勘違いしていたので、メモ👷‍♀️

何を勘違いしていた?

アクティベーションイベントは、ユーザを A/B テストの対象にするためのトリガーイベントだと思っていましたが、試しにテストを行なってみたところ、トリガーを実行したユーザ以外もテストの対象になっていました。厳密には、A/B Testingを公開してからアクティベーションイベントを踏んだユーザがA/Bテストの対象になると思っていたのが、A/B Testingの公開前にアクティベーションイベントを踏んだユーザもテスト対象になっていました。

アクティベーションイベントの役割は?

僕の認識が間違っていなければ、アクティベーションイベントの役割は、A/B Testingの測定に対象ユーザの結果を含めるかどうかです。(ヘルプにも載っている通り)

f:id:yum_fishing:20210707174941p:plain

つまり、測定の対象に含めるかどうかをトリガーするイベントですので、ターゲットユーザにアクティベーションイベントを踏んでいないユーザがいても、そのユーザはA/B テストの対象になり、UIなどの切り替えをA/Bテストで実施していた場合には、アクティベーションイベントを踏んでいるか否かに関わらず、UIが切り替わる可能性があります。

特定のユーザ群にA/B Testingを公開するには?

基本的にターゲットユーザで切り替える必要があるので、ユーザー オーディエンスユーザー プロパティなどで対象ユーザを絞り込む必要がありそうです。

てな感じで本日も以上となります🍺 (また、実際に使ったら記事にします。)

その他の記事

yamatooo.blog

yamatooo.blog

yamatooo.blog