第6回 プログラマのための数学勉強会 に参加してきた #maths4pg

先日、第6回 プログラマのための数学勉強会に参加してきました。

場所は、イベント検索サービスでもお馴染みのdots.さん。もはや東京周辺に勤務してるITエンジニアで通っていない人はいないですね。

001

004

スペースの雰囲気もさることながら、コーヒーがとてもおいしいです!

030

発表

心地よさと数字

007

 

デザインの領域で様々な活動をされている矢崎裕一さんの発表です。色・形・動きなどから感じる「心地よさ」の裏に潜む様々な話題を、主にデータビジュアライゼーションの考え方を中心に展開されています。

例えば、下記の写真に出ている画像は、日本の都道府県からどのように人口が流入・流出しているかを示したグラフですが、単なる棒グラフに比べて得られる情報量や、おもしろさが変わってきます。いかに「抽象化」して人に伝えるか。「数学をいかに使うか」に頭を割くことの必要性を感じさせてくれます。

個人的には、「既に完成されたものを疑う」ことの大切さに共感したのと、シャボン液に興味を持ちました。「シャボン液+台所用洗剤 最強説」、もっと検証してみたくなります。

ポートフォリオサイトがとってもオシャレです!

矢崎 裕一 / Yuichi YAZAKI

 

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

009

数学がデジタルアートに – slide

GLSLのスクールで私自身たいへんお世話になった@h_doxasさんの発表です。WebGL/GLSLを使ったプログラミングについて、ライブコーディングも交えて紹介されています。モバイルもGL系のプログラムに耐えられるだけのマシンパワーになってきているので、今後また活用用途が広がりそうですね!

コーディングはGLSL Editorでも試すことができ、つくったものをシェアすることもできます。(書かれたソースコードをURLのクエリに直貼りするゴリ押し仕様だそうです(笑)) ベクトル・三角関数・arctan関数が普通に使えるだけでも、GLSLのかわいさが分かりますよね。GLSLについては、ご本人の書かれたこちらのQiitaの記事もとてもわかりやすく参考になります。

[連載]やってみれば超簡単! WebGL と GLSL で始める、はじめてのシェーダコーディング(1)

こちらのWebサイトでWebGLに関する情報を精力的に発信されています。たいへん面白く、全部は理解できなくても眺めるだけでワクワクしてくるサイトです!

WebGL 総本山

 

Wolfram Language コトハジメ

Wolfram Language ドキュメント

科学技術計算、数値計算に広く利用されるMathematicaというシステムがありますが、それに命令を伝えるための言語にあたるのが、WolframLanguageです。作者はSteven Wolfram という、20歳で博士号取得、その後もセル・オートマトンに関する画期的な研究結果を得るなどの、文字通りの天才です。

スティーブン・ウルフラム – Wikipedia

011

本編では、書き方の事例をPythonと比較しつつ見ていましたが、WolframLanguageの最大の特徴は「関数が非常に多く、そのため簡潔に書ける」というところでしょうか。「頭良ければ関数は覚えられるでしょ」という、天才らしい、一般人置いてけぼり思想でつくられているあたり、さすがです。(いまの時代はいくらでも検索ができるので殆ど問題にはならないでしょうが、できた当時に使いこなすのは苦労したんだろうなぁと…)

ちなみに、WolframAlphaというサービスを使うと、簡単な命令であれば無料で試すことができます。とはいっても、無料でいいんですか!?というぐらい、かなりインタラクティブな検索ができます。実際に「How many baseballs in Boeing 747?」のような問いにも答えが返ってきます!

Wolfram Alpha

 

暗号文のままで計算しよう 準同型暗号入門


 

暗号技術関連の著作などでも知られる光成さんによる発表です。「クラウドを支えるこれからの暗号技術」などを執筆されています。

暗号化されたデータをクラウド上のサーバーに配置してアプリケーションが動いている場合、暗号化されているデータどうしで何もできないと、クラウドが事実上の「データ置き場」と化してしまい、肝心のマシンパワーを有効に利用できません。そこで、「暗号化したまま処理をしたい」という動機が生まれるわけですが、そのような暗号生成を可能にする準同型暗号などの技術について、非常にわかりやすく解説されています。

最近は、和と積の準同型性を併せ持つ、完全準同型暗号についての研究がされているものの、現時点では1Bitの平文に対して1GBの暗号が生成される感じだそうです。何かすごいですね…!

 

圏論とHaskellは仲良し

012


 

まさかの法政大学、大森健児教授の登壇です…! 圏論とはどういったものか、またHaskellが圏論の概念(カテゴリ)をベースにしているプログラミング言語であることを紹介されています。

圏論というと、数学の中でも抽象度が高くて難しい理論という印象があるのですが、教授はそれを68歳から学習されたとのこと(!?)。何をするにも遅すぎることはないのですね。具体例として、「自分の得意分野が圏論でどのように扱われるのか」をみると学びやすい、とのことです。

自己紹介の時に話されていた「課長にだけはなるな」は深いアドバイスでした。笑

HaskellによるFunctional Reactive Programmingで書かれた、ボールの衝突のプログラムは、こちらで参照できます。

BilliardBalls – github

ボールの衝突をFunctional Reactive Programmingで表現する(1) ※ブログ上で全11回の連載になっています。

 

LT

√2をつくる

014

 

この会の主催者の@taketo1024さん。代数拡大の考え方をSwiftのプログラムで表現して、2乗して2になる数(つまり√2)をつくることに成功した物語です。「すごくないですか!!?」を連発する発表には、理解度を差し置いて「すごい!!」となる他ありません(実際、私には分かりやすかったです)

代数拡大をSwiftでどう表現するかは、こちらの力作Qiitaに詳しいです。

Swiftで代数学入門 〜 1. 数とは何か?

 

実践Scalaでペアノの公理

015


 

Scalaの型システムを用いて、ペアノの公理に則って自然数を実装してみた、という話です。勝手にScalaは日本語使えないと思ったので「これ動くんだ!」というのは発見でした笑。また、適切でない計算に対して、実行時に変になるのではなく、コンパイルエラーとして弾き出されるのはとても良いですね!

 

せいほうけい育成日記

016

 

「いま、仕事が、ないですね…!」という絶妙で切実な叫びからスタートした@nekoneneneさんによる発表。相似な図形をどんどん増殖させる(これを「育てる」と呼んでいます)プログラムをつくった結果、せいほうけいを育てるよりも、5角形や9角形などを育てる方がずっとかわいかった、というお話です。めでたいのか、めでたくないのか。Slideにある「お世話になったツール」が個人的に参考になりました。前半の発表であったGLSLなどを用いても書けそうですね。

 

packingにまつわるアレコレ

019


 

我らのアイドル、@simizut22さんによる発表です。大脳皮質のような複雑な平面を一定種数のdisk(より単純な平面)にマッピングしていくにあたって発生する数学的理論がテーマだったようですが、リーマン計量を既知の概念として突き進んだあたりから分からなくなりました…

 

Introducing PONS

022

 
言わずと知れた、404 Blog Not Foundでおなじみ@dankogaiさんがまさかの登壇…!目の前の席に座っていましたが、大変気さくな方でした。Protocol指向でつくられた、型フリーな代数的世界に酔いしれることができるライブラリです。実際すごく便利そうです。どのようなものかは、こちらの記事に詳しく書かれています。文中にある、「すべての型別実装を、生まれる前に消し去りたい」というセリフにぐっと来ます。

Swift – Introducing PONS = Protocol Oriented Number System

 

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

023


 

@matsumoringさんによる発表。StarWarsのプロローグを彷彿とさせるナレーションから始まりました。(スライドの1〜11ページを可能な限り良い声で朗読すると再現されます) 写真のスライドにも映しだされている、ナチュラルにジョジョ立ちする男・ルネ-トムが、コンパクトで境界のない微分可能多様体を分類した男にあたるのですが、彼の提唱したいわゆる「コボルディズム理論」の背景が分かりやすく解説されています。

 

かんたんベジェ曲線

025


 

数学系イベント常連の@butchi_yさんです。この方の発想にはいつも関心させられます。ベジェ曲線が何なのかについては、下記のQiitaの記事にも詳しいのですが、今回はベジェ曲線を陽関数 (y=f(x)の形式) に表現してプロットしてみた、という話題です。

 

ベータ分布の謎に迫る

027


 

(本人曰く)データ分析の裾野広げ担当、@kenmatsu4さん。ベータ分布って公式としては良く見るけど、そもそもどういう事象がベータ分布になるの?という素朴な疑問を解消してくれます。深く関わりのある順序統計量、ベイズ統計周辺の話題についても、「これLT?」というぐらいに広めに解説されていて、参考になります。

 

始代数とCatamorphism

028

 

Ryo Mikami さんによる発表。いわゆるHaskellでいうところのfoldの操作を、「始代数」として表現できる任意のデータ型に対して適用する理論(Catamorphism)について紹介されていました。Catamorphismについて最初に出された論文(?)のタイトルが「Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire」だそうです。普通にBananaって使われる科学系の出版物を私は他に知りません…!Haskellのとあるライブラリが「Reactive-banana」と呼ばれるのも、このせいなのですね。。

Reactive Banana

 

まとめ

私自身、この会に参加するのは3回目ですが、やはり心地が良いです。それは、同じ「数学」という分野に興味がある技術者が集まることで、「数学」の話題が引力になるコミュニティが自然と醸成されているからかなと思います。他のコミュニティだと、「あー、そっすかー、すごいっすねー」程度の反応が関の山だったりするのかなと。それを「いいね、すごいじゃん!」と言い合える心地よさが素晴らしいなぁと改めて感じた次第です。