Animelo Summer Live 2009

Animelo Summer Live 2009 - RE:BRIDGE -に行ってきた。今年の4月くらいに、偶然このコンサートの存在を知って、行こうと思っていたのだけど、いつの間にかチケットが完売していた。複数枚持っていた友人から買い取って、何とか行くことができた。

以下、感想。

  • 規模がすごい、2万7000人もアニメロファンがいるのが驚き。
  • サイリウム(ペンライト)を忘れて後悔。周りのみんなが持っているので、疎外感があった。
  • オタ芸を初めて見た。異様な存在感を放っていた。
  • 演奏された曲の、8割が知らない曲だった。自分はアニソン初心者みたいです。
  • 茅原実里が別格の人気を誇っていた。さすが。

ライブは、6時間くらいやっていたけど、アーティストが次々と入れ替わるからなのか、長さを感じなかった。アニソンと一言でくくっても、いろんなジャンルがあって、飽きることはなかった。今回は1人だったけど、来年は友達と行きたいと思った。

続・Python上からMeCabを使う

過去の日記Python上でMeCabを使うことを書いた。今回は、出力フォーマットを変更して、python上からMeCabを扱う方法を書く。「名詞だけ抽出したい」っていった時に便利だと思う。

出力フォーマットの変更

解析結果の出力フォーマットは「/usr/local/lib/mecab/dic/ipadic/dicrc」に記述されている。1つの出力フォーマットを規定するために、次の4つの場合の出力形式を指定しなければならない。

  • node: 1つの形態素を出力, デフォルトは空文字
  • unk: 1つの未知語形態素を出力, デフォルトは node と同一フォーマット
  • bos: 形態素解析の結果に先だって出力 (header 的役割), デフォルトは空文字
  • eos: 形態素解析の結果の後に出力 (footer 的役割), デフォルトは "EOS\n"

unk を指定しないと、辞書に無い単語を読んだときにmecabが処理してくれなくなるので、nodeだけではなくて、unkも指定する必要がある。

出力フォーマットChaSenは、こうなっているみたい。

node-format-chasen = %m\t%f[7]\t%f[6]\t%F-[0,1,2,3]\t%f[4]\t%f[5]\n
unk-format-chasen  = %m\t%m\t%m\t%F-[0,1,2,3]\t\t\n
eos-format-chasen  = EOS\n

実験

temp.txtから、一般名詞と固有名詞だけをコマンドラインに表示するプログラムを書いた。

temo.txtの中身

MeCabオープンソース形態素解析エンジンで、奈良先端科学技術大学院大学出身、現Googleソフトウェアエンジニアの工藤拓によって開発されている。名称は開発者の好物「和布蕪(めかぶ)」から取られた。

コード

「/usr/local/lib/mecab/dic/ipadic/dicrc」に次の2行を追加した。%hは形態素に対応した番号。

node-format-dev = %h,%m,
unk-format-dev = %h,%m,
import MeCab

f = open('temp.txt','r')
string = f.read()
lst = Mecab.Tagger("-Odev").parse(string).split(",")
lim = len(lst)				

i = 0
while i < lim:
	try:			
		num = int(lst[i]) 
		i += 1				
		if 38 == num or 40 < num and 47 > num:
			insertDic(lst[i])
			i += 1
		
	except ValueError:
		i += 1
出力結果
MeCab
ソース
形態素
エンジン
奈良先端科学技術大学院大学
出身
Google
ソフトウェア
エンジニア
工藤
拓
名称
好物
和布
蕪
め

最後の'め'っていう言葉が良く分からないけど、概ね良好。形態素に対応した番号は、「/usr/local/lib/mecab/dic/ipadic/pos-id.def」を変更することで指定できるので、必要な形態素は1、必要じゃない形態素は0ってやるともっと楽になると思う。ただし、「/usr/local/lib/mecab/dic/ipadic/pos-id.def」の変更を反映させるには、辞書の際コンパイルが必要なので、手間がかかる。

CentOSにJavaを入れる

RPMパッケージのダウンロード

ブラウザからhttp://java.sun.com/javase/downloads/index.jsp に行き、一番上にあるJDK 6 Update 4のDownloadボタンを押して、OSはlinuxを指定してダウンロード。

JDKのインストール

RPMパッケージをインストール。RPMパッケージはダウンロードした状態では、実行権限がないので、chmodコマンドを使って、実行権限を与える必要がある。

chmod +x jdk-6u4-linux-i568-rpm.bin
./jdk-6u4-linux-i568-rpm.bin

パスの設定

/etc/profile の最終行にJava環境変数を追記する。

vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.6.0_14
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

環境変数の変更を反映させる。

 source /etc/profile

シンボリックリンクの変更

/usr/bin/javaシンボリックリンクを新しくインストールした Java を指すように変更する。
シンボリックリンクはalternatives というもので切り替えられるので、alternatives に新たに Sun の Java を追加して、そちらに切り替える。

alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_14/bin/java 200

優先度を200に設定した。

alternatives --config java

2 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.4.2-gcj/bin/java
   2           /usr/java/jdk1.6.0_14/bin/java

2 を入力して Enter。これでシンボリックリンクが切り替わったので、SunのJavaが使えるようになる。


alternativesコマンドは様々なシンボリックリンクを変更するコマンド。デフォルトでは/etc/alternativesにシンボリックリンクの一覧がある。これにより、プログラムの複数のバージョンを切り替えたりできる。

pydevインストール

  1. Eclipseを起動し、[Help]→[Software Update]→[Available Software]からフィーチャーの更新画面を出す。
  2. PyDevのインストールサイトは一覧にないので、[add Site...]から次のURLを追加する。
  3. 利用規約に同意すると、インストールが開始する。
  4. eclipse再起動でpydevインストールが完了する。
  5. 右上のほうでぱ[open perspective]を選択すると、pydevが使えるようになる。

PATHの編集

PATHの確認

次のコマンドを打つことにより、どこにパス(PATH)が通っているか確認できる。

$env | grep PATH

または

$echo $PATH

パスの設定方法

その場しのぎの設定

環境変数 $PATH を書き換えます。 たとえば /usr/local/hoge/bin へパスを通したい場合

$ PATH=$PATH:/usr/local/hoge/bin
$ export PATH

 このように入力します。$PATH とは 現時点で環境変数 PATH に設定されているパス名を表す。複数のパスを加えるためには : で区切って指定します。ちなみに、コマンド export PATH は必須。環境変数 PATH を設定する、という意味がある。コマンドは export PATH=$PATH:/foo のように1行にまとめても構わない。

永続的な設定

上記の方法だと、ログアウトしてしまうと、PATHの設定が初期値に戻ってしまう。ログアウトしても、PATHの設定の変更を残したい場合、ホームディレクトリ配下にある .bash_profile を編集する。 .bash_profile の中に PATH=$PATH:〜 と export の記述をするだけで、毎回ログインするたびに自動で環境変数が設定される。

$ vi ~/.bash_profile 

環境変数の設定をサーバ内の全ユーザに対して指定したい場合は /etc/profile ファイルを開き、末尾に PATH=$PATH:〜 と export を追加する方法が確実でしょう。 各ユーザの .bash_profile の中には、ログイン後に /etc/profile ファイルを読み込むような記述があるためである。

locateコマンド

ファイルを探したいときにunixであれば、findコマンドを使うが、RedHat系のLinuxではlocateコマンドを使う。

# locate file(or directory)

locateコマンドは、独自のデータベースを参照することにより、対象となる情報を検索する。各ディレクトリを参照することがないため、非常に高速に検索することが出来る。通常では、1日1回データベースが更新される。即座に、locate用のデータベースの内容を最新のものにしたい場合は、次のコマンドを実行します。

# /etc/cron.daily/slocate.cron

whichコマンド

# lwhich command_name 

コマンドを探し出し,フルパスで表示する。ただし,パスが通っている物でないと表示されない。パスが通っていないファイルを探すときはfindやlocateを使用するとよい。

このファイルはどこにいったっけ?とファイルの検索を行うときはlocateコマンドは便利。でもpythonってどこにインストールしたかなって探すときにlocateコマンドを使うと、大量に情報が出てきてしまい、混乱するだけになってしまう。これらのコマンドはきちんと使い分けないといけないな。。

VNCサーバ入れた

家でも作業したいので、CentOSVNCサービスを導入した。これでトリプルディスプレイ生活も終わりか…なんだかもの悲しいな。

VNCサービスの概要

Virtual Network Computing(ヴァーチャル・ネットワーク・コンピューティング、略称VNC)は、ネットワーク上の離れたコンピュータを遠隔操作するためのRFBプロトコルを利用する、リモート操作用ソフトである。常、VNCは通信に暗号を用いないため、パスワード等を含め全て平文で送信される。このため、Telnet等と同じく危険なプロトコルであり、使用には注意が必要である。ただし、よりセキュリティの高いSSHVPNをトンネルして接続することも出来る。(wikipediaより)

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

始めにパッケージをインストールする。

yum install vnc-server

このパッケージの概要は次のとおり。使用するポートは、使うディスプレイ番号によって違います。

Service Name vncserver
Protocol and port 5900/TCP,…
Configuration files /etc/sysconfig/vncservers
Lock file /var/locl\k/subsys/vncserver
Control script /etc/init.d/vncserver
Script parameters start, stop, restart, status, reload, condrestart

ディスプレイ番号とユーザの設定

設定ファイルは /etc/sysconfig/vncservers である。このファイルを編集して、どのディスプレイ番号で、どのユーザのアクセスを許可するかを設定する必要がある。

# VNCSERVERS="2:myusername"
# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd -localhost"

これを以下のように編集する。

VNCSERVERS="1:admin"
VNCSERVERARGS[1]="-geometry 1200x900 -nolisten tcp -nohttpd"

vncserverのオプションは次のとおり。

-geometory 横x縦 横x縦の画面を生成
-nohttpd WebベースのVNCクライアントをサポートしない
-nolisten tcp TCP経由でVNCサーバにアクセスすることを禁止する
-nolocalhost セキュアトンネルを利用していないものを禁止する

ユーザ環境の設定

まずVNCサーバに接続するために必要なパスワードの設定をする。

vncpasswd
Password:
Verify:

次に、VNCサーバ1度を起動する。
/etc/rc.d/init.d/vncserver start
/etc/rc.d/init.d/vncserver stop

VNCserverを起動することによって、ユーザのホーム・ディレクトリに .vnc/ が作成される。ここには次のものが保管される。

  • 設定ファイル(xstartup)
  • アクセス記録(*.log)
  • 暗号化されたパスワード(passwd)

初期の設定ではウインドウマネージャにtwmが指定されている。これでは、あまりに貧弱なので、この設定ファイルを編集して、ウインドウマネージャをGnomeに変更する。まずは設定ファイルを開く。

vi ~/.vnc/xstartup

この1行をコメントアウトする。

twm & 

そして、 この1行を追加する

gnome-session &

パケットフィルタリングの設定

VNCサーバではディスプレイ番号に対して1つのTCPポートを利用する。利用するポートは、5900にディスプレイ番号を足したものである。外部からVNCサーバを使うには適切なポートの通信を許可する必要がある。
メニューから[システム] - [管理] - [セキュリティレベルとファイヤーウォールの設定]を選択し、セキュリティレベルの設定画面を開く。または、次のように、端末に打ち込む。

system-config-securitylevel

起動の自動化

vncserverパッケージをインストールされた時点では、セキュリティを考慮して、自動的に起動されるようにはなっていない。chkconfigを実行して、VNCサーバが自動的に起動するように設定する。

chkconfig vncserver on 

アクセス方法

DNS名かIPアドレス」 + 「:」 + 「ディスプレイ番号」でアクセスできる。クライアントにはRealVNChttp://www.vector.co.jp/soft/win95/net/se324464.html)がお勧め。

固定IPの割付

システム→管理→ネットワークでIPやDNSの設定ができる。手動で設定したければ、http://d.hatena.ne.jp/winty/20061130/1164876974を参考にすればOK。

Javaのファイル入出力

Javaにおけるファイル処理をよく忘れる。何度も忘れては、何度も調べるのでメモしようと思う。

try {
		BufferedReader br = new BufferedReader(new FileReader(new File(path)));

		// 最終行まで読み込む
		while (br.ready()) {
			String line = br.readLine();
	                        /*
	                        ここで処理を行う
	                        */

		}
		br.close();
	} catch (FileNotFoundException e) {
		// Fileオブジェクト生成時の例外捕捉
		e.printStackTrace();
	} catch (IOException e) {
		// BufferedReaderオブジェクトのクローズ時の例外捕捉
		e.printStackTrace();
	} catch (NoSuchElementException e) {
		// BufferedReaderオブジェクトのクローズ時の例外捕捉
		e.printStackTrace();
	}

ちなみに、1行ずつ取り出した後に、こうやって書くと、CSVの処理になる。

	// 1行をデータの要素に分割
	StringTokenizer st = new StringTokenizer(line, ",");

	while (st.hasMoreTokens()) {
		System.out.println(st.nextToken());
	}