これおもしろい

らふにかいてこ

iOS12でUnknown selected data source for Port Speakerが出続ける件

iPhoneXS, iOS12の実機デバッグをしていたところ、ログにすごい勢いでエラーが吐き出されていました。

AVAudioSessionPortImpl.mm:56:ValidateRequiredFields: Unknown selected data source for Port Speaker (type: Speaker)

どうやらAdMobのバグらしく、調査中のようです。 新しい情報が出次第こちらのスレッドを更新してくれるとのことなので、期待して待ちます。

https://groups.google.com/forum/#!searchin/google-admob-ads-sdk/Unknown$20selected$20data$20source$20for$20port%7Csort:date/google-admob-ads-sdk/VR430-cbXt4/O6KAoWULAwAJ

アルゴリズム事典より: Weibull分布

[改訂新版]C言語による標準アルゴリズム事典 (Software Technology)

[改訂新版]C言語による標準アルゴリズム事典 (Software Technology)

C言語による最新アルゴリズム事典という本が1991年に発売されていたのをご存じですか?
専門学校時代に手元にあると良いよと言われ、持ってはいたものの、あまり開いたことがありませんでした。
今日なんとなく開き、アルゴリズムを学びつつ、Kotlinで書いたらどう書くかというのをブログに書くのも面白いのではと思い、やってみました。

改訂新版を先ほど購入したので、内容自体は改訂新版を元にしています。

Weibull分布

p.429

概要

f:id:takattata:20181005225205j:plain
f:id:takattata:20181005225215j:plain

結論: 理屈分かってないけど、そういう分布の乱数の作り方ということは分かった

コード読解

本を元にC++にしたもの

#include <iostream>
#include <cmath>

using namespace std;

double randWeibull(double alpha) {
    double randomValue = rand() / (double)RAND_MAX;
    return pow(-log(1-randomValue), 1/alpha);
}

int main() {
    cout << randWeibull(0.2);
    return 0;
}

https://www.onlinegdb.com/online_c++_compiler

コードのrandomValueが、F(x)のxのところで、購入randomValueヶ月以内に当たる
alpha〜故障型を決めるパラメータ

引数がalphaだから、
randWeibull関数任意の故障型の購入経過月数の一様分布(=randomValue)において最初に故障する確率が求められる
という認識で合っているのだろうか🤔

Kotlinで書く

Kotlin v1.3-RC

import kotlin.math.*
import kotlin.random.*

fun randWeibull(alpha: Double): Double {
    val randomValue = Random(10).nextDouble(1.0)
    return -ln(1-randomValue).pow(1/alpha)
}

fun main(args: Array<String>) {
    print(randWeibull(1.3))
}

https://try.kotlinlang.org/

Random

github.com

Kotlin 1.3でRandomクラスが出来る予定だそう
Javaと似たものらしい
最初にseedとなる値(コードでは10の定数)を渡して実体を生成してから使う
next〜関数の引数が範囲の上限(bound)で、0〜boundを除いた値の間の乱数が返される

(ミリ秒でも渡せないかと思ったが、Kotlinだけでの時間の取得方法が分からなかったので、ひとまず定数を渡した)

ln関数

ln - Kotlin Programming Language

自然対数(log e)を使う時はlog関数でなくln関数を使う
the natural logarithmより来ていると思われる

pow関数

pow - Kotlin Programming Language

Double, Floatから生えている、べき乗を返す関数

感想

分布の乱数、全然馴染みなかったけど、多少理解出来た気はする。
数式は全然分からないけど、こういうコードを書いたらこの数式と同じ意味になるのか、というのが分かるの面白い。これは面白い題材を見つけた気がする。
アルゴリズムかなり苦手なので、強化も兼ねて続けようと思いました。

認識違いあったらそっとコメントください🙏

参考文献

一様分布の平均,分散,特性関数など | 高校数学の美しい物語
C言語による乱数生成
ガンマ関数 - Wikipedia
数学記号exp,ln,lgの意味 | 高校数学の美しい物語

podcastをやろうと思うのです

(腰が引ける前にどんどん宣言しておいて、やらざるを得ない状況を作ろうキャンペーン)

きっかけ

podcast好きなんです。
テック系しか聞いていないけれども。
コアな話が出てくるのとかだとなお良し。

色々と聞いている中で「面白そうだなー、やってみたいなー」とちょいちょい思っていましたが、面白い話も出来なければ声が良いわけでもないし、気恥ずかしさもあって、話に出すだけで実際にやろうとはしていませんでした。

そんな中、昨日 yatteiki.fm

rebuild.fm を聞いていた時に、ふと「podcastやりたいなー」とツイートしてみたところ、意外といいねをされ、まあやってみてダメだったらダメで良いんだし、とりあえず動いてみるか、という気持ちになった次第です。

方針

実際にやるにあたって、どういう方針でやっていきたいのかを考えてみました。

色々浮かびはしましたが、一番は「そういう風にエンジニアになる人もいるんだ」とか「そういうエンジニアもいるんだ」と知れる場所を作りたい、ですかね。
「自分って、別段特出した技術も知識も持っていないし、特色のないどこにでもいそうな一般的なエンジニアだよなぁ」と思ったりしますが、誰しもが辿ってきた道も違えば育ってきた環境も違うので、その人じゃないとそのエンジニアにはなれないと考えています。
普通とか、そういう括り自体はあるかもしれないけれど、その中でもその人にしかない色がありますよね。そこを拾いたい感じです。
(ちょっと話違うけど、こちらの話でいう"武器"に近い感じ?ですかね?https://kensuu.com/n/n8a6373dcdb37)

なので、色々な人とpodcastで話して、もしそのゲストの人の経緯やスタイルの話を、必要としていた人が聞いて、エンジニアとしての第一歩を踏み出すなり、何かが始まったりしたならば、素敵なことではないかなと。
まあ、ちゃんとpodcast始められるのかも、続けられるのかも分かりませんがね!
エンジニアに限らず、知り合った色々な人たちから話を聞けたら面白そうですよね。

ちょっと書いてて気恥ずかしくなってきたのですが、そういう思いでやってみようと思うのです。
ちゃんと始められた時には、よろしくお願いします。
ちゃんと始められなかった時には、podcasterの先達にご指導ご鞭撻を賜りますようお願い申し上げに行こうと思います。

ちなみに、やってみたいんだよね!一緒に話してくれないか!と、同僚のwebエンジニアのしーけ (@shikeapp0909) | Twitterにお願いして、月曜の朝に会社で録音してみようと予定しています。(寝坊しなければ試し撮りくらいは出来るはず)

追伸


あ、このツイートにいいねしてくれた方々は、podcastが軌道に乗せられた時にゲストとして声を掛けさせてもらおうと狙ってますので!よろしくね!(`・ω・´)

(正直こんな記事まで書いて、風呂敷広げるだけ広げている気がして怖い。ひとり細々やるだけだから別に何かある訳じゃないけれども。)