SyntaxHighlighter

2014年9月18日木曜日

iOS8.0をXcode5.1でデバッグする方法

テスト端末のiOSを8.0にアップデートしたところ、Xcodeで認識しなくなった。
デバイスの選択で
[プロジェクト名] > [iOS Device]
となり、端末が選択できない。

まず、以下の場所を確認
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/
この場所にサポートしているiOSのバージョン毎のディレクトリーがあるが、
「7.1 (11D167)」はあるが、やはり8.0は無い。

アップデートを待つのも一つ。

ある掲示板に次のような記述があった。リンクを作るそうだ。
sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSup‌​port/7.1\ (11D167) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSup‌​port/8.0\ (12A4265u)

試してみたところ、一応動いた。
Xcode6がリリースされるまでこれで待とうと思う。

ちなみに、Xcode6のベータ版をインストールしている場合は、下記で動くそうだ。
sudo ln -s /Applications/Xcode6-Beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/8.0\ (12A4331d) /Volumes/MAVERICKS/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/8.0\ (12A4331d)


2014年5月26日月曜日

レンタルサーバでsass,compassを使う為のgemの設定

私の使用しているレンタルサーバはさくらレンタルサーバです。
この環境で、sassを使うために設定した内容を一部紹介します。
というか、さくらレンタルサーバでgemを使用するための.bash_profileもしくは.cshrcの設定について。

さくらレンタルサーバなどで通常、gem を使用してインストールする場合、何も設定していない場合は


ERROR: While executing gem ... (Gem::FilePermissionError)
  You don't have write permissions into the /usr/local/lib/ruby/gems/1.8 directory.

などと言われてしまいます。
当然レンタルサーバで、/usr/local/配下は書き込めないでしょう。

なので、次のような設定をします。

.cshrcの場合
setenv GEM_HOME $HOME/local/rubygems/gems
setenv RUBYLIB $HOME/local/rubygems/lib
setenv RB_USER_INSTALL true
setenv PATH ${PATH}:$HOME/local/rubygems/bin

.bash_profileの場合
PATH=$PATH:$HOME/local/rubygems/bin
GEM_HOME=$HOME/local/rubygems/gems
RUBYLIB=$HOME/local/rubygems/lib
RB_USER_INSTALL=true
export GEM_HOME
export RUBYLIB
export RB_USER_INSTALL
export PATH

などとし、設定を反映して下さい。
さて、sassとcompassをインストールしてみましょう。
$ gem install sass
Fetching: sass-3.3.7.gem (100%)
Successfully installed sass-3.3.7
1 gem installed
Installing ri documentation for sass-3.3.7...
Installing RDoc documentation for sass-3.3.7...
$
$ gem install compass
Fetching: sass-3.2.19.gem (100%)
Fetching: chunky_png-1.3.1.gem (100%)
Fetching: fssm-0.2.10.gem (100%)
Fetching: compass-0.12.6.gem (100%)
Successfully installed sass-3.2.19
Successfully installed chunky_png-1.3.1
Successfully installed fssm-0.2.10
Successfully installed compass-0.12.6
4 gems installed
Installing ri documentation for sass-3.2.19...
・
・
・
Installing RDoc documentation for compass-0.12.6...
$


OKでした。

2012年6月29日金曜日

ASUS EeePC 1025c & Ubuntu12.04 ...解像度変更編


Ubuntu12.04をASUSのEeePCシリーズに入れた場合、ディスプレイの解像度が800x600で変更できないという報告をよく目にします。
今回はASUSのEeePC1025Cの1024x600に変更できたので報告致します。

6月にEeePC1025Cを購入。
メモリを4GBに、HDDをSSDに換装。
そしてOSはUbuntu12.04に変更。
Ubuntuのバージョンが11.xの時はUnityの評価が低く、自分でも不満があったので11.xの導入はしなかったのですが、今回はディスプレイが10.1インチなので、このUIなら使い易いだろうと思い、12.04にしました。
Windowsの左下のメニューを頑張って操作しなくてもよいからと言う意味で。

EeePCにUbuntu12.04を入れた状態で、どのようになったかを軽くまとめます。

  • メモリの認識は/proc/meminfoで確認して4GBちゃんと認識されています。
  • 備え付けのSDカードリーダも動作しています。
  • ディスプレイの上についているカメラも認識しています。
  • 備え付けのマイクも認識しています。
  • キーボードのFnで割り当てられている機能について、ディスプレイの明るさ調整はできないようです。それ以外はほとんど使えます。スクリーンショットもできます。
  • Unityですが、やはり標準ではUnity2Dです。特に2Dでも問題がないので、今のところ3Dに変更する予定はありません。
  • 動作速度ですが、全く問題ないです。というより、期待していた以上にキビキビ動いてくれます。
  • 最後にバッテリーですが、このPCはハードウエアとソフトウエアでバッテリーの持ちを良くし、仕様では10時間と言う表記となっています。ただし、購入時の環境(Windows)で。Ubuntuにした場合、バッテリーの持ち時間の表示は、6時間強となりました。SSDを使用しているので、HDDのままだと恐らくもう少し短くなるかもしれません。


さて、本題です。
ディスプレイの設定が解像度800x600で変更できない。
xrandrの結果は次のようになっています。
---------------------------------------------------------------
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 800 x 600, current 800 x 600, maximum 800 x 600
default connected 800x600+0+0 0mm x 0mm
    800x600 0.0*"
---------------------------------------------------------------
maximumが800x600なので、設定ツール等を使用してもそれ以外に変更ができない。

解決方法として、xrandrを使用したり、xorg.confで設定したりという方法があります。
それについては未確認です。

こちらのフォーラムで同様の問題に対し、解決策が載っているのを見つけました。
http://forum.ubuntu-fr.org/viewtopic.php?pid=9088911
フランス語ですが。

この方法は、カーネルを更新することで、グラフィックモジュールが認識され、ディスプレイの解像度を変えることが出きると。

ASUS EeePC1025CのグラフィックはIntel atom内臓のグラフィックモジュールを使用しています。
このモジュールはGMA3650というものです。

Ubuntu12.04のkernelバージョンは3.2.0で、どうやらこのkernelはこのGMA3650には対応していないもよう。

それに対し、今回更新しようとしているバージョンは3.4.xは対応している。

ということで、試してみた。
手順は以下。

1. カーネルをダウンロードして解凍

$ wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.4.4.tar.bz2
$ tar jxvf linux-3.4.4.tar.bz2

2. make menuconfigで.configの設定
(他のツールでも、直接変更してもよい)

解凍したディレクトリに移動
$ cd linux-3.4.4/
$ make menuconfig


ここで、もしmenuconfigを立ち上げるのに必要なライブラリがない場合は、エラーが出力される。
--------------------------------------------------------------

 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 ***
 *** Install ncurses (ncurses-devel) and try again.
 ***

--------------------------------------------------------------
なので、必要なライブラリをインストールする。

$ sudo apt-get install libncurses5-dev

再度チャレンジ
$ make menuconfig

3. menuconfigで.configを編集


Device drivers ---> Graphics support ---> Direct rendering manager --->
ここで"Intel GMA5/600 KMS Framebuffer"という項目を探し、"m"と入力
この項目の下に"Intel GMA3600/3650 support"と言う項目が出るので、"y"と入力。

フォーラムに載っている内容ではもう一つ項目を設定。

Device drivers ---> Staging drivers --->
 "Realtek RTS5139 USB card reader support" の項目に"n"を入力
理由は分からない。


これでmenuconfigは終了。

4. コンパイルの実行

まず、カーネルコンパイル用のパッケージをインストール
$ sudo apt-get install kernel-package

そして、make clean
$ make-kpkg clean

makeする。
CONCURRENCY_LEVEL=`getconf _NPROCESSORS_ONLN` fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

ここから恐らく1時間以上かかった。

5. インストール

makeが終了したら、一旦上の階層に戻る
$ cd ..

このディレクトリにcustom kernel_imageとkernel_headersの2ファイルのdebファイルができているので
次のコマンドでインストール
$ sudo dpkg -i *.deb

6. 起動の設定

$ cd /lib/modules
このディレクトリに3.4.4-customが作成されている。

initramfsに、この3.4.4-customを登録する。
$ sudo update-initramfs -ck 3.4.4-custom

grubを更新。
$ sudo update-grub


これでカーネルの更新は終了。
リブートする。

恐らく再起動後にディスプレイの設定が変だから、とりあえず1024x600にするよ。
といったメッセージが表示される。

ログイン。

画面を見ていただきたい。
1024x600の画面になっているはずである。

設定から、ディスプレイの解像度の設定を見てみると1024x600
ただし、それ以外の選択肢はない。

しかしながら、ディスプレイがとても見やすい。
そして、カーネルをコンパイルしたので、動作がさらに早くなった。
気がする。


N2600を使ったASUS EeePC101CHなどでも同様に変更できると思われる。

2012年1月31日火曜日

【AndEngine】背景を画像にする


背景に画像を使いたい場合の方法。


onLoadResources()内で
背景テクスチャのTextureRegionクラスのインスタンスを生成

onLoadScene()内で
背景画像からSpriteのインスタンスを生成、
SpriteからSpriteBackgroundのインスタンスを生成してsetBackgroundメソッドに読み込ませてあげる。



■SpriteBackgroundクラスのコンストラクタ
SpriteBackground(final BaseSprite pBaseSprite)
SpriteBackground(final float pRed, final float pGreen, final float pBlue, final BaseSprite pBaseSprite)

■SceneクラスのsetBackgroundメソッド
void setBackground(final IBackground pBackground)

参考にしたソース

AndEngine-Forumsより
Set as a background image

では実際に使用した際から抜粋



/**  省略  **/

private BitmapTextureAtlas mBackgroundTextureAtlas;
private TextureRegion mBackgroundGrassTextureRegion;

public void onLoadResources() {
  BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
  this.mBackgroundTextureAtlas = new BitmapTextureAtlas(512, 512, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
  this.mBackgroundGrassTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBackgroundTextureAtlas, this, "bg1.png", 0, 0);
  this.mEngine.getTextureManager().loadTextures(this.mBackgroundTextureAtlas);
}
 
public Scene onLoadScene() {
  this.mEngine.registerUpdateHandler(new FPSLogger());
  this.mScene = new Scene();
  
  final Sprite sp = new Sprite(0, 0, mBackgroundGrassTextureRegion);
  this.mScene.setBackground(new SpriteBackground(sp));
  
  /** 省略 **/
  
  return this.mScene;
}








2012年1月18日水曜日

【AndEngine】TimerHandlerの使い方

タイマーを使用してn秒後に〇〇したい。という要望を叶える。

まずTimerHandlerクラスについてjavadocを見てみよう。
Class TimerHandler


コンストラクタは2つ
TimerHandler(float pTimerSeconds, boolean pAutoReset,
       ITimerCallback pTimerCallback)
TimerHandler(float pTimerSeconds, ITimerCallback pTimerCallback)

第一引数は秒で指定。
上の方は第二引数にboolean型でAutoResetの指定ができる。
メソッドのsetAutoReset(boolean pAutoReset) でも同様に設定できる。
AutoResetをtrueにすると指定した秒で繰り返しpTimerCallbackが呼ばれる。
falseの場合は指定した秒が経過するとpTimerCallbackが1度呼ばれる。
reset()を実行すると再度Timerが起動する。
引数のpTimerCallbackはITimerCallbackインターフェイスを実装した自身を呼ぶためにthisを指定したり、ITimerCallbackインターフェイスをnewしても良い。
では、サンプル

final TimerHandler timerHandler = new TimerHandler(1.0f, true, new ITimerCallback() {

  public void onTimePassed(TimerHandler pTimerHandler) {
  
    /** 処理したい内容を記述 **/
    Debug.d("TimePassed");
  }

});
mScene.registerUpdateHandler(timerHandler);
TimerHandlerのインスタンスをregisterUpdateHandlerに渡すことを忘れずに。

2012年1月15日日曜日

【AndEngine】TMX map を使った簡単な例 衝突判定

今回は衝突判定についてです。


以前から使っているDigitalOnScreenControlを使ってプレイヤーを移動させ、Sceneに描画した四角と衝突している間、色を変える例です。

使用している変数、DigitalOnScreenControl等は以前のコードを参考にして下さい。

final Rectangle exampleRectangle = new Rectangle(100, 100, 32, 32);  //四角を描画
exampleRectangle.setColor(0f, 0f, 1f);  //青
mScene.attachChild(exampleRectangle);

mScene.registerUpdateHandler(new IUpdateHandler(){

  public void onUpdate(float pSecondsElapsed) {
    //四角とplayerが衝突したか
    if(exampleRectangle.collidesWith(player)){
      exampleRectangle.setColor(1f, 0f, 0f);  //赤
    } else {
      exampleRectangle.setColor(0f, 0f, 1f);  //青
    }
  }

  public void reset() {
  }

});

実行結果は以下になります。
衝突前

衝突時

衝突前は青。衝突時は赤となるようにしました。

2012年1月13日金曜日

【AndEngine】TMX map を使った簡単な例 HUDを使う

HUDは、ヘッドアップディスプレイの略であり、ディスプレイ上の固定位置に配置されているユーザーインターフェースのすべての部分を表します。
以前紹介したDigitalOnScreenControlのように画面がスクロールしてもディスプレイ上の固定位置に配置されています。

では、今回はHUDを継承した簡単なサンプルを提示したいと思います。
画面上の上部に白い四角を描きたいと思います。
まずはHUDを継承したTestBarクラスを作成
import org.anddev.andengine.engine.camera.Camera;
import org.anddev.andengine.engine.camera.hud.HUD;
import org.anddev.andengine.entity.primitive.Rectangle;

public class TestBar extends HUD {

  public TestBar(float pX, float pY, final Camera pCamera) {
    this.setCamera(pCamera);

    final Rectangle btnSubRect = new Rectangle(pX, pY, pCamera.getWidth(), 30);
    btnSubRect.setColor(1, 1, 1);
    this.attachChild(btnSubRect);

    pCamera.setHUD(this);
  }
}
BaseGameActivityを継承したクラスのonLoadScene()でSceneにsetChildSceneとして作成したクラスのインスタンスを渡す。
private Scene mScene;
public Scene onLoadScene() {

  mScene = new Scene();
  
  /** ・・省略・・ **/
  
  final TestBar testbar = new TestBar(0, 0, this.mBoundChaseCamera);
  
  /** ・・省略・・ **/
  
  return mScene;
}

以上の内容を実行すると下の画像のようになります。
DigitalOnScreenControlでプレイヤーを移動させても画面の上部に白い四角は固定された位置に描画され続けます。

AndEngine.orgのHUDの記事にHUDの説明とCreatingとRemovingについて例が載っています。