プログラミングとコンピュータサイエンスについてのディープな話をするポッドキャストです。
カーネギーメロン大学の客員研究員として明日から赴任するるくすくんと、コンピュータのセキュリティや、システムズ系のコンピュータサイエンスの論文などについて話をしました。出演者: るくす (@RKX1209)、Rui Ueyama (@rui314) https://turingcomplete.fm/31 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) カーネギーメロン大学に明日から行きます (0:47) Samsung Galaxyのシリアルコンソールを有効にするハードウェアの裏技 (9:00) iPhoneではアンロックしてから1時間が経過するとUSBデータ通信が完全無効化される (16:00) メモリアクセスのときに放射される電磁波ノイズでラジオを鳴らす (17:30) 初代XBoxのメモリバスをタップしてデータを取得 (18:54) るくすくん作成のNintendo Switchエミュレータ公開されました (22:00) Nintendo SwitchにAndroidを移植 (26:10) Linus、他人に対する振る舞いを改善するために一時的に公的な立場を退く (27:50) るくすくん、Kernel/VM関西というイベントを主催 (34:06) x86ネイティブコードを安全に動かすNaCLの論文 (36:30) 4KiBページを自動的に2MiBのスーパーページに昇格するというFreeBSDの機能 (44:57) Hans Boehmの「スレッドはライブラリとしては実装できない」という論文 (50:20) カーネギーメロン大学における生活 (55:59) エンディング (59:46) iOSのUSB制限モード Macbook system bus radio るくすくんのSwitchエミュレータ Native Client: A Sandbox for Portable, Untrusted x86 Native Code Practical, transparent operating system support for superpages (PDF) Threads Cannot be Implemented as a Library (PDF)
セキュキャンのCコンパイラ自作コースが無事に終わりました。共同講師だったhikaliumと一緒に、コンパイラ自作の要点やコンピュータサイエンスの教え方などについて振り返りました。出演者: hikalium (@hikalium)、Rui Ueyama (@rui314) https://turingcomplete.fm/30 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) よい寄付先とは (4:47) セキュキャンのCコンパイラ自作ゼミとは (7:51) インクリメンタルにCコンパイラを作る (12:21) 左辺値と右辺値 (17:55) 似て非なるものを作るのは努力の重複ではない (19:17) 9cc書き始めました (20:51) 自作コンパイラの性能もそんなに悪くはない (21:18) Ken Thompsonのログインハック (23:10) Cコンパイラ、アセンブラ、リンカ、libc関数を全て自前で書く (32:16) Stanford CS140 (34:59) Stanford CS140e (37:40) 三億円事件 (40:59) 仮想通貨盗難事件のスケールの大きさ (45:29) ビットコイン盗難とSIMスワップ攻撃 (48:11) ハードウェアのセキュリティキー (49:08) hikalium、Ergodoxキーボードを買う (51:24) キーボード早打ち対決 (55:35) 国によってキー配列が違う (58:55) プログラミングを教える時の心構え (1:01:31) Keithというよい講師の話 (1:05:07) 褒めるときに悪い話をセットにしない (1:07:10) 久しぶりのTCFM (1:11:58) エンディング (1:14:14) An Incremental Approach to Compiler Construction (PDF) Let's Build a Compiler, by Jack Crenshaw Writing A Compiler In Go 8cc C Compiler 9cc C Compiler sk2cc aqcc Ken Thompsonのハック (PDF) 自作Cコンパイラで Ken Thompson のログインハックを再現してみた aqccの解説スライド Rustで書かれたJavaScriptエンジン Stanford CS140 Stanford CS140e 三億円事件 (Wikipedia) Yubikey Kinesis keyboard Ergodox keyboard Cコンパイラ制作の夏期集中コースが思っていた以上にうまくいった話
セキュキャンのCコンパイラ作成コースの話、CGでよくでてくるティーポットの実物を入手した話、hikaliumの中学生時代のOS自作の話をしました。出演者: hikalium (@hikalium)、Rui Ueyama (@rui314) https://turingcomplete.fm/29 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) セキュキャン事前学習始まりました (1:33) 「低レイヤを知りたい人のためのCコンパイラ作成入門」(仮題)、現在7万字 (3:58) Cの不可解な言語仕様のルーツを知るために1972年の最初期のCコンパイラのコードを読んでみた (6:07) 符号拡張とマイナス2進数 (13:04) コース参加者のコードのほうが8ccのコードよりきれい (17:57) 一番最初のコンパイラは構文解析が非常に苦労した (20:23) CGでよくでてくる例のティーポットを買いました (22:07) 元々はボストンのコンピュータ博物館で展示されていた (25:15) Frieslandという会社が今でも同じティーポットを作っている (26:03) ユタ・ティーポットはなにがCGに適しているのか (28:27) ユタ・ティーポットと南部鉄器の類似性 (30:31) 内輪ネタとしてのユタ・ティーポット (33:14) ユタ大学のUtah Teapot Rendering Competition (34:00) 画像処理の標準テストイメージとしてよく使われる女の人Lennaの話 (37:57) ユタ・ティーポットは日本からも普通に買えるはず (41:47) hikaliumのOS自作入門 (43:28) hikaliumの小学生時代のホームページ (44:21) 30日OS自作入門本のOSのファイルシステム (48:00) GUIの多色対応 (51:36) 30日OS自作入門本のmalloc (55:29) K&R mallocを自力で発明して実装 (58:10) テキストボックスを実装 (1:00:33) ARMの実行のみできるページ(読めない)という新しい機能 (1:03:17) x86のページテーブルがいつの間にか5段くらいに深くなっている件 (1:06:32) lldでEFIバイナリのブートローダを簡単に作成 (1:08:01) lldはクロスのビルドを簡単にするつもりで作っている (1:09:48) hikaliumのOS次回作のテーマ (1:12:07) Window Systemでウィンドウを入れ子にする (1:15:04) クリックした場所を検出しようとすると必ずマウスカーソル自身になる問題の回避法 (1:18:58) MIDIファイルを読んでPCのビープ音で再生する機能を実装 (1:20:48) 無理やりなコードでも動くものを一回書くと学べることが多い (1:25:00) Intelのマニュアルを読んで16ビットモードのエミュレータの作成を試みる (1:26:42) 中学生の夏休みの頃はひたすらコードを書いていたりしていた (1:31:38) エディタはWindowsのメモ帳だった (1:32:18) いまからみると稚拙なコードを書いていた中学生時代 (1:37:50) エンディング (1:39:57) 1973年前後のCコンパイラのソースコード 2の補数 (Wikipedia) 8cc C Compiler ユタ・ティーポット (Wikipedia) 購入したユタ・ティーポットの写真 コンピュータ・ヒストリー・ミュージアムに収められている「本物」のユタ・ティーポット 南部鉄器 (Wikipedia) Utah Teapot Rendering Competition 画像の標準テストイメージとしてよく使われるLenna Frieslandのティーポット注文ページ Frieslandのティーポット注文ページ(中) Frieslandのティーポット注文ページ(オリジナルの大きいサイズ) 30日でできる! OS自作入門(書籍) ARM execute-only memory プログラミング言語C(通称K&R本)
Gauche Schemeの作者の川合史朗さんと言語処理系についての話をしました。GaucheのCコードとの互換性を保ちつつ無限リストを導入するために採用したトリックや、Gauche自身で書かれているGaucheを過去のバージョンでビルドするために気をつけていることなどの話をしました。出演者: 川合史朗 (@anohana)、Rui Ueyama (@rui314) https://turingcomplete.fm/28 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) 電卓そろばん対決の動画存在しました (2:28) Gaucheとそのほかのプログラムのリリースプロセス (3:33) コンパイラのブートストラッピング問題とバージョン間の互換性 (4:51) GCCやClangにおけるブートストラッピング問題 (18:08) Goでは言語仕様がフリーズされていてGo 1の間は変更されない (19:41) Webブラウザの6週間のリリースサイクルは短いのか長いのか (20:35) FirefoxもClangとlldにスイッチ (21:32) Gaucheがstdioを使わずに独自bufferred IOを実装している理由 (22:58) FILE構造体の内部にアクセスする(移植性のない)実装 (26:41) プログラム終了時にバッファをフラッシュしないといけない (27:13) stdioではstdinを読もうとしたらstdoutがフラッシュされる (28:24) 遅延シーケンス(無限リスト) (31:05) Cレベルでの互換性を保ったままconsセルを遅延シーケンスにするトリック (34:52) 遅延シーケンスをどこで使っているのか (37:29) 遅延シーケンスのパフォーマンス最適化 (38:45) Clojure言語のTransducerという仕組み (42:07) カリー化とは何か (46:06) キーワードとシンボル (48:09) キーワードをシンボルのサブクラスにして発生した問題 (54:27) Scheme言語仕様にはキーワードはない(シンボルで十分?) (56:08) 現在仕様策定中のScheme言語仕様R7RS (58:27) R6RSの言語仕様は振り返ってみて良いものといえるのだろうか? (1:00:12) 標準化委員会が作る言語仕様と個人の作品としての言語仕様 (1:03:55) Goの言語仕様の変更のプロポーザル (1:05:09) Schemeでは言語仕様を実験的に拡張して良さそうなら標準化するというのがよくある流れ (1:06:51) 言語仕様策定の投票権は全員平等なのが本当によいのか (1:09:19) Schemeは誰でも参加できるところがよいところ (1:10:02) C++のトライグラフの廃止に最後まで反対していたのはIBMとカナダ (1:11:14) エンディング (1:13:22) Running for Grace (Shiroさんの出ている映画) Gauche Scheme Consセル (Wikipedia) stdioにおけるバッファのフラッシュのルール Go言語仕様 Clojure言語 Transducers カリー化 (Wikipedia) Haskell (Wikipedia) ハスケル・カリー (Wikipedia) SRFI(サーフィー) R6RS(現行の最新のScheme言語仕様) トライグラフ (Wikipedia)
今週は歴史回です。僕からは、終戦の翌年の東京で、日本のそろばん名人が米軍代表の電卓オペレータと大規模な公開マッチを行って、そろばん名人が勝利したという知られざるエピソードを紹介します。うどんくんからは、第二次世界大戦のドイツ軍の暗号がどう破られたのかという話をします。出演者: うどん (@kw_udon_)、Rui Ueyama (@rui314) https://turingcomplete.fm/27 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) コンピュータ歴史博物館 (0:40) そろばん対決の当時の新聞記事を図書館で探す (4:22) 星条旗新聞の一次資料を発見 (8:24) 日本側挑戦者は逓信省に勤めるマツザキ・キヨシさん (9:50) 新聞の興行としての計算勝負 (12:52) 会場はアーニー・パイル・シアター(旧東京宝塚劇場) (14:55) アメリカ側挑戦者はGHQ財務局のThomas Nathan Wood二等兵 (16:32) モータを内蔵した機械式計算機 (17:19) 勝負の予想は半々に割れる (18:40) 日本側からNHKや新聞が取材に来ていてフィルムも残っているはず (20:39) マツザキさんが勝利 (21:27) マツザキさんの勝利を報じる星条旗新聞 (23:35) この計算対決があったことはほとんど知られていない (24:35) エニグマ暗号機 (27:24) 大昔のコンピュータを、現役学生時代にMITでハックしていた人がデモしてくれる (27:56) エニグマの基本構造 (29:46) シーザー暗号やヴィジュネル暗号との比較とその解読法 (33:29) ワンタイムパッドとは (38:56) バベッジとバベッジの階差機関 (41:05) エニグマの基本構造と鍵空間の大きさ (43:24) エニグマはいつ解読されたのか (46:54) 分散コンピューティングで解読する現代の試み (49:32) ポーランドが暗号化手順の脆弱性を発見してエニグマのレプリカを作ることに成功 (51:02) ソ連のページが重複した「乱数表」でアメリカが通信解読に成功していた事件 (1:06:30) ポーランド侵攻の直前にイギリスのチューリングのチームに成果を引き継いだ (1:07:38) チューリングを描いた映画「イミテーション・ゲーム」 (1:11:10) クリブを元に全探索する装置Bombe (1:12:10) ドイツ軍は連合国の暗号解読を試みたのか (1:16:05) アメリカ軍の暗号解読により山本五十六海軍長官が殺害される (1:17:52) タイガー手回し計算機 (1:19:26) 物量の差で負けた戦争と、そろばん電卓対決 (1:22:29) テレビ番組化希望 (1:23:47) 未解読の暗号文を解読する現代の試み (1:24:58) 最近も新しい暗号文が解読されている (1:29:21) エニグマのレプリカ自作 (1:31:01) 歴史回はどうだったか (1:32:21) サイモン・シン「暗号解読」 (1:33:02) エンディング (1:35:04) NHKの持っていたそろばん対決のフィルムの抜粋 コンピュータ・ヒストリー・ミュージアム コンピュータグラフィックスのデモでよくでてくるティーポッド (Wikipedia) そろばん対決のWired日本語版の記事 そろばん対決のWired英語版の記事 そろばん対決についての短い説明 (Wikipedia) 東京宝塚劇場 (Wikipedia) 風船爆弾 (Wikipedia) 星条旗新聞 (Wikipedia) Ancestry モンロー計算機のデモ (YouTube) エニグマ暗号機 (Wikipedia) エニグマの解読 (Wikipedia) バベッジの階差機関 エニグマについての詳しい日本語スライド ヴィジュネル暗号 (Wikipedia) エドガー・アラン・ポーの「黄金虫」 (Wikipedia) ポーランドが内部の配線を特定するのに成功した手法の説明 (Wikipedia) 欠陥のある乱数表によりソ連の暗号を解読するプロジェクト 映画「イミテーション・ゲーム」 (Wikipedia) チューリングによる暗号解読機Bombe (Wikipedia) イギリスによる海底ケーブル網 山本五十六海軍大将の戦死 (Wikipedia) サイモン・シン「暗号解読」(書籍) How Polish Mathematicians Deciphered the Enigma (PDF) 分散コンピューティングで解読するプロジェクト Enigma@Home Frode Weierudさんによる エニグマ暗号まとめサイト Frode Weierudさんによるエニグマ暗号解読についての最近の進歩についての論文 (PDF) チャールズ・バベッジ (Wikipedia) タイガー計算機 計算機屋かく戦えり(書籍) 追記 そろばん対決では四番勝負と言っていますが正しくは加減乗除とその全てのコンビネーションの五番勝負です。
るくすくんとSwitchエミュレータの進歩や、政府機関のサイバー部隊に就職したい話、セキュリティ全般について話をしました。出演者: るくす (@RKX1209)、Rui Ueyama (@rui314) https://turingcomplete.fm/26 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) Switchエミュレータでネットワーク通信が動くようになった (0:53) SwitchのHomebrewのアプリをエミュレータで動かして動作確認 (1:48) Webブラウザの脆弱性を使ってアプリをインストール (4:12) 完成度はまだまだだが、Switch用のNES(ファミコン)エミュレータくらいは動く (8:17) GPUのエミュレーションの方法 (14:01) 既存のエミュレータと動作を比較してデバッグ (15:27) 開発期間は4〜5ヶ月 (20:47) main関数に到達するまでが大変 (22:47) QEMUベースのSwitchエミュレータの比較 (26:04) オープンソース化したらどういう反応があるのか (27:13) るくすくんのセキュリティのサーベイ記事 (29:42) 日本の政府機関のサイバー部隊 (30:55) 日本の政府機関のハイテク音痴ぽさ (37:10) アメリカの情報機関に就職するには国籍がないと難しい (38:25) スパイ衛星の運用は内調 (39:20) ハッキングチームの情報流出事件 (42:00) ハードウェアの脆弱性を使ったターゲット攻撃 (45:34) PlayStation 4でWebブラウザがクラッシュすると警告文が出る (48:46) 法執行機関に対抗してユーザのプライバシーを守ろうとするAppleの姿勢と努力 (50:56) セキュアブートとは (55:02) 拡張ハードウェアを使ったセキュアブートの回避 (57:31) TCFMミートアップのQ&Aコーナーの質問 (1:00:20) ワーム事件を引き起こしたRobert Morrisは今はMITの教授 (1:08:29) Kevin Mitnickの逮捕に協力した下村努はノーベル賞受賞者の下村脩の息子 (1:10:21) Project LoonのAstro TellerはEdward Tellerの孫 (1:11:55) SwitchBrew(Nintendo SwitchのためのHomebrew) BSDソケット (Wikipedia) リモートデバッグのためのGDB stub Hackaday Hacker News るくすくんのサーベイ記事 − システムソフトウェアに対する攻撃の歴史と傾向 - 高度標的型攻撃や国家に支援された攻撃の仕組み 内閣情報調査室 (Wikipedia) 自衛隊のサイバー攻撃への対応について ハッキングチーム (Wikipedia) TPM ロバート・モリス (Wikipedia) 下村脩 (Wikipedia) 下村努 (Wikipedia) ケビン・ミトニック (Wikipedia) Project Loon エドワード・テラー (Wikipedia)
Chrome開発者のKinukoさんと、Chromeのページロードを速くする話や、ブラウザのセキュリティ、ブラウザのマルチプロセスアーキテクチャとマイクロカーネルの類似性などについて話をしました。出演者: Kinuko (@kinu)、Rui Ueyama (@rui314) https://turingcomplete.fm/25 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) Chromeのローディングを担当 (1:24) リンクはクリックしたら一瞬で表示されてほしい (3:32) Service Worker (4:28) WebページをまとめるWeb Packaging (6:23) Web PackagingとCDNとデジタル署名 (10:35) 信頼できる第三者による署名 (15:06) マウスオーバーでプリフェッチ (16:22) 機械学習でプリフェッチ (17:32) Chromeのデータセーバー (18:28) 遅い機能を使っていないことを宣言できるfeature policy (21:14) ブラウザの深い話をするつもりが普通のWeb開発の話になっていた (23:00) Service WorkerはGoogle検索も使っている (24:22) Service Workerの最適化 (26:23) Service Workerを使っている大規模サイトの例 (30:36) ブラウザはとにかく大きくて複雑 (32:05) 細かくプロセスに分ける現代のブラウザはマイクロカーネルぽい (34:11) File descriptor passing (42:04) ブラウザのタブをVMにしたら? (44:06) KinukoさんはOSぽい研究をしていた (47:43) 分散ファイルシステムの研究 (48:40) WWWのデザインの適当さの衝撃度 (51:39) Chromeの脆弱性報奨システム (55:10) 定評のあるオープンソース開発者が意図的に悪意あるコードを書いたら見つけられるか? (1:00:03) SanitizerがC++を延命している (1:05:31) セキュリティレビューワーは何をみているのか (1:11:30) 開発力のあるエンジニアを大量に集めてブラウザの巨大さに対抗 (1:14:05) Windows版のChromeもlldリンカに移行 (1:15:16) TCFMミートアップに100人以上が参加 (1:17:39) 趣味や研究でChrome開発に参加→就職 (1:21:14) Service Worker Web Packaging AMP ソフトウェア危機 MozillaのXUL(ズール) LLVM sanitizers Valgrind Chromeの脆弱性報奨システム Turing Complete FMミートアップ lld
東大医学部卒業後にソフトウェアエンジニアをしている門脇さんと、生物の研究の話や最近の遺伝子技術の進歩などについて話をしました。出演者: Shiro Kadowaki、Rui Ueyama (@rui314) https://turingcomplete.fm/24 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) 東大医学部 → ソフトウェアエンジニア (1:43) DOS版のソフトをWindows 3.1に移植 (4:51) 医学部に行くと普通は医者になる (6:55) 細胞内の物質の濃度を測る研究 (9:40) IP₃の濃度を蛍光タンパク質を使って測定 (16:15) 生物の実験と再現性の問題 (19:33) 測定することで測定対象に影響を与える問題 (24:00) 遺伝子を一から作ることはできるのか (25:08) 人体を設計し直せるとしたら (29:35) 蛍光の観察方法 (31:26) 制御装置をビジュアルプログラミング言語で作る話 (36:27) 細胞のシートや立体構造を作る話 (38:29) 実験の動画をMOで保存 (39:37) 実験装置の光源 (40:56) ヒトゲノム計画 (46:29) Perlの正規表現で遺伝子を探索 (50:37) 遺伝子の候補を見つけた後どう検証するのか (55:18) ディープラーニングを使って眼底写真から血圧や性別を判別する話 (58:22) 蚊を根絶する話 (1:00:50) 沖縄における不妊虫放飼の実例 (1:03:07) タスマニアデビルの感染性のガン (1:06:03) 野生生物の種単位での根絶を可能にするGene Drive (1:07:37) 数珠つなぎ式Gene Drive (1:11:11) UnicodeのDNA絵文字のバグ (1:14:53) マッドサイエンティストなPCR発明者 (1:18:49) Wikipediaの専門のページ (1:20:40) Win32s IP₃受容体 蛍光タンパク質 MOドライブ SyQuestのリムーバブルハードディスク ヒトゲノム計画 タスマニアデビルの感染性のガン 不妊虫放飼 毎週数百万匹の不妊化蚊を放って蚊を地域から根絶する計画 Gene Drive 数珠繋ぎ式Gene Drive DNAの絵文字 マリス博士の奇想天外な人生(書籍) オクロの天然原子炉
戦略投票を行わなくてよいマッチングのアルゴリズム、Intel 3D XPointのような不揮発性メモリ、この世界はシミュレーションか、といった話などをしました。出演者: hikalium (@hikalium)、Rui Ueyama (@rui314) https://turingcomplete.fm/23 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) セキュキャン2018 (2:05) 戦略を必要としないマッチングアルゴリズム (3:34) デュヴェルジェの法則 (12:44) 比例投票制の制度設計 (18:32) 完全比例代表制と阻止条項 (20:41) 不揮発性DIMM (24:43) 不揮発性DIMMをどうモデル化するか (30:56) 不揮発性DIMMはファイルシステムとして見えるべきか、永遠に存在するプロセスとして見えるべきか (33:08) 3D XPointメモリは8バイト単位での書き込みがアトミック (39:37) Compare-and-swap命令 (42:57) ストレージ階層に新たな層が加わるのは面白い (45:32) シングル磁気記録方式のHDD (46:42) 水槽の脳 (52:02) 世界シミュレーション仮説 (54:33) シミューレーションと浮動小数点数演算の誤差 (55:19) パイオニア・アノマリー (58:25) カール・ポパーと反証可能性 (1:00:47) hikaliumはこの世界はシミュレーションだと思うかどうか (1:03:44) 世界無課金ゲーム仮説 (1:07:25) シンギュラリティ後の世界でコンピュータ内に移住したいかどうか (1:08:40) 「脳のなかの幽霊」と半球無視 (1:10:55) デュヴェルジェの法則 MTRRレジスタ Compare-and-swap シングル磁気記録方式 水槽の脳 胡蝶の夢 シミュレーション仮説 パイオニア・アノマリー 原子力電池 カール・ポパー 反証可能性 脳のなかの幽霊(書籍)
gVisorというLinux向けサンドボックスがオープンソース化されました。gVisorの構成は、ぬるぽへさんが作成していたNoahとかなりよく似ています。そこで、ぬるぽへさんからNoahの経験をもとにgVisorの話を伺いました。出演者: ぬるぽへ (@nullpo_head)、Rui Ueyama (@rui314) https://turingcomplete.fm/22 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) NoahはLinux互換環境を提供する薄いVM環境 (1:38) NoahでもgVisorでもないサンドボックス環境の例 (2:40) Noahをサンドボックスにするアイデアはあった (4:51) gVisorはGoogleのクラウドで数年間使われている実績のあるもの (5:37) gVisorがlldでリンクできなかった問題 (6:36) -mcmodel={medium,large} (7:05) gVisorがうっかりlibcをリンクしていた (9:24) gVisorはNoahに似ている (11:53) gVisorは複数プロセスを持つことができる (12:55) gVisorはLinuxカーネルをGoで実装したもの (15:16) gVisorはTCP/IPプロトコルスタックを自前で実装 (19:54) TCP/IPはなぜカーネルに実装されているのか (26:52) Go Genericsパッケージ (28:28) C11の型でディスパッチするマクロ (30:02) C言語の正しいgoto文の使い方 (32:12) C言語にテンプレートを入れてほしい (34:15) コンテナはサンドボックスなのか (37:34) 起動の速いVMの研究 (40:32) プロセスイメージのダンプ・アンダンプをgVisor/Noahでできないか (41:54) ダンプ・アンダンプはLispの伝統的テクニック (45:45) gVisorはptraceも実装 (51:51) VDSO (53:58) ソフトウェアでVMを実装するほうがハードウェアより速いことがよくある (56:56) Intel EPT (nested pages)は性能上のメリットがある (1:00:42) Shadow page table (1:02:55) スタンフォードのコンピュータサイエンスの古典の論文を読む授業 (1:07:10) IBM System/360とパーソナルコンピュータ (1:09:43) NFS v1の論文 (1:13:23) 因果律を満たす限り非同期に書き込む同期ファイルシステムの研究 (1:14:57) 投機的ファイル読み込みとプロセス状態のロールバックを行うカーネルの研究 (1:21:21) Ken Thompsonがコンパイラに埋め込んだハック (1:26:09) ビルド環境では再現可能性が重要 (1:32:54) エンディング (1:35:54) gVisor Noah lld Understanding the x64 code models My VM is Lighter (and Safer) than your Container (PDF) CRIU — プロセスのチェックポインティングを行うツール CS240(Stanfordの授業) NFSの論文 (PDF) VMwareによるソフトウェアとハードウェアの仮想マシン実装の比較の論文 (PDF) Rethink the sync(因果律を満たすファイルシステムの実装の論文) (PDF) Reflections on Trusting Trust (Ken Thompsonのチューリング賞授賞式で発表した内容のペーパー) (PDF)
東大の授業ではCPUやコンパイラを作ってレイトレイサを動かすという授業があります。高橋さんのチームはRISC-Vプロセッサを実装して汎用OSを動かそうとしました。その話を伺いました。出演者: 高橋祐花 (@00_)、Rui Ueyama (@rui314) https://turingcomplete.fm/21 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) CPU実験のコア係とコンパイラ係 (1:46) CPU実験と商業的なプロセッサとの比較 (6:43) CPUシミュレータ作成係 (9:29) コアのデバグの辛さ (10:58) Intel 4004(Intel最初のCPU)の設計の話 (13:08) チップアート(シリコンの上の微小な落書き) (14:20) 各社のCPUID命令 (15:33) コア係をするかコンパイラ係をするか (17:43) 自作CPUにLinuxを移植したかったが頓挫 (19:55) 1日で代替の自作OSを作成 (21:01) 自作OSはマルチタスクもサポート (27:11) ユーザスレッドとカーネルスレッド (28:16) 自作CPU作成に必要な機材 (31:41) ミニマムなCPUを作って最小限の命令を次第に足していく (34:21) 自作CPUではDRAMは使っていない (40:23) SRAMとDRAMの解説 (41:24) 浮動小数点数の演算はIPコアを使ってよいルール (43:24) 浮動小数点数の丸めモード (45:48) IOはUARTでシリアル通信をサポート (48:20) UARTはデバグが辛い (49:33) 暗中模索になりがちな低レイヤのデバグの話 (50:54) 命令セットにはRISC-Vを選択 (54:09) Linuxが動くCPUを作るのは大変 (55:44) ELFフォーマットのカーネルをロードするのも面倒 (57:56) MMUを実装する必要性 (1:00:19) 1stコアはハーバードアーキテクチャ (1:01:56) MMUの解説 (1:04:05) 残り5日でOSを実装 (1:05:52) タイマ割り込みはクロックを数えて実現 (1:06:54) 自作CPUをメインで作った3人は公立高校出身 (1:08:56) RISC-Vなのでgccの移植は不要 (1:14:04) CERNの仕事を学業と比べると (1:16:17) 牧場系スマホゲームとスーパーエンジニア (1:18:49) ドラクエの乱数調整でのリアルタイムアタック (1:21:21) 学祭でのドラクエのリアルタイムアタック (1:25:20) 東大のCPU実験で自作コア上の自作OS上で自作シェルを動かした話(今回の話のブログ) RISCアーキテクチャ ARMプロセッサの歴史 RISC-V Intel 4004の論理設計をした嶋正利 チップアート(ICの上に書かれた微小な落書き) チップアートのコレクション IwaCPU パタヘネ本(CPUの設計の本) CPUID命令 CPUIDで返されるプロセッサベンダの名前のリスト Verilog 2の補数 SRAM DRAM UART ELFファイルフォーマット MMU 仮想メモリや割り込み、タスクスイッチの仕組みがよくわかる本「はじめて読む486」 ハーバード・アーキテクチャ ゲームの乱数調整の話 スーパーマリオ最短時間クリアの世界記録の詳細な解説動画 (YouTube) 東大TSGプログラミング生放送 (YouTube)
るくすくんと一緒に、デバグ例外を使ってx86プロセッサ上のOSのセキュリティホールをつく手法や、Nintendo Switchのハッキング、ゲーム機のセキュリティなどについて話をしました。出演者: るくす (@RKX1209)、Rui Ueyama (@rui314) https://turingcomplete.fm/20 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) るくす君がカーネギーメロン大学に客員研究員として1年間行きます (1:30) POP SSデバグ例外を使った脆弱性 (10:47) セグメントレジスタを変更する命令に対するデバグ割り込みだけは特別扱いになるというCPUのマイナーな仕様を誰もよく理解していなかった (19:17) OpenBSDの強いセキュリティ (25:10) 低レイヤのマイナーな仕様の不理解を突く脆弱性はまだまだあるはず (29:52) Nintendo Switchのハッキングやエミュレータの作成 (36:47) Switchで任意コードが最高権限で実行できるファームウェアのバグが最近見つかった (37:49) USBからのデータを正しく検証していないという、SwitchのブートROMのバグ (42:00) スーパーファミコンの「セキュア」チップ (47:33) スーパーマリオの最短時間クリア記録 (54:50) 高品質なアスキーアートを生成する論文 (59:43) AlphaGoの次はスタークラフトで人間に勝つのが目標 (1:06:58) John CarmackとSteve Jobsの思い出 (1:11:11) マスターとPhDとその後 (1:13:48) POP SS debug exception vulnerability 分岐予測の詳細なリバースエンジニアリング資料 ソーシャル・エンジニアリング フューズで不可逆にNintendo Switchのファームをアップデートする話 Nintendo SwitchのブートROMのバグ Wiiのゲーム「ゼルダ 風のタクト」、Switch上のエミュレータで動く Dolphinエミュレータ Wine - Windows互換実行環境 ジーコサッカー Atari Games対Nintendo of Americaの訴訟 リセットをかける任天堂のチップ バーチャルボーイ スーパーマリオ最短時間クリアの世界記録の詳細な解説動画 マリオブラザーズがNP hardであることを示した論文 SIGGRAPHにアクセプトされたアスキーアートがたくさん載っている論文 (PDF) SIGGRAPH (シーグラフ)
川合史朗さんが作っているScheme処理系Gaucheの実装について、特にメモリ管理やクロージャ、継続の実装などに焦点を当てて話をしました。最近のCPUでは単純にJITしても速くならない理由などについても話をしています。出演者: 川合史朗 (@anohana)、Rui Ueyama (@rui314) https://turingcomplete.fm/19 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) Schemeのストレージモデルではすべてが無限エクステント (1:06) 関数呼び出しのモデルとアクティベーションレコードのアロケーション (4:34) SPARCのレジスタウィンドウ (9:20) Alphaの速さの秘密 (12:41) 大コケしたIntel Itaniumプロセッサ (14:11) GoのGC停止時間の劇的な改善 (16:55) ページテーブルのダーティービットをユーザプログラムから使う話 (20:14) Goの分割スタック機能 (23:07) クロージャを作ったときに使ってない変数を不必要に掴んでしまう問題 (25:54) 32ビットハッシュ値を大量に作ると32ビットマシンで偽ポインタがたくさんできてしまう問題 (27:44) 決してreturnしないCプログラムにコンパイルするScheme処理系 (33:00) タグ付きポインタ (41:23) C言語の仕様を満たすためのBoehm GCの機能と、それを使いたくない理由 (46:10) 64ビット浮動小数点数をなるべくヒープにアロケートせずに扱いたい (50:30) 16ビット"Brain"浮動小数点フォーマット (55:27) Gaucheの正規表現エンジン (56:44) Scheme→C→Schemeという呼び出しをした先で継続を取得すると限定継続になる (1:00:19) Schemeスタックからヒープへのコピー (1:04:44) 末尾呼び出しはスタックを消費しないように手続きを呼び出す (1:05:50) Chez Schemeでは多値ありと多値なしの2つの継続を渡す (1:10:29) 最近のCPUの分岐予測の賢さとMeltdown & Spectre (1:13:16) Gaucheを単純にJIT化してもCPUの分岐予測が賢いのでそれだけでは速くならない (1:20:08) 社会的や経済的理由で速くなる言語 (1:25:05) リテラルで書けるオブジェクト (1:27:29) 正規表現リテラル (1:28:32) マップのリテラル (1:30:55) Gaucheのハッシュテーブルとハッシュ衝突攻撃 (1:36:41) TCFMの難易度 (1:39:24) Gauche Scheme ハッカーと画家(川合さんが翻訳した本) SISC Scheme メモリのローカリティ SPARC DEC Alpha Itanium (IA-64) VLIW命令セット HamajiさんによるGCフレンドリーなスタック塗りつぶしの話 Clojure(JVMで動くLisp) Chicken Scheme Azul Systems(並列Javaマシンを作っていた会社) Hans Boehmによる保守的GC安全なデータ構造についての論文 (PDF) Cheney on the M.T.A. History of T タグ付きポインタ 16ビット"Brain"浮動小数点フォーマット Russ CoxによるThompson NFAの解説 Anton Ertlらによるmemcpyを使ったJITの手法の論文 (PDF) 末尾呼び出し最適化 セキュアで速いハッシュとしてデザインされたHighwayHash 追記 CPythonはリファレンスカウンタを使っていますが、Pythonの言語仕様自体では必須とはされていません。
hikaliumのセキュキャン体験、コンピュータセキュリティ、LLVMプロジェクト、コンピュータサイエンスのおすすめ書籍などについて話をしました。出演者: hikalium (@hikalium)、Rui Ueyama (@rui314) https://turingcomplete.fm/18 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) セキュキャン2018ではセルフホストできるCコンパイラの作成を目指す (1:10) IRC、Slack、シンギュラリティ (7:15) hikaliumのセキュキャン2016体験話 (9:24) イーサネット(10BASE-T)の物理的なワイヤフォーマット (10:37) 謎のボードを気合いで解析するお題 (21:31) USBメモリを使ってアメリカとイスラエルがイランの核計画を妨害した話 (25:07) セキュアなオリジナルCPUの開発 (32:30) セキュキャンの講師はどう選んでいるのか (40:59) コンパイラ業界の景気の良さ (43:28) hikalium、Cコンパイラを書く (45:04) 演算子優先順位文法 (47:55) LLVMプロジェクト (52:30) 本のプレゼント企画 (1:11:21) セキュキャン2018 xkcdのマンガ 詳説イーサネット(書籍) マンチェスタ符号 8b/10bエンコーディング Ethernetフレーム ALOHAnet Return-oriented programming イランの核計画を妨害したワームStuxnet Bruce Schneier hikaliumのセキュキャン応募書類 OSECPU(オセクプ) Misreading Chat Rebuild 8cc tcc RUCC Udon C Compiler 演算子優先順位文法 Rafaelのメールの勝手翻訳 lldリンカ 「悪い方が良い」原則と僕の体験談 TCFM18書籍プレゼント応募フォーム 30日でできる! OS自作入門(書籍) CPUの創りかた(書籍) 数学ガール(書籍) Cプログラマのためのアルゴリズムとデータ構造(書籍) すべてがFになる(書籍) 追記 イーサネットフレームはCRC32をチェックサムに使っています。
プログラミング言語を作る時には、途中で変えることが極めて難しいデザイン選択を最初に行わないといけないことがあります。今回は川合史朗さんがGaucheを設計した時に行ったデザイン選択の判断について話を伺いました。また、浮動小数点数のトリッキーさについても話をしています。出演者: 川合史朗 (@anohana)、Rui Ueyama (@rui314) https://turingcomplete.fm/17 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) セキュキャン参加者募集中 (0:41) 俳優のオーディションとその心構え (2:43) 川合史朗さんが出演している映画がサンフランシスコで上映されます (5:16) 前回の訂正 (7:40) Gaucheを作った経緯 (8:57) STkのオブジェクトシステム (12:22) CLOS(Common Lispのオブジェクトシステム)ではインスタンスのクラスを動的に変更できる (14:35) CLOSを使ってオブジェクトデータベースを作った話 (18:39) 三つ組を使ったグラフデータベースを作った話 (24:38) 構文木インタープリタではなくVMを選んだ理由は、継続 (29:24) プログラミングにおける概念としての「継続」 (30:39) 文字列の内部表現はどうするか (36:46) マルチスレッドの対応 (37:47) GCのAPIはどうするか(GaucheはBoehm GCを使って保守的GC) (39:36) 保守的GCとは何か (43:13) 自分ではGCを書かなかった理由 (45:03) Precise GCにしなかった理由はC言語との親和性 (46:45) マルチスレッドとGCとUnixのシグナル (47:50) GoやErlangの並行処理モデルを導入していない理由 (51:17) Gauche版のjava.util.concurrent (52:31) R5RSの範囲を実装するのは1ヶ月以内でできた (55:16) 浮動小数点数を10進で書き出して読み出した時、同じ数に戻ることを保証するには (57:37) Schemeは分数を正確な分数のままで扱うことができる (1:04:09) 16進浮動小数点表現 (1:07:17) 浮動小数点数の1.15を丸めた時、1.1になるべきか、1.2になるべきか (1:08:17) 正確数のsqrtは正確数にしたい (1:12:12) 浮動小数点数を安易に10倍すると精度が失われる (1:16:07) 浮動小数点数はそれ自体で整合は取れているが、実数とは異なる数の体系 (1:16:49) x87の80ビット浮動小数点数フォーマットの落とし穴が原因で、PHPが特定の数を読み込むと無限ループに陥るバグ (1:17:43) JavaやGaucheが読み込むとハングする特定の浮動小数点数があった (1:19:38) 浮動小数点数の精度は大は小を兼ねるわけではない (1:23:25) 言語処理系はコーナーケースをすべて面倒を見なければいけないのが面白い (1:25:42) セキュキャン2018 第442連隊(ヨーロッパ戦線で激戦を戦った日系アメリカ部隊) 100回落ちることを目指す話 Go For Broke; 川合史朗さんがでている映画 Go For Broke公式トレイラー(冒頭で話しているのが川合史朗さん) Gaucheホームページ & 川合史朗さんのエッセイ Tcl/Tk Common Lisp Object System (CLOS) STk 川合史朗さんによるSTkのMOPの話 The Art of Meta Object Protocol (MOPの解説本) なんでも継続(川合史朗さんによる継続の説明) なんでも再帰 R5RS Gaucheの概要 The Law of Leaky Abstractions (漏れのある抽象化) XORリスト Boehm GC Hans Boehm 詳解Unixプログラミング(書籍) Java並行処理プログラミング(書籍) Future Printing Floating-Point Numbers Quickly and Accurately ニュートン・ラフソン法 Donald Knuth先生のThe Art of Computer Programming (2) 日本語版(多倍長の割り算のアルゴリズムの解説がある) Rui Ueyamaによる浮動小数点数の解説 When the inexact square root of an integer is exact Rounding 1.15 Curse of extended floating point arithmetic Bitten by floating point numbers again Exact sqrt
うどんくんが研究していたプログラム検証の話や、システムズプログラミングの古典的な論文についての話をしました。出演者: うどん (@kw_udon_)、Rui Ueyama (@rui314) https://turingcomplete.fm/16 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) Patreon (1:33) Wikipediaに寄付するとどうなるか (2:52) セキュキャン2018の講師やります (7:57) プログラム検証とは何か (13:09) Rustは型システムによってコンパイル時に安全性を検証できる (18:38) 線形論理と線形型 (22:16) 定理証明支援系Coq (26:29) 関数型プログラミング言語に対するモデル検査 (39:25) プログラミング言語の研究が応用されるまでには時間がかかる (44:04) Misreading Chat (48:17) Stanford CS240 (49:38) 「悪いほうが良い」エッセイ (52:05) Eraserによる動的エラー検出 (56:41) 割り込みハンドラが忙しすぎてマシンがハングアップする問題を解決する論文 (1:03:23) VMware ESXのメモリ管理の論文 (1:09:23) MicrosoftのMidori OS (1:20:03) TCFMの話題のバリエーションについて (1:21:29) ガラケーを自動操作するデバイスを自作 (1:23:28) セキュキャン2018 線形論理 モデル検査 高階モデル検査 うどんくんの出身研究室が開発している関数型プログラムの自動検証器 プログラミング言語Rust カリーハワード同型対応 Coq COMPCERT Cコンパイラ INRIA 四色問題 ケプラー予想 プログラミング言語Eiffel Misreading Chat 簡単なプログラミング言語を30分で作る実況動画 音の良いポッドキャストを録音するために ― Turing Complete FMの収録テクニック Turing Complete FMの裏側 ― Webサイト構築編 Stanford CS240 「悪い方が良い」原則と僕の体験談 Arduinoで作る携帯サイト自動巡回マシン
CERNでソフトウェアエンジニアとして仕事をしている高橋祐花さんと、CERNでの話やスイスでの暮らし、外国語、フェミニズムなどについて話をしました。出演者: 高橋祐花 (@00_)、Rui Ueyama (@rui314) https://turingcomplete.fm/15 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) CERNはWWWが発明された場所 (1:25) Patreonを使ってサポーター制度を導入 (2:50) CERNの粒子加速器が生成するペタバイトレベルのデータを処理している (8:27) TensorFlowを使って太陽系外の惑星を発見する話 (14:39) C++で大量のデータを処理 (17:43) 物理学者でも使えるように考慮されたインタラクティブなC++ (24:17) C++ modules (29:42) コンパイル時間を短くしたい (32:13) スイスでの生活とCERNの仕事環境 (36:40) 大量のデータの話 (40:07) CERNの(自然)言語 (43:46) 言語獲得の臨界期説 (48:46) プログラミングを始めたのは3年前 (52:01) 物理学者の書くコードはキレイではない? (57:11) 国際女性デー (1:00:28) 東大の女子率低すぎ問題 (1:03:34) 出世して少女に夢を与えられる人になりたい (1:07:39) ファンを増やす話 (1:10:24) 年齢性別その他の属性気にしすぎ問題 (1:13:55) CERN欧州原子核研究機構 高橋祐花さんのLLVM Dev meeting 2017での発表動画 CERNの場所 WWWの発明者 ティム・バーナーズ=リー 世界最初のWebサイト info.cern.ch 東大のCPU実験で自作コア上の自作OS上で自作シェルを動かした話 Auphonic 音の大きさ(ラウドネス) Accidental Tech Podcastの広告出稿ページ CERNの粒子加速器 ヒッグス粒子 P≠NP予想 TensorFlowを使って遠くの恒星の惑星を発見 スーパー・アース 数百キロの深さの海を持つ海洋惑星 Sawzall CERNのRootデータ解析フレームワーク LLVM C++ modules CERNのデータセンター スイスの言語 インド・ヨーロッパ語族 ゲルマン語派 琉球語 CTF SLAC国立加速器研究所
Gauche Schemeの作者の川合史朗さんと、Z80 CPUを使ったPCをホストコンピュータなしに自作した話や、Schemeの話などをしました。出演者: 川合史朗 (@anohana)、Rui Ueyama (@rui314) https://turingcomplete.fm/14 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 ハワイ在住で副業は俳優 (0:00) Gaucheは仕事でも使っている (2:21) Common LispはGoogle(元ITA)でも使っている (3:11) Noahでプロセスのundumpができないだろうか? (5:00) Clojureの起動はJVMなので速くない (6:02) Lispコンパイラは改善の余地あり (8:47) Webのスクリプト言語はJavaScriptではなくSchemeが採用されるはずだった (10:09) ShiroさんはGCCのコードから多くを学んだ (12:12) 並列Cコンパイラのプロジェクト (13:45) Gauche Schemeはとてもきれいなソースコード (14:55) 中学生のころに電子工作としてZ80の自作PCを作り始める (17:55) 本物のPCは高すぎて買ってもらえなかったので電気屋の店頭でコードを打ち込んでいた (20:04) 親にこれからコンピュータは絶対必要になるとアピールするも失敗 (21:13) テレビを修理しようとする話 (22:58) トラ技で「Z80を使ってマイコンを組み立てよう」といった記事などをみて自作を始める (25:17) 入出力はスライドスイッチとLED (26:13) バスを直接スイッチで操作してメモリに手で書き込んでいく (28:29) プログラムを書き込むためのプログラムを作る (29:58) 7セグLEDと16進キーボードを作って接続 (31:20) ROMライターを作ってROMから起動できるように (33:42) 殺虫灯でEPROMを消去 (34:19) フルキーボードとテレビを接続できるように (36:41) フォントを作ってキャラクタROMを作り画面に文字を出す (37:35) テトリスを作る (40:08) テトリス作者とその後一緒に仕事をすることになった (40:59) フロッピードライブを動かす (43:59) ファイルシステムがないのでノートにファイルの保存位置をメモっておく (46:53) CP/Mを動かす (47:33) アセンブラを入手 (49:42) 大学でチップを作った話 (50:52) クロックは最初は2MHz (54:26) Z80のノウハウを使ってSillicon Graphicsの巨大なマシンにPS2のゲームコントローラをつなぐハードを作成 (55:14) プログラミング言語APL (56:21) Turbo Pascalを入手 (1:00:00) オーブンに入れて遮蔽 (1:01:50) フロッピーディスクは信頼性が低かった (1:03:57) 大学時代に386BSDを(普通のPCに)インストール (1:05:01) TCP/IP以外のネットワークプロトコルも普通にあった (1:09:19) ハードウェア共有分散メモリとそのためのコンパイラとNoahとの共通点 (1:10:29) コンピュータは極端に進歩しているところとあまり変わっていないところの差が激しい (1:15:00) PS2のコプロセッサでアセンブラプログラミング (1:16:31) SIGGRAPHのデモでファイナルファタジーの映画の一場面をリアルタイムレンダリング (1:18:26) 意外なところで自分のやっていることが一周回って役に立つことがある (1:21:12) Gauche Scheme ハッカーと画家 Gauche Schemeのソースコード Steel Bank Common Lisp ITA Software Clojure言語 V8 JavaScriptエンジン JavaScript作者のBrenden Eichは当初「Schemeをやる」約束でNetscapeに雇われた WebAssemblyのS式フォーマット gotoを使った手書きのDFA Gaucheのbuffered port オーブンPC ラジオを直す話(ご冗談でしょう、ファインマンさん) 紫外線照射で消去できるROM、EPROM 7セグメントLED 紫外線を放つブラックライト フラッシュメモリ テトリス アレクセイ・パジトノフ(テトリス開発者) ヘンク・ロジャース(テトリスの権利を買い付けてきた人) 最初はいたずらだったが最後には実在するホストになったソ連のkremvax.demos.su フロッピーディスク 線速度一定 CP/M ワイヤ・ボンディング APL J APLによる1行のライフゲーム: ↑1 ⍵∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵ Turbo Pascal 386BSD SLIP PPP AppleTalk ATMプロトコル SonyのCellプロセッサ SIGGRAPH(シーグラフ) 追記 10BASE-2と10BASE-5の説明が逆になっています。 後半でPS2のVUとPS3のSPEを混同して話しています。
hikaliumの自作アセンブラや自作言語、データ構造やトリッキーなビット操作を使ったアルゴリズム、リンカの最適化などについて話をしました。出演者: hikalium (@hikalium)、Rui Ueyama (@rui314) https://turingcomplete.fm/13 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) asmium — hikalium自作アセンブラ (1:20) Mach-Oオブジェクトファイルを自作アセンブラから出力するには (6:27) AppleがCPUをIntelからスイッチするという噂 (8:21) ラベルの後方参照がオブジェクトファイル内で解決されていない? (11:55) RISCプロセッサなら32ビットオフセットでジャンプできないのが普通 (16:30) リンカに手を入れてAndroid版Chromeのバイナリサイズを涙ぐましく削減する話 (20:42) Unixの共有ライブラリのシンボル解決のセマンティクス (24:01) ブルームフィルタというデータ構造 (27:22) オンディスクのハッシュテーブルを一個だけ作る (32:20) 文字列の末尾部分だけをマージするサイズ最適化 (33:40) x86機械語のエンコーディングが難しい (36:53) (アセンブリ言語ではなく)アセンブラそのものを書けないと負け? (40:33) Goのアセンブラ (41:59) GoはCライブラリを使わずシステムコールを自前で呼び出している (44:10) GoはほとんどライブラリもGo自体で書かれている (46:25) GoのWaitGroupのバグとマルチスレッドプログラミングの難しさ (49:14) ビット操作の楽しさ (54:11) 分岐なしで絶対値を求める (56:11) 掛け算と割り算は2ワードの結果を出力するのにC言語ではそれにアクセスできない (1:01:08) サイボウズ・ラボユース (1:05:21) nv — hikalium自作言語 (1:08:46) Intelも使っているXbyak(カイビャク) (1:14:46) インターンコンバージョン (1:14:54) コーディング面接は対策して当たるべき (1:17:32) Intel and AT&T syntax asmium ブルームフィルタ ASKAアセンブラ Goのアセンブラ Xbyak(カイビャク) Xbyakを使っているIntelのディープニューラルネットワークライブラリ ハッカーのたのしみ(本) Hacker's Delight第2版の無料の章 GoのWaitGroup WaitGroupのバグ POPCNT GoのPNGライブラリで使われている分岐なしabs関数 サイボウズ・ラボユース募集要項 nv Googleの公式モックインタビュー動画 StanfordのCS9の資料
Androidのテキスト処理を担当しているのなさんと、UnicodeやUnicode絵文字、テキスト処理の複雑さ、文字トリビアなどについて話をしました。出演者: のな (@ttuusskk)、Rui Ueyama (@rui314) https://turingcomplete.fm/12 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) 自分の読めない言語のテキスト処理は大変 (1:28) MMDDYYYYとDDMMYYYYの違いによる国際化バグ (3:07) Left-to-right言語とright-to-left言語 (5:23) アラビア語と英語のハイフネーション (6:15) 日本語の禁則処理 (7:19) Android Oで絵文字の表示が最大3倍速くなった (9:12) 結合絵文字の規格が決まっていない状態で実装を書くのは大変 (12:23) 国旗の絵文字の仕組みと仕様バグ (14:49) ハンバーガー絵文字では肉の上にチーズが乗っているべきか (18:18) 絵文字はガラケー起源 (20:30) モヤイ像の絵文字はあるけどモアイ像の絵文字はない (23:42) ガラケーに存在したけどUnicodeに収録されなかった稀な絵文字 (24:52) 新元号の合成文字 (27:28) ひらがなやカタカナはもっと若いコードポイントに割り当ててくれればよかった (30:49) UTF-8は新世界のASCII (33:40) 英語はフォントの機能を比較的ふんだんに使う言語 (38:47) 汎用的な数式プロセッサをフォントだけで作ることができるかも? (40:40) Unicode規格書の紙バージョン (42:42) JISの幽霊文字 (43:41) 将棋の相手の駒の記号(上下逆の漢字)をUnicodeに追加したい (47:01) 100万文字は十分か (50:32) Unicodeの文字名称の規格バグ (52:12) Swiftは文字がgrapheme単位 (53:47) Goだとコードポイント単位 (55:21) ミャンマーのZawgyiフォントがUnicodeの既存の文字を勝手に使っている (57:50) 東アジアのコンピュータ用文字セットの歴史的経緯 (1:00:36) ハイフネーションは多種多様 (1:03:00) 最近の多言語処理はコンピュータの金字塔の一つ (1:05:38) Android Oでは明朝体が標準で入るかもしれない (1:09:21) サブピクセルレンダリング (1:15:20) のなさんによる絵文字の解説 Unicode UTF-8 ハンバーガー絵文字とチーズの位置問題 リガチャー(合字) ß (エスツェット) 幽霊文字 ビャンビャン麺 Ponanzaのために作られた将棋の相手の駒の外事 チェスの駒のUnicode記号 ドミノタイルのUnicode記号 Unicodeの麻雀牌 Brakcet モヤイ像(「イースター島のモアイ像に似た日本の石像の絵文字」として定義されている) Rob PikeによるUTF-8の歴史 Zawgyi font O'ReillyのCJKV本(フグ本) キリル文字 モンゴル文字 満洲文字 Notoフォント 明朝体 アンチエイリアシング サブピクセルレンダリング ペンタイル 追記 JIS委員会が何の手がかりも得られなかった文字は「妛」ではなく「彁」です。
うどんくんがELVMを使ってCコンパイラをC++14 constexprに移植した件や、テンプレートとジェネリクス、プログラミングの型の理論などについて話をしました。出演者: うどん (@kw_udon_)、Rui Ueyama (@rui314) https://turingcomplete.fm/11 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) 数学ガールの結城先生から返事がいただけた件 (0:16) ELVMとは何か (4:26) C++テンプレート省メモリメタプログラミング (7:49) テンプレートの使い所とJavaのジェネリクス (12:42) Goにはジェネリクスもテンプレートもない (13:44) C++11とC++14のconstexpr (17:19) C++17の多重代入構文 (22:25) Accidentally Turing-Complete (24:11) Javaのジェネリクスはチューリング完全 (24:58) Javaの型システムはunsound (25:54) Featherweight Java (35:15) C++コンパイル時コンパイラに対する大きな反響 (37:35) ELVMのバックエンドが書きやすい言語と書きにくい言語 (38:50) 難解言語として作られたMelborne (42:58) Rubyのfizzbuzzコードゴルフと数学 (47:38) SATySFiはどうなんですか (50:44) 理論的にもよく実際にメリットがある言語 (54:55) 静的型と動的型 (55:48) lldのメモリを解放しないデザイン (1:00:45) FacebookとOCaml (1:02:48) 結城さんの数学ガール 結城先生、うどんくんにコメントしてくれる HamajiさんによるELVM Compiler Infrastructureの解説 コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 ヒルベルトの23の問題 テンプレートメタプログラミング 純粋関数型データ構造 Accidentally Turing-Complete Why does Go not have generic types? Java Generics are Turing Complete Java and scala's type systems are unsound Covariance and contravariance (computer science) Church encoding Brainfuck Malbolge Fizzbuzz問題 静的型付け関数型組版言語SATySFi ドナルド・クヌース
OSの移植に使えるレベルのCコンパイラを自作CPU向けにスクラッチから書いた話について話を伺いました。出演者: うどん (@kw_udon_)、Rui Ueyama (@rui314) https://turingcomplete.fm/10 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) プログラミングは大学生から (2:44) プログラミングと理論の楽しさ (3:50) プログラミングの多様性と巨大ピタゴラ装置的プログラミング (13:45) CPU実験のFPU係 (16:36) Cコンパイラのパーザを土日に黙って作ってきてxv6移植チームに混ぜてもらう (26:52) Cの文法の問題点 (31:05) パーザを成長させてCコンパイラを作る (34:22) Udon C Compiler (40:49) typedefは特に文法的に曲者 (43:01) xv6のユーザランドもuccですべてコンパイル (47:45) OCamlでなければ実験期間内にCコンパイラはたぶん完成しなかった (50:18) Erlangの言語のパターンマッチの問題点 (53:23) xv6をコンパイルする前にPicrin Schemeを移植してテスト (56:20) reallocのバグにハマる (58:00) MinCamlで書かれているレイトレプログラムは大昔には元々BASICで書かれていた (1:03:38) レイトレでレンダリングされるあの画像は映画のTRON (1:04:37) 惑星Solaris (1:06:16) 東大CPUはレイトレの速度だけで成績が決まるわけではない (1:09:14) Fabrice Bellard伝説 (1:14:53) JavaScript版の自作CPU向けシミュレータ上で今回移植したxv6を動かせるページ CPU実験で自作CPUにUNIXライクOS (xv6) を移植した話 自作CPU向けCコンパイラをつくってOS動かした話(CPU実験まとめ) 結城さんの数学ガール ゴールドバッハの予想 型システム入門 —プログラミング言語と型の理論— Hindley-Milner type system xv6 Unix 2の補数 ucc 8cc tcc rucc トロン(映画) 1982年版トロンのCG 惑星ソラリス(映画)
東大CPU実験でUnixが動かせるCPUを自作してxv6 Unixを移植した件について話を伺いました。出演者: ぬるぽへ (@nullpo_head)、Rui Ueyama (@rui314) https://turingcomplete.fm/9 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) 日本語プログラミング言語 (1:16) 品川研 (2:41) 東大CPU実験の紹介 (4:38) 使っているハードウェアは結構よい (14:30) 情報理論、可逆計算、情報と熱 (16:20) CPU実験道場破り (18:55) 汎用CPUを作る必要はあるのか? (19:55) xv6は昔のUnix v6のテイストをそのままにx86に作り直したもの (21:15) Russ Cox伝説 (28:21) Robert Morrisはインターネットを落としたことがある (31:20) MySpace作者は家をSWATに襲撃された (32:33) DOOM作者のJohn Carmackはコンピュータを盗んで捕まった (33:16) ぬるぽへさんの中学時代のいたずら (34:38) xv6をMIPSに移植 (38:35) Cコンパイラをスクラッチからいきなり作成 (48:16) ELVM/8ccとチューリング完全 (50:40) 自作CPU用のツールチェイン (56:50) 汎用CPUを作るのは大変 (1:00:40) クロス開発とセルフ開発のブートストラップ (1:05:07) xv6のファイルサイズ制限の回避 (1:08:30) Cプリプロセッサを作るのは若干面倒 (1:11:20) 東大CPU実験を他の大学に移植するには? (1:17:42) 就活とプログラミングコンテスト (1:22:00) 日本語プログラミング言語TTSneo CPU実験で自作CPUにUNIXライクOS (xv6) を移植した話 自作CPU向けCコンパイラをつくってOS動かした話(CPU実験まとめ) パターソン & ヘネシー コンピュータの構成と設計 可逆計算 プラレールの加算器 xv6 Jeff Dean伝説 Russ Cox Robert Morris Morris worm MySpace創業者 14歳の時に警察の捜索を受ける John Carmack LLVMとELVMの話 チューリング完全 8cc Cコンパイラ Cプリプロセッサのアルゴリズム 2048
「30日でできる!OS自作入門」を小学5年生で手にして以来行ってきた低レイヤプログラミングについて話を伺いました。出演者: hikalium (@hikalium)、Rui Ueyama (@rui314) https://turingcomplete.fm/8 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) 小学5年生、OS自作入門本に入門する (0:50) アセンブリプログラミング (7:40) OSをフロッピーから起動 (9:45) 32ビットモードからBIOSを呼ぶために仮想86モードを使う (1) (13:25) 紙のIntelソフトウェアデベロッパマニュアル (17:55) 32ビットモードからBIOSを呼ぶために仮想86モードを使う (2) (20:12) CPUの機能でブレイクポイントをセットしてOSをデバグ (24:56) ページングとセグメンテーション (28:07) Virtual PCのバグを発見 (31:30) SourceForgeでマルウェアをインストールしてしまう (38:04) 自作OSを起動するとなにがあるのか (41:52) 大学で自分強すぎ問題 (44:58) RISC-Vプロセッサを使うのはまだ辛い (49:20) 大学のマイコン実験 (55:10) 海外の大学院にいくべきか問題 (1:00:38) Chromeのインターン (1:05:56) 30日でできる!OS自作入門 セルオートマトン ライフゲーム hikalium自作OS VESA BIOS Extensions Intel Software Developer Manuals Intel Software Developer Manualsの印刷版が注文できるサイト RISC-V SiFive 東大のCPU実験で自作コア上の自作OS上で自作シェルを動かした話 GomaのためのCプリプロセッサ Selection.addRange() Rustで書かれたNaglfarブラウザ
仮想マシン上でLinuxを動かすのではなく、システムコールをトラップしてトランスレートすることによりLinuxアプリを他のOSで動かすことのできるNoahについて、ぬるぽへさんから話を伺いました。出演者: ぬるぽへ (@nullpo_head)、Rui Ueyama (@rui314) https://turingcomplete.fm/7 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) TCFMの内容は半分の人が1/4しかわかっていないらしい (1:40) Noahの概要 (3:20) Windows版のNoahとforkの実装など (12:00) Microsoftのクラウドビジネス (25:30) Noahの開発期間 (29:09) LinuxのGUIアプリをX経由でmacOSで動かす (37:05) 端末のシミュレーションとカーネルのサポート (39:38) Fuchsia OS (44:30) GNUユーティリティの書き換え? (50:10) エンディアンとは何か (54:00) macOSアプリをLinuxで動かすmaloader (56:25) Noah経由のシステムコールのオーバーヘッドの小ささ (59:50) オープンソースプロジェクトを宣伝する (1:02:13) lldのソースコードを共有しないデザインについて (1:04:58) Linux KVM、Apple Hypervisor Framework、Intel HAXM (1:10:36) DockerとDocker on macOS/Windowsは中身が全く違う (1:16:12) VM作成のドキュメンテーションのなさについて (1:19:00) C++初心者、Boostを使って共有メモリ上のコンテナを使う (1:24:33) 東大CPU実験と強さのインフレ (1:33:07) Noah Steve Ballmer、iPhoneを笑い飛ばす イノベーションのジレンマ エンディアン Fuchsia maloader Language lawyer CPU実験で自作CPUにUNIXライクOS (xv6) を移植した話 自作CPU向けCコンパイラをつくってOS動かした話(CPU実験まとめ)
Miuraさんと一緒にいろいろなスクリプト言語の実装や言語そのものなどについて話をしました。出演者: Miura Hideki (@miura1729)、Rui Ueyama (@rui314) https://turingcomplete.fm/6 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 LuaとLuaJIT (0:00) 例外のABI (8:25) SQLiteとライセンス (12:45) ファイルシステムとデータベース (16:23) XLISPで言語の書き方を学んだ (19:15) C++の後方互換性とトライグラフ (21:55) Common Lispのメタオブジェクトプロトコル (26:18) Gauche Schemeのコンパイラのブートストラップ (35:40) 川合史郎さんの自作オーブンPC (40:02) ForthとOh! FM (43:00) Sun SPARCStation (50:27) PostScriptとHTML Canvas (53:16) SVGとXML (56:58) Lua SQLite パブリックドメイン XLISP トライグラフ The Art of the Metaobject Protocol Gauche Scheme COME FROM Reflections on Trusting Trust オーブンPC Forth Open Firmware PostScriptチュートリアル & クックブック
mrubyのJITなどを書いているMiuraさんと一緒に、言語処理系の実装や最適化、Rubyの文法の最適化しづらい点などについて話をしました。出演者: Miura Hideki (@miura1729)、Rui Ueyama (@rui314) https://turingcomplete.fm/5 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 本業は水道屋 (0:00) JITにするだけでは速くはならない (5:00) evalと最適化 (10:30) オーバーフローしたfixnumが自動的にbignumやfloatになる仕様について (16:35) mrubyが使われている場所 (24:10) 拡張ライブラリの書きやすさ (31:25) CライブラリからRubyで書かれたコールバックを呼び出す状況の辛さ (33:30) Crystal (38:10) 型推論とプログラムの書きやすさ (40:25) コンパイラにわからない形でevalを使う方法 (50:25) evalの使いどころとread (55:25) callcc (59:47) Ruby Crystal Xbyak
るくすくんの作ったカーネルデバッガやC++ライブラリの移植、C++などの話をしました。出演者: るくす (@RKX1209)、Rui Ueyama (@rui314) https://turingcomplete.fm/4 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 コンパイラやエミュレータを作るためのオススメの本などはありますか? (0:00) るくすくんが未踏で作ったカーネルデバッガ (8:46) C++標準ライブラリを新しい環境に移植する話 (39:35) SPDYやQUIC (58:14) 低レイヤーの歩き方 ビザンチン将軍問題 Gauche Scheme カーネルソフトウェア開発支援ツールの提案 ジョージ・ホッツ comma.ai リード・ソロモン符号 SIPプロトコル