JavaSE7のString Hashの新しい実装 (alternative hash for String keys)

Java絡みで覚えておきたいことがでたので久々に更新してみようかな、と。
Java7の備忘録ということで。

Map操作パフォーマンス向上のために、Stringのハッシュ計算に新しいロジックが入ったらしい
ただ、現在その設定はデフォルト無効になっている。
次のシステムプロパティの値でコントロールする。
jdk.map.althashing.threshold
値の意味は、新しいロジックを使いはじめるMapのキャパシティなんだそうな。
-1が無効で、0にしたら常に使うし、512にしたらエントリが512を超えたら使う。

基本的にエントリが多くなった時の、ハッシュの衝突を避けるという目的があるらしいので
エントリ数が大きいMapを使っている時に有効な改善が入っているらしい。

使い道を考えたけど、文字列IDをキーにしてオブジェクトをキャッシュするようなキャッシュ的な用途で効くのかな、と。
注意点としては、ハッシュの値が変わるのでイテレータの列挙順序が変わるとのこと(順序を保証しないクラスは)。
順序に依存したコードなんてそもそも書いちゃダメだけど気をつけろ、と。
体感することはないと思うけど、しばらく有効にして使ってみるつもり。

ゼルダの伝説 スカイウォードソード

懲りずにゼルダの伝説。
物自体は、去年に手に入れてたけど中々やる時間がとれなくて
ほとんど積みゲーになってた。

ようやくこの週末に、森の神殿をクリア。
……これ、前作よりかなり操作面倒なんですけど……

ヌンチャクとリモコンを別々に振らないと
思った通りに動かせないコトが多くて、一つを置いてて
状況によって拾うって事を要求されてる。
クリアできるのか怪しくなってきてる。

ほんと、キーコンフィグ希望します。

JavaSE 7の困った所 (Unicode)

どうも、気がついたらJavaSE7が今月リリースされるらしい。
行儀よく使ってる人には、あまり関係がない話なんだけど
JavaSE6とJavaSE7で変わって困っていることがある。
Unicodeの準拠バージョンの違いだ。
JavaSE6 はUnicode4.0に対応して、JavaSE7はUnicode6.0に対応している。

で、何が問題かというと識別子に使える文字がJavaSE6とJavaSE7で違ってくるという事だ。
JavaSE6でコンパイルしていたソースが、JavaSE7だとエラーになることもありえる。
というか、実際に遭遇した。「・(U+30FB)」という文字を変数名に使ってみればわかる。
JavaSE6においては、 Character.isJavaIdentifierPart(‘・’) は Trueとなり識別子として使えるのだが
JavaSE7では、結果はFalseとなる。
直接的な原因は、Unicode4.1と6.0でこのキャラクタの所属するUnicode Categoryが違うというのが問題だ。
誰が動かしたんだよ!っと思ったもののそのそもの原因はUnicodeのスペックに引きずられる
Javaの言語仕様も問題なんじゃないかと思う。
Unicode中で区切りを表す文字だからといって識別子として使えないようにする必然性なんてあったもんじゃない。

Javaの予約語とか言語構造はASCIIレベルの文字しか使ってないんだから
ASCII以外の文字は勝手に使わせろと言いたい。
どうせUnicode変更してってもASCIIに対応する部分に手を入れるつもりはないんだろうに・・・。

OpenSolaris/OpenIndiana の 固定IPをnwamで設定してみる

自分メモ。

OpenSolaris / OpenIndiana で使われているネットワーク設定を自動で行う
nwam (Network Auto Magic)の使い方がようやく分かった。

nwamはDHCPがデフォルトなんだけど
社内では、固定IPで運用している。
で、ググったらnwamを止めて固定IPで運用するという話はでてくるけど
止めたらなんか負けた気がするので止めないで何とかならないかと思ってた。
でも、どうしても再起動したら /etc/resolv.conf がクリアされてしまう。

今日わかったのは、それを設定するコマンドがあるということ。

# nwamcfg
nwamcfg> select loc Automatic
nwamcfg:loc:Automatic> set dns-nameservice-configsrc=manual
nwamcfg:loc:Automatic> set dns-nameservice-servers=DNSアドレス
nwamcfg:loc:Automatic> commit
nwamcfg:loc:Automatic> end

これでいいらしい。

ちなみに、IPアドレスの固定化もipadmコマンドでやるようになってる様子。
なんかSolaris(じゃなくなったけど)も様変わりしてきてるね。

ZFS dedup

もはや、ZFSしかウリがなくなって先細りのSolarisですが、
ZFSのzvolおかげで、iSCSIのディスクとして簡単に使えるようになってます。

で、容量の少ないSSDを使っている身として余分なファイルを
このiSCSIで作ったディスクに移しておくという構成を使ってます。
100BaseレベルのリンクでもSMB/CIFSでつなぐよりは格段に速い
ディスクとして使えます。
Solaris→OpenSolarisと変えてきたマシンをOpenIndianaに移行させたときに
iSCSIを導入したんですが、ふと「最近のZFSで重複を省く仕組みできてなかったっけ?」
と思い立ち、iSCSIで使っているzvolにdedupをセットしてみた。

# zfs set dedup=on 名前
だけでOK
# zpool list
で、圧縮率が見える。プロパティをセットしただけじゃ圧縮されなくて
あくまでdedupが働くのは新しく書きこむときのみ。
しばらく使ってみると、たしかに圧縮率が上がっていく。
ファイル単位じゃなくてブロック単位で重複判定しているとのことなので
zvolに対しても圧縮は働いていくらしい。
このあたりが、アプリレベルのファイル単位の重複判定では実現できないとこだろう。

が・・・
どうも最近気がついた。これ重い。
調べてみると、dedupが同期処理なのが問題ではないかと・・・
ある程度連続したファイル処理をすると、途中からガクンと処理速度が落ちる。
キャッシュ範囲から外れたら速度が落ちる感じらしい。
ZFSは非同期処理でパフォーマンスを稼いでいるところがあったと思うからそのせい?
それとも、dedup判定が重いから結果として処理がたまってキャッシュを食いつぶしやすいのか?

仕方が無いのでdedupを外してみることにした。
別に容量的に困ってたわけじゃないから困らんのよねぇ。
# zfs set dedeup=off 名前
オンラインで全部できるのはすごいと思うわ。実際。
せっかくだからZFSだけは抱え込まないで、
Linuxに引き渡すかAppleにでも引き渡して有効活用してほしい・・・

iPhoneに届くスパムの判定

何をどうやってもスパムが届くiPhoneのスパムフィルタに
メールアドレスに “0” を含む場合に拒否をする設定を追加することにした。

iPhoneのMMSに配信されるメールで、そんなメールアドレスから届くのはスパムだけだろう、と。
知り合いにメールアドレスに0を含む人も居るが大抵は携帯のアドレスであって
直接MMSを投げてくるような相手はいないらしいことがアドレス帳を調べて見てわかった。

Gmail、GoogleAppsを使うようになって気にすることが少なくなったけど
スパムビジネスって、まだまだ現役なんだろうか。

# OUAsCのSMTPサーバは踏み台として沢山アタックが来てたけどなぁ

久々にJavaの話

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6990754

地味に嬉しい更新がJVMに入った。

クラスのスタティック情報を格納しているPermGenの利用方法がクラスローダ間で共有するような感じになって、消費を押さえるようになっているようす。ReferenceCountがなくなれば開放してくれるとか。

これで、ヒープは大量にあまってるのにOutOfMemoryというよくわからない状況に面しなくてもよくなりそう。

最近、Objective-Cを触ってるけどJavaのメモリ管理は楽だったな、とシミジミ・・・

産まれました!

2010/9/28 に元気な男の子です。
名前は、二人で出したA4で2枚分の候補の中から神社に選んでもらい
「旭悠(あきひさ)」と名付けました。
名前って、結構悩むもんですね。
よく寝る子です。

FaceTime on iPhone4

2年使って、2回取り替えされたボロボロのiPhone 3Gから
ようやくiPhone4 に移行した。
性能としては申し分なし、白ではないのが少し残念。
画面にひび割れがなくて普通に見えるって素晴らしい!

で、このiPhone4。FaceTimeってビデオチャットの機能があるんだけど
相手がいない!
使ってるプロトコル的には、SIPをNAT上で使えるようにした感じっぽいから
iChatにすぐにでもつなげる感じなのに・・・
来月MacOSX10.7が発表されて、それで対応とかになったりするのかね?
これが実現したらiPhoneは3Gとかの電話会社に依存しないプロトコルスタックの
電話を実現しようとしているらしい。
電話会社はネットワークを整備してくれたらいい、と。
iPod touchでほとんど用が足りて、外でも電話が使いたい人が3Gとか
電話会社が提供する回線を使うiPhoneを選ぶ、そんな時代がくるかも。

優秀な土管プロトコルのXGPは生き残って欲しいんだけど
ウィルコムがなぁ・・・

用賀ラーメン事情

最近、用賀のラーメン屋でちょっと再発見があって
自分の中の順位が変動した。

ラーメン屋を絞るのは難しいので、ラーメンで順位付け。

・再来軒
 何か気がついたらラーメンを全面に押し出した店に改装されてた。
 ラーメンはどれでも普通においしい。
 というか、おばちゃん達がものすごくフレンドリー。
 びっくりするレベル。
 店は50年やってるとか。ってどっかで見た。
・たまきの「冷やしラーメン」
 最近発見したメニュー。
 冷やし中華じゃない。冷やしラーメン。
 隣のお客さんが頼んでるの見て頼んでみたらこれが旨い。
 氷が入ってすっきりするし、冷やし中華みたいに
 酸味はちょっと・・・と思う夏にぴったり。
・柳屋 つけ麺
 多分、新しく出来てるメニュー。
 頼んでみたら味がくどくなくて変に奇抜でもなくなかなかのヒット。
 用賀に出来たつけ麺屋より好み。
・支美亜 麻婆麺
 量的にガッツリの支美亜ではラーメンは普通の醤油ラーメンだけど
 麻婆麺は、何というかその普通味が麻婆の味を邪魔をしなくて旨い。