<< 6月 2010 | Home | 8月 2010 >>
PR: 転職    転職    合宿免許    漫画    シルバー    ブライダルエステ    墓地・霊園    葬式   

ベートーベン ピアノソナタ 第20番 第2楽章

ベートーベン ピアノソナタ 第20番
Beethoven Piano Sonata No20

この曲って、全曲通じて、強弱記号が2箇所にしか指定されていなかったらしい。自分で強弱を付けてみましょう、みたいな弟子向けの練習問題だったのかもね。

Uq WiMax

秋葉のヨドバシに立ち寄ったら、UQ WiMaxがキャンペーンやってて、ルータとセット(Aterm WM3300R)で、1円になってた。まぁ縛りも無いんでダメならすぐ解約すればいいかなと買ってきてみた。

とりあえず家の中で、机の上でもok。ただ北側の部屋だと窓辺まで持って行かないと厳しい感じ。近所の喫茶店は中でもokだった。

1分に1回アクセスするようにして、電池の持ちを見たら、2時間47分くらい。カタログスペックが2.5時間だから、まぁまぁかな。

で、お次はこいつの出番。


SANYO KBC-L2AS

これをつないでみたところ、9時間20分もったから、こいつと一緒なら、1日okな感じ。

電池ケースのところに、SSIDとかパスワードが書かれていて、これって変更できないのかと思ったら、設定画面でSSIDもパスフレーズも変更できた(そりゃそうだ)。「送信出力」という項目があって、12.5%から100%まで選べるようになっている。デフォルトが100%なので、12.5%にして、もう一度電池の持ちを見ると、3時間6分。思ったほどは伸びない。無線LAN側の消費電力はそれほどでも無いらしい。

その後の経過など。

バグらしきものを発見。こいつを机の上とかに置いて、電波のとどかないところまでPC側を持っていき、また戻ってきてつなぐ、ということを数回繰り返すと、IPアドレスがリースされなくなる。どうも同時接続数のあたりではじかれているっぽいんだけど、MACアドレスくらいチェックしてないのかなぁ。障害報告しようかと思ったけど、例によって、フリーダイアル攻撃で、時間がもったいないので放置。結局ポータブルWi-Fiの方がメインになったし。メールでも受け付けてくれればね。

ポケットWi-Fiと比べた通信の使い勝手に関しては、思ったよりもWiMAXが健闘している。ビルの内部の方でも高い階なら入るし。速度は雲泥の差。帯域制限も無いので気分的にも良い。ただ、都内といえどもやはり、ところどこ入らない。自分の今の通勤経路だと、池上線の蒲田手前とか、地上なのに入らない。りんかい線の大井町駅も入らない(まぁ、ここは地下だけど)。移動しながらの使い方だと、emobileに軍配が上がるかな。

ベートーベン ピアノソナタ 第20番

確か、習っていた時に初めて弾くことになったベートーベンのソナタ。「ベートーベンのソナタ」と期待したら、クレメンティみたいな小品でがっかりしたもんだが、今あらためて聞くと、なかなかかわいらしい曲だと思う。
ベートーベン ピアノソナタ 第20番
Beethoven Piano Sonata No20

SSD付きHDD買ってみた。

Seagate ST95005620AS

とりあえず、まずは外観など(クリックすると拡大されます)。

今まで使っていた、SAMSUNGの500GBと並べてみた。見た目は、普通のHDD


高さ的にも同じ。ただSAMSUNGも結構厚い部類だと思われる。まぁ、私の場合はThinkPadのRシリーズなんで、少々大きくても全く余裕なのだけど。

ddコピーが終わったので、SAMSUNGの500GBと比べてみた。

まずは、Ubuntu 10.04が起動して、ログイン画面になるまでの時間。

SAMSUNG: 46sec
SEAGATE: 24sec

いやこれは予想外に速い感じ。次に、今プロジェクトで使ってる、DB2のDDL読み込み時間。3回計ってみた。

SAMSUNG
1:22
1:09
1:07

SEAGATE
1:02
0:45
0:44

こちらは起動速度ほどではないけど、それなりに速くなっている。うん、これだけ速くなるなら、十分に投資の価値はありそう。SSDの値段はずっと高いままだから、この手のハイブリッドHDDは十分にアリじゃないかな。

JSF2で、バリデーションエラーが起きると、inputHiddenの値が失なわれる。

こちらは回避策を見つけたけど、やはり結構困る問題。

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@RequestScoped
@Named
public class Bug2 {
long seed;
String value;
String value2;

public String getValue() {return value;}
public void setValue(String value) {this.value = value;}

public String getValue2() {return value2;}
public void setValue2(String value2) {this.value2 = value2;}

public long getSeed() {return seed;}
public void setSeed(long seed) {this.seed = seed;}

public void perform() {
seed = System.currentTimeMillis();
}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:form>
<h:inputHidden value="#{bug2.seed}"/>

<h:panelGrid columns="3">
<h:outputLabel value="seed"/>
<h:outputText id="seed" value="#{bug2.seed}"/>
<h:message for="seed"/>

<h:outputLabel value="Value"/>
<h:inputText id="value" value="#{bug2.value}" required="true"/>
<h:message for="value"/>

<h:outputLabel value="Value2"/>
<h:inputText id="value2" value="#{bug2.value2}" required="true"/>
<h:message for="value2"/>
</h:panelGrid>

<h:commandButton value="Submit" action="#{bug2.perform}"/>
</h:form>
</html>

こんな風に操作する。

  • Value, Value2に適当な値'1', '2'とかを入れて、Submitをclick。
  • seedのところに、値が生成される。
  • Valueのところを空にして、Submitをclick。
  • required="true"なので、バリデーションエラーになるが、Value2の内容は残っているのに、なぜかseedの方(これはinputHiddenで保持)が消えてしまって0になる。

JSF2では、bookmarkable urlが簡単に作れるので、この手のread-onlyパラメータは、リクエストパラメータとして持たせておけば、回避できるんだけど、ちょっと面倒なんで、バグ報告してみた

P.S. これ、もうちょっと調べてみたら、hiddenが消えているのではなくて、出力コンポーネントの値が失なわれているということが分かった。エラーがあってページを再表示する時に、出力コンポーネントから、モデルのオブジェクトを見に行くと、エラーになっているから存在していなくて、何も表示できないってことみたいだ。入力コンポーネント系なら、submitted valueを書き戻せるけど、出力コンポーネントはダメってことらしい。入力コンポーネントをreadonlyにしても、やっぱり消えちゃうようだ。とりあえずJavaScriptで、hiddenの値をコピーしてやるくらいしか方法は無さそう。

JSF2で、renderedを指定していると、イベントが配信されない。

JSF2でページ制御のコンポジットコンポーネントを作ってみたら、やっかいな現象に見舞われた。

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@RequestScoped
@Named
public class Bug1 {
int value;

public int getValue() {return value;}
public void setValue(int value) {this.value = value;}

public void decrease() {--value;}
public void increase() {++value;}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:form>
<h:inputHidden value="#{bug1.value}"/>
<h:commandButton value="-" action="#{bug1.decrease}" rendered="#{bug1.value gt 0}"/>
<h:outputText value="#{bug1.value}"/>
<h:commandButton value="+" action="#{bug1.increase}"/>
</h:form>
</html>

これ、実行すると、整数の両側に、'-'、'+'ボタンが表示され、'-'は、値が1以上の時にだけ表示されるんだけど、'-'ボタンが全く機能しない。

どうやら、以下のようなことが起きているっぽい。

  • '-'ボタンクリック。
  • JSFがBug1インスタンスを生成。
  • JSFがイベントを配信しようとするが、その時rendered属性をチェック。でも、Bug1はnewされたばかりなのでvalueフィールドは0なので、rendered=false。このためイベントの配信を中止。
  • リクエストの値を、Bug1インスタンスに反映。ここでようやくvalueフィールドが設定されるのだけど、時、既に遅し。

inputHiddenのところに、immediate='true'したら大丈夫かと思ったけど、なぜか効果無し(なんで?)。

仕様なのかもしれないけど、これって困るよなぁ。とりあえずバグ報告してみた。xhtmlのところ思いっきり文字化けしてしまった。なんで、ここのBTSには、preview機能が無いんだろう...

CDIのsession scopeビーン

ログイン状態を保持するために、以下のようなビーンを作る。

@Named @SessionScoped
public class LoginSession implements Serializable {
private static final long serialVersionUID = -5522770756920818033L;
Long loginId;

public boolean isLogined() {return logined != null;}
public void logoff() {loginId = null;}
public long getLoginId() {return loginId;}
}

でも、これを直接別のビーンにインジェクトしたり、Viewから参照すると、

@Inject LoginSession loginSession;

問答無用で、セッションが開始してしまうので困る。ログインしてからセッションは開始して欲しい。CDIでは、Instanceというインターフェイスがあるのだけど、

@Inject Instance<loginsession> loginSessionFactory;

ここで、Instanceには自分が欲しいメソッドが無いことが分かる。get()を呼ぶと、やはり問答無用でインスタンス作っちゃうし。欲しいのはget(false)みたいなやつ。セッション上にビーンが無ければ、nullを返し、存在したら、そのインスタンスを作ってくれるようなやつ。

ちょっと悩んでみたが、解決策が見つからないんで、WeldのUser Forumに質問してみた。

このサイトの掲載内容は私自身の見解であり、必ずしもIBMの立場、戦略、意見を代表するものではありません。
日本アイ・ビー・エム 花井 志生 Since 1997.6.8