【第21回 数学カフェ】蔵本モデルと一般化スペクトル理論に参加してきました。

9/23(土)に開催された【第21回 数学カフェ】蔵本モデルと一般化スペクトル理論に参加してきました。

connpass.com

会場はオラクルJapan青山オフィス。前回の超越数論の回でもお世話になった場所です。 今回の発表でもホワイトボードをメインに使った議論をしていたのですが、前回ここで数学カフェやった時と違ったのがスクリーンに写っているスライドが存分に力を発揮していたことでしょうか。

今回の講師は九州大学の千葉先生。 同期現象を起点にいろいろ話を進めていってくれたので最後の章部分以外はなんとか十二分に理解できてたと思います。 参考文献等は上記のconnpassのサイトに書いてありますのでそちらをご参照ください。

1. 蔵本モデルとは?

まず、同期現象とはなにかをホタルの光などをたとえに説明されていました。そこから蔵本モデルを表す式が登場。 力学系で何をやるかというのを説明するため、パラメータをどう設定すれば振る舞いがかわるのか?みたいなものを2次元の蔵本モデル(考える振動子の状態が2つ)を使って説明。 2次元だと式変形で一次元の常微分方程式の問題に帰着できて、、、そこからt->∞とするとどうなるみたいな議論を展開してました。 ここから3次元4次元と次元を増やした場合の解析はものすごく難しくなる、というところで下手に多次元のものを考えないで「Order Parameter」と呼ばれるものを考えて問題をシンプルにしていきました。 このシンプルにした状態で、無限個あったときにどうなるかを次行こう考えて行きました。

2. 連続な蔵本モデル

振動子の数が無限、かつ連続的に存在すると仮定すると密度関数などを使って偏微分方程式の形で蔵本モデルの連続版は記述することができます。

f:id:maestro_L_jp:20171002003350j:plain

偏微分方程式の攻略法の一つとして、Fourier変換がありますが、今回もそれを使って「常微分方程式化」をして行きます。 式変形を繰り返していく中で「無限次元版常微分方程式」の形に持って行きました。持っていく途中でnon linearの項を無視していましたが、これはどうも力学系的な安定性を調べる上では無視しても問題ないっぽい。間違っていたらごめんなさい。 結局、この形の蔵本モデルをとくことに帰着します。

 \begin{cases}
\frac{dZ_{1}}{dt} = (i\omega + \frac{K}{2} P) Z_{1} \\
\frac{dZ_{k}}{dt} = iK \omega Z_{k}  \quad \quad\quad (k = 2, 3, …)
\end{cases}

この問題をとくためにスペクトル半群の考え方を用います。

3. 線形作用素のスペクトルと半群[一般論]

ここからは一般論の話。 線形作用素の定義、関数解析の基本的な定理などの紹介はほぼほぼ割愛して、いきなりレゾルベント集合、スペクトルの定義に行きました。この辺りはこの数学カフェよりも前に行われた予習会でやっているだろうということで。。。 半群関連で有名な定理として「Hille-Yoshidaの定理」が紹介されましたがそれの詳細な紹介も予習会でやっただろ、的なノリでこれも割愛。角域作用素については初めて定義を知りました。(一応connpassにのっていた文献にもそれの定義ありましたけどね。。)これは非有界作用素の性質のなかでも美味しい条件の一つで、今回のようなHille-Yoshidaの定理を使う半群にとってはわかりやすいものだったりします(間違っていたらごめんなさい。) あ、ちなみに連続線形作用素は角域作用素です。(この部分を証明したい人向けに角域作用素の定義を以下に記載します。)
定義

Banach空間 X 上で稠密に定義された閉作用素Aとする。

A : 角域作用素である <=>   \exists a ∈ R, 0  \lt  \exists \phi \lt   \pi / 2   \quad s.t. \quad   \sigma (A) \subset S_{\phi, a}

ここで、 S_{\phi, a} \equiv  \{ \lambda ∈ C \mid \pi - \phi \lt \arg |\lambda - a|  \lt \pi + \phi \} とする。

個人的な所感ですが、この辺りで半群の生成作用素のスペクトルが全て負だとわかりやすい式でかけて振る舞いが調べやすいんだなと悟りました。

4. スペクトルと半群の理論を連続な蔵本モデルに適用

ここでは、作用素 T = i \omega + \frac{k}{2} P」のスペクトルを調べることで蔵本モデルの安定性を議論しよう、というトピック。この作用素に対する固有方程式を考えていくと、この作用素固有値複素平面の正の実軸上にしか所属しない、ということがわかります。 また、連続スペクトルは \frac{k}{2} Pがコンパクト作用素であることから \sigma _{c} (T) = iR (複素平面でいう虚軸)に属することがわかります。(*) 固有方程式を発展させて計算していけばわかることみたいなのですが、 K_{c}  \lt Kのときは自明解は不安定で有ることがわかる。これは同期現象的には「時間が経てば同期する」ということを意味している。 しかし、 0 \lt  K  \lt K_{c} のときは普通の理論ではわからないのでどうしよう?というので登場するのが一般化スペクトル理論。(なぜならKがこの値の範囲に入る時固有値は負の実軸の中に潜んでしまい、虚軸上にある連続スペクトルのせいでその固有値をとらえた議論ができなくなる(ラプラス変換の知恵が使えなくなる)からである。)

ここまで話を聞く限り、スペクトル理論が力学系の解の安定性を議論するのにものすごく使えるなーというのがわかりました。個人的には最初の(*)の部分の命題が非自明だったのでちょっと証明を考えてみようかと思っています。。。。しかし、数日考えたが証明が思い浮かばず。。

http://www.ne.jp/asahi/music/marinkyo/matematiko/kato.html.ja

のテキストに頼るしかないのか。。。

5. 一般化スペクトル理論[一般論]

一般化スペクトル理論の発想は、レゾルベントを有る意味でSchwarz超関数的な発想で「ある特殊なクラスの線形汎関数へ作用するもの」というふうに取り扱うということ。印象的だったのは扱う関数のクラスをL2から連続関数、さらに正則関数にまで落とし込んで考えていたのが印象的。正則関数まで落とし込んであげると解析接続を使って右半分から左半分(の一部)を使ってスペクトル理論を展開できるので先ほどの議論でとらえることのできなかった固有値を使った安定性理論を議論することができる、ということ。

あとで見つけたのですが、このテキストに一般化スペクトル理論について載っていますね。。。 http://www.ne.jp/asahi/music/marinkyo/matematiko/kato.html.ja

Gelfandの三つ組、一般化スペクトル、一般化レゾルベント、一般化固有値と定義とそのアイデアをバシバシ紹介していっていました。定義の仕方がかなり違うが結果がHilbert空間上のスペクトル理論と同じような結果が出ているのに面白みを感じます。 ちなみに余談として「Barreled sp」という用語が出てきましたが、定義はこの中に貼っておきます。

樽型空間 - Wikipedia

6. 一般化スペクトル理論の蔵本モデルへの応用

一般化スペクトル理論を使って 0 \lt  K  \lt K_{c} のときの解析をしていきます。結果としては自明解は安定。つまり、Kがこの範囲にいるときは、同期することはない、ということです。 さらっと紹介しちゃいましたが、実際の証明は計算のオンパレードみたいです。。。

7. 分岐

力学系には分岐理論というものもありまして、それの中心となる概念が「中心多様体・中心部分空間」と呼ばれるものです。ここの部分は私もしっかり理解はできていないのですが、蔵本モデルの場合だと  K_{c} 近傍で解の振る舞いがどう変わるかを調べていく、ということをやっていました。

8. 最近の研究紹介

この蔵本モデル、お互いに干渉し合う度合いは一様という条件がつきますが、現実はそういうケースはまれ。繋がりはグラフのエッジの重みで決まることがままある、ということでグラフと蔵本モデルをドッキングさせた理論について紹介。そして、この理論における最近の研究結果を紹介していただきました。 ということでここまででおしまい。

一緒に出席していた友人曰く「なんで数学者はすぐに無限次元に拡張したがるんだろう?コンピュータではもう有限しか扱えないのに」とのことでした。これに関しては僕はフォローしようとしましたが、完全にしっくり来ていただいたかは謎。確かにコンピュータを使ってシミュレーションする場合とか実際問題は馬鹿でかい次元の有限次元なので。。。。無限の美味しい性質がまんまつかえるかはちょっと謎ですね。。 でも、こういう無限次元について考えることは有限次元に近似していく上でもものすごく大事なことなので無限次元について考えるのは意味があることなのでは!と僕は信じています(だって微分ですら実際は離散化してコンピュータに計算させていますよね?現在こういうコンピュータ技術が発展していてもやはり微分について学ばなくていいということはないですよね。むしろ学んだ方がいい結果出るのはもう経験則でわかるのではと思います。)

まとめと感想

予習会に2度ほどお世話になったのと千葉先生の話し方がものすごくうまかったので大枠は理解した気になれました! そもそも作用素論を微分方程式の解析にどのように役立てているかの一旦が垣間みえて大変勉強になりました。あと、一般化スペクトル理論というものも知ることができたのはでかいです。これは自分が学生時代(作用素環論やってたんですが、この理論知らなかった…)では知らなかったのでね。 これ自分である程度数学的に理解できるぐらい穴埋めやってみたら力尽きそうだなー。というか蔵本モデルを応用したプログラミングとかやったらどうなるんだろうなー。とか思ったり。今度作ってみようかなぁ。Androidアプリとか。

【第20回 数学カフェ】トロピカル幾何学に参加してきました。

7/23 (日)に【第20回 数学カフェ】トロピカル幾何学に参加してきました。

connpass.com

会場はNTTデータ数理システム。実は私、この会社に何年か前に新卒として入社して数年ほどお世話になったことがあります(そのときはNTTデータ傘下ではなく、場所も信濃町ではなかったですが) 会場入りすると前に比べて断然広いセミナールームに驚きを隠せませんでした。

会場についての感想についてはここまでにして早速セミナーの中身についてのまとめに行きます。

今回の講師は東大数理の植田先生。

1. 代数幾何について

いきなりトロピカル半環の定義…と行かずにまずは代数幾何の初歩的な定義から。多項式環の零点集合を代数多様体と定義して…というところから。いきなりトロピカル半環の定義から入るとモチベーションがちょっと下がっちゃうからだろうか。 事前に

http://www.math.sci.hokudai.ac.jp/~ishikawa/tropical/ishikawa-tropical07.pdf

とかのぞいていたのですが、これだけだと背景は分かり辛いですね。。。

副次的なメリットとして代数多様体についての議論についていい復習になったということでしょうか。 (が、脱線がすごく、しかも脱線した時の話の中身がもう大学院のセミプロしかわからないようなものばかりでしたよ…?)

この代数多様体の話がだいたい全講義の3分の2の時間を費やしましたね。。

あと、ここでちょっと面白いと思った定理は「任意の有限生成k代数はあるk多項式の剰余環と同型である」というHilbertの定理。これまで数学では構造的に証明されてたものが初めて論理だけ(非構造的だけど)で証明したとかなんとか。

2. トロピカル半環とアメーバについて

トロピカル半環の例と零点集合の定義と例、アメーバの定理について話されました。トロピカル幾何においては+をmaxで定義してもminで定義しても本質的には変わらないんだという感じでした。 …が私の数学力がないせいか、ここから先は十分な感想を書けずじまい。。。

その後…

結局、半分以上脱線していたがなかなか面白かったです。ただ、このトロピカル半環(およびトロピカル幾何)は実社会、応用数理ではどう役に立つのかは知りたかったですね。でも、この辺ってまだ応用には未開拓なんでしょうか。 トロピカル代数自体はルート検索のアルゴリズムでよく知られているワーシャル-フロイド法の数学的定式化にも使われているとか。

proc-cpuinfo.fixstars.com

その後、懇親会にも参加。ペルー料理を堪能しました。そこで岩沢理論についての話と数理物理についての話をちらっとさせていただきました。

まとめと所感

トロピカル半環自体は定義は難しくないのですが、背景とかトロピカル幾何になってくるとだいぶ難しさ度合いが変わってくるなという印象でした。このトロピカルという考え方は実社会で活かせるのだろうか?というのもちょっと考えてみたりしています。。。

プログラマのための数学LT大会 第2回に参加してきました!

本日は定時に上がって以下の勉強会に参加してきました!

techplay.jp

参加者募集していた時には普通のオーディエンス枠は埋まっていたのでブログ枠で参加させていただきました。ということでまとめブログをサクサク書いていきます。変なこと言ってたりしたらごめんなさい。

ちなみに現時点ですべてのスライドが公開されているわけではありません。公開されたものから順に貼り付けていきます。

LT 1 : プログラマのためのトポロジー入門 〜 山手線は丸いのか?

発表者は佐野 岳人さん。

www.slideshare.net

山手線が丸いか、中央線と「同じ」かという問題定義から同相であるか、同相かどうかを調べる指標として単体複体のホモロジー群の定義、計算をしていきました。地道な単体複体のホモロジー群の計算をしているのを久々に見てて懐かしいでした。球やトーラスなどの代表的な図形のホモロジー群の計算あり。 ちなみに本当ならZ加群なんだけどレベルを下げてイメージをつかみやすくするため今回はR上の線形代数として話をすすめていました。それゆえにバウンダリ準同型写像を行列表現してそれベースで議論を進めるというアプローチができたんだと思います。

ちょうどいいレベルでとても面白く話が聞けました。

ちなみに、Rのままでメビウスの輪ホモロジー群の計算とかはどうやって展開するんだろう?という意地悪な疑問はツイートしないほうがいいですかね。 (2017/7/20 8:18) 佐野さんから直接リツイートいただきました(佐野さんありがとうございます!)。メビウスの輪は円周とホモトピー同値なため円周と同じ議論、すなわちRのままでも議論できるとのことです。実際幾つか文献漁ってたらそうだということを確認しました。 メビウスの輪はねじれているからホモロジー群もZ/2Zみたいにねじれるだろー、と思い込んで書き込んだのが事の発端でした。ちなみに下記ブログによるとクラインの壺がZ/2Zの要素を含んでいるみたいです。

peng225.hatenablog.com

LT 2 : 計算するということ

発表者はおおとやさん。

計算機の停止性などについてのお話がメインだったと思います。 大変申し訳ありませんが、私がこの分野についてかなり門外漢なため詳細なコメントができずにここで終わらせていただきます。。

LT 3 : 四則演算で描くドット絵 正N角形

発表者は荒木義明さん。

小学生向けのプログラミング素材として、sinやcosみたいなものを使いながら図形を描くためのプログラムについての紹介でした。 エクセルを使ってマクローリン展開の計算を再現していたのはすごかったですが…ちょっとフローが複雑でした。。

しかし、これ本当に小学生がついていけるかどうかは別としてなかなか面白かったと思います。 Excelで作った仕掛けは…githubには公開しづらいですかね。

LT 4 : ゆるふわ情報幾何学

発表者はYEさん。

正規分布の計量についての話。正規分布の近さを問題定義として、計量について定義してそこから正規分布の計量と話を進めていきました。しかし、時間がなかったのか正規分布の正確な計量が紹介されず、肝心な「国語と数学の遠さ具合」を計算できていなかったのが残念でした。 あ、この計量は一般的な分布間の距離として定義される Kullback–Leibler情報量とは関係あるのでしょうか。。。

LT 5 : 有理ホモトピー論とコンピュータ

発表者は若月駿さん。

すみません、一言で言うと難しかったです。。。有理ホモトピー論自体がよくわからずそもそもその定義がどんなものなのかが理解できていません。。。ただ、連続的な幾何バリバリな有理ホモトピー論がminimal Sullivan algebraを使うことでコンピューター上で例を計算しやすくなりました!っていうのがすごかったと思います。幾何とかコンピューターで具現化無理だろとか思っていたクチなんで。。。

LT 6 : プラレールでつくる論理回路

発表者はAkama Hitoshiさん。

speakerdeck.com

プラレールを使って論理演算(ANDとかORとかXORとか)を再現すると言う話でした。実はプラレールはBDDの話に焼きなされました感がちょっと強かったと思います。ただ、BDDと違って入力値を複製できないなどの制約がかかるため、そう言う意味ではまんまBDDではないんだなと言うことがわかりました。

LT 7 : 行列の固有値固有ベクトル

発表者は根上春さん。

行列の固有値固有ベクトルの定義・計算、応用例など丁寧に話されていたと思いました。基本的な定義とか計算は全然苦ではなかったのですが、応用例、特にネットワークのクラスタリングについてはちょっと理解が仕切れませんでした。 グラフ上のラプラシアンがどうしてこういう形か?みたいなのが個人的にぴんとこなかったり、隣接行列の固有値を使えば何がわかるのかがもう少し詳しく知りたかった感があります。

ちなみにこれですかね、グラフのラプラシアン

www.slideshare.net

これを後で読んで見ます。なんでこれが必要だったか。これを使うと何が嬉しいのか。

Deep Spectral Clustering Learningは…ちょっと勉強したいです。というかDeepでないやつも知らないのでその辺りも勉強します。。。

LT 8 : 線形分類器

本日は都合が合わず発表中止となりました。。。

LT 9 : そろそろ数式お絵描きの話でもまとめておくか

発表者は鯵坂もっちょさん。

スライドなしでライブコーディングでLTしてました。数式に対応するグラフがアニメーションで動くと理屈抜きでおおって思います。驚きのれんぞくでただただ楽しかったです!

https://www.desmos.com/calculator/vypskkl2vd

総括

自分の勉強不足なため全てを理解することはできなかったですが、こんな世界があるんだーという知見は得られたと思います。今度は半年後あたりにやるみたいなのでその時は自分も登壇したいと思います。ちょうどアルゴリズム系で面白いネタ持っているんで。 ちなみに親知らずネタはこの勉強会の定番のフリなんですかねー。

「第19回 数学カフェ 超越数回」に行ってきました!

6/25にオラクル青山センターにて行われた「第19回 数学カフェ 超越数回」に行ってまいりました。

connpass.com

mathcafe-japan.hatenadiary.com

会場入りしたざっくりとした所感としましては、「Oracleさん、今回のガチ数学イベントにここまで立派な会議室提供してくださいましたなー」という感じです。とにかく広くて綺麗です。電源あり、Wifiあり、机のスペースに少し余裕ありと至れり尽くせりな設備でvery good!でした。 こういうところはよくIT系勉強会の開催場所として使われることがある分、少し違和感と新鮮さがありました。

f:id:maestro_L_jp:20170627004153j:plain

さっそく講演についての感想をいかに述べます。

超越数論の3つの真珠」 講師:せきゅーんさん

超越数論の基本的な部分とその分野の中で熱い3つの定理、そして未解決問題についてざっと紹介してくださいました。実は「ブログ連動型講義」。これを命名して講義していたので面白かったです。でも、これがあるおかげで理解がしやすかったです。

integers.hatenablog.com

前半は代数的数と超越数の定義から入り、eが超越数であるところの照明までざっとやっていました。eが超越数である事実は知っていましたが照明までは知らなかったですが、代数学解析学の知見を使って照明していく様はなるほど!と思い勉強になりました。これ、自分で思いついて証明するの大変ですよ。代数的概念を示すのにまさか微分とか評価とかでてくるなんて。でも、こういう照明をざっと講義中にやるの好きです。 後半はeが超越数であるところからπが超越数であることを含め色々な数が超越数であることを示して行ってたのは感銘です。それをベースにした3つの真珠と呼ばれる定理の紹介と応用について話されていました。超越数の理論のすごさが垣間見えて素敵でした。意外だったのが、e+πが超越数であることの照明がOpen Problemだということ。

ちなみにプロジェクターで写すには最高の環境なのに終始ホワイトボードだけで講演してた光景は久しぶりすぎて驚きました。。IT系だと基本スライドなんで。あと前回の機械学習会とか普通にスライドだったし。。。 これぞ数学の集中講義って感じでした。。というより普通の数学の集中講義よりもカジュアルで良かったです。

超越数とランダム性」 講師:なれさん

e, √2などの無理数を小数点展開した時に1, 2, ・・・,9の並びが不規則であることを皮切りに超越数かどうかの判定に使う、みたいな話をされました。並びが不規則な無理数は実は超越数であるということが示せるのでそれをベースにオートマトンから作られた数は超越数であるとかどうとかを照明していました。 最初の方は面白く聞かせていただきましたが、私が勉強不足でオートマトンとか聞いた瞬間に理解が追いつかなくなってしまい・・・後半についてのブログが片手落ちになってしまいます。。。

全体通した所感。

前回の機械学習回と違って参加人数少なかったですね。。。あと、数学の講義感が半端なかったです。参加している人たちの中にあんまりエンジニアっぽい人いなかったですよね。。。でも、純粋数学の面白さを再発見できた1日でした!こういう数学ってやっぱりいいよねぇ。こういう数学はやっぱりパソコンでメモ取るよりノートとペンでメモ取った方が頭に入るよー。これは数学科の血がそうさせているのでしょうか。。

最後…懇親会あったっぽいですが先約のため行けず。次回は参加してみようかなぁと思います(懇親会で出てくるマニアックな数学についていけるようにはしておきますが。。。)

DroidKaigi2016 2日目 参加レポート

DroidKaigi2016、2日目も参加したのでレポートを記載します。 …目黒でやってたDevSummitで発表されたSoracomの新サービスに目移りした瞬間もありましたが、いい話ばかりでよかったですよ。

基調講演「Support Libraryノススメ」「Support Library Internal」

発表者はGoogleのArakiさん。

いま現在出ているsupport libraryにどんなものがあるか、各々のサポートライブラリにはどんな機能があるか?をお話しされてました。多くて(私が理解しきれているものが少ない)のでここでの学びは

  • Fragmentは「android.app.Fragment」でなく「support.v4.app.Fragment」の方を使うべし。(support.v4の方が標準APIのFragmentで発生していたバグが修正されているため。)

  • Viewの代わりにAppCompatViewみたいなのがあるが、これにわざわざ書き換えなくても良い。

  • RecyclerViewはListViewの後継となるクラスだが、無理して入れ替える必要はない。

  • compileSdkVersionとサポートライブラリのバージョンが揃えること!それを前提にして作っているみたい

  • DesignSupportLibiraryはappcompat-v7使用を想定している。

  • TabLayoutとViewPagerと連携するにはtabLayout.setupWithViewPager(viewPager)かけばOK

です。しっかしほとんど知らないものばかりだったので勉強になったなー。これらを自分の言葉で説明できるようにしっかり消化していかないとなー。

セッション1「クックパッドにおけるAndroidエンジニアの役割とその変遷」

発表者は@sys1yagiさん。

speakerdeck.com

クックパッドのAndroidアプリを作り上げていく過程でAndroidエンジニアがどのように問題に立ち向かって解決していったかを話してくださりました。クックパッドのエンジニアって本当に神クラスにすごいからきっとすごいことをやっているのかなー?と思ったら一つ一つは自分たちでもできそうなことばっかりだったので目からウロコでした。 ひたすらKPTを繰り返し課題をあぶりだし、リリースしたら実はトラブってたというのを防ぐためチェックリストを作ってリリースマネージャというリリースに関して責任をもつ、ってがんばれば自分たちでもできそうな気がします。 ただ、この発表を聞いて、さすがと思ったのは品質を保つために「プログラミングの仕組み化」をしなかったことだと思います。つまり「技術力が多少あれでも最低限の品質が保証されるコードが何もかけずにかける」システムを構築しなかったことです。SIerだとこの方法を使って、単価のやすい派遣さんにどんどんコーディングさせて自分たちは頭を使うことしかしないみたいな感じになって技術力があってもむくわれない!みたいな構造が出来上がっていくのです。技術的な感度をからせないために?この仕組み化をしないで上級者に合わせた方法を貫き通していた、というのはすごいと思います。

セッション2「パフォーマンスを追求したAndroidアプリを作るには」

発表者はt.eggさん。

パフォーマンス…特に省電力に特化したノウハウについて話されていました。パフォーマンス測定するのにUSBにつないでやるのは測定の精度はでないんですね…肝に銘じます。。。あと、JobSchedularやDozeなどを使って省電力化していく、という方法も紹介されていました。

セッション3 「Android,Brillo,ChromeOS」

発表者は@l_b__さん。

www.slideshare.net

Brilloという単語に惹かれて聞きました。しかし、実際は各OSの内部構造についての解説でした。これはこれで貴重な情報だと思うのですが、この手の議論になれていない私にとってはかなり消化不良な感覚を覚えました。。。

セッション4 「Androidエンジニアになって2年の学び」

発表者は@ryugoo_さん。

speakerdeck.com

技術的に斬新なことがないみたいな感じで謙遜してらっしゃいましたが、これはすごく聞きごたえがある内容だと思います。本当に技術力がある人になるために必要な観点を自身の経験を踏まえて話していたのは素晴らしかったです。高等なテクニックを駆使する…というよりあることを実装するのにいくつか方法があるがそれらについて一つずつ検証していく!というのは地味ながら一番大切なことだと思います。あと、流行りとかGoogleが言ったから、といってそれを盲目的に信じていくと痛い目見るからちょっと疑ってかかって…というのもものすごく共感できます。 …というかこの方Android歴2年とは思えないくらいいろいろ知ってるなーと思いました。私がAndroidやって2年たったころって本当にたいしたことなかったしなー。。。

セッション5 「Fireside chat」

DroidKaigi2016の公式アプリの開発に携わったメンバーたちによる開発苦労話。

最初は@konifarさんが実践的なサンプルみたいな形で作ったのがきっかけで…そこからたくさんの人がPull Requestだして…みたいに膨れ上がったもの。issueベースでContributerたちとコミュニケーションをとって…というのが斬新だなと思いました。仮に現職のチームでこれを導入しようとしたらなかなかうまくいかないんじゃないかなー。これがうまくいくのって「やるきとこだわりがあるエンジニアがチームの9割を占めている場合」に限られていると思いますが…。 ただ、@konifarさんが仕事とか発表準備とかでいろいろ大変だった間にみんなががんがん開発してくれて気づいたらissueがどんどん消化されていた、というのに「オープンソースすごい!」と思いました!!

その後・懇親会

所用があって私は18:45までしか入れませんでしたが、いろいろな方とお話しさせていただきました。やっぱりSIerって人はいないようだなー。あ、あと八木さんとちょっとでもお話しできたのはうれしかったですね!

総括

2日間通しての総括ですが…非常に勉強になる2日間でした。ABCだと製品の紹介とかふわっとした内容がメインだったりするのでこういうゴリゴリの開発メインのものがセッションの大部分をしめるのは非常に良かったと思います。 あ、ただ、1つでもいいからビジネス開発視点、マーケット視点で見た開発ノウハウっていうのがあれば聞きたかったなーと思う今日この頃です。そういうセッションが今後のDroidKaigiで出てくることを期待しています。

DroidKaigi2016 1日目 参加レポート

DroidKaigi20161日目に参加したのでそのときのレポートを記載します。 (ちなみに最後から二番目以降のセッションについてはMacの電池が切れたため出ていません。。。)

基調講演「OSSの動向を捉えた実装方針」

発表者は@wasabeefさん

speakerdeck.com

最近はやりのOSSのライブラリをこれでもか!というくらい紹介してくださってました。というかこれが全てだと思います。タイトルから読み取る趣旨は「流行りのOSSを使ってこう実装しろ!」ということなのでしょう。使ったことがある、知っているライブラリはいくつかあったが、名前を聞いたことがないライブラリが半分以上あってまだまだ修行不足だなーと思ったりしました。 この講演でつぶやいた感想の一つは「DataBindingよりもButterKnifeの方がコード素直だよなー。」ということ。 個人的に試してみたいライブラリは ・Lightweight-Stream-API(今回初めて知ったやつです)  Java8で出てきたStreamAPIライクにかけるやつ。

WIre & Protocol Buffer (今回初めて知ったやつです) シリアライズ系のライブラリ。JSON形式とはまた別な方法でシリアライズしている。

・Icepick(Parcelerは知っていたけど…これは初めて知った)  ActivityのライフサイクルなどででてくるBundleオブジェクトにデータを格納するところを楽に書くためのライブラリ?

・Dagger2 & ButterKnife  DIコンテナ

Android Orma  AnntationProcessingを使ったORM。SQLiteを使うことをベースにしている。

セッション1「明日から使えるRxJava頻出パターン」

発表者はkazyさん。

www.slideshare.net

ごつい内容なのかなと思ったら比較的初心者に向けて発表していた内容でした。最初の一歩である非同期処理のところからはいり、複雑なサーバ問い合わせのフローに対してどういうAPIを使って解決していくか?というのをしていました。 各Observableが処理終わるまで待つやつは「CombineLatist」、並列処理を直列化するものは「flatMap」、リトライ回数を指定するretryメソッド、onErrorReturn、初めて聞くものばかりで非常に勉強になりました。 こんどこれらのメソッドを真面目に試してみようかなと思います。

…しかし、このセッション、異常なまでに人口密度が高くて少しばかり酸欠気味だった。。。

セッション2「Android Lintで正しさを学ぼう」

発表者は@Nkznさん。

www.slideshare.net

Lintって単なるソースコードの静的解析ツールかと思ったら、UIガイドラインに沿っていないこととか、他言語対応しにくい構造にしていないかなどをチェックするなどお作法Gメン的な感じのツールだったということがわかりました!しかも、このLintってビルド時だけじゃなくて「./gradlew lint」でも実行できるんですね。しかも、その解析結果をレポートとして表示してくれるとか…すごいですねー、と改めて思いました。 今後開発をやるときはLintについてもう少しまじめに向き合って開発していこうかなと考えています。

セッション3 「僕がテスト書け書けおじさんになった経緯とその過程でやったこと」

発表者は@yuyakaidoさん

speakerdeck.com

資料がちょっと重いですが…内容は専門的ではないので比較的とっつきやすいでした。テストを導入するに至る背景と具体的に何をしてきたか?というのがちゃんと話されていたと思います。しかし、自分一人でやりました感がつよくチーム全体にはまだ浸透させてないっぽいんで今後に期待ですかね。 しっかし、エウレカでさえもExcel方眼紙を使った人力テストをごりごりやっていたことは予想外でした。。。実はこの発表一番の驚きはこれかもしれません。

セッション4 「Dagger2とRealmを利用したモダンな開発」

発表者は北村涼さん。

speakerdeck.com

はてなの開発で検討した技術についてざっくばらんに話してるなーって感じでした。Dagger2、Ream、MockWebSocket使って頑張ってます!というのは伝わりましたー。 内容とは関係ないけど発表しなれていないのかなーというオーラがちょろちょろ出ていた気がします。というか、みなさんに何を伝えたいのかがどうもぼやっとしているし、落ち着きがない感じだったのでやや聞きにくい感じを受けました。。。

総括

総じて開発に特化した内容だったので聴きごたえ抜群でした。下手するとGoogle for Mobileよりも実用性が高いものばかりで大変勉強になりました!血肉にするため早速試してみたいと思います!

あー、あとお昼ご飯のランチボックスもとってもよかったです!Google for Mobileでたランチボックスっぽかったですが、ボリュームが抑え気味だったので私としてはちょうどいいランチだったと思います!

明日は2日目、明日も楽しんできます!!

Realm Meetup #11に参加してきました

1/28に株式会社SansanでおこなれたRealm meetup #11に参加してきました。

realm.connpass.com

本日はそのときのまとめ + 感想を記載していきます。

LT1 Realm Java Recent Update @zaki50 さん

Android版Realmの最新バージョンアップの情報。

speakerdeck.com

Realm0.87.0 から0.87.3になったときの変更点と今後起きる大きな変更点について発表されてました。 今後、Realmを導入する際にはdependenceでなくgradle-pluginを入れる形で対応する必要があるとのこと。 従来のAnnotation Processingによる手法でなくバイトコード変換と呼ばれる方向に変えるためにやるらしい。 これに対応するとRealmObjectがうける如何ともしがたい制約が大幅に緩和されるみたいなのでぜひとも歓迎すべき内容だと思います。(Eclipseな人は涙目かもしれないけど)

LT2 自作iOSアプリ powered by Realm @satoshi0212 さん

Realmを使った?いけてる自作iOSアプリの紹介。 ・先駆者・達人ノウハウ引用 ・音声認識のフル活用 ・デジタルミニチュア(おまけ) のコンセプトで作ったものをそれぞれ紹介していました。 ・先駆者・達人ノウハウ引用 -> ブレストツール音声認識のフル活用 -> 音声キーボード ・デジタルミニチュア(おまけ) -> iPhoneのミニチュア ブレストツールは純粋にすごいと思いました。 しかし、これらのアプリ、どのあたりでRealmを使っているのか見当がつかなかったです。。。

LT3 Realmの遅延ロードと省メモリの仕組み @k_katsumiさん

Realmの岸川さん(@k_katsumi)によるRealmの仕組みについての解説でした。 Realmの基本的な使い方に始まり、クエリメソッド実行・件数カウント・データ取得の際にどのようなデータアクセスの仕方をしているのかを解説していました。なんというか、本当にギリギリまでデータを読まないことに徹しているんだなー、って感じました。 あと、このLTはSwiftベースで解説していました。私はSwiftについてはほぼ門外漢なのですが、それでも全然わかりやすい内容だったので本当に中身が濃いプレゼンだったと思います!

あと、次回のRealm meetupは2/20で、Realmの開発者の一人であるEmanuele Zattin氏 が講演してくださるとか。ちなみにこのお方はCIスペシャリストと称されているみたい。

ここから下はこのLTで出てきたQ&A. Q1. Webアプリとの同期について…どういう風にやるほうが多い?サーバ側とクライアント側のデータどう同期する? A1. べたな方法で、WebAPIを読んだ結果をRealmモデルにつめて保存ってやる。。iOSだとObject Mapper , himotokiとかいうものが関連するらしい。

Q2. 画像のデータをRealmで使う例ある? A2. 16MBまでの画像データなら入れる。ただ、ファイルそのものをDBを突っ込むのは普通ではないらしい。 たしかに削除は同期されるけど、モバイルの場合はファイルはDBに突っ込まないのが柔軟だって。

Android/Fragment単位でRealmのインスタンスを管理する。 -> onStopなどでRealmをcloseするのがいい。。

・ライブアップデート -> 別のスレッドで変更監視をしている。。。

  1. 管理クラスを使ったサンプルとかあれば・・・
  2. Androidにはリポジトリに例がいくつかおいてありますよー。 <- 本格的なアプリっぽいサンプルがくるよー! pull requestでレビュー依頼中 !

LT4 ApplivにRealmを導入した話 @bl_liaさん

Applivというアプリ紹介アプリにRealmを道入したときの話です。

speakerdeck.com

今回の場合は、Realmをキャッシュ専用として扱っているみたいです。そのためWrite用のトランザクションが走っている間も読み込みができるとのことでした。あと、RealmObjectの影響も受けにくいとか。 ここでもう一つ真新しい概念として「Android Clean Architecture」というのが出てきたが…結局MVCとある意味で似ているなーという感じだった。。。

懇親会

懇親会でじゃんけん大会があり、そこでTechBoosterの「Android Internals」をゲットしました! これが一番のお得ポイントでした!

所感

今回初めてRealm meetupに参加したのですが…大変勉強になりますね。特にRealmの中身に関することの説明は中身を知った上での最適な設計をするにあたってもってこいの内容だった! また、都合がつけば参加したいですねー。(しかし、2/20は参加できるかかなり怪しい。。。)でも、Realmについてそこまで詳しくはないのでLTは…いいかな(汗)