人工知能で10億円ゲットする完全犯罪マニュアルを読んだ

得体のしれない犯罪者と落ちぶれたAIエンジニアが犯罪をしていく話。
バディモノのクライムアクションという、それだけで面白いに決まってるじゃんという作品。

SFにしては実在の人工知能の技術やGitHubなどの固有名詞、イニシャルトークではあるがM社だのG社だのが出てくる。
SFにこうした時事性があるテクノロジーを出すと、SFでありなら現実に取り残されるという事が起き、個人的に好きではない。
しかし、この作品においてはこの部分が鍵になっている。
主人公はエンジニアであり、たとえ犯罪計画であっても、技術的な側面から口をはさまずにはいられない性格をしている。
この小説手に取る人間はおそらく、人工知能に関心があり、主人公と同じように、技術的な側面の話をされたら口をはさまずにはいられないだろう。
こうして、読者は主人公に対して強制的に没入させられる。
この部分でこの小説には、あえて現実のテクノロジーを出す意味がある。

AI関連の技術は陳腐化しやすい。
小説に出てくるモデルの名前が、懐かしい遺物になってしまう前に読まなくては、ただの時代遅れの時事ネタを使って滑っている小説になってしまう。
そういう意味では賞味期限がついている小説なので、早めに読んでもらいたい。

efをやった

Pros

  • 演出がすごい。一枚絵何枚使ってるんだろう。
  • 美少女ゲームにありがちな、選択されなかったヒロインが救われないという展開がなかった。
  • 火村が、今頃になってあの男の気持ちが理解できたという台詞がすごくよかった。

Cons

  • 音羽が2つあることに意味を見いだせなかった。明かされた時も、あぁ、そう…という感じ。
  • 宮村優子が存在している事に対して、火村の受け入れ方が異常な感じがした。

総じて丁寧に作られている作品だった。
本作は人の意思をテーマに置いているが、安易な燃え展開などではなく、淡々とした日常の中の決断や、その決断が他者に影響を与えていく姿を描いたのは素晴らしいと思う。
それだけに、群像劇のトリである、宮村優子と火村の物語が、エロゲーにありがちな死や奇跡に頼ったものであったのが残念であった。

ユニコーン企業のひみつを読んだ

読んだ。
基本的にはSpotifyのブログで昔言われていたことであり、逆に、ブログと言ってることが変わっていたらそれはそれで嫌なのでよいと思う。 Spotifyのブログを舐めるように読んでた人以外は読んでみると面白と思う。

個人的には9章「文化によって強くなる」の国による文化の違いが、これまで抱えていた疑問に対する答えを得られた気がしてよかった。
2013年くらいにサーバントリーダーシップが流行り始めたと思う。
そして2~3年たつとサーバントリーダーシップに対する批判が出てくる。

この時にはアメリカ人は言い出すのも早ければ見切るのも早いっすねくらいに思っていたのだが、この章を読んで、アメリカ人はサーバントリーダーシップなんてまじめにやっていなかったのだなと納得した。

本書ではスエーデンには合議による意思決定を行う文化が根付いており、ボトムアップの意思決定が可能である。アメリカはトップダウンの意思決定を好むためSpotifyの文化と相いれない事もあったみたいなことが書かれている。

言われてみればイメージ通りのアメリカ人である。個人主義であり、自分のキャリアを大切にする。
部下もリーダーに求める性質としてビジョナリーやそんなものを求めてるだろう。
そんなアメリカ人がサーバントリーダーシップなんて言い出す方が異常である。
今になって思えば、あのサーバントリーダーに対する期待感と急に飽きた感じは、君たち、そんなにまじめにやらなかったでしょ?という感じをうける。

Spotifyでこうしたサーバントリーダーシップが機能するための土壌が整ってるのが、スエーデンはそういう文化なんで…っていう理由なのもずるいなと思った。
おそらく日本人がシリコンバレーではこうなんでって言われれば納得してしまうような、アメリカ人にとっての(アメリカという国の歴史の浅さに根付いた)コンプレックスを刺激されて、アメリカ人も無条件に納得しているに違いない。

まぁ、そんな、当時サーバントリーダーシップに対して思っていた、君ら飽きるのちょっと早くない?という疑問が解消したのが良かった。

行政コードのXMLファイル

国土交通省GIS情報(https://nlftp.mlit.go.jp/index.html)を使用する際、行政コードと行政地区名の対応が欲しくなる。
この対応表は国土交通省のページからは以下に対してリンクが張られている。

https://nlftp.mlit.go.jp/ksj/jpgis/codelist/AdminAreaCd.html

できればXMLなどのプログラムから読み込みやすいフォーマットでほしい。
なかなか見つからないので、適当に拡張子をxmlに変更したところ、XML版が存在した。

https://nlftp.mlit.go.jp/ksj/jpgis/codelist/AdminAreaCd.xml

tsxを使ってreact-leafletのGeoJSONを使う

tsxを使わなければ問題は起きないと思います。

データ

geo jsonは以下から取得しました。

nlftp.mlit.go.jp

やったこと

単純に以下のようにすると動かないです。

import topo_data from './res/tokyo_topo.json';
// 中略
export const GeoJSONLayer = (props: Props) => {

    return (
       <GeoJSON data={props.data} />
    );
};

問題自体に関してはissueのほうが詳しいです。

[@types/leaflet] L.geoJSON() requires explicit typing · Issue #37370 · DefinitelyTyped/DefinitelyTyped · GitHub

試しに以下を

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b5bfba2994c91a099cd5bcfd984f6c4c39228e5/types/geojson/index.d.ts#L58
以下のように変更すると、正常にGeoJSONのレイヤーが表示されます。

type: GeoJsonTypes|string;

Widening Literal Typesが原因のようです。

どのみちgeo jsonでは重すぎるのでtopojsonにしたいので、以下のようにしました。

export const TopoJSONLayer = (props: Props) => {

    return (
        <MapConsumer>
            {(map) => {
                const layer = L.geoJSON().addTo(map);
                if (props.data.type != "Topology") {

                    return null;
                }
                for (const key in props.data.objects) {
                    if (!props.data.objects.hasOwnProperty(key)) {
                        continue;
                    }
                    const geojson: GeoJsonObject = topojson.feature(props.data, props.data.objects[key]);
                    layer.addData(geojson);
                }
                return null;
            }}
        </MapConsumer>
    );

};

データ解析のための統計モデリング入門をJuliaでやっていく(3.5)

3.5

using DataFrames
using CSV

using GLM

using StatsPlots


resource_dir = normpath(joinpath(@__FILE__, "..", "..", "resources"))
data_path = joinpath(resource_dir, "data3a.csv")

data = DataFrame(CSV.File(data_path))
fit_f = glm(@formula(y ~ f), data, Poisson(), LogLink())
println(fit_f)
println(loglikelihood(fit_f))

fit_all = glm(@formula(y ~ x + f), data, Poisson(), LogLink())
println(fit_all)
println(loglikelihood(fit_all))

wavの波形表示

JuliaでWavファイルの波形をプロットする

module openwav
using WAV
using Formatting

using Plots
gr()

function load_corpus(basedir, speaker)
    speaker_folder_name = "cmu_us_" * speaker * "_arctic"
    path = joinpath(basedir,  speaker_folder_name, "wav", "arctic_a0001.wav")
    # load wav
    wavread(path, format="double")
end

function xrange(data, framerate)
    println("length", length(data))
    x = range(0, length(data) - 1, step=1) / framerate
end

# http://www.speech.cs.cmu.edu/cmu_arctic/packed/
function main()
    resource_dir = normpath(joinpath(@__FILE__, "..", "..", "resources"))
    arctic_dir = joinpath(resource_dir, "CMU_ARCTIC")

    y, fs, nbit = load_corpus(arctic_dir, "aew")

    println(format("sampleing freq: {}", fs)) 
    data = y[:,1]
    x = xrange(data, fs)


    p = plot()
    xlabel!("Time [sec]")
    ylabel!("Value [-1, 1]")
    println("x len{}", length(x))
    println("y len{}", length(data))
    plot!(x, data)
    png("sample.png")
end

main()

end