2010年10月18日月曜日

Excelのバグ?

Excel本体を2つ立ち上げて、それぞれでファイル操作をしたところ、後に立ち上げた方のシートでは表計算が正常に動作しませんでした。

具体的には、後で立ち上げたExcel側であるファイルを開き、その中で加算を行います。

(例)
A1セルに「1」、B1セルに「2」が入っている。
C1セルに
 =A1+B1
又は
 =SUM(A1, B1)
と入力すると、C1セルの数値が「0」と表示される。
正しい動作であれば「3」と表示されるはず。

既存ファイルの修正でも、新規ファイル作成でも同様の現象が発生しました。
なお、後で立ち上げたExcel本体を終了し、最初に立ち上げたExcel上で同様の操作を行ってみたところ、全く同じ式を入れたのにも関わらず、C1セルには「3」が表示され正常な動作が行われました。

あるExcelシートを片面のディスプレイで見ながら、もう1面のディスプレイでExcelファイルを編集するような場合には注意が必要です。

2010年9月21日火曜日

[Ruby]プロキシ経由だとgem installでエラー

Rubyに手を出してみることにしました。
正確にはRubyが必要な開発環境を導入してみることに。

まずはRubyインストール。
最初、色んなところから本体やらgemやら、Windows用Unixコマンドやらかきあつめてみたんですが・・・
よく見ると一発でインストールできちゃう素敵パッケージがありました。
RubyForgeというところでWindows用exe探したらあります。

動いているかどうかの確認はコマンドプロンプトで

> ruby --version
ruby 1.9.2p0 (2010-08-18 revision 29036) [i386-mswin32]

こんな感じに。

さて、ここからgemインストールに挑戦してみたところエラー発生。
調べるとプロキシ経由だとエラーになるらしい。
コマンドプロンプトから

set http_proxy=http://proxy.hogehoge.jp:8080

と自分のところのプロキシとポート番号を設定して、再度gemると・・・

またエラー。
なんぞそれ。

ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError)

と出た後ろに 503エラー?
そのURLをremoveするといいよ、なんていう情報もありましたが、gemコマンドに-yオプションつけてみたらうまく行きました。

2010年9月8日水曜日

VB6.0 文字表示に関する覚書(大層な・・・)

急遽、VB6.0でソフトを作ることになりました。
VC6.0は触ったことはあっても、VBはあんまり・・・

今回はお客様に「見た目」も重視されるようでしたので、画面デザインにも気を配ったのですが、VB6.0の文字表示の指定がなかなか思うように出来ず苦労しました。
別に書くほどの内容でもありませんが、検索した時に自分でひっかかるように(笑)

■Label
・横位置は指定可能(左寄せ、中央、右)
・縦位置は指定不可(必ず上寄せ)

■Button
・横位置は指定不可
・縦位置も指定不可(必ず中央寄せ)
・Enable = False にして押せないボタンをLabel代わりに・・・
 と思ったら、Falseの時は文字が灰色になってしまう罠。
 黒にしたいところも灰になると困る・・・

■Shape
・文字表示できないのでLabelと重ねて使う

■Image
・画像サイズに自動的に合わせてくれる


結局、Imageの性質を利用して、
(1)LabelやButtonを使って画面イメージを作成
(2)画面キャプチャで画像化
(3)画像を各パーツに切り分け、「ボタン風で文字を上寄せ」、「Shape+Label風で文字は中央寄せ」などになるよう多少手を入れて、JPEGまたはGIF形式で保存
(4)Imageを使ってひたすら並べる
としました。
静的な表示内容ならこれが楽でした。

問題は動的な表示の場合ですね。
その場合はプログラム内部で各プロパティをいじるのでしょうか。

2010年7月21日水曜日

[VBA]ワークシート上に置いたDTPickerコントロールの表示崩れ対策

理由あって、会社のPC上でExcel VBAでマクロを組むことになりました。

日付入力で「Microsoft Date and Time Picker Controll 6.0」(DTPicker)を使って、簡単にちょいちょいと作ろうとしたところ(※1)、起動時に奇怪な現象が発生。

(1)該当の.xlsファイルを起動する。
(2)DTPickerの中に赤い「×」が一瞬表示され、設定したサイズとは大きく異なる矩形に変形。
(3)デザインモードにすると設定したサイズで表示しなおされるが、デザインモードを終了すると矩形に戻る。
(4)一応、設定した日付は表示されている。
(5)スクロールしたりして、再描画が走ると設定したサイズで表示される。


何これ?
Google先生に聞いてみるも、あまり発生している人はいないのかこれという解決策は見当たらず。

(5)でシートの再描画が行われると正常に表示されることから、Bookオープン時に強制再描画を行うことで無理やり解決しました。
一瞬、「×」が見えるのがいただけませんが・・・。


※1:会社のPCはVisual StudioのライセンスがあるのでActiveX利用で問題ないかな、ということでAPI呼び出しは見送り。

2010年7月8日木曜日

Jarファイル実行時にClassNotFoundException

eclipseで実行可能なJar形式でJarファイルを作成。
ダブルクリックで実行したら

ClassNotFoundException

・・・。

java -classpath sample.jar com.sample.test.Sample
java -classpath [jarファイル名] [メインクラス名]

でやってもダメでした。
外部ライブラリを抽出してみても、パッケージにしてみてもダメ。
最終的にはJarファイルの隣のフォルダにライブラリをまとめて入れておいて、

java -classpath [jarファイル名] [メインクラス名]

で動きました。
ライブラリのクラスパスがおかしかったってことかしら・・・。
これだとダブルクリックではClassNotFoundになってしまうので、バッチファイルで上のjava実行コマンドを発行して実行してもらうことにしました。

ついでにJarファイルの実行パスをプログラムで取りたかったのですが、結構面倒そうなので、バッチファイルでJarファイルのあるフォルダをカレントディレクトリにして、

System.getProperty("user.dir");

で取ることにしました。
バッチ叩いてもらえないと何も動きません(ぉぃ)

SQLServer2005でバックアップファイルから復元する方法

sqlcmdコマンドを使って

sqlcmd -U [ユーザ名] -P [パスワード] -S [マシン名]\[インスタンス名]

でログインします。
その後に、

RESTORE DATABASE [データベース名] TO DISK = 'バックアップファイルのフルパス'
WITH RECOVERY, REPLACE
GO

で復元できるはず!

・・・できなかったので Management Studio の

新規クエリ > 「master」データベース

にして、上の「RESTORE〜」を書いて実行!
これで復元できました。

参考にさせていただいたサイト
http://infotech.fmfamily.net/modules/blog/details.php?bid=70&date=201003

2010年6月28日月曜日

[Android]SurfaceViewと終了処理

前の記事でSurfaceViewの描画処理が軽いと書きましたが、実際にはViewよりもメモリもCPUパワーも食うけどフレームレートが高くなるよ、が正しいところでしょうか。

携帯アプリだと描画処理にパワーとメモリを食って、キーイベントの割り込みが遅れるなんてこともあったので(かなり前の端末ですが)、描画用スレッドのループにはそれなりのsleepを入れた方が良さそうです。

さて、View#OnDraw(Canvas)で実装していた描画処理をSurfaceViewに変更しました。


【引っかかった点】

・コンストラクタで描画スレッド作ってstart()させちゃダメ
 ⇒surfaceCreated(SurfaceHolder)でやるのが正解。
 (そうやってたつもりでしたが、書く場所間違えてました・・・うっかり?)

・Xperiaの□ボタン押しても、描画スレッドのログが止まらない〜
 ⇒マルチスレッドですものね。
  ゾンビ恐ろしや。
  SurfaceViewをセットしたActivityのOnPause()をオーバーライドして、描画スレッドのループを抜けてスレッド終了させるようにしました。
  こんな感じのメソッドをSurfaceView継承クラスに追加して、OnPause()から呼んでいます。
  このメソッドの後ろにActivity#finish()を記述しています。


public void endLoop() {
synchronized (MainLoop) {
// ループを抜ける
loopflg = false;
}
try{
// スレッドの終了を待つ
MainLoop.join();
} catch( InterruptedException ex ){
Thread.currentThread().interrupt();
}
}

  MainLoop:描画スレッド
  loopflg:trueだとループ、falseでループ脱出
  です。
  他の方の処理を参考にさせて頂きました。

[Android]SurfaceViewとアノテーション

携帯アプリの移植のため、iPhone風にタッチパネルに指を滑らせる(フリックする)と画面が滑って切り替わる演出を作成しようとしました。

「throw Life - ActivityのOpenとCloseをアニメーションさせる」
http://www.adamrocker.com/blog/289/activity_open_close_animation.html

ここを参考にView + Themeによるアニメーションでも出来たのですが、設定がめんどくさい・・・(というかよく理解できていません・・・)

そこで調べてみると、ゲームのような画面描画が頻繁に行われるアプリにはSurfaceViewがいいとありました。
描画処理がViewより軽い模様。
これで携帯アプリと同じようにCanvasに画像をずらして描画して、タッチイベントに合わせてアニメーションしてるように動かせば実現できそうな気がします。

SurfaceViewにRunnableをインプリメントするか、別のThreadクラスにするか。
うーん。
携帯アプリの描画処理がCanvasにRunnableインプリして実装してあるので、とりあえずはRunnableでいきます。

早速、ネットをうろうろして他の方のコードを参考に書いてみました。
すると、親クラスからオーバーライドした surfaceCreated(SurfaceView surface) でいきなりのエラー。
見ると「@Override」をつけるとエラー、はずすとエラーじゃなくなります。

???

これも調べると同じ現象になった方がいらっしゃって、無事解決。
Javaコンパイルのターゲットバージョンを

Java1.5 ⇒ 1.6

と変更したら出なくなりました。
アノテーションというJava1.6で正式実装された機能なのですね。
携帯アプリでJava1.5までしか使ってなかったので知りませんでした。(言い訳)

2010年6月25日金曜日

[Android]文字列描画(訂正)

指定したY座標を文字列の左上に合わせる書き方は


canvas.drawText("hijkLMN", 100, 240 + fm.ascent, mPaint);


ではなくて、


canvas.drawText("hijkLMN", 100, 240 - fm.ascent, mPaint);


みたいです。
でも、微妙にずれる・・・おかしい。

[Android]文字列描画

Viewへの文字列の描画は下のような書き方で出来ました。

private class SampleView extends View {

Private Paint mPaint;

public SampleView(Context context) {
super(context);
mPaint = new Paint();
}

@Override
protected void onDraw(Canvas canvas) {

FontMetrics fm = null;
// 背景は白
canvas.drawColor(Color.WHITE);
// アンチエイリアス有り
mPaint.setAntiAlias(true);
// 描画色は黒
mPaint.setColor(Color.BLACK);

// フォントサイズの指定
mPaint.setTextSize(64);
fm = mPaint.getFontMetrics();
// 文字列リソースから取得する場合
canvas.drawText(getResources().getString(R.string.test), 100, 80, mPaint);
// 直接記述する場合
canvas.drawText("Abcdefg", 100, 160, mPaint);
// 座標位置(Y軸)はフォントのベースラインの値になるので
// 実際の描画位置は少し上になる。
// 座標位値(Y軸)をフォントの上限(Ascent)に合わせたい時は
// 下のように書く。
canvas.drawText("hijkLMN", 100, 240 + fm.ascent, mPaint);
}

FontMetricsのメンバ変数 ascent はフォントのベースラインから上限までの値(負の値)が入っているので、Y座標 + FontMetrics.ascentがフォントの上の部分の座標値になります。
文字列の幅はどうやって取ればいいのだろうと思っていたら、mPaint.getTextWidths(String str, float[] float)なるメソッドが。
これだ!と思ったら戻り値のintに入ったのは文字数・・・。
どうやら2番目の引数の中に各文字の幅が1文字ずつ入るメソッドのようなので、

String str = "Abcdefg";
float[] fl = new float[length];
int width = 0;

mPaint.getTextWidths(str, fl);
for(int i=0; i<length-1; i++) {
width += fl[i];
}

としました。
かっこ悪い気がするけど、他にどうやったら取れるかしら。
mPaintは上のコードのPaintクラスの変数です。

[Android]画面サイズの取得

http://start-android-sdk.blogspot.com/2010/05/android-how-to-get-screen-size-on.html
より。

これで取得できる画面サイズはタイトルバー&ステータスバーを含んだもの。

[Activity継承クラスの場合]
WindowManager windowmanager = (WindowManager)getSystemService(WINDOW_SERVICE);
Display disp = windowmanager.getDefaultDisplay();
int width = disp.getWidth();
int height = disp.getHeight();

[View継承クラスの場合]
Display disp = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).
getDefaultDisplay();
int width = disp.getWidth();
int height = disp.getHeight();

[Android]実行構成でNullPointerException 3

実行構成から構成の設定を行おうとするとNullPointerExceptionが発生する現象について。
おそらく、ではありますが解決方法がわかりました。

現象が発生するプロジェクトと、発生しないプロジェクトがありましたので両者を比較してみました。
すると、大きな違いが・・・

前者はビルドターゲットが「X10」、後者はビルドターゲットが「Android1.6」になっていました。
もしやと思い、前者のビルドターゲットを「Android1.6」にしたところ・・・


エラーが発生しなくなりました。


前に「プロジェクト > クリーン」を実施したら発生した、と書きましたが、あれは勘違いだったようです。
何度かビルドターゲットを「X10」と「Android1.6」にそれぞれ切り替えて確認してみましたが、「X10」にすると必ず発生し、「Android1.6」にすると1度も発生しなかったことから、私の環境ではこれが原因で間違いなさそうです。

しかし、ネットで検索をかけてみても同様の現象が出てる人はいない様子・・・
「Xperia X10」スキン&SDKインストールした時に失敗したのかしら。

2010年6月24日木曜日

[Android]実行構成でNullPointerException

以前からアプリをコンパイルし、Eclipseメニューの

「実行」⇒「実行構成」⇒Androidアプリケーション

を選択すると、NullPointerExceptionが発生していました。

[Error Message]
Error during launch: java.lang.NullPointerException

こんな感じ。
理由はどうやらdrawableフォルダの
・drawable-hdpi
・drawable-mdpi
・drawable-ldpi
が無かった為。
valuesフォルダのように、values-jaフォルダが無くてもデフォルトフォルダだけ用意しておけばいいものだと思っていました。
でも、drawableフォルダだけではエラーになるんですね。

2010年6月23日水曜日

[Android]XperiaのBluetooth電源ON/OFF

前にBluetooth通信の動作確認に使った「BluetoothChat」。
ソースコードを参考にさせていただきつつ、動作を確認していました。

すると、不思議なことにXperiaのBluetooth電源オフ状態でアプリを起動すると、
「Bluetooth is not available」
とToast表示が。
(ソースコードを見ると、Bluetooth非搭載の場合に表示される内容)

設定でBluetooth電源オンにすると表示されません。
XperiaではBluetooth電源オフ状態だとデフォルトのBluetooth Adapterが取得できないのでしょうか。
その後ろにBluetooth電源オフならオンにする処理が入っていますが・・・。

うーん?

[Android]XperiaのBluetoothペアリングの挙動

Androidスマートフォンと「ある機械」をBluetooth接続しようとした時に気になっていること。
それはペアリング情報の保持。

かつて、携帯電話と接続した時に、携帯電話側は過去にペアリングした機器の情報を保持しているにもかかわらず、「ある機械」側が全く保持できない構造だった為、お互いの情報交換やらサービス検索やら毎回やりなおす羽目になったことがありました。
やりなおすだけならいいんですけど、携帯電話側のアプリがBluetooth接続情報をプログラムからいじれない仕組みになっていたので、携帯電話側にペアリング情報が残っていると手動で情報を消さない限り進めなくなるという非常にいけてない仕組みだったので悲惨。

Androidで同じことにならないよね?という確認もこめて、XperiaでBluetoothのペアリングにおける挙動を確認。
esmasuiさんの「backport-android-bluetooth」を使わせていただいてます。

【実験】
Xperia側ではPair情報が保持されていて、「ある機械」側で情報が無い場合。Androidアプリでは画面上に「ある機械」の名前が表示されるのでタップタップ。

【結果】
Xperia側にパスキー入力ダイアログが表示されました。
相手にお前なんか知らないよと言われて、もう1度よろしくお願いしますっていう作法なんでしょうか。
礼儀正しくてステキです。

他機種でも同じ動きをするかどうかが気になります。

Logcatでのログ保存

実機(Xperia)に繋いで、DDMS経由でLogcatログを見る。

そこまではいいんですけど、ログをtxt形式で保存するのはどうすれば?
フロッピーな感じのアイコンは反転したままですし・・・

結論としてはLogcat窓の中の必要な部分をShift+方向キーで選択して、「▽」を押して「Export Selection As Text...」を選んで保存。

とりあえずこれで。

2010年6月2日水曜日

[Androidアプリ]Android1.6でBluetoothを使う

esmasuiさんの「backport-android-bluetooth」とサンプルコード「BluetoothChat」で、Xperiaと携帯電話以外の機器とのBluetooth通信が可能かどうかを確かめようと試みました。

「backport-android-bluetooth」
http://code.google.com/p/backport-android-bluetooth/

Source > Browse のところにサンプルソースがあるようです。
Source path: svn / trunk / backport-android-bluetooth201 / src / com / example / bluetooth / *.java

多分・・・。

ちなみにAndroid2.1のサンプルコード「BluetoothChat」をbackport用に変更したもののようです。
2.1用サンプルの方で最初やってみたんですが、Android1.6 -> 2.1で変更になった点でエラーが出たり、エミュ&実機でVerifyErrorが出たり。
xml関係ではこの部分で大量のエラーが。書き換えればOKでした

match_parent(Android2.1?) ⇒ fill_parent(Android1.x?)

VerifyErrorは原因がわからなかったので、改めて「backport-android-bluetooth」のサンプルコードの方でアプリをビルドして実機で実行。

RuntimeError・・・BluetoothAdapterクラスが無いだと??

「backport-android-bluetooth2.jar」をビルドパスに関連付けただけじゃダメなのかな?
/src以下にbackport.android.bluetoothパッケージを作って、ソースコード一式を置いてみる・・・

android.bluetooth.* 系が全部無いよ、エラー。

あまりに知識が無さ過ぎてどうすれバインダー状態。
/src以下にandroid.bluetoothパッケージも作って、ソースコード一式(以下略)
ここでAIDLなるファイルのことを知りました。
/src以下に拡張子aidlでファイル作っておいたら、/genの下にJavaファイルが出来る模様。

その状態でビルド、実行したら無事Xperia上で動作しました。
原因がわかってないことが多いけど、まずはBluetoothで接続&SPPにて通信が出来るかどうかを確認することが先なので接続相手を探してみる。

[1]手持ちのiPhone・・・iPhoneアプリ側に動作確認できるアプリがない。却下。
[2]手持ちの携帯電話・・・SPP通信用のアプリは入ってないので、SPPの上位プロファイルであるDUNで繋いでみる。
繋がるけどデータは何も飛んでこず。
そりゃそうだ。
[3]会社用の携帯・・・SPP通信用アプリが入っているけど、電池切れ。
充電器が無かったので後日に見送り。
[4]元々繋ごうと思ってた機器・・・よく考えたら、このド本命と繋げられるかどうかが大事なのであった。機器をセットアップして、いざ接続!

--------------------------------------
DEMO-1GOU
0x00012121@9abc ・・・
--------------------------------------
DEMO-1GOU
0x00045678@9abc ・・・
--------------------------------------
DEMO-1GOU
0x00099999@9abc ・・・
--------------------------------------

定期的に飛ばす電文が画面に表示されていきます。
メニューボタンを押して、接続メニューを出すことに気づくまで30分くらいかかったのはご愛嬌。
(それまではXperiaの「設定」からBluetooth接続させようとしてました)

iPhoneのようにiPhone系以外の機器とのSPP通信が制限されてる(?)かもしれないという危惧があったのですが、さすがはAndroid端末Xperia。
そんな制限は特になされていないようですね。

これで安心してBluetooth通信アプリが作れそうです。
問題は山積していますが・・・。
色々間違えていたらすみません。

2010年5月24日月曜日

[Androidアプリ]XperiaのUSBドライバー

開発用としてXperiaを入手しました。
さっそくapkをインストール・・・と思うと、USBがうまく認識してくれません。
USBマスストレージじゃダメだー。

設定 > アプリケーション > USBデバッグ

を有効にするとさらにUSBドライバを要求されたのですが、どこにドライバが?

答えは「Xperiaの中のmicroSD内」。
ついでにUSBストレージとして有効にする場合も、Xperia側から「マウント」する必要があります。
一般人にはハードル高い(笑)
普通は挿したら認識してくれると思いますもん。

マウント方法は、PCとXperaをUSBケーブルで接続した状態で、Xperiaの画面上端あたりを指で下方向になぞると出てくるメニューから行います。
「USB接続」なる文字の部分を指でタップするとマウントする/しないを聞かれますので、「マウント」を選択すればOK。
これでPCからXperiaの中のmicroSDの中が触れるようです。

USBドライバはマウントして、XperiaのmicroSDの中にある「CDBrowser/Drivers.zip」をPC上にコピー、解凍します。

マイコンピュータ > プロパティ > ハードウェア > デバイスマネージャ

でデバイスマネージャを開いて、「SEMC SO-01B」とかそんな感じの名前で「?」アイコンがついているところを右クリック。
「ドライバの更新」を選択して、先ほど解凍したDriversフォルダを指定しましょう。

私の場合はマウント方法でつまづきました。
参考になれば幸いです。

2010年5月21日金曜日

[Androidアプリ]xmlファイル書き換えるとEclipseでエラー(追記)

「[Androidアプリ]xmlファイル書き換えるとEclipseでエラー」
で書いた内容が発生した原因らしきものを書き忘れていました。

Eclipseの「プロジェクト」>「クリーン」を実行した直後からです。

Eclipse、使い慣れてないからかこんな変なエラーばっかりで時間を食われてしまう・・・。

[Androidアプリ]今度はNullPointerException

xmlファイルの部分で少し時間を食ったものの、無事サンプルコードが動いて一安心。

したのもつかの間。
その後、ソースコードを直して動きを確認しようと「実行」を押すとエラーが。

ダイアログには
「Java.lang.NullPointerException:"xxx起動"中に内部エラーが発生しました。」
というようなメッセージが表示されている。

何がNull?
エミュレータは起動してあるし・・・。

さっきリファクタリングした時に
------------------------------------------------------------------------------------------------
org.eclipse.core.internal.resources.ResourceException: リソース '/xxx が存在しません。
at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:319)
at org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:196)
at org.eclipse.core.internal.resources.Project.checkAccessible(Project.java:113)
at org.eclipse.core.internal.resources.Project.hasNature(Project.java:489)
at com.android.ide.eclipse.adt.internal.project.FolderDecorator.decorate(Unknown Source)
at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.decorate(LightweightDecoratorDefinition.java:263)
at org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnable.run(LightweightDecoratorManager.java:81)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate(LightweightDecoratorManager.java:365)
at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations(LightweightDecoratorManager.java:347)
at org.eclipse.ui.internal.decorators.DecorationScheduler$1.ensureResultCached(DecorationScheduler.java:371)
at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(DecorationScheduler.java:331)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
------------------------------------------------------------------------------------------------
というエラーが多発していたけど、このリソースのことかな?

比較のために新規プロジェクトを作成して、足りない部分を探してみる。
しかし、名前が違う以外は足りないものは無さそうだ。

エラーログには、
------------------------------------------------------------------------------------------------
java.lang.NullPointerException
at com.android.sdklib.AddOnTarget.isCompatibleBaseFor(AddOnTarget.java:230)
at com.android.sdkuilib.internal.widgets.AvdSelector$TargetBasedFilter.accept(AvdSelector.java:170)
at com.android.sdkuilib.internal.widgets.AvdSelector.fillTable(AvdSelector.java:727)
at com.android.sdkuilib.internal.widgets.AvdSelector.refresh(AvdSelector.java:432)
at com.android.ide.eclipse.adt.internal.launch.EmulatorConfigTab.updateAvdList(Unknown Source)
at com.android.ide.eclipse.adt.internal.launch.EmulatorConfigTab.initializeFrom(Unknown Source)
at org.eclipse.debug.ui.AbstractLaunchConfigurationTab.activated(AbstractLaunchConfigurationTab.java:354)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.handleTabSelected(LaunchConfigurationTabGroupViewer.java:1323)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer$6.widgetSelected(LaunchConfigurationTabGroupViewer.java:434)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1027)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1012)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:770)
at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3256)
at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:2045)
at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:323)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
------------------------------------------------------------------------------------------------
と、
------------------------------------------------------------------------------------------------
java.lang.NullPointerException
at com.android.sdklib.AddOnTarget.isCompatibleBaseFor(AddOnTarget.java:230)
at com.android.sdkuilib.internal.widgets.AvdSelector$TargetBasedFilter.accept(AvdSelector.java:170)
at com.android.sdkuilib.internal.widgets.AvdSelector.fillTable(AvdSelector.java:727)
at com.android.sdkuilib.internal.widgets.AvdSelector.refresh(AvdSelector.java:432)
at com.android.ide.eclipse.adt.internal.launch.EmulatorConfigTab.updateAvdList(Unknown Source)
at com.android.ide.eclipse.adt.internal.launch.EmulatorConfigTab.initializeFrom(Unknown Source)
at org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup.initializeFrom(AbstractLaunchConfigurationTabGroup.java:86)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupWrapper.initializeFrom(LaunchConfigurationTabGroupWrapper.java:194)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.displayInstanceTabs(LaunchConfigurationTabGroupViewer.java:804)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer$8.run(LaunchConfigurationTabGroupViewer.java:680)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.inputChanged(LaunchConfigurationTabGroupViewer.java:697)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.setInput0(LaunchConfigurationTabGroupViewer.java:659)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.setInput(LaunchConfigurationTabGroupViewer.java:635)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.handleLaunchConfigurationSelectionChanged(LaunchConfigurationsDialog.java:916)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog$3.selectionChanged(LaunchConfigurationsDialog.java:544)
at org.eclipse.jface.viewers.StructuredViewer$3.run(StructuredViewer.java:864)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.runtime.Platform.run(Platform.java:888)
------------------------------------------------------------------------------------------------
の2つのメッセージが出ているがエミュレータへのランチャのところだろうか。

「実行構成」を開いてみるといきなりダイアログが表示されて、またもやNullPointerException。
実行構成から参照している部分が何か無いようだ。

結局、原因ははっきりとわからなかったが、メインのActivityを指定すると都度NullPointerExceptionを告げるダイアログが表示されたことから、このActivityが無い(?)か参照先がおかしくなっている模様。
解決方法を探ってみたがこんなことでハマってる人はいないようで、これという解決方法が見つからなかったので以下の力業で実行できるようにした。無理やり。

(1)プロジェクト一式を退避させる。
(2)新規プロジェクトを作成する。(前のプロジェクトと違う名前にする)
(3)ソース&リソース、設定ファイル等を全部新規プロジェクトに移し変える。
(4)必要な部分を修正。

こうしてNullPointerExceptionが発生して、動作確認が出来ない事態は避けられた。
だが、解決方法がはっきりしていない以上、発生する度にこんなことするのは時間の無駄だしどうしたものか。

[Androidアプリ]xmlファイル書き換えるとEclipseでエラー

Androidアプリで画面遷移時のスライドアニメーションをやってみようと

「throw Life:ActivityのOpenとCloseをアニメーションさせる」
http://www.adamrocker.com/blog/289/activity_open_close_animation.html

を参考にxmlファイルをいじっていたところ、実行時にエラーが。

-------------------------------------------------------------------------------------------------
17:51:04,593 FATAL [main] Main - No embedded stylesheet instruction for file: file:/C:/work/eclipse/workspace/TestXperiaApp/res/values/styles.xml
org.eclipse.wst.xsl.jaxp.debug.invoker.TransformationException: No embedded stylesheet instruction for file: file:/C:/work/eclipse/workspace/TestXperiaApp/res/values/styles.xml
at org.eclipse.wst.xsl.jaxp.debug.invoker.internal.JAXPSAXProcessorInvoker.transform(JAXPSAXProcessorInvoker.java:225)
at org.eclipse.wst.xsl.jaxp.debug.invoker.internal.JAXPSAXProcessorInvoker.transform(JAXPSAXProcessorInvoker.java:186)
at org.eclipse.wst.xsl.jaxp.debug.invoker.internal.Main.main(Main.java:73)
Caused by: org.eclipse.wst.xsl.jaxp.debug.invoker.TransformationException: No embedded stylesheet instruction for file: file:/C:/work/eclipse/workspace/TestXperiaApp/res/values/styles.xml
at org.eclipse.wst.xsl.jaxp.debug.invoker.internal.JAXPSAXProcessorInvoker.transform(JAXPSAXProcessorInvoker.java:214)
... 2 more
-------------------------------------------------------------------------------------------------

「styles.out.xml」なるファイルが真っ白で残っていました。
困ったことに何度やっても同じエラー。
「styles.out.xml」を削除しても出てしまいます。

悩んだ末にリファクタリングでプロジェクト名を変更して、また戻したらエラーが出なくなりました。
原因はどこにあったのだろう・・・。


開発環境:Eclipse 3.5.1 + Xperia X10スキン

2010年5月20日木曜日

Androidアプリ開発 覚え書き[5/20]

Androidの開発環境は以前に構築していましたが、訳あって急に触ることになりました。

Xperia X10のスキンを入れて、いざAndroidプロジェクトを作成!
そして、実行!

[2010-05-20 17:34:51 - TestXperiaApp]Error in an XML file: aborting build.
[2010-05-20 17:34:51 - TestXperiaApp]res\layout\main.xml:0: ERROR Resource entry main is already defined.
[2010-05-20 17:34:51 - TestXperiaApp]res\layout\main.out.xml:0: Originally defined here.
[2010-05-20 17:34:51 - TestXperiaApp]C:\work\eclipse\workspace\TestXperiaApp\res\layout\main.out.xml:1: ERROR Error parsing XML: no element found

・・・何かエラー出た。
xmlの記述が悪いのかと色々触ってみるも効果なし。

悩んだ末にXperiaのエミュレータを起動してから「実行」をしてみたら動きました。
えー。
そういうことー。

自分にがっかり(笑)

それにしても、Xperiaエミュレータの起動が遅いのは私だけでは無いみたいですね。
起動まで5分近くかかるとか、最初フリーズしてると思いましたもん。
皆様もお気をつけあれ。

2010年4月8日木曜日

Excelのセル表示が「#######」となる問題

たまにExcelを使っているとセル表示が「##################」となることがあります。
何だこれ?と思っていたのですが、解決策がわかったのでメモっておきます。

【現象】
Excelシートのセル表示が「###############」となる。

【原因】
セルの中の文字列が256〜1024文字であるため。

【解決方法】
セルの書式設定で「文字列」⇒「標準」に変更すると文字が表示されます。
255文字以下、または1025文字以上の場合は発生しません。


変な仕様だなぁ(笑)

2010年3月3日水曜日

P-01Aのサポートするフォントサイズ

エミュレータで動くのに、実機だと画面の文字が出なかったり画面がフリーズするので首をかしげていたら、こんな初歩的なミス。

指定したフォントサイズが対応してないという罠。
ありがちです。
自分のためにもメモしておきます。

【P-01Aの対応フォントサイズ】
12, 16, 20 ,24, 30, 32, 48, 60, 96 (pt)

エミュレータ(DoJa5.1)だと対応フォントサイズは、
12, 16, 24, 30, 48, 64 (pt)

なぜ、64ptだけ無いのだー。
8の倍数だというのに。

2010年2月4日木曜日

TortoiseSVNのリポジトリの移動

TortoiseSVNをローカルのファイル管理に使い始めて、最初に出くわした壁がタイトルの内容。
「リポジトリの移動」です。
他のWebサイトを参考にしたのですが、「再配置」したらいいとか、設定ファイルのパスを変更しなきゃダメだ!など色々書いてあったのですが・・・

結論から言うと、移動先にリポジトリフォルダごとコピー(念のためバックアップ)して、参照先をそちらに変更すると出来ました。

「再配置」をするとUUIDが違うぜエラーが出てしまい、設定ファイルのパスはどこをどれだけ変更したらいいのかわからず(笑)
本当にこれでよかったのかどうかはわかりませんが、移動前のバージョンにも戻せたのでおそらくOK・・・!?かと。
ローカルだったからかな。

TortoiseSVNの導入

バージョン管理ツール「subversion」。
最近、「subversion」ツールである「TortoiseSVN」を導入しました。
ローカルのみ使用中。
便利です、ええ。

ところがダウンロードしようとするとフリーズするMy IE6.0。
会社からのお達しとはいえ、いまだIE6.0なのが悪いような気もしますが。

「TortoiseSVN」ダウンロードページ
http://tortoisesvn.net/downloads

このページにあるmsi拡張子のリンクをクリックすると、SorceForgeのダウンロードページに飛びます。
飛んだ先で少しでも画面を下スクロールすると、もれなくIE6.0が落ちるのですが(私の環境の場合)、画面上部に表示される文章内にある「direct link」の文字をクリックすると、落ちるより先にダウンロードが開始されるようです(苦笑)

同じく上のダウンロードページを下の方へスクロールすると、各国の言語パックへのリンクがあるので「Japanese」にあるリンクをクリックして、同じく飛んだ先で「direct link」!

これで無事インストールが出来るようになります。
 
 
 
 

2010年1月27日水曜日

Microsoft SQL Server 2005 Express Edition with Advanced Services Service Pack 3

Microsoft SQL Server 2005 Express Edition with Advanced Services Service Pack 3

SQL Server 2005 Express版は無償で使えるSQLサーバです。
会社の人がEnterprise版についてるGUIツールが無いと言ってましたが、Advancedが付く方だとGUIツールもついているみたいです。

http://www.microsoft.com/downloads/details.aspx?familyid=B448B0D0-EE79-48F6-B50A-7C4F028C2E3D&displaylang=ja
 
 
 

WindowsXPでIIS5.1+ASP.NET2.0(2)

前回はIIS5.1のインストールで(というよりは動作確認)で行き詰ってしまいましたが、気を取り直してASP.NET2.0のインストールを行います。

私の場合は既に.NET Framework2.0以上が入っていたので、同時にASP.NET2.0もインストールされていました。
これとIISを紐付けます。

  aspnet_regiis -i

ASP.NET2.0のフォルダでコマンドプロンプトから上記コマンドを実行します。
すると、ASP.NET2.0がIISに対してインストール(スクリプトマップの更新?)を行います。
どうやらこれでASPは使えるようになるみたいです。
 
 
 

Play Frameworkの文字コード

Play Framework1.0.1で作ったプロジェクトをEclipseで編集して動作確認してみたら、見事に日本語が文字化けしてしまいました。
エンコードを確認すると UTF-8。
元ファイルはShift-JIS。

んー?

EclipseでJavaエディタのデフォルト設定がShift-JISになってるのかなと確認するも、どこで設定したかわからず。
結局、ファイルのエンコードを全てUTF-8に設定しなおして、HTMLのcharsetもUTF-8にしたら日本語が表示されました。

でも、根本的な解決になってない・・・。
 
 
 
 

Play! Frameworkを触ってみる

簡単にWebアプリが作成できる「Play Framework」を使ってみました。

「Play Framework ★ Home」
http://www.playframework.org/

参考になる記事:
「Javaで軽快に使える「軽量フレームワーク」特集〜本格的なRoRスタイルフレームワーク「Play!」(1) 」
http://codezine.jp/article/detail/4750

ダウンロード時のバージョンは1.0.1。

特徴は、
・独自Webサーバ内蔵
・Javaベース
・Eclipse&NetBeansプロジェクトに対応
・MVCモデルが最初から揃ってる(Model・Views・Controller)
ということみたいです。

ダウンロードしたzipファイルを適当なフォルダに解凍。
コマンドプロンプトから解凍したplayフォルダ内に移動して、

  play new プロジェクト名

とコマンドを入力するだけです。
その後、プロジェクト名は?とか聞かれるので[プロジェクト名]を入力すればOK。
これで[プロジェクト名]のMVCそれぞれ揃ったフォルダ&ファイルが出来上がります。
playフォルダの中を見ると[プロジェクト名]フォルダがあるはずです。
最初から雛形を作ってくれるのは楽でいいですね。

試しに「testapp」というプロジェクトを作成。

  play new testapp

次にこの「testapp」を起動。

  play run testapp

これでhttp://localhost:9000/にアクセスすると「testapp」が動作していることが確認できます。
この時のWebサーバはplay独自サーバらしいです。

停止する時はコマンドプロンプトでCtrl+Cを押して、Yを入力すればOK。

ちなみにEclipseプロジェクトにするのも簡単で、

  play eclipsify testapp

と play eclipsify 作成済みのプロジェクト名 を入力するとEclipse用の設定ファイル等を作成してくれます。
Eclipseにインポートするには、
ファイル > インポート > 一般 > 既存のプロジェクトをワークスペースへ
を選択し、「ルートディレクトリの選択」でtestappのルートフォルダを指定します。

Eclipseからプロジェクトを実行する場合は、パッケージ・エクスプローラ内の「eclipse」フォルダの中にある「testapp.launch」を右クリックして、「実行」を選択します。
停止する時はプロンプトウインドウの右上にある「■」(停止ボタン)をクリックすると停止します。

NetBeansは私は使ったことが無いのですが、

  play netbeansify testapp

でEclipse同様に対応できるようです。

2010年1月26日火曜日

WindowsXPでIIS5.1+ASP.NET2.0(1)

IIS5.1のセットアップで思った以上にてこずったのでメモ。
(前にも入れたことあるのに・・・。)

【環境】
・会社のぱそこん
 OS:WindowsXP SP3 Professional

(1)コントロールパネル > プログラムの追加と削除 > 左側にある「Windowsコンポーネントの追加と削除」をクリック。

(2)Windowsコンポーネント一覧が表示されるので、「インターネット インフォメーション サービス(IIS)」にチェックを入れる。(灰色になっている場合は既にインストール済み)

(3)必要に応じてIISを選択した状態で「詳細設定」ボタンを押して、インストールしたいサービスを選択する。
   FTPやSMTPは不要ならチェックしない方が良い。

(4)「次へ」を押すとインストール開始。

(5)途中でこんなファイルが無いんだけど((例)convlog.exeなど)と聞かれるので、SP2のインストールCDがあればそれを入れて「I386フォルダ」などの下に該当ファイルがあるので指定する。
   残念ながらプレインストールでCD無いよ!という場合は「C:\Windows\i386」などにインストールCDの中身があったりするのでそこを指定する。
   それすらも無い場合は諦めるということで。

(6)インストールが完了すると、勝手にIISは「サービス」として起動するのでブラウザから「http://localhost/」へアクセスしてみる。
   OSのロゴみたいなのが上部にあるページが表示されればIISが動作しているということ。

私は(6)でハマりました。
なぜかhttp://localhost/にアクセスしてもDNSエラー・・・。
なぜぇ。
その前に動かしたいASPファイルのコピーや設定やらをしていたので、その辺が悪かったかなと思って悩みましたよ。
DNSエラーなのでIISのログファイルすらも出来てないし・・・。

しばらく調べて、http://127.0.0.1/だとアクセスできることが判明
「hosts」か!と思うも、ちゃんと「127.0.0.1 localhost」という記述が。
うーん。

そこでふと思い出しました。
別の用事でブラウザのプロキシ設定をいじっていたことを。
インターネットオプションから確認してみると、プロキシが設定してある。
普段とは違う設定が・・・これだー!

別の用件で変更したまま戻すのを忘れていたのでした。
このせいでlocalhostが通らなかったのね。
元の設定に戻すと当然http://localhost/でアクセスできました

2010年1月19日火曜日

メイリオフォント

Windows XPでもClearType対応の日本語フォント「メイリオ」がダウンロードして使えるようになったそうなので入れてみました。

早速、Webページの表示をメイリオに。

・・・汚い。

どうやら、

コントロールパネル > 画面 > デザイン > 効果 で
「次の方法でスクリーンフォントの縁を滑らかにする」で「ClearType」を選択しないとギザギザになってしまうようです。

欧文も和文もバランスが良くて好きですが、文字色黒でも灰色っぽく見えますね。
目が悪いから、MSPゴシックの方が読みやすいかなぁ。
うーん。