コミットしてしまったファイルをリポジトリから削除する

リポジトリ作成した時点で余分なファイルもコミットしてたよ。』
『まぁいいよね、みんな余分なファイルごと持っていくといいよ!』

良くないよ。

胸張っているけど全然良くないよ。さっさと削除してください。
では.gitignoreではなくリポジトリに対してrmコマンドで対象のファイルを削除しましょう。

>> git rm hoge.txt

ディレクトリ配下ごと削除したい場合は-rオプションを指定します。

>> git rm -r hoge/bin/

リポジトリから削除したら監視対象から外すように忘れずに.gitignoreへ追記しておこう

なお、上記のコマンドだとワーキングディレクトリからも削除してしまいますが、
リポジトリには含めたくないだけでローカルには残しておきたい場合は--cachedオプションを指定します。

>> git rm --cached hoge.txt

git監視対象から外す

『このファイルはテスト用に作成したんです。コミットしたい訳じゃないんです。』
コンパイルによって生成されたバイナリファイルまでコミットしたい訳じゃないんです。』

そんなときは.gitignoreをgitルートに作成し、対象のファイル、ディレクトリを書き込みましょう。

>> touch .gitignore
>> echo hoge.txt >> .gitignore

ディレクトリ配下ごと無視したい場合も同様です。

>> echo hoge/bin/ >> .gitignore

共通変数、関数を作成して呼び出す

shellを作成していると共通的に呼び出したい変数や関数があります。特に変数。
全てのshellにDBユーザ名とかを定義するのも面倒。
なので共通定義しているshellを作成し、利用したいshellが読み込んで使用します。

parent.sh

HOGE="hoge"
FUGA="fuga"

hello()
{
  echo "Hello, ${1}!"
}

定義したshellを呼び出すにはsourceを定義し、パスを指定するとshellを読みこむので変数や関数を利用することができます。
child.sh

source ./parent.sh

echo ${HOGE}
hello ${FUGA}

実行結果

hoge
Hello, fuga!


ちなみに、sourceでなくて.を使用することで同じ効果を与えることができます。

. ./parent.sh

ただ、何をしているのかパッと見たところ分かりにくいので私はsourceを利用します。

乱数を10進数として扱う

Javaの開発現場にて乱数を使用する時にUUIDを利用することがあります。
Javaではライブラリとして提供されているのでそれを利用します。

UUID.randomUUID()

上記の方法では16進数が返却されるので、英数字の羅列となりデータとして扱い辛い時があります。
そんな時はhashCodeでint値を取得して絶対値を使います。

Math.abs(UUID.randomUUID().hashCode())

もちろん、16進数で良ければ16進数で。

shellでデバッグ

動作確認のテストをしてほしいと言われてshellを渡された。
shellを作ったけど動作確認していないってそれって作ったと言えるんですか?
って突っ込みたいけど仕事を依頼されたのでやるしかないよね。

「各行にecho埋め込んで確認してくれればいいから」

お断りします。


デバッグ方法は無いかなと調べてみました。

shell実行時に -x オプションを付けることでデバッグ情報を出力することができる。

sh -x hoge.sh

これでshell実行時の変数の値なども確認出来るのでソースの修正も必要ありません。
echoの削除忘れとか恥ずかしいしね。

入門自然言語処理のための準備

入門自然言語処理の読書会に参加するために本屋で購入してきました。

入門自然言語処理

元々言語解析には興味があったので、これを機に勉強しようと思います。
最近はちょっとした流行になっているらしく、今自然言語処理を知っておくとモテるらしい。
やらない手はないよね!


必要なソフトウェアとしてPythonは当然として、NLTKが必要となるので早速ダウンロード。

http://www.nltk.org/download

今回はMacにインストールを行うのでMac OS Xの欄。

  1. MacPython
  2. PyYAML
  3. NLTK

をダウンロードし、インストールを行う。

準備が整ったらPythonインタプリタを起動し、下記のコマンドを打つ。

>>> import nltk
>>> import nltk
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named nltk

あれ?
NLTKが見つからない。
インストールが失敗しているのかな。
NLTKのダウンロード元を参照するとトラブルシューティングについて記載があった。

Troubleshooting

It is possible that the NLTK installer gives an error message like "Errors occurred. Try installing again." This may indicate that the NLTK installer could not locate a suitable version of Python on your machine, or that you have more than one suitable version of Python installed. In this case, open a terminal window, type cd /tmp/nltk-installer and then type sudo python setup.py install.

なるほど。直接インストールすればいいのか。
早速実行。

cd /tmp/nltk-installer
sudo python setup.py install

これでインストール処理が行われていく。

では改めて。

>>> import nltk
>>> nltk.download()

無事にimportも通り、downloadをコールすることでNLTK DownloaderのGUIが起動できた。
後はFullInstallでOK。

インストールが完了したらNLTKのBookモジュールをロードする。

>>> from nltk.book import *
*** Introductory Examples for the NLTK Book ***
Loading text1, ..., text9 and sent1, ..., sent9
Type the name of the text or sentence to view it.
Type: 'texts()' or 'sents()' to list the materials.
text1: Moby Dick by Herman Melville 1851
text2: Sense and Sensibility by Jane Austen 1811
text3: The Book of Genesis
text4: Inaugural Address Corpus
text5: Chat Corpus
text6: Monty Python and the Holy Grail
text7: Wall Street Journal
text8: Personals Corpus
text9: The Man Who Was Thursday by G . K . Chesterton 1908
>>> 

ロードが完了したら早速参照してみる。

>>> text1
<Text: Moby Dick by Herman Melville 1851>

これでNLTKを使用する準備ができた。

Python導入

勉強会に参加したいけどちょっとは触っておかないとね!
ということでPythonを導入。

バージョンが2.xと3.xがあり、どうせ勉強するなら3.xの方が良いかな?とか考えてみましたが、
2.xには豊富なライブラリもあり、構文もそこまで大きくは違わないし、Twitterでも最初は2.7からでいいよ!と背中を押してもらえたので2.7を導入することに。


PCはMacなのでMacPortsでインストールしました。
バージョンを確認すると2.6だったので、現時点で最新の2.7をインストール。

$ sudo port install python27
$ sudo port install py27-pip
$ sudo port install python_select

python_selectもインストールを行い、バージョンを変更

$ sudo python_select python27
$ python --version
>Python 2.7.1

完了!