2013年01月30日

[java]Dolphin!(4)

どこまで書いたかな・・。


//(3)String Switch
String str1="abcde";
switch(str1)
{
case "hoge":break;
case "huga":break;
case "abcde":System.out.println(str1);break;
}


キタ━━━━(゚∀゚)━━━━!!
もうこれでしょーもない private static final int とか Enumを作らなくてよいし、
ソース分析時に、このswitchの数字の意味はなんなんだ・・・、43だけスルーとかなんなんだ・・・。
コメントねーし、ぐぬぬぬぬ(`皿´;)とかも解決!

よし、まぁ待て。落ち着け。
内部ではEnumに自動変換してそうな予感がしてしょうがない。

でゅわ、jdの出番だ。


String str = "abcde";

Object localObject1 = str;
int k = -1;
switch (((String)localObject1).hashCode())
{
case 3208229:
if (((String)localObject1).equals("hoge")) k = 0; break;
case 3213991:
if (((String)localObject1).equals("huga")) k = 1; break;
case 92599395:
if (((String)localObject1).equals("abcde")) k = 2; break;
}

switch (k) {
case 0:
break;
case 1:
break;
case 2:
System.out.println(str);
}

文字列ハッシュでswitchかーって感想だけだと、味気ないので、もうちょっと|д゚)カンサツ

if(localObject1.equals("hoge")){
}else if(localObject1.equals("hoge")){
}else if(localObject1.equals("abcde")){
}
でも良さそうな気がせんでもないし、実際昔はこう書くしかなかった。
でも、先にハッシュだけ比較するほうが計算コストが低くなるので
こういう実装なんだと思う。コンパイル時に対象のハッシュも確定できるし。

つまり、String#equals() の実装見てくれればわかるんだが
比較は大きくわけて5ステップある。

(1)自分自身か?
(2)文字列のインスタンス?
(3)文字数一致?
(4)ハッシュ一致?
(5)文字列のコンペア

(4)の処理は初回のみ実行時計算@インスタンスなので、
JDK7の実装だとハッシュ一致時のみしかラベル文字のハッシュ計算は走らないが、
旧の実装だと必ず走ってしまう。また、(2)の処理は意外にコストが要る計算である。
文字列以外が来る可能性が_でもあるなら、しょうがないけど。

ということで涙ぐましいコスト最適化がかかっているために、こういった表記なんだと思うんだね。


posted by koteitan at 11:07| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

[その他]knnopix で nolistenをはずす方法

いやはや、最近はセキィリティ対策でデフォルトだとXServerはListenしてないのだなー。

で、サーバーセンターの画面をこっちに飛ばしてこようとしてドハマリしたので
メモしておこうと思う。同様にXの画面飛ばしたいけどlinux機ねーし、インストールメンドイし、
って状況あるあるやと思うしね。

KDEの設定と、/etc/X11/xinitをいじくったら
CentOSとかではいけるっぽいんだけどどうにもうまくいかない。

http://starfall.ddo.jp/Linux/tech/restartx/
http://d.hatena.ne.jp/ruicc/20090108/1231392872
http://cosmo0920.wordpress.com/2011/02/13/ubuntu10-10%E3%81%A7x-sever%E3%82%92%E5%81%9C%E6%AD%A2%E3%81%97%E3%81%A6%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF/
http://ubuntu-linux.seesaa.net/article/162302280.html

で、起動時のシェルを順序に読んでいくという原始的方法でさぐっていくと
init.dの中にknnopix-startxというシェルがあり、こいつがinit時に呼ばれるXの起動コマンド
これが罠。
いくらKDEやX11の設定

 /etc/kde4/ /etc/X11/xinit をいじくったところでよまれやしないので、いみなくもう3時なわけだ。

knnopix-startx の中にnolistenが直書きされているので、これを修正する。

そして、ctrl+Alt+F1でコンソールにいき、init3 でCUIモードへ、init5でセッション再開、nolisten消えてる、とこういうからくり。
インストールモードやと設定効きそうだがねぇ。やってないけど。
まぁ、X使いたいだけだと最近のじゃなく、もっと古いディストリをゲットしてくればおkという話もあるんだがね。イントラネットで外部接続無いし。
posted by koteitan at 09:56| Comment(0) | TrackBack(0) | その他備忘録 | このブログの読者になる | 更新情報をチェックする

2013年01月22日

[java]Dolphin!(3)

新しいコードスタイル(3)

これも細かいなぁ。(´-ω-`)

  //(3)ダイヤモンド演算子
  List list = new ArrayList<>();

Genericsの面倒なあの表記を宣言時は省略できます。
当たり前だよね、宣言してんだから、その型に決まってるわけで。

posted by koteitan at 10:37| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2013年01月21日

[java]仮想マシンの制限値

メソッド1クラス65535!
フィールド1クラス65535!
インターフェース65535!
メソッドサイズ64KB!

王将のCMのノリで覚えら・・・れるわけないわな。
まぁ、こんな制限に引っかかるClassがあるわけないのでしらんでも困らないがね。
もっと詳しく知りたい貴方は仮想マシン仕様の「4.10 java仮想マシンの制限」のところ参照。



posted by koteitan at 18:36| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2013年01月18日

[java]Dolphin!(2)

新しいコードスタイルその2。
その1も大した変更じゃなかったが、その2も大したものじゃない。
でも、便利。

(2)バイナリアン大歓喜

   int a2 = 0b00000111;

2進数表記ができます。
これで、ビット操作も直感的に書けます。

ビット操作要る局面が業務アプリであるかどうかは別として
ゲームとかだと結構使うと思うけど。
posted by koteitan at 13:27| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2013年01月17日

[java]Dolphin!(1)

まぁJDK7のコードネームなんだけどな。
5がtiger、6がMustang。虎、野生馬、ときてイルカ。( ′∇ソ ヨーワカラン このセンス。

project Coin 、プロジェクト小銭でコードの規約が若干変わってズボラ仕様が追加された。
なかなかいい感じのもあるしビミョーなのもあるけど、概ね好感触。
Javaが流行りだしたころに鳴り物入りで作ったシステムもそろそろライフサイクルを終えはじめ、
システム刷新や更新を考え出す企業さんとかもそこそこあるんではなかろうか。
まぁ、参考になればいいかなって程度で何回かに分けて紹介します。
小出しにして記事数稼ぐともいう。

(1)数値リテラルにアンダースコアが使えるようになった!
   これで桁数数えるのも楽だね! (*´д`;)

        int a1 = 1234_5678_9;

   もちろん浮動小数でもおkなので、

        float f1 = 1.23_45E5f;
        double d1 = 0x1234_567P-2;

   こんなんでもよい。
   またいくつ重ねてもいいので、極端な話

        int inoki = 0x1_____2______3______daaaa;

   ボンバイエも可能。業務コードで書いたらしばかれるから注意な。
   マジックナンバーとして使えなくもないが、まぁやめとくがよいでしょ。
posted by koteitan at 14:39| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2013年01月11日

[Java]keepalive

java でHTTPアクセスをするとき、まさかsocketから書くようなメンドイことはしまい。
HttpURLConnectionなり、HttpClientなりを使うと思う。
(Rawソケットを触りたいなら、すでに言語選定が間違っているしね)

このHTTPURLConnectionは結局はHTTPClientを内部で呼ぶんだけど
こいつにはkeepaliveがかかる。

制御するパラメータは以下のシステムプロパティ
---------------------------------------------

キープアライブの動作を制御するシステムプロパティーは次のとおりです。

http.keepAlive=
デフォルト: true

キープアライブ (持続) 接続をサポートすべきかどうかを示します。

http.maxConnections=
デフォルト: 5

任意の時点で接続先ごとにキープアライブを実行できる最大接続数を示します。

http://docs.oracle.com/javase/jp/6/technotes/guides/net/http-keepalive.html
---------------------------------------------
grepcode (http://grepcode.com/)からHTTP処理時の流れを追いかけてみると
URLスキーマから、処理すべきクラスを決定して適切なクラスをリフレクションしているようだ。
コード読んでいて気がついたんだけど
keepaliveの破棄はリアルタイムではなく、5秒固定のポーリングを行い、
その時点でタイムアウトしていれば破棄する、という処理だった。
よって、サーバー側から5秒以下のkeepalive要求が来たとしても
java側は最低5秒まではsocketを維持している。
(維持しているだけで使用はできないのでご安心を)

著作権的に該当箇所を引用していいかわからない(sunパッケージ内だから)ので
気になる人は上のサイトから自分で確認してくだしあ。

openJDKは原則GPLだけど一部例外アリとかそんなんだった気がするんだよな。
OSSはこういうライセンスがフリーなようでフリーじゃないような罠が結構あるんだよなぁ。

posted by koteitan at 15:12| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2013年01月10日

[HTTP]キャッシュ制御について

cache コントロールのヘッダの種類について


pragma:no-cache HTTP1.0
http://www.w3.org/Protocols/rfc1945/rfc1945

cache-control:max-stale=0; HTTP1.1
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

キャッシュぐらいどうでもいいやん、リロードしたええだけやろ?
とか思うあなたにはこれ。

http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/405.html

キャッシュにセキュア情報が載ること自体ナンセンスだが、
それをさらに取得されてしまう、なんてことが起こったら目もあてられない。



posted by koteitan at 10:37| Comment(0) | TrackBack(0) | その他備忘録 | このブログの読者になる | 更新情報をチェックする

2013年01月08日

[java][python] singpath

これはなかなかクイズというか、初級学習の確認によいかもしれん。

singpath
https://itunes.apple.com/app/singpath-mobile/id567470737

英語なのがネックだけど。
posted by koteitan at 17:27| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2013年01月07日

[日記]あけましておめでとうございます

2013年、始まりましたね。

年始から、去年世間を騒がせた遠隔操作の犯人からのメールがあったそうで・・・。
ニュースサイトなどで内容を拝見すると、内容がなんか同世代な気がしてしょうがないんですよな(´-ω-`)
メルニクス語とかLove Machineとか、テラナツカシス。

テイルズはデスティニーのが好きだったなぁ。特にが好きだわ。
ロニ兄さんでホッハしてた記憶がある。
エターニアの主人公はクールというか冷めてるというか、代わりにクソ暑苦しいオヤジが出てくるがな。

三問目に詰め将棋があり、「将棋やっててよかったw」とかプチ感動しました。
初手の2二桂成さえ見えればあとは順番に並べていけばおkでしたな。
2二桂成は取るしかなく、尻から銀を引っかける。これも取るしかなく(1一は2二銀、
2三は3四角に3二玉は4二龍、2四に逃げても角成の開き王手)
5三角の王手に合いは同龍で論外なので、再び2二玉にもう一度3四桂。
上に逃げて、3二銀と引っかける。これも取るしかない(2四玉は3五龍、3三玉、4二龍だが歩が余る)。
そして最後に3一角成と切って、同玉に4二龍かね。

脳内盤で動かしたから符号とか間違ってたらごめんね。

しかし、犯人の目的はなんなんだろ。騒がせたい?目立ちたい?
posted by koteitan at 13:31| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする