
講義ページ
https://lsnl.jp/l/netcompx
講義ページ (複数ページ版 (モバイル端末向け))
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/toc.html
[授業開始時に提出] 出席確認フォーム (パスワードが必要です)
https://lsnl.jp/app/lecture/attend/show/netcompx
[授業中に使用] クリッカー (パスワードが必要です)
https://lsnl.jp/app/lecture/clicker/show/netcompx
[授業中・授業後に提出] リフレクションシート (パスワードが必要です)
https://lsnl.jp/app/lecture/refl/show/netcompx
[自習後に提出] レポート送信フォーム (パスワードが必要です)
https://lsnl.jp/app/lecture/report/show/netcompx
講義ビデオ (パスワードが必要です)
https://lsnl.jp/video/netcompx/2025/
連絡用メイリングリスト (教員 + TA に届きます)
netcompx-staff[atmark]lsnl.jp
本文には、必ず学生番号・氏名・メールアドレス (@kwansei.ac.jp のもの) を明記してください。
大崎 博之
関西学院大学 工学部 情報工学課程
E-mail: netcompx-staff[atmark]lsnl.jp
椎名 智 M2 (大崎研)
野中 泰喜 M1 (大崎研)
E-mail: netcompx-staff[atmark]lsnl.jp
Q1. インターネットを使えば、 メールしたり、 会話したり、 買物したり、 何でもできるのではないだろうか? 今のインターネットにできないことはあるだろうか? もしあるとすれはそれは何だろうか? できない理由は何だろうか?
Q2. 今、 ネットワーク研究の最先端では、 どんなネットワークが研究されているのだろうか? 新しいネットワークとはどのようなものだろうか? そのしくみはどうなっているのだろうか?
Q3. 新しいネットワークや、 その上でのネットワークサービスは、 どうやって生まれているのだろうか? 誰が、 どういう方法で生み出しているのだろうか? ハードウェア (端末、 デバイス) やソフトウェア (通信プロトコル、 アプリケーション) を毎回試作するのだろうか?
Q4. 新しいネットワークの研究に私も参加できるだろうか? 参加するためにはどんな知識や技術が必要だろうか? これまでに理工学部で学んだ内容は役に立つのだろうか? 中学や高校で学んだ基礎は役に立たないだろうか?
Q5. コンピュータシミュレーションとは何だろうか? どういうしくみで動くのだろうか? コンピュータシミュレーションで何がわかるのだろうか? また何がわからないのだろうか? それはなぜだろうか?
講義目的: クラウドコンピューティング、 新しいネットワークアーキテクチャ、 新しいネットワークサービスなど、 ネットワーキングとコンピューティングの融合によって実現される「ネットワークコンピューティング」の基礎を、 実習によって深く理解する。
到達目標: 簡単なネットワークコンピューティング環境を構築、 実装、 テストできるようになる。
講義およびコンピュータを用いた演習
平常レポート
2025/ 9/24 Debian GNU/Linux セットアップ
2025/10/ 1 UNIX (UNIX とは、ユーザ権限、パッケージ管理)
2025/10/ 8 Debian GNU/Linux セットアップ〜パッケージ管理
2025/10/15 シェル (ファイル操作、リダイレクト、パイプ)
2025/10/22 X ウィンドウシステム & ウィンドウマネージャ
2025/10/29 エディタ (Emacs チュートリアル)
2025/11/ 5 シミュレータ導入 (インストール、実行、可視化)
2025/11/12 Python 言語 (1) (名前、変数、式)
2025/11/19 Python 言語 (2) (文、スコープ、サブルーチン)
2025/11/26 Python 言語 (3) (オブジェクト指向プログラミング)
2025/12/ 3 シミュレータ解説 (1) (概要、エージェント)
2025/12/10 シミュレータ解説 (2) (モビリティ、可視化)
2025/12/17 ソフトウェア設計・実装 (1)
2025/ 1/ 7 ソフトウェア設計・実装 (2)
注意事項、 教育方針、 学習のポイント、 病欠/公欠の時に何をすればよいか等を説明しています。
大崎が担当する科目に共通の連絡事項・アドバイス
https://lsnl.jp/~ohsaki/lecture/
1. 解説 (20 分)
2. 実習 (70 分)
3. リフレクションシート記入 (10 分)
- いろいろな人とチームになる
- チームの人数は自由に決めてよい
- しゃべる
- 質問する
- 説明する
- 動く (立ち歩く)
- チームで協力する
- チームに貢献する
- VM 上に Debian GNU/Linux (trxie) (amd64/aarch64) をクリーンインストールできるようになる。
- CapsLock キーを Ctrl キーに割り当てられるようになる。
- コンソールのフォントを好みのものに変更できるようになる。
- ゲスト OS から自宅および大学の無線 LAN に接続できるようになる。
自身の PC に VirtualBox をインストールし、 ゲスト OS として Debian GNU/Linux (trixie) (amd64/aarch64) をクリーンインストールせよ。
デスクトップ環境 (GNOME、KDE 等)は「なし」でインストールせよ。 GUI やポインティングデバイスを使用せず、コンソールで一通りの操作を行え。
CapsLock キーを Ctrl キーに割り当てよ。
コンソールのフォントを好みのものに変更せよ。
大学の無線 LAN に接続せよ。
- ハイパーバイザには Oracle Virtual Box を推奨するが、こだわりがあるなら他の仮想化環境を使ってもよい。
Virtual Box
https://www.virtualbox.org/
バージョン 7.1 から macOS/Arm もサポートされている。
- Debian GNU/Linux の リリースは trixie、アーキテクチャは amd64 または aarch64 (ホスト OS の CPU に合わせて選択する) を使う。
Debian “trixie” Release Information
https://www.debian.org/releases/stable/
amd64 は「IA-32 アーキテクチャの 64 ビット拡張」を意味する。
macOS/Arm では aarch64 (64 ビット ARM) を使う。
- インストーラの ISO イメージは以下を使うとよい。
debian-13.1.0-amd64-netinst.iso
http://ftp.nara.wide.ad.jp/debian-cd/current/amd64/iso-cd/
debian-13.1.0-arm64-netinst.iso
http://ftp.nara.wide.ad.jp/debian-cd/current/arm64/iso-cd/
- キーボードの設定は /etc/default/keyboard ファイルに書く。
> diff -u /etc/default/keyboard.orig /etc/default/keyboard
--- /etc/default/keyboard.orig 2021-04-01 23:42:54.942990648 +0900
+++ /etc/default/keyboard 2021-07-25 06:38:43.408057698 +0900
@@ -5,6 +5,6 @@
XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
-XKBOPTIONS=""
+XKBOPTIONS="ctrl:nocaps"
BACKSPACE="guess"
- テキストエディタは (他のエディタに慣れるまでは) nano を使うのが簡単。
- フォントの設定は /etc/default/console-setup ファイルに書く。
- コンソール用のフォントは /usr/share/consolefonts ディレクトリに格納されている。
- コンソールはそのままでは ISO-8859-1 しか表示できない (日本語は表示できない) ことに注意。
実習終了後に自習を行い、 到達目標まで到達せよ。 疑問に思った点、 わからない点は各自で信頼できる文献を用いて調査せよ。
その後、「今週の作業内容」、 「『内容目標』をどの程度達成できた/できなかったか」、 「質問・要望・コメント」、 「感想」を「ネットワークコンピューティング実習」レポート送信フォームから送信せよ。
提出方法: 「レポート課題提出フォーム」から送信せよ。 レポートが正しく提出されると、レポートの控えが自身のメールアドレス宛に送信される。 レポートの控えは成績発表まで保存しておくこと。 レポートが再提出された場合は、 新しいほうを採点対象とする。
提出期限: 次回の授業開始の 48 時間前とする (例えば、 9/24(水) の課題であれば、 10/1(水) 9:00am の 48 時間前である 9/29(月) 9:00am)。 期限を過ぎたものは受理しない。
注意事項: 「質問・要望・コメント」は匿名にした上で公開する (講義ページに掲載する)。 公開されて困る内容は「質問・要望・コメント」等に含めないこと。 個人的な質問・相談等は「感想」の覧に記入せよ。
2025/09/24 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-1
- Debian GNU/Linux の主要なコマンドを理解する。
- デフォルトのシェルを fish に変更できるようになる。
- sudo コマンドを利用できるようになる。
- 端末マルチプレクサ (GNU screen) を利用できるようになる。
「Debian GNU/Linux リファレンスカード」のハードコピーを一部入手せよ (自分でプリントアウトしても、 誰かにプリントしてもらってもよい)。 便利そうなコマンドを 3 つ選び、 自身の計算機で試してみよ。
Debian GNU/Linux リファレンスカード
https://www.debian.org/doc/user-manuals#refcard
fish をインストールし、 デフォルトシェルを fish に変更せよ。
sudo パッケージをインストールし、 sudo コマンドを利用できるようにせよ。
GNU screen パッケージをインストール・設定し、 仮想端末を利用できるようにせよ。
省略
以下、# は root のプロンプトを、$ や > は一般ユーザのプロンプトを表す。
ohsaki はユーザ名 (実行する場合は自身のログイン名に変更する)。
root でログイン
# apt install fish
一般ユーザでログイン
$ chsh -s /usr/bin/fish
Password: ********
Ctrl-D でログアウトし、一般ユーザで再ログイン
>
注意: 何をやっているか完全に理解するまでは、絶対に root のシェルを変更しない
こと。root のシェルの変更に失敗する (存在しないシェルを指定する) と一切ログ
インできなくなるので慎重に作業すること。
root でログイン
# apt install sudo
ユーザ ohsaki を sudo グループに追加
# adduser ohsaki sudo
一般ユーザでログイン
root 権限で whoami コマンドを実行
> sudo whoami
:
:
[sudo] password for ohsaki: ********
screen パッケージをインストール
> sudo apt install screen
~/.screenrc ファイルを作成
> echo 'escape ^Z^Z' >.screenrc
screen を起動
> screen
Ctrl-z → c: 新しいスクリーンを作成
Ctrl-z → SPACE: スクリーン切り替え
- Alt + F1〜F4 でコンソールを切り替えられる。
- パッケージ管理は root 権限が必要。apt install でインストールできる。
- シェルの変更は chsh でできる。
- sudo コマンドを実行するには、ユーザが sudo グループに所属している必要がある。
- グループの変更は、再ログインするまで反映されない。
- GNU screen のエスケープキーは Ctrl-Z に変更するとよい。
- マニュアルページ
man man
- ドキュメント
/usr/share/doc/パッケージ名
- オンラインドキュメント
Linux distribution
https://en.wikipedia.org/wiki/Linux_distribution
Unix/Linux Command Reference
https://files.fosswire.com/2007/08/fwunixref.pdf
Debian リファレンス (特に、1 章 GNU/Linux チュートリアル)
http://www.debian.org/doc/manuals/debian-reference/index.ja.html
Debian 管理者ハンドブック
https://debian-handbook.info/browse/ja-JP/stable/index.html
Debian GNU/Linux リファレンスカード
https://www.debian.org/doc/user-manuals#refcard
The Linux Documentation Project
http://www.tldp.org/
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/02-session.html
ls List Directory
-l (Long), -a (All)
cat conCATenate files (concatenate = 連結する)
-n (Number)
cd Change Directory
pwd Print Working Directory
mkdir MaKe DIRectory
gcc GNU Compiler Collection (もともとは GNU C Compiler)
「レポート課題 2025/09/24」と同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-7
- スクリーン上でマウスを反応させるにはどうしたらいいですか
コンソール上で動作している screen の話なら、マウスは利用できません。コンソー
ルが模擬している「端末」にはマウスのようなポインティングデバイスがないからです。
UNIX は、ポインティングデバイスを使用せずに、キーボードで操作する時に最も快
適に利用できるように作られています。
2025/09/24 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-1
2025/09/24 および 2025/10/01 の内容目標をすべて達成できるようになる。
学生番号の末尾が偶数の人は、以下から質問を記入してください。
[授業中に使用] クリッカー (パスワードが必要です)
https://lsnl.jp/app/lecture/clicker/show/netcompx
- VirtuakBoxをインストールした際に間違いでデスクトップ環境(GNOME、KDE 等)をインストールしてしまった場合はどこで変更すればよいですか
最インストールしてもよいと思いますが、tasksel コマンドで、インストールするデ
スクトップ環境を最選択できます。
# tasksel
- 仮想化をする際にデメリットとして物理ハードウェアの障害での影響の範囲が大きくなる可能性があると学習しました。対策として具体的にどのようなことをすればよいですか
VirtualBox のような (少数の VM を稼働させる) 仮想化ではなく、サーバの仮想化
の話ですね。サーバのハードウェアを仮想化し、サーバ上に複数の (多数の) 論理サー
バを動作させる時の話でしょう。
対策は当たり前のことばかりです: 物理サーバが落ちないようにする (例: 物理サー
バのハードウェアを二重化する) 、論理サーバが落ちてもいいようにする (例: 複数
の物理サーバに分散させる、多数の物理サーバを稼働させない)
- su -コマンドとsudoコマンドを使う目的はどちらも管理者権限を使うためという目的があるが、どういう時にどちらを使えばよいですか?
一人しか利用しない計算機 → su でも sudo でもどちらでもいいが、sudo のほうが楽
複数人で利用する計算機 → sudo を使う (権限を制限できる、パスワードを共有しなくていい、ログが残るから)
- フォント以外に使いやすいように変更できることはありますか? - フォントを自分好みにカスタマイズできますが、他にもカスタマイズできる部分はありますか?
フリーソフトウェアなので (ソースコードがあり、改変や再配布が認められているの
で) あらゆるものがカスタマイズ可能です。
- 量子コンピュータでも Linux や UNIX のような OS は必要なのでしょうか?それとも全く別の仕組みで動くのですか?
量子コンピュータも、抽象化や資源管理が必要な複雑さになれば OS は必要でしょう
ね。
- 素人質問で恐縮ですが、なぜDebianやPowerShellのようなソフトウェアはなぜ背景が黒なのですか?他の色ではダメなんですか?
「他の色ではダメ」ではありません。ほとんどの端末エミュレータは (そしておそら
く PowerShell も) 背景色や文字色を好きな色に変更できます。
しかし、私も、背景色は黒で、文字色は白を使っています。その理由は、(一番面積
の大きい) 背景を黒にするのが、最も目に負担が小さく、かつ省電力だからです。一
方、文字を白にするのは、背景が黒なら文字が白が最も高コントラスト (判別しやす
い) だからです。
背景色が白の Word や Web ブラウザを使っているというのは、長時間点灯している
LED を凝視し続けているのと同じですので、私なら絶対に嫌です。
- インストールする際の設定で、US配列になってしまいJIS配列に直したいのですが、どのようなコマンドで直せばいいでしょうか?
/etc/default/keyboard を直接書き替えるとよいでしょう。dpkg コマンドを使って
# dpkg-reconfigure keyboard-configuration
でも設定変更できますが、これも結局は /etc/default/keyboard を書き替えています。
「レポート課題 2025/09/24」と同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-7
2025/09/24 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-1
- 簡単なシェルスクリプトが書けるようになる
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/priv/02.pdf
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/03-session.html
/usr/bin ディレクトリに格納されているファイルの一覧を list というファイルに保存せよ。
/usr/bin ディレクトリに格納されているファイルのうち、 m で始まるファイルの一覧を list-m というファイルに保存せよ。
コマンド行で指定したディレクトリに格納されているファイルのうち、 ファイルサイズが最大のもののサイズとファイル名を表示するシェルスクリプトを作成せよ。
コマンド行で指定した地域の、 今晩の天気予報を Web から取得し、 標準出力に表示するシェルスクリプトを作成せよ。
> ls /usr/bin >list
保存できているかの確認:
> head list
2to3-2.7
411toppm
7z
7za
7zr
CuraEngine
GET
HEAD
HTMLLinker
JxrDecApp
> ls /usr/bin | grep '^m' >list-m
保存できているかの確認:
> head list-m
m17n-db
m4
macptopbm
madplay
mag
mail
mail.mailutils
mailq
mailx
make
プログラムの例
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/03-findmax.sh
実行例:
> chmod +x 03-findmax.sh
> ./03-findmax.sh /usr/bin
+ dir=/usr/bin
+ shift
+ ls -l /usr/bin
+ awk { print $5, $9 }
+ sort -rn
+ head -1
53756024 docker
プログラムの例
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/03-weather.sh
実行例:
> chmod +x 03-weather.sh
> ./03-weather.sh sanda
+ area=sanda
+ shift
+ id=1de45589c3ffdf7ec3f72a09d94465bc89b562c10fdb719edc5140c935828285
+ lynx --dump https://weather.com/weather/tenday/l/1de45589c3ffdf7ec3f72a09d94465bc89b562c10fdb719edc5140c935828285
+ sed -n /^To\(night\|day\)/,/ mph/p
Today
78°/61°
Partly Cloudy
4%
N 12 mph
> ./03-weather.sh nisinomiya
+ area=nisinomiya
+ shift
+ id=0b564079717caa709f3a11a530951a66926be8f8f0227b6c2ccf18cd9da20f2d
+ lynx --dump https://weather.com/weather/tenday/l/0b564079717caa709f3a11a530951a66926be8f8f0227b6c2ccf18cd9da20f2d
+ sed -n /^To\(night\|day\)/,/ mph/p
Today
81°/67°
Mostly Sunny
2%
N 12 mph
(UNIX に限りませんが) オンラインドキュメントではなく、 書籍で知識を吸収することをおすすめします。 以下の本は特におすすめです。 特に上の 2 冊 (カーニハンとレイモンドの本) は「UNIX の哲学」を学ぶことができます。
- Brian W. Kernighan, Rob Pike, ``UNIXプログラミング環境,'' KADOKAWA, 2017.
- Eric S. Raymond, ``The Art of UNIX Programming,'' KADOKAWA, 2019.
- Shelley Powers, Tim O'Reilly, Jerry Peek, Mike Loukides, ``UNIX パワーツール,'' オライリージャパン, 2003.
「レポート課題 2025/09/24」と同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-7
- Debianの実用的な使い方
すべての作業を Debian GNU/Linux 上で行うとよいでしょう。
OS が高速で、キーボードだけで操作できて、自由にカスタマイズできて、利用でき
るパッケージも豊富で、問題があっても治せるので、生産性が劇的に向上しますよ。
- パソコン本体のOSでコピーした内容をvm側のOS上のコマンドラインにペーストする方法は、自身で調べた限りSSH接続くらいだったのですが、他に良い方法はありますか?
ホストが Windows や macOS で、ゲストが Debain GNU/Linux の場合は、ゲスト上の
X11 アプリ (Emacs、rxvt 端末エミュレータ等) であれば、VirtualBox の Guest
Additions で実現可能だと思います (私自身は使っていません)。
- 今操作しているDebianはOSの一つで、OSではwebアプリなどを動かすためのwebサーバーを作ったりできる、という認識で合っていますでしょうか?合っているとするならば、チャレンジ課題にある、ターミナル上でパックマン互換のゲームをプレイせよ。などは、webサーバーを作れたことになるのでしょうか??それともただたんにアプリケーションを動かしただけでしょうか??
今はいろんなものがあるので、仕組みや概念が非常にややこしいですね。
Debian GNU/Linux は OS です。アプリケーションや Web サーバは、OS のユーザ空
間上で動作するソフトウェア (プログラム) です。
パックマン互換のゲームも OS のユーザ空間上で動作するソフトウェア (プログラム)
です。Web サーバは関係ありません。
ややこしいのは、例えば以下のようなパックマン互換のゲームは、Web ブラウザ上で
動作します。
Pacman Doodle - Google
https://www.google.co.jp/logos/2010/pacman10-i.html
パックマン無料ゲーム|PCで遊べるブラウザ版
https://game16.net/burage/act/html5-pacman/
これらのパックマン互換のゲームは、Web ブラウザ上で動作する JavaScript で書か
れたソフトウェア (プログラム) です。Web ブラウザは、OS のユーザ空間上で動作
するソフトウェア (プログラム) です。
したがって、Debian GNU/Linux 上で動作する Web ブラウザの上で動作するパックマ
ン互換のゲーム、という関係です。この場合も、実行時は Web サーバは関係ありま
せん (Web サーバは JavaScript のプログラムを取得するために使用しています)。
やっぱりややこしいですね。
- apt-cache search tetris を実行し、どのようなパッケージが存在するか見てみよ。
- ターミナル上でテトリス互換のゲームをプレイせよ。
- apt-cache search pacman を実行し、どのようなパッケージが存在するか見てみよ。
- ターミナル上でパックマン互換のゲームをプレイせよ。
- man ls を実行し、ls コマンドにどんなオプションがあるか見てみよ。
- ls(1) (ls コマンドの man ページ) 中に単語 color が何回登場するかを数えよ。
- /usr/bin 以下のコマンドのうち、Python のスクリプトであるもののコマンド名を列挙せよ。
- 現在の日経平均を表示する nikkei コマンドを作成せよ。
- fish のプロンプトを自分好みにカスタマイズせよ。
GNU/Linux のターミナル上で実行できるテトリス互換ゲームを探し、 ソースコードに手を入れて、 既存のゲームを自分流に改造して楽しむ様子を収録したビデオです。
221012-tint.mp4 (01:03:59, 184 kb/s)
https://lsnl.jp/video/netcompx/2025/221012-tint.mp4
2025/09/24 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-1
- X ウィンドウシステムを利用できるようになる
- ウィンドウマネージャ (xpywm) をインストールできるようになる。
- xpywm の基本的な操作法を理解し、ウィンドウに対する一般的な操作ができるようになる。
- xpywm のインストール場所および変更方法を理解し、簡単なカスタマイズができるようになる。
- sudo をインストールし、sudo コマンドが実行できる状態にしておく。
- fish をインストールし、デフォルトシェルを fish に変更しておく。
- LANG が ja_JP (日本語) になっていれば、以下を実行し、デフォルトロケールを en_US.UTF-8 に変更しておく。
> sudo dpkg-reconfigure locales
xpywm、 xpymon、 xpylog が利用可能な状態の X ウィンドウシステムを起動せよ。
xpywm のキーボードおよびマウス操作法を暗記せよ。
xpywm の文字およびフレームの色を自分好みのものにカスタマイズせよ。
Alt + Ctrl + 4 を押すと、以下の「Debian GNU/Linux Reference Card」を mupdf で開くように設定せよ。
Debian GNU/Linux Reference Card
https://www.debian.org/doc/manuals/refcard/refcard
もしまだなら、 事前に sudo コマンドのインストールと設定を済ませておく。
sudo コマンドのインストール・設定方法
# apt install sudo
# adduser 自分のログイン名 sudo ← 自分自身を sudo グループに追加する
いったんログアウト
インストール用スクリプトを wget で入手し、 シェル (sh) で実行する。 その後、 さまざまな設定ファイルを格納したアーカイブ (home.tgz) をホームディレクトリ上で展開する。
> wget -O - lsnl.jp/xpywm | sh
> tar xzvf home.tgz
> startx
home.tgz を展開すると、ホームディレクトリ以下の設定ファイルが上書きされることに注意せよ。
以下に操作法の一覧がある。
xpywm
https://github.com/h-ohsaki/xpywm
プログラム本体 (Python のスクリプト) xpywm の場所は which xpywm でわかる。
> which xpywm
/usr/local/bin/xpywm
このファイル xpywm 中の、 以下のような箇所
FRAME_COLOR = 'aquamarine1'
TITLE_COLOR = 'aquamarine3'
にある色名 (aquamarine1 や aquamarine3 など) を他の色名に書換えればよい。 X ウィンドウシステムが認識する色の名前は、
/usr/share/X11/rgb.txt
に書かれている。
xpywm の所有者は root のため、 (1) root の権限で書換える、 (2) ファイルの所有者を自分に変更する (chown コマンド)、 (3) ファイルを所有者以外でも書換えられるようにする (chmod コマンド)、 などの方法がある。
mupdf パッケージをインストール。
> sudo apt install mupdf
PDF ファイルを取得し、mupdf で開けることを確認。
> wget https://www.debian.org/doc/manuals/refcard/refcard; mupdf refcard
~/.xpywmrc に以下の行を追加する。
KEYBOARD_HANDLER['4'] = {
'modifier': X.Mod1Mask | X.ControlMask, 'command': 'mupdf ~/refcard &'
}
PDF ファイル refcard をホームディレクトリ以外にダウンロードした場合は上記のパス (~/) を変更する必要がある。 ~/.xpywmrc ファイルに間違いがあると xpywm (ウィンドウマネージャ) が起動しない (起動しようとしてエラーで終了する) ことに注意せよ。
The Comprehensive List of Window Managers and Compositors for Unix
https://www.gilesorr.com/wm/table.html
VirtualBox 上で X Window System を起動すると、 デフォルトでは画面の解像度が 800x600 ピクセルになる (バージョンによる?)。
X の設定ファイルを作成することで、 画面の解像度を変更することができる。
> wget lsnl.jp/xorg.conf ← 設定ファイルをダウンロード
> cat xorg.conf ← 設定ファイルの内容を確認
Section "Device"
Identifier "Configured Video Device"
EndSection
Section "Monitor"
Identifier "Configured Monitor"
EndSection
Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
SubSection "Display"
# Modes "1920x1200"
Modes "1280x1024"
EndSubSection
EndSection
> sudo cp xorg.conf /etc/X11 ← 設定ファイルを /etc/X11/xorg.conf として保存 (新規作成)
※ VirtualBox Guest Additions をゲスト OS (Debian GNU/Linux) 上にインストール するという方法もある。
「レポート課題 2025/09/24」と同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-7
- 教授がよく使うコマンドは何ですか
私がよく使う Debian GNU/Linux のパッケージを以下のページで紹介しています。
100 Tools for Your Joyful Computer Life
https://lsnl.jp/~ohsaki/research/100-tools/
- 今回の授業でxpywmとX ウィンドウシステムの操作を通して、環境を自分で整える面白さを体験しました。その際、TAさんがEmacsをインストールしてくださいました。自分ではまだ実際に使えていませんが、今後は自分でも操作してみて、どのような点が便利なのかを体験的に理解していきたいと思います。もし可能であれば、Emacs以外にもインストール可能で、初心者にも扱いやすいテキストエディタがあれば、授業内で少し紹介していただけると嬉しいです。
メジャーなのは、(初心者向きではありませんが) Emacs に加えて、vim、Atom、
Visual Studio Code あたりです。
Text editor
https://en.wikipedia.org/wiki/Text_editor
List of text editors
https://en.wikipedia.org/wiki/List_of_text_editors
初心者向けのものも多数ありますが、一生情報工学の初心者であり続ける予定でなけ
れば、玄人向けのものを学ぶことをおすすめします。
- X サーバの起動時に実行されるスクリプト ~/.xinitrc を読んでみよ。
- xlsfonts(1) を実行して、どのようなフォントが利用可能かを調べよ。
- xlsfonts -fn '-*-fixed-*' を実行して、どのような固定幅フォントが利用可能かを調べよ。
- 「urxvt -fn フォント名」によって好みのフォントで urxvt を起動せよ。
- X サーバのリソース設定ファイル ~/.Xdefaults を読んでみよ。
- ~/.Xdefaults を変更し、urxvt のカーソルおよび文字の色を好みのものに変更せよ。
- ~/.Xdefaults を変更し、Emacs のカーソルの色を好みのものに変更せよ。
- X サーバのキー定義ファイル ~/.Xmodmap を読んでみよ。
- xev(1) コマンドを用いて、Windows キーのキーコードを調べよ。
- ~/.Xmodmap を編集し、Windows キーを Meta_L キーに割り当てよ。
- ~/.xinitrc から起動している redshift が何をするプログラムかを調べよ。
- pkill redshift で redshift のプロセスを終了すると何が変化するか調べよ。
- ターミナル上で tail -f /tmp/xpywm.log を実行し、ウィンドウをいろいろ操作してみよ。ここで表示されるメッセージが何を意味するものかを推測せよ。
- xpywm の設定スクリプト ~/.xpywmrc を読んでみよ。
- Alt + Ctrl + F9 を押すと好みの音楽がシャッフル再生されるように設定せよ。
- Shift + Print を押すとデスクトップの画面ダンプを取得するように設定せよ。
- 18 ドットのビットマップフォントである ~lib/fonts/hiro18maru.bdf を読んでみよ。
- ~lib/fonts/hiro18maru.bdf の STARTCHAR 0065 から始まる行はフォント A の外形の定義である。データを書き換えて、A のフォントのデザインを好みのものに変更せよ。
2025/09/24 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-1
- Emacs の基本的な操作方法を習得し、ファイルを作成・編集できるようになる
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/priv/03.pdf
Emacs をインストールせよ。
Emacs のチュートリアルを起動し、 「もし Emacs が反応しなくなったら」までを実行せよ。
「Hello!」という文字列が書かれた ~/foo.txt というファイルを Emacs のみを用いて作成せよ。
Emacs のキーバインド一覧を表示し、 どのようなコマンドがあるかを眺めてみよ。 また、 (1) M-d、 (2) C-SPC、 (3) C-w、 (4) C-y というキー操作によってどのような処理が実行できるかを調べよ。
> sudo apt install emacs
> Alt + Ctrl + 2 (Alt と Ctrl を押しながら 2 を押す、「emacs &」で起動してもよい)
> C-x RET l Japanese RET (言語環境を日本語に変更、M-x set-language-environment RET でもよい)
> M-h t (M-x help-with-tutorial RET でもよい)
※ C-x は Ctrl キーを押しながら x キーを押す
※ M-x は Alt キーを押しながら x キーを押す
※ RET は Enter キー (もしくは C-m)
> C-x C-f foo.txt RET (M-x find-file foo.txt RET でもよい)
> Hello!
> C-x C-s (M-x save-buffer RET でもよい)
※ ~ はホームディレクトリを表す。
> M-h b (M-x describe-bindings RET でもよい)
> M-d: kill-word (単語単位の削除 (キル → キルリングに入るタイプの削除))
> C-SPC: set-mark-command (現在のポイント(カーソル位置)をマークする)
> C-w: kill-region (リージョン (マークとポイントの間) をキルする)
> C-y: yank (キルしたテキストをペーストする)
(Emacs に限りませんが) オンラインドキュメントではなく、 書籍で知識を吸収することをおすすめします。 Emacs に関する良書は多くありませんが、 読むなら以下の本をすすめます。 「GNU Emacs マニュアル」は原文が GPL で公開されているので、 翻訳版も GPL で公開されています。
Richard Stallman, ``GNU Emacs マニュアル,'' 共立出版, 1988.
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/priv/GNU_Emacs_Manual.pdf
GNU Emacs マニュアル 28.1
https://ayatakesi.github.io/emacs/28.1/html/index.html
ただし、 翻訳の質は共立出版のもののほうがはるかに良いです。
Debra Cameron, James Elliott, Marc Loy, Eric Raymond, Bill
Rosenblatt, ``入門 GNU Emacs 第 3 版, '' オライリー・ジャパン, 2007.
GNUとは?
https://www.gnu.org/home.ja.html
自由ソフトウェアとは?
https://www.gnu.org/philosophy/free-sw.ja.html
- shell-command (M-!) を用いて Emacs 上からコマンド「ls -l」を実行せよ。
- shell-command (M-!) を用いて Emacs 上からコマンド「man ls」を実行せよ。
- C-u M-! を用いて Emacs 上からコマンド「man ls」を実行せよ。「man ls」の出力はカレントバッファに挿入される。
- query-replace (M-%) を用いて、カレントバッファ内の文字列 file を FILE に置換せよ。
- 適当な段落に対して fill-paragraph (M-q) を実行し、段落を整形せよ。
- shell によって Emacs のバッファ内で fish を起動せよ。
- shell によって起動した fish でコマンド「ls -l」を実行せよ。
- shell によって起動した fish でコマンド「man ls」を実行せよ。
- コマンド「man ls」の出力を ~/ls.txt というファイルに保存せよ。
- 現在起動している Emacs において C-t がどのコマンドに割り当てられているかを調べよ。
- 現在起動している Emacs において forward-word がどのキーに割り当てられているかを調べよ。
- ~/.emacs の 141〜154 行目を変更しフォント (Emacs における face) の色を好みのものに変更せよ。
- 簡単な C 言語のプログラムを作成せよ。Emacs における c-mode の便利な機能を調べて、それらを試してみよ。
- 簡単な Python 言語のプログラムを作成せよ。py-mode の便利な機能を調べて、それらを試してみよ。
- make-frame-command (C-x 5 2) を実行し、新規にフレームを作成せよ。
- delete-frame (C-x 5 0) を実行し、現在のフレームを削除せよ。
「レポート課題 2025/09/24」と同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-7
- 課題とは直接関係ないのですが、キーを1回しか押していないつもりでも、Emacs上で複数回入力されたように反応することがあります。講義中の先生の操作でも同じような挙動を見かけたので、キーリピートの間隔や感度設定を調整する方法などがあれば知りたいです。以前から気になってはいたのですが、そういうものだと思っていたので、今回知りたいと思いました。
私はキーリピートが速いほうが好みなので、配布している ~/.xinitrc では以下のよ
うに設定しています。
xset r rate 200 40
- 自習内容であるように、windows上でCapslockキーをctrlキーに変更したのですが、基本的には操作ができるのですが、日本語や英語などに打ち方を変更するときなど、時々変な操作が行われてしまいます。もし原因がわかれば教えていただけますでしょうか。
VirtualBox のホストが Windows の時の固有の問題 (?) のようです。解決法を知っ
ている人を紹介します。
- startxの画面が小さくて、emacsを開いたときにC-xのコマンドが見えなく、startxは開かずGUIがない状態で今回行った。0000x000を変えてみても変わらなかったので、対処方法を知りたい
正しく設定すれば、ノート PC のディスプレイと等倍 (例えば 1920x1080 ピクセル)
で X ウィンドウシステムを利用できます。何が原因が調べてみますので、声をかけ
てください。
2025/09/24 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-1
ホスト OS とゲスト OS (Debian GNU/Linux) を行き来すると非常に面倒なので、 ゲスト OS だけですべての作業を行うこと (日本語入力の設定がやや複雑なので、 日本語入力のみ当面はホスト OS で行う)。
Web ブラウザ (qutebrowser)、 PDF ビューア (mupdf) をインストールしておく。
> sudo apt update
> sudo apt install qutebrowser libjs-pdf mupdf uim-skk skk skkdic-cdb
Alt + Ctrl + 3 で qutebrowser が起動できる。 もしくは以下のように起動してもよい。
> qutebrowser &
qutebrowser の最低限のコマンド (vi エディタの操作体系を真似ている)。
ヘルプを表示 :help<RET>
新しいタブを開く C-t
タブを閉じる C-w
「キーワード」を検索 oキーワード<RET>
qutebrowser を終了 C-q
入力モードへ i
入力モードを抜ける ESC, C-[
ヒントを表示 f, F (新規にタブを開く場合)
quickmarkを保存 m
quickmarkを開く o
スクロール h, j, k, l
ページの先頭に移動 gg
ページの末尾に移動 G
日本語の PDF ファイルは文字化けするので、 「Download」でダウンロードし、 mupdf で表示する。
C-SPC (Ctrl + スペースキー) で日本語入力 (uim-skk) の ON/OFF が切り替えられる。 SKK による漢字の入力方法は特殊なので、 しばらくはひらがなの入力に使ってください。
SKK による入力方法をマスターしたい場合は、 Emacs 上で M-x skk-tutorial とすれば SKK のチュートリアルが実行できます。
- 「シミュレータ」および「エミュレータ」が何かを他人に説明できるようになる。
- 「エピデミックブロードキャスト」とは何かを他人に説明できるようになる。
- DTN シミュレータ (dtnsim) をインストールできるようになる。
- シミュレーション条件を変えて dtnsim を実行できるようになる。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/priv/04.pdf
「シミュレータ」および「エミュレータ」とは何かを、 それぞれの違いがわかるように説明せよ。
世の中にある○○シミュレータや○○エミュレータについて、 (1) それは本当にシミュレータ/エミュレータか、 (2) もしそうならそれはなぜか、 を考えて議論せよ。
「エピデミックブロードキャスト」とは何かを説明せよ。
エピデミックブロードキャストがどういうものかを理解した後、 「エピデミックブロードキャストを使うと何ができそうか? (どんなアプリや用途に使えそうか?)」 を議論せよ。
dtnsim をインストールせよ。
dtnsim におけるエージェントの移動モデルを「グラフの CRWP」から「グラフ上のランダムウォーク」に変更してシミュレーションを実行せよ。
→ テキスト参照
→ テキスト参照
> sudo PIP_BREAK_SYSTEM_PACKAGES=1 pip3 install -U dtnsim
> dtnsim | cellx
> dtnsim -h
option -h not recognized
usage: dtnsim [-v] [-s #] [-n #] [-r range] [-I id[,id]...] [-m mobility] [-p path] [-a agent] [-M monitor]
-v verbose mode
-s # seed of random number generator
-n # number of agents
-r range communication range [m]
-I id[,id...] initial infected nodes
-m mobility name of mobility class (Fixed/FullMixed/LevyWalk/LimitedRandomWaypoint/RandomWalk/RandomWaypoint/graph.Fixed/graph.Sequential/graph.RandomWalk/grpah.CRWP)
-p path name of path class (NONE/Line/Grid/Voronoi)
-a agent name of agent class (CarryOnly/Random/Epidemic/P_BCAST/SA_BCAST/HP_BCAST/ProPHET)
-M monitor name of monitor class (Null/Log/Cell)
> dtnsim -m graph.RandomWalk | cellx
- 「シミュレータ」という名称が付いたシステムやソフトウェアにどのようなものがあるか調べてみよ。それぞれについて、それらが本当にシミュレータの一種であるかを確認せよ。
- 「エミュレータ」という名称が付いたシステムやソフトウェアにどのようなものがあるか調べてみよ。それぞれについて、それらが本当にエミュレータの一種であるかを確認せよ。
- TCP/IP が、本当に通信網の分断に対して耐性がないかを実験で確認せよ。例えば、ISO イメージのような巨大なファイルのダウンロード中に Wi-Fi ルータの電源を ON/OFF してみよ。どのくらいの通信回線断であれば正常にダウンロードできるか調査してみよ。
- epidemic という英単語の意味を英英辞書で調べよ。
- 自身が使っている PC やスマートフォンで、ユニキャスト、マルチキャスト、ブロードキャストのどれが、どの程度使用されているかを調査せよ。
- 「which dtnsim」を実行することにより、dtnsim プログラムがどこにインストールされているかを調査せよ。
- 「sudo PIP_BREAK_SYSTEM_PACKAGES=1 pip3 install -U dtnsim」によって、ファイルがどこにインストールされたかを調査せよ。
- pip3 コマンドを用いて dtnsim をアンインストールせよ。アンインストールされたことを確認した後、pip3 コマンドを用いて dtnsim を再度インストールせよ。
- エージェントの移動モデルをさまざまに変化させてシミュレーションを実行してみよ。それぞれの移動モデルにおいて、エージェントの移動パターンがどのように変化するかを観察せよ。グラフ上の移動モデルを使用する場合は、-p オプションによって経路もあわせて指定する必要があることに注意せよ。
- エージェントの通信プロトコルをさまざまに変化させてシミュレーションを実行してみよ。それぞれの通信プロトコルにおいて、通信特性がどのように変化するかを観察せよ。
- cellx ではオプションを指定することで、可視化方法をさまざまに変化させられる。以下のオプションを試してみよ。どのような目的の可視化の時に、どのようなオプションを指定すると望ましいかを考察せよ。
> cellx -h
option -h not recognized
usage: /usr/local/bin/cellx [-E] [-c #] [-M class] [-F rate] [-L rate] [-A alpha] [-m #] [file...]
-E enable macro expansion with cpp
-c # select color scheme
-M class monitor class (Null/SDL/SDL_Filter/PostScript) (default: SDL)
-F rate the number of frames per animation/fading
-L rate limit the frame rate (default: infinity)
-A alpha alpha for filtering effect (0 <= alpha <= 255)
-m # the number of frames to render (default: infinity)
-c 0〜7: カラースキームの変更
例: カラースキームを 1 番に変更
> dtnsim | cellx -c 1
-M class: モニターモジュールの指定
-A alpha: フィルタ効果の強さ (小さいほど残像が残る)
例: 残像を残すフィルタを有効にする
> dtnsim | cellx -M SDL_Filter -A 40
-L rate: フレームレートの上限
例: フレームレートを 30 フレーム/秒に抑える
> dtnsim | cellx -L 30
例: 上記の組み合せ
> dtnsim | -M SDL_Filter -A40 -L30
「レポート課題 2025/09/24」と同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-7
- 講義ありがとうございました。-aオプションで指定できるEpidemic、P_BCAST、ProPHET などの通信プロトコルは、それぞれ具体的にどのようなアルゴリズムで動作しているのか知りたいです。
P-BCAST、SA-BCAST、HP-BCAST は Gamberini らの論文を、ProPHET は RFC を見てく
ださい。
Impact of history on epidemic broadcast in DTNs
https://ieeexplore.ieee.org/document/4812838
Probabilistic Routing Protocol for Intermittently Connected Networks
https://www.rfc-editor.org/rfc/rfc6693
2025/09/24 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-1
配布していた ~/emacs (home.tgz に含まれるもの) が Debian GNU/Linux 13 trixie の Emacs ではエラーになる。
このため、~/.emacs に以下のパッチを当てる。 行頭の + は追加をあらわす (+ を除いた一行を ~/.emacs に追加する)。
--- .emacs.orig 2025-11-05 18:32:23.546276853 +0900
+++ .emacs 2025-11-05 18:32:18.958111160 +0900
@@ -26,6 +26,7 @@
(add-to-list 'default-frame-alist (cons 'font fontset-name))))))
(setq initial-buffer-choice t)
+(fset 'linum-mode 'display-line-numbers-mode)
;;; Major mode
もしくは、 xpywm のインストールを再度行なってもよい。 ただし、 この場合は設定ファイルが上書きされることに注意せよ。
- Python の対話モード (REPL) を使えるようになる。
- Python で簡単な数値計算のプログラムが書けるようになる。
- Python のデータ構造 (数値・文字列・リスト・辞書・タプル) を使った簡単なプログラムが書けるようになる。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/priv/05.pdf
Python の対話モード (REPL) で 30 未満の素数の和および平均を計算せよ。
REPL - Python Interactive Shell
https://pythonprogramminglanguage.com/repl/
Python の対話モード (REPL) で 30 未満の素数の二乗和を計算せよ。
二次方程式 (a x^2 + b x + c = 0) の実数解を出力するプログラム qeq.py を作成せよ。 係数 a, b, c を qeq.py の引数として受け取り、 実数解を (r_1, r_2) の形式で表示せよ。 ただし、実数解が存在しない場合は (None, None) と表示せよ。
実行例:
> ./qeq.py 1 0 -4
(2.0, -2.0)
> ./qeq.py 2 0 -1
(0.7071067811865476, -0.7071067811865476) ← 1/sqrt(2)
> ./qeq.py 1 -4.6 4.08
(3.3999999999999995, 1.2000000000000002) ← 1.2 と 3.4
> ./qeq.py 1 1 1
(None, None) ← 解なし
課題 3 を if 文を使わずに例外をトラップすることで実現する qeq-trap.py を作成せよ。
ヒント: math.sqrt の例外 ValueError を補足すればよい。
> python3
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 2+3+5+7+11+13+17+19+23+29
129
>>> (2+3+5+7+11+13+17+19+23+29)/10
12.9
12.9
>>> ← Ctrl + D (EOF) で終了
(参考)
>>> 2+3+5+7+11+13+17+19+23+29
129
>>> _/10 ← _ で直前の演算結果を参照できる
12.9
>>> sum([2,3,5,7,11,13,17,19,23,29]) ← 総和を計算する関数 sum を使う方法
129
>>> l=[2,3,5,7,11,13,17,19,23,29]
>>> sum(l)/len(l)
>>> l=[2,3,5,7,11,13,17,19,23,29]
>>> s=0
>>> for v in l:
... s+=v**2
...
>>> s
2397
>>> ← Ctrl + D (EOF) で終了
(参考)
>>> sum(v**2 for v in l) ← ジェネレータを使う方法
2397
>>> sum(map(lambda v: v**2, l)) ← 関数 map を使う方法
2397
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/python-1/qeq.py
> wget https://lsnl.jp/~ohsaki/lecture/netcompx/2025/python-1/qeq.py
> chmod +x qeq.py
> ./qeq.py 1 0 -4
(2.0, -2.0)
> ./qeq.py 2 0 -1
(0.7071067811865476, -0.7071067811865476) ← 1/sqrt(2)
> ./qeq.py 1 -4.6 4.08
(3.3999999999999995, 1.2000000000000002) ← 1.2 と 3.4
> ./qeq.py 1 1 1
(None, None) ← 解なし
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/python-1/qeq-trap.py
- Zen of Python を読んでみよ。自分が知っているプログラミング言語 (例えば C 言語や Java 言語) に当てはまるものはどれで、当てはまらないものはどれかを考えよ。
- 以下のプログラミング言語の系譜図を入手し、Python がどのようなプログラミング言語の影響を受けているかを確認せよ。また、自分が知っているプログラミング言語 (例えば C 言語や Java 言語) と Python は系譜図においてどのような関係になるかを調査せよ。
History of Programming Languages
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/priv/PLhistory.pdf
- Wikipedia における ALGOL 言語の解説を読んでみよ。ALGOL 言語で書かれたプログラムを読み、Python 言語のプログラムとどこがどのように似ているか (または似ていないか) を分析せよ。
ALGOL
https://en.wikipedia.org/wiki/ALGOL
- Python 3 の最新版のソースコードを入手せよ。ダウンロードしたソースコードのアーカイブを展開し、ソースコードのアーカイブにどのようなファイルが含まれているかを確認せよ。アーカイブ中に、Python 学習の上で役立ちそうなどのようなファイルが含まれているかを調べよ。
Python Downloads
https://www.python.org/downloads/
- 最新版の Python 3 をソースコードからビルドせよ。Debian GNU/Linux で Python 3 をビルドするためには、ビルドに必要なパッケージをインストールする必要があることに注意せよ。
- Python 3 における識別子の仕様が説明されている、Python の公式ドキュメントを探せ。
- Python 起動直後に globals() 関数を実行し、どのようなグローバルシンボルが定義されているかを調べよ。また、「a=123」および「s = 'hello!'」を実行した後に、再度 globals() 関数を実行し、グローバルシンボルがどのように変化したかを確認せよ。その後、「del a」を実行し、再度 globals() 関数を実行することでグローバルシンボルがどのように変化したかを確認せよ。
- 変数の型は type() 関数で確認できる。type(123)、type(123.45)、type('Hello')、type(5/4)、type(True)、type(None)、type(24.8 / 12.4)、type(1 + 1 == 2) を実行し、それぞれの引数の型を確認せよ。
- Python の整数 (int) が無限精度であることを実験で確認せよ。例えば「1234 の 1234 乗」を計算してみよ。
- 実数 123.45 の整数部は int(123.45) によって取り出せる。int() 関数のリファレンスマニュアルを探して読んでみよ。int() 関数は何をするための関数かを調べよ。
- 変数 x の型が int の場合、x = float(x) によって float 型に変換できる。float() 関数を使用せずに整数を実数に変換する方法は他にどのようなものがあるかを考えよ。
- Python の文字列がイミュータブルであるのはなぜか。
- 文字列 Hello, World! を変数 s に格納せよ。変数 s の (1) 最初の文字、(2) 最後の文字、(3) 最初から 3 番目の文字、(4) 最初の 3 文字、(5) 最後の 3 文字を出力する方法を答えよ。
- 文字列 Hello, World! を変数 s に格納せよ。変数 s を構成する各文字を一文字ずつ順番に出力せよ。できるだけ簡潔なプログラムで実現せよ。
- 100 以下のすべての 7 の倍数 (7, 14, ..., 98) を昇順に格納したリストを機械的に作成し、変数 l に格納せよ。変数 l の (1) 最初の要素、(2) 最後の要素、(3) 最初から 3 番目の要素、(4) 最初の 3 つの要素、(5) 最後の 3 つの要素を出力する方法を答えよ。
- 100 以下のすべての 7 の倍数 (7, 14, ..., 98) を昇順に格納したリストを機械的に作成し、変数 l に格納せよ。変数 l に格納されているすべての値を順番に出力せよ。できるだけ簡潔なプログラムで実現せよ。
- Python におけるリストは、「データ構造とアルゴリズム」における「配列」と「リスト」の両方の特徴を持っている。「データ構造とアルゴリズム」における「配列」の利点・欠点と、「リスト」の利点・欠点は何か。
- Python におけるリストは、「データ構造とアルゴリズム」における「配列」と「リスト」の両方の特徴を持っている。どのようなデータ構造を用いればそのようなデータ構造が実現できるかを考えよ。
- Python の関数では、例えば return 1, 2, 3 によって 3 つの整数を呼び出し元に返すことができる。なぜこのようなことができるかを調べよ。そのためにまず、リファレンスマニュアルにおける return 文の説明を読んでみよ。その後、リファレンスマニュアルにおける tuple 型の説明を読んでみよ。
- 自分が知っているプログラミング言語 (例えば C 言語や Java 言語) で連想配列が利用できるかを調べよ。連想配列が使用できない場合は、非標準のライブラリ等を使用して連想配列が利用できるようになるかを調査せよ。
- C 言語で書かれたプログラムを入手せよ (自分で作成したプログラムがあればそれが望ましい)。そのプログラムを Python で書き直してみよ。
- 「プログラミング実習 III」の課題の中から、好きなものを一つ選び、そのプログラムを C 言語ではなく Python 言語で作成してみよ。C 言語と比較して、Python 言語での開発がどの程度楽になるか。
Python のドキュメントは十分に整理・体系化されておらず、 特に、 Python を学び始めたばかりの頃はどのドキュメントを読めばいいのか、 どこに探している情報が書かれているかがわかりづらい。
最も参考になるのは、 Python の公式ドキュメントである。
Python の公式ドキュメント
https://docs.python.org/3/
Web ブラウザから参照できるのは良いことだが、 Web ブラウザの制約のため、 検索性や一覧性には欠ける。
man コマンドで python のマニュアルページを見ることができる。 ただし、 python プログラムの起動時オプションや環境変数に関する説明くらいしか書かれていない。
Python のマニュアルページ
$ man python3
Python の世界では、 (1) python を対話モードで起動し、 help() 関数によってヘルプモードに入ってからヘルプを参照する、 (2) Python に付属する pydoc コマンドを使ってコマンドラインからヘルプを参照する、 というのが普通の (標準で用意されている) ドキュメント参照方法である。
対話モードでヘルプを参照してみよう。
% python3
Python 3.13.5 (main, Jun 25 2025, 18:55:22) [GCC 14.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> help()
Welcome to Python 3.13's help utility! If this is your first time using
Python, you should definitely check out the tutorial at
https://docs.python.org/3.13/tutorial/.
Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules. To get a list of available
modules, keywords, symbols, or topics, enter "modules", "keywords",
"symbols", or "topics".
Each module also comes with a one-line summary of what it does; to list
the modules whose name or summary contain a given string such as "spam",
enter "modules spam".
To quit this help utility and return to the interpreter,
enter "q", "quit" or "exit".
help> len
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
help> list.index
Help on method_descriptor in list:
list.index = index(self, value, start=0, stop=9223372036854775807, /) unbound builtins.list method
Return first index of value.
Raises ValueError if the value is not present.
残念ながら、 対話モードのヘルプは「ないよりはあったほうが良い」くらいで、 非常に分かりづらく、 使いづらい。 Python の初心者が対話モードのヘルプを使って知りたいことを調べる、 というのはほぼ絶望的である。
pydoc コマンドも同じようなものだ。 例を示そう。
% pydoc3 len
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
% pydoc3 list.index
Help on method_descriptor in list:
list.index = index(self, value, start=0, stop=9223372036854775807, /) unbound builtins.list method
Return first index of value.
Raises ValueError if the value is not present.
対話モードのヘルプも、 pydoc コマンドも、 初心者にとってあまり役立たない理由は、 (1) Python のクラス名やメソッド名を知っていなければドキュメントを見られない、 (2) 表示されるのがリファレンスマニュアルではなく、 クラスやメソッドの doc 文字列 (ソースコード中に記載されたコメントのようなもの) だからだ。
リストの index メソッドの説明は、 実はリファレンスマニュアルの「5. Data Structures」中にある。
5. Data Structures
https://docs.python.org/3/tutorial/datastructures.html?highlight=index
対話モードのヘルプや pydoc コマンドでは、 上記のような情報を (公式ドキュメントとして存在しているにもかかわらず) 参照できない。 対話モードのヘルプでは、 リファレンスマニュアルの一部は表示されるので、 余計に混乱する状況にある。
Python の入門書としては、 以下をおすすめする。 もっと薄い本や、 もっと安い本もあるが、 「内容が簡単そうか?」、 「値段が安いか?」 という基準で選ぶのではなく、 本の中身で選ぼう。
Bill Lubanovic, ``入門 Python 3,'' オライリージャパン, 2015.
「レポート課題 2025/09/24」と同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-7