giantneco’s blog

技術メモ

buildersocn に参加してきた 2

その 1 の次の日に参加してきたセッション。

静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話

https://www.slideshare.net/takuyaueda967/ui-78581401

@tenntenn さんによる Go の話。

複雑な配信条件を記述するために Go 言語を DSL として使用している。

Googleが開発したニューラルネット専用LSITensor Processing Unit」

@kazunori_279 さんによる TPU の話。

第1世代 TPU の話で、発表中に説明された特徴としては

  • NN の計算ではメモリへのロード・ストアを非常に少なくできる
  • 精度が重要ではないので、浮動小数を整数に量化している
  • 演算回路をパイプライニングして計算を行っている

以前に、TPU は 1 CPU サイクルで 16x16 の行列計算をしている、という話を聞いたことがあったが、 今回の話を聞く限りはスループットでの話のようだ。

Make you a React: How to build your own JavaScript framework.

https://docs.google.com/presentation/d/1qh5ZCMI2e45Z4YZBcI62NMDt-1H2Uwx0sZ3T8ScNStk/pub?start=false&loop=false&delayms=60000

@jbucaron さんによる JavaScript で Reactive フレームワークを作る話。

Reactive フレームワークで使われる仮想 DOM の仕組みと、それを実装する場合どうなるか、とうことをコードを交えて説明してもらえたので非常にわかりやすかった。

仮想 DOM の裏側ではやっぱり結構泥臭いことしているんだな。

OSS貢献超入門

https://www.slideshare.net/shigemk2/oss-78585757

@shigemk2 さんによる OSS に貢献するにはどこから始めるのがおすすめかという話。

結論は、好きなリポジトリを watch しよう。そのためには gitter などをスマホに入れておくのがおすすめらしい。

builderscon に参加してきた 1

builderscon に参加してきた。

オープニングセッションによると YAPC::ASIA の精神的後継であるとのこと。 セッションに統一したジャンルはないということだったが、 もともと Web 系のカンファレンスが前身だったらしくセッションもその傾向が強いようだ。

自分は若干門外漢な感じだが、カンファレンスのテーマ自体「知らなかった、を聞く」なのでまあいいんじゃないかと思う。実際、行ってきたセッションではとりあえずはずれはなかった感じである。

以下行ってきたセッションの感想。

DeepLearningによるアイドル顔識別を支える技術

speakerdeck.com

@sugyan さんによる発表。 テーマとしては、Deep Learning 自体より、 それを実施するまでに使用した技術を紹介するようなセッションだった。

アイドル顔画像のクローリングから始まり、画像の回転のための OpenCV のために Docker で環境構築したり、ラベル付けを簡単にするためにWebアプリを作ったりと、ほぼ0から顔認識の実施までにどういうことをしたかが分かる良い発表だった。継続大事。

マイクロチームでの高速な新規開発を支える開発・分析基盤

speakerdeck.com

@timakin さんの発表。

少人数・短期間でアプリのリリースをするためにどういうことをしたか、という内容で、 自分にとってはかなり知らない世界の話だった。 何をどう組み合わせればやりたいことが実現できそうか、というノウハウもすごいが、 それを手早く実現するために Infrastructure As Code を組織で実践できているのもすごい。

自分が同じようなことをやるとしたら環境構築の部分ですぐつまずくと思う。

あと CircleCI は相当すごいらしい。

複雑なJavaScriptアプリケーションに立ち向かうためのアーキテクチャ

speakerdeck.com

@Shinpeim さんの発表。

ちょうど DDD を勉強していたので、 割と近い内容の話を実例を見ながら聞けたのはタイミングとしてもよかった。

State の部分についてはイメージがちょっとつかめなかった。単にモデルとして持っておくのとどうちがうのか。 コードは公開されてたと思うので後で目を通しておきたい。

あと Helper としていたのは DDD だと Service に当たるものなんだろうか。

Building high performance push notification server in Go

speakerdeck.com

@cubicdaiya さんによる発表。

Notification の push 先が遠い場所にあるため高レイテンシになり、Go の非同期な並行処理で性能が出せたという話。 コード上ですごい特別なことをしているわけではないようだったので、やっぱり Go すごいなという結論になるか。

その他

ランチセッションは部屋が人でいっぱいだったので行かなかった。弁当も受け取り損ねた。仕方ないね。

社内 DDD 勉強会 #5

www.slideshare.net

社内で行う予定だった DDD 勉強会のスライド。 来週に延期になったので後で修正するかもしれない。 DDD本をとりあえず浅くカバーしたのでこれで一区切りつけたい。 もうちょっと技術的な話の方が人集められたんだろうか?

読んでで思ったが相当わかりづらい気がする。

社内 DDD 勉強会 #4

www.slideshare.net

社内で行った勉強会の資料。

内容としてはほぼ DDD に書いてあるとおり。 DDD 本自体は若干古いので、紹介されているリファクタリングの手法は割と古いのかもしれない。

DDD としてリファクタリングは必須だろうが、リファクタリング手法としては特に DDD 独自の変わったことをしているわけではないようだった。

新宿 Geek Lounge 第1回に参加してきた

7 月 6 日に新宿で行われた新宿 Geek Lounge に参加してきた。 新宿 Geek Lounge はセプテーニオリジナルさん主催のイベントで、今回が最初の開催になる。 Scala を使っている会社なだけあって、今回のテーマも Scala だった。

開始時間が割りと遅めだったので、夕飯をがっつり食べてきてしまった。

Akka の話

OE_uia さんの VoIPScala + Akka で作った話 資料はここ https://www.slideshare.net/TaisukeOe/real-world-android-akka-77574727

  • Scala + Akka を Android 上で使用して、ステートフルな非同期ストリームである VoIP にうまく対処した
    • Akka で状態を Actor 内に隔離したり、Actor ヒエラルキーで子の監視をしたり
  • ScalaAndroid で使うにはビルドなどで工夫が必要になるが、いろいろツールは用意されている
    • ただやはり 64K 制限の対策が必要だったり、AndroidJava バージョンに起因する問題などもある

個人的には Android ではもう Kotlin でいいんじゃないかとも思うが、確かに Actor を使えるのは便利かも。

Scala Colletion Method 入門

parallelto さんによるコレクションメソッドの話。 資料はここ https://speakerdeck.com/parallelto/scalakorekusiyonmesotudoru-men

内容てしては、コレクションメソッドを使う上での注意点や、あまり使われていないが便利なコレクションメソッドの紹介がされていた。

コレクションメソッドはやはり便利だが注意すべき点もあるので、ここら辺ハマる人は多そうだな。

プログラミング言語雑感

3,4 月あたりに仕事で複数の言語を触る機会があったので、その時に得た知見を書き留めておく。 ちなみに作業自体はコードの静的解析に関するもので、 各言語のリントやパーサ周りについて調査して、ほしいメトリクスがなかったら実装するというものだった。

Go

社内で Go 言語勉強会を開いていたのもあり、コードを書き始めるのにそれほど手間取らなかった。 型を書かずに初期化できる:=記法と、型を後置する記法は慣れてくるとと非常に使い勝手がよかった。 逆に公開する関数・構造体の頭文字を大文字にするのは最後まで慣れなかった…。

パーサも言語組み込みで用意されていてかなり扱いやすい。 静的解析ツールも数多くあったので CI に組み込めると開発が捗るはず。

Python

しょっちゅう触っている言語。今回触った言語の中では一番使っている。

関数のステップ数を測るリンターがないかと探していたのだがなんとこれがなかった。 どうも PEP にもステップ数に関する規約がないので、おそらく PEP に取り入れられない限りは静的解析ツールでの対応もないはず。

パーサは言語組み込みのastモジュールがありこれを使って作業したが、ASTノードの終了行がずれるというバグがあって結構苦労した。

Clojure

「七つの言語、七つの世界」を読んだときに Clojure は少し触っている。

emacsparedit-mode はかなりよく、コードの変形が非常に直観的に出来た。 paredit-mode もそうだが、cider-mode などあり emacs との相性が非常によい。 ここら辺はさすが Lisp という感じで、他の言語ではなかなかできないじゃなかろうか。 関数型言語として書いている楽にかけていたものの、オブジェクト指向で副作用を入れ始めるとつらくなってくる。正直あまりうまく書けてなかったと思う。

静的解析ツールはそれほどない。試した中ではeastwoodがよさそうだった(ツール名は何かのダジャレらしいがわからず)。

パーサはtools.analyzerというものが公式に用意されていて最初はこれを使おうと思っていたのだが、 マクロを展開してしまうため元のコードのメトリクスを測るという目的には使えなかった。 代わりにrewrite.cljというサードパーティのライブラリを使ってなんとか解決できたが、最初の想定より苦した。

TypeScript

TypeScript にはこの作業時に初めて触った。とはいえ javascript と npm には触ったことあったので、導入までさほど苦労はしなかった。 やはりこういう環境を楽に作れる仕組みは、新しく出てきた言語が受け入れられるには必要な条件なんじゃないかと思う。 触った範囲だと javascript に型が付いたぐらいだが言語としての出来は非常に良かったと思う。 一方でビルド周りは今一つ。結局何でビルドするのが良いのかその時はわからず、Makefile で書いてやろうかとも一瞬思ったり。今ドキュメント見たら gulp を使った場合が書かれていた。そうなの?

新しい言語だけあってメトリクス測定は少ししかない。tslintというのがあるくらい。

パーサは typescript が提供する API を使えば楽に利用できるので、静的解析ツールは割と楽に作れると思う。

Swift

Swift もこの作業時に初めて触った。 残念ながら、がっつり実装するところまでは進まず、ほぼ調査だけで終わった。 すこし見た印象だが、すごい驚きがあるような言語でなかったと思う。 あと驚いたことにセルフホスティングされた言語ではなかった。

静的解析ツールはswiftlinttailorというのがあるくらい。

またパーサは提供されていない。 代わりに SourceKit を利用すると、ある程度ソースコードを解析した情報が取れる。 ただこのライブラリは SourceKitService というデーモンに問い合わせをしているもので、 これを利用して独自に静的解析ツールを作るのは厳しいんじゃないかと思う。 もしやるのであればtailorが ANTLOR を使ってやっているように、外部のパーサジェネレータを使って作ることになるかと。

その他

メトリクス測定ツールを探すさいには次のページを参考にした。

wikipediaにも静的コード解析ツールのリストがあったが、こちらは最近の言語についてはあまり紹介されていないようだった

DDD 本第3部

DDD の第3部を読んだ。 詳細は社内勉強会向けの発表資料でまたまとめる予定。

第3部はモデル及び実装のリファクタリングについての話である。

実装でなく、モデルをどうリファクタリングするかの話もあって、この部分は DDD っぽい。 ドメインエキスパートとの会話で、どこに気を付けるとリファクタリングのきっかけを見つけやすいか?というのは覚えておいて良さそうだ。

他には実装向けのリファクタリングの際に有用なパターンの実例に加え、アナリシスパターンデザインパターンの紹介が出てきた。モデルのリファクタリングに比べると目立って変わった手法は紹介されていない。

DDD のプレゼンでよく出る第2部、第4部あたりに比べて第3部の話を聞かないのは、 DDD 独自のリファクタリング手法というのがあまりないからなんだろう。 IDDD本でもこの部に対応する話はなかったような気がする。