舎路(シアトル)日記

シアトルで働く日本人プログラマの日記です。

Acting the Part: Examining Information Operations With in #BlackLivesMatter Discourse を読んだ。著者らが、アメリカの銃乱射事件のソーシャルネットワーク上での広がりについて調べるべく集めていたデータセットから、Twitter が公開したロシアの企業 Internet Research Agency (IRA) のなりすましアカウント群のツイートを集めて、後者について論じている。

ただし、Twitter の公開した IRA アカウントが2,752個、そこから著者のデータセットに含まれていたものを選ぶと96アカウント、さらにそれを、題名のとおり Black Lives Matter 関係のハッシュタグを使っていて、リツイートでのクラスタリングでもってリベラル/保守の大きいクラスタに含まれているものを、とフィルタして29アカウントに絞っているので、IRA の活動全体を論じるというよりは、その一角だけに迫るような内容になっている。

これらのアカウントは完全に自動化されているわけではなく、中にちゃんと人がいるらしく、普通にツイートしたり、アカウント同士でやりとりしていたり、BlackMattersUS.com なんて外部のウェブサイトやポッドキャストがあったり、普通に見ているぶんには、どう考えてもバレそうにない。

また、リベラル側に混じっているアカウントはリベラル側の極端な、保守側に混じっているアカウントは保守側の極端な主張をツイートしたりリツイートする一方、両クラスタに共通して、既存のメディアへの不信感をツイートしてもしていたらしい。

Together with the high-level dynamics revealed in the network graph, this observation suggests that RU-IRA operated-accounts were enacting harsh caricatures of political partisans that may have functioned both to pull like-minded accounts closer and to push accounts from the other “side” even further away.

著者らが指摘する、IRA によって (ロシア政府によって) 操作されているアカウントが政治的な左右の両極として振る舞い、その分断を促進している、という指摘は、だいぶ不気味な話だと思う。

去年に The Pragmatic Bookshelf から出ている “Software Design X-Rays” という本を読んだけど、そこで紹介されていた論文の一つ、Reading Beside the Lines: Indentation as a Proxy for Complexity Metrics を読んだ。

ソースコードの複雑さを示す指標には McCabe’s Cyclomatic Complexity (循環的複雑度) や Halstead’s complexity metrics (こちらは定訳が無い?) があるけれど、かわりにインデントの深さをみるのはどうでしょう、という論文。著者らは SourceForge から色々な CVS レポジトリをダウンロードしてきて、リビジョンごとの diff に既存の複雑さを示す指標と、提案しているインデントベースの指標を計算して、それらの相関について議論している。

結論からいうと、インデントの総量 (SUM) と、標準偏差 (STD) は比較的高い相関係数を示したとのこと。一方で単純に行数を数えただけ (LOC) でも複雑さを示す指標にそれなりに相関があるのはすこし拍子抜け。

著者の Abram Hindle, Michael W. Godfrey, Ric Holt は、その後もソフトウェアの開発プロセスに関する論文を色々と書いているので、読んでみるのも面白そう。

去年に Twitter で Kentaro Hara さんが紹介していた

Googleの2億行のソースコードを解析した結果、関数に渡す引数の順番を間違える系のバグは、引数の個数が6個以上になったときに著しく増えるので、引数の個数は5個以下が望ましいことがわかったという話。

Andrew et al. の Detecting Argument Selection Defects を読んだ。

題名の通り「引数の渡し間違いによるバグを見つける」ことに挑んだ論文で、著者らは提案しているアルゴリズムを Error Prone のパターンとして実装し、Google 社内のみならず、オープンソースソフトウェアにもバグを報告、実際に修正させている。ここでの「オープンソースソフトウェア」には、なんと OpenJDK の ConcurrentHashMap も含まれている

アルゴリズムはわかりやすい。引数の宣言に使われている名前と、そこに渡されている変数やメソッドの名前とを比較して、文字列同士の編集距離をもって、元々の引数の渡しかたと、静的型的にありえる別の渡しかたについて、どちらが「もっともらしい」かを計算している。

宣言されている引数の名前群を一つの集合、実際に渡されているものの名前群をもう一つの集合として、bipartite graph (二部グラフ) を構築して、Hungarian algorithm (ハンガリアン法) で解いているのが、私にはちょっと新鮮だった。ナップザックに何かをつめるなんて面接でしか解かないのでは、なんて思っていてはいけない。

ちなみに、単純なアルゴリズムだけでは false positive が多いらしく、色々とヒューリスティックも実装されている。例えばメソッドやクラスの名前が backwardsFooBar だったら、引数をひっくりかえして渡しているのは意図的かもしれない。論文では「正規表現でそういう名前を見つけます」なんて漢らしいことが書いてあったけれど、Error Prone の Java コード側を見ると、EnclosedByReverseHeuristic に単語のブラックリストがあった。どちらにしても涙ぐましい。

冒頭で引用した「引数の個数が6個以上」というくだりは、後半の “API DESIGN IMPLICATIONS” に登場する。一方で Error Prone の Java コード側、ArgumentSelectionDefectChecker を見ると、早速引数を6つ渡していたりする。名前つき引数が無い言語は辛い。

去年のこと

Jan 3, 2019

2018年末には steps to phantasien が更新されることはなかったらしく、ちょっと残念。インターネットから人々が消えていくのは悲しい、と一瞬だけ思ったけれど、moritta さんは Misreading Chat というポッドキャストを一年近くやっているわけで、むしろ私よりずっとがんばっているのだった (よく聞いてます)。

そういえば以前に、

steps to phantasien の文体やスタイルにやられてブログがパスティーシュめいてくる現象を、ぼくはこの数年間でいくつも目撃してきた。これをひそかにモリタ・シンドロームと呼んでいる。

なんて書いていた mooz さんとは、去年に、Twitter 経由で一緒にご飯を食べる機会があった。普段はソーシャルメディアから距離をおくようにしているのだけど、こうやってインターネットで文章を読んだことがある人に気軽にあったりできるのは良い。逆に、2018 Advent Calendar 2018参加しそこねたのは、その距離のとりかたが裏目に出た出来事だった。

Q4 をふりかえる

Dec 28, 2018

今年は、クリスマスの週 (12/24-) とその翌週 (12/31-) を丸々休みにしたので、わりとゆったりと年末を過ごしている。

思いきりよく二週間も休んだのは、年の切り替わりに失効してしまう有休があるからで、これは良くない。いまの会社は公式の休暇が少なめなので、もう少し自分で計画して休暇をとるべきだったと思う。

一方で、12月はクリスマスのセールや同僚の休みのせいで「待ち」が発生しがちで、一年の中ではあまり効率的に働けない月でもある。日本人としては年末年始は休みたい (「仕事納め」をしたい) というのもあり、この時期に長めに休んでしまうこと自体は名案だったとも思う。

可視化

可視化ブームはこの後も続いて、Visualizing Crates.io というのを作った。Rust まわりの可視化は、やりたいことがいくつかあるのと、英語圏の人々にそれなりに届くので、もうしばらく継続の予定。

読書

“Software Design X-Rays” は、リファクタリングや「良いコードとは何か」という問題に、定量的なアプローチで立ち向かう良い本だった。Misreading Chat の初期に Empirical Software Engineering と呼ばれる分野の論文の紹介があったけれど

そういうのが好きなひとにはおすすめです。

“Make Time” も、自分の生活にそれなりにとりいれられて、インパクトがあって良かった。

読んだ本についてここに書くのは滞りがちで、例えば、最近 It Doesn’t Have to Be Crazy at Work を読み終わったけれど、なにも書けていない。レビューではなく記録と思って、もうちょっと淡々と書くと良いのかもしれない。

そのほか

そのほかはバラバラ。英語ブログは、テーマしばりをゆるくして更新頻度をあげよう、と思ったけど途中で頓挫した。

仕事

“Make Time” の助けと、単純にミーティングが多かった時期を抜けたのとで、それなりに良く働けたと思う。AWS re:Invent のキーノートをちゃんと見たのは良かった。Alexa には「対話型エージェントって結局のところなんなのか?」という、まだ誰も正解をわかっていないような面白さがあるけれど、AWS も人生で一回は働いてみたいと思う。

育児

寝かしつけはまた妻のほうが多め、というか「パパと寝ようか?」と聞くと「ノー」と返されるようになって悲しい。それでもベッドの横に座って見守ったりしている。

ポモドーロタイマー

いまだに完成せず。あと3日でなんとかなるか?

アメリカ生活

車の免許について、ようやく Knowledge Test をパスするところまでいった。あとは講習をうけて、実技テストにうかれば車を運転できるようになる。講習は必須ではないけれど、私は日本の免許もないので、うけておいたほうが無難だろう。

多分、来年は車を買うことになるんじゃないかと思う。