ジェネリックコレクションのデコンパイル結果

今更なネタだけど気にしなーい。あくまで自分のため。

Javaがバージョン5になってから(2004年)追加された機能で、ジェネリックプログラミング機能というのがあるのだけれど、これらを実装してコンパイルしたコードを、Eclipseデコンパイルプラグインであるjadclipseで除いてみたら面白かったので書いてみる。
※なぜかjar化してから*.classファイルを開かないとデコンパイルできないんだけどなぜだろう?

まずはコンパイル前のコードMain.java。MyClassクラスはMain.javaの中に記述。

import java.util.ArrayList;
import java.util.List;


public class Main {

	public static void main(String[] args) {
		List<MyClass> list = new ArrayList<MyClass>();
		list.add(new MyClass());
		list.get(0).method();
	}
}

class MyClass{
	void method() {}
}

以下がコンパイルされたコードをjadclipseでデコンパイルした後のコードMain.classとMyClass.class。
ちなみにMyClassクラスはMain.javaファイルから切り離されて、Main.classと同一パッケージ内にMyClass.classとして分離されて出来た(これもなかなか面白いネタ!)。よくみると引数なし処理なしのコンストラクタも追加されてたり細かい違いが。

Main.classのほう。

/*jadclipse*/// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.

import java.util.*;

public class Main
{

    public Main()
    {
    }

    public static void main(String args[])
    {
        List list = new ArrayList();
        list.add(new MyClass());
        ((MyClass)list.get(0)).method();

    }
}


/*
	DECOMPILATION REPORT

	Decompiled from: xxx
	Total time: xx ms
	Jad reported messages/errors:
	Exit status: 0
	Caught exceptions:
*/

MyClass.classのほう。MyClassクラスは、定義した時点でパッケージアクセスだったので、クラス宣言のところに修飾子がついていない。

/*jadclipse*/// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) radix(10) lradix(10) 
// Source File Name:   Main.java

class MyClass extends Super
{

    MyClass()
    {
    }

    void method()
    {
    }

}


/*
	DECOMPILATION REPORT

	Decompiled from: xxx
	Total time: xx ms
	Jad reported messages/errors:
	Exit status: 0
	Caught exceptions:
*/

活目すべきは、コンパイル前にList型の型パラメータとしてを記述したところが、ListからMyClassを取り出すときのキャスト(MyClass)list.get(0)に使われている点。

こういうネタは、実際にはなんの役にも立たないけど、知ってると得した気分になるのはなぜなんだろう。

近い将来ゲームセンターで電子マネーが使えるようになりそう

プライベートでゲームセンターに行くことは割とよくあるんだけど、ゲームセンターっていうのは未だに電子マネーが普及していなくて硬貨が決済の主流。両替機にいちいち両替に行くという煩わしさもあるし、千円札を両替すると五百円玉や百円玉にジャラジャラ両替してから、財布に入れると結構な重さ。電子マネー化すれば、こんな面倒さから開放されるのに!絶対需要あるはず!と思っていたら、ゲームメーカーでも研究しているらしい。

『ゲーム施設運営4社、電子マネー導入の実証実験へ

バンダイナムコホールディングスなどゲーム施設運営の4社は4月1日から、利用者が料金を支払う際、電子マネーも利用できる実証実験を始める。ゲーム施設業界は基本プレー料金を100円に据え置いてきたが、景気悪化で経営環境が厳しさを増している。電子マネー導入で、機動的に値上げするなど柔軟な料金の仕組みを構築したい考え。

バンダイナムコのほか、テクモカプコン、総商(愛知県岡崎市)が東京都豊島区や宇都宮市などで運営する計4店で、全537台のゲーム機を電子マネー対応にする。客は硬貨と電子マネーのどちらでも支払える。開始から最初の2カ月間はプレー料金を100円に固定して需要動向を調査した後、料金変更などの実証実験に入る。業界団体の日本アミューズメントマシン工業協会(東京・港)を通じ実施する。

ゲーム施設は数十円単位の値上げを実施すると複数の種類の硬貨を使う煩わしさから客足が落ちるのを恐れ、これまで料金改定ができなかった。各社は電子マネーを導入すれば、こうした問題を解決できると見ている。』(NIKKEI NET)
まこなこ

ゲームの1回のプレイ料金(クレジット)は、ゲームセンターにもよるけれど、50円〜100円が相場。プレイ料金価格の調整というのは機械の設定を変更する必要があるためなかなか変更しずらい。これを電子マネー化することで価格調整しやすくしたいというのが業界側の狙いのようだ。価格を柔軟に変更できることによって、ゲームセンタの価格調整も進んでプレイ料金の価格も妥当になるかもしれない。
ただ、ゲームという性質上、熱中してついつい注ぎ込んでしまう人もいると思うので(それが電子マネー化されることによってゲーム破産なんてこともありうる)、一定額以上お金を使うと電子マネーがロックされるような仕組みも作ってもらいたい。電鉄業界がやっているようにカードに1000円単位で代金をチャージをするようにしたり、携帯電話の機能と連動するなど。
あとは、熱中してついつい注ぎ込んでしまう人対策として、後ろで並んでいる人の迷惑も考えず連コインしてしまうような人も中にはいるので、前のプレイから一定時間(1分とか)立たないと次のプレイが出来ないような仕組みもあるといいかな。
個人的には大賛成な試み。


追記

全国のアミューズメント施設で
チャージしたPASELIを使って、コインレスでゲームがプレイできたり、PASELIだけのいろいろなモードが楽しめます!

PCで
チャージしたPASELIを使って、ゲーム機で使えるアイテムを購入出来ます!
購入したアイテムを使って、ゲーム機で使うキャラクターやゲーム画面のカスタマイズを楽しめます!
http://paseli.konami.jp/index.html

コナミ仕事早いね。

出先で見たい情報ははてダで管理しない、という選択肢

自分のブログに、技術的なメモやら役立ち事を記述していて、出先で技術的に困ったことが発生して「そういえば自分の記事になんか役に立ちそうなこと書いた気がする」と思って、覗こうとすると出向先のネットワークが、「i-フィルター」なんかで閲覧制限がかかってて見れないという事態が起こりうる(大手IT系企業に多い)。

はてなダイアリーは、技術者が多いので有用なことが書いてあることが多いのに、フィルタのせいで見れないということがいままで何回かあった。実際、技術的なキーワードを検索エンジンで検索して、はてなダイアリーにひっかかる確立は高い。

回避策としては、おそらくドメイン名で弾いているので、頻繁にアクセスする有用な情報は、フィルタにかからないような別のブログとかWikiに書いておくのが無難かもしれない。

アナログな方法だが、手帳などに書いておくのが最も安全だけれど、それは煩わしい。

三国志に学ぶミニ国富論

いまmixiブラウザ三国志というゲームをやっている。内容は、一国の君主になって国を治めるというもの。

これまでいろんなプラットフォームで三国志をモチーフにしたシュミレーションゲームはあったけれでも、それをWebブラウザでできるという手頃さはいいね。(あんまりその手の三国志をやったことはないけれど)

三国志(中国の戦国時代)がモチーフであるので、ユーザ同士(国家同士)の領土争いがメインの遊び方なんだろうけれど、自分はマイペースに国を豊かにしようと、ログインしてはちまちま内政してる。


自国が国として豊かになっていく様をライトユーザながら書き留めてみようと思う。
ゲームの仮想的な世界とはいえ、(独裁的な)君主となって国を運営する限り、あれこれ指図して、国を形成する個々の人間が生活しているので、彼らを食わしていかなきゃならない(生きることは食べることだ)。
なので、まず保有している人口分の胃を満たすために、自分の領土に必要な分だけこの世界での唯一の食料の生産源「畑」をつくる。
畑以外の施設用途にも領土を使うことができるのだけれど、そもそもその領土を建設・維持するにも人間が必要(コスト)なので、その人間が食っていくだけの畑の余り分がないと、畑以外の施設を作ることはできない。
いよいよ食料の生産量に余裕ができてくると、より豊かになるために、領土にもとから存在する岩山、鉄鉱山、森林から資源を回収するために、それらのすぐとなりに採掘場を建設する(となりじゃないと建設できない)。
回収した資源は、施設建設や軍備(兵士育成・兵器開発)に使う。三国志だからそれぐらいしか使い道がないのは仕方ないね。

おおまかなサイクルとしては、資源生産→施設増設or軍備増強をぐるぐるとこなす。次回の生産量を増やすために、今ある生産物のストックを消費(投資)する。敵に攻め込まれたとき(攻め込むとき)に備えて軍備にも投資する。というような流れ。


いまよりもっと豊かになるために働き続ける。我が国民がんばって搾取されてね。ゲームの君主だから気楽だけど・・。

とりあえず積ん読

カント入門 (ちくま新書)

カント入門 (ちくま新書)

カントの悪文をそのうち理解したくて、それならばその筋の専門家の文を読めばいいだろう、と思って購入。何事も専門家に習うのが一番の早道だと思う。オブジェクト指向のわかりやすい考え方が書いてあったのはめっけもんと思った。
SEの教科書 【完全版】 (技評SE選書)

SEの教科書 【完全版】 (技評SE選書)

SEの文章術 【第二版】 (技評SE選書)

SEの文章術 【第二版】 (技評SE選書)

そういえば、IT業界にいるのに、一緒に仕事をしているのに、SEという職業について何も調べたことがないなと思い、本屋で立ち読みしてよさそうだった本を半ば衝動買い。彼らはよく考え、よくしゃべり、よく書く。

Salesforceのクラウド環境「Force.com」開発環境構築

仕事でSalesforceクラウド環境を使ったので、とりあえずアカウント取得から開発環境構築までの手続きをメモ。
ちなみに無料で開発者になれるので、気になっていてちょっとさわってみたい人も気軽に使える。

アカウント取得

  1. http://developer.salesforce.co.jp/へアクセス
  2. 画面左上の「フリーのDeveloper Editionを入手」へ移動して、個人情報情報を入力して利用規約に同意したうえで「個人情報の取り扱いに同意して送信」をクリック
  3. 入力したメールアドレス宛にメールが来ているので、記載されているURLからログイン

開発環境(IDE)構築

  1. http://wiki.developerforce.com/index.php/JP:Force.com_IDEへアクセスして、Eclipseプラグイン形式の開発環境である「Force.com IDE」をマニュアル通り(英語)にインストール。本記事記述時点ではEclipse3.3.x系と3.4.x系にしか対応していないらしい。

ほかにもなんかいろいろツールがあるけど、調べてないので不明。