と告げて本題に入りました。
これまでのPerlの開発について、トールキンの著作に例えながら説明してくれました。Larry曰く、「 Perl 5は『ホビットの冒険』のようで、Perl 6は『指輪物語』のようだ」とのことで、トールキンが続編を書くのに15年を費したのと同様にPerl 6もプロジェクトが開始してから15年経っている、と述懐しました。
Perl 5とPerl 6の違いについての話題にも2作品に例えつつ、正規表現を新しくしようとしたり、型システムの混乱を解消しようとしていることを述べられました。また、Perl 6はDSLのサポートが強力でありPerl 6では言語を自ら作っていくことができるとのことです。
コンピュータ言語の設計について、仲間が必要であり、何百人という人間が開発を手伝ってくれていることに感謝していました。
Perl 6について、今年のクリスマスにリリースする予定であることを発表しました。約束できるほど確実ではないが、その予定で仲間と作業を進めている、とのことです。今年のクリスマスにリリースされるバージョンはPerl 6の全ての要件を満たしているわけではない、との注意もあり、それらについては後々のリリースに含んでいく予定である、とも述べられました。
最後に、Perl 6は失敗することを想定していたが後の言語設計者にとって役に立つ失敗ができた、と述べられ、今後のPerl 6やその先の開発も仲間たちとともに進めていきたいと締められました。
Kelsey Hightowerさん「Managing Containers at Scale with CoreOS and Kubernetes」
DockerなどのLXC(Linux Containers)クラスタを管理する方法はいくつかありますが、CoreOS社のKelsey Hightower(@kelseyhightower)さんは、Kubernetes によってCoreOS上のDockerコンテナ群を管理するうえでの考え方、基礎知識について発表し、具体的なクラスタ操作についてデモを行いました。
前半の発表部分では、従来のConfiguration管理においてはアプリケーションと実行ホストが結合していることの問題点を挙げ、アプリケーション管理を実行ホストから切り離すべきと述べました。その具体的な方法として、Kubernetesによるアプリケーション管理の方法が解説されました。
後半のデモでは、KubernetesによるServiceの登録とディスカバリ、クラスタのスケールアウト、アプリケーションコンテナのローリングアップデート、トラブルシューティングなどが実演されました。
質疑応答では、コンテナが動作するノード(実行ホスト)の操作や、設定の動的更新、ストレージの取り扱いなどについて質問があり、デモも交えて回答されました。
muddydixonさん「DeepLearning の前に知っておくことがある! 再帰型のニューラルネットワークや自己組織化マップについて語ろう」
IoTを対象としてデータ解析やデータ可視化を行っているmuddydixonさんによる、ニューラルネットワークや自己組織化マップの基礎についての発表です。
近年応用が進むDeep Learningを勉強する前に知っておいたほうがいいこと、ニューラルネットワークの動作原理や構造、歴史を解説する内容でした。
muddydixonさんは以前、再帰的ニューラルネットワークと自己組織化マップを利用して、幼児が文法や語彙を獲得する際の認知的な機構を研究していたそうです。
再帰的ニューラルネットワークを使って語順が安定な言語(英語)と語順が不安定な言語(トルコ語)を学習させると、語順が安定な言語のほうが学習の速度が速いといった結果や、文末の予測精度が最初から高い、といった結果が得られたということでした。
神経細胞が信号を伝える仕組みの説明から、パーセプトロンからDeep Learningに連なるニューラルネットワークの歴史の説明、教師あり学習と教師なし学習における学習の意味の違いなど、ニューラルネットワークの原理や仕組みに重点をおいた説明が展開され、この分野について全く知らない人でも基本的な知識が得られるような解説が展開されました。
最後に、Deep LearningやMachine Learning利用のしやすさは向上していくが、数式の導出や本質への理解があると、チューニングや新しいアルゴリズムを考えるといったことが可能になるので、原理や本質を知ってもらいたいというメッセージで、発表は締めくくられました。
jigyakkumaさん「それは僕たちのドメイン・DNS運用」
会社のドメイン、各サービスのドメイン、受託案件のキャンペーンサイトのドメイン等の多くのドメイン、DNSレコードの運用・管理に関して自社のレコード管理の歴史を踏まえて話しました。
人を介してDNSレコードを管理する方式は、情報の正確性に欠ける、変更したログが残らない、ヒューマンエラー等の問題があると指摘しました。これらの問題を解決するために、ドメイン管理・運用を行う人への伝達手段を一元化し、レコードの反映、検索やAPIによる操作が可能なRoute53を採用しました。さらに、roadworkerを使ってDNSレコードをコードで管理できるようになり、変更履歴をコード化出来るようになり、CircleCIの導入によりテスト・デプロイの自動化も実現できました。
最後に運用・管理するうえで、運用は一人でするものではないことと、常に改善を意識することが大事であるというメッセージで締めくくられました。
Teppei Satoさん「Effective ES6」
「Effective ES6」というタイトルでTeppei Satoさんが発表されました。ES5までのJavaScriptのPrototype inheritance、Function scopeなどといった落とし穴と、ES6の代表的な特徴をを紹介されたうえで、ES6によってES5までに落とし穴を回避するために蓄積されたパターンがどのように問題があり、どう解決したかをそれぞれコードの具体例を出しながら解説していました。
最後は、現状ブラウザなどのサポートは完全ではないが、Babelというトランスパイラがあるのでそちらを利用して積極的に使って行きましょう、という話でしめられていました。
Kazuhiro Hommaさん「Web由来の組み込みエンジニアの半年間のすべて ~WebとiOSとBLEとハードウェアデバイスのこと~」
Webの知識をもったハード・組込みエンジニアの重要性は今後上がっていくと思うと語るKazuhiro Hommaさん。世界初の完全後付けスマートロックであるAkerunを開発され、それで起業までされています。そんなご自身の経験をもとに、Webエンジニアが組込み開発を行うにあたって必要となった知識や経験などについて発表しました。
まずはAkerunの生い立ちから語られました。これは「世の中で最もhackされてないものをhackしたい」という思いから飲み会でアイデアが生まれたとのこと。IoT(Internet of Things)やBLE(Bluetooth Low Energy)といった技術の発展と、クラウドファンディングの一般化により資金調達がしやすくなっているという時代的背景もあり、ハードウェアベンチャーを始めやすくなっているといいます。
実際にやってみてると、回路図を読むこと、デジタルマルチメーターやオシロスコープに慣れるなど、Webエンジニアには馴染みのない知識も必要だと感じたそうです。これらの知識は専門のメンバーに任せる部分ではあるのですが、意見を言える程度には知っておくことが重要で、Arduinoでプロトタイプやデモ機などを作って学ばれたそうです。ただそれだけでは不足している部分も当然あり、実際製品化する段階では消費電力を気にしたりセキュリティの考慮が必要などの苦労もあったそうです。
Webエンジニアが組込みをやる利点として、とくにIoT分野では通信やセキュリティの知識などが活かせることや、設定用のWebツールを作れたり工場検査を自動化したりなど活躍できることが多いとのことでした。
最後に「あなたもハードの世界に飛び込んでみませんか」と呼びかけていらっしゃいました。
Yukihiro "Matz" Matsumotoさん「TBD」
これまでにも何度もPerlのカンファレンスに登壇してきたというRubyの創始者Matzさんは、「 今、新しい言語を設計するならどのような言語にするか」をよく質問されると述べ、Rubyについて良くなかった点についていくつか挙げられました。主なものとして「Perlの影響」「 Lispの影響」を挙げられました。良い影響も受けたが同時にそれらの言語の失敗もいくつか引き継いでしまったとのことです。
それからRubyを作りはじめた20年前と現在のアーキテクチャの変化についても触れられました。アーキテクチャは振り子のようになっているとのことで、サーバとクライアントの関係性はハードウェア性能の向上によって変わり、Webの発展によって変わり、ブラウザの進化によってまた変わった、ということが起きているそうです。
また、最近はマルチコアが普及してきたことを受け、シェルスクリプトのような言語に可能性を見出しているとのことで、昨年末に開発をはじめたStreemというプログラミング言語について触れられました。Streemは手続き型でパイプラインを組み立て、その後にイベントループでデータを流すという手順で動くそうです。
Streemは200行程度の動作しないプロトタイプをGitHubにアップしたところ、いくつものPull Requestが送られてきて、簡単なサンプルなら動くようになったとのことです。関数定義やライブラリがないなど実用には遠いそうですが、Matzさん自身は最近のテクノロジーバランスに合わせて作った将来性のある言語ではないか、と述べられました。
最後に、環境の変化が新しい言語が生まれるきっかけになるとし、その一例であるStreemは面白いので一緒に遊ぼう、と呼びかけられました。
Toru Kobayashiさん「今フロントエンドで何が起こっているのか」
最初に、今までのWebの歴史を振り返りました。HTML全体を更新するステートレスな時代から、Ajaxを用いて非同期でデータを取得できるようになり、Webは単なる静的なページからWebアプリケーションに進化したといいます。また、jQueryの登場によってブラウザの互換性の問題が改善され、Promiseなどの新しい概念も取り入れられるようになりました。
また、CoffeeScriptやTypeScriptなどのJavaScriptにコンパイルされる言語の話や、Node.jsやECMA Script 2015、Babelなど言語仕様や処理系の話題も取り上げられました。
Angular.jsなどのフレームワークやgulpなどのビルドツールの利点、React.jsやReduxなどのステートレスで宣言的な記述が有用であることなど最近ホットなトピックについても触れられ、幅広い知識が得られる実用的なトークでした。
macopy nnid:mackee_wさん「どうしてもPerlでドローンを飛ばしたい人のためのハードウェアハック概論」
@mackee_wさんによるPerlでクアッドコプターを飛ばすための技術、ハードウェアのハックに関するセッションでした。
前半はクアッドコプターを外部から操作するための方法を説明しました。Phantomというクアッドコプターのハードウェアをハックして、Raspberry PIからArduino経由(UART)でNAZAというコントローラに接続し、クアッドコプターをリモートで動かす方法に関して説明しました。また、ハードウェアをハックするうえで、ボードを安全に作るための手法に関して紹介していました。
後半はクアッドコプターの自作に必要な構成要素やそれぞれの役割・仕組みを、実際のパーツやクアッドコプターの操作デモを交えて説明しました。クアッドコプターの制御にオープンソースのMultiWiiを利用しており、PerlからMultiWiiを操作するための自作ライブラリを紹介しました。
Kazuho Okuさん「HTTP/2時代のウェブサイト設計」
最初に、詳しいデータを使用して転送データ量の増加やHTTP/1.1の問題点など背景の説明から入り、解決策としてレイテンシに負けないプロトコルが必要であるという解説をされました。
そして、HTTP/2の基本的な仕様と何故その仕様になっているのかという理由を説明され、多重化、ヘッダ圧縮、優先度制御といった技術の詳細と優位性の説明をされHTTP/2を使用することにより、Webがどう高速になるかを説明されました。
実際にFirefoxやChromeといったクライアントサイドとご自身が開発されているH2Oをはじめとするサーバーサイドの実装状況を説明され、これまで最適化技術がHTTP/2によって変わることなどを説明されました。その他セキュリティ周りの解説も含めてH2Oがどのようにその問題を解決しているかの話もされていました。最後にnginxもHTTP/2の対応を追いかけてくるが、H2Oは更にその先へ進めていくという話を力強くされて締められました。
fujiwaraさん「Consulと自作OSSを活用した100台規模のWebサービス運用」
FUJIWARA Shunichiro(@fujiwara)さんが所属する面白法人カヤックでは、スマートフォンゲームSNS「Lobi 」というサービスを提供しています。そのシステムはAWSのTokyoリージョン内で100台規模のサーバにより稼働しています。今回の発表ではLobiのかんたんな紹介と、オーケストレーションツールConsul を用いたシステム運用について、詳しく解説されました。
ConsulはAgentプロセスをConsul Serverと、クラスタの管理下に置かれるClientホスト全台で稼働させる仕組みです。Consulの主要な機能としては、サービスディスカバリやKVS、DNSインターフェースなどがあります。
Stretcher は@fujiwaraさんが開発したツールで、Consulを利用してPull型デプロイを実現するものです。発表ではStretcherを使ったデプロイの仕組みについて、詳しく話されました。他に、動画変換サーバのオートスケールの仕組みや、Consul KVSをバックエンドにしたConsul KV Dashboard など、カヤックでConsulを活用するうえでの実践的なノウハウが多数紹介されました。
最後に発表のまとめとして、「 Consulの機能は豊富だが、各自で必要な機能だけを使えばよい」と締め括られました。
Casey Westさん「Conway's Law of Distributed Work」
Casey Westさんは、これまでの10年間にわたってリモートワークをした経験を基に、地理的に離れた場所にいる人々で構成されたチームでプロダクト開発を行うために、どういったツールを使い、何に気をつけなければいけないか、といったテーマで発表を行いました。
まず、Caseyさんは全ての組織とその文化でリモートワークが可能なわけではないと断りつつも、効果的なコミュニケーションを意識し、適切なツールとテクニックを使うことでカバーすることが可能だと言います。重要なのは透明性で、情報を積極的に共有して意思決定の過程を誰もが追えるようにしなければならないということでした。
このように、チームの人々が、意識的にコミュニケーションの透明性を保つようコミュニケーションの形を変えなければ、リモートで働くことはできないそうです。
そして、リモートワークを成功させるために使われる具体的なツールとその利用方法、テクニックについて詳しく説明していきます。コミュニケーションの手段としてのチャットや電話会議、ビデオ会議の紹介では、チームおよび個人間でのコミュニケーションが行えることが要件として挙げられていました。開発のためのツールの紹介では、特にコードレビューの重要さが強調されていて、レビューには時間がかかるが、トータルで見れば作業の量は確実に減るので、行うべきということです。
また、決定がなされた経緯やエンジニアがその時に何を考えていたかを追うためのツールとして、コミットメッセージは重要だとしていました。後で見返した時に、なぜこの変更が行われたかを誰が見てもわかるようにしておくために、コミットメッセージにはなぜ、を書かなければならないとしていました。
そのほか、ペアプログラミングのためのスクリーンシェアリング、タスク管理ツール、多人数で編集可能なドキュメント編集ツール、大きなファイルを共有するストレージ、共有のカレンダーについて、具体的なプロダクトやサービスの紹介や、それらの使い方について説明がなされました。
電子メールに関しては、非同期のコミュニケーションとしては良いが、コラボレーションのツールとしては不向きとのことでした。送ってからすぐに読まれると期待しないほうがよく、テキストチャットを並行して使うようにすれば良いといったことが言われていました。
テクニックの解説では、リモートワークを導入する際にチーム全員が1週間程度体験してみることや、定期的なミートアップの開催、コミュニケーションをやや過剰にすること、そして自分が仕事をしているサインを発信することについて語られました。Caseyさん自身、プログラムを書くことに集中しすぎてしまった結果、チームメンバーから自分がどのようなことをしているか見えづらくなってしまったということがあったそうです。そこで、自分から積極的に自分が何をしているか見せていくことの重要さに気づいたそうです。
最後に、どのようなシステムも、そのシステムを作る組織の構造をコピーするというConway's Lawを引用し、プロダクトを作る組織の健全さを気遣っていくことが、製品を作るうえで重要な要素になる、という言葉で締めくくられました。
cho45さん「WebAudioで入門する信号処理」
HTML5のWebAudioに関するセッションでした。まず、WebAudioの概要として、AudioNodeが基本単位であり、AudioNodeを複数接続することでストリーム処理を行うのが基本的な使い方であると説明しました。また、音を出したり、マイク入力が取れるうえに、JavaScriptで処理ができるNodeがあり、生の信号データを自由に処理できるため、柔軟な信号処理ができるそうです。
WebAudioを利用する前に知っておくべき基本的な信号処理技術、波の基本用語に関して非常にわかりやすく説明されていました。WebAudioで実装したモデムのデモでは、昔懐かしいダイアルアップ接続の効果音とともに画像ファイルが転送されていくデモを見て、会場から歓声が上がりました。
また、昨今の通信技術に関しても紹介されており、超高音通信やIoTとの連携とWebAudioの可能性に関して話しました。最後に「WebAudioはHTML5の他の機能と比べて異質のポテンシャルを持っているので、是非WebAudioを触ってみてほしい」というメッセージで締めくくられました。
Shinpei Maruyamaさん「Perlで学ぼう!文系プログラマのための、知識ゼロからのデータ構造と計算量」
しんぺい、猫型のHNでも親しまれるShinpei Maruyamaさんの、データ構造と計算量についての初心者向けの発表です。
データ構造、計算量についての前提知識として、プログラミングにおけるメモリの扱いをCの変数を例に図示しながら解説します。
変数(や関数やモナド)を箱と表現することもありますが、実際には変数はメモリとして考えたほうが良いというMaruyamaさん。変数を箱だと思うと理解が難しいが、メモリに値が入っていると思うと理解が難しくなくなると言います。続き、C言語の配列の仕組み、単方向連結リストについて解説しながらPerlで実装することで聴衆によりデータ構造がイメージしやすくなるように発表していきます。こちらもメモリがどうなっているかの理解を促したため聴衆にも理解しやすくなっています。
前提知識の後は計算量、オーダー法について解説。オーダー法をデータ数がnなら定数倍や定数項は無視してO(n)と表す、ある種雑な考え方として紹介します。Shinpei Maruyamaさんはいろいろな計算量をグラフで見ると特徴が分かることを図示しながら説明、O(n)とO(n^2)、O(log n)のデータ量に対する計算量が可視化されます。オーダー法ははざくっと指標を確認するもの、どのようなデータ構造を採用するかの判断材料になるとO(n)の使い方を解説します。
計算量から導かれる嬉しいデータ構造として2分木を紹介。続いてB木、B+木とバランスさせやすさやシーケンシャルアクセスのしやすさなどの特徴を交えつつ解説しました。
データ構造はイメージがあるだけでわかりやすくなること、データ構造がわかっていないと難しい話もわかるようになることなど改めてデータ構造と計算量を知ることがどのように役に立つかを述べ、今後の学習や業務に活かしていただければ幸いと発表を終えました。質疑応答では、このような話をブログに書いたり発表したりするモチベーションを問われた時、自身が苦労した経験などを踏まえ基底の苦労を減らしたいこと、自信を育ててくれたPerlコミュニティへの感謝の意も込めて活動しているとのことでした。
とっつきがたいと思う人もデータ構造と計算量が前提知識なしでもわかる、初心者や自信がない人には有意義な発表でした。
ジンジニアさん「【 sponsored contents】若手エンジニア達の生存戦略」
このセッションは、座談会形式でPerlに関わりのある若手エンジニア達の話を聞くというものでした。仕事で人事をされているジンジニアさんがファシリテータとなり、他4人のパネラーの話を聞くというもので、登壇者全員がビールを飲みながらのゆるふわな雰囲気でのトークセッションとなりました。登壇者は全員26歳で、社会人歴も2~4年の若手達です。
最初の話題は、若手にとってPerlという言語はどういうものかということでした。ほとんどの登壇者は記号が多いなどはあるが、特に違和感はないと答えていました。周りで影響を受けた人については、@hisaichi5518さんは@songmuさんであったり、@dankogaiさんにブログを通して勝手に添削された経験などを語り、よい先人たちに恵まれたことが伺えました。
コミュニティへの関わり方について、@mihyaeru21さんは積極的に関わることはできてないと述べたうえで、ほとんどの若い人は@mihyaeru21さんと同じようにコミュニティへの関わりは薄いだろうとしながらも、新潟県のエンジニアコミュニティへ参加したのをきっかけにIT業界へ就職したという自身のエピソードを元にコミュニティ活動の魅力を紹介していました。
若手であることで苦労した点を聞かれると、@zoncoenさんは逆に若手であることを利用しているという話をされました。若手だからこそ自由に言える様々なことをどんどん組織にフィードバックしているということを話すと、登壇者からも同意する意見が相次ぎました。
最後に会場から10年後にどういう風になっていたいかを聞かれると@__papix__さんから「今の会社がエンジニアにとって最高であるような会社にしたい」という意見が出たり、「 IT芸人ではなく技術的に有名な人間になって、お金を儲けたい」という率直な意見が挙がったりしました。筆者は長年IT業界に携わっていますが、このような若い人々の前向きな決意を聞いて、今後のIT業界も期待ができる有望な業界になりそうだなと感じました。