読者です 読者をやめる 読者になる 読者になる

Brace, Paren, Semicolon.

脳科学を勉強しているエンジニアのようなもの

カンデル神経科学を読み始めた

神経科学

カンデル神経科学を読み始めました。

f:id:oimou:20161231004746j:plain

カンデル神経科学

カンデル神経科学

  • 作者: 金澤一郎,宮下保司,Eric R. Kandel,James H. Schwartz,Steven A. Siegelbaum,Thomas M.Jessell,A. J. Hudspeth
  • 出版社/メーカー: メディカルサイエンスインターナショナル
  • 発売日: 2014/04/25
  • メディア: 大型本
  • この商品を含むブログ (1件) を見る

カンデル神経科学(原題:Principles of Neural Science)は,脳科学・神経科学のバイブルとも呼ばれる分厚い本。厚さ6cmくらいあります。

目次は下記の通り。

  1. 概論
  2. 神経細胞の細胞・分子生物学
  3. シナプス伝達
  4. 認知の神経基盤
  5. 知覚
  6. 運動
  7. 無意識下および意識下の神経情報処理
  8. 神経発生と行動の発言
  9. 言語,試行,情動,学習

f:id:oimou:20161231004618j:plain

自分自身,特に神経科学のバックグラウンドがあるわけではありませんが,前職で機械学習の論文を読みながらニューロンの仕組みを勉強したりしていたので,脳や神経の仕組みに関して興味はかなりありました。それでも,神経細胞の働きや視覚の仕組みを少し触る程度だったので,ほとんど初学者も同然。読めば読むほど,脳の仕組みの複雑さに驚かされます。

f:id:oimou:20161230161727j:plain

脳のペーパークラフトのデータが配布されていたので作ってみました。立体的構造を捉えられるので,理解の助けになります。

2017年も引き続き読んでいきます。何かアウトプットできると良いなあ。

エリック・エヴァンスのドメイン駆動設計を読み始めたけど、分からないことが多い

f:id:oimou:20160812011400j:plain

最近、エリック・エヴァンスドメイン駆動設計(通称:DDD本)を読んでいます。

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

ネット上で見かける「分厚い」とか「わかりにくい」という意見に圧倒されて、なんとなく食わず嫌いしていたDDD本ですが、ようやく手を付けました。まだ読み終わってはいませんが、考えをまとめるために感想など書いていきたいと思います。

本を読み始める前の知識レベルと立場

ドメイン駆動設計(以後、DDD)」というのは、察するに、きっとドメイン駆動でソフトウェア設計を行うことを指すんでしょう。 ドメイン駆動というのは、つまりソフトウェアが問題解決せんとする対象領域(=ドメイン)の考え方に則って(=駆動)設計を進めるということなんでしょう。

そのくらいの知識レベルで読み始めました。

なお、自分の立場はどちらかというと「開発者」寄りです。

第1部 ドメインモデルを機能させる

ドメインをいかに切り取って設計に落とすかが、ここでのキモになります。

どんなモデルも、現実の何らかの側面や興味の対象となる概念を表している。モデルとは簡素化である。つまり、当面の問題を解決する上で関連する側面を抽象化し、それ以外の詳細を無視することによって行われた、現実に対する1つの解釈なのだ。

ドメインを理解し、ドメインモデルを作り上げ、それをチームメンバでのコミュニケーション基盤とするというのは、通常のソフトウェア開発プロジェクトでも行われていることだと思います。 DDDでは、ドメインモデルの基本的用法を次の通り定めています。

モデルの基本的用法

  1. モデルと設計の核心が相互に形成しあう
  2. モデルは、チームメンバ全員が仕様する言語の基盤である
  3. モデルとは、蒸留された知識である

2はストンと理解できますね。本書では「ユビキタス言語」という用語も登場します。

1はDDDについて話を聞くたびによく耳にする特徴でした。つまり、コードの中でモデルと同じ語彙を使ったり、逆にコードの変更がモデルにフィードバックされたり、といった深い関連が基本的用法として定義されているのです。 これほどモデルと実装が密結合した設計は、相当プログラミングに明るくないとできないんじゃないかと不安になってしまいますが、実際どうなんでしょうね。

3は2と似ているような気もしますが、ドメインを観察し、理解し、切り取って抽出するという蒸留プロセスを経て得られた知識のことを指しています。 こうして得られた知識は、チームがドメインの捉え方の可視化になります。

うーん、でもやっぱり2と3は似ているように感じます。ドメインの捉え方が可視化されたら、それはすなわち言語基盤なのではないか?と思ってしまいます。分かれている理由がまだよくわからない。

第1章 知識をかみ砕く

筆者自身のプリント基板デザインツールの設計についての事例が紹介されています。ドメインエキスパートと開発者が一緒になってモデリングを進めています。

PBCエキスパート1:コンポーネントはチップでなくてもよいのです。 
開発者:では、単に「コンポーネント」と呼んだほうがよいですか?
エキスパート1:我々は「コンポーネントインスタンス」と呼んでいます。同じコンポーネントが多数ある場合もありますから。

ところでこの事例では、ドメインエキスパートと開発者の両者がモデリングについて非常に前向きに議論しているように見受けられます。おそらく、この例ではドメインエキスパート側もプリント基板デザインをしているだけあって、モデリングに向き合うハードルが元々低いんではないでしょうか?

ドメインエキスパートによってはモデリングに向き合うハードルに差があるはずです。それをどうやって乗り越えてもらうか、うまく二人三脚でモデリングに取り組むか、もう少し実践的な話も知りたくなりました。

第2章 コミュニケーションと言語の使い方

ユビキタス言語」と呼ばれるようなチーム共通語彙は非常に大切ですが、残念ながらあまり一般的ではありません。ドメインエキスパートは専門用語を(時にさまざまなニュアンスで)使用し、開発者もまた独自に抽象化したモデルの専門用語を使用します。この通訳コストが非常に高い。高いだけならまだしも、その弊害は「言った言わない問題」「実装漏れ」などの形で現れてくるからまた厄介なんでしょうね。

ドメインエキスパートは、ドメインについての理解を伝えるには使いにくかったり不適切だったりする用語や構造に異議を唱えるべきであり、開発者は、設計を妨害することになるあいまいさや不整合に目を光らせるべきである。

開発者としてのべき論はよく分かります。一方で、ドメインエキスパートに対して異議を唱えてもらうのは具体的にどうすれば良いのでしょうか?まさか「異議を唱えてください」と伝えるだけで達成できるようなことでもない気がするので、もう少し実践的な例が知りたいです。これも後で調べてみよう。

また、この章では「モデルは図ではない」という重要な記述もあります。一通り読み終わったらまとめることにします。

第3章 モデルと実装を結びつける

そのプロジェクトには、ドメインモデルがあった。しかし、動作するソフトウェアの開発を直接支援しないなら、紙に書かれたモデルが何の役に立つというのだろう?

確かに。DDDに際して「ドメイン」「モデル」「コード」という3要素があるとして、その結合度にはいくつかパターンがありそうだと気づきました。

  1. ドメイン」<-(密)->「モデル」<-(疎)->「コード」
  2. ドメイン」<-(疎)->「モデル」<-(密)->「コード」
  3. ドメイン」<-(密)->「モデル」<-(密)->「コード」

1は、あまりにも写実的にドメインモデルを作りすぎてコードに落とせなくなってしまったパターン。
2は、俗にいう「誰が書いても同じコードになる設計書」問題と似たようなパターン。
3は、DDDが理想とするドメインモデルの姿ですね。

でも、そうだとすると気になるのが、そんなに密結合なドメインモデルをどうやって作成・更新していけば良いのか?という現実的な問題です。その答えのひとつがこれでした。

実装を一分の狂いもなくモデルに結びつけるには、通常、オブジェクト指向プログラミングのようなモデリングパラダイムをサポートする、ソフトウェア開発のためのツールと言語が必要である。

…なるほど、だからよくJavaでサンプルコードが紹介されていたりするんですね。しかしツールの支援が必要にせよ、コードが常にモデルに反映される開発環境というのは理想的のように感じます(実際どうなのかはよく分からない)。

まとめ(られない)

まだ第1部をサラッと読んだだけですから、まだまだ分からないことが多いです。特に、実践的な例を考えながら読んでいるとやはり色々ハードルがあるように思えてきます。引き続き読み込んでいきましょう!

最近読んだ本

4月が終わってGWに入りました。4月に買った本を備忘録的にまとめます。

HARD THINGS

HARD THINGS

CEOになる人のための本ですが、日本語序文(現ヤフー小澤氏)では「ひとりでも部下がいる人に特におすすめしたい」と書いてあります。 仕事で物事がうまくいかなくなったとき・ネガティブな出来事に直面したときのリアルな感情が伝わってきます。 リアルすぎて、読んでいて心臓と胃が痛くなってくる。おすすめです。

インフォメーション―情報技術の人類史

インフォメーション―情報技術の人類史

情報技術史の本。とにかく分厚い。厚さが5センチくらいあります。 アルファベットや電信という「テクノロジー」の発明が時空間を超えた情報伝達を可能にし、人類は発展してきました。 トーキングドラム・モールス信号・暗号技術・エントロピー・DNAなどなど。 知的好奇心を滅茶苦茶にかきたてられます。

「全世界史」講義 II近世・近現代編:教養に効く! 人類5000年史

「全世界史」講義 II近世・近現代編:教養に効く! 人類5000年史

世界史。2巻構成のうちの2巻目で、こちらは15世紀から現代までの世界史です。 内容がしっかりと時系列に並んでいて、今読んでいる部分が西暦何年の出来事なのか見失うことがない。素晴らしい構成力だと感じました。 ただしその反面、世界中の出来事が時系列に並んでいるので、ある一国の歴史を追うには向きません。 他の歴史書と一緒に読むのがおすすめです。

「24のキーワード」でまるわかり!  最速で身につく世界史

「24のキーワード」でまるわかり! 最速で身につく世界史

人類の起源から現代までの世界史。 「宗教の話」「芸術と科学の話」などテーマごとに章立てになっているので、ある時代の出来事が後の時代にどう影響したかが分かりやすいです。 ただしこちらは時系列が分かりづらい。自分は上で紹介した全世界史講義と一緒に読みました。

「ふんばろう東日本支援プロジェクト」を立ち上げた西條剛央さんの著書。 東日本大震災において、被災地外からの後方支援の道を切り開いた「ふんばろう」プロジェクトはどのように立ち上がったのか、その経緯が記されています。 今回の熊本地震でも「支援したいのに、できない」という無力感を持っている人が全国にいるように思いますが、きっとこの本にヒントが隠されています。

カラー版 忘れてしまった高校の生物を復習する本

カラー版 忘れてしまった高校の生物を復習する本

高校生物の内容がイラスト付きで分かりやすく紹介されています。 全体をさらっと復習するにはもってこいの本。

言わずと知れたチャート式です。高校時代に戻った気分でノートを取りながら読み進めています。 練習問題がほとんど無いので、ただ写経しているだけだと全然頭に入ってきません。ノートの取り方を試行錯誤しながら進めています。

こちらは練習問題があるので生物よりはいくらか進めやすいです。 できれば実験しながら進めたい。

高校数学でわかるフーリエ変換―フーリエ級数からラプラス変換まで (ブルーバックス)

高校数学でわかるフーリエ変換―フーリエ級数からラプラス変換まで (ブルーバックス)

フーリエ変換は大学で学びましたが、最近会社でフーリエ変換の知識が欲しくなるタイミングが何度かあったので、勉強しなおすことにしました。 数学関連の本って、だいたい歴史や実用例の記述が多すぎて数式が少ないかその逆のパターンが結構ありますが、この本は歴史・実用例・数式がちょうど良いバランスだと感じます。

若手社員が育たない。: 「ゆとり世代」以降の人材育成論 (ちくま新書)

若手社員が育たない。: 「ゆとり世代」以降の人材育成論 (ちくま新書)

「若手社員」を社会学的に捉えたときにどうカテゴライズされるのか、というのが分かりやすく書かれています(本の主題ではないと思いますが、、)。 一応自分も若手社員にあたるので、世間の中でどこにカテゴライズされるのか、立ち位置を知っておくには良さそうです。

入社1年目の教科書

入社1年目の教科書

新入社員の皆さんにおすすめの本です。 新入社員のための50個のルールが紹介されていますが、中には「それはちょっと違う気がする、、」と感じるルールもあったりします。 ただ、職場環境によってルールが合うか合わないかは変わってくるので、世間の平均を知るという意味で価値のある本だと思います。

中央銀行が終わる日: ビットコインと通貨の未来 (新潮選書)

中央銀行が終わる日: ビットコインと通貨の未来 (新潮選書)

ビットコインの経済との関わりと技術的解説が書かれています。 ビットコインのことを知るというよりは、ビットコインを絡めて経済学の知識を得られるというところに価値を感じました。 技術的解説のところは、数式がなくて逆に分かりづらい。

【CD3枚付】TOEFLテスト英単語3800 4訂版 (TOEFL(R)大戦略)

【CD3枚付】TOEFLテスト英単語3800 4訂版 (TOEFL(R)大戦略)

TOEFLの英単語集です。学校の授業で使う書籍以外で英語を勉強するのは初めてなので、良いのか悪いのかよく分かりませんが、Amazonで評価が高かったので買いましたw 以前、Germanの同僚に「英語力が不安だからTOEFL受けようと思ってる」って言ったら「It's useless. 意味が伝われば良いんだよ」って言われてしばらく悩みましたが、結局買ってしまいました。今年中に1回テストを受けたい。

それでも飯舘村はそこにある 村出身記者が見つめた故郷の5年

それでも飯舘村はそこにある 村出身記者が見つめた故郷の5年

原発事故をうけて全村避難となった福島県飯舘村を取材した本です。 避難指示の後、最初は避難せずに残っていた人もだんだんと村を去り、手入れされなくなった畑に雑草が伸びていく様子が脳裏に浮かびます。 避難生活を余儀なくされた方々が故郷や国に対してどんな気持ちを抱えているのか、うかがい知ることができるかもしれません。

現代免疫物語beyond 免疫が挑むがんと難病 (ブルーバックス)

現代免疫物語beyond 免疫が挑むがんと難病 (ブルーバックス)

がんの免疫療法にまつわる研究者の挑戦の歴史が描かれています。 免疫細胞が生体内でどのように働くのか分かりやすく解説されているほか、スタインマンをはじめとする免疫学の研究者の歴史が非常に興味深い。 特に、自らががんに冒されながらも研究を続けて、死後にノーベル賞を受賞したスタインマンの研究者魂には感動しました。

いじめとは何か―教室の問題、社会の問題 (中公新書)

いじめとは何か―教室の問題、社会の問題 (中公新書)

学校における「いじめ」の定義や各国の対策が書かれています。 本の中ではいじめられる側の脆弱性(Vulnerability)という言葉が使われていますが、定義によるといじめられる側が先天的・絶対的に脆弱性を持っているのではなく、いじめる側との関係性の中で脆弱性が生み出され、いじめに繋がるということらしいです。 将来子供ができたら気をつけたい。

アサーション入門――自分も相手も大切にする自己表現法 (講談社現代新書)

アサーション入門――自分も相手も大切にする自己表現法 (講談社現代新書)

よく聞く「アサーティブコミュニケーション」についての本です。 入門というだけあって内容の薄さは否めないですが、「アサーティブコミュニケーション」と比較して「非主張的コミュニケーション」「攻撃的コミュニケーション」がどのような心理に繋がっているのかという話は参考になりました。

自分を知るための哲学入門 (ちくま学芸文庫)

自分を知るための哲学入門 (ちくま学芸文庫)

「自分を知る」というテーマを軸に様々な哲学者が紹介されているので、フロイトユングフッサールデカルトなどといった哲学者の思想がどのように関連しているかが分かります。 あと、本筋とは関係ないけど挿絵がシュール。

乃木坂って、どこ?Google Cloud Vision APIの画像認識で乃木坂の位置を探してみた #乃木坂46

こんにちは。突然ですが皆さんは乃木坂46をご存じでしょうか。

乃木坂46秋元康プロデュースのアイドルグループ。AKB48とは公式ライバルにあたるらしいです。

YouTubeにて公式公開されているPVがあったりします。知らない方はとりあえず見てみましょう。

とてもフレッシュですね。

ところで、乃木坂46ファンが最初にぶつかる壁が「乃木坂って、どこ?」という疑問だそうです(自分調べ)

AKB48はアキバ、SKE48は名古屋、NGT48は新潟、乃木坂は...どこ?

「乃木坂の詩」という曲にもこんなフレーズがあります。

乃木坂がどこにあるかなんて 僕らは何も知らずに来たんだ

自分らでも知らんのかい!

あまりにもよくある疑問なので、「乃木坂って、どこ?」というテレビ番組がやってるくらいです。ぜひ見てみましょう。

www.nogizaka46.com

というわけで、乃木坂が一体どこにあるのか調べてみることにしました。

どうやって調べるか

それにしても、乃木坂が一体どこにあるのかなんてどうやって調べたら良いのでしょうか。

Googleで「乃木坂 場所」で検索してみる?いやいや、そんなに簡単に見つかるわけがない...これは却下。

まわりの人に聞いてみる?いやいや、ファンでも分からないのに一般人が知ってるわけがない...これも却下。

他にもいろいろな手段で乃木坂がどこにあるのか調べられないか考えましたが、八方塞がりになってしまいました。

疲れ果ててしまったので「ハルジオンが咲く頃に」のPVを見て頭を休めることにします...

はあ。まいまい(深川麻衣)かわいい。

ちなみに、残念ながらまいまいは6月には卒業してしまうのです。その前には乃木坂がどこにあるのか見つけておきたい...

それにしても手元に残されたのはこのPVだけ...

どうやって乃木坂を見つけたらいいんだ...

PVだけ...

PVだけ...?

はっ!

人工知能でPVが撮影された位置を推定すれば、乃木坂の場所が分かるんじゃないか?!

こんなニュースもあるくらいだし。

Google、写真から撮影された場所を特定するAI「PlaNet」を開発 - エキサイトニュース

この方法なら乃木坂の位置が分かりそう!

テンション上がってきました。早速実装してみましょう。

PVからフレームを抽出する

f:id:oimou:20160409184759j:plain

まず、公式公開されているPVのURLを元に、mp4ファイルをダウンロードしてきます。

# download.py
from pytube import YouTube as YT

urls = [
  ...
]

for url in urls:
    yt = YT(url)

    try:
        video = yt.get("mp4", "720p")

    except:
        video = yt.get("mp4")

    video.download("./video")

    print("Download finished: " + url)

ダウンロードが完了したら、FFmpegを利用してフレームを抽出します。

それほど頻繁に景色が移り変わるシーンはないので、フレームレートは0.2Hzに設定し、5秒毎に1枚のフレームを抽出するようにしました。

# extract-frames.sh

for f in video/*.mp4; do
        DNAME=$(basename ${f%.*} | tr '.' '_')

        mkdir -p frame/${DNAME}
        ffmpeg -i ${f} -r 0.2 frame/${DNAME}/thumbnail-%04d.jpg
done

これで約1900枚のフレームを抽出することができました。

さて、この画像を元に位置情報を推定していきます。

画像認識を行う

抽出したフレームにはメタデータが付いていないので、フレームから位置情報を推定するには画像認識が必要です。

どうやって画像認識をするか。

Google Street ViewやTwitterから位置情報付き画像を集めてくればディープラーニングで位置検出器を作れるなーと妄想しましたが、ちょっと大変そう。

そういえばGoogle Cloud Vision APIが先日公開ベータとなり、一般ユーザが利用できるようになりましたね。

このCloud Vision APILANDMARK_DETECTION と呼ばれるランドマーク検出機能を備えており、画像から位置情報を推定できるようになっています。

ちょうどいい機会なので、Cloud Vision APIを使って実装することにしました。

jp.techcrunch.com

Cloud Vision APIとのやりとりは、下記ブログ記事を参考にNode.jsで書いてみました。

Node.jsとGoogle Cloud Vision API使って色々な画像認識試してみた。 | Indie Engineer Blog

使い捨ての実装なのでソースコードは恥ずかしいですが、1リクエストにつき16枚のフレームを一括で送るようになっています。

# vision.js

"use strict";

const fs = require("fs");
const vision = require("node-cloud-vision-api");

vision.init({
        auth: "API_KEY"
})

let dirs = fs.readdirSync("./frame")
let count = 0;
let nEmit = 0;
let paths = [];

for (let dir of dirs) {
        if (!fs.statSync("./frame/" + dir).isDirectory()) continue;

        let files = fs.readdirSync("./frame/" + dir);

        for (let file of files) {
                let path = "./frame/" + dir + "/" + file;

                paths.push(path);

                count++;

                if (count >= 16) {
                        emitPaths();

                        nEmit++;

                        count = 0;
                }
        }
}

function emitPaths() {
        let _paths = paths.concat();
        let reqs = _paths.map((path) => {
                let req = new vision.Request({
                        image: new vision.Image({
                                path: path
                        }),
                        features: [
                                new vision.Feature("LANDMARK_DETECTION", 1)
                        ]
                });

                return req;
        });

        setTimeout(() => {
                vision.annotate(reqs).then((res) => {
                        let results = res.responses;

                        _paths.forEach((path, i) => {
                                console.log(JSON.stringify({
                                        path: path,
                                        result: results[i]
                                }) + ",");
                        });
                }, (err) => {
                        console.error("Error: " + err);
                });
        }, nEmit * 2000);

        paths = [];
}

Cloud Vision APIのリクエスト制限については、1-1000 units/monthが無料枠の範囲内に入る模様。

Cloud Vision API Pricing - Google Cloud Vision API — Google Cloud Platform

unitというのがどの単位を指すのか気になりますが、ページにはこう書いてあるので、リクエスト単位ではないような気がしますね。

Charges are incurred for each feature applied to an image. For example, if you apply Face Detection and Label Detection to the same image, each feature would be billed individually.

とすると今回は約1900枚の画像認識タスクをリクエストしたので、$2.50/monthといったところでしょうか。この価格でGoogleが学習させたモデルを使えるなら安いかもしれませんね。

画像認識結果

1900枚のフレームを全てCloud Vision APIに投げるには5分ほどかかりました。そして画像認識の結果がこちら。

レスポンスJSONだけ眺めていても気分が乗らないので、簡単なHTMLに整形してあります。

f:id:oimou:20160409195554p:plain

位置情報なしだらけ

f:id:oimou:20160409195601p:plain

これも位置情報なし

f:id:oimou:20160409195608p:plain

まいまいがかわいい

f:id:oimou:20160409195614p:plain

街のフレームもだめか

f:id:oimou:20160409195622p:plain

あ、見つけた!

f:id:oimou:20160409195629p:plain

こっちにも!

ついに乃木坂の位置が判明!!

最終的に見つけたのはこの2箇所でした。

緯度: 32.732667 軽度: 129.869892 Googleマップを開く

緯度: 32.74683050793882 軽度: 129.87938404083252 Googleマップを開く

Googleマップを開いてみると...

f:id:oimou:20160409201022p:plain

こっ、ここは、長崎県長崎市じゃないか!

乃木坂は長崎にあったんだ!

 ナ ナンダッテー!!
 Ω ΩΩ

まとめ

Cloud Vision APIによって、乃木坂が長崎県にあることがわかりました*1

これでまいまいの卒業を安心して迎えることができますね。本当にありがとうございました。

*1:本当は東京都港区にあります

#maths4pg 「第6回 プログラマのための数学勉強会」にブログまとめ枠で参加してきた

f:id:oimou:20160320190725j:plain

プログラマのための数学勉強会に参加してきました。

自分はブログまとめ枠ということなので、勉強会の内容をまとめていきたいと思います。 感想をまとめるにあたって参考にしたサイトや資料のリンクを貼っていますが、必ずしも発表者の方がプレゼン中に使った資料ではありませんので、ご了承くださいませ。 詳細な内容については、公開される資料や動画を見ていただくのが良さそうです。

Togetterはこちらにまとめていただいているようです。

発表内容

f:id:oimou:20160319131241j:plain

「心地よさと数学」矢崎 裕一

図形やアニメーションから生み出される「心地よさ」の裏には数学が潜んでいます。 そんな数学の考え方について、ビジュアライゼーションという切り口から紹介されていました。

データビジュアライゼーションでは「データ」をいかにして「実体化」するかがカギとなります。 つまり、目的にあわせてデータを視覚的要素(図形や色など)にマッピングしていく作業が、まさにデータビジュアライゼーションなのです。ビジュアル変数の考え方は下記の記事にもありますね。

個人的には、ソル・ルウィットというアーティストの事例が印象に残りました。

ソル・ルウィットのアートの形式の1つに、ウォールドローイングがあります。 彼は作品を作り上げる際に、自分で壁に作品を描くのではなく、作品を描くための指示書をドラフトマンと呼ばれる第三者に渡し、ドラフトマンに描かせるそうです。 D3.jsでも、予め決められたプログラムにデータを流し込んで「データドリブン」な可視化をするという考え方があります。両者の考え方には近いものがありそうですね。

すでに完成していると思われるものを疑い、心地よさって何だろう、というポイントに立ち返って考えてみるのが重要だということです。

「数学がデジタルアートに! 高速なシェーダで可視化する数学の世界」@h_doxas

doxas氏はWebGL関連の活動を精力的に続けていらっしゃる方で、WebGL開発支援サイトなども運営されています。 自分もWebGLの基礎を学んだのはこのサイトでした。

WebGLを使うと、GPUパワーを活用して高速な可視化ができるようになります。 今回はシェーダとGLSLを用いた可視化について、ライブコーディングと共に紹介されていました。

GLSL editorというGLSLエディタツールを開発されたそうで、ブラウザ上で簡単にGLSLを書いて試すことができます。

エディタを開くと、初期状態ではジュリア集合の可視化コードが動くようになっています。 こんなにヘビーな可視化でも、シェーダを使えばサクサク動かすことができるというのは素晴らしいですね。

最近はモバイル端末でもWebGLが動くようになっており、誰でもすぐに作品を見られるようになっています。 数学の教育コンテンツの1つとして、WebGLを用いた可視化が広まっていくと良いですね。

GLSL editorを使ったチュートリアルもQiitaで紹介されています。

「Wolfram Language コトハジメ 〜 Wolfram Alpha って聞いたことあります?」若林 登

Mathematicaは科学技術計算などの分野で広く使われている数式処理システムです。 そのMathematicaに命令を伝えるための言語がWolfram Languageであり、数多くの関数が実装されています。

科学技術計算のためのもう少しカジュアルな環境として、Pythonでnumpyやscipyを使っている人は多いのではないでしょうか。 Pythonと比較すると、Wolfram Languageは予め用意されている関数の数が桁違いに多いです。 あまりにも関数が多すぎて全てを記憶しておくのは困難だそうですが、その分特殊な計算でも短い記述で済ませられるので、本質的な記述にフォーカスできて思考の邪魔をしないというメリットがあります。 プログラミングの道具というよりは数学的思考の道具という位置づけなんでしょう。

Wolfram Alphaというサービスを使うと、Wolfram Languageを少しだけ(とはいってもかなりインテリジェントで驚きますが)試してみることができます。試しに"cheeseburger"などと入力してみると、チーズバーガーの栄養価などの数値情報が返ってきます。

Pythonスクリプト形式でソースコードを記録するのとは対照的に、Mathematicaでは「ノートブック」という形式で思考と実証の過程を記録していきます。思考の過程を記録するというコンセプトは個人的に興味深いですね。 ちなみにPythonでも、IPython Notebookというものを使うとノートブック形式の記録ができるようになります。

「暗号文のままで計算しよう - 準同型暗号入門 -」光成 滋生

光成氏は「午後のこ〜だ」や暗号技術関連の著作で有名な方です。最近だと「クラウドを支えるこれからの暗号技術」などの書籍を出していらっしゃいます。 これはつい最近読んだばかりだったので、こんな所で著者にお会いできるとは驚きました。

「データを暗号化されたまま計算できる!」という触れ込みでにわかに盛り上がっている準同型暗号ですが、 実際にはどのような原理になっているのか、デモを交えて紹介されていました。

準同型暗号は、ある代数系の数学的構造が写像によって維持されるという性質を用いた暗号方式です。 データが暗号化された状態でも加算を行うことができ、データの機密性を保持したまま計算処理ができるため、センシティブデータを扱うビッグデータ解析などへの活用が期待されています。 有名なものには、楕円曲線上の離散対数問題による困難性を用いた楕円曲線暗号などがありますね。

加法準同型暗号は加算のみ行うことができますが、更に乗算も行うことができる完全準同型暗号(Fully Homomorphic Encryption)というものが研究されています。 完全準同型暗号は、数学用語で言うと環準同型の性質を利用した暗号であり、平文と暗号文の両方が環になるようになっています。 しかし、今はまだ実用に耐えうるレベルの完全準同型暗号は出てきておらず、たった1bitの平文を暗号化するにも1GBの暗号文に膨れ上がってしまうということでした。 (ただし、制限付きで加算・乗算ができるSomewhat準同型暗号というものがあり、こちらはもう少し実用的のようです)

加算と乗算さえできれば全ての関数が実装可能になるため、実用的な完全準同型暗号ができれば更にセンシティブデータの解析が捗ることでしょう。

圏論Haskellは仲良し」大森 健児

大森氏は法政大学の教授をされている方です。まさか大学教授の方まで登壇されているとは! 「圏論Haskellは仲良し」という(大森氏によると「艶めかしい」)タイトルですが、 Haskellを使うと数学的な表現がしやすいというお話をされていました。

圏論は、数学の中でも最も抽象的な分野で、理解するのが非常に難しい分野でもあります。 しかし大森氏自身は68歳になってから圏論を学んだということで、何事も学び始めるのに遅すぎるということは無いんだなあと思い知らされます。 圏論に入門するには「自分の得意分野が圏でどう表現されているか?」というところから始めると分かりやすいとのこと。

Haskellには圏論の考え方が一部取り入れられており、その中に有名な関手(Functor)やモナドがあります。 また、Haskell(というか関数型プログラミング言語)の宣言的なシンタックスも、数学的な表現を容易にしてくれます。 命令的プログラミング言語は「どうするか(How)」でプログラムを記述しますが、宣言的プログラミング言語は「どういうものか(What)」でプログラムを記述するという違いがあります。

オススメ資料として、関手的データモデルで個人的に話題になったDavid Spivak氏の著書が紹介されていたので、リンクを貼っておきます。

LT

f:id:oimou:20160320191137j:plain

LT枠がこれまた濃ゆくて、話についていくのが精一杯でした。

√2をつくる @taketo1024

Swift演算子オーバーロードを利用し、代数的数である√2を定義するという試みです。 Swiftがこういう使い方をされるのは意外でしたが、言語の性質を考えると確かに適役かもしれない! 詳細はこちらのリンクから。

実践Scalaペアノの公理 @busterdayo

自然数の公理であるペアノの公理Scalaの型システムを用いて実装したという話です。 数学的にInvalidな計算がコンパイルエラーを返してくれるのは良いですね。Lintツールとしてあると便利そうです。

せいほうけい育成日記 @nekonenene

多角形を使ってフラクタルを作り上げるゲームを作ったという話です。 生SVGの操作が大変そうでした。Snap.jsとか使うと良いかもしれないですね。あるいはシェーダを!

packing にまつわるアレコレ @simizut22

微分幾何の知識がなさすぎてほとんど何も理解できませんでした\(^o^)/ リーマン幾何を学んで出直します。

Introducing PONS @dankogai

Swiftにおいて任意精度計算や複素数を扱うためのライブラリだそうです。 JavaのBigIntegerやRubyのprimeにも近いでしょうか。Swift人気ですね。

すべての図形を分類した男 @matsumoring

ナチュラルにジョジョ立ちする男すべての図形を分類した男、ルネ・トムの遺した功績についてです。 多様体の関係に「コボルダント」という関係を定義して分類できるようにしたということです。

かんたんベジェ曲線 @butchi_y

ベジェ曲線は通常は媒介変数表示で定義されますが、これを陽関数の形で表してプロットしてみたそうです。 4点以上の制御点を持つベジェ曲線はあまり使われていないらしいですね。確かに見たことがない。

ベータ分布の謎に迫る @kenmatsu4

ベータ分布とは一体どんな事象に当てはまる分布なのかという謎に迫ります。 ベータ分布は順序統計量と関わりが深く、ベイズ統計の分野でよく使われるそうです。バイオインフォマティクスでも使われる基本的な分布なので、個人的に結構アツいです。

始代数とCatamorphism Ryo Mikami

関数型プログラミング言語で言うところのfoldの考え方についての話です。 HaskellFRPライブラリreactive-bananaがなぜバナナなのか分かりました。

まとめ

色々な分野から150人近い参加者が集まり、数学を軸にした様々なテーマの発表を聞くことが出来るというのは非常に貴重な機会でした。 勉強会の主催を続けていらっしゃる佐野さんに感謝です!

金沢までGhost in the Cellを見にきたと思ったらノドグロの塩焼きを食べていた

金沢に来てます。

なんで急に金沢に来たかというと、目的は金沢21世紀美術館。 「Ghost in the Cell:細胞の中の幽霊」というバイオアートの展示が行われていて、それをひと目見たいがために急遽飛んできました。

f:id:oimou:20160312100604j:plain

会津若松から電車で金沢に行くには2種類のルートがあって、一旦東京に出てから北陸新幹線に乗るルートと、磐越西線で新潟に出てから特急と新幹線を乗り継いで行くルートです。 今回は電車旅も楽しみたかったので後者のルートにしました。片道だいたい15,000円で6時間くらいかかります。 会津若松から新津(新潟)までは磐越西線で。そこから特急しらゆきに乗り換えて上越妙高に向かいます。上越妙高から金沢までは北陸新幹線なのですぐ着いちゃいますね。

今日はどうやら北陸新幹線の開業1周年だったらしく、金沢駅全体がお祝いムードでした。 改札を出たところで「金沢へようこそ!」と着物のお姉様方にお出迎えを受けました。開業1周年なんてつゆ知らず来ちゃってゴメンナサイという気分。 金沢駅はあの木造の巨大な門(鼓門と言うらしいです)で有名ですが、今日はこの門のところで吹奏楽団が演奏を披露していました。 駅を出た途端に北島三郎の「まつり」が耳に入ってきたので、もう完全に金沢駅のイメージが「まつり」状態です。

幸運なことに今日はずっと晴天だったので、美術館までの道すがらぶらぶらと散歩することができました。 いやー金沢は良い街ですね。 敷居が高すぎない適度なおしゃれ感があって、もう少し近場にあれば毎週訪れたいくらいです。 しかも食べ物が美味しい!道を歩いているとそこらじゅうにカフェやレストランや小料理屋が並んでいて、どれも素敵なお店ばかり。 金沢は京都にも似た歴史的風情のある町並みで有名ですが、まちなかにチェーン店が多すぎないのもひとつの魅力かもしれません。

金沢駅を出てしばらく歩いたところには近江町(おうみちょう)市場という商店街があり、新鮮な魚介類が店先の発泡スチロールに並んでいます。 途中、生きたカニを片手に引っさげて嬉しそうに歩いてくるお兄さんとすれ違ったのが印象的でした。ライブ・カニ。

ところでお昼に金沢についてすぐ、ショッピングモールのレストラン街みたいなところで海鮮丼を食べたんですけど、刺し身が硬かったりごはんが乾いていたりして、かなり消化不良でした。。 唯一このお店に入って良かったのは、隣に座っていたおじさん二人組がかなりグルメで、文字通り美味しい情報を得られたというところ。 「生のホタルイカは喉に刺さる」「のどぐろの一番美味しい食べ方は塩焼き」「妻が鳥取出身で魚には詳しい」的な会話を繰り広げていらっしゃって、知識の引き出しに年季を感じます。 どうやら金沢では「のどぐろ」という魚が人気らしいですね。 おじさん方がとにかくのどぐろのことばかり話すので、これはもう、のどぐろの塩焼きを食べずに帰らでおくべきか!!と決心させられました。

とりあえずのどぐろミッションは夕飯に取っておくとして、次に訪れたのは金沢城公園です。 金沢城は、江戸時代にはあの前田利家の居城でした。近くの尾山神社の建物も教会風の装飾が施されていたりして、キリシタン大名庇護の名残があるようにも感じます。 そしてこの金沢城公園がとにかく広い。広場の大きさは皇居前広場くらいはあるんではないでしょうか。

金沢城は、個人的には石垣の説明が各所に置いてあるのが特徴的だなあと感じました。 御殿や庭園のまわりには亀甲石などを用いたデザイン的な石積みがなされている一方で、古くからの野面積みの石垣も残っています。 まだ石積みのことは良く分からないですが、なんだか奥深いですね。金沢城を訪れる際は注意して見てみると良いかもしれません。

f:id:oimou:20160312143913j:plain

さて、金沢城公園をぐるっと散歩してようやく金沢21世紀美術館にたどり着きました。 休日だけあってかなり混雑していて、受付には常時10人くらいが列を作っていました。結構若い方が多いです。 街中で若い人を見るだけで元気さを感じてしまう...会津若松はほぼおじいちゃんおばあちゃんしかいないですからね。

今は井上有一という書家の生誕百年記念の回顧展がメインで開催されていて、書道作品の部屋がほとんど。 残念ながらGhost in the Cellの展示は一室だけなのでした。

ちょっとだけ井上有一作品の感想を書いておくと......正直ピンときませんでした。 誤解を恐れずにざっくり言ってしまうと、ドデカい紙にドデカく字を書くというのが特徴的な作風になっていて、ボンドを使ったり凍らせた墨を使ったりして素材にも工夫を凝らしているようです。 ボンドを混ぜて書かれた作品は、書道作品なのに紙から飛び出てくるような立体感があって迫力満点でした。もうちょっと書道の造詣を深められたらまた違う感想が持てるかも。

Ghost in the Cellの展示は一部屋がまるごと細胞に見立てられていて、中には細胞膜を模した糸のカーテンが垂れています。 部屋の中央にはシャーレと顕微鏡が置かれていて、顕微鏡の奥で「初音ミクの細胞」が脈打っているのがスクリーンに映しだされていました。 細胞を蛍光色で光らせて可視化する、これは生細胞イメージングという技法ですかね?この技法を知ったのは最近ですが、それを知って改めて見るとまた違った感覚があります。 なんとなくこの試みは、生物としての実体を持った初音ミクを作るための第一歩なのかもしれないなあと漠然と感じました。ちょっとわくわくするホラーな体験でしたね。

f:id:oimou:20160312153040j:plain

美術館を出た後は、近くの「金沢ななほしカレー」というレストランでカレーを食べました。 金沢カレーという名前はなんとなく聞き覚えがありますが、実際どういう食べ物なのかよく分かっていません。普通のカレーと何が違うんだろう? このレストランで自分が食べたのは果たして俗に言う「金沢カレー」なのだろうか。。金沢カレー、謎だらけです。

そろそろ夕方になるので、裏道をぐるぐる巡りながら近江町市場に戻ります。 しかし本当に金沢は食事をする場所が多いです。ちょっと裏道に入るとすぐに小料理屋が見つかるので、ぶらぶら歩いているだけでもどこかしらお店にたどり着きます。 噂によると、食べログに載ってないようなお店でも結構カジュアルに入れる人気店が多いらしいので、ぜひ自分の足で見つけてみてください。

のどぐろの塩焼きを求めて再び近江町市場へ。お店の前の黒板に「のどぐろ塩焼き 二、七◯◯円」と書いてあったのを見つけて、「刺身屋」というお店に入ることにしました。 お店には60代くらいのご主人と奥さん、そして高校生くらいの女の子が2人厨房にいました。居酒屋というよりは小料理屋という感じで、すごくアットホームな雰囲気です。 とりあえずカウンターに座って、のどぐろ塩焼き・ごはん・味噌汁というシンプルなオーダーをお願いしたんですが、これじゃどう見てものどぐろ目当てで来た人感満載ですね。 そんなのどぐろオーラが通じたのかわかりませんが「お味噌汁はのどぐろのあら汁にするかい?」的なことをわざわざ尋ねてくれました。そんなチョイスがあったとは!ありがたくいただきます。

のどぐろ塩焼き、滅茶苦茶うまいです...塩加減は薄めでしたが、元々かなり旨味を持ってるんでしょうか、とにかくごはんが進みます。 食べてる途中で奥さんに「このへんが美味しいんだよ」って魚の喉のあたりを指差して教えてもらいました。ワタにも全然苦味がなくて食べやすかったです。 あら汁も言わずもがなうまい、うまいです。頭が丸ごと入っていて、とにかく出汁が効いてます。10杯くらいおかわりしたいくらいにうまい。 名状しがたい美味しさってのはこういうことなんでしょうか。ああ、思い出したらよだれが。。

金沢は今のところグルメの街。そんな感じで1日目終了であります。 (全然写真を撮ってないことに気づいた)

南相馬市小高区の帰還支援ハッカソンに行ってきた

ハッカソン

f:id:oimou:20160307004647p:plain

南相馬市小高区にて開催された帰還支援ハッカソンに参加してきました。土日を使って1泊2日での開催となります。

イベントページはこちら

背景

f:id:oimou:20160306102154j:plain

小高区は今年4月を目処に避難指示解除を迎えることになっていて、小高の外に避難している住民の帰還が予想されます。 しかし、線量や働く場所などの問題により、避難指示が解除されても帰還を踏みとどまるという人が多いそうです(詳細は下記の帰還意向調査をご覧ください)。

小高区帰還意向調査

今回のハッカソンは、小高への帰還をテクノロジーの力でサポートしたいということで開催されました。

チーム編成

f:id:oimou:20160307004943p:plain

南相馬市小高区へは会津若松市会津大学からバスで3時間ほど。小高駅前の双葉屋旅館というところでハッカソンが行われます。 ちなみに、今回のハッカソン中に双葉屋旅館の部屋の中でストリートビューを撮影してみたので、興味があればご覧くださいませ(めっちゃ顔写ってるけどモザイクかかったりしないのかな?)

https://goo.gl/maps/NgwzVdDWD1o

Google Japan Blog: あなたのお気に入りの景色を、ストリートビューに

f:id:oimou:20160307005213p:plain

双葉屋旅館に到着した時は既に11時半くらい。つつがなく基調講演やルール説明が行われ、チーム編成の前にひとまず昼食をとります。
昼食として配布されたのは、地元小高商業高校の生徒がメニューを考えたというお弁当。ローソンで売っているらしいです。ウマイ!

福島)小高商業高が弁当開発 ローソンで16日から発売:朝日新聞デジタル

f:id:oimou:20160305133837j:plain

さてチーム編成ですが、どうやら事前にアイデアソンが行われていたようで、20個ほどのアイデアが用意されていました。 自分はその中でも「田舎の信用保証、信用づくりのきっかけ」というアイデアが目に止まりました。

田舎の信用保証は地域住民のネットワークで行われていて「あそこの○○さんは消防団に入ってるから大丈夫」といった地域ローカルな強い信頼関係がある一方で、移住者などいわゆるよそ者に対する目は厳しくなりがちです。 県外避難から戻ってきた人や、被災地の外からやってきた除染作業員などの方々は、そういった信頼のネットワークにうまく受け入れられずに大変な思いをしているということでした。

こんな生々しい問題を果たしてテクノロジーで解決できるのだろうか?というのは自分にとって大きなチャレンジだと思ったので、とりあえず飛び込んでみることにしました。 最終的には「土地・場所時間貸しアプリ」というアイデアと一緒に4人チームで進めることになります。

チーム名は「プロジェクトおだかびと」!なんとなく結束感がある名前です。

ブレーンストーミング

f:id:oimou:20160305185200j:plain

南相馬市では、空き地・空き家バンクというサービスを行政が提供していて、地域の空き家の売買・賃貸情報を公開しています。

空き家・空き地バンク登録物件一覧 - 南相馬市

しかし、実際は様々な問題があってうまく利用されていないのが現状なのだそうです。 一番フォーカスしたのは「隣の空き家がよそ者に貸し出されるのは不安」という問題。地元の方々からすると、借り手に対する不安がどうしてもあるみたいです。

それでも住居の売買・賃貸のニーズは確実にあって、なんとか不安を解消したい。これをテクノロジーでどう解決するのか?
話し合いを進める中で見えてきたのは、借り手の信頼度を可視化できれば不安が解消できるのではないか?ということでした。 たとえ小高に移住してきたばかりの人でも、地元の有力者とつながりがあれば信頼度は高まるでしょうし、地域の活動をたくさんこなしている人は信頼度が高いはずです。

そうして実装アイデアとしてまとまったのが「おだかびとカード」というものです。
おだかびとカードは、小高での信頼度をポイントとして貯めるポイントカードのようなもの。それだけでなく、小高の住民としての証明にもなるため色々な行政サービスを受けられることもできます。 このカードを行政から発行してもらえれば、空き家の賃貸に限らず信頼度にまつわる問題を一気に解決できるのではないかと考えました。

開発

f:id:oimou:20160307005906p:plain

開発を行ったの大きく分けて下記の2点。簡単に技術的なポイントを書いておきます。

  • おだかびとカード自体のシステムのプロトタイプ
  • おだかびとカードを利用した空き家バンクのプロトタイプ

おだかびとカード自体のシステムのプロトタイプ

おだかびとカードには、所有者が小高で行った活動履歴が記録されていきます。例えば「消防団に入った」「側溝の掃除をした」「地元のイベントに参加した」などなど。 これら一つ一つの活動履歴は信頼の基盤となるものですから、データに改ざんがあったりしてはいけません。

ということで今回は、ブロックチェーンのデータベースを利用して活動履歴の記録をしてみました。 (一応ソースコードGitHubで公開していますが、cloneしてそのままパッと動くというわけではないのであしからず、、)

BigchainDB • • The scalable blockchain database.

odaka-passport/server at master · oimou/odaka-passport

ブロックチェーンのデータベースを使って何かを実装するのは初めてだったので不明点が多く、色々と調べながらの実装になってしまいました。 そのためあまりプレゼンに役立つアウトプットができなかったので、チームメンバーの皆さんには申し訳ない気分です...orz

おだかびとカードを利用した空き家バンクのプロトタイプ

南相馬市の空き家バンクを参考に、おだかびとカードのユースケースのひとつを実証してみようということで開発を行いました。 こちらはチームメンバーのエンジニア山田さんにお任せすることにし、RailsをベースにWebSocketなどを用いて開発していただきました。

おだかびとカードを使って空き家バンクを利用するというデモができ、ひとつの具体的な可能性を示すことができたのかなと思います。 (プレゼンの様子は後ほどYouTubeで公開されるそうなので、お楽しみに?)

ちなみに、プレゼンの際は双葉屋旅館の隣の「小高ワーカーズベース」の内見デモを行いました。デモでお見せした施設内のストリートビューがこちらです。

https://goo.gl/maps/mjkzviesK912

プレゼン

f:id:oimou:20160307010219p:plain

ハッカソン2日目のプレゼン、自分たちのチームは2番手でした。
会場には地元のおじいちゃんおばあちゃんなど住民の皆さんも集まってきており、普段参加するハッカソンとはかなり雰囲気が違いました。アットホームな感じというのかな。

プレゼンはチームメンバーの長田さん・寺山さん・山田さんにお願いしました。 自分は質疑応答で技術的なポイントに回答できると良いかなと思っていましたが、残念ながらあまり質疑応答の時間がなく回答ができませんでした、ちょっと残念。。

最終的に自分たちのチームは「及川賞」ということでIncrements 及川卓也さんから賞をいただきました! 発表された瞬間、チーム一同が喜びに沸いたのをハッキリ覚えていますw

他のチームの発表で気になったのは、パラリーガルのAIをテーマにしていたHack for Low(Lawではない)のプロダクト。 自分たちは行政系のテーマに取り組んでいるので、実現していくうえでは法制度の問題をクリアにしていかないといけません。そんなときにパラリーガル的な存在がいてくれると非常に助かるなあと思いました。

まとめ

f:id:oimou:20160307010419p:plain

小高に訪れたのは今回が初めてでしたが、地元で頑張っている方々の強いつながりが感じられました。さっきアットホームと書きましたが、普段とは違う不思議な楽しさのあるハッカソンだったと思います。 まさにプロダクトのエンドユーザになるであろう方々と直接触れ合いながら、問題意識をリアルに共有することができる、すばらしい機会でした!