Tarzan 2011 11/24号 睡眠&入浴

以下は、「Tarzan 2011 11/24号 睡眠&入浴」を参考にして「快眠」について書いたものです。
(ちなみに去年も同じようなタイトルで特集していた。)

■はじめに
とある勉強会の会場で、何やら気になる特集をしていたこの雑誌を見つけたのがきっかけで、睡眠のメカニズムや快眠するために必要な行動や就寝環境などについて詳しく説明されていたので、今回ブログにまとめてみることにしました。

忙しい人は誰しも睡眠の改善を図りたいと思うのは当然の事ですよね。
例えば、この時期に卒論、修論、博論などで睡眠不足な方のために何か役に立つ情報があれば幸いです。

では、これを見て勉強して、快眠できるように頑張って下さい!

■「快眠」記事まとめ
快眠するためにはどうすればいいの?
就寝3時間くらい前に入浴で体を温める
眠りに入る3時間前から体温を意識的に上げて、そこから一気に体温を下げていくことができれば快眠できるようになります。そしてこの落差が大きければ大きいほど、安らかな眠りにつけます(-_-)zzz したがって、この原理を利用するなら、就寝の約3時間前に入浴で体を温めておきましょう。

朝、目覚めた時に一番にすべきことは?
窓のカーテンを開けて太陽の光を浴びる
太陽の光情報を受けることで初めて一日の体内時計リズムが発動し、体は1日24時間かけて回転する地球の自転にリセットされます。ちなみに、人が持っている体内時計の周期は約25時間なので、朝の光情報がなければ、定時に起きてその日の夜は快眠するというリズムを作ることが難しくなります。これは実際に自分も行っていますが、かなり眩しいです(*_*)

眠りに効く理想の朝食は?
できれば和食の朝ごはんがよい
脳の体内時計をリセットするトリガーは朝の光情報。
これに対して、全身に存在する末梢の体内時計の時計合わせ、例えば、腸や肝臓などの消化器に存在する体内時計のトリガーには食事が必要になります。食物を口にして消化することで、各臓器の体内リズムはリセットされます。メニューとしては、低脂肪で食事後のエネルギー代謝量が大きい和朝食の方がおすすめです(^ ^)

朝、眠くても運動した方がいい?
通勤時などを利用して毎日した方がいい
消化器に存在する体内時計のトリガーは食事。
これに対して、骨や筋肉に存在する時計のリセットには運動が必要になります。骨は重力がかかること、筋肉は適度に収縮することがそれぞれの体内時計を中枢のマスタークロックに同調させる因子となります。朝の同じ時間帯に骨や筋肉に刺激を与えるために、例えば通勤時に交通機関を使わないで歩いて運動することなどが重要になってきます。自分も最寄り駅までは敢えて歩いて(走って)ますε≡≡ヘ( ´Д`)ノ

休日の朝、睡眠時間は増やしたほうがいい?
1〜2時間くらいは長く寝てもいい
休日には心ゆくまで寝たいという人もいるとは思いますが、これは逆効果です。平日より早く起きる必要はないにしろ、普段より3時間以上睡眠時間を長く取ってしまうと、平日の昼間に眠気を覚えたり、悪くするとうつ症状が表れたりすることもあります(´・ω・`)

昼間眠い時は昼寝をしてもいい?
30分くらいまでなら問題ない 昼寝前にコーヒーを飲んでおくと効果的
乱れた体内時計のリズムが整うまでは、昼間に眠気に襲われることもあります。そんな時は昼寝を積極的に取り入れてしまうのも有効な手です。むしろ推奨したい習慣でもあります。睡眠圧が高まり始める15時くらいまでの時間を見計らって、ウトウト眠った方が、脳も体もシャキッとします。これが眠気解消のコツです。しかし、15時以降の昼寝は夜の睡眠に響くので控えた方が無難です。睡眠時間は20〜30分程度がよくて、それ以上寝てしまうと深い睡眠に入ってしまい、起きてからかえってボーッとしてしまいます。そこでおすすめなのが、昼寝をする前に1杯のコーヒーを飲んでおくこと。カフェインが吸収されて体が覚醒するまでに約30分かかります。ちょうどカフェインが作用する頃に目を覚ませば、さらにシャキッと起きられるわけです(`・ω・´)

1日3度の食事のタイミングはどうすべき?
朝、昼、晩6時間ごとに食べる
朝食は末梢の体内時計をリセットするため、起床後1時間以内に摂り、昼食はその6時間後、血糖値が低下しすぎない範囲内でいただきます。夕食も同じ。1回の夜食で体内時計のリズムが乱れてしまうこともあります。夕食は最低でも9時までに済ませるのがよいでしょう(´〜`)モグモグ食物の体への吸収率や脂肪の合成力は時間帯によって大きく異なります。総じて日中より夜間の方が吸収率が高くて脂肪が合成されやすいことが知られています。

夜の寝る前のメールチェック、是か非か?
非。翌朝一番にしたほうがいい
夜寝る前に、念のためメールを確認したら、やるべきことが発生し、そのままパソコン作業に突入なんて経験、誰しも覚えがあるでしょう。うまく寝付けない原因は、まさにここにあります。夜帰宅したらパソコンはもう開かずに思い切って早めに寝てしまう。メールの対処は翌朝早めに起きて行えば、大抵の場合は事足りるはずです。もちろん携帯メールも同様でベッドまで携帯を持ち込むのは厳禁です。

リビングや寝室の温度設定は?
暑くも寒くもないレベルに設定する
最も快適に眠れる寝床内温度は31〜33度と言われています。これ以上高かったり、逆に低すぎると、末梢の血管が収縮して、体温を上手く体から逃せなくなってしまいます。心地よく眠りにつくための条件が体温を下げることであるのは前述の通りです。これからの季節、布団の中は適度に温めておいて構わないですが、その代わりに室温は暑くもなく寒くもないくらいの温度設定にしておくのが基本です。

ソファなどで眠れるなら、わざわざベッドに行かなくてもいい?
ウトウトした状態でもベッドに向かう
快眠するためには基本的に横になることが最低限必要です。体を起こした状態であると、足や手の末端の血液を上に運ばなければならないため、体を目覚めさせる交感神経が活性化してしまいます。寝返りを打てないような状況で眠ると、同じ姿勢を取り続けることで特定の血管が圧迫されてしまい、眠りの質が悪くなることも知られています/(ToT)\

アイマスクって意味あるの?
なかなか眠れない理由の一つが光
瞼を閉じていても、人の目は光を敏感に感じ取ってしまいます。完全に光を遮断して闇を作り出すのにアイマスクは有効です。また、アイマスクで瞼に圧がかかると、自律神経の副交感神経が働き始め、昂ぶっていた神経が落ち着き始め、やがて眠りへと誘われることにもなります。

寝入りやすくするコツはあるの?
寝る前にコップ一杯の水を飲む
入眠後の適度な発汗で深い眠りに入れます。

■さいごに
これからいろんなサイトを見ていく中で、これ以外にも「快眠」についての有用な情報があったら逐一このブログに追加していくつもりです。
気になる人は、ぜひチェックしておいて下さい。

MacでSRILMを利用してGoogle N-gramから言語モデルを作成する

N-gram言語モデルを学習するツールとして有名なSRILMをMacにインストールして、さらにGoogle N-gramを使って言語モデルを作成してみました。

■SRILMについて
SRILM(The SRI Language Modeling Toolkit)は、統計的言語モデルの学習ツールとして主に音声認識、タグ付け、セグメンテーション、機械翻訳などの分野で利用され、1995年にSRI International's STAR Laboratoryで開発されました。
SRILMは以下のような構成要素からなっています。

  • 多くの機能をサポートした言語モデルを実装したC++クラスライブラリ
  • これらのライブラリと依存関係のある実行プログラム
  • 雑多のタスクを容易にするスクリプトファイル

また、動作環境としてWindows, UNIX, MacOSXなどのプラットフォームで動作し、多くの統計モデルに応用されています。



■SRILMのダウンロード
まずは以下のサイトからソースを無料でダウンロードしてきます。
登録の際には、名前、所属、住所、メールアドレスなどを入力する必要があります。
SRILM Download



■SRILMのインストール
次に、以下の手順に従ってインストールしていきます。

解凍・展開
ここでの注意点として、解凍するとその場で展開されてしまうので適当なディレクトリ(作成したsrilm/など)で行うようにします。

$ mkdir srilm
$ mv srilm.tgz srilm/
$ cd srilm
$ tar -xvzf srilm.tgz

Makefileにはいろんなオプションがありますが、環境変数SRILMにはカレントディレクトリを指定して、プラットフォームを自動的に認識しないようであれば環境変数MACHINE_TYPEを明示的に指定します。

$ make SRILM=$PWD (MACHINE_TYPE=macosx)

環境変数の設定
コンパイルする前に各種パスなどを通しておく必要があります。
そのための環境変数の設定は以下のようになります。

export SRILM=[SRILMをインストールしたディレクトリ]
export MACHINE_TYPE=macosx
export PATH=$PATH:$SRILM/bin:$SRILM/bin/macosx
export MANPATH=$MANPATH:$SRILM/man

MacOSXのターミナルでbash/zshを使っている場合は、自分の.bashrc/.zshrcに上の4行を追加して下さい。

また、環境変数を有効にするために以下のコマンドを実行します。


$ source ~/.bashrc

$ source ~/.zshrc

コンパイル

$ make World
$ make all

コンパイル時にTclが使えない環境のためにtcl.hが無いというエラーが出る場合には、TCL_INCLUDE及びTCL_LIBRARYに正しいパスを設定した後にmakeするか、make Worldを以下のように指定して実行する必要があります。

$ make TCL_INCLUDE="" TCL_LIBRARY="" NO_TCL=X World

これにより、$SRILM/binにプラットフォーム非依存なプログラムが、$SRILM/bin/$MACHINE_TYPEにプラットフォーム依存のプログラムがインストールされます。
最終的に、プログラムが正しく動作しているかを確認するためには、

$ make test

を行い、これが通れば使用可能となります。



■大規模日本語Google N-gramについて
Webから抽出した約200億文(約2550億文単語)の日本語データから作成したN-gramデータであり、出現頻度が20回以上の1〜7-gramまでが収録されています。データの配布は言語資源協会(GSK)を通じて行われ、詳細についてはhttp://www.gsk.or.jp/catalog/GSK2007-C/catalog.htmlで確認できます。
ディスクは全部で6枚(Vol.1〜Vol.6)あって、各ディスク内に置いてあるNgmのzipファイルを足し合わせると完成になります。また、今後の説明において、1gmフォルダ内のvocab.gzは解凍してあるものとします。(これを vocab.txt とする。)
ちなみに、このGoogle N-gramは工藤氏と賀沢氏が「20%ルール(勤務時間の20%を自分の好きなことに使ってよい、という社内ルール)」を利用して出した成果のようです。噂のルールはほんとにあったんですね。
実際のデータの中身は以下のようになっています。

  • 総単語数 : 255,198,240,937 (2550億)
  • 総文数 : 20,036,793,177 (200億)
  • 異なり 1-gram 数 : 2,565,424
  • 異なり 2-gram 数 : 80,513,289
  • 異なり 3-gram 数 : 394,482,216
  • 異なり 4-gram 数 : 707,787,333
  • 異なり 5-gram 数 : 776,378,943
  • 異なり 6-gram 数 : 688,782,933
  • 異なり 7-gram 数 : 570,204,252

Google N-gram言語モデルの作成
Google N-gramの全ての語彙を使用すると数100GBのメモリが必要になってくるので、例えば単語の出現頻度が10,000以上のものを使用するなどしてGoogle N-gramをフィルタリングして使う必要があります。
以下では、5-gramで構成する場合について説明していきます。

必要な各種ファイル
まず、N-gram言語モデルの作成には以下のファイルが必要になります。

  • tune.txt : フィルタリング用のファイル
  • tune.vocab : フィルタリング用ファイルから作った語彙ファイル
  • google.aliases : 混在スペル整形用ファイル
  • google.countlm.0 : 初期パラメータファイル


各種ファイルの作成方法
tune.txtは単語とその出現頻度がスペース区切りで1行ごとに並んだファイル(vocab.txt)から出現頻度が10,000以上のものだけを抽出して作成します。
(大規模すぎる元ファイルから使用範囲を制限することでHDDがスワップするのを防ぐのが目的。)

次に、tune.txtを用いて以下のSRILMのコマンドによりtune.vocabを作成します。
オプションは必要に応じて適宜指定して下さい。

$ ./ngram-count -text tune.txt -write-vocab tune.vocab

google.aliasesについては以下をコピペして作成します。

 <S> <s>
 </S> </s>
 <UNK> <unk>

google.countlm.0については以下をコピペして作成します。
太字のPATHの部分はN-gramデータ(1gms/, 2gms/など)のあるディレクトリの絶対パスを指定して下さい。
例えば、自分の場合は C:/GoogleNgram/data にしました。

order 5
vocabsize 13588391
totalcount 1024908267229
countmodulus 40
mixweights 15
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5
google-counts PATH

言語モデルの作成
以下のSRILMのコマンドを実行することによりGoogle N-gram言語モデル(google.countlm)を作成します。オプションは必要に応じて適宜指定して下さい。

$ ./ngram-count -debug 1 -order 5 -count-lm \
     -text tune.txt -vocab tune.vocab \
     -vocab-aliases google.aliases \
     -limit-vocab \
     -init-lm google.countlm.0 \
     -em-iters 100 \
     -lm google.countlm

ここで、Google N-gramを使って作成されたgoogle.countlmが普通の言語モデルと形式が異なっているのは、初期パラメータファイルの形式に依存しているためです。
ちなみに、Google N-gram全てを使用したい場合には、上記のコマンドの

-text tune.txt -vocab tune.vocab

-text tune.txt -vocab [1gms/のあるディレクトリ]/vocab

のようにGoogle N-gramの1gmsにあるvocabを指定すればいいとの事です。



Google N-gram言語モデルの動作テスト
最後に作成したGoogle N-gram言語モデルを用いて動作テストします。

必要な各種ファイル
まず、N-gram言語モデルの動作テストには以下のファイルが必要になります。

  • test.txt : テスト用のファイル
  • test.vocab : テスト用ファイルから作った語彙ファイル
  • google.aliases : 混在スペル整形用ファイル
  • google.countlm : 作成したGoogle N-gram言語モデル

各種ファイルの作成方法
上記の言語モデルを作成した時と同じ方法であるので割愛します。

動作テスト
以下のSRILMのコマンドを実行することによりGoogle N-gram言語モデルの動作をテストデータを使って確認します。
オプションは必要に応じて適宜指定して下さい。

$ ./ngram -debug 2 -order 5 -count-lm \
     -lm google.countlm \
     -vocab test.vocab \
     -vocab-aliases google.aliases \
     -limit-vocab \
     -ppl test.txt > test.ppl

最終的にtest.pplが作成されます。
Googleのデータは大文字と小文字が混在したスペルを使用していることに注意する必要があります。全ての混在スペルを小文字に変換して言語モデルに適用するために-vocab-aliasesオプションを利用しています。-vocab-aliasesオプションを利用するためには十分に豊富な混在スペル整形用ファイルを用意する必要があります。このような混在スペル整形用ファイルは、tune.txtやtest.txtに出現する単語によりそれぞれ制限されなければなりません。



■参考にしたページ
SRILM-FAQ
SRILMインストール - (wrist blog)
http://d.hatena.ne.jp/nokuno/20110906/1315316756
http://www.sp.m.is.nagoya-u.ac.jp/~ohashi/2011/12/13/36/
http://nlp.nagaokaut.ac.jp/SRILM
Google Japan Blog: 大規模日本語 n-gram データの公開

svnとgitのコマンド比較

配属された研究室あるいは職場などで共同作業をする時に、svnやgitなどのバージョン管理システム(Version Control System:VCS)を使う機会が多くなると思います。

最近では、Googleをはじめ多くの企業が大規模プロジェクトでgitによるVCSを採用しており、svnからgitに移行する人が多くなっているとの事でした。それで、コマンドの対応表なんかあったら便利だろうと思ってブログを書いていたのですが、自分が作ろうとしている内容と似たようなサイトをいくつか散見してしまい、急に面倒くさくなって更新が遅れてました(汗)。新規性を発揮するのって難しいものですね、研究でもブログでも…

それでも今回は、一応、自分なりにsvnとgitについてまとめてみることにしました。

ここで最初に断っておきますが、分散管理型VCS(後述)には他にmercurialやbazzarなどがあります。しかし、世の中のシェアを見てみると、どうやら

git > mercurial > bazzar

のようなので今回はgitだけを中央管理型VCS(後述)であるsvnの比較対象として扱うことにしました。

VCSでは、「バージョン」やら「リポジトリ」やら難しい単語が出てきますが、ちゃんと使えるようになると非常に便利な機能だと思うので、ぜひこの機会に使い方を覚えてしまいましょう!
(あと、結構あやふやなので間違ってる可能性もあります。指摘して頂ければ修正致します。)

■語句の説明
まず、今回よく出てくる語句について簡単に説明しておきます。

  • バージョン:プログラムが最初に開発されてから何回修正されたかを示す番号のこと
  • リポジトリ:ファイルの履歴情報などがファイルシステムツリーの形で保存されたデータベースのこと
  • リビジョン:リポジトリ全体に付けられる変更後の状態を表す番号のこと
  • 作業(ワーキング)コピー:既存のリポジトリから複製した自分だけのローカルなリポジトリのこと

svnとgitの比較
そもそもsvnとgitの違いは何なのかというと、svnは中央管理型、gitは分散管理型のバージョン管理システムであるということで、svnは中央のリポジトリに対してコミットを行っていくのに対して、gitは各ユーザが持つローカルのリポジトリに対してコミットを行います。

gitでは、ローカルのリポジトリの内容を中央のリポジトリに反映したり、他のユーザが持つリポジトリを取得したり反映したりできるので、あらゆる環境で分散して管理できます。ローカルにリポジトリがあるので、ノートPCを持ってどこでも開発することができますし、コミットしてもローカルリポジトリに反映されるだけなので、気軽に何度でもコミットできるのも便利です。そして、本当に必要な変更だけをマスターリポジトリに反映させて履歴に残すことができるのです。

しかし、gitはsvnに比べて自分が管理者になる必要がある分だけ覚えなければならない事も多く、コマンドも多くて複雑です。
このため、初心者にとって敷居が高いように感じられますが、svnに慣れていればそんなに難しいことはないと思います。

ここで、細かい操作方法の説明に入る前にsvnとgitの違いについて簡単に箇条書きにしてみました。
以下のsvnとgitの各番号はそれぞれ対応関係にあるものとします。

svn

  1. 中央管理型VCS(中央リポジトリ)
  2. コミットはマスターリポジトリに対して行う
  3. コミットしたらすぐに反映される
  4. addを行うのは新規のファイルを追加する時だけ
  5. リビジョン番号は10進数の数値
  6. .svnディレクトリがサブディレクトリにまで展開される
    (Subversion 1.7よりルートディレクトリにのみ.svnディレクトリが作成されるようになりました。)←2013/5/8追加
  7. ファイルやディレクトリの移動を行うときはsvn copyやsvn moveコマンドを使う必要がある
    (.svnが全ディレクトリに展開されるため)
  8. ファイルロック機能がある

git

  1. 分散管理型VCS(分散リポジトリ)
  2. コミットはローカルリポジトリに対して行う
  3. コミットしてもローカルリポジトリに反映されるだけ(マスターリポジトリに反映させるためにはpushを行う(2段階))
  4. コミットの前に毎回addする必要がある
  5. リビジョン番号は16進数のハッシュ値
  6. 「ローカル」「インデックス」「ローカルリポジトリ」「マスターリポジトリ」の4つ
  7. .gitディレクトリがルートディレクトリにのみ置かれる
  8. 通常通りエクスプローラでドラッグ&ドロップするだけで、ファイルやディレクトリのコピー/移動ができる。
    もちろんコマンドを使っても良い
  9. ファイルロック機能はない

svnとgitの操作方法
以下では、特定のタスクを行うコマンドを左側にsvn、右側にgitで示すことにしました。これらのコマンドはほぼ同じ動作をするものです。

また、説明を簡略化するために、以下のように文字を定義しておきました。

リポジトリのURL形式
リポジトリは情報をファイルシステムツリーの形で保持します。
svnやgitではリポジトリにアクセスするための場所はURLによって表現され、以下のような形式があります。

・主なリポジトリのURL形式

リポジトリの作成

svnやgitリポジトリを作成する。これをやらないと何も始まらない。

svnの場合 gitの場合
$ svnadmin create [REPO] $ cd [REPO]
$ git init

git initコマンドを実行すると、カレントディレクトリに.gitディレクトリが作成され、gitリポジトリの管理ファイルがこの中に作成される。(なお、古いバージョンのgitの場合には、git init dbコマンドで実行するらしい。)

また、svnやgitでは以下のようなディレクトリを各プロジェクトのルートディレクトリ直下に作成する慣習になっている。

svn

  • trunk/:プロジェクトのメインとなるソースコードを管理して開発を進めていくところ
  • branches/:メインのソースコードに対して変更を行う場合にtrunk/から派生させて保存しておくところ
  • tags/:新バージョンをリリースする時などにその時点でのスナップショットを保存しておくところ

git

  • branches/:svnのtrunk/やbranches/を兼ねたようなところ
  • tags/:新バーションをリリースする時などにその時点でのスナップショットを保存しておくところ

gitにはtrunk/という概念はなく、branch間で主従関係を決めることでtrunk/(masterと呼ばれるベースになる主branch)の代わりを設けている。
リポジトリが複数プロジェクトを含む場合は、プロジェクトごとにレイアウトをインデックス化する。

モジュールの登録

新しいプロジェクトをリポジトリに登録する。

svnの場合 gitの場合
$ svn import [URL] $ git add .
$ git commit

svnでは登録時にディレクトリをURLで指定することができる。

作業コピーの取り出し

作業コピーをリポジトリから取り出すためにはsvn checkout/git cloneコマンドを用いる。

svnの場合 gitの場合
$ svn checkout [URL] ([DIR]) $ git clone [URL] ([DIR])

取り出し時にディレクトリをURLで指定する。また、作成するディレクトリ名を指定することもできる。
最新のリビジョンを取得するだけの目的でgit cloneコマンドを実行する場合は、「--depth」オプションで取得するリビジョン数を指定する。

どのリポジトリからcheckout/cloneしたかは次のコマンドで分かる。

svnの場合 gitの場合
$ svn info $ cd [REPO]
$ git remote -v

svn infoコマンドはsvnにしかない機能(git infoコマンドはない)であり、gitにおけるリポジトリの各種設定の情報は.git/config内に記録される。したがって、gitでは.git/config内を調べる必要があるのだが、サブディレクトリにいる時には開くまでが面倒であり、ファイルの中身が多すぎてURLを見つけ出すのも大変である。そこで、git configのgetでURLを取得する。

$ git config --list
$ emacs ~/.gitconfig
[alias]
url = config --get [URL]
$ git url

あるいはもっと簡単に、git remoteコマンドでURLを表示することもできる。
このコマンドでは複数のリモートサーバーを設定していればそれら全てのURLが表示される。

作業コピーの状態表示

作業コピーに加えられた変更点を表示するためにはsvn status/git statusコマンドを用いる。

svnの場合 gitの場合
$ svn status $ git status

引数なしで実行するとツリー全体の変更を表示できる。

ここで、svn statusコマンドの出力の行頭5桁の意味は以下のようになる。
1桁目ー追加/削除/変更など

  • ' ':no modifications
  • 'A':Added
  • 'C':Conflicted
  • 'D':Deleted
  • 'G':Merged
  • 'I':Ignored
  • 'M':Modified
  • 'R':Replaced
  • 'X':item is unversioned, but is used by an externals definition
  • '?':item is not under version control
  • '!':item is missing (removed by non-svn command) or incomplete
  • '~':versioned item obstructed by some item of a different kind

2桁目ーファイルやディレクトリの属性

  • ' ':no modifications
  • 'C':Conflicted
  • 'M':Modified

3桁目ー作業コピーのロック

  • ' ':not locked
  • 'L':locked

4桁目ー履歴付きの追加予告

  • ' ':no history scheduled with commit
  • '+':history scheduled with commit

5桁目ー作業コピーからブランチへのスイッチ

  • ' ':normal
  • 'S':switched

履歴の表示

ファイルやディレクトリの履歴を表示するためにはsvn log/git logコマンドを用いる。

svnの場合 gitの場合
$ svn log | less $ git log

コミットログは新しいものから順に表示される。

また、ファイル名やディレクトリ名を指定して履歴を見ることもできる。

svnの場合 gitの場合
$ svn log [FILE/DIR] $ git log [FILE/DIR]

特定のファイル/ディレクトリをその過去のバージョンと比較する場合、どのバージョンのファイル/ディレクトリと比較するかはリビジョン番号で指定する。

作業コピーの変更点の差分表示

ファイルに加えられた変更点を調べるためにはsvn diff/git diffコマンドを用いる。

svnの場合 gitの場合
$ svn diff | less $ git diff

また、リビジョン番号やURLを指定して変更点の差分を見ることもできる。

svnの場合 gitの場合
$ svn diff -r [REV] [URL] $ git diff [REV] [URL]

作業コピーの編集の取消

編集を取り消して最後にアップデートまたはコミットした内容に作業コピーを戻すためにはsvn revert/git checkoutコマンドを用いる。

svnの場合 gitの場合
$ svn revert [URL/REV] $ git checkout [URL/REV]

作業コピーの編集の反映

ファイル編集後に変更点をリポジトリに反映させるためにはsvn commit/git commitコマンドを用いる。

svnの場合 gitの場合
$ svn commit $ git commit -a
$ git push [URL]

git commit -aコマンドによりローカルリポジトリにコミットし(「-a」オプションにより変更が加えられたファイルを自動検出する)、その後にgit push [URL]コマンドにより他人のリポジトリにコミットする手順となる。
git pushコマンドにより自分の作業コピーの変更を他の作業コピーにも反映させる。

また、以下のようなオプションを任意で指定することができる。

  • --message(-m):ログメッセージの指定
  • --file:ファイル名の指定

ツリーの変更

・アイテムの追加
ファイルやディレクトリを追加するためにはsvn add/git addコマンドを用いる。

svnの場合 gitの場合
$ svn add [FILE] $ git add [FILE]
$ svn mkdir [DIR] $ git mkdir [DIR]

ただし、svn addコマンドはファイルやディレクトリをリポジトリに追加予告するだけで、リポジトリへの登録はコミットで行われる。
ディレクトリを追加するにはmkdirコマンドでディレクトリを作成しておいてsvn add/git addコマンドで作成する方法とsvn mkdir/git mkdirコマンドで一気にやってしまう方法がある。

・アイテムの削除
ファイルやディレクトリを削除するためにはsvn rm/git rmコマンドを用いる。

svnの場合 gitの場合
$ svn rm [FILE] $ git rm [FILE]

ファイルの場合は作業コピーから直ちに削除されるが、ディレクトリの場合は削除予告されるだけである。
また、ディレクトリを削除するためには予めディレクトリの中身を空にしておく必要がある。

・アイテムのコピー
新しいアイテムを作るためにはsvn copy/git copyコマンドを用いる。

svnの場合 gitの場合
$ svn copy [FILE] $ git copy [FILE]

 
・アイテムの移動
アイテムの移動または名前の変更を行うためにはsvn mv/git mvコマンドを用いる。

svnの場合 gitの場合
$ svn mv [FILE] $ git mv [FILE]

ただし、svn moveは中間ディレクトリを作成しない。

作業コピーの更新

他の作業コピーで行われたリポジトリの変更を自分の作業コピーに反映させるためにはsvn update/git pullコマンドを用いる。

svnの場合 gitの場合
$ svn update $ git pull

本当なら変更点の取り出し元リポジトリのURLを指定する必要があるが、svn checkout/git cloneコマンドで作成したリポジトリの場合、複製元リポジトリのURLが自動的に記録される。そのためsvn update/git pullコマンドを実行する場合は上記のように取り出し元リポジトリを指定しなくてもよいことになる。

また、

svnの場合 gitの場合
$ svn update -r [REPO] $ git checkout [REPO]
$ svn update $ git checkout [現在のbranch]

ファイルに対する変更は行頭に表示される1文字のコードで示される。

  • A:Added
  • D:Deleted
  • U:Updated
  • C:Conflict
  • G:Merged

ブランチの作成・管理

・ブランチ情報の表示およびブランチの作成
現在のソースツリーを元に新たなブランチの作成を行うためにはsvn copy/git branchコマンドを用いる。

svnの場合 gitの場合
$ svn copy [trunkURL] [branchURL] $ git branch [branchFILE]

 
・ブランチの切り替え
操作対象とするブランチの切り替えを行うためにはsvn switch/git checkoutコマンドを用いる。

svnの場合 gitの場合
$ svn switch [branchURL] $ git checkout [branchFILE]

なお、gitでは「-b」オプションにより新たにブランチを作成してそのブランチに切り替える作業をgit checkout -b [branchFILE]のように1つのコマンドで実行することができる。

・ブランチ履歴の表示
ブランチ履歴の表示を行うためにはsvn list/git show-branchコマンドを用いる。

svnの場合 gitの場合
$ svn list [branchDIR] $ git show-branch

gitでは、前半の「---」までがブランチ履歴、「---」から後半が最近のコミット履歴を表している。ブランチを階層構造で表示し、「*」が付いている行が現在の作業ブランチとなる。

svnとgitのコマンド体系は似ているところがありますが、…

■各種機能
svnとの連携
今までsvnとgitを比較してきて、冒頭ではgitに移行した方がいい的な発言をしましたが、実は分散管理型VCSを利用する場合でも、成果物を共有する拠り所として中央管理型VCSが必要になります。例えば、svnのファイルロック機能は有効です。

  • git-svn
    gitには、gitリポジトリsvnリポジトリを同期させるgit svnコマンドがある。
    マスターリポジトリとしてsvnを利用して、各自の作業を行うローカルリポジトリにgitを利用することにより、各自のローカルリポジトリを管理するツールを変更してもマスターリポジトリに影響を与えず、新しくツールを覚えたくない場合にはsvnクライアントを従来通りに利用することができる。
    Macportsでインストールする場合、普通にgit-coreをインストールしてもgit svnは有効にならないので、

$ sudo port install git-core +svn

とする必要がある。
ここではこれ以上の具体的な利用方法についての説明は行わない。

GUIツール

無料リポジトリ

■参考にしたページ
あとでまとめて更新しておきます。

SMS/MMSアプリとメールアプリの違いと使い分け

10月14日にiPhone4Sが発売されて初めてスマートフォンに乗り換えたという方が多いのではないでしょうか。
iPhoneには「SMS/MMS」と「メール」の2つのアプリケーションが標準搭載されていて、まだ操作に慣れていない多くのiPhoneユーザ(自分もだけど)が戸惑ったかと思います。
そこで今回は、これらについてまとめたことを紹介していきたいと思います。

■SMS/MMSアプリとメールアプリの違い

まず簡単に説明しておくと、

  • SMS/MMS:携帯メール
  • メール:Email

の事です。それぞれの詳細は以下のようになります。

SMS
ショートメッセージサービス(Short Message Service)の略で、Softbank携帯同士の電話番号で文字数制限のあるメッセージの送受信ができる。
DoCoMoのショートメール、auCメールに相当。

MMS
マルチメディアメッセージングサービス(Multimedia Messaging Service)の略で、相手がSoftbank以外の携帯電話でも絵文字を使ったメッセージや写真などの送受信ができる。MMS対応端末にはテキスト以外にビデオクリップやボイスメモなどを送受信できる。
DoCoMoiモードメール、auのEZメールに相当。

メール
iPhone専用のパソコンメールとGmailYahoo!メールなどのプロバイダメール。

これら以外の違いとして、「SMS/MMS」は会話表示形式のためフォルダの概念がなく、「メール」はMy Softbankからフォルダの作成・管理ができます。(ただし、受信時の自動振り分け機能はなく、あくまで閲覧後に手動で移動させる必要がある。フリーメールソフトであるThunderbirdなどを利用して自動振り分けすることは可能。)
また、「SMS/MMS」は3G回線でのデータ送受信(データサイズは最大300KB)だけで、「メール」は3G回線とWi-Fiの両方でデータ送受信(データサイズは最大1MB)ができる、という違いがある。

■SMS/MMSアプリとメールアプリの使い分け

相手による使い分け

  • 家族や友達:SMS/MMS
  • 仕事関係や知り合い:メール

人数による使い分け

  • 複数人でのチャット:SMS/MMS
  • 1対1でのチャット:メール

環境による使い分け

  • 3G回線のみ:SMS/MMS
  • 3G回線とWi-Fi:メール

■参考にしたページ

MacPortsでよく使う覚えておきたいコマンド一覧

ブログの更新がかなり遅れてしまいました。すみません。
最初の1回目は何について書こうかあれこれ迷っている内にいつの間にか時間だけが過ぎてました(汗)
取り敢えず適当に何か書いてみようと思い、

MacPortsでよく使う覚えておきたいコマンド一覧」

という、よくあるベタなタイトルにしてみました。
まだ全然使い方が分からないので、色々と探りながらブログを書いていこうと思ってます。
以下の内容の他に便利なコマンドなどがあれば教えて下さい。
宜しくお願いしますm(_ _)m

MacPortsとは

そもそもMacPortsというのは、FreeBSDportsを参考にして作られたMacOSX上で利用できるパッケージシステムの1つで(DebianLinuxのaptやRed HatLinuxyumなどに相当)、手軽にソフトウェアをインストール/アンインストール/アップデートすることができます。環境としてXcodeがインストールされている必要があります。

以下、インストールの手順について示していきます。


■インストール手順

Xcode Toolsのインストール
portコマンドを使うためには、少なくともソースコードからのビルド環境が必要になるので、Xcode Toolsをインストールしておく必要がある。
インストールには、Macに付属しているインストールディスクのXcode Tools/XcodeToolsを実行するかhttp://connect.apple.com/から入手可能であるが、インストールディスクの方をオススメする。

X11のインストール
ソフトウェアの中にはX11を必要とするものもあるので合わせてインストールしておく。
Xcode Toolsと同じくMacに付属しているインストールディスクから入手できる。

MacPortsのインストール
インストール環境が整ったらMacPortsのバイナリを以下のサイトからダウンロードする。(dmg形式のアーカイブからインストールする方が楽。)

ダウンロードが終わったらマウントしたディスクの中のインストーラを実行してインストールを完了する。

環境変数の設定
MacPortsのファイルは/opt/local/以下にインストールされるので、パスを/opt/local/に通しておく必要がある。
そのための環境変数の設定は以下のようになる。

export PATH=/opt/local/bin:/opt/local/sbin/:$PATH
export MANPATH=/opt/local/man:$MANPATH

MacOSXのターミナルでbash/zshを使っている場合は、自分のホームディレクトリの.bashrc/.zshrcに上の2行を書き込んでおく。

環境変数を有効にするためには以下のコマンドを行う。


$ source ~/.bashrc

$ source ~/.zshrc

最後に、ちゃんとパスが通っていることを確認する。

$ sudo port version
Version: 2.0.3

上記のように表示されればOK。

それでは以下によく使うコマンド一覧を書き連ねていきます。

■portコマンドの使い方

パッケージ一覧の更新


$ sudo port -d selfupdate

$ sudo port -d sync

  • MacPortsのインストール直後には必ず行う
  • これをやらないとパッケージ一覧が古いままなので定期的に行う必要がある
  • 特に事情のない限りselfupdateを行う方が良い

パッケージの検索

$ sudo port search [パッケージ名]

  • 利用したいパッケージがMacPortsにあるのかを検索したい時に行う

パッケージのインストール

$ sudo port install [パッケージ名]

パッケージのアンインストール

$ sudo port uninstall [パッケージ名]

アップグレード可能なインストール済みパッケージの表示

$ sudo port outdated

  • 既に古くなったパッケージ一覧を表示したい時に行う

インストール済み全パッケージのアップグレード

$ sudo port upgrade installed

  • 全てのoutdatedなインストール済みパッケージをアップグレードしたい時に行う

インストール済みパッケージの表示

$ sudo port installed

  • インストール済みの全パッケージの一覧を表示したい時に行う
  • インストール済みのパッケージがバージョン・variantsと共に表示される

パッケージの詳細情報の表示

$ sudo port info [パッケージ名]

インストール済み特定パッケージに含まれているファイル一覧の表示

$ sudo port contents [パッケージ名]

パッケージのvariantsの表示

$ sudo port variants [パッケージ名]

  • パッケージをインストールする際の追加機能にどんなvariantsがあるのかを調べたい時に行う
  • これによりオプションを付けてインストールすることができる

パッケージのdeactivateとactivateの変更

$ sudo port deactivate [パッケージ名] [バージョン]
$ sudo port activate [パッケージ名] [バージョン]

  • 複数バージョンの同一パッケージがインストールされていて、有効なバージョンを変更したい時に行う
  • 有効になっているバージョンに対しdeactivateを行う
  • 有効にしたいバージョンに対しactivateを行う
  • deactivateはパッケージを完全に削除する訳ではなく一時的に無効にするだけ

ビルドに使ったファイルの削除

$ sudo port clean [パッケージ名]

  • 別のvariantsを指定して再ビルドしたい時に行う
  • アーカイブも削除して再取得したい場合には--allが利用できる

■参考にしたページ