<< 2月 2007 | Home | 4月 2007 >>

虚無僧2.0

まだドキュメント書いてませんがとりあえず WebLogic 9.2 で動作します。
設定を変えれば Tomcat もモニタリングできるはず。出来ませんでした。
虚無僧2.0 ダウンロード

追記:ドキュメントたくさん書きました。

関連エントリ:
虚無僧2.0.3 リリース
JConsole で JBoss の MBean を監視
虚無僧2.0 - BSD ライセンスでリリース
@IT - Webアプリの問題点を「見える化」する7つ道具
JMX Remote を使って WebLogic Server 9.x の MBean にアクセス

タグ :

私的 セカンドライフ FAQ

セカンドライフ、IT系のメディアでは散々取りあげられている割にはどういうモノなのか、実際やってみるまでいまいちピンと来ませんでした。
よくわからんけどみんなで参加してみて、ブレインストーミングしようよ!と誘っているんですがやっぱり皆さんピンと来ないようです。
エンジニアがピンと来ないんですから、普通の人はますますピンと来ないでしょうね。
というわけで、良く聞かれる質問をまとめてみました。

Q. セカンドライフってゲームなの?
A. ゲームじゃない、と思う。
ドラゴンを倒したり、町を治めたり、お使いを頼まれたり、という目的はありません。

Q. 何が楽しいの?
A. 色々な楽しみ方があります
・好きな洋服を見つけて着させたり、レアアイテムを収集する。
・チャットしまくる。
・自分で服やアバタの外見を作る -> 良いのができたら売る。
・オブジェクトにスクリプトを練り込んで乗り物や武器、道具を作る。
・スクリプトでカジノやダンスホール等、なんでも作る。
・トラフィックが増えそうな土地を買い占めて、高騰するのを待って土地転がし。
・結局はスクリプト次第。大抵のことはできる!

Q. ゲームの中でお金儲けして空しくない?
A. アヴァロンよろしくゲーム中のお金(リンデンドル = L$ を現金(USD)に換金できます。
でも USD -> L$ に比べて L$ -> は随分低いレートに設定されていて、そうそう簡単にお小遣い稼ぎはできません。
カジュアルに参加する分にはモノが売れたとしてもセカンドライフ内で使うことが多いと思います。

Q. 参加するのにはお金がかかるの?
A. 無料で参加できます。
登録時にクレジットカードや PayPal のアカウントを登録すると L$250(170円相当くらい) もらえます。
メインランドの土地を購入するにはプレミアムアカウント(月額$6)にアップグレードする必要があります。

Q. 物価はどれくらい?
A. ピンキリ。だいたい L$1 〜 L$400 くらい。
タダで配られている洋服やアイテムも大量にあります。

Q. Mac や Linux でも動くの?
A. Windows, Mac, Linux 向けのクライアントがあります

Q. お金を取引できるって話だけど、盗まれたりしないの?
A. お金を渡すときは必ずユーザに対して許可を求められます。
操作ミスをしない限り、変なスクリプトで勝手にお金が盗まれてしまうようなことはありません。

Q. セカンドライフ内でおなか空いたりするの?
A. 空きません。

Q. 死ぬの?
A. 死なないってば!

Q. まだまだ現役でいるつもりなんだけど
A. そっちじゃない。

Q. マシンパワーはどれくらい必要?
A. 結構要ります。
Core 2 Duo の MacBook Pro でもファンが唸ります。
とはいえ初回起動時にマシンのパワーに合わせて自動的にチューニングされます。
デフォルトではマシンパワーを目一杯使うようになってるっぽい。
遠くのオブジェクトを表示しないようにしたり、レンダリングをサボるようにしたり設定することで負荷を下げることができます。
メモリは Mac の場合実メモリ200〜300MBくらい消費します。
CPU 使用率は70〜90 % くらい。1コア分ほぼ丸々もっていかれます。

Q. ネットワークの負荷はどれくらいかかるの?
A. ピンキリ。
ただじっとしていて周りの人が行動していない状況であれば 5〜9KB/secくらいで、下手にwebサーフィンしてるより低いです。
場所によっては映像や音声がストリーミングで流れてくる(再生/非再生は都度選択可能)ので700KB/sec とか平気で使います。

Q. どれくらい利用者がいるの?
A. このエントリを書いている時点で 5,072,892人。
あ、500万人超えましたね。最近人口増加が激しいようです。
2ヶ月以内にログインしてるアクティブユーザは 1,721,854人。
オンラインの人は 27,424人。
くわしくはこちら(Second Life | Economic Statistics)
1月11日の時点では約250万人らしいので超新星爆発的に増えてますね。


楽天 - アヴァロン Avalon メモリアルボックス(DVD)

JavaMail / Google Apps for Domain を使って GMail からメール送信

部活とか研究室同期とかの連絡に使っている自前掲示板があります。
書き込みをすると購読者にメールで通知をしてくれるお利口さんなのですが、去年の7月からどうも DoCoMo の携帯電話にメールが届いたり届かなかったりとどうも不安定です。

localhost に置いてある James から送信しているメールが送信者名を偽装したスパムと思われているようです。
スパムを受信するのが嫌で 25 番を塞いでいる(サーバ管理者としてあまりに安直です。はい、ごめんなさい)のも心証が悪いのかもしれません。

というわけで以前申請してあったGoogle Apps for Domainの GMail を使うことにしました。

Google Apps for Domain自分のドメインで GMail などのツールを利用できるサービスです。

GMail は Web インターフェースだけでなく普通に smtp サーバからも送信できます。
ただ、SSL ポートしか空いていないのと、SMTP 認証 が必要なので今までのザルな James 向けのコードでは動きません。

ごちょごちょとやって、なんとか送信できるようになりました。
スパム扱いされていないようで無事 DoCoMo の携帯電話でも受信できています。

参考のため可能な限りシンプルなコードを載せておきます。

import java.security.Security;
import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class GMail {
public static void main(String[] args) throws Exception {
 final String user = "myname@mydomain";
 final String password = "mypassword";
 String encoding = "ISO-2022-JP";
 String to = "foo@bar.com";
 Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
 Properties props = new Properties();
 props.setProperty("mail.smtp.host", "smtp.gmail.com");
 props.setProperty("mail.smtp.socketFactory.class",
      "javax.net.ssl.SSLSocketFactory");
 props.setProperty("mail.smtp.socketFactory.fallback", "false");
 props.setProperty("mail.smtp.port", "465");
 props.setProperty("mail.smtp.socketFactory.port", "465");
 props.setProperty("mail.smtp.auth", "true");
//  props.setProperty("mail.debug", "true");
 Session session = Session.getInstance(props, new Authenticator() {
  protected PasswordAuthentication getPasswordAuthentication() {
   return new PasswordAuthentication(user, password);
  }
 });
 MimeMessage mimeMessage = new MimeMessage(session);
 mimeMessage.setHeader("Content-Type", "text/plain; charset=" + encoding);
 mimeMessage.setFrom(new InternetAddress(user, user, encoding));
 mimeMessage.setRecipients(Message.RecipientType.TO
   ,new Address[]{new InternetAddress(to)});
 mimeMessage.setSubject("subject", encoding);
 mimeMessage.setText("テストです", encoding);
 mimeMessage.setSentDate(new Date());
 Transport.send(mimeMessage);
}
}


MXレコードを Google のモノに変更した瞬間から今までは業者に跳ね返っていたであろうスパムがザクザク届き始めました。

でも Gmail なら勝手にスパムを振り分けてくれるのが楽ですね。
メールの中身を握られてしまうのは心得ませんが、0 に近い TCO にはかないません。
もっと競合して選択肢が増えることを願うばかりです。

タグ :

陳旧性陰影?

今日は健康診断に行ってきました。
去年は年度末がサンフランシスコ出張で行きそびれてしまい、健康診断は実に2年ぶりです!

しっかり診て貰おうとバリウムに加えいくつかオプションの血液検査も頼んでしまいました。
4年ぶりのバリウムは食事抜きの胃に染みて実に美味。おかわりをしようと思ったくらい!ということは全くなくあまりのエグさに終始ブルー。

ちょっと待たされましたが、一部の検査項目をのぞいて当日中に結果をだしてくれました。
新宿健診センター恐るべし。

体はまったくもって健康とのことですが、胸部X線の診断に「左 肺野上 小 陳旧性陰影」という審査結果が。
「これは問題ないです」とサラっと流されてしまったのですがなんだか嫌な感じのする漢字の羅列なので調べてみました。
久野マインズタワークリニック > Q&A; よくあるご質問

Q. 胸部X線検査で「陳旧性陰影あり」とありますが、これはどういうものでしょうか?
当日の結果説明では、X線はきれいと言われましたが・・
A. 陳旧性陰影とは、以前肺に炎症があったもののことを意味します。肺炎や結核など炎症の原因はいろいろありますが、知らないうちにかかって、知らないうちに治っているケースがほとんどです。現時点で炎症を認めないという意味で「X線はきれい」と説明しましたので、ご心配にはおよびません。

ふーむ、以前肺に炎症があったそうで。肺炎も結核もやったことなく心当たりないんですが。

まぁ問題ないということなので気にしない気にしない!

.Net/C# で日付型(DateTime)を扱う

仕事で必要にかられて .Net を触ったのでメモ。
mono で遊びながら予習しておいて良かったです。

現在日時を取得: DateTime.Now
文字列を日時型に変換: DateTime.ParseExact("19770617152306","yyyyMMddHHmmss", null)
日付型を文字列に変換: dateTime.ToString("yyyy-MM-ddTHH:mm:ssZ")

Javaナイトセミナー(vol.4) 〜2時間集中 Javaトラブル解決ドリル〜

に参加してきました。
講師は岡崎 隆之さん。 Sun の Java コンサルタントだそうです。

JVMの基本的な話から、トラブルシューティングに便利なツール、エンジニアとしての基礎体力の付け方みたいな話まで幅広い内容。

OutOfMemoryError 発生時にヒープの使用状態をダンプしてくれる-XX:+HeapDumpOnOutOfMemoryError ってオプションは便利そう。
万が一に備えて、の jnlp ファイルにも書いておこうか・・・と思いましたが Java Web Start アプリケーションだとダンプしてくれても標準/標準エラー出力がとれませんね。

なにか方法ないかしら?

タグ :

セカンドライフ - クライアントアプリ新バージョン登場

なんだか面白そうだけどまだ何が出来るのか、何が出来ないのか見極めがついておらずウロウロしている段階です。

セカンドライフの世界に飛び込むには専用のクライアントアプリケーションが必要です。
Windows,Mac,Linuxと揃っているんですが残念なことに結構不安定でした。
先週水曜日に始めて既に10回くらい落ちている気がします。

不安定なことは認識されているようで、うれしいことにクライアントがアップデートされるようです。
もともと月曜リリース予定でしたが、火曜日に伸びました。
#といってもカリフォルニアの会社なので日本では実質水曜
1.14.0 Viewer Update postponed until Tuesday Morning. Preview available.

しかし現在セカンドライフのクライアントはオープンソースベースで開発されているので、明日リリースされるバージョン 1.14.0 相当のリリース(First Look Viewer 1.13.4.59748)はもうダウンロード可能です。
1.13.4.59748 The First Look Viewer (Main Grid)
昨日から利用していますが今のところ落ちていません。だいぶ安定している感じでお勧めです。
-> セカンドライフ

百度が日本語版サイト検索、画像検索のベータ版提供を開始

してたんですね。
知りませんでした。
http://www.baidu.jp/
百度なだけに話題沸騰!・・・とはいっていないようで(お粗末)。

Parallels Desktop for Mac - 今後の展望

他のプラットフォームと同じくただの Virtualization ソリューションにフォーカスするかと思えば、いきなりグラフィックのハードウェアアクセラレーションに対応してやる気を見せている VMware Fusionですが、Parallels の動向も気になるところです。
ちょっと気になる点を Q&A; 形式でまとめたエントリがオフィシャルブログに掲載されていました。

Ask Ben Anything - iSight in Vista, firewire printers, 3D graphics update, changing the size of a VM windows
-------
Q1 iSight を Vista で使えるようになるのはいつ?
A1 Apple が Vista 用のドライバを提供したら対応します

Q2 Firewire 接続のプリンタ(Epson Stylus Photo R1800)が Windows で認識されません
A2 現在の所、プリンタ接続は LAN または USB2.0 のみサポート。Firewire 接続は年末に対応予定

Q3 グラフィックスのハードウェアアクセラレーションに対応するのはいつ?
A3 これが一番聞かれる質問です!Vista の Aero インターフェースのサポートも含めてハードウェアアクセラレーション機能に対応できるよう作業中です。以前にも説明したとおり、生産性に非常に重要な機能 - Transporter や Coherence - を早急に提供するため、この機能の提供スケジュールは先延ばしになりました


Q4 フルスクリーンモードからウインドウモードに切り換えたとき、ウインドウサイズがやたらデカイです。ウィンドウを小さくするために右下の角をつかむこともできません。
A4 これは簡単えす。ウィンドウズより[デスクトップ>右クリック>プロパティ>設定>画面の解像度]をより小さい解像度に手動で設定し、[適用]をクリックすればウィンドウが縮まります。
----------
iSight が XP で使えるとは知りませんでした。
あと DirectX 対応は延期になってたんですね。ちょっとガッカリ。

タグ :

@IT - Webアプリの問題点を「見える化」する7つ道具

を7つ道具の一つとして取りあげていただきました。光栄です。
Webアプリの問題点を「見える化」する7つ道具
Webアプリのみならず、Javaのアプリケーション全般に応用できるトラブルシューティングノウハウが端的に説明されており大変素晴らしい記事です。
解析手順のフローチャートなんかは頭に入れておきたいですね。

スレッドダンプの解析ポイントについては侍の古びたドキュメントよりよっぽどわかりやすいです!
#そもそも前と同じ状態なら"<"が表示されて、デッドロックしたらドクロ、とかいまだにドキュメントで説明してません

ちなみに Tomcat や WebLogic9.x に対応した虚無僧はもう少しでリリースできそうです。
定期的にサンプリングして見える化してもらえれば・・・。

関連エントリ:
虚無僧2.0.3 リリース
JConsole で JBoss の MBean を監視
虚無僧2.0 - BSD ライセンスでリリース
虚無僧2.0
JMX Remote を使って WebLogic Server 9.x の MBean にアクセス

タグ :

セカンドライフの仕組み

なんだか最近オンラインメディアを賑わしているセカンドライフ。
試してみて色々と疑問だった点が明らかになりました。

・物品販売の仕組み
Second Life の世界の中では誰でも好き勝手にモノを作ったり、テクスチャを張ったり、コピーしたりできるらしいと聞いていました。
簡単にコピーできたら商売はなりたたないけれども、どういう仕組みになっているんでしょうか?
答えは簡単で、モノを作った人はそのモノに値段を付けたり、他人にコピー不可、編集不可といった属性を設定することができる仕組みになっています。
カッコイイ形状や素敵なテクスチャを貼り付けてオリジナリティ溢れるモノを作って置いておけば気に入った人が買っていってくれるかもしれないということです。
モノは、服や乗り物、武器など様々あって値段は一般的なもので L$0 〜 L$500 くらい。
モノにはLinden Scripting Languageというスクリプトを埋め込むことが出来ます。
くるくる回る看板、本当にお金を掛けられるスロットマシン、乗り物など色んな応用が出来て楽しそうです。

・土地の相場
[N]「セカンドライフ」で土地を購入というエントリで、「512平米、維持費無しをL$500で購入」とのことでした。
そんな相場なら迷いなく買って遊べるなーとテキトウに探したらいっぱいありました。さすがにバーチャルだから土地は格安ですね!
で、エイヤ、っと購入してよくよーく説明書きを読んでみると違いました。
どうやらレンタルの土地で、月額使用料が発生する場所でした。
セカンドライフのシステム自体には土地をレンタルする仕組みは備わっていないので、「土地の購入」という手続きを「用地利用権の予約」機能代わりに使っているようです。
レンタル中は毎月使用料を支払うわけですが、自動引き落としのような仕組みはないので、直接オーナーにセカンドライフ内で送金するか、看板型の振り込み用オブジェクトをクリックして支払うようになっています。
どうやら[N]でも勘違いしておられたようで、記事が後日訂正されてました。あらら。
まぁ、島のオーナーも Linden Lab に上納金を支払っているので当たり前と言えば当たり前ですね。
レンタルフィーの一例はこんなもんです:
512 Sqm - L$750 Weekly / L$2,900 Monthly
1024 Sqm – L$1,250 Weekly / $L4,800 Monthly
2048 Sqm – L$2,400 Weekly / $L9,500 Monthly
4096 Sqm – L$3,250 Weekly / $L12,500 Monthly

現実の土地よりはもちろんよっぽど安いですが、安易にポコポコ借りちゃって良い値段ではありませんね。

マイホームはセカンドライフでも夢?

・ゲームのルール ≠世界のルール
土地の取引でもそうですが、セカンドライフというプログラム自体の制約は非常に緩いです。
空を自由に飛んだり、モノを勝手に作ったり、お金をやりとりしたり。
通常のゲームであれば、ゲーム内で出来ること=やって良いこと、なのですがどうもセカンドライフは違うようです。
例えば、レンタルの土地を手続き上は「購入」して、レンタルフィーを支払わないこともできます。
巨大なオブジェクトを作成して放置したり、身につけて町を闊歩したりということもできます。
ただ、土地毎にルールがあって、それを守らない人は場合によっては出入り禁止にされる可能性があります。
ゲーム自体に「ban」(ブラックリスト)という仕組みがあるからです。
なので、中で生活するときは「出来ること」よりもやや制限された範囲内で行動をすることになります。


ハメを外しすぎずにある程度ルールを守っていく緊張感、これが逆にリアルさを演出しているのかもしれません。

ここらへん最初わかっておらず、サンドイッチマンの看板、「何それ?」と聞かれたので「あ、よければもってってー」と道路に置いたら管理人に怒られてしまいました。
善意で開放されている場所なので、その土地のルールはしっかり守らないといけません。
サンドイッチマン自体禁止されている区域もあるみたいです。

・面白いの?
まぁ、仮想世界を歩き回っているだけである程度は楽しいです。
でもやっぱりリアルな知り合いがいないとイマイチかな?
やっている方、是非声かけてください。
-> セカンドライフ

セカンドライフ - Second Life に挑戦!

何かと話題のセカンドライフを試してみました。

仮想世界で土地を持ったり、好きな服を買ったり、目的のないゲーム(?)みたいなものです。

アカウントの作成でまずつまずくのが姓の選択。
ファーストネームは自由に入力できますが、姓は予め用意されているものからしか選べません。
一部 Yoshikawa、とかあるもののほとんど日本人に馴染みのない姓ばかりです。
悩んだ挙げ句「これ!」と決めても「既に取られてます」と言われてしまいガックシ。
ファーストネームを入力したのち、そのファーストネームとのペアで空いている姓を検索することができます。ファーストネームに一般的な名前をつける場合は最初から検索した方が良いです。

さて、アカウントを作ってクライアントアプリをダウンロードしたらログインするだけ。
ログインすると初心者向けの島にいますが、ここで空の飛び方とかチャットの仕方とかを学べます。

GUIは英語ですが、設定で日本語化もできるみたい。ただ、日本語のリソースは"beta"ということで、直訳的な気持ち悪いのばかりなのですぐに英語に戻してしまいました。
[Edit > Preferences... > General > Language](再起動が必要)

基本操作を学んだら、あとは自由にぶらつくだけ。
たとえばビーチでまったり。


とある島を散歩していたらサンドイッチマンがいました。
どうやら広告のアルバイトみたいで、看板を背負っていることでお金がもらえるみたいです。
他にも、"camping" がいいよと。
"camping" はカジノの客引き用のボーナスみたいなもので、専用の椅子に座っているだけでお金がもらえるらしいです。

何をすればいいかわからなくても、そこらへんの人が親切に教えてくれるのがいいですね。
#ただし、一部を除き英語が必要


キャンピング(L$2/10mins)&サンドイッチマン(L$2/10mins)で毎分4リンデンドル稼いでいるところ

しかし、L$4というと、1〜2セントほどなので電気代にもならないかもしれません。
何が楽しいんだか、楽しくないんだかよくわかってませんがしばらく遊んでみようと思います。

結構マシンパワーが必要ですが、一箇所で止まっている限りはほとんどネットワーク帯域は使わないみたいです。
CPUパワーさえ余っていればログインしっぱなしにしておいても大丈夫そう。
仕事中に仮想世界の自分はビーチでのんびりバカンス♪なんてもいいかもしれません。
-> セカンドライフ

JMX Remote を使って WebLogic Server 9.x の MBean にアクセス

JMX の仕様は昔からありますが、それにアクセスする標準的な方法はしばらくなく、WLS6.0 〜 8.1 まで、BEA は独自に EJB / RMI をベースとした方法を提供していました。

しばらくすると、JMX Remote APIという仕様が策定されました。最近の WebLogic (9.x 以降)や Tomcat が対応しています。
WebLogic は JMX Remote API に対応したのに伴い従来のアクセス方法には対応しなくなった(みたい?)※で、虚無僧が WLS9.x で動かない(みたい?)とのことです。

で、勉強がてらドキュメントと睨めっこして可能な限りシンプルなコードを書いてみました。
従来の WLS の API との一番の違いは MBean のリモートスタブそのものを取得できないことです。
オブジェクト名と属性(getter)を指定して結果を取得する(MBeanServerConnection#getAttribute)か、オブジェクト名とメソッド名を指定してメソッド実行をする(MBeanServerConnection#invoke)ことになるようです。

・サンプルコード


import java.util.Properties;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.naming.Context;

public class MBeanTest {
public static void main(String[] args) throws Exception {
Properties props = new Properties();
props.put(Context.SECURITY_PRINCIPAL, "weblogic");
props.put(Context.SECURITY_CREDENTIALS, "weblogic");
props.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote");
JMXConnector connector = JMXConnectorFactory.connect(
new JMXServiceURL("service:jmx:t3://localhost:7001/jndi/weblogic.management.mbeanservers.domainruntime"), props);
MBeanServerConnection connection = connector.getMBeanServerConnection();
ObjectName sr = new ObjectName("com.bea:Name=AdminServer,Location=AdminServer,Type=ServerRuntime");
System.out.println(connection.getAttribute(sr, "State"));
connector.close();
}
}


・実行イメージ
$ java -cp weblogic.jar:. MBeanTest
RUNNING
$


※ドキュメントでは旧API は「非推奨」ですが、〜WLS8.1 と WLS9.x では内部的な MBean の実装モデルが随分違います。なので、「枯れていない」ラッパー用のコードで一応使えるようになっているような状況と思われます。
「もう基本的にメンテはしないよ」という通常の「非推奨」とは違うレベルでお勧めできません。
参考:
・WLS9.2 - WebLogic Server MBean について
・WLS8.1 - WebLogic JMX サービスの概要


関連エントリ:
虚無僧2.0.3 リリース
JConsole で JBoss の MBean を監視
虚無僧2.0 - BSD ライセンスでリリース
@IT - Webアプリの問題点を「見える化」する7つ道具
虚無僧2.0

タグ :

jconsole で WebLogic 9.x に接続すると " User does not have permission on weblogic.management.mbeanservers"

JDK1.5付属の jconsole で WebLogic 9.2 に接続しようとしたら以下の様な警告がでました。
-----
<2007/03/18 0時03分06秒 JST> org.omg.CORBA.NO_PERMISSION: User does not have permission on weblogic.management.mbeanservers to perform lookup operation. vmcid: 0x0 minor code
-----

管理コンソールを見るとデフォルトで IIOP の有効化にチェックがついているし、ユーザID/パスワードは指定しているのになんか変。
調べてみると同じ現象に遭遇している人がいましたが、解決策は出ていませんでした。
Weblogic integration problem

簡単に再現するけども確認済みおよび解決済みの問題にも挙がっていないのでバグではなさそう。

ちょっとドキュメントを見てみると、IIOP 接続を使うには詳細オプションからデフォルトのユーザ名、パスワードを設定する必要があることが分かりました。

管理コンソール > 環境 > サーバ > プロトコル > IIOP

設定後は再起動が必要です。
無事 WLS 内の MBean を覗くことができました。

Mac で動いてる jconsole

しかし、この設定をするとユーザID、パスワードなしにも接続ができてしまうようです。
jconsole自体リソースの消費が激しいので、ローカルの監視には使わないようにとのことですがリモートの監視目的でも WebLogic には向いていなさそうです。
なんとユーザID/パスワードなしでサーバのシャットダウンも行えてしまいました。

どうしても jconsole を使って IIOP で監視したい場合はMonitorグループにだけ所属するユーザをデフォルトユーザに割り当てれば良いですね。
認証無しで MBeans にアクセス出来てしまうことに変わりはありませんが。


以下検索用にフルスタックトレース。
・jconsole側
-------
Exception in thread "JConsole.addUrl" org.omg.CORBA.NO_PERMISSION: vmcid: 0x0 minor code: 0 completed: No
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at java.lang.Class.newInstance0(Class.java:350)
at java.lang.Class.newInstance(Class.java:303)
at com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase.getSystemException(MessageBase.java:897)
at com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage_1_2.getSystemException(ReplyMessage_1_2.java:99)
at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.getSystemExceptionReply(CorbaMessageMediatorImpl.java:572)
at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.processResponse(CorbaClientRequestDispatcherImpl.java:430)
at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.marshalingComplete(CorbaClientRequestDispatcherImpl.java:326)
at com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.invoke(CorbaClientDelegateImpl.java:129)
at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:457)
at org.omg.CosNaming._NamingContextStub.resolve(_NamingContextStub.java:244)
at com.sun.jndi.cosnaming.CNCtx.callResolve(CNCtx.java:440)
at com.sun.jndi.cosnaming.CNCtx.lookup(CNCtx.java:492)
at com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:185)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1817)
at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1787)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:259)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
at sun.tools.jconsole.ProxyClient.(ProxyClient.java:117)
at sun.tools.jconsole.ProxyClient.getProxyClient(ProxyClient.java:87)
at sun.tools.jconsole.JConsole$2.run(JConsole.java:410)
Exception in thread "JConsole.addUrl" org.omg.CORBA.NO_PERMISSION: vmcid: 0x0 minor code: 0 completed: No
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at java.lang.Class.newInstance0(Class.java:350)
at java.lang.Class.newInstance(Class.java:303)
at com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase.getSystemException(MessageBase.java:897)
at com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage_1_2.getSystemException(ReplyMessage_1_2.java:99)
at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.getSystemExceptionReply(CorbaMessageMediatorImpl.java:572)
at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.processResponse(CorbaClientRequestDispatcherImpl.java:430)
at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.marshalingComplete(CorbaClientRequestDispatcherImpl.java:326)
at com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.invoke(CorbaClientDelegateImpl.java:129)
at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:457)
at org.omg.CosNaming._NamingContextStub.resolve(_NamingContextStub.java:244)
at com.sun.jndi.cosnaming.CNCtx.callResolve(CNCtx.java:440)
at com.sun.jndi.cosnaming.CNCtx.lookup(CNCtx.java:492)
at com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:185)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1817)
at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1787)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:259)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
at sun.tools.jconsole.ProxyClient.(ProxyClient.java:117)
at sun.tools.jconsole.ProxyClient.getProxyClient(ProxyClient.java:87)
at sun.tools.jconsole.JConsole$2.run(JConsole.java:410)
Exception in thread "JConsole.addUrl" org.omg.CORBA.NO_PERMISSION: vmcid: 0x0 minor code: 0 completed: No
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at java.lang.Class.newInstance0(Class.java:350)
at java.lang.Class.newInstance(Class.java:303)
at com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase.getSystemException(MessageBase.java:897)
at com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage_1_2.getSystemException(ReplyMessage_1_2.java:99)
at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.getSystemExceptionReply(CorbaMessageMediatorImpl.java:572)
at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.processResponse(CorbaClientRequestDispatcherImpl.java:430)
at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.marshalingComplete(CorbaClientRequestDispatcherImpl.java:326)
at com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.invoke(CorbaClientDelegateImpl.java:129)
at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:457)
at org.omg.CosNaming._NamingContextStub.resolve(_NamingContextStub.java:244)
at com.sun.jndi.cosnaming.CNCtx.callResolve(CNCtx.java:440)
at com.sun.jndi.cosnaming.CNCtx.lookup(CNCtx.java:492)
at com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:185)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1817)
at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1787)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:259)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
at sun.tools.jconsole.ProxyClient.(ProxyClient.java:117)
at sun.tools.jconsole.ProxyClient.getProxyClient(ProxyClient.java:87)
at sun.tools.jconsole.JConsole$2.run(JConsole.java:410)
-------

・サーバ側
-------
<2007/03/18 0時03分06秒 JST> org.omg.CORBA.NO_PERMISSION: User does not have permission on weblogic.management.mbeanservers to perform lookup operation. vmcid: 0x0 minor code
: 0 completed: No。org.omg.CORBA.NO_PERMISSION: User does not have permission on weblogic.management.mbeanservers to perform lookup operation. vmcid: 0x0 minor code: 0 completed: No
at weblogic.corba.cos.naming.NamingContextImpl.throwNamingException(NamingContextImpl.java:509)
at weblogic.corba.cos.naming.NamingContextImpl.resolve(NamingContextImpl.java:169)
at weblogic.corba.cos.naming._NamingContextAnyImplBase._invoke(_NamingContextAnyImplBase.java:306)
at weblogic.corba.idl.CorbaServerRef.invoke(CorbaServerRef.java:244)
at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:224)
Truncated. see log file for complete stacktrace
javax.naming.NoPermissionException: User does not have permission on weblogic.management.mbeanservers to perform lookup operation.
at weblogic.jndi.internal.ServerNamingNode.checkPermission(ServerNamingNode.java:415)
at weblogic.jndi.internal.ServerNamingNode.checkLookup(ServerNamingNode.java:394)
at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:169)
at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:206)
at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:214)
Truncated. see log file for complete stacktrace
>
-------

タグ :

格安電子書籍販売 - eBookJapan

プレスブログeBookJapan というのが紹介されていました。

本のインターネットショップで、立ち読みできるところまでは普通なんですが、ちょっと面白いのは購入できるのが電子書籍、つまりダウンロード販売なのです。
立ち上げたばかりだと思いますが、「電子書籍14117点の品揃え」と謳っていて結構揃っているようです。
ぱっと思いつくところで 寄生獣ドラゴンボールウイングマンとマンガばかり検索してみたら1勝2敗。
少年漫画にはやや弱い品揃えかな?

閲覧には専用のソフトが必要で、残念ながら Mac では現在のところ閲覧できないようです。
動作環境について    

ダウンロードした電子書籍は PC にスティックされていて、他のマシンでは読めない仕組みです。
読む側としてはやや面倒な感じですが、結構厳しい著作権保護機構を組み入れることで多くの書籍の契約を取り付けたのでしょうね。

現在、ユーザ拡大のためか「無料でお友達にeBookをプレゼントキャンペーン」というのをやっているようです。興味があれば友達、同僚とプレゼントし合ってみてはいかがでしょうか。

値段は電子データを販売するだけなのでさすがにお値頃感があります。
手塚治虫作品集 全382巻 119,805円(税込)沈黙の艦隊 全32巻 13,440円(税込)とか思わず買ってしまいそうでした。
全巻まとめて買える作品のリストはこちら

実際に手元にそろえたら値段もさることながら体積もたいしたことになるでしょうね。場所をとらないのは魅力的です。
ただ、好きな本であれば実際にモノを手元に置いておきたいという気持もありますが。
将来的には Second Life とか PS3 の Home といった仮想現実感のあるサービスで、仮想の自分の部屋に購入した漫画を置けたら「持ってる感」があっていいですね。

残念ながら Mac では読めないので、Parallels Desktop を使って Windows XP 上から立ち読みをしてみました。
立ち読みしたのは「沈黙の艦隊」第一巻。立ち読みできるのはほんの5,6ページかと思えば意外にも2話分、52ページも読ませてくれました。

Parallels Desktop で沈黙の艦隊を読んでいる様子

パソコンに向かって本を読むのはつらいかなーと思いましたが、画質は悪くなく、カーソルでパラパラとページをめくれて結構快適です。
見事に続きを購入したい気分にかられましたが、Mac に対応するまでガマンすることにします。

Safari のスペルチェック機能

Mac OS X は OS レベルのスペルチェッカを内蔵していますが、最近 Safari で便利に使っています。

使い方は簡単。Safari のメニューから [編集 > スペル > 入力中に自動スペルチェック] にチェックを入れるだけ。

Safari のスペルチェックメニュー

これでスペルチェック機能が有効になります。
あとは一般的な OSX のソフト同様スペルミスが見つかると赤い波線で教えてくれるようになります。


スペルミスが見つかった状態

自分で訂正してもいいですし、何が正解なのかわからなければ右クリックで表示される訂正候補から選択してもいいです。


sucessfully -> successfully

"Cmd + :" でも候補を表示させることができます:

タグ :

使い捨てないマスク - 深呼Qマスク到着!

先日注文した深呼Qマスクですが、早速活躍しています。

最初に届いたのを見て思ったのは「小さい!」

下が女性用(M)、上が男性用(L)


フィルタリングの性能以前に、こんなの狭いのでちゃんと口、鼻を覆ってくれるのかなー?と心配でした。
しかし広げてみるとアラ不思議!細かいプリーツが広がって見事に立体的な構造を作り出してくれます。
あまりに面白いのでわざわざビデオに撮ってみました。

YouTube - 深呼Qマスク

もちろんマスク上部にはワイヤーが入っていて鼻筋をしっかり抑えられるので不織布の立体マスクに近いフィット感があります。


スティッチは口がデカいので鼻まで届きませんが、人間であればちゃんと口、鼻を覆ってくれます

素材はマイクロエアースクリーンという非常に細かいメッシュ状のナイロンで非常に丈夫そうです。
肉眼でもそのメッシュ構造がほとんど見えないくらい細かいのでさすがにここを花粉は通り抜けることはないだろうと安心できます。

マイクロエアスクリーンの表面

細かいメッシュだけれども、空気はしっかり通すようで息苦しくはありません。
プリーツ構造がしっかりとした立体構造を作ってくれるので吸い込み時に口にくっついてしまうことなく、マスク全体から空気を取り込めるため抵抗が少ないようです。

使い捨てマスクは随分と安いのもあるので、二千円という価格ではなかなか損益分岐点にたどり着けませんが、立体成型の不織布マスクを1シーズン使うことを考えれば十分元が取れるのではないでしょうか。
また使い捨てではもったいない掃除機を掛けるとき、テレビの裏の配線をいじるとき等、ホコリを吸い込んでしまいそうなちょっとしたタイミングで気軽に使えるのも良いですね。

とりあえず家に帰ったら手を洗ったついでにもう一度ハンドソープをつけて、手の間に挟んで軽く手を擦りつけて洗っています。ホコリすらからまないくらい非常に細かい網戸みたいな
通気性が非常に良いので数時間で乾きます。

・関心空間 - 深呼Qマスク
・GIZMONDO - 「深呼Qマスク」:洗って使いまわせるマスク


楽天 - 深呼Qマスク Lサイズ(男性用)
Amazon - 深呼Qマスク Lサイズ(男性用)   

楽天 - 深呼Qマスク Mサイズ(女性用)
Amazon - 深呼Qマスク Mサイズ(女性用)

Amazonを"マスク"で検索
楽天市場を"マスク"で検索

document.location.hash を使ってブックマーク可能なAJAXアプリケーション

近年DynamicHTML や AJAX といった技術を使ったサイトを見かけますが、ブックマークできない/しにくいものが多くて困ります。

DynamicHTML を使うと画面の一部だけを書き換えることで画面遷移が発生しない軽快なページを表現できます。
しかし、その代償として状態に変化があっても URL が変化しないため URL のクエリに情報を保持させて、ブックマークから開いた時に状態を回復させることができません。

せっかく軽快に動作するのに、「ほらココ!」ってメールやチャットで伝える時には「リンク」をクリックしてクエリ入りの URL で再描画させたり、右クリックで URL をコピーしたりするのは面倒です。

、というわけで、画面遷移が発生しないアンカの部分を JavaScript から操作できなものかと調べたらアッサリできました。
document.location.href = "何か"; でアクセス出来るみたい。

画面上で何か変更が生じたらアンカにパラメータを織り込むように同時に更新。
また onload でアンカにパラメータを確認したら状態を回復。
これでブックマークからも状態を回復できるし、メールやチャットでもそのまま URL を渡すことができます。

サンプルは簡単Google Mapsに実装しました。
地図のドラッグ、地図タイプの変更、ズームレベルの変更の度にアンカが書き換わりブックマークしておけば同じ状態を回復できます。
同時にWebサイト貼り付け用のコードが生成されます。

簡単Google Maps

あまり例を見ないので何か壁があるのかなーとも思いましたが特に難しいことはないですね。

・2006/03/13 - Google Maps 簡単貼り付け
・2006/03/14 - 続簡単Google Maps
・2006/03/18 - 続続簡単Google Maps

本製品はプレミアムチロルです。価格にご注意下さい。




今日のおやつにと、「チロルチョコ宇治まっ茶」早速買ってきました。
箱買いはしてないです。

Safari でタブ表示時に終了しようとすると警告 - TabStop

タブを使った Web ブラウズは非常に快適ですが、気がつくとタブの数がとんでもなく増えてしまいます。

増えすぎた時、Safari では以下のショートカットで不要なタブを整理しています。

タブの切りかえ: [Shift + Cmd + ←/→]
タブを閉じる: [Cmd + w]

ただ、良くやってしまうのが [Cmd + w] を押下しようとして誤って [Cmd + q] で Safari を終了してしまうこと。
「あぁ、あれまだ参照したかったのに、どこのページだっけ・・・」、と履歴からの発掘作業が必要になります。
最近の FireFox では終了時に警告してくれるのですが、Safari でも同等のことを実現するプラグインがありました。

・NukethemfromOrbit.com - TabStop

インストールして、タブが複数ある時に終了しようとすると以下のようなダイアログが表示されて警告してくれます。


これで安心!

タグ :

オリンパス 重さ375g の世界最小・最薄・最軽量の一眼を発表 E-410 / E-510

E-400 として欧州で発売されていたものの焼き直しかと思えばライブビューを搭載しての登場です。
・CNET Japan - 重さ375g!オリンパス、軽くて薄い一眼デジカメを発表--E1後継機もお披露目

今回発表されたのは軽い、小さい E-410と手ぶれ補正付きのE-510。
最近のオリンパスのコンパクトデジカメは手ぶれ補正を搭載していたので、いずれ一眼にも載っけてくるのは既定路線でしたが、こんなにすぐ出してくるとは思いませんでした!
世界最小・最薄・最軽量 “ライブビュー”デジタル一眼レフカメラ「E-410」発売
ボディー内手ぶれ補正機構を搭載した“ライブビュー” デジタル一眼レフカメラ「E-510」を発売

手ぶれ補正はレンズではなくセンサー側をシフトさせる方式。
レンジシフト方式はパナソニックに任せる方針でしょうか。

ホコリ落とし機能で先を行っていたと思えば去年夏から他社の新機種ラッシュで手ぶれ補正、ホコリ落とし、1000万画素というトレンドができて置いて行かれていたオリンパスです。
ここでトレンドをふまえつつ、小型、ライブビュー、さらには露出補正効果、ホワイトバランスのプレビューというユニークな機能を搭載してきました。
小型ながら xD ピクチャカードだけでなく、コンパクトフラッシュにもちゃんと対応しているのがエライです。
惜しいのはせっかくライブビューができるのに液晶が動かないことくらい?
せめて上下方向の視野角が確保されていることを願うばかりです。

一眼レフのシェアではいまいちパットしないOlympusですが、最近はコンパクトデジカメで魅力的な機種を投入して売れてきてるらしいので、そのまま一眼でもがんばってほしいところです。

特に小型の一眼という分野ではフォーサーズ規格は有利なはず。
女性や一眼初心者の新規顧客も開拓できそうですね。

タグ :

チロルチョコ宇治まっ茶 登場!

良く仕事中に抜け出しておやつを買いにオフィス近くのAM/PMに行きます。
せんべい、ガム、チョコレート等を買うんですが良くやられてしまうのがレジ前のチロルチョコ
おむつと一緒にビールを買ってしまうがごとく無意識で買ってしまいます!?
「いちご」とか「きなこもち」とか、不思議な名前ながらも食べてみるとどれも美味しくてやみつきになってしまいますね。

で、どうやら今度はチロルチョコに新しい仲間「宇治まっ茶」が加わるようです。

最近食べたイチゴ味は確か 20円するちょっと高級なバージョンでしたが、まっ茶味は「プレミアム」を謳っていて 30円もします!

チロルチョコに30円はちょっと高い気がしますが、30円で味わえる「プレミアム」なんてなかなかないですね。
昨日、3月5日発売らしいので明日早速食べてみようかと思います。





チロルチョコ きなこもち


チロルチョコ ふんわりいちご 100粒入り


チロルチョコofficial book

花粉症! - 使い捨てないマスク注文

おととしくらいから花粉症に悩まされています。
目がかゆくて鼻水はダラダラ!昨晩はあまり眠れなかったくらいです :(

花粉との接触をちょっとでも避けようと、今日からマスクをすることにしました。
風邪の時と違って、花粉症でマスクを使うとなると毎日、長期間つかうことになりますね。
使い捨てマスクだと結構コストがかさんでしまいます。
ガーゼのマスクは洗ってつかえないことはないですが、目がそんなに細かくないから花粉を通してしまいそうだし、不織布のマスクはすぐケバ立っちゃうしで悩ましいところです。

つい最近どこかで洗って再利用できるマスクが紹介されてたなーと思って調べたらありました!
その名も深呼Qマスク

しっかり花粉をとらえてくれる性能がありながら楽に呼吸でき、洗っても性能が落ちないそうです。
早速自分の分と妻の分をWebLogic Server を使っているケンコーコム・楽天市場より注文してしまいました。

サイズは S/M/L とあって価格は2000円前後。
60回連続で洗濯機にかけても性能が落ちないという試験結果が出ているそうです。
普通のマスクより値がはりますが、十分元が取れそうです。

・関心空間 - 深呼Qマスク
・GIZMONDO - 「深呼Qマスク」:洗って使いまわせるマスク


楽天 - 深呼Qマスク Lサイズ(男性用)
Amazon - 深呼Qマスク Lサイズ(男性用)   

楽天 - 深呼Qマスク Mサイズ(女性用)
Amazon - 深呼Qマスク Mサイズ(女性用)

Amazonを"マスク"で検索
楽天市場を"マスク"で検索

タグ :

お笑い専門動画サイト owarai.tv

ウチは妻がちょっとお笑い好きで毎週爆笑問題の検索ちゃんを見ています。

一応クイズ番組の形式をとっていて、回答者が選んだテーマに沿って検索して出てきた話題をクイズにする、というものですがクイズ自体や正解数など全然お構いなしにしゃべりまくってるのがなかなか良いです。

YouTube にもお笑いの動画がよく転がっていますが、わざわざ探してまでして見ることはありません。
探すのが面倒だたらそれ専用にしてしまえ、という発想なのか、お笑い専門の動画サイトがリリースされたようです。
owarai.tv



投稿形式ではなく、プロ(?)の映像が提供されているようですが一定の品質の映像を確実に見られるという点は YouTube なんかとは違いますね。

爆発的にヒットしたら逆に専門化してトラフィックを稼ぐという視点は面白いかも。
しかしあんまり有名な芸人の映像はなさそうです・・・。