AIの時代だからこそプログラマは3Dプリンターやりましょう。 コードはAIが書いても、物理的な仕組みを理解するという喜びは誰にも奪えません。そしてプログラマーとしての経験も生かせる最高の体験ができます。
Once men turned their thinking over to machines in the hope that this would set them free. But that only permitted other men with machines to enslave them.(かつて人間は、機械に思考をゆだねれば自由になれると期待したが、それは、機械を持つ別の人間が彼らを奴隷にすることを許したにすぎなかった) -- "Dune" Frank Herbert
今の時代は右を向いても左を向いてもAI、AIです。AIは現時点ではまだ不満点が多いですが、今後起こるであろう急激な進化を考えるならばそのうち人間にも匹敵する何かがうまれる予感もしますし、みんながわくわくするのもよくわかります。
しかしAIの進化を見守りながら我々人間はどうやって生きていけばいいでしょう。というか、AIに何か作らせてその結果で遊ぶとか、つまらなくないですか?どんなときでも我々人間は何かを作りながらいままで生命をつないできたはずです。
冒頭の引用文のような社会構造の話はまた別の機会で話すことにして、とりあえず我々がこれからのAI時代を、物を作る人として楽しんで生きていけるようにしませんか。
特にコンピュータと戯れ、プログラミングでこれまで様々なものを作り上げてきた我々プログラマはどこに目を向けるべきか?それはコンピュータのモニターの外の物理世界でしょう。そこで今まで培ってきたシステム構築の経験を生かして物理世界での継手、ギア、ラッチ、カム、それ以前にそもそも単純にパーツを組み合わせることなどを含めたさまざまな仕組みを知ると、我々が当たり前だと思って受け入れているこの世界が全く違うように見えてくるでしょう。
このトークでは3Dプリンターの軽い入門話と、物理的な仕組みを作る際に知っているべき3Dプリンターの基本ノウハウを皆さんにお伝えして、皆さんがこれから何か仕組みを物理的に作る最初の一歩を踏み出すためのお手伝いをしたいと思います。
低レイヤコンテナランタイムの内部構造を題材とし、Kotlin/Native で自作した 1000 行程度の最小構成のランタイムを動作させながら仕組みを分解して解説します。namespace と cgroup v2 によるプロセス隔離から OCI Runtime Specification に準拠したライフサイクル管理まで、実装過程で直面した課題と解決策を共有します。
コンテナは日常的に利用されていますが、その基盤となるランタイムの実装情報は限定的です。本セッションでは 1000 行規模のコードとライブデモにより、複雑に見える処理を段階的に示します。仕組みを自分の手で確かめる過程を追体験することで、抽象化の背後にある Linux カーネル機能と OCI 仕様の関連を理解できます。
私はこの数年「趣味: CPU」と自称していくつかのCPUを作っています。
このトークは私が作った3つのCPUの紹介を通して、CPUとはどのようなものなのか、このように動作するのかを解説します。
1)CPUと機械語の基礎知識
そもそもCPUとは何か、CPUが実行出来る唯一のプログラミング言語"機械語"とは何か、メモリアクセス・I/Oアクセスなどの基礎知識を解説します。
2)ソフトウェアエミュレータから見たCPU
CPUについて理解を深めるためにCPUの動作をソフトウェア的に再現するCPUエミュレータの実装を見てみましょう。
ここでは私がPHPで実装したファミコンエミュレータ php-terminal-nes-emulator を題材にCPUの動作をソフトウェア的に再現するとはどういうことか、どんなソフトウェアを書ければCPUエミュレータになるのかを解説します。
3)ハードウェアエミュレータから見たCPU
CPUについての理解が深まったところでもう1つレイヤーを降りてみましょう。
ここでは私がRaspberry Piを使って実装したZ80ハードウェアエミュレータ z80-hardware-emulator - 既存のZ80システムからZ80 CPUのICを取り外してその代わりに取り付けて動作させることを目標としたハードウェアエミュレータを題材に、さらに深くCPUのハードウェアインタフェイスについて解説します。
4)電気回路から見たCPU
ここではCPUのハードウェアインタフェイスを理解できた皆さんをCPU動作の最下層: 電気回路としてのCPUのレイヤにご案内します。
このレイヤではCPU命令は電気回路の配線として表現されます。CPUに供給されたクロックが指揮する電気回路のオーケストラを楽しみましょう!
このトークを聞いたみなさんがCPUを好きになり、みなさんなりのCPUを作り、アツいCPUトークをいっしょにできるようになることを願っています! Love CPU!
直近1年ぐらいで私が実装した楽器などを製作した成果の発表をします
VCOやVCF といった基本回路を Ruby でモデル化し、dRuby で分散シーケンサを構築した過程を振り返ります。
ここでは「波形を出すだけなら数行で始められる」という敷居の低さを示しつつ、簡単なMIDIの仕組みなどをふまえてデモをやります
とある本に紹介されていた「占い的作曲法」を読んだ衝撃から rand で音楽を作曲してもよいという発想から200行程度のシーケンサーのを実装をしました。
こちらは事後勉強会の登壇当時はRubyで実装しましたが、PicoRubyでの再実装をして小さなマイコンがGenerative Sequencerとして機能します。
こちらもデモをする予定です
今回のトークで聴衆の方々には、2025年は僕にとって楽器をつくる年で普段仕事で使っている領域とはまた違った学びがあったのでそれをbuildersconに参加される方々にも持ち帰っていただければと考えています。
YouTubeやニコニコ動画、諸君らも大好きだよね?その一大ジャンルとして色々な事柄を解説してくれる動画、いわゆる「解説動画」というカテゴリが存在します。
普通こういった動画は汎用的な動画編集ソフトウェアや各種のプラグインを用いてGUI上で編集していくのが一般的です。でも操作の再現性がないしGUI編集は大変!いつしか動画作成のためには動画を編集するスキルが必須となっていきました。でもそれって良い解説動画のために本当に必要なのかな?知識と文才さえあれば動画を作れる時代のほうが面白いのでは?
そもそも、よく考えると解説動画って画面をセリフごとにレンダリングしていけば割とプログラム的に作れるのではないか?だったら俺たちが慣れ親しんだHTML使ってレンダーできらあっ!
そこで私はXMLをベースとした原稿ファイル、イラスト、BGMといったアセットから自動的に解説動画を生成するためのソフトウェアを開発しました。
私はこのソフトウェアの開発過程において、レンダリングエンジンとしてブラウザを利用したり、原稿を編集しても生成済みの箇所をキャッシュさせてレンダリングは最小限で済むなど、効率的な編集を支える様々なテクニックを導入しました。
音声合成とシーンレンダリングといった非同期処理の塊といってもよい機構を支えるのは何か?複雑な透過合成を支えるffmpegのトリックとは?なぜ口パクにモナドが必要なのか?テキストベースの利点は何なのか?荒れ狂うグラフィックボード、たまにSEGVを吐くブラウザ、かわいいずんだもん、全てをお話しします。
本日のウェブシステム開発では、普段何気なく使っているプログラミング言語がコンパイルする際に、リンカーというプログラムが実行ファイルを作っています。
このリンカーは非常に重要な仕事をしているにもかかわらず、ほとんど目立つこともなく知らない人もいるかも知れません。
そこで本セッションでは、実際に動く最小限のリンカーをRustで実装して得られた知見を元に、リンカーの仕組みを解説します。
「こういう仕組みだったのか!」という驚きと、「自分でも作れそう」という興奮を持ち帰っていただけるセッションです。
リンカーは多くのエンジニアにとってブラックボックス、かつあまり世の中に実装の情報が出ていないです。
セッション中に実際に動くデモをお見せし、複雑に見える処理が意外とシンプルな仕組みで動いていることを説明します。
普段当たり前に使っているプログラミング言語の裏側を知ることで、プログラミングへの理解が一段深まるはずです。
「知らなかった」ことを知る楽しさを共有する、buildersconらしいセッションをお届けします。