masm (microsoft macro assembler), ms-vb...

40

Upload: others

Post on 08-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称
Page 2: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

各種商標と著作権の取り扱いに関する注意

UNIX は The Open Groupの OS名です。

Solarisは Sun Microsystems, Inc.の OS名です。

Linuxは Linus Torvalds氏の手による OSです。

BSD UNIXとはカリフォルニア大学バークレイ校 (UCB)で開発された Berkley Software Distribution版に端を発する OS

群を指す表現です。

Apple, Macintosh, MacOSは米国 Apple Inc.の登録商標です。

MS-DOS, Windows95, Windows98, WindowsNT, WindowsMe, Windows2000, WindowsXP, Windows Vista,

MASM (Microsoft Macro Assembler), MS-VB (Microsoft Visual Basic),

MS-C/C++ (Microsoft C/C++), MS-VC/C++/C# (Microsoft Visual C/C++/C#)は Microsoftの、

CodeGear C++, Turbo C/C++, TASM (Turbo Assembler),

Turbo Pascal, Delphi, Kylixは CodeGearの、

N88-BASIC(86)は NECの、

Z80はザイログの、

8086, i386, i486, Pentium, Pentium Pro, Pentium II, Pentium III, Pentium 4, Pentium M, Celeron, Core Duo, Core 2 Duo,

Core 2 Quadは Intelの、

PowerPCは IBM の、

それぞれ商標となっております。その他、プログラム名、プロセッサを始めとする各種の製品名は一般に各メーカーの登

録商標です。本文中では “TM” 、並びに “®” マークは明記しておりませんがその旨ご了承下さい。

本誌に掲載される各記事の著作権は、それぞれの記事の作者が保有します。各種プログラムのソースコードの著作権は

プログラムの作者が保有します。「PDS」または「パブリックドメイン」と明記されていないものについては、個人で使用

する目的以外のための無断複製は著作権法により禁止されています。

Page 3: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

i

        *巻頭言 *

新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

UTMCはパソコンに関することを広く扱うサークルです。 学祭などではゲームを展示している部員が多い

ため、ゲーム制作サークルというイメージを持っている方もいるかもしれませんが、実際は部員がプログラミ

ング全般、DTM(コンピュータ上での作曲)、CG、あとシミュレーションなどを興味の赴くままにやるサーク

ルであり、何に手を付けてもいいし何かに手をつけなくてもいい、そんな自由な雰囲気のサークルです。

自由な雰囲気すぎて逆に何をしたらいいかわからなくなることもある気もしますが、いろいろな分野の人が

いるので、その人たちの話を聞けばさまざまな知識を得られるので(部内では不定期で先輩の授業を受ける講

習会があります)、広い興味があれば何かしら得られるものはあるのではないかと思います。

パソコンに関する広い興味がある人たちがなんとなくゆるゆると集まっているのがこのサークルの魅力だと

思います。なんとなく家に帰ったらパソコンをつけている、そんな感じのひとはもうすでに脳の構造がマイコ

ンクラブなので、是非このサークルにどうぞ。

とりあえずはこの部誌で、マイコンクラブの雰囲気を感じてみてください(まだ記事全然かけてない)。

Page 4: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

ii

▷もくじ ◁

1 コンソールで 3Dモデリング —蒜石 1

1. はじめに . . . . . . . . . . . . . . . . . . . . . 1

2. CUI環境向け描画システムを作ろう . . . . 2

3. はじめての 3D描画 . . . . . . . . . . . . . . 3

4. 実際にプログラムを作ってみました。 . . 6

5. 結論 . . . . . . . . . . . . . . . . . . . . . . . 7

2 マイコンとかの紹介的なもの —ろぐろ 8

1. はじめに . . . . . . . . . . . . . . . . . . . . . 8

2. マイコンとは . . . . . . . . . . . . . . . . . . 8

3. Arduinoとは . . . . . . . . . . . . . . . . . . 9

4. おわり . . . . . . . . . . . . . . . . . . . . . . 9

3 ECCSの使い方 — mapi 10

1. はじめに . . . . . . . . . . . . . . . . . . . . . 10

2. 仕様 . . . . . . . . . . . . . . . . . . . . . . . 10

3. 利用方法 . . . . . . . . . . . . . . . . . . . . . 11

4. システム . . . . . . . . . . . . . . . . . . . . . 11

4 BGM を書きたい — Negotiator 14

1. イントロダクション . . . . . . . . . . . . . . 14

2. BGM is楽しい . . . . . . . . . . . . . . . . . 14

3. BGMはどうやって書くのか . . . . . . . . 15

4. まとめ . . . . . . . . . . . . . . . . . . . . . . 21

5 スクレイピングしてみよう — Kuphony 22

1. スクレイピングとは . . . . . . . . . . . . . . 22

2. やってみる . . . . . . . . . . . . . . . . . . . 22

3. 最後に . . . . . . . . . . . . . . . . . . . . . . 25

6 そんな説明で大丈夫か —世外奇人 495 26

1. はじめに . . . . . . . . . . . . . . . . . . . . . 26

2. 物理シミュレーション . . . . . . . . . . . . 26

3. 社会シミュレーション . . . . . . . . . . . . 26

4. データ分析 . . . . . . . . . . . . . . . . . . . 27

5. ゲーム制作 . . . . . . . . . . . . . . . . . . . 28

6. 絵の描き方 . . . . . . . . . . . . . . . . . . . 28

Page 5: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

1

1 コンソールで 3Dモデリング時代に逆行する感じのグラフィックを目指そう

蒜石 (ひるいし)

1. はじめに 巻頭言で会いましたね、蒜石です。さて突然ですが、これを今読んでいる皆様は、どのような OS *1をお

使いですか? おそらくWindowsだか Macだかを使っていることだと思われます。Windowsの前身となっ

た MS-DOSや、今でも一部で使われている Linux系 OSなどをたまにでもいいから使っている人なんて、い

まどきほとんど見ないのかもしれません。  さて、どうしてこのような話題を出したのかというと、今ここ

で名前を挙げた MS-DOSや Linux系 OSのユーザーインターフェース(パソコンを使っている人に情報を提

供する仕組み)は"CUI"と呼ばれるカテゴリに属しています。平たく言ってしまえば、これらの OSは「文字

しか表示されない」のです *2。  皆さんが普段遊んでいるゲームもほぼすべてが GUIですが、昔はローグ

という CUIのゲームもあったようです(マイコンクラブの上の代の人は知っているようですが、私は遊んだ

ことがありません)。 

 ------------

|.....!....|

|..@.......|

##################+.........:|

# |...%.H....|

# ------+-----

#

---+---

|.....|

|.?...|

|.....+###### ---------+----

------- # |............|

# |............+

#########+..........^.|

|............|

--------------

 これがローグのマップの一例ですね。このように、CUIであっても、文字の組み合わせにより、(アスキー

アート的に)グラフィックをそれっぽく作ることができます。

*1 パソコンを動かすシステムのようなもの。Windowsとかそういうアレです*2 Windowsみたいにグラフィックが表示されてマウスとかで操作できるものを"GUI"といいます。もちろんさまざまな意味で例外があり、基本的に CUIだが部分的に GUIを使用できたり、WindowsやMacみたいに CUIの機能も用意されていたり、Ubuntuみたいに Linux系なのに GUIメインだったりはあります)

Page 6: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

2 UTMC Press 2015-4

 しかし今回目指すのはこのような 2Dの描写ではありません。結論から言うと、文字の複雑さを利用して

濃度を表現し、3Dっぽい描写をしてみよう!とかいうやつです。

2. CUI環境向け描画システムを作ろう  CUI画面で文字を画素として用いたシステムを作るのは難しいことではありません。画面に文字を表示

する命令文と「配列」と呼ばれる技術を用いれば簡単に作れます。どちらもプログラミングをやる人たちは入

門のうちに触れることになる気がします。配列というのは、 x1、x2、・・・という変数のグループみたいなも

のと考えてください。今回は画面上の座標が (s, t)の画素の色の濃さを screen[s, t]と置くことにしました。

ソースコード 1.1 描画システム

1 public static void drawing ()2

3 {4

5 Console.Clear ();6

7 for (int t = 0; t < 24; t++)8

9 {10

11 for (int s = 0; s < 40; s++)12

13 {14

15 switch (screen[s, t]) {//6色 の う ち 、 ど の 番 号 が 代 入 さ れ て い る か で 画 素 を 塗 り 分 け ま す 。16

17 case 6:18

19 Console.Write("龜");20

21 break;22

23 case 5:24

25 Console.Write("霞");26

27 break;28

29 case 4:30

31 Console.Write("乖");32

33 break;34

35 case 3:36

37 Console.Write("亞");38

39 break;40

41 case 2:42

43 Console.Write("幵");44

45 break;46

47 case 1:48

49 Console.Write("乂");50

51 break;52

53 case 0:54

55 Console.Write("丶");56

57 break;58

59 }//*/60

61 // Console.Write((int)screendepth[s, t]);62

Page 7: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

コンソールで 3Dモデリング —蒜石 3

63 }64

65 // Console.Write ("\n");66

67 }68

69

70

71

72

73 }

 改行処理を行っておりませんが、これは Windows標準の CUI 環境(スタートメニューからアクセサリ

フォルダを開き、コマンドプロンプトを起動すると見られる)では 40文字で自動改行だからです。  Mac?

 知らねぇなぁ。

3. はじめての 3D描画

3.1 その 1~座標を変換しよう!

 さて、描画システムが完成したところで、肝心の 3D描画システムに移りましょう。3D描画システムと

いうと、何やら難しそうな印象を受けるかもしれませんが、そんなことはありません。皆さんが高校で習った

こと、あるいは大学数学の初めのほうで学ぶことを用いれば簡単に作ることができます *3。

  3D描画システムはどのような仕組みになっているかというと、まず目標物と視点の三次元上の座標を取

得します *4。

 次に、目標物を原点とし、視点が z軸上に来るように座標を変換します。(x,y,z)の座標系を変換した新し

い座標系を (x’,y’,z’) とおくことにします(おき方が数学的に宜しくないかもしれませんが、筆者の苦手科目

は間違いなく数学なので、そこら辺の厳密性がぴょんぴょんしています)。

*3 もしかして座標の回転とかぐらいは新課程でもやるんですか。

*4 図がノートのメモ書きになっていますがご了承ください。実際適当な図を書く際にはアナログの力が強大なのです……。

Page 8: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

4 UTMC Press 2015-4

 元の座標系から新しい座標系に点の座標を変換するときに必要なのは、「平衡移動」と「空間上での回転」

の 2つです。

 平行移動は簡単ですよね。

x’=x+1

y’=y

z’=z

とすれば、簡単に x軸方向に-1だけずらした座標系を設定できます。

 では、回転移動はどうしましょうか。まず平面上での回転を考えましょう。座標系をθ(rad)だけ回転

させると、点 (x,y)はどうなるでしょうか。新しく移った点を (x’,y’) とすると、座標系がθ回転しているわけ

ですから座標系から見るとこの点は新しい座標系において (x,y)から-θだけ回転した点であることがわかり

ます。 

  ですから、新しい点は、

x’=xcos(-θ)− ysin(−θ)

y’=xsin(-θ) + ycos(−θ)

 ここで「点の回転」を用いました。

 ここまでで平面上での座標変換の説明が完了しましたが、3次元空間ではどうなるのでしょうか。

Page 9: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

コンソールで 3Dモデリング —蒜石 5

 このように、二つの回転角を用いれば、3次元空間でのすべての回転が表せます。例えば、θを z軸負の

向きに視線を定めた (xy平面を真正面から見たときの)変換後の座標系の回転角とし、φを x軸負の向きに視

線を定めた(yz平面を真正面から見た

ときの)変換後の座標系の回転角とすれば、簡単に座標系を 3次元空間内でも変換することができます。

 以上がオーソドックスな 3D描画のシステムです。

3.2 その 2~点から二次曲面にレベルアップしよう!

 さて、ここまでで点の座標変換の方法を見てきたわけですが、オブジェクトが点だけではゲームにならな

いので、何か広がりのある物体を描画したいわけです。ここで手軽に用意できるのが「二次曲面」です。二次

曲面と聞くとややこしく感じる

かもしれませんが、

  a1(x− a2)2 + bx+ c1(y − c2)

2 + dy + e1(z − e2)2 + fz + gxy + hyz + izx+ j = 0

とおけば……うん、このコード作ってる時かなり泣きたくなりました。x,y,zのそれぞれ一時の項が分散し

ているのは平行移動がしやすいからです。

 さて、いくらなんでもこの方程式の格 x,y,zを変換すると死ぬほど面倒なので、3D描画のやり方を少し変

えてみたいと思います。

Page 10: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

6 UTMC Press 2015-4

 まず視点と各画素の存在する座標のデータを用意します。画面となる平面を空間上に配置する際に、各画素

に対して先程の変換を行い、好きな場所に正しい配列で画素を配置します。次に、視点から任意の画素 (s,t)を

通る直線を考えます。この時、計算の都合からこの直線を長さ 1の法線ベクトルと視点の座標の位置ベクトル

a⃗

で表します。

r⃗ = (x視点, y視点, z視点) + a⃗

 このようにすると、この式は rについての二次方程式なので解の公式から rの解を出し、より視点に近い

ほう(かつ、視点の後ろに回り込まないもの)を正しい値として採用し、変数 screendepth[s,t]に代入します。

screendepthは視点に一番近いオブジェクトの視点からの距離であり、もしこれより遠い値が入らないように

しておけば、二つの物体を重ね合わせたときに手前の物体だけが写るようになります。

4. 実際にプログラムを作ってみました。 さて、以上の要素を用いて、実際にプログラムを作ってみました。深夜テンションで作ったので部分的に

コードがめちゃくちゃなところもありますが……

Page 11: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

コンソールで 3Dモデリング —蒜石 7

 おぉ! うまく起動できたようです。球体が空間の中を周回運動しています。

 ……ところどころ冗談じゃないレベルで歪んでいますがどうなんでしょう。視点の置き方でミスしてる

かな……。

5. 結論・そもそもWindows標準の CUI環境だと文字がいきなり全部表示されず RPGのセリフみたいに時間差で

出てくるため、ゲームにならない。

・深夜にプログラミングはいろいろなものを犠牲にするので止めましょう。

・この記事も深夜 3時ごろ書いています。繰り返される哀しみ。

Page 12: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

8

2 マイコンとかの紹介的なもの

実は Arduino しか触ってないろぐろ

1. はじめに 新歓用の記事ということで、プロダクトの製作記を書いていたのですが、初っ端からややこしいことを載

せるのもどうかと思ったので、細かいことを気にしていない記事を書くことにしました。

2. マイコンとは マイコンはここではマイクロコントローラの略です。ICチップにプログラムを書き込んで周辺回路の動

作を制御します。有名なものでは、H8、PIC、AVR などがあるようです。

 マイコンボードという、周辺回路をまとめて一枚の基板にしたものがあります。Arduino、mbedなどが有

名です。Arduinoについては後で多少詳しく説明します。マイコンは一見するとただの ICチップにしか見え

ませんが、中にはコンピュータと同じ機能をもつ回路が入っています。現代のコンピュータではほとんど何で

もできますが、たとえば音楽再生の機能だけが必要なとき、たしかに PCでも音楽は再生できますが、大きす

ぎますし、スペックの無駄使いです。そういうときに、マイコンを使うと便利です。性能を絞っているので、

小型化に向いています。

 このサークル、東大マイコンクラブは 1976年設立だそうで、おそらく当時のマイコンブームで設立され

たのでしょう。昔はハード製作がメインだったようですが、昔の部誌を見てみたところ、2000年代前半あた

Page 13: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

マイコンとかの紹介的なもの —ろぐろ 9

りを境にソフト制作がメインになってきたようです。

3. Arduino とは  Arduinoとは、イタリアで開発されたマイコンボードとその開発環境です。ArduinoIDEという統合開発

環境を使って Arduinoに搭載されたマイコンにプログラムを書き込み、手軽に電子工作を行うことができま

す。マイコンの機能を、深い専門知識がなくても使えように作られています。また、マイコンと PCとの通信

もかなり簡単に行うことができます。

ところで、UTMC(東大マイコンクラブ)では、プログラミング講習会を予定しており、Processingという

プログラミング言語を扱う予定です。Arduinoは、PCからプログラムを書き込んで使用するのですが、そこ

で使われる言語が Processingをベースとしたものなので、Arduinoをすぐに扱えるようになると思います。

4. おわり マイコンを使って手軽に実体のあるものを作るのはとても面白いです。もしこの記事を読んでマイコンに

興味を持ったら是非学生会館の 314Bまでお越しください。

Page 14: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

10

3 ECCSの使い方mapi

1. はじめにこの記事は新入生を対象に、学内で使える教育用計算機システム ECCS(Educational Campuswide Computing

System)の利用の一助となることを目的としたものです。具体的には、情報 (一学期,必修)や情報科学 (二学

期,F系列)等の授業や、ALESS(1年次,必修)の授業準備(プレゼン作り等)で利用することになります。使

い方に慣れておくといろいろと捗ります。なお、ECCSの公式Webサイト *1にも詳しく案内が書いてありま

す。注意や規則などは一通り目を通すことをお勧めします。また、はいはーワークブック *2 にはコンピュー

タの基本的な使い方、各種ソフトウェアの使い方、一部プログラミング言語の紹介などか書かれています。本

記事は情報基盤センターとは無関係で非公式です。

2. 仕様ECCSでは端末として iMacが設置されていますが、その仕様は

• 21.5インチ Apple iMac

• Mac OSX 10.7とWindows7が動作

• Intel Core i5 2.5Hzクワッドコア

• メモリ 4GB

• DVD ± R DL,DVD± RW,CD-RW対応光学ドライブ

• 1920x1080ドット 21.5インチ

• 縦横スクロール可能な3ボタンレーザー式マウス

• Happy Hacking Keyboard Lite2 for Mac日本語配列

となっています。USBやプリンタ(有料)等も使えます。また、Microsoft Office製品をはじめとした多くの

ソフトウェアがインストールされています。

以下に Mac環境利用時のキー配置を示しておきます。

*1 http://www.ecc.u-tokyo.ac.jp/*2 http://hwb.ecc.u-tokyo.ac.jp/current/

Page 15: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

ECCSの使い方 — mapi 11

図 1 キーボード

3. 利用方法

3.1 場所

正門を入ってすぐ左、掲示板の隣にある情報教育棟、あるいは生協食堂隣の駒場図書館 1Fで利用できます。

3.2 起動

少しわかりづらいですが、モニタの裏面のモニタの正面から左下にあるパワーボタンを押して起動します。

3.3 OSの選択

端末起動後に、Windows環境と Mac環境のいずれかを選択できます。授業では基本的に Macを使います。

3.4 ログイン

環境を選ぶと、ログイン画面が現れます。ユーザー ID は学生証右下の末尾の 10桁の数字です。パスワー

ドは教養学部ガイダンスで配布されますが、セキュアWWWサーバ *3で変更することができます。ただしパ

スワードの有効期限は最長 1年間なので、定期的なパスワードの変更をおすすめします。

3.5 その後

パソコンが使える!ハッピー!

4. システムこの節では、ECCSで利用可能なサービスについて説明します。

*3 https://secure.ecc.u-tokyo.ac.jp/

Page 16: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

12 UTMC Press 2015-4

4.1 ソフトウェア

ECCSの端末では、便利なものから多くの人には縁がなさそうなものまで、様々なソフトウェア、アプリ

ケーションを使うことができます。その一部を挙げると、

• Microsoft Office製品各種

• Finder(Windowsの Explorerにあたる)

• Safari(インターネットブラウザ)

• mi(テキストエディタ)

• Emacs(テキストエディタ)

• Vim (テキストエディタ)

• Mathematica(数学ソフト計算したりグラフをプロットしたりできます。)

• GIMP(画像編集ソフト)

• Inkscape(ベクター形式の画像編集ソフト)

• GarageBand(音楽ソフト)

• Eclipse(統合開発環境)

• グラブ(スクリーンショットを取る)

• TRR(タイピング練習ソフト)

• TEX(組版処理ソフト)

このように applicationフォルダにいろいろあります。TRRや TEXなどコマンドラインから起動するものも

あります。

4.2 印刷

情報教育棟の自習室や図書館の端末からプリンタを使うことができます。サイズは A4 か A3 のみ使えま

す。一枚の料金は白黒の場合 10円、カラーの場合 50円です。

1. 端末のアプリケーションの印刷メニューからプリンタに印刷命令を送ります。白黒の場合は

Main_Mono、カラーの場合は Main_Colorを選びます。

2. プリンタのもとへ向かいます。情報教育棟自習室の場合は、部屋の奥の小部屋にあります。端末は他の

人にいじられないようロックしておきましょう。

3. プリンタの隣にあるパソコンに、ユーザー ID とパスワードを入力します。

4. 印刷するジョブにチェックを入れて印刷を実行します。プリペイドカードか、Suicaや PASMOなどの

カードを挿入して料金を支払う必要があります。プリペイドカードは生協か図書館の自販機で購入でき

ます。

4.3 メール

ECCSアカウント 1つにつき、メールアドレス *4が 1つ配布されます。このアドレスのメールはMailSuite*5

で確認することが可能で、転送設定もここで行えます。

*4 (ECCSのユーザー名)@mail.ecc.u-tokyo.ac.jp*5 https://ms.ecc.u-tokyo.ac.jp/cgi-bin/index.cgi

Page 17: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

ECCSの使い方 — mapi 13

4.4 WebDAV

4.4.1 WebDAV とは

WebDAVは HTTPを拡張してWebサーバーのフォルダ、ファイル管理を可能にしたプロトコルです。これ

を使って、ECCS端末に保存したファイルを自宅 PCにダウンロードしたり、自宅 PCから端末にアップロー

ドしたりできます。また、端末の Mac環境とWindows環境間で相互にファイルへアクセスできます。

4.4.2 使い方

端末の Mac環境とWindows環境で異なります。ブラウザで、Mac環境は https://davm.ecc.u-tokyo.ac.jp/、

Windows環境は https://davw.ecc.u-tokyo.ac.jp/にアクセスしてください。ECCS公式サイト *6 の左下にリン

クがあります。アクセスしたら、ユーザー ID とパスワード(ECCSと同様)を入力してログインします。あ

とはファイルを自由にいじるだけです!

4.5 ITC-LMS

ITC-LMS(情報基盤センター学習管理システム)では、各授業の配布資料をダウンロードすることや、情報

系の授業では課題の提出、出欠の確認等を行うことが出来ます。ログイン用のユーザー名及びパスワードは

ECCSのものと同様です。

*6 http://www.ecc.u-tokyo.ac.jp/

Page 18: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

14

4 BGM を書きたいDTMへの一つの入口

Negotiator (@phai_bica)

1. イントロダクションまずは皆様ご入学おめでとうございます。UTMC の新歓に来てくださってありがとうございますです。

Negotiatorと申します。

UTMCでは部員はことあるごとに定期的に成果物を発表します *1。そういった成果物の中でポピュラーな

のがゲームです。

ゲームは触れる、動く、見ていてわかりやすいことが多いと三拍子揃っていてなおかつプログラミング、デ

ザイン、そして DTM など様々なリソース *2をまとめて発表する事ができる分野なのです。*3

この記事ではゲームのリソースの中でも、BGM を書くにはどうしたら良いか、また BGM書きの楽しさ *4

といった話をしてみようかと思います!

2. BGM is 楽しい

2.1 BGM はいつも脇役?

BGMというとどこか裏方、脇役っぽさがあったり、ゲームありきの音楽、作品としての独立性のなさを感

じるかもしれません。BGMはあくまでその画面を彩るものであって、決して主役になるものではない? *5そ

れは否定しきれません。できませんが、だからと言って BGMを書いても特に評価されないのかといえばそん

なことはありません。本当に誰も BGMに曲としての興味を見出さないならサントラなんてものが売れるはず

はありません。BGM が主役になることもあるのです。

2.2 BGM は捗る

BGMの重要性がそれなりに分かってきても、それでも積極的に BGMが書きたくなるほどではない、むし

ろ独立した曲を作りたい!なんで BGMなんか書くんだ!という人もいるでしょう。BGMなんか書いてて楽

しいのかと。

ところがこれがどうにも楽しいのです。楽しさとかいうものはどうしても個人的なものになるのでここから

は完全に主観になりますが、いくつか BGMを書くのが楽しい理由を上げてみましょう。

間違いなく出番がある

考えてみてください。普通に曲を書いてネットなどに発表したとしましょう。有名ボカロ P・トラック

*1 五月祭、駒場祭など

*2 材料のことをこう言うと業界っぽい

*3 逆に言うと全部揃えないといけないとm…(咳き込む)

*4 個人の感想です。

*5 音ゲーはある意味例外か。

Page 19: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

BGMを書きたい — Negotiator 15

メイカーなどであればともかく、はじめはまず人に曲を見つけてもらうのを期待するのが難しいです。

中々聞いてもらえません。鉄の意志があればこういう期間を乗り越えて有名になる事もできるのでしょ

うが、あまりこういう期間が長いとなぜ曲を書きたかったか忘れてしまうこともあります。

BGMはどうでしょうか? BGMであればゲームを手にとった人はほぼ必ず聞いてくれます。*6それに

曲を覚えてもらうことだって出来ます。印象深いシーン、よく見るシーンなどの BGM は無意識に覚

えてしまうことも多いのではないでしょうか。*7 このことを思うと BGM 書く手がちょっと軽くなり

ます。

ゲームからインスピレーションをもらえる

無から有を生み出すのは本当に難しいです。いくらやる気があったところで特に曲のストーリーやコン

セプトなども考えずに DAW を開いてもなにか書けることはまれです。また A メロが書けて後は思い

つかないので放置、ということもよくあります。*8

この点 BGM はとても有利です。「このステージで使う。氷っぽいステージ。」とか「まさかの隠しボ

ス!しかも頭おかしいくらい強い!」というようにコンセプトは曲ごとに決まっていることがほとんど

なのでまずこの時点で無から有を生み出す必要がなくなります。また、尺が決まっていることも多いの

で、曲の構成も固めやすいといえるでしょう。*9それだけでなく、ストーリーやグラフィックなどが決

まっている場合は曲の途中で行き詰まってもそういったものを見て展開をひらめくこともあります。ビ

バ・メディアミックス。

締め切りがある

これはコンピ CDとかに参加すればまあ BGMでなくても起こることなのですが、締め切りは完成への

強力な原動力です。出番があるということは締め切りを守らないとゲームの方に影響が出るということ

です。この緊張感は人を動かします!締め切りに追われながらであっても、完成した曲が締め切りに間

に合うのを見るとかなり作曲の自信がつくのでオススメです。

このように BGM書きはとても楽しい物なのです。次の章からはざっくり BGMの書き方を書いていきたい

と思います(私流)。

3. BGM はどうやって書くのか

3.1 用意するもの

DAW

以上です! *10

DAW は「楽譜を書いて」「自動演奏させて」「音をうまいこと混ぜて」「仕上げる」までを一気に行うことが

出来るソフトウェアです。色々な DAW がありますがフリーから試してみたいという方には Studio One free

をおすすめしておきます。これは音源もある程度揃っていますしエフェクトも最低限揃っていて練習に最適な

のです。最初からお金をかけたいという人には Cubaseや FL Studio*11、マカーなら Logic Proと言った選択

*6 音を切ってプレイするポリシーの持ち主とかでもない限りは

*7 トラウマ級に強いボスのテーマとか

*8 少なくとも私はあります

*9 15分位あるラスボス曲書けとか言われたら少し困りますが*10さすがに盛りました。midiキーボードというものがあると捗る。後サンプリング素材集とか。でも基本 DAW があれば出来ます。

*11 Studio Oneもしっかり有料版があります。

Page 20: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

16 UTMC Press 2015-4

肢があります。

なんにせよ基本的に BGM書きに必要なのはこの DAW だけです。パパっと手に入れてみましょう。

3.2 まず何から手を付けたらいいんだ

BGMを書くと言ってもまず何から手を付けたら良いのでしょう。いきなり DAW を開いても空のプロジェ

クトファイルが荒涼と広がるのみです。心細くなってきます。ああ書けなくなってきました!

まずは使う場面などに合わせてコンセプトを考えるといいでしょう。例えばジャンルはロックだとか、氷属

性なのでピアノを使うとか。特にジャンルが決まっているとかなり書きやすくなると思います。聞き慣れた

ジャンルを選んでおくとさらに早く書けます。

また、これは完全に私流でアレなのですが何か要素ごとに使うパーツを決めて組み合わせるということをす

ると割と捗ります。私の場合、「属性」を決めておいてそれごとに楽器などを決めたりします。火属性+風属

性とか。氷属性テクノとか。うお、なんか言ってて恥ずかしい。

一つの参考として私の場合の「属性表」を書いておきましょう。*12

火属性

熱い敵とか火事場とか。主にエレキギター・ブラス・ロックオルガン・エレキベースをつかう。

水属性

水が流れてそうな場所とか。主にストリングス、サイン波系のパッド、アコギ・コントラバスなども使

える。

氷属性

寒そうな場所や冷静な敵とか。主にピアノを使い、グロッケンやトライアングルのような金物を添

える。

風属性

疾走感がほしいとか風が吹いていそうな場所とか。主にバイオリンなどの立ち上がりの早いストリング

ス・コントラバス、フルートなどの木管楽器が便利。あっ木琴もイイですね。

雷属性

電気がよく流れてそうな場所とかロボ系の敵とか。主によく歪ませたエレキギター、ノコギリ波系のシ

ンセリード、ワブルベースなど。

光属性

神やらなにやら。主にパイプオルガンやクワイア(コーラス)などの宗教っぽい楽器を混ぜるとそれっ

ぽくなるが、混ぜ方に注意。ピアノやハープでキラキラ感を添えるのも良い。

闇属性

悪魔やら怖いものやら。派手な闇系ならパイプオルガンも役に立つが、そうでない場合音階のない楽器

などを少しずつ添えると暗さが出る。

無属性

あの、あるじゃないですかほら、無属性攻撃。レーザーとか。ノコギリ波リード、バイオリン、ピアノ、

サックスなんかは何にでも合うので無属性にもなりうるかもしれません。

こういう感じで使い慣れた楽器と使い方をセットにするとちょっと捗るかもしれません。お勧めです。

*12こういうものは個人ごとに出来上がっていくと思うのであまり縛られないでください。

Page 21: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

BGMを書きたい — Negotiator 17

3.3 下から固めていく

ここまでで大体「何のジャンルでどんな感じの楽器を使う」というところまで決まってきたかと思います。

こうなったら DAW を開いてなにか打ち込むことができます。まずは今まで決めたことに従って伴奏から仕上

げていきましょう。

といってもどうやって伴奏を作るのでしょう?これはやると決めたジャンルを普段からどれくらい聞いて分

析しているかによります。ネットでジャンルについて検索して特徴をおさえるもよし、耳コピしてノリを体に

覚え込ませるもよしです。特にドラムはノリを覚えると格段に打ち込みやすくなります。耳コピは相対音感を

鍛えればできるようになりますが、完コピまではしなくてもベースはどの程度動くものか、テンポはどの程度

か、どんな楽器が使われているかを抑えられればノリはまあまあ身につきます。こればかりはめんどくさいで

すがまあ一つ。あとは和音とコードというものがどんなものか、それはメロディーやベースとどう関わるか、

ちょびっとだけ勉強しておきましょう。わりとコード理論とか深く勉強するとどこまでも底がないので今回は

「和音に含まれるコードとベースの位置によってメロディとして使っていい音がある程度決まっている」

「和音を変える際には一定のルールが有る」

程度に省略しておきます。詳しくはまたいつか。

今回は例として「火属性ロック・隠し味に氷」を作る流れをさらっと紹介しましょう…サビっぽいものだけ

ですが。*13。ボス戦ということにしてみましょうか。

作っていく過程の音源を tmboxで載せておきますのでぜひ QRコードなどから聞いてみて下さい。耳コピ

の練習にもなります。

3.3.1 楽器を揃える

まずエレキギターは確定です。新しくトラックを作ってエレキギターを割り当てましょう。

次にベースはどうしましょうか。ゲームなのでちょっと迫力がほしいのでスラップベースにしておきま

しょう。

いい具合に生音系ドラムも導入しましょう。ロックドラムとかあれば完璧です。

ついでに派手にするためにロックオルガンも入れておきます。このへんはロックのオーソドックスな編成を

ググるなどしてぽぽっと決めることができます。

これだけだとちょっと無個性すぎるかもしれないので「氷属性」を用意しましょう。

ピアノとグロッケンを用意しておきます。これをどの辺で入れるかは曲を作ってる途中で考えるとしま

しょう。

楽器が揃ったのでまずはベースとコードでも考えてみましょう。

3.3.2 ベースとコードの配置

まずテンポを決めてみましょう。ボス戦なので少し早めで 150くらいにしてみましょう。

コードを決めると後々やりやすい場合はコードから決めます。メロディからがいい人はそちらからで構いま

せん。今回は例えばということで 4566のバリエーション(代理コードとかでちょびっと変えます)でいって

みます。

コードが決まったら、対応するベースをロックのノリに従って配置していきます。やりづらかったらドラ

ムを先に打っておいてノリを作るのもよいでしょう。

*13ロックと言っても色々くくりはありますが今回はそこはテキトーです。

Page 22: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

18 UTMC Press 2015-4

図 1 ベース。

http://tmbox.net/pl/784134

図 2 伴奏のベースとオルガン。

http://tmbox.net/pl/784145

ベースが乗ったら今度はコード系の楽器を置きます。このへんは曲の中でも出番を変えたりすると面白いか

もしれません。今回はオルガンをうまいこと使ってみましょう。

ここまで来るとまあ伴奏といえるものが出来てきます。うまくやると結構ノリがでてきます。

3.3.3 ドラムの配置

これはベース、コードと平行してやります。各ドラムの名前や音、位置はぐぐってみてください。

リズムのアクセントとなるバスドラムの位置はそのままノリを決めると思って打ち込みましょう。四つ打ち

もありです。今回はメタルっぽくひたすら 16分でうちます。多分ツインペダルか何かです。

次に重要なのがスネアドラムです。これはあまり多く打つと打ち込み臭さが出すぎるのでバスドラムと同じ

ようにアクセントを決めると思って打つといいでしょう。よくやるのは 2拍目と 4拍目に打つ方法です。

これだけだとなんとなく寂しいですしリズム感がいまいち出ません。そこでライドシンバルかハイハットを

四つ打ちなどの簡単なリズムで打ち込んでいきます。このリズム自体は単純でも、案外バスやスネアと絡み

合って複雑なリズムを産んでくれます。

基本的なリズムはこれで組めますから後は展開に応じて 1拍目などにクラッシュシンバルをおいたり、最後

の小節でハイタム・ミドルタム・ロータムを順番に連打してみたりするなどその他の楽器を加えてみましょう。

またバスやスネアにゴーストノート *14として、それぞれの音符の後ろにたまに弱い音符を重ねるなどして

色を付けるのもやるといいでしょう。

*14ドラマーの手癖などで生まれる音

Page 23: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

BGMを書きたい — Negotiator 19

図 3 ドラム。

http://tmbox.net/pl/784138

図 4 メロディのエレキギター。

http://tmbox.net/pl/784148

3.3.4 メロディの配置

これは非常に重要です。プレイヤーに届く音のうち、しっかり印象に残りやすいのはメロディではないで

しょうか。例えば昔聞いた BGMを思い出そうとするとまず出てくるのはメロディという人はかなり多いはず

です。

印象に残るはずのメロディはあまりダサいと悲しいです。力を入れて選びましょう。私の場合はでてきたメ

ロディを細かくいじったりしてひねりを加えるのをよくやります。

メロディを入れる音はコードに合った音を選びましょう。ただ一口に「コードに合った音」といっても割と

コードに合わせられる音は多いので *15己の経験や知識を生かさなければならないことも多々あります。少し

ずつ行きましょう。

今回は泣きギターみたいな感じにしてみましょう。ギターを弾くのを妄想しながら、ベロシティとピッチベ

ンドをペチペチいじってかっこ良くしましょう!

3.3.5 味付けをしよう

これで一応伴奏とメロディが揃ったことになります。このままでも BGMとしては使えますがいまいち個性

に欠けますし寂しいです。料理で言うとスパイスのかかっていない状態です。

ここに色々と味付けをすることで一味違う仕上がりにすることができます。今回はここに用意した「氷属

性」を味付けとしてふりかけてみましょう。

*15コードとスケールについてちょっと調べると大変奥深い世界が見られます。

Page 24: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

20 UTMC Press 2015-4

図 5 味付けのピアノとグロッケン。

http://tmbox.net/pl/784152

コードから音をばらしてピアノをちょっとずつ配置します。他にもグロッケンをまたコードに合わせてキラ

キラ配置していきます。

今回はこれくらいにしますが、他にもストリングスを付加したり工夫の仕方は色々あります。

ただ一つだけ気をつけておくべきことは音を増やし過ぎないことです。デジタルに記録できる音には限りが

あります。せっかくかいた音も音が多すぎると周波数帯がかぶってしまいキレイに聞こえなくなります。

このへんの話はミックスという工程に関わります。次の章で説明します!

3.3.6 ミックスをしよう

さてミックスの話をしましょう。これはいまいち DTM 始めたてだとわかりにくいですが、楽器の音にはそ

れぞれに「主に聞かせるべき周波数帯」と「聞かせなくても良い周波数帯」というものができます。*16

50-100Hzや 100-200Hz,200-1000Hz,...といったようにいろいろな部分で音を住み分け、無駄に音がぶつか

らないようにすることによって、よりキレイな音でよりキレのある音にすることができます。

ではどうやって音の住み分けを行うのでしょう?イコライザー (EQ) を使います。EQエフェクトを各ト

ラックに適用しましょう。

あとは音を聞きながら色々な帯域を切ったり強調したりして必要な帯域だけ抽出します。

これまた気をつけるべきは必要な帯域でもあまり音がぶつからないようにすることです。

また、曲を作る時に迫力のある音にするため、音圧を稼ぐということを行います。これはコンプレッサーを

使いますが、今回は複雑なのでカットします。*17

また、楽器の定位(パン振り)というものも行います。これは楽器が左右どちらのスピーカー寄りに聞こえ

るかの調節です。しっかり調節すると音に広がりが出ます。

これでほとんど完成です!ここまでのステップを書きだした(ミックスダウンした)もののことを 2mixと

呼びます。

一曲仕上げたら、あとは仕上げのマスタリングを行うだけです!

3.3.7 マスタリング

ここからはマスタリング、曲のまとめと仕上げということになります。元は CDなどに曲を収める際に音

量・音圧のバランスを揃えるための作業でしたが、最近はいっ曲ずつやることもあります。

マスタリングは無料の DAW(VSTに対応していないもの)だと行わないこともあります。また複数人で何

*16これは楽器をどう組み合わせるかによっても変わります。

*17気になったら言ってください。ミックス講習会とかやるかもしれません。

Page 25: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

BGMを書きたい — Negotiator 21

図 6 2mixです!

http://tmbox.net/pl/784156

図 7 マスタリング後の完成品。音量注意。

http://tmbox.net/pl/784124

曲も曲を書く時はマスタリングは一人がすべての曲についてやることもあります。

出来上がった 2mixにもう一度薄くコンプレッサーをかけ(必要なら余計な帯域を EQで少し削ったりし

て)、ステレオツールなどで右左のスピーカーから出る音のバランスを取ったら、リミッター(マキシマイ

ザー)をかけて音圧を揃えて終わりです。

さらっと書きましたがこれはわりと練習がいります。かく言う私もあまりうまくありません。

これで本当の本当に完成です!お疲れ様でした!あとはゲーム開発者に渡すなり自分のゲームに入れるなり

好きに使いましょう!!!

4. まとめといったような感じで BGMの書き方などを紹介してきましたがいかがでしょう。BGMを書きたくなって

きたりしましたでしょうか。

BGM書きは地味なイメージとは裏腹に結構楽しいものです。人と一緒にモノを作ることも出来ますしね。

もし BGMを書いてみたい、DTM をやってみたいと感じられたなら幸いです。

是非一緒に BGM 作ってみましょう!

Page 26: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

22

5 スクレイピングしてみようKuphony

1. スクレイピングとはネット上に公開されているデータを自由に扱えるように取得することを指します。

2. やってみる

2.1 環境を整える

スクレイピング用のライブラリは様々な言語で用意されていますが、ここでは Ruby+Mechanizeを使用しま

す。Mechanizeは日本語で落ちてる資料が多く使いやすい印象があります。

2.1.1 Ruby を導入する

Macの場合はすでに導入されているので何もしなくて良いです。*1Windowsはここ *2 から簡単に導入でき

るようです。

2.1.2 Mechanize を導入する

ターミナル orコマンドプロンプトを起動して gem install mechanizeと入力すれば終わりです。

2.2 Yahoo!のトップニュースタイトルを取得する

やりながらMechanizeの使い方を説明していきます。まず、mechanizeを使うことを明示する必要があるの

で require "mechanize"と宣言します。次にインスタンスを生成します。*3getメソッドを使用して Yahoo!トッ

プページを取得します。*4linksメソッドでリンクを配列で取得して、トップページのたった 6行で目標達成で

きました。

1 # m e c h a n i z eをロードする2 require "mechanize"3 #インスタンスを生成する4 agent = Mechanize.new()5 #ページを取得する6 page = agent.get("http ://www.yahoo.co.jp")7 #Yahoo!の ト ッ プ ニ ュ ー ス の タ イ ト ル を 表 示 す る8 for i in 4...129 p page.links[i].text

10 end11

12 ## ########結 果############13 #"バ ヌ ア ツ 首 都 9割 の 家 屋 崩 壊""14 #"ト ヨ タ の ベ ア 最 高 額 で 決 着 へ"

*1 古い OSバージョンの場合 Rubyも古くMechanizeが動かないことがあります。このときは rvmなどのバージョンマネージャーを用いて新しい系を入れると良いでしょう。

*2 http://rubyinstaller.org/*3 インスタンスという言葉を初めて聞いた、という方は仮想のブラウザを立ち上げた、ぐらいに思ってくれれば大丈夫です。

*4 URLをブラウザに打ち込みエンターキーを押すのと同じ操作です

Page 27: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

スクレイピングしてみよう — Kuphony 23

15 #"44年 ぶ り 小 牧 基 地 で 曲 技 飛 行"16 #"欠 陥 設 計? 大 渋 滞 の 海 老 名 JCT"17 #"佳 子 さ ま シ ャ ネ ル は 誤 報?"18 #" F 1ホンダ 完 走 で き て 驚 い た"19 #"波 瑠 夏 目 雅 子 を 思 わ す オ ー ラ"20 #"変 え な い 笑 点 20%超 え 連 発"

2.3 Yahoo!ファイナンスからトヨタ自動車の最新株価を取得する

先ほどより少し難しくなります。欲しいデータはリンクではないので searchメソッドを使って探してあげ

る必要があります。HTML タグや CLASS名を調べるときは Google Chromeの Developer Toolsを使うのが

おすすめです。

とはいえこれでもおよそ 10行で済みます。

1 # m e c h a n i z eをロードする2 require "mechanize"3 #インスタンスを生成する4 agent = Mechanize.new()5 #ページを取得する6 page = agent.get("http :// stocks.finance.yahoo.co.jp/stocks/detail /?code =7203.T")7 #ページ内から最新株価を取得する8 # s e a r c hメソッドで欲しいデータの箇所を指定する。ここは D e v e l o p e r T o o lで頑張って調べるしかない。9 # i n n e r _ t e x tメソッドはタグで囲まれた t e x tを返してくれるメソッド

10 search = page.search("td.stoksPrice"). inner_text11 array = search.split("\n")12 #欲しいデータ13 value = array [3]14 if value.include ?("---")15 p "currently unavailable"16 else17 value.gsub!(",","")18 value.gsub !(/ +/,"")19 p value.to_f20 end21

22 ## ########結 果############23 #8276.0

2.4 Amazon のウィッシュリストを取得する

これまでとは異なりログインが必要になるので面倒です。流れは

1. トップページにアクセスする

Page 28: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

24 UTMC Press 2015-4

2. ログイン画面に飛ぶ

3. フォームを入力してログインする

4. ウィッシュリストに飛ぶ

5. 商品名のリンクを取得する

6. 2ページ目以降も同様に取得する

といった感じです。細かい説明はソースコード内でします。

1 # m e c h a n i z eをロードする2 require "mechanize"3 #インスタンスを生成する4 agent = Mechanize.new()5 #アク禁を受けないようにブラウザを偽装6 agent.user_agent_alias = 'Windows IE 7'7 #ユーザー I D と パ ス ワ ー ド を セ ッ ト す る8 id = "hoge"9 pw = "fuga"

10 #変数をセットする11 mainurl = "http ://www.amazon.co.jp"12 wished_item_name = Array.new()13 wished_item_link = Array.new()14

15 #トップページからリンクを辿ってログインする16 page = agent.get(mainurl)17 #文字化けのリスクがあるので設定18 page.encoding = "Shift_JIS"19 #フォームに飛んでログイン20 # l i n k s _ w i t hメソッドが検索条件に当てはまる l i n kオブジェクトを配列で返してくれる21 # c l i c k メ ソ ッ ド で リ ン ク 先 の ペ ー ジ を 取 得 で き る22 page = page.links_with (:href => /signin /)[0]. click23

24 page.form.field_with (:type => 'email').value = id25 page.form.field_with (:type => 'password ').value = pw26 page = page.form.submit27 #ログインしたのでウィッシュリストにアクセスする28 page = agent.get("http ://www.amazon.co.jp/gp/registry/wishlist/")29 #ウィッシュリストのページに含まれるすべてのリンクを格納30 array = page.links31 #有効なリンクだけ取得する32 for i in 0... array.length33 if array[i].href.include ?("ttl")34 #不要な文字の削除する35 array[i].text.slice !(/\n /)36 array[i].text.slice !(/\n /)37 #配列に追加する38 wished_item_name.push(array[i].text)39 wished_item_link.push(array[i].href)40 end41 end42

43 #次ページのリンクを取得する44 search = page.search("li.a-last")45 attrurl = search.xpath("a").attr("href").value46

47 #2ページ目以降の処理をする48 while(attrurl != nil)# a t t r u r lが n i lになると b r e a kされるので意味はない49 url = mainurl + attrurl50 page = agent.get(url)51 page.encoding = 'Shift_JIS '52 array = page.links53 for i in 0... array.length54 if array[i].href.include ?("ttl")55 #不要な文字の削除56 array[i].text.slice !(/\n /)57 array[i].text.slice !(/\n /)58 wished_item_name.push(array[i].text)59 wished_item_link.push(array[i].href)60 end61 end62 search = page.search("li.a-last")63 begin64 attrurl = search.xpath("a").attr("href").value65 rescue => ex66 break67 end68 end69

Page 29: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

スクレイピングしてみよう — Kuphony 25

70 #結果を表示する71 for i in 0... wished_item_name.length72 p wished_item_name[i]73 p mainurl+wished_item_link[i]74 end75

76 ## ########結 果############77 #"ヨ ス ガ ノ ソ ラ 春 日 野 穹 黒 チ ャ イ ナ ド レ ス Ver. 1/7 完 成 品 フ ィ ギ ュ ア ( 宮 沢 模 型 流^^ e2 ^^80^^8 b通限定品) "78 #"http ://www.amazon.co.jp/dp/B00Q8JK4MG/ref=wl_it_dp_o_pC_S_ttl?_encoding=UTF8&colid=2 B19ZA4DCKY3W&coliid=I12O9T8FS0FI07"79 #"ハ イ プ リ エ ス テ ス ロ ロ ナ の ア ト リ エ ‾ ア ー ラ ン ド の 錬 金 術 士 ‾ ロ ロ ナ "80 #"http ://www.amazon.co.jp/dp/B007HY46M0/ref=wl_it_dp_o_pC_S_ttl?_encoding=UTF8&colid=2 B19ZA4DCKY3W&coliid=I1LN85S5F9GCPJ"81 #"ア イ ド ル マ ス タ ー シ ン デ レ ラ ガ ー ル ズ 神 崎 蘭 子 ア ニ バ ー サ リ ー プ リ ン セ ス Ve^^e2 ^^80^^8 br. ‾ 祝 宴 の 狂 乱 ‾ (1/8ス ケ ー ル ATBC -PVC 製 塗 装 済 み 完 成 品)"82 #"http ://www.amazon.co.jp/dp/B00Q48AHZ0/ref=wl_it_dp_o_pC_nS_ttl?_encoding=UTF8&colid =2 B19ZA4DCKY3W&coliid=I1CD4MHG7PDSFZ"83 #.84 #.85 #.

3. 最後にスクレイピングは目標が立てやすいのと少ない行数で済むので初めてのプログラミングにはちょうど良いと

思います。ここを出発点に一昔前の iGoogleみたいなマイページを作ると面白いかもしれません。

Page 30: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

26

6 そんな説明で大丈夫か

一番いいのを頼む

世外奇人 495 (神は言っている UTMCに入るべきだと)

1. はじめにこの記事では私が提供出来る講習会の候補を述べていくとしよう。コンピュータを使って何が出来るか……

勉強熱心な君には良いんじゃないかな。知りたいことがあったら、いつでも訊くといい。答えられることなら

答えよう。私が答えられるのは主に物理シミュレーション、社会シミュレーション、データ分析、ゲーム制作

(STG)、絵の描き方、くらいか。彫刻や版画でも構わないぞ。もっとも、私の専門は複雑系、特に経済物理だ

がね。人間の持つ唯一絶対の力は選択すること。自分にとって最良の未来を思い、選択していけ。

2. 物理シミュレーション物理シミュレーションとは、物理現象をコンピュータに計算させ、再現することだ。え、何のことだか分

からないって?テレビゲームとかでよく見る、物体が吹き飛んだり波がうねったり、そういうのさ、簡単には

な。電磁気や熱も出来るが……流体か粉体が君達には面白いんじゃないかな。流体っていうのは静止状態で剪

断力が働かない連続体……いや、気体と液体のことだと思ってくれ。これの計算が出来るようになると、自由

な水の動きを作れるのが楽しめるだろう。格子ガスオートマトンや格子ボルツマンといった手法を紹介しよ

う。いや、望むなら粒子法とかもっと別なのでも構わないが、その場合には偏微分方程式を覚悟する必要はあ

るな。粉体ってのは無数の粉の動きのことで……いや、済まない。説明するのも面倒なんでね、興味があれば

DEM(Discrete Element Method、個別要素法)でも調べてみるんだな。計算結果の可視化には POV-Rayとか、

いいんじゃないかな。

3. 社会シミュレーションこれは社会のある現象を何らかの仮定をおいてコンピュータ上に再現することだな。特に私が好むのはエー

ジェントベースシミュレーション (ABS)と呼ばれる類のものだ。これは単に数式を計算させていくだけのも

のではないぞ、実際にプログラムで人間を、仮想的にだがな、作るんだ。だから金融工学みたいな単なる数式

の羅列にはならないよ。人間個人の選好の違いや意思決定能力の限界など、人間の個性と多様な人間からなる

社会の複雑性、これを表現することが出来る。特に人間に学習能力を持たせると、奥深い動きが見られるぞ。

有名なシェリングの分居モデルとかを教えてやってもいいが……マイノリティゲーム (MG、Minority Game)

の方が問題に応じて派生が多く汎用性が高い、面白いと思うね。GCMG(Grand Canonical Minority Game)や

$-Game、MDRAG(Market-Directed Resource Allocation Game)とか、経済・金融系が私の詳しいところでは

あるが……望むなら交通やパケットのネットワークや脳のニューロン構造への応用も調べておくよ。MG関係

の他にも繰り返し囚人のジレンマや voterモデルなど、様々なものを提供しよう。

Page 31: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

そんな説明で大丈夫か —世外奇人 495 27

図 1 四重極イオントラップでの荷電粒子の挙動

4. データ分析所謂統計学を手計算では処理出来ない大量のデータに対して使ってみるというやつだな。高度なものは機械

学習とも呼ばれるか。いや、本当は区別があるんだが、まあいい。数値の羅列から法則を見つけたり、様々

なデータの 1セットをいくつかのグループ、つまりクラスに分類したり、何らかの数値を予想したりする。

ニューラルネットワークなり人工蜂コロニーアルゴリズムなり、色々ある、色々とな。現実世界のデータに対

して使うだけじゃなく、シミュレーションの結果が現実にどれだけ近いかの指標にも役立つ。また文章を対象

に行うものはテキストマイニングとか呼ばれたりして、そういうのも面白いんじゃないかな。

Page 32: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

28 UTMC Press 2015-4

図 2 ガラス玉の運動

5. ゲーム制作2Dのシューティングゲームについてなら結構説明出来る自信があるな。因みに私はケツイやエスプガルー

ダなら 1周クリア出来るよ、安心していい。東方は紅魔郷 EXくらいが限界だがね。時間があればアクション

ゲームとかも作ってみたいが、生憎時間が無いんでね。まあ、うちのサークルではみんな違うことやっている

し、大抵のジャンルなら誰かに訊けば分かるだろうよ。

6. 絵の描き方パースや陰影とかの技法の基本から人体の構造、絵を描く時と見る時の人間の認知システム……一通り簡単

な説明なら出来るだろう。かつてドット絵講習会はやったことがあるな。そして当サークルの伝統である版画

についても問題ない。

Page 33: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

そんな説明で大丈夫か —世外奇人 495 29

図 3 ある境界条件での熱平衡状態での温度分布

Page 34: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

30 UTMC Press 2015-4

図 4 GCMGのアルゴリズム

Page 35: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

そんな説明で大丈夫か —世外奇人 495 31

図 5 キャラクターの呼称の違いによって印象はどのように変わるか

図 6 長さの異なる移動平均から市場の性質を見る

Page 36: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

32

*あとがき *

春休みにタイに旅行に行きました。

バンコクにあるMBK というショッピングセンターには電気街があるということを聞いたので、ちょっと覗

いてみました。

ところが、電気街とは名ばかりのところでした。スマートホンを売っている店だけが大量にあるという状態

だったのです。秋葉原のように PCやジャンクパーツ、電子部品が売られているわけではありませんでした。

PCは高額であり、多くの人はウェブブラウズに使うので、おそらく比較的安いスマホでこと足りるので

しょう。

途上国用の廉価版スマホなどもあり、ぼくも一台手に入れました。

かつて日本の燃費の良い小型車が海外で売れたように、結局十分な性能で低コストなものが(シェア的な意

味で)勝つのだなあ、と思いました。

Page 37: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

33

Memo:

Page 38: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

34

Memo:

Page 39: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

35

Memo:

Page 40: MASM (Microsoft Macro Assembler), MS-VB …新入生の皆様、ご入学おめでとうございます。部長の蒜石(ひるいし)です。 東大マイコンクラブ、通称

9784201504017

1929404000005

UTMCBN978-4-2015-0401-7 C9404 ¥0E定価(本体オープン価格 +税)

UTMC Press 2015年 4月号

(新入生歓迎号)

2015年 4月 2日 初版印刷

2015年 4月 2日 初版発行

編 集 ろぐろ

表 紙 ろぐろ

印 刷 UTMC印刷局

発行所 東大マイコンクラブ (UTMC)

〒153-0041 東京都目黒区駒場 3丁目 8番 1号

東京大学教養学部学生会館 303号

電 話 03 (5454) 4343(呼)

e-mail [email protected]

URL http://www.komaba.utmc.or.jp/

©2015 UTMC Printed in Japan

落丁・乱丁は残部のある限りお取り替え致します。