Eclipseフォーマッターの1行の文字数を変更する

Eclipseのフォーマッター機能を使うとデフォルト設定の80文字以上の場合は改行される。
この文字数をもっと増やしたい場合は以下の手順で変更する。

・Window -> Preferences -> Java -> Code Style -> Formatter -> Edit... -> Line Wrapping -> Maximum line width

がデフォルトで 80 になっているところを変更する。
また、コメント部分に対するフォーマットは別に設定されているのでこちらも変更する。

・Window -> Preferences -> Java -> Code Style -> Formatter -> Edit... -> Comments -> Maximum line width for comments


Profile name が「Eclipse [built-in]」のままだと変更を適用できないので別名にしてから適用ボタンを押す。

NIO2を使ったファイルの読み書きメモ

Java7のNIO2を使った簡単なファイル読み書き例。

package example;

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List;

public class Nio2Example {

	static final Charset utf8 = Charset.forName("UTF-8");

	// NIO2でファイル読み込み
	public static List<String> read() throws IOException {

		Path path = Paths.get("C:/work/foo.txt");
		List<String> lines = Files.readAllLines(path, utf8);

		for (String s : lines) System.out.println(s);

		return lines;
	}

	// NIO2でファイル書き込み
	public static void write(List<String> lines) throws IOException {
		Path path = Paths.get("C:/work/foo2.txt");
		Files.write(path, lines, utf8, StandardOpenOption.CREATE, StandardOpenOption.APPEND);
	}

	public static void main(String[] args) throws IOException {
		write(read());
	}

}

MacでLibraryフォルダをFinderで見るには

Lion から /Users/ユーザ名/Library のフォルダは不可視になったらしい。

Finder から見るには
ターミナルで

$ chflags nohidden ~/Library

と打てば Finder 上に表示されるようになる。

不可視状態に戻すには

$ chflags hidden ~/Library

と打つ。


または、Finder の「移動」 メニューを表示した状態で
option キーを押すと「ライブラリ」が現れる。

CentOS に Kestrel をインストールして試す 2

環境:CentOS5.5 64bit
kestrel:2.3.2-SNAPSHOT


前回はバイナリをダウンロードしてインストールしたが今回は sbt を使ってソースからビルドする。
java 6 と sbt 0.11.2 が必須。

また、kestrel のプロセスをデーモン化する。


robey/kestrel - GitHub
https://github.com/robey/kestrel

前準備

Java をインストールしておく。

# パスと JAVA_HOME の設定
export PATH=$PATH:/usr/local/java/bin
export JAVA_HOME=/usr/local/java

・git をインストールしておく。

sbt のインストール

sbt-launch.jar とそれを実行するスクリプトを用意する。


harrah/xsbt - GitHub
https://github.com/harrah/xsbt
simple build tool
http://www.scala-sbt.org/
SBTのセットアップ.md — Gist
https://gist.github.com/1139288


1. sbt-launch.jar をダウンロードして ~/bin に置く。
(kestrel のドキュメントで指定してある 0.11.2 をダウンロードすること。
上記 のサイトからのダウンロードは現在 0.11.3-2 にリンクが貼られているがこれを使ったら build に失敗した)

$ mkdir ~/bin
$ cd bin
$ wget http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-tools.sbt/sbt-launch/0.11.2/sbt-launch.jar

2. jar を実行するコマンドを、sbt という名前のファイルに書いて ~/bin に置く。

$ vi ~/bin/sbt

java -Xmx512M -jar `dirname $0`/sbt-launch.jar "$@"

3. スクリプトを実行ファイルにする

$ chmod u+x ~/bin/sbt

4. sbt を実行してREPLを起動する

$ sbt

初回なのでいろいろ必要な jar のダウンロードが行われる。

kestrel のインストール

$ cd ~
$ git clone https://github.com/robey/kestrel.git
$ cd kestrel
$ sbt clean update package-dist

ビルドが終わると dist/kestrel にいろいろファイルができている。

$ ls -l dist/kestrel

config
kestrel_2.9.1-2.3.2-SNAPSHOT.jar
kestrel_2.9.1-2.3.2-SNAPSHOT-javadoc.jar
kestrel_2.9.1-2.3.2-SNAPSHOT-sources.jar
kestrel_2.9.1-2.3.2-SNAPSHOT-test.jar
libs
scripts

起動は dist/kestrel/scripts にある kestrel.sh から行うのだが
このファイルの中身を見ていると

APP_NAME="kestrel"
APP_HOME="/usr/local/$APP_NAME/current"

となっているのでこれに合わせて /usr/local/kestrel/current を作成してここにコピーする。

# mkdir -p /usr/local/kestrel/current
# cp -a ~/kestrel/dist/kestrel/* /usr/local/kestrel/current

pid ファイルの出力先ディレクトリを作成しておく。

# mkdir /var/run/kestrel

daemon のインストール

daemon
http://libslack.org/daemon/

# cd /usr/local/src
# wget http://libslack.org/daemon/download/daemon-0.6.4.tar.gz
# tar xvf daemon-0.6.4.tar.gz
# cd daemon-0.6.4
# ./configure && make && make install

/usr/local/bin/daemon が作成される。

kestrel の起動 / 停止

production モードの場合は kestrel.sh を使用。

kestrel の起動

# /usr/local/kestrel/current/scripts/kestrel.sh start
Starting kestrel... done.

kestrel の停止

# /usr/local/kestrel/current/scripts/kestrel.sh stop
Stopping kestrel... done.


development モードの場合は devel.sh を使用。

kestrel の起動

# /usr/local/kestrel/current/scripts/devel.sh
Starting kestrel in development mode...

development モードの起動スクリプト devel.sh ではデーモン化せず、jar を実行してるだけ。


追記:
snapshotではないkestrel 2.3.2以降のkestrel.shでは
daemonコマンドを使用するのではなくdisownコマンドを使ってデーモン化するにように変更された。

CentOS に Leiningen を使って Clojure の実行環境を作る

環境:CentOS5.5 64bit

目的

CentOS で Leiningen (ライニンゲン)を使って Clojure の REPL を使えるようにする。
Leiningen は Clojure のビルドツール。Java でいう MavenScala でいう sbt のようなもの。
Clojure 自体のインストールは Leiningen が勝手にやってくれる。


technomancy/leiningen - GitHub
https://github.com/technomancy/leiningen

前準備

Java のインストール
こちらはインストール済み。


・rlwrap のインストール
rlwrap とは readline のラッパーで readline に対応していないCUIプログラムを readline 化することができ、
コマンド実行履歴などが使えるようになる。


lein コマンドで rlwrap を使っているので入ってなければ先にインストールしておく。
CentOS5.5 には入っていなかったのでインストールする。
EPELリポジトリを追加しておく。

# yum -y install rlwrap --enablerepo=epel

Installed:
  rlwrap.x86_64 0:0.37-1.el5

インストール

インストールは簡単で
https://raw.github.com/technomancy/leiningen/stable/bin/lein
ここにあるシェルスクリプトをダウンロードして、パスの通ったところに置き、実行権限をつければOK。

$ mkdir ~/bin
$ cd ~/bin
$ wget https://raw.github.com/technomancy/leiningen/stable/bin/lein
$ chmod 755 lein

バージョン確認

$ lein version
Leiningen 1.7.1 on Java 1.6.0_20 Java HotSpot(TM) 64-Bit Server VM

leinコマンド初回実行時に clojure-1.2.1.jar が自動的にダウンロードされた。
また、 .lein や .m2 といったディレクトリが作成される。


REPL起動

$ lein repl

REPL started; server listening on localhost port 57071
user=> (+ 1 2 3)
6
user=>

動いた!

Linuxでディスクの使用容量を調べる

オプションとか忘れるのでメモしておく。

df コマンド

ディスク(パーティション)ごとに使用容量、空き容量、使用率を表示する。

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             5.4G  4.7G  382M  93% /
/dev/sda1             494M   23M  446M   5% /boot
tmpfs                 502M     0  502M   0% /dev/shm

du コマンド

カレントディレクトリから再帰的にディレクトリの容量を表示する。

# du -h

「--max-depth」で階層の深さを指定できる。

# du -h --max-depth 1

例:
/ 以下のディレクトリ毎の容量を調べる。

# du -h --max-depth 1 /
236M    /lib
79M     /var
586M    /home
8.0K    /selinux
8.0K    /srv
13M     /boot
112K    /dev
8.0K    /mnt
0       /proc
18M     /lib64
8.0M    /bin
12K     /media
3.8G    /usr
240K    /tmp
0       /sys
224K    /root
16K     /lost+found
30M     /sbin
51M     /etc
19M     /opt
4.8G    /

どのディレクトリの使用容量が特に多いのか知りたい場合、次のようなコマンドで調べることができる。

例:
/usr 以下のディレクトリを使用容量順にソートする。

# du -S /usr | sort -n
...
...
...
62764   ./lib64
65464   ./local/java16020/jre/lib
1431596 ./local/zookeeper-3.4.3/data/version-2
2586856 ./local/storm-0.7.4/logs

一番下に一番容量を食っているディレクトリが表示される。

-S はサブディレクトリの使用量を含めずに、個々のディレクトリの使用量を分けて表示する。

-h をつけると正しくソートされなくなるのでつけない。

CentOS に Kestrel をインストールして試す 1

環境: CentOS5.5

Kestrel は Twitter謹製のメッセージキューサーバー。

特徴は

  • 速い → JVM上で動く。
  • 小さい → scalaで約2,500行。nettyを使ってる。
  • 耐障害性 → メッセージを失わないようファイルシステムにジャーナルを記録している。
  • 信頼性 → キューから取り出したメッセージの処理漏れを防ぐことができる。

とのこと。
また kestrel との通信は3つのプロトコルが用意されている。

  • memcache: the memcache protocol, with some extensions
  • thrift: Apache Thrift-based RPC
  • text: a simple text-based protocol

前準備

Java をインストールしておく。

インストール

ここからビルド済みバイナリをダウンロードする。
http://robey.github.com/kestrel/

現在最新の kestrel 2.3.1 を落としてきた。

$ wget http://robey.github.com/kestrel/download/kestrel-2.3.1.zip
$ unzip kestrel-2.3.1.zip

設定ファイルはconfディレクトリにある。

$ ls -l kestrel-2.3.1/config
development.scala
production.scala

サーバ起動

$ cd kestrel-2.3.1
$ sudo java -jar kestrel_2.9.1-2.3.1.jar &
[1] 9672

ログファイルを確認する。
デフォルトでは /var/log/kestrel に出力されている。
起動時のログは以下のこんな感じ。

$ less /var/log/kestrel/kestrel.log

INF [20120719-16:59:56.538] stats: Starting LatchedStatsListener
INF [20120719-16:59:57.025] admin: Starting TimeSeriesCollector
INF [20120719-16:59:57.043] admin: Admin HTTP interface started on port 2223.
INF [20120719-16:59:57.050] kestrel: Kestrel config: listenAddress=0.0.0.0 memcachePort=Some(22133) textPort=Some(2222) queuePath=/var/spool/kestrel expirationTimerFrequency=Some(1.seconds) clientTimeout=None maxOpenTransactions=100 connectionBacklog=None
INF [20120719-16:59:57.263] kestrel: Starting up background expiration task.
INF [20120719-16:59:57.277] kestrel: Starting background-expiration
INF [20120719-16:59:57.379] kestrel: Kestrel 2.3.1 started.

4つのポートを使っている。
memcacheListenPort -> 22133
textListenPort -> 2222
thriftListenPort -> 2229
admin.httpPort -> 2223

このへんはさきほどの設定ファイルで設定している。
2223のAdmin画面は現状なにも用意されていない。今後追加するかもってメッセージが書いてあるだけ。

動作確認

http://yuroyoro.hatenablog.com/entry/20090803/1249297348
を参考に memcached プロトコルを使ってキューにメッセージを入れたり出したりしてみる。

telnetコマンドで接続。

$ telnet localhost 22133
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.

memcached コマンドは以下フォーマット

set <キー> <フラグ> <有効期間> <サイズ>

2つメッセージをキュー入れる。
キー名は foo とする。
memcached のキー名が、kestrel のキュー名に相当。

set foo 0 0 3
aaa
STORED

set foo 0 0 4
bbbb
STORED

今度はキューから2つのメッセージを取り出す。

get foo
VALUE foo 0 3
aaa
END

get foo
VALUE foo 0 4
bbbb
END

問題なく動作した。


/var/log/kestrel ディレクトリに foo というバイナリファイルができていた。
これがジャーナルなのかな。


サーバを落として終了。

kill 9672


参考:
http://samuraism.jp/diary/2011/11/20/1321770660000.html
http://blog.asial.co.jp/875