redmineをhttpsで動かす

httpsで動かしたくてがんばってたら、なんとなーく動いたんだけど、微妙にhttpのURLがでてくるっ。

現象はこれ

http://www.redmine.org/issues/show/672

解決法はかいてるとおり、proxyの設定に

RequestHeader set X_FORWARDED_PROTO 'https'

を追加してあげるとよい。
で、mod_headerを有効にする。

これでちょっと安心します。別に公開しないけど。ちょー自己満足。

Robocode

懐かしいものを発見してしまいました。
知ってる方はいますかねぇ?

『遊びながらJavaプログラミングを勉強できちゃう!』

という面白いツールです。

Javaで提供されているロボット(というか戦車)のクラスと機能を利用し、改造しちゃって自分だけのロボットをつくり、そして戦わせる!!

プログラミングを勉強してみたいが、何作っていいかわからないし、メモ帳とか作っても面白くないしな~(-_-; って人はやってみるといいかもしれません。

まぁ、だいぶ古いネタではあるのですけどね・・・w

Robocodeみたいなやつは他にないのかなぁ・・・。
誰か知ってたら教えてください!

試しにやってみたい方は続きを読んで見てください~。
ロボできたら私のと戦ってみましょうか!
まだ作ってませんが!w

ちなみに、JavaなのでMacやLinuxでもできるはず?(試してないですが)

1.インストール

インストールはプログラミングしようと思ってる人ならたぶん簡単です。
下記のリンクから、インストールしてみてください。

インストール

JDKが入ってようが入っていまいが、JDKって何?という方も、真ん中あたりの「ここをクリック」というのからどうぞ。
その後、「インストールを完了するには、以下のようにします」とでるので、「robocode-setup.jar」をダウンロードしてください。
先ほど試しにやってみたら、「robocode-setup.jar」からダウンロードできなかったんですが、同じ症状の方がいましたら「ここをクリック」という方でダウンロードしましょう。

ダウンロードが完了したら、次はインストールですが、インストールはコマンドプロンプトから行います。
コマンドプロンプトはウィンドウズのメニューの中の「アクセサリ」の中にあります。
コマンドプロンプトを起動したら、

cd robocode-setup.jarがあるフォルダ

と入力してENTERを押してください。
「cd」の後には一つスペースです。そのスペースの後に、robocode-setup.jarがあるフォルダまでのパスを書きます。
フォルダのパスがどうしてもわからなければ、robocode-setup.jarをc:の直下に置き、「cd c:」とでもしてください。

その次に、

java -jar robocode-setup.jar

と入力します。
そうするとインストールウィンドウがでてくるので、後は指示に従って進んでください。
インストールが終わると、デスクトップにショートカットができますので、それをダブルクリックすると起動します。

2.試しにサンプルでバトル

起動したら、サンプルロボットでバトルさせてみましょう。

  1. メニューの「Battle」→「New」を選択します。
  2. 左側の「Packages」の「sample」をクリックすると、その右側のリストにロボットが表示されます。
  3. リストの隣の「Add All ->」というボタンをクリックします。そうすると全てのロボットが追加されます。
  4. 下にある「Start Battle」をクリックすると、試合が開始されます。

どんぱち勝手にやってくれます。
これからあなたはこの中のロボットを一掃するすげーやつを作るわけです。

オラわくわくすっぞ!

ですよね(;゚Д゚)

3.自分のロボット作成

んじゃ、ロボットを作ってみましょう。

まず、ソースを作成します。

  1. 「Robot」→「Editor」を選択すると、「Robot Editor」というのが起動します。
  2. 起動したら、「File」→「New」→「Robot」を選択します。
  3. ロボットの名前を入力するウィンドウがでますので「MyFirstRobot」にしてみます。
  4. 次にパッケージ名を入力します。「mypackage」とでもしておきましょう。
  5. 起動したら、「File」→「New」→「Robot」を選択します。

そこまでいくと、なにやらウィンドウにプログラムらしきものがでてきました。
このままでも立派なあなたのロボット(戦車)でございます。

それじゃ、これをコンパイルしてみましょう。
プログラムはソースのままでは動いてくれません。コンパイルすることでロボットが動くことができる状態にしてあげます。

  1. メニューから「Compiler」→「Compile」を選択します。
  2. ファイルやパッケージの保存ウィンドウがでてくるので、まずはそれを保存します。基本はYESとか連打でOKです。
  3. 保存が終わるとコンパイルが始まります。たぶん一瞬で終わります。

これで、あなたのロボットは敵ロボットを倒す準備が完了しました。
次はあなたのロボットを使ってバトルしてみましょう。

4.バトル!

コンパイルできたので、自分のロボットを戦わせてみましょう。

  1. 「Battle」→「New」を選択します。
  2. もし右側の「Selected Robots」にロボットが選択されたままであれば、「Remove All」を押して全て取り除きます。
  3. きれいになったら、左側の「Packages」で、先ほど作った「mypackage」を選択すると、「MyFirstRobot」がいますので、それを選択して「Add」を押します。
  4. 対戦相手には、「Packages」の「sample」を選択し、適当なロボットを「Add」で追加します。
  5. ロボットの追加が完了したら、「Start Battle」を押しましょう。

サンプルロボットめえええ。タイマンじゃー

まぁ、最初のロボは大して強くはありません。
たぶんWalls辺りには絶対勝てないでしょう。

後は、ソースを改良→コンパイル→対戦!して楽しむといいでしょうw
参考リンクの「闘え、Robocode (ロボコード) !」と「インストール」の右側にあるRobocodeのAPI仕様書をダウンロードして一通り読みながらやると、基本はマスターできるはず。

さすがに、古いツールなので、もう大会はないですが、当時はIBMが商品を出した大会とかあって結構盛り上がっていました。
いまさらではありますが、プログラムやJavaの勉強してみよー、って思ってる人いたら、試しにやってみましょう

参考リンク

基本的なこと:
闘え、Robocode (ロボコード) !

応用色々:
Robocodeの達人たちから秘訣を学ぶ: 高等なターゲッティング — パターン認識
Robocode関連リンク集

CodeRuler

Robocodeみたいに遊びながらJavaを勉強できる(はずの)「CodeRuler」。
どんなものか、ここを読んでやってみました。

インストール&いじる準備

  1. Eclipseをインストールする。
    私は既にインストール済みだったですけど、このページでも読んで入れてみましょう。
    よーわからな人は、ここのAll-In-One-Eclipseが楽でいいです。
  2. CodeRulerをダウンロード
    このページからダウンロードします。IBM IDが必要になるので、登録してない方は登録しないといけません。
  3. ダウンロードした「IBMGamesPkg_3.0.0.2.zip」を解凍したら、「com.ibm.games_3.0.0.2」というフォルダがあるので、eclipseの「plugins」フォルダにいれます。
    うちだと、「C:Program FilesAll-In-One-Eclipseeclipseplugins」です。
    これでいじる準備完了~。

ためしにいじってみる

  1. Eclipseを起動したら、「ウィンドウ>設定」を開き、「IBM Games」を選択。
    右側にでてくるGame:の部分を「CodeRuler」にして「Create Project」を押す。
    これでプロジェクトができあがり。
  2. できあがったCodeRulerのプロジェクトの「src>(デフォルト・パッケージ)>MyRuler.java」を選んでダブルクリック。
  3. 以下の関数の中身を適当にかえちゃいます。
    農民がランダムに動くソースです。

    
    import java.util.Random;←ソースの上の方に追加。
    
    protected Random rand = new Random();
    ↑public class MyRuler extends Rulerの
     すぐ下にでも追加。
    
    public String getRulerName() {
    return "l3 Test Ruler";
    }
    
    public String getSchoolName() {
    return "l3 Test School";
    }
    
    public void orderSubjects(int lastMoveTime) {
    // put implementation here
    IPeasant[] peasants = getPeasants();
    for (int i = 0; i < peasants.length; i++) {
    move(peasants[i], rand.nextInt(8) + 1);
    }
    }
    
  4. ファイルを保存する。
  5. 「プロジェクト>すべてビルド」でビルドする。
  6. メニューバーの下に
    CodeRulerButton.gif
    こんなのがあるはずです。
    まずはButton_RunSample.gifを押します。
  7. なんかゲームっぽいウィンドウがでてきます。
    OpponetSelectionというウィンドウがでてくるので、適当に選んで「Add」を押して追加して、OKを押します。
  8. 農民がランダムに動いているのがわかると思います。
    実行中に画面が止まったりして操作できなくなったら、Eclipseの「実行>終了」で終了させちゃってください。
    それでも終了しないときは、CTRL+ALT+DELで終了させましょう。。。

battle.jpg

感想

Robocodeに比べて、とっつきにくい印象は強いかも?
Robocodeの場合、run関数に「 turnRight(180) 」って書くだけで右に回転したりするため、感覚とコードが一致しやすい。
また、クラスなんかを意識しなくても最初は作れる。だんだん慣れてきて、すごいことをしようとしたときに初めてオブジェクト指向の知識が必要となり、抵抗少なく勉強が可能な気がする。

CodeRulerの場合、農民一人を動かすにも「IPeasant[] peasants = getPeasants();」でワールドにいる全農民を取得して、それぞれの農民に対して、「move(動かしたい農民,移動方向)」とやる必要がある。
初めてJavaやプログラミングを触る人が、すぐにコードを書けるかというと、ちょっと無理がある気がする。
自分が動かしている、いう実感が沸かなすぎる。

下に書くCodeRallyの方が、そういう意味ではわかりやすくなってるかなぁ。

IBMでの位置づけはわかりませんが、Robocodeで遊べるレベルはクリアしてないと、CodeRulerは無理かもしれませぬ。

CodeRally

ちなみに、ここから「CodeRally」をダウンロードして、Eclipseのpluginsフォルダに入れてあげると同様の手順でCodeRallyが遊べます。
CodeRulerでは「ウィンドウ>設定」の「IBM Games」から「CodeRuler」を選んでプロジェクトを生成しましたが、CodeRallyの場合は「CodeRally」を選び「Create Project」をすればOKです。
CodeRallyも、CodeRulerと同様に専用のボタンが追加されてるので、それを押してRunさせます。

race.jpg

CodeRallyやってみたい方はここを読むと幸せになれるかもしれません。

付録

CodeRulerボタン

icon 意味 説明
Button_RunSample.gif サンプルを相手に実行 このボタンを使い、プレイヤー自身が選ぶサンプルの支配者を相手に自軍の支配者をテストします。
Button_DebugSample.gif サンプルを相手にデバッグ このボタンを使い、プレイヤー自身が選ぶサンプルの支配者を相手に自軍の支配者をテストします。デバッグ・モードで自軍の支配者を実行し、プレイヤー自身が設定したブレークポイントで停止します。
Button_RunOtherTeam.gif 別のチームを相手に実行 コードをサブミットした後、別のチームの支配者がダウンロードされます。このボタンを使うことにより、別のチームの支配者を相手に自軍の支配者をテストします。
Button_DebugOtherTeam.gif 別のチームを相手にデバッグ 別のチームの支配者を相手に自軍の支配者をテストする間、IDEのデバッグ・モードで自軍の支配者を実行します。
Button_CodeSubmit.gif コードをサブミット これで自軍の支配者をサブミットしてください。これまでに他のチームによりサブミットされた全ての支配者の暗号化されたバンドルのダウンロードをもします。

参考リンク

CodeRuler

CodeRally

Eclipse