WEBVTT

00:00.980 --> 00:09.290
私があなたと別れたとき、 私たちはPythonからCに変換するためのシンプルなユーザーインターフェイスを作ったばかりだった。

00:09.290 --> 00:11.000
私はこう言った。 

00:11.000 --> 00:15.380
これをちゃんとしたプロトタイプUIにしよう。 

00:15.380 --> 00:22.340
このJupyterノートブックに戻ったら、 もう少しメソッドを書いてみよう。

00:22.340 --> 00:31.100
まず第一に、 このPythonのテイク・コードの実行は、 ここでも同じように少し危険なことをしようとしている。

00:31.130 --> 00:32.510
そのコードを実行する。 

00:32.510 --> 00:35.480
だから今回も、 この特別なプロトタイプは本当にあなたのためだけのものなんだ。 

00:35.480 --> 00:42.200
もしこれを誰かと共有したら、 彼らはあなたのボックス上で直接Pythonコードを実行する方法を手に入れることになるからだ。

00:42.200 --> 00:43.370
それは悪いことだ。 

00:43.370 --> 00:50.270
だから、 このグラディオのアプリでは、 シェアは常に虚偽であるべきなのだ。 

00:50.360 --> 00:53.600
ええと、 でも、 あなたにとっては素晴らしいプロトタイプだよ。 

00:53.960 --> 00:57.170
つまり、 このコードを実行するんだ。 

00:57.170 --> 01:02.600
Pythonのコードから出力される標準出力をキャプチャして、

01:02.600 --> 01:15.030
それを返すことで、 コードを受け取って実行し、 gradioに表示するための出力を返す関数にしたいからだ。

01:15.030 --> 01:17.700
これがパイソンの実行だ。 

01:17.910 --> 01:24.510
そして今度は、 Cプラス・プラス・ウムのコードを実行するための、 少し重いコードだ。 

01:24.510 --> 01:31.260
それで、 最初にすることは、 少し前に書いた関数を呼び出して、 実際に最適化されたファイルに書き出すことだ。

01:31.590 --> 01:39.330
それから、 コンパイルコマンドを実行するんだ。 

01:39.360 --> 01:48.180
私はサブプロセスのドットランというものを使っている。 これは、 何かを実行するためにサブプロセスをスポーンさせる方法だ。

01:48.480 --> 01:49.920
それが僕の仕事なんだ。 

01:49.920 --> 01:53.370
さて、 以前より少し長くなっていることにお気づきだろうか。 

01:53.370 --> 01:59.520
これは、 コードが私のコンピュータに最適化されていることを確認するために、

01:59.520 --> 02:02.430
すべてのフラグを使用するものです。

02:02.430 --> 02:06.750
このようなことを知り尽くしている人たちにとっては、 ほとんど表面をなぞるようなものだ。 

02:06.760 --> 02:11.050
追加できるフラッグは山ほどある。 

02:11.080 --> 02:16.000
しばらくして、 これで十分だと思ったので、 そのためのフラッグをたくさん入れた。 

02:16.150 --> 02:28.720
そして、 最適化されたプログラムを実行し、 標準出力をキャプチャしてそれを返す。

02:28.750 --> 02:30.970
エラーがあれば標準エラーを返す。 

02:31.210 --> 02:38.140
これが、 Cプラス・プラス・コードを実行し、 レスポンスを返す方法である。 

02:38.140 --> 02:41.200
本当はコンパイルして実行した方が正確なんだけどね。 

02:41.470 --> 02:50.440
ここではCSSの文字列を少し使っている。

02:50.440 --> 02:53.740
そして、 これがユーザーインターフェースの範囲であり、 すべてである。 

02:53.740 --> 02:55.240
もうコーディングはしない。 

02:55.240 --> 02:55.990
ただこれだけだ。 

02:55.990 --> 03:02.410
GRブロックを使っていますが、 これはGradioの下位APIで、

03:02.410 --> 03:09.070
ユーザーインターフェースの柔軟性を高めることができます。

03:09.280 --> 03:12.770
自分のCSSを渡すこともできる。 

03:12.800 --> 03:15.140
CSSはこの変数に等しい。 

03:15.320 --> 03:18.740
それで、 もう少しカスタマイズできるんだ。 

03:18.860 --> 03:22.100
このドットマークダウンは、 トップに素敵な見出しをつけてくれる。 

03:22.100 --> 03:26.510
そして、 ウィジェットが1列、 2列、 3列、 4列、 5列と並んでいる。 

03:26.690 --> 03:30.110
あの......PythonのコードとCプラスアルファのコードはわかると思う。 

03:30.110 --> 03:35.000
デフォルト値を円周率コードに設定する前は、 まさにそうだった。 

03:35.510 --> 03:39.800
ええと、 これは前と同じで、 GPTかClaudeを選ぶドロップダウンです。 

03:40.040 --> 03:42.680
コードを変換するボタンだ。 

03:42.680 --> 03:45.050
それからもういくつかボタンがある。 

03:45.050 --> 03:51.770
Pythonの実行はPythonを、 CPの実行はC plus plusを実行する。 

03:51.770 --> 03:58.580
そして、 Pythonの出力CPをCプラスプラス出力のためにPythonのアウトを持っている。 

03:58.610 --> 04:03.650
もしそうでなければ、 ユーザーインターフェイスをご覧になれば、 すべてが明らかになるでしょう。

04:03.650 --> 04:07.580
そして、 これを振り返って、 ワオ、 これはとてもシンプルだと言うだろう。 

04:08.000 --> 04:13.000
変換、 Python実行、 Cプラスプラス実行の3つのボタンがあります。 

04:13.000 --> 04:16.600
では、 この3つのボタンのどれかをクリックしたらどうなるのか?

04:16.630 --> 04:19.120
変換ボタンを押しても以前と同じだ。 

04:19.120 --> 04:25.810
optimizeメソッド関数を実行し、 入力、 Pythonコード、 モデルを渡す。 

04:25.840 --> 04:30.640
出力はC++のコードになるので、 変換を押すとPythonのコードが出力される。 

04:30.640 --> 04:35.290
モデルを使って変換し、 それをCプラスプラスに入れる。 

04:35.500 --> 04:42.910
Pythonの実行ボタンを押すと、 PythonコードをPythonに出力してPythonを実行する。

04:42.940 --> 04:49.270
Cプラスプラス実行を押すと、 Cプラスプラスの入力でCプラスプラスのコードが実行される。 

04:49.300 --> 04:51.310
Cプラスプラス出力。 

04:51.610 --> 04:53.140
それだけだ。 

04:53.170 --> 05:00.850
もしそれが、 あー、 たくさんのスパゲッティみたいなものに聞こえたとしたら、 それは、 きれいに解けて、

05:00.880 --> 05:04.510
これから見るものを見れば超明確になる。

05:04.780 --> 05:06.520
ええと、 これを実行しよう。 

05:06.550 --> 05:08.470
これがユーザー・インターフェースだ。 

05:08.470 --> 05:11.080
よりカラフルなユーザーインターフェースへようこそ。 

05:11.290 --> 05:14.830
ここにはPythonのコードとC++のコードがある。 

05:14.830 --> 05:20.600
そして、 モデル変換コードを選択し、 Pythonを実行し、 Cプラスプラスを実行することができる。 

05:20.600 --> 05:22.100
では、 始めよう。 

05:22.100 --> 05:25.640
ここでPythonの実行を押して、 このコードを実行することができる。 

05:25.790 --> 05:28.520
このユーザー・インターフェイスから。 

05:28.550 --> 05:31.460
今まさにそのメソッドを呼び出している。 

05:31.460 --> 05:33.530
その結果がここにある。 

05:33.680 --> 05:35.060
あ、 あった。 

05:35.210 --> 05:37.640
確かに円周率はある。 

05:37.640 --> 05:39.890
そして8人かかった。  4秒。 

05:40.070 --> 05:45.950
そして、 Cプラスに変換する。 

05:45.950 --> 05:46.670
それに

05:46.820 --> 05:47.930
これだ。 

05:47.960 --> 05:50.930
そして、 Cプラスプラスを走らせることができるようになった。 

05:51.800 --> 05:55.550
これでCプラス・プラスだ。 

05:55.550 --> 06:00.890
私の記憶が正しければ、 約0だった以前よりかなり速くなっているのがわかるだろう。  2秒。 

06:00.920 --> 06:08.090
それは、 このコードを最適化するための追加フラグがあるからなんだ。 

06:08.120 --> 06:15.410
それで、 2つの実装の間で100倍以上速くなったことがわかるだろう。 

06:15.410 --> 06:24.270
そして、 ループするような数学的なコードでは、 通常、 C+++のネイティブ・コンパイルの方が、

06:24.300 --> 06:30.450
少なくとも100倍は速くなると予想される。

06:30.450 --> 06:33.690
だから、 それほど驚くような結果ではないが、 良い結果だ。 

06:33.960 --> 06:41.550
ええと、 もちろん、 数字は、 ええと、 ほんの少しずれているんだけど、 それはたぶん、 浮動小数点の丸め方のせいだと思う。

06:41.550 --> 06:43.980
クロードの様子を見て、 確認しよう。 

06:46.830 --> 06:50.460
そして、 クロードのCプラスプラスのコードを実行してみよう。 

06:50.760 --> 06:53.520
もちろん、 とてもよく似ている。 

06:53.520 --> 06:58.350
同じ番号、 同じように超高速。 

06:58.500 --> 07:07.260
その結果、 非常によく似た......C+++のコードが生成され、 それが同じマシンコードにコンパイルされているのだと思う。

07:07.530 --> 07:08.400
分かった。 

07:08.400 --> 07:14.850
もう1つ、 次のビデオに移ってから、 ここを通してハードな問題に取り組むことになる。 

07:14.850 --> 07:17.730
ええと、 それで今日は終わりにしよう。 

07:17.730 --> 07:19.620
僕と同じように楽しんでもらえたら嬉しい。 

07:19.650 --> 07:21.780
これは素晴らしい小さな製品だ。 

07:21.810 --> 07:22.770
すぐに会おう。