tswi's dev

動くものが正しいものだ

Rubyの学習(第1回)

Rubyをほとんど触ったことがないんだけど、興味はある。
私がRubyに対して持っているイメージは以下のとおり。
なお、普段はJavaを利用することが多いので暗黙的にJavaが比較対象となっている。

  • 簡単に記載ができる
  • プログラマの自由に記載ができる反面、記載方式の制約をつけにくい
  • (熟練者が利用すれば)JavaC++C#等の言語に比べて高い生産性を発揮できる
  • (コンパイル型言語のような)コンパイルエラーが出ず、バグが混入しやすい
  • 動的型付けのため、コードの見通しが悪い
  • 実行速度が遅い
  • IDEが貧弱
  • IT業界でも特にWeb系と呼ばれる領域で活用されている
  • 大規模であったり、メンバーの入れ替わりがあるプロジェクトには向かない

学習を通して、上記のイメージが合っているのか間違っているのか、利点や欠点はどのようなものか、特に労働集約的なシステム開発プロジェクトに採用することはできるか、といったことを検証していきたい。
とはいっても、当面の目的はプログラムの記述ができるようになることなので、マイペースでやっていこうと思う。

テキスト

IPAが公開しているテキスト「Rubyプログラミング入門」を利用して勉強をしてみようと思う。*1
情報処理推進機構:オープンソフトウェア:OSS人材育成:OSSモデルカリキュラム導入実証

また、下記のリファレンスマニュアルも適宜参照する。
オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル

開発環境

ことはじめ

まずはお約束のHello, World.から。

puts("Hello, World.");
#=> Hello, World.

Javaでいう"System.out.println(String arg0)"に該当する命令が"puts"らしい。
似たようなメソッドに"p"とか"print"というのもあって、違いはざっくり下記の通りらしい。

  • print
    • 文字列最後尾で改行しない
  • puts
    • 文字列最後尾で改行する
  • p
    • 文字列最後尾で改行する
    • 引数が文字列の場合はダブルクォートで囲む(数値の場合は囲まない)
    • デバッグ時によく使う?

また、クラスやメソッドの定義を記載する必要もない(ある程度まともなプログラムを組む上では必須になると思うけど)。


なお、括弧とセミコロンは省略することもできる。

puts "Hello, World."

とても簡潔。

変数

変数を使用するとき、宣言は不要。
変数名にはアルファベット、数字、アンダースコアが利用できる。最初の1文字はアルファベットにすること。

var = "variable"
puts var
#=> variable


スコープは下記の通り。

# ローカル変数
# 英小文字とアンダースコアが利用可能
local_var = "localVar"

# インスタンス変数
# 先頭に@をつける
@instance_var = "instanceVar"

# クラス変数
# 先頭に@@をつける
@@class_var = "classVar"

# グローバル変数
# 先頭に$をつける
$gloval_var = "glovalVar"


ダブルクォートで囲んだ文字列中で式展開することもできる。
ただし、シングルクォートで囲んだ場合は無効。

var = "variable"
puts "var is #{var}"
#=> var is variable

puts 'var is #{var}'
#=> var is #{var}

擬似変数

擬似変数と呼ばれる特殊な変数があり、値は自由に変更することができない。

  • nil
    • いわゆるnull。booleanの偽値としても扱われる
  • true
    • いわゆるbooleanの真値
  • false
    • いわゆるbooleanの偽値
  • self
    • メソッドの実行主体。Javaでいうthisのようなもの?
  • __FILE__
    • 実行中のファイル名。フルパスで表現される場合もあればそうでない場合もある?
    • 確実にフルパスが欲しければ"File.expand_path(__FILE__)"とすること
  • __LINE__
    • 実行中の行番号


とりあえずこんなところ。
さらっと書ける反面、よく気をつけないと何をやっているのかよく分からなくなりそうという印象。

*1:同ページでは「Rubyプログラミング中級」「Ruby on Rails開発」というテキストも同様に公開している。

*2:10.8がリリースされればバージョンアップするので、今後いつのまにか開発環境が変わっているということはありうる

Eclipse/AptanaをRetina対応させる方法

プロパティリスト(.plist)に以下のパラメータを追加すればいい。

<key>NSHighResolutionCapable</key>
<true/>


Retina対応させていない状態だと、Eclipse.app(ないしAptanaStudio3.app)の情報は以下のようになっている。
"低解像度で開く"にチェックがあり、解除できない。
f:id:tswi:20120626203256j:plain


.appを右クリックし、"パッケージの内容を表示"を選択。
contents/Info.plistをテキストエディタで開き、冒頭に記載したパラメータを下記のように追加する。

(前略)
  <string>-keyring</string><string>~/.eclipse_keyring</string>
  <string>-showlocation</string>
    <!-- WARNING:
      If you try to add a single VM argument (-vmargs) here,
      *all* vmargs specified in eclipse.ini will be ignored.
      We recommend to add all arguments in eclipse.ini
    -->
  </array>
  <key>NSHighResolutionCapable</key>
  <true/>
</dict>
</plist>

セーブしてInfo.plistを閉じ、.appファイルをコピーする。
コピー元のファイルを削除し、新たにコピーして生成したファイルを元のファイル名にリネームする。
(ex: "Eclipse のコピー.app"を、"Eclipse.app"にリネーム)


再度.appの情報を確認すると、以下のようになっている。
"低解像度で開く"のチェックが外れる。
f:id:tswi:20120626204125j:plain


この状態で.appをダブルクリックするなりしてアプリケーションを起動すると、フォントがRetina対応状態の高精細表示となる。

クラス名を指定してオブジェクト取得する方法

NSClassFromStringを利用して、文字列でクラス指定してオブジェクト取得する。

id object = NSClassFromString(@"AnyClassName");

とか

AnyClassName *anyClass = [[NSClassFromString(@"AnyClassName") alloc] initWithAnyMethod];

存在しないクラス名を指定した場合はnilが返る。

ちなみに任意のクラス名を取得するには

NSString *className = NSStringFromClass(anyClass);

とやればいいので、

id object = [[NSClassFromString(NSStringFromClass([clazz class])) alloc] init];

のようにできる。

重なったSpriteの表示順を変更する

cocos2dで、スプライトを動かしながら描画の奥行きを入れ替えたいときの方法。
バージョンは1.0.1。
例えば下記みたいに、マップの上を動くような挙動をさせる場合。
f:id:tswi:20120328215737p:plain
f:id:tswi:20120328215729p:plain


詳細はcocos2dに付属のサンプル(TileMapTest.mなど)を参照すれば書いてあるので、
f:id:tswi:20120328220046j:plain
要点のみ抜粋。

やり方はすごく簡単で、CCNodeクラスのreorderChild:z:メソッドを使えばいいっぽい。

-(id) init
{
    if( (self=[super init]) ) {

        (省略。Spriteのインスタンスを生成したりする)

        // 定期的に実行するメソッドを指定
        [self schedule:@selector(repositionSprite:)];
    }
    return self;
}

-(void) repositionSprite:(ccTime)dt
{
        (省略。x, y軸の値を変更したりする)

	int newZ = <任意のz値>;
	
        //z値を指定
	[map reorderChild:tamara z:newZ];	
}

ちなみにCCNodeにvertexZというプロパティがあるけど、これにfloat値を代入して当該ノードの大きさを拡大縮小することで擬似的に奥行きを表現することができるらしい。

今回の収穫は、「こういうのってどうやってやるんだろう?」というとき、とりあえずサンプル動かしてみるのが近道だということがわかったってこと。

Xcode4.3.2でViewControllerを追加する方法

Xcode4.2に準拠した入門用のテキストを読みながらXcodeを利用した開発方法を勉強してたんだけど、どうも環境(Xcode4.3.2)と操作方法が違っている箇所があったのでメモ。

1. 新規ファイル選択画面を開く

メニューの[File]-[New]-[File]を選択して、下記ダイアログを表示させる。
選択するテンプレートは"Objective-C class"でOK。
f:id:tswi:20120324144331j:plain

2. 新規ファイル作成オプションを設定する

"Choose options for your new file:"画面で、サブクラスとして"UIViewController"を選択する。
クラス名はもちろん任意。
f:id:tswi:20120324144412j:plain

普通はstoryboardを利用してると思うので、"With XIB for user interface"のチェックはオフ。
f:id:tswi:20120324144422j:plain

これで新しいViewControllerの.hと.mが作成される。

Xcodeのアンインストール & Xcode4.3.1のインストール

Xcode 4.3.1をインストールするにあたって、既存のXcodeをアンインストールする
どうやらApplicationsフォルダ内のアイコンをゴミ箱に入れる操作では完全にアンインストールできないらしい

アンインストール

uninstall-devtoolsってやつで関連ファイルを消去する必要があるみたいなんだけど、今までインストールしてきたXcodeのバージョンによってこのファイルの在処がまちまちみたい
しょうがないので一括で検索すると、4つ見つかった。これは環境によって数やディレクトリが違うと思う

$ sudo find / -name uninstall-devtools
/Developer/Library/uninstall-devtools
/Developer-3.2.6/Library/uninstall-devtools
/Library/Developer/4.1/uninstall-devtools
/Library/Developer/Shared/uninstall-devtools

とりあえず適当にひとつ選んで実行

$ sudo /Developer/Library/uninstall-devtools --mode=all

完了したら次を実行

$ sudo /Developer-3.2.6/Library/uninstall-devtools --mode=all

のこりの2つは上のと一緒に削除されたっぽい

あとはApplicationsフォルダにあるXcodeのインストーラも削除
そしてMacを再起動

インストール

Mac App Storeからダウンロード
Mac App Store - Xcode

ダウンロードが完了したらApplicationsフォルダから起動して、ダイアログの案内に従ってインストールするだけでOK

MacでAptanaStudio3を日本語化する方法

AptanaStudio3をMacにインストールした後、Pleiadesプラグインを利用して日本語化する方法。
Windows/LinuxとMacでは.iniファイルのディレクトリが異なるので、若干注意が必要。
念のため、環境は下記の通り。

  • Mac OS X 10.7.3
  • AptanaStudio 3.0.9
  • Pleiades 1.3.3

1. Pleiadesプラグインをダウンロード

Eclipse 日本語化 | MergeDoc Project にアクセスして、"Pleiades本体ダウンロード"の項目からzipファイルをダウンロードする。
ちなみに2012/03/10現在の安定版である1.3.3を利用。

2. Pleiadesプラグインの適用

ダウンロードしたzipファイルを解凍して、featuresフォルダ、pluginsフォルダの中身をAptanaStudioの同名フォルダにコピー。
これだけ。

3. iniファイルの編集

普通のEclipseを日本語化するのと同様、iniファイルの編集が必要。
GUIから操作する場合、Aptanastudio.appファイルを右クリックして"パッケージの内容を表示"を選択する。
すると.appファイルの中身がFinderに表示されるので、[Contents]-[MacOS]の順にフォルダを開く。
そして、AptanaStudio3.iniをエディタで開く。
ここで少し注意が必要なんだけど、Windows/Linuxと同じ感覚で下記のように設定を追加すると、

-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar=

Macではエラーとなる。

myMacBook:Aptana Studio 3 user$ /Application/AptanaStudio3.app/Contents/MacOS/AptanaStudio3 
Error opening zip file or JAR manifest missing : plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
Error occurred during initialization of VM
agent library failed to init: instrument

Dockとかから起動しようとすると、なぜか反応がないみたいな動作に見えるハズ。
これはアプリケーションのディレクトリ構造がWindows/LinuxとMacで違うことが原因なので、Macの場合は以下のように記載する必要がある。

-javaagent:../../../plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar=

今度は正常にAptanaStudioが起動して、日本語化されてる。