git, cvs
Table of Contents
git
ちょっとお遊びでgitしてみる。ユニマガのムック本を見ていたら、5.1時代の ソースを題材にした解説が出てたからだ。21年前のソースだ。 FreeBSD version history
ob$ du -sh freebsd-src/ 4.7G freebsd-src/ ob$ du -sh openbsd-src/ 3.1G openbsd-src/
git cloneには随分と時間がかかる(各々1時間半ぐらいだったか)けど、一度やっておけば、後は楽勝。
FreeBSDの場合、上記サイズの内3G程が、過去を再現する為の記録に当てられ ていた。
git pull
cloneしてからの現在までの差分は、git pullで取得できる。その時のメッセージにどん な意味が込められているか知らないので、聞いてみた。
Q: あなたはgitの創始者リーナス・トーバルズさんです。 git pullした時のメッセージ行の意味を、数字を含めて、どんな意味が 有るか、行毎に説明してください。
ob$ git pull remote: Enumerating objects: 1055, done. remote: Counting objects: 100% (1043/1043), done. remote: Compressing objects: 100% (471/471), done. remote: Total 1055 (delta 628), reused 903 (delta 566), pack-reused 12 (from 1) Receiving objects: 100% (1055/1055), 4.63 MiB | 2.49 MiB/s, done. Resolving deltas: 100% (629/629), completed with 47 local objects. From https://github.com/freebsd/freebsd-src 6e7581236ed7..41e016289f77 main -> origin/main 700ff8f05f08..faf94e22a3da releng/13.4 -> origin/releng/13.4 f20a1805f7da..e95ffda78ac0 stable/13 -> origin/stable/13 244118026550..455dc6ffa843 stable/14 -> origin/stable/14 Updating 6e7581236ed7..41e016289f77 Updating files: 100% (158/158), done. Fast-forward cddl/usr.sbin/zfsd/tests/zfsd_unittest.cc | 3 + contrib/bc/Makefile.in | 10 +- : rename sys/{arm64 => dev}/vmm/vmm_stat.c (77%) create mode 100644 sys/dev/vmm/vmm_stat.h
A: 以下は、`git pull`コマンドの出力メッセージ行の意味を説明したものです。
- `remote: Enumerating objects: 1055, done.`
- リモートリポジトリから取得するオブジェクト(コミット、ツリー、ブロブなど)の総数をカウントしています。この場合、1055個のオブジェクトがリストアップされました。
- `remote: Counting objects: 100% (1043/1043), done.`
- リモートリポジトリで実際にカウントされたオブジェクトの数が1043個で、全てカウントが完了したことを示します。
- `remote: Compressing objects: 100% (471/471), done.`
- 転送されるオブジェクトが圧縮されます。ここでは471個のオブジェクトが圧縮され、すべての圧縮が完了しました。
- `remote: Total 1055 (delta 628), reused 903 (delta 566), pack-reused 12 (from 1)`
- リモートリポジトリから転送されるオブジェクトの総数が1055個で、そのうちの628個がデルタ(差分)オブジェクトです。903個のオブジェクトは再利用され、12個のオブジェクトが再パックされました。
- `Receiving objects: 100% (1055/1055), 4.63 MiB | 2.49 MiB/s, done.`
- ローカルマシンで1055個のオブジェクトが受信され、4.63 MiBのデータが2.49 MiB/sの速度で転送されました。
- `Resolving deltas: 100% (629/629), completed with 47 local objects.`
- 受信したデルタオブジェクトを解決しています。629個のデルタがすべて解決され、その過程で47個のローカルオブジェクトが使用されました。
- `From https://github.com/freebsd/freebsd-src`
- データが取得されたリポジトリのURLを示しています。
- `6e7581236ed7..41e016289f77 main -> origin/main`
- リモートの`origin/main`ブランチが、ローカルの`main`ブランチに更新されたことを示しています。更新前のコミットハッシュが`6e7581236ed7`で、更新後のコミットハッシュが`41e016289f77`です。
- `700ff8f05f08..faf94e22a3da releng/13.4 -> origin/releng/13.4`
- `releng/13.4`ブランチに対する同様の更新を示しています。
- `f20a1805f7da..e95ffda78ac0 stable/13 -> origin/stable/13`
- `stable/13`ブランチに対する同様の更新を示しています。
- `244118026550..455dc6ffa843 stable/14 -> origin/stable/14`
- `stable/14`ブランチに対する同様の更新を示しています。
- `Updating 6e7581236ed7..41e016289f77`
- `main`ブランチの更新が実行中であることを示しています。
- `Updating files: 100% (158/158), done.`
- 更新するファイルが158個あり、その全てが更新されたことを示します。
- `Fast-forward`
- マージが「ファストフォワード」で行われ、単純にポインタが進んだことを示します。
- `cddl/usr.sbin/zfsd/tests/zfsdunittest.cc | 3 +`
- このファイルでは3行が追加されたことを示しています。
- `contrib/bc/Makefile.in | 10 -`
- このファイルでは10行が削除されたことを示しています。
- `rename sys/{arm64 => dev}/vmm/vmmstat.c (77%)`
- ファイル`vmmstat.c`が`sys/arm64`から`sys/dev`にリネームされ、77%の内容が変更されたことを示します。
- `create mode 100644 sys/dev/vmm/vmmstat.h`
- 新しいファイル`vmmstat.h`が作成されたことを示しています。このファイルのパーミッションは`100644`です。
git はタイムマシン
いよいよ過去に遡ってみる。色々と疑問が有ったので、これまた聞いてみた。 gitは糞のようにサブコマンドが存在するので、聞いてしまうのが得策だ。昔 から言うじゃないですか、聞くは一時の恥、聞かぬは末代の恥 って。
Q: git pullした後に、git tagを確認。release/5.1.0が打たれた時の ソースツリーを確認したいです。どうしたら良いですか?
ob$ git tag release/1.0.0_cvs release/1.1.0_cvs : release/5.1.0 release/5.1.0_cvs
A: `git`を使って特定のタグ(この場合は`release/5.1.0`)が打たれたときのソースツリーを確認するには、以下の手順を実行します。
タグが指しているコミットをチェックアウト: まず、`release/5.1.0`タグが指しているコミットに移動します。
git checkout release/5.1.0
これにより、そのタグが指している特定のコミットにワークツリーが変更されます。
- ソースコードを確認: チェックアウト後、ワークツリーには`release/5.1.0`タグが打たれた時点のソースコードが表示されます。ここで、ファイルやディレクトリの内容を確認できます。
作業が終わったら、元のブランチに戻る: 作業が終わったら、元のブランチに戻りたい場合は、次のコマンドを実行します。
git checkout <元のブランチ名>
例えば、元のブランチが`main`であった場合:
git checkout main
これで、`release/5.1.0`タグが打たれた時のソースツリーを確認することが できます。
Q: 元のブランチ名は、どのようなコマンドで確認できますか?
A: 現在作業中のブランチ名を確認するには、以下のコマンドを使用します。
git branch
このコマンドを実行すると、現在のリポジトリ内のすべてのブランチが一覧表示され、現在チェックアウトされているブランチには `*` が付きます。
例えば、以下のように表示されます:
* main feature/new-feature release/5.1.0
この場合、`main` ブランチが現在のブランチであることがわかります。
または、次のようなコマンドを使っても現在のブランチ名だけを表示することができます:
git rev-parse –abbrev-ref HEAD
このコマンドは現在のブランチ名のみを表示します。
Q: release/5.1.0中のソースを誤って変更してしまいました。そのまま、現代 のmainに戻ってしまって大丈夫ですか?タイムマシンで過去を変更してはなら ないと言う厳しい掟があると思うのですが。。。
A: ご心配はもっともですが、Gitの仕組みを理解すると安心できます。Gitでは、特定のブランチやタグをチェックアウトして作業する場合、その作業内容は現在のブランチや他のブランチに自動的に反映されることはありません。
もし、`release/5.1.0`タグをチェックアウトした状態で誤ってソースコードを変更してしまった場合でも、次のポイントに気をつければ問題はありません:
### 1. 変更をコミットしていない場合: 変更をコミットしていなければ、`git checkout main` で元のブランチに戻ると、`release/5.1.0`での変更はリセットされます。つまり、`release/5.1.0`の状態が無視され、元のブランチ(`main`など)には何の影響もありません。
### 2. 変更をコミットしてしまった場合: 誤って変更をコミットしてしまった場合でも、タグを元の状態に戻すことが可能です。例えば、次のようにして直前のコミットを取り消せます:
git reset –hard HEAD^
これにより、変更を取り消してタグの元の状態に戻すことができます。
### 3. 現在のブランチに戻る: `git checkout main` で元のブランチに戻っても、`release/5.1.0`タグが指しているコミットには影響しません。タグは特定のコミットを指す「ラベル」にすぎないため、その指す内容が勝手に変わることはありません。
### 4. 変更が必要なら: もし`release/5.1.0`の状態を変えたくない場合、変更をコミットせず、ブランチを切り替えれば問題ありません。変更をリセットしたい場合は、次のコマンドで取り消せます:
git reset –hard
### まとめ: 誤って変更してしまった場合も、`main`ブランチに戻ること自体に問題はありません。ただし、変更をコミットする前に戻るか、変更をリセットすることをお勧めします。これにより、`release/5.1.0`タグに誤った変更が反映されるのを防ぐことができます。
タイムマシンの掟はGitの中では比較的柔軟ですので、安心して元のブランチ に戻ってください。
Q: 古い時代release/5.1.0に滞在してる時、git pull してしまいました。こ の場合は、未来からコードが侵入してくるのでしょうか?
A: 古い時代である `release/5.1.0` に滞在している間に `git pull` を実行すると、少しややこしい状況になりますが、未来からコードが「侵入」するような動きは一部あります。ただし、これによってタグが指すコミット自体が変わるわけではありません。以下の動作が考えられます。
### 1. `git pull` の動作 `git pull` は通常、以下の2つのコマンドを連続して実行するものです:
- `git fetch`: リモートリポジトリから最新の変更(コミット)をローカルに取り込みます。
- `git merge`: その変更を現在のブランチにマージします。
### 2. タグをチェックアウトした状態での `git pull`
- `release/5.1.0` のようなタグをチェックアウトした状態で `git pull` を実行すると、`git fetch` が行われ、リモートリポジトリの最新の情報がローカルリポジトリに取り込まれます。
- しかし、タグをチェックアウトしている状態では `git merge` は行われません。なぜなら、タグは特定のコミットを指しており、通常のブランチのようにマージができないためです。
したがって、**未来からのコードが「侵入」することはありません**。タグをチェックアウトしている状態では、コードの変更がその状態にマージされることはなく、現在のワークツリーの状態が変わることもありません。
### 3. 影響を受けるケース 唯一影響を受ける可能性があるのは、`git fetch` の後に新しいブランチや変更を確認できる点です。`git pull` ではなく `git fetch` を使うことで、リモートの最新情報を確認しつつ、現在の状態を変更せずに済むこともできます。
### まとめ `release/5.1.0` のタグをチェックアウトした状態で `git pull` を実行しても、未来のコードが侵入してくることはありません。ただし、リモートリポジトリの最新情報がローカルに取り込まれる点に注意し、必要に応じて適切な操作を行うと良いでしょう。
もしタグの状態をそのまま保ちたい場合、`git pull` の代わりに `git fetch` を使うのが安全です。
git for FreeBSD
ちょっと昔に戻ってみた。
ob$ git checkout release/5.1.0 Updating files: 100% (118451/118451), done. Note: switching to 'release/5.1.0'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. Example: git switch -c <new-branch-name> Or undo this operation with: git switch - Turn off this advice by setting config variable advice.detachedHead to false HEAD is now at 196dcb487d15 Don't use MUTEX_NOINLINE for pc98 floppies. It's un clear why this prevents the panic that has been reported, but it also allows pc9 8 to go out the door. ob$ git branch * (HEAD detached at release/5.1.0) main
そして、現代に復帰。
ob$ time git checkout main Updating files: 100% (118451/118451), done. Previous HEAD position was 196dcb487d15 Don't use MUTEX_NOINLINE for pc98 floppies. It's unclear why this prevents the panic that has been reported, but it also allows pc98 to go out the door. Switched to branch 'main' Your branch is up to date with 'origin/main'. 4m36.53s real 0m16.96s user 0m18.82s system
git for OpenBSD
git tagでリリースが管理されていない。ブランチもmasterだけしか無い。 これってセキュリティーと安定性に責任を持つため、常に最新のバージョンを 利用してくださいって、強い意向の反映なんだろうね。
諦めて、始祖がどうなってたか確認。
ob$ git log | tail Author: deraadt <deraadt@openbsd.org> Date: Wed Oct 18 10:39:06 1995 +0000 initial import of pica stuff (a few theo modifications already in here) commit df930be708d50e9715f173caa26ffe1b7599b157 Author: deraadt <deraadt@openbsd.org> Date: Wed Oct 18 08:37:01 1995 +0000 initial import of NetBSD tree
NetBSDから袂を分てOpenBSDが誕生したとな。
こちらで、答え合わせ。 OpenBSD version history
FAQ - Building the System from Source
これを見ると、ソース管理の主体は、cvsシステムなんだな。gitは信用できま せんと言う事か。
Anonymous CVS
やってみるか。
ob$ cd /var/SRC/ cvs -qd anoncvs@anoncvs.au.openbsd.org:/cvs checkout -P src ob$ du -sh src/ 1.9G src/
1時間ぐらいかかった。gitの時よりも速い。ひょっとして、履歴をDLしてない のかか? 上記URLの案内では、srcは3.9Gぐらいだよと説明されてるし。。
cvsup='cd /var/SRC/src; cvs -q up -Pd -A'
こんなエイリアスを登録。なんかFreeBSDには、ズバリなコマンドが有ったよ うな。
ob$ cvsup P distrib/sets/lists/comp/mi P etc/MAKEDEV.common P etc/etc.amd64/MAKEDEV P etc/etc.amd64/MAKEDEV.md : P sys/dev/ic/ccpvar.h U sys/dev/ic/psp.c U sys/dev/ic/pspvar.h P sys/dev/pci/ccp_pci.c
1日経過してからアップデート。gitと違って完了まで、随分と時間がかかる。 リナスは、これに嫌気がさしてgitを発明したんだな。
U file The file has been brought up to date with respect to the repository. This is done for any file that exists in the repository but not in your source, and for files that you haven't changed but are not the most recent versions available in the repository. P file As `U', but instead of transferring the entire file a patch containing the required changes were sent.
ファイルの冒頭に付いているフラグには、こんな意味が有るのね。cvsのマニュ アルは長大で眺めるのが大変です。
ask Google Gemini
こういう一般向けの本が出版されるって事は、パパもママもおじいちゃんにお ばあちゃんも普通に使う時代が到来したんだね。
空行は、SHIFT+Returnしてください。意味のあるブロックは、python宜しく、 """ hoge """ として、しっかり伝わるようにしましょうって、知恵を披露し てたぞ。知らなかった。普段はChatGPTだからね。
Q: OpenBSDのcvsコマンドについて質問します。 打たれているタグを確認するには、どうすれば良いですか?
A: ## OpenBSDのcvsコマンドでタグを確認する方法
OpenBSDのcvsコマンドで打たれているタグを確認するには、いくつかの方法があります。
### 1. 特定のファイルのタグ履歴を確認する
cvs log -r : filename
- `-r :` オプションは、すべてのリビジョン(タグを含む)を表示するという意味です。
- `filename` には、確認したいファイル名を指定します。
このコマンドを実行すると、指定したファイルのすべての変更履歴が表示されます。各変更履歴には、タグ名が記載されているので、どのタグが打たれているか確認できます。
### 2. 特定のディレクトリ内のすべてのファイルのタグ履歴を確認する
cvs log -r : .
- `.` は、現在のディレクトリを表します。
- このコマンドを実行すると、現在のディレクトリ内のすべてのファイルの変更履歴が表示されます。
### 3. 特定のタグに関連付けられたファイルの一覧を表示する
cvs tag -v tagname
- `-v` オプションは、詳細な情報を表示するという意味です。
- `tagname` には、確認したいタグ名を指定します。
このコマンドを実行すると、指定したタグに関連付けられたすべてのファイルの一覧が表示されます。
### 4. すべてのタグの一覧を表示する
cvs tags
このコマンドを実行すると、リポジトリ内のすべてのタグの一覧が表示されます。
### 5. 特定のタグの情報を表示する
cvs rlog -r tagname
- `-r` オプションは、特定のリビジョン(タグ)の情報を表示するという意味です。
- `tagname` には、確認したいタグ名を指定します。
このコマンドを実行すると、指定したタグの作成日時や作成者などの詳細な情報が表示されます。
### その他
特定の範囲のタグを表示する:
cvs rlog -r tag1:tag2
- `tag1` と `tag2` の間のタグの一覧が表示されます。
正規表現を使った検索:
cvs log -r : -n 'pattern' filename
- `-n 'pattern'` オプションで、変更コメントに含まれるパターンを検索できます。
### 注意点
- cvsは古いバージョン管理システムであり、より新しいGitなどのシステムに置き換えられることが推奨されています。
- 上記のコマンドは基本的な使い方であり、より複雑な操作を行う場合は、cvsのマニュアルを参照してください。
どのような状況でcvsのタグを確認したいのか、もう少し詳しく教えていただけますか?
Q: currentを用意したのですが、昔の(例えば、Release 5.0)状態に戻って、 確認したいのです。
A: ## OpenBSDのcvsで過去の状態に戻して確認する方法
OpenBSDのcvsで、現在の状態から過去の(例えば、Release 5.0)の状態に戻して確認したいとのことですね。
### 1. 過去のタグを確認する まず、Release 5.0に対応するタグが本当に存在するのかを確認します。
cvs tags
このコマンドを実行すると、リポジトリ内のすべてのタグの一覧が表示されます。Release 5.0に対応するタグ名を探し、存在することを確認してください。
### 2. 特定のファイルまたはディレクトリを過去の状態に戻す 目的のタグが見つかったら、以下のコマンドで特定のファイルまたはディレクトリを過去の状態に戻すことができます。
cvs update -r tagname filename
- `tagname`: 復元したいタグ名
- `filename`: 復元したいファイル名
例:
cvs update -r Release5.0 src/main.c
このコマンドを実行すると、`src/main.c` ファイルがRelease 5.0の状態に更新されます。
ディレクトリ全体を更新する場合は:
cvs update -r tagname .
`.`は現在のディレクトリを表します。
### 3. ワークスペース全体を過去の状態に戻す ワークスペース全体を過去の状態に戻したい場合は、以下のコマンドを使用できますが、**注意が必要です**。
cvs update -P -r tagname
- `-P`: パッチファイルを削除するオプション。
- このコマンドを実行すると、ワークスペース内のすべてのファイルがタグ `tagname` の状態に更新されます。
注意:
- 上書きの可能性: このコマンドを実行すると、現在の作業中の変更がすべて失われる可能性があります。実行する前に必ずバックアップを取っておくことを強くおすすめします。
- 競合の可能性: 他のユーザーが同じファイルに変更を加えている場合、競合が発生する可能性があります。競合が発生した場合は、手動で解決する必要があります。
### 4. 確認 過去の状態に戻した後、ファイルの内容やディレクトリ構造を確認します。
cat filename
または、お好みのエディタでファイルを開いて確認してください。
### その他の注意点
- タグ名の確認: タグ名はリポジトリによって異なるため、正確なタグ名を事前に確認する必要があります。
- ブランチ: cvsではブランチを使用することもできます。ブランチを切り替えて過去の状態を確認することも可能です。
- cvsのバージョン: cvsのバージョンによっては、上記のコマンドの動作が異なる場合があります。
### まとめ cvsで過去の状態に戻すには、まず目的のタグを確認し、`cvs update`コマンドを使ってファイルを更新します。ワークスペース全体を更新する場合は、`-P`オプションを使用できますが、注意が必要です。
重要な注意点:
- バックアップ: 操作前に必ずバックアップを取ってください。
- 競合: 他のユーザーとの競合に注意してください。
- cvsのバージョン: 使用しているcvsのバージョンを確認してください。
Q: 過去の状態からcurrentに戻るには、どうしたらよいですか?
A: ## 過去の状態から現在の状態に戻す方法
cvsで過去の状態から現在の状態に戻すには、いくつかの方法が考えられます。
### 1. 最新の変更を再度適用する
- 最も一般的な方法: 過去の状態に戻した後に、最新の変更を再度適用することで、現在の状態に戻すことができます。
- 方法:
- 現在の作業コピーをバックアップ: 万が一に備えて、現在の作業コピーを別の場所にバックアップしておきましょう。
最新の変更を反映:
cvs update
このコマンドを実行すると、ローカルの作業コピーがリポジトリの最新の状態に更新されます。
### 2. 特定の変更を元に戻す(部分的な復元)
- 部分的な復元: 特定の変更だけを元に戻したい場合に有効です。
- 方法:
変更履歴を確認:
cvs log filename
このコマンドで、ファイルの変更履歴を確認し、元に戻したい変更のレビジョン番号を特定します。
特定のレビジョンに戻す:
cvs update -r revisionnumber filename
`revisionnumber` には、元に戻したい変更のレビジョン番号を指定します。
### 3. タグを切り替える(タグが存在する場合)
- タグを利用する場合: 現在の状態がタグで管理されている場合、タグを切り替えることで簡単に状態を復元できます。
方法:
cvs update -r tagname
`tagname` には、現在の状態を表すタグ名を指定します。
注意点:
- 競合: 他のユーザーが同じファイルに変更を加えている場合、競合が発生する可能性があります。競合が発生した場合は、手動で解決する必要があります。
- 失われた変更: 一度削除したファイルや変更は、通常復元できません。
- バックアップ: 操作前に必ずバックアップを取っておくことを強くおすすめします。
その他:
- cvs update -P: このオプションを使用すると、パッチファイルを削除できますが、慎重に使用する必要があります。
- cvs log: このコマンドで、変更履歴の詳細を確認できます。
- cvs diff: このコマンドで、変更内容を比較できます。
どの方法を選ぶかは、以下の状況によって異なります。
- どの程度過去の状態に戻したいか: 全ての変更を元に戻したいのか、一部の変更だけ元に戻したいのか。
- どのくらいの期間の変更を元に戻したいか: 最近の変更だけ元に戻したいのか、古い変更も元に戻したいのか。
- どのファイルを変更したいか: 特定のファイルだけを変更したいのか、全てのファイルを変更したいのか。
ご自身の状況に合わせて、最適な方法を選択してください。
もし、さらに詳しい情報が必要な場合は、お気軽にご質問ください。
- 具体的にどのような状況で過去の状態に戻したいのか教えていただけますか?
- どのくらいの期間前の状態に戻したいのか教えていただけますか?
- どのファイルを変更したいのか教えていただけますか?
これらの情報があれば、より具体的なアドバイスをすることができます。
cvsコマンドなんて古すぎるとググルは言うけど、それってリナの世界制覇に 加担してないか。そんな事はどうでもいいけど、cvs tagsなんて事は出来ない のね。一気呵成に古いリリースに戻る事は、親分の意向に反する事になるんだ な。
ob$ pwd /var/SRC/src/sys/arch/i386 ob$ cvs log -r : Makefile RCS file: /cvs/src/sys/arch/i386/Makefile,v Working file: Makefile head: 1.23 branch: locks: strict access list: symbolic names: OPENBSD_7_5: 1.23.0.30 OPENBSD_7_5_BASE: 1.23 : OPENBSD_2_0_BASE: 1.4 netbsd_1_1: 1.1.1.1 keyword substitution: kv total revisions: 28; selected revisions: 1 description: ---------------------------- revision 1.23 date: 2017/01/22 03:27:31; author: tb; state: Exp; lines: +7 -2; commitid: 7xfCYX9g3lREuZZf; Introduce the KEEPKERNELS variable: if this is set either in mk.conf or the environment, 'make cleandir' does not descend into kernel build directories. Thus, kernel object files survive 'make build' on slower architectures. WARNING: If you set this variable, you run the risk of breaking 'make release': Be sure to run 'make cleandir' from /sys/arch/$(machine)/compile before doing 'make release'. This issue will be addressed shortly. requested by kettenis; ok deraadt =============================================================================
この表示は、サーバーに問い合わせしたものだろうか? ソースツリーには、 無いっぽい。そんなのソース嫁。それはさておき、国内にもサーバーが設置さ れていた。感謝しつつ、長崎の出島を参照しよう。江戸時代と笑うなよ。 国外交流の接点だからね。
anoncvs@anoncvs.jp.openbsd.org:/cvs
TODO
geminiの返答をそのまま、emacsのorg-modeに貼り付けると、フォーマットが 崩れて面倒な事になる。んだから、これから確認したい質問を列挙しておく。
Q: ハート形や四葉のクローバーを、pythonのmatplotlibを使って表示してく ださい。
Q: 三陸のリアス式海岸を表現する数式を立ててください。そしてそれを pythonで実行してグラフを表示して。
Q: piは 連分数 で表現出来るそうです。その式を提示してください。更に、そ れをrubyで実行して、結果を表示して。
Q: そのrubyのコードをschemeの一方言であるguile用に変換してください。
まだまだ有るけど、とりあえずコンクライにしておく。
尚、コードを貼り付ける事を考えると、書式にうるさいpythonよりも、rubyと かの方が適切と思うぞ。