Multiscale 24f(数値計算におけるマルチスケール)



# name

ソフトウェア開発での必須スキルとなるTDD(test driven development, テスト駆動開発), class, refactoringを，Ruby言語で習得する


# [zoom link](https://kwansei-gakuin.zoom.us/j/82203994456?pwd=VUE1UjNCRXg1Y09XbjVPN1Vtb2hpdz09)

-   ミーティングID: 822 0399 4456
-   パスコード: 473581


# 最終課題

RubyでなんかCLA(自分の作業に便利な)を作って！

-   その作ったexecutableなCLAをgithubにあげる
-   README.mdで
    -   使用前の問題点
    -   使用法
    -   使ったcodeの簡単な解説
    -   使用後どれほど効率が上がったか
    -   を書く
-   LUNAにpdfを提出
    -   A4, 1-2pagesにまとめて
    -   citationをちゃんとしてね
    -   github(publicでなくていい)のlinkをcitationに
-   githubのcollaboratorに担当者のidを入れてください．
    -   わからなんだらお問い合わせください
-   提出期限は，24/1/17 24:00です．


# Schedule, text and movie

| data       | text                                                                                                                                                                                                                                                                                                               | title                                                                                |
|:-----------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------|
| d1 (9/20)  | preface, asura0                                                                                                                                                                                                                                                                                                    | 何でも自動化，粒度                                                                   |
| d2 (9/27)  | [my\_help, six things](https://qiita.com/daddygongon/private/2ec446359e1c25f1be1c)                                                                                                                                                                                                                                 | たった６つのこと                                                                     |
| d3 (10/4)  | TDD(leap year)                                                                                                                                                                                                                                                                                                     | テスト，テスト，テスト                                                               |
| d4 (10/11) | TDD(Roman numerals)                                                                                                                                                                                                                                                                                                |                                                                                      |
| d5 (10/18) | [TDD by Ruby](https://github.com/daddygongon/kend_beck_tdd)                                                                                                                                                                                                                                                        | 本家                                                                                 |
| d6 (10/25) |                                                                                                                                                                                                                                                                                                                    |                                                                                      |
| d7 (11/1)  |                                                                                                                                                                                                                                                                                                                    |                                                                                      |
| d8 (11/8)  | Pattern( [Matz](https://kwanseio365-my.sharepoint.com/:b:/g/personal/cru32369_nuc_kwansei_ac_jp/ESZRJ3WP7eRDm_8q4ySLpNsBZk5lkvUTfNoCer7sAdxiJw?e=dTjI1l)  [template](https://kwanseio365-my.sharepoint.com/:b:/g/personal/cru32369_nuc_kwansei_ac_jp/ET2R6ou2Zg5DrTXb2qWpGLIBgVDrlwe1Mj4DaK8p-3Jjzg?e=PCrbM1),     | ことば                                                                               |
| d9 (11/15) | [strategy](https://kwanseio365-my.sharepoint.com/:b:/g/personal/cru32369_nuc_kwansei_ac_jp/EYxFydoYPB1NjxtbdZiGYFIB0EtvBj6l60LvR8116FF5Qg?e=qGjnXW),                                                                                                                                                               |                                                                                      |
| d10(11/22) | [observer](https://kwanseio365-my.sharepoint.com/:b:/g/personal/cru32369_nuc_kwansei_ac_jp/ETOPV1aR51ROmKnA6fxiQSMBDlgaRuXnoTI8N5jmFomO1A?e=bgTXDT), [factory](https://kwanseio365-my.sharepoint.com/:b:/g/personal/cru32369_nuc_kwansei_ac_jp/EYYabmH-Q5tKmrIUhBFmWREB8jQJD0kfQyRj_TDGDQQpDg?e=5HBJdo)            |                                                                                      |
| d11(11/29) | DSL(Rakefile)                                                                                                                                                                                                                                                                                                      |                                                                                      |
| d12(12/6)  | [CoC](https://kwanseio365-my.sharepoint.com/:b:/g/personal/cru32369_nuc_kwansei_ac_jp/EdlkdT15n6dCrIK56BmsUWQBArKxG8j4G-3JyHNvIXP6cw?e=hQdJ8t),                                                                                                                                                                    |                                                                                      |
| d13(12/13) | [FSM](https://kwanseio365-my.sharepoint.com/:b:/g/personal/cru32369_nuc_kwansei_ac_jp/EfRIZxtfWVFGhpqY9HxoFooBO_iekLwLfJsyNtviDnhDdw?e=77IdKg)                                                                                                                                                                     | [qiita](https://qiita.com/daddygongon/items/c84eaea29a14a5d05945)                    |


# Multiscaleの意味

秋学期の間，講義に付き合っていただいてありがとうございます．コロナで君らの学生生活は埋まっちゃったと思うんですが，当初は，LUNAの提出先を開けるの忘れたり，Zoomの録画をどじったりして，ご迷惑をかけましたね．今でもですが．．．でも，教える側もこのドタバタを通して，いくつかのツールを有効に使うスキルを身につけました．Zoomとか手書き表示とかです．

さて，講義の題目のマルチスケールの意味についてです．この講義は20年やってきたんですが，当初は，物理のマルチスケール（オングストロームからマイクロメータ）で量子力学，分子動力学，モンテカルロ，有限要素法，フェーズフィールドといったそれぞれの手法を紹介していました．ところが，情報の学生に教えるにはあまりに物理なので，内容を再構成しようと思って徐々に変えてきました．そして今秋は，「コードもマルチスケールじゃね？」という方針に行きつきました．

粒度という概念を知っていますか？英語の直訳はgrain sizeですが，scaleと考えることもできます．コードでは，ループやifブロック，メソッド，クラスという感じで，対象とするコードの粒度が異なります．途中から紹介したデザインパターンは明らかにクラスレベルへの対処法をマニュアル化したものです．しかし，最後で紹介した新しいパターンとしての

-   CoC(Convention over configuration: 設定よりも規約)や
-   FSM(Finite state machine: 有限状態マシン,野田くん発音の指摘ありがとう，国際会議でも恥かいてます)

はアプリやメソッドレベルへのパターンです．さらに，テスト駆動開発は，全てのスケールで適用できます．そう考えると，RailsでブレークしたCoCパターンのうち，ファイルやディレクトリーの名前に意味を持たせるというのは，

    適切な変数名を考えることをスケールを変えて適用した

と捉えることができます．

このように言葉の持つイメージや概念をマルチスケールに膨らませれば，新しいイノベーションの可能性がいくらでも転がっているようです．事実，私も本業の数値計算で，これらの手法をqueueなんかに繋げて，スパコンスケールで活用しています．さらに，マシンスケールでシステムにしちゃうとどこで何を書いたかが覚えてられるから不思議です．

これらは，前人が残してくれた知恵の賜物です．特に授業でも紹介した，

-   Kent Beck, 'Test-Driven Development by Example', (Pearson, 2003).
    -   Kent Beck (著), 和田 卓人 (翻訳), 「テスト駆動開発」  (オーム社 2017).
-   Russ Olsen, 'Design Patterns in Ruby', (Addison-Wesley, 2007).
    -   ラス・オルセン, 「Rubyによるデザインパターン」(ピアソン桐原 2009).
-   David Thomas, Andrew Hunt, 'The Pragmatic Programmer: Your journey to mastery, 20th Anniversary Edition' (Addison-Wesley Professional 2019).
    -   David Thomas, Andrew Hunt, 「達人プログラマー(第2版): 熟達に向けたあなたの旅」(オーム社 2020).

には，ベストプラクティス(至宝の知恵)が詰まっています．結局，コーディングのスキルは，記憶を強化するコツの塊なんですよね．つまみ読みでいいんで，全文に目を通されることをお勧めします．あるいは，なんか行き詰まった時に読み返されることを．この講義が，いいコーディング習慣の一助になれば幸いです．


# d1, Ruby環境構築

-   <https://chat.openai.com>
-   win11上のWSLでemacs, ruby, fishをインストールする方法を教えてください．
-   Ruby言語でmy\_helpをインストールする方法を教えてください．



------
 - **source** ~/git_hub/ruby_docs/multi_scale_23/for_24f.org