Processクラスを使ったプログラミング

久しぶりにJavaでプログラミングをしています。Processを使ったものなのですが、最近はProcessBuilderというものがあるのですね。

前から、子プロセスの標準入出力と標準エラー出力をきちんと使うようなプログラムにしたいと思っていたので、今回結構調べてみたのですが、結構大変そうです。やはりシェルのようなものをJavaで実装するのは厳しそうな感じがしました。できるだけ汎用的に作るためには、ストリームはバイト列で扱うような形にするとよさそうでしたが、BufferedReaderとかを使った方があきらかにプログラミングの方は楽なので、用途ごとに使い分けることにして、今回必要だと思われる機能だけに絞り込むことにしました。

注意点として、子プロセスの標準入出力と標準エラー出力は親プロセスからの参照がなくなっても残る、といったことがAPIに載っていたので、とりあえず、プロセスの実行結果 exitValue() を取得した後に、それらを close() するようにしてみました。動かしてみても、特に例外は発生してこないので、きちんと動いていると考えてよさそうです。

今回用意しているプログラムは、root権限で実行しないといけないコマンドをリモートからキックしたい、ということで用意しています。最初、root権限で実行すればいいかな、と思ったのですが、sudoコマンドをうまく使えば、ネットワークで待機するプログラム自体はroot権限で実行しなくても良さそうです。結局のところセキュリティを確保するためにSELinuxを導入しているので、面倒なことが多くなっているのですが、こうやって穴となる部分を最低限に絞り込むためには仕方がありません。どこで穴を開けて、その穴をどれだけ防御しておくか、というのがポイントになってくるので、適切な設計と設定をしたいところです。

ネットワーク経由で使いやすくするために、すごく簡単なWebインタフェースもつけてみました。1日に数回程度のアクセスしか想定していないので、Jettyを使っています。こういう軽量コンテナはやっぱり便利ですね。もちろんServerSocketとかを使って実装することもできるのですが、手間や安定性を考えると、あるものをそのまま使った方が、断然楽です。

ということで、それなりに時間もかかりましたが、いろいろなところで使えそうなソフトウェアができあがりました。これにアクセスする側のプログラムを次に作ろうと思うのですが、PHPで実装するか、Javaで実装するか、ちょっと悩んでいます。PHPを使って簡単に実装すればいいのですが、DBを使いたいとも思っていて、そうするとJavaの方が何かといいかな、と思うわけです。PHPではDBアクセスの方法がバージョンによっても違うのが気になっています。稼動させるプラットフォームとして考えているOSや環境はこれ、と決まっているわけではないので、できるだけ運用時には設定変更だけで対応できるようなつくりとしておきたいのです。そうすると、やっぱりJavaかなぁ。

ま、結局なれたものを使うということになる、というだけの話かもしれません。ちょっと休んでから、作業を再開するか。

ミーティング

無事ミーティングが終わった模様。そういえばスケジューリングも難しいのですが、やっぱりもっときちんと各項目に対して終了予定日を決めてとりかかるべきですかねぇ。GTDを導入していますが、なかなかTODOは減りません。気が多いこともあるでしょうし、ふってくる作業の量もやっぱり多いのではないかという気がします。本当にやらないといけないことというのは、たぶん10%位なんだと思うのですが、それを見つける方法、嗅ぎ分ける能力を身につけたいところ。

東京で宿泊

久しぶりに東京で宿泊。不動産投資の本が面白くて立ち読みをしたが、全部読んでしまおうと思って購入した。でも持ち帰ってくると、持っていることに安心して読まないまま、ブログとかニュースとかをホテルでは読んでしまった。なんか間違った行動パターンになっている気がしてならない。

findなど

findとか、Linuxのコマンドでよくつかうものについてのメモ

find -name pattern
find -regex pattern
find -type d
find -type f
find -mtime N
find -mtime +N
find -mtime -N
find -print
find -print0

find . -name '*~' -or -name '*.bak' -print0 | xargs -0 mv ~/backup
find . -name '*app*.[ch]'

grep もメモ

grep pattern
grep -A N pattern
gerp -B N pattern
grep -C N pattern
grep -v pattern
grep -i pattern
grep -o pattern
grep -E pattern
grep -F pattern

意外に使うワードカウント

wc
wc -c
wc -w
wc -l

sort, uniq とかもありますね。全然別ですが、teeも便利

make 2>&1 | tee make.log

house

知り合いの家の見学会に行きました。新しい家っていいですね。ご家族も幸せそうで、幸せを分けてもらえた気がします。

OpenSocial

書籍を読んでみたところ、Apache Shindig!, partuza といったものが世の中にあるということです。日本には「OpenSocial-Japan | Google グループ」というのがあって、ここにいろいろな情報があるようです。OpenPNEとかは、どういう対応をしているのか気になるところです。

八角研究所 : Series: OpenSocialを始めよう 」というページも見つけました。

認証まわりについては、OAuthというのが話題になっているようです。書籍ではいまひとつイメージがわかない(もっときちんと読むべきなんですが、まだざっとしか読めていない)ので、引き続き調査が必要かな、という感じ。「
APIアクセス権を委譲するプロトコル、OAuthを知る − @IT」とか、「ゼロから学ぶOAuth:第1回 OAuthとは?―OAuthの概念とOAuthでできること|gihyo.jp … 技術評論社」といった記事もあるようです。