LOG IN

子供の頃と同じように夢中になったElixir(エリクサー)との出会い、再び研究者として世界を-ZACKY先生2018vol.2

by WORK DESIGNERS(ワークデザイナーズ)

「定年退職後も自分は働き続ける必要がある、今ここでライフシフトしなければ」

そんな時にZACKY(ザッキー)先生が出会った福岡市のエンジニア森さん。

その森さんとの出会いから、インタビューの続きをお伝えします。

プログラミング、大学や研究機関での仕事、情報系の進学や、ライフシフトに関心のある方は、ぜひじっくりとご覧ください。

1.半分遊びで作ったZackerner(ザッカーネル)からつながったElixir(エリクサー)

ZACKY先生がライフシフトの必要性を感じて、森さんと出会う頃まで教えていただけますか?

僕はその前ぐらいにZackernel(ザッカーネル)というのを完全に趣味、遊び半分で作っていまして。

大学の授業で大学院集中講義「組込みソフトウェア」や学部集中講義「ディジタルシステム設計」という授業があって、プログラミング演習ですね。

それが結構軌道に乗ってて、僕が暇だったんです(笑)

なるほど(笑)

学生が順調にプログラミングしてるからちょっと暇で。

どうせなら一緒にプログラミングしたいなって。

学生と一緒にプログラミング、一緒にするなら今まで作ったことがない方式で作ろうって思い立ちました。

前から興味があったのがNode.js(ノードジェイエス)というメカニズム。

Node プログラミングモデルというやつなんですけど、コールバックによってマルチタスクを実現しているんです。

どういうことかというと普通のマルチタスクってスレッドとかプロセスとかを作ってそれで状態を記憶してコンテキストごとに用意して切り替えるという方式。

なのでメモリを食うんです。

だいたいApacheとかその方式でやってるんですけど、1コネクションあたり数10メガバイト食うって言われてて。

Twitterでクジラアイコンがでるっていうのはつまりはそういうことで、何テラバイトとあるメモリを1コネクションあたり数10メガバイト食うから、数万アクセスあると食い尽くしちゃうんですよね。

数100万ぐらいか。

それで立ち往生しちゃう。

DDoSもそれ、メモリ食い尽くしちゃってお亡くなりになる。

お亡くなりに!

お亡くなりにはならないんだけど、スワップアウト

メインメモリに乗っからなくなってストレージ使い出しちゃうんですね。

それでスワップが発生して極端に遅くなり、処理しきれなくなります。

そういうのがあって、Node.jsというのが登場して、それはスタックメモリ使わずに、全部コールバックで処理します。

スレッド方式というのはたくさん料理人を用意するようなもの。

それでそれぞれの料理人が並列で調理するようなイメージ。

その調理スペースが限られているから料理人を増やして処理能力を上げようと思っても限界があります。

それに対してNode.jsはひとりの手際の良い料理人に伝票の与え方を工夫して一つ一つの伝票を手際よくパパパっとやるという方法に変更しました。

一人の調理人で捌ける、そういう能力の高い調理人が何人かいて少人数、高速で捌けるという方式。

調理スペースが少ないんですよ。

ということはメモリが少なくて済む。

そんなことが可能なんですね

でそういうのは知ってたから、ずっと興味があったんですよ、前から。

それでNode.js、あれはJavascript(ジャバスクリプト)なので、あれよりC++(シープラスプラス)とかC言語とかで実装したらもっと軽くなんないかなって思ったんです。

C++とC言語の仕様を調べてラムダ関数というのを作る必要があって、要は無名関数というやつですね。

関数の定義を関数の中に名前をつけずに定義できるっていう機能をラムダ関数とか無名関数というんですけど、その機能がないとうまく作れません。

なのでそれをどうやって実現するかなと考えていたらそれをどうやって実現するかなと調べたらC++11からその機能があるっていうのがわかって。

C言語も、ちょっと工夫したらできるんだけど、かなりトリッキーな方法でやらなきゃいけないし。

Arduino(アルディーノ)がC++11がサポートしているのがわかったのでじゃあこれで作ろうと思いました。

一晩徹夜してラムダ関数っていうのが新しい仕様だからライブラリが揃ってなくて、Arduinoで扱うライブラリがなくて苦労しました。

どうしてもエラーが出るんですよ。

それで調べたけどアホみたいな記事しか見つからないんです。

GitHub(ギットハブ)を一周探したら、こんなライブラリ使ったら何とかなったよっていうのを見つけてそれを試したのが深夜の3時。

それから作ったのが5時で、動いた動いたって一寝入りして授業に望むかと。

それが最初、2年目の九月ぐらい。

そんな感じで1ヶ月ぐらいZackernelのプログラミングに夢中になって色々3回ぐらい作り直した。

すごいトリッキーだから、OSではカーネルって難しいんですよ。

プログラム難しくてバグが多くて三回作り直しました、ようやく動くものに。

ちなみにZackernelってZACKY+カーネル。

リナックスっていうのがライナス+UNIX。

そんな意味が!

それで、できました。

そこから本当は組込みソフトウェアを刷新するくらいライブラリを充実させようと思ってたんですが、全然時間がなくて放置してたら森さんと出会ったんです。

ものすごく意気投合して話が進んで。

それでZackernelの話をしたら面白いですねと言ってくれてソースを読んでくれて、その時はElixir(エリクサー)を推されたんですが、スルーしてました。

その頃他の言語に注目してたんです。

何だったかな、ど忘れしちゃった…あ、Julia(ジュリア)だ。

数値計算にすごくで、Python(パイソン)みたいだけどあれより高速。

余談ですが、Juliaって検索するとAV女優しかヒットしないんです。

だからJuliaっていう言語を検索しようと思ったらすごく苦労するんですよね。

Twitterで高校生が言語のジュリアを調べてたら親に見られて恥ずかしい思いをしたという話も。

それは…恥ずかしいですね(笑)

技術者あるあるですね(笑)

Juliaというのに注目してたので、「Elixir、ふーん」って感じでした。

それから時は過ぎてしばらくメールでやり取りしていましたが、名刺のアドレスではなくプライベートのメールで送ってくれたらもっとレスポンスよかった、って後で聞いて。

当時の会社のアドレスに送ってたからレスポンスが途切れたことがあるんです。

それで盛り上がったんだけど、そのままになりました。

10月とか。

その後1月ぐらいに森さんから「AIについて講演してくれないか」って言われて。

当時ちょうどその前にAIについて講演してたことがあったのでそれをベースに彼が当時持っていたコミュニティ「福岡×人工知能」で公演することになりました。

それでまた急接近して、一緒にやりませんかという話になっタンです。

最初だから…経緯は思い出せないんだけどElixirをまた推されたので、共同研究を、ちょっとまぁやってみるかという話になりました。

Elixirでするならどんなテーマにしましょうかと。

「ZACKY先生はWeb系からシステム系まで一通りできるから」って森さんが与えたテーマが、Zackernelやってたから、言語処理系しましょうと言われたんですね。

だから僕最近までPhoenix触ってないんですよ。

意外です!

つい最近になって必要に迫られてPhoenix触り出しました。

それでElixirのプログラム、どういう議論だったかな?

たくさん議論してるからどっちが言い出したかわからない。

先生たちの議論、すごそうだなぁ

どこからともなくGPU動かそうよ、という話になりました。

今マルチCPU、マルチコアで動くからGPUも使えたらいいなって。

僕がちょろいアイデアが思いついて、パイプラインがあってフローとかEnum(イーナム)のマップという形式にしてるから、これそのままなんかGPUのカーネルに乗っかるコードじゃないのって。

それを実証した論文を出したんですよ。

それが一個。

あとZackernelみたいなのをElixirに乗っけたらどうなるかっていうを探求しようとその論文も出しました。

それで共同研究をスタートさせたんです。

Elixirの研究の始まりですね

2.ワクワクしたElixir(エリクサー)、ライフシフトへ

共同研究のかたわら、FAIS(フェイス)ー公益財団法人北九州産業学術研究推進機構にElixirでAIのライブラリを作るって申請を出したら通ったんですね。

このテーマ、手応えとしても感じました。

昔、学生時代、プログラミング言語処理系、OSとか、そういうテーマだったので。

そのころを思い出してものすごくワクワクしましたね。

学生の頃に最初に選んだテーマっていうのはライフワークにつながるテーマを持っていて、夢中になり具合が他と半端なく違う。

Elixirになってから深夜未明に大学に車走らせてるのを見て妻が

「こっちのテーマが好きなんだね」「こっちの方が好きなんだね」と言ってくれました。

奥様から!

こっちのが近いんだなって。

その時には共同研究の申し込みで「わが社の課題を人工知能でなんとかしてくれ」っていう引き合いが増えていました。

その背景としては、永原先生という人工知能の専門家の先生が北九大にきてくれて、その一流の先生に色々教わって人工知能について教わり、「こういうものか」と手応えを感じましたね。

学んだことを生かしてちょろっと共同研究に生かしたらすごい喜ばれ、これいいなと。

Elixirを使うと人工知能のスピードが3倍ぐらいになるだろうって実測値に基づく見込みがあるんです。

実験結果も出ていますから。

一生の仕事として、AIはこれから10年は発展するだろうから、エリクサーっていう新しい処理系を充実させてAIを含む色々な分野に使えるようにしていって、社会インフラを整備していくというのをテーマにしていったら。

研究テーマはいくらでも思いつきますし、Elixirなんて世界的にやってる研究者がほとんどいないので、打ったら世界レベルの研究成果がなんでも出せる、みたいな状況なんです。

世界がそんなに近くに

これは教育というテーマに比べたら遥かに研究成果出しやすいってことに気づいてこちらにシフトチェンジしようと思いました。

教育でメインに稼いで地域の課題を解決するというのは息の長い話だし、お金はかかるし、お金は入りませんし。

地域課題を解決するElixirのプログラムを作っていくっていうようなスタンスにして、そこで実際に社会実装したときの課題をフィードバックして、それを解決する技術的な課題があるから、それを解決する技術を開発するっていう風に Elixir を発展させてそっちで稼げばいいかとシフトチェンジしました。

それで10年はいけますね。

世界レベルのライフシフトです!

自ら作ったZacrnelからElixirとの出会いに繋げたZACKY先生のお話は、インタビュアーからも驚きの声ばかりあがりました。

3.Elixir(エリクサー)ってどんな意味があるんでしょう?

そういえば、Elixirって賢者の石って聞いたことがあったんですよ。

「不老不死の薬」ですね。

Elixir、全部ファイナルファンタジーなんですよ。

僕ちっともファイナルファンタジーしたことなくて。

えーっ、ちっとも?

森さんとか他の研究仲間はファイナルファンタジー大好きなんですよね。

ネーミングとか僕は全然考えてないくて。

例えばGPUに対応させるHastega (ヘイスガ)っていう名前。

ファイナルファンタジーの魔法の一つで。

仲間を高速化する魔法の最強版、ネーミングとしてぴったりで

略称もぴったりでした。

こじつけなんだけどGPUを連想させていい感じ。

さっきNode.jsのと同じ原理で作るってやつは「Sabotendar (サボテンダー)」。

サボテンダー!!

知ってるんですか?!

すごい分身を作るんですよね。トゲトゲで。

本当にファイナルファンタジーなんですね、驚きました。

それ由来なんですよ。

Elixirを作ったアメリカの人がファイナルファンタジーマニアで。

コミュニティでElixirに絡む名前自体も。

Phoenixもそうなんですよ。

ファイナルファンタジーに絡む幻獣の一つ。

ところが僕はファイナルファンタジーを一度もしたことない(笑)

昔のファミコンを手に入れてやらないと。

レベル上げとか時間取られそうだからAIに自動的にプレイさせたいですね。

さすが!AIにプレイとか、考えつきません

森さんとの出会いから、世界レベルに手が届くほどのライフシフトを果たすZACKY先生でしたが、まさかその言語の由来となったゲームを一度もプレイしたことが無かったとは、ワークデザイナーズ一同、思わず驚きと笑いが…

この後もインタビューは続き、いよいよ次が最後となります。ぜひ最後までご覧ください。

2018.12.02 追記

このインタビュー記事の公開後、ZACKY先生により当時の状況がさらに詳しくまとめられた記事も公開されました。

Node.jsやZackernelについて更に詳しい説明や、森さんと出会い研究の節目を感じ、遠ざかっていた技術の追求の面白さを思い出したこと。

ライフ・シフトを読んだことをきっかけに、考え、動き、「自分の今のやりたいことを突き詰めていけば,自ずと定年後を切り拓く道が見えてくる」「自分の直観を信じよ」という答が得られるまでの経緯。

常に問題意識を持って行動し、出会う人たちを信頼していたことで得られた大きな転換についてのお話がZACKY先生自身の言葉で語られています。

こちらもぜひご覧ください。

特別インタビュアー 松村 友和

インタビュアー 高橋 建二

撮影・文章 かやはら あやこ

OTHER SNAPS