ラベル 短期集中連載 の投稿を表示しています。 すべての投稿を表示
ラベル 短期集中連載 の投稿を表示しています。 すべての投稿を表示

2016/04/19

森上節



今わたしは非常にがんばっています。
さながら戦国時代の馬のように。


新しいB4も加わり、研究室に活気があります。
さながら戦国時代の戦のように。


研究は、去年自分の中では100点に近くがんばりました。
毎年人生で一番勉強してるなぁと感じています。
さながら平安時代の貴族のように。


正直、金崎先生は研究を行ううえで
最高の環境、想いを与え、もってくれている最高の方だと思います。
その想いに答えられるように日々努力をしていこうと思います。


B4は研究に向けて基礎勉強と自身の研究の選定

M1は研究の方針決めと授業

M2は就職活動と研究、さらに恋人探しや恋人探し。あと恋人探し


お台場でのイベントに向けての準備も他学生をも巻き込み進んでいます。


今年も1年つらいことも楽しいこともこのメンバーで乗り越えていければ
なにより幸せだと思います。
さながら少年時代の青春のように。

ではまた。
金崎研究室をよろしくお願いします!!!!!



P.S. 旅行に行きたいです。


2009/12/11

短期集中連載 第2弾 『Makefile』

皆さんスクリプトファイルについては大体理解できたと思うので、
今日はMakefileについて書きたいと思います。

≪Makefileとは≫
 結論から言うと、Makefileはたくさんのファイルのコンパイル方法を詰め込んだものです。
スクリプトファイルにもコンパイル方法を詰め込むことができますが、
Makefileの便利なとこは余計な処理をしないでくれることです。

例 ファイル main.f, subroutine1f, subroutine2
   の用に沢山のファイルから成る実行ファイルをコンパイルする場合、
   通常は

   g77 -c subroutine2.f
g77 -c subroutine1.f
g77 -c main.f
g77 -o main.exe subroutine2.o subroutine1.o main.o

   とします。スクリプトファイルでまとめておくと、
   subroutine2.f だけを変更したときもこの4個のコマンドを実行することになります。
プログラムが小さい時はこれでいいかもしれませんが、数値計算で大きなプログラムを
   コンパイルするときは毎回時間がかかって面倒です。
   しかし、Makefileであれば

   g77 -c subroutine2.f
g77 -o main.exe subroutine2.o subroutine1.o main.o

   だけを抜き出してくれます。

と便利なMakefileです。ではその書き方の基本を次で説明します。

/*-------------------------------------------------------------------------------*/
≪Makefileの最小単位≫
 さっきのプログラムを例にします。

ファイル    main.f, subroutine1f, subroutine2
実行ファイル main.exe

このときMakefileはこうなります。

#-----------------------------------------------#
main.exe : subroutine2.o subroutine1.o main.o
g77 -o subroutine2.o subroutine1.o main.o

subroutine2.o : subroutine2.f
g77 -c subroutine2.f

subroutine1.o : subroutine1.f
g77 -c subroutine1.f

main.o : main.f
g77 -c main.f
#------------------------------------------------#

見ると何となくわかると思いますが、説明します。

まず、文章の単位として2行ごとになっています。
Makefileは基本的にこの2行を作っていくことで作成します。

では、2行を日本語にしてみましょう。

(①作成ファイル名): (②材料ファイル名)
<*タブ>(③材料ファイルから作成ファイルを作るコマンド)
  ↑
スペースではない、必ずタブにする。

③について
  まずは③から説明します。ここには自分でコマンドを打つ時の文字を並べます。
  sample.f から sample.o を作る時は

  g77 -c sample.f

  としますね。これをそのまま打ち込みます。
①について
  次は①です。ここには③のコマンドで作成されるファイル名を記述します。
  上の例のsample.f ならば sample.o です。
②について
  最後に②です。ここには③のコマンドで使うファイル名を入れます。
  上の例の sample.f ならば sample.f なります。

以上①、②、③を入れていけばMakefileの最小単位について作成することができます。

/*-------------------------------------------------------------------------------*/
≪Makefileの仕組み≫
ここまでで、Makefileの最小単位について説明しました。
Makefileはこの最小単位となる2行を並べるだけなのか?
という問いに対する答えは“否”です。

では最小単位の2行をどうやって並べて行けばいいのか説明します。
さっきの例で気づいてる人もいると思いますが、ルールは
実行コマンドを逆から書いていく”です。
つまり、リンクコマンドは最後にやるから一番上に書く。
subroutine2.f, subroutine1.f, main.f のコンパイルは最初にやるから
下に書く。となります。
詳しくはmain.f とsubrouine2.f, subroutine1.f の依存関係などもありますが、
今は逆からコマンドを構成していくと覚えておけば問題ないでしょう。

さて、具体的なMakefileの動きを簡単に説明します。
さっきのMakefileはこうでした。(行番号は説明のためにつけました。)

   #-----------------------------------------------#
1 :main.exe : subroutine2.o subroutine1.o main.o
2 : g77 -o subroutine2.o subroutine1.o main.o
3 :
4 :subroutine2.o : subroutine2.f
5 : g77 -c subroutine2.f
6 :
7 :subroutine1.o : subroutine1.f
8 : g77 -c subroutine1.f
9 :
10:main.o : main.f
11: g77 -c main.f
   #------------------------------------------------#

(1) Makefileは1行目のmain.exe を作る材料ファイルsubroutine2.oを
現在のディレクトリで探します。
   コンパイルされてないならどのオブジェクトファイルもありません。
   (ファイルがあれば次のsubrouine1.o を探します。)

(2) Makefileは材料ファイルsubroutine2.o を作ろうとします。
   そのために3行目以降で作成ファイル名がsubroutine2.o となっている行を探します。
   (この場合4行目です。)

(3) 4行目にsubrouitne2.o が作成ファイル名になっていたので、
   Makefileは5行目のコマンドを実行します。
   これでsubrouitne2.oが作られます。

(4) subrouitne1.o について同じ手順を繰り返す。

(5) main.o について同じ手順を繰り返す。

(6) 1行目の材料ファイルがそろったので、
   2行目のコマンドを実行してmain.exe ができます。

以上がMakefileの動きです。

/*-------------------------------------------------------------------------------*/
≪まとめ≫
 ここまでの説明ではMakefileの有用性がわからないという人もいると思います。
なれないとスクリプトのほうが簡単にかけるので、それでいいじゃないかと思うかもしれません。
しかし、書いた内容はMakefileの入口の部分です。
ここでは書きませんでしたが、マクロサフィックスといったさらに便利な機能がMakefileにはあります。
これらの機能を使うと膨大なファイルを一気に処理できる、コンパイル環境に合わせて書き換えが簡単になる、などMakefileの大切さがわかると思います。TASやGAが簡単にコンパイルできるのはMakefileのおかげなのです。


これで金崎研究室の学生はMakefileについてわかったと思います。
油断しないでください。

2009/12/08

短期集中連載 第1弾 『sh ファイル(スクリプト)入門』

金崎研では数値計算をたくさんやるので、
同じ作業を30回やらないといけない場合がよくあります。
コマンドライン(cygwinなど)で計算の後処理とかやってると
わけわかんなくなってきます。
その時に役立つのが“スクリプトファイル”です。

/*-------------------------------------------------------*/
≪スクリプトファイルとは?≫
 スクリプトファイルとは簡単に言うとUNIXコマンドを並べたファイルということです。
同じ作業を何十回も繰り返す、決まった作業を勝手にやる、
などあらかじめ動作内容の分かっているときは
これを作ると操作がぐっと楽になります。

/*-------------------------------------------------------*/
≪Hallo World!!≫
 では、入門です。入門はやっぱりHallo World!!
まずは以下の文章を test.sc というファイルに入れてみよう。

#!/bin/shecho 'Hallo World!!'

こいつのいるディレクトリで

sh test.sc

と打つと Hallo World と表示されます。
これが一番簡単なスクリプトファイルです。
この例からわかるようにスクリプトファイルの中では 'ls, cd, echo' といった
通常のコマンドがそのまま使えます。

/*-------------------------------------------------------*/
≪繰り返し1≫
では同じ作業を繰り返したい時はどうすればいいのか?
それには

for i in N1 N2 N3
do
”何か作業”
done

とします。これは i に N1, N2, N3 と代入して繰り返す、という意味になります。
ここで注意するのは N1, N2, N3 は連続してなくてもいいということです。
では、具体例をあげましょう。
さっきの test.sc を以下のように書きなおします。

#!/bin/sh
for i in 10 20 30
do
echo $i
echo 'Hallo World!!'
done

こいつを同じように

sh test.sc

で作動させると、
10
Hallo World!!
20
Hallo World!!
30
Hallo World!!

のように表示されます。
i に10,20,30が順に代入されたうえでdo と done に挟まれた作業が繰り返されています。

/*-------------------------------------------------------*/
≪繰り返し2≫
しかし、このままでは30回同じ作業を繰り返す場合、

for i in 1 2 3 4 ..... 28 29 30
do
”何か作業”
done

としなくてはいけません。
30ならいいかもしれませんが、100とか200になったらめんどくさいです。
そこで seq を使います。
具体的には for の後の数字を$(seq 1 30)とすることです。
100 回 Hallo World!! を表示する時の test.sc は下のようになります。

#!/bin/sh
for i in $(seq 1 100)
do
echo $i
echo 'Hallo World!!'
done

これを作動させると

1
Hallo World!!
2
Hallo World!!
3
Hallo World!!


99
Hallo World!!
100
Hallo World!!

の出力を得られます。

/*-------------------------------------------------------*/
≪繰り返し3≫
 最後に30個のフォルダを一度に作るスクリプトを組んでみましょう。
ファイル名を 'dir30.sc' とします。ファイルの中身は以下

#!/bin/sh
for i in $(seq 1 30)
do
mkdir $i
done

これを作動させると、名前が1-30となっているフォルダができています。

/*-------------------------------------------------------*/
≪まとめ≫
 ここまでの内容を応用することで、単純作業をかなり簡略化できます。
皆さん頑張ってください。

/*-------------------------------------------------------*/
≪執筆後≫
 すごい疲れました。わかりにくい、ここどうなってんだ?、うまくいかない、などの感想待ってます。


次回は
 短期集中連載 第2弾 『Makefile


ならたく