2014年12月11日木曜日

SOLID 原則

ソフトウェアの設計の5つの原則。
ときどき、それぞれの名前を忘れるのでメモ。

1. SRP : Single Responsibility Principle (単一責任の原則)
2. OCP : Open-Closed Principle (オープン・クローズドの原則)
3. LSP : Liskov Substitution Principle (リスコフの置換原則)
4. ISP : Interface Segregation Principle (インターフェイス分離の原則)
5. DIP : Dependency Inversion Principle (依存関係逆転の原則)

(参考:ISBN4-7973-2336-1, ISBN978-4-87311-614-3)

2014年8月3日日曜日

ask のイメージ

askの日本語訳を調べると、
1. 尋ねる
2. 依頼する
3. 請求する
4. 招待する
5. 必要とする
が書かれているが、いずれも日本語の観点では類似性が乏しい。
askが表す意味の範囲と、日本語訳の個々の単語が表す意味の範囲が
うまい具合にずれているためであろう。

日本語訳から想起すると、ask x は、
「相手または何かからxに関する何かを引き出すようなイメージ」
に近いのではないだろうか。
さらに、引き出す行為に対して「お願いする」という雰囲気がくっついている。

こう考えると、
1. 尋ねる ← 相手からxに関する情報を引き出す。
2. 依頼する ← 相手からxに関する行動を引き出す。
3. 請求する← 相手から代金(=x)を引き出す。
4. 招待する ← xを自分のところに引き出す。
5. 必要とする ← xを自分のところに引っ張ってくる。
のようになり、範囲は広いが1つの単語で表せてもおかしくはない。

例えば、
I ask a job of you
は、
あなたに属する、仕事に対する行動を引き出す。→ あなたに仕事を依頼する。
となり、
I ask a question of him
は、
彼に属する、質問に関する情報を引き出す。→ 彼に質問する。
となる。

ところで、「〜に」を表すためにtoではなくてofを使うが、
これは、上の例にあるように「〜に属している何か」を引き出すので、
ofになるのだと理解することができる。

仮にtoを用いると、引っ張り出した「何か」の行き先がわからなくなり、
意味不明な文章となる。


………


ほんとかな!?

2014年7月21日月曜日

電磁波が渡り鳥の磁気コンパスに影響を与えているかも?

メモ。
doi:10.1038/nature.2014.15176
doi:10.1038/nature13334

人間の脳にも磁鉄鉱(Fe3O4)があるそうだ。
Joseph L. Kirschvink et al. "Magnetite biomineralization in the human brain," 1992
(http://www.pnas.org/content/89/16/7683.full.pdf)

2014年1月26日日曜日

buildbot + mercurial の使い方

次のような設定を行うと、リポジトリ変更時に自動的にビルドされるようになる。
buildbotはver.0.8.6を使用した。
buildbot関連のファイルを置くディレクトリを$workとする。

1. マスター用の設定ファイルを作る

cd $work
buildbot create-master master
cd master
cp master.cfg.sample master.cfg

2. master.cfg を変更する

2.1. CHANGESOURCES を変更する

もともとあったGitPollerを削除し、次の2行を追加する。
from buildbot.changes import pb
c['change_source'] = pb.PBChangeSource(port=9988, user='changeuser', passwd='password_xxx')
ただし、port, user, passwdは適切な値に変更する。

2.2. SCHEDULERS を変更する

SingleBranchScheduler の引数を変更する。
c['schedulers'].append(SingleBranchScheduler(
                         name="all",
                         branch="default",
                         builderNames=["runtests"]))
ブランチを使っていないなら、branchにはdefaultと指定する。
branch名の指定を誤ると、mercurialからアップデートが 通知されるだけになり、ビルドは実行されなくなる。

2.3. BUILDERS を変更する

git関連を削除して、次の行を追加する。
from buildbot.steps.source.mercurial import Mercurial
factory.addStep(Mercurial(repourl='/xxx/yyy/bb-test', mode='full',
                          method='fresh', branchType='inrepo'))
factory.addStep(ShellCommand(command=["./make.sh"]))
repourl はリポジトリのパス。
make.sh はビルドするためのスクリプト。
Makefileを使用しているなら、単にmakeでもよい。

2.4. リポジトリの設定をする

.hg/hgrc に次の内容を追加する。
[hooks]
changegroup.buildbot = python:buildbot.changes.hgbuildbot.hook

[hgbuildbot]
master = localhost:9988
auth = changeuser:password_xxx

3. slave を作る

cd $work
buildslave create-slave slave master example-slave pass

4. 動作させる

cd $work
buildbot start master
buildslave start slave
これで、リポジトリに変更をpushするだけで、変更が反映されたソースコードで 自動的にビルドされるようになる。