2012年5月 1日 (火)

Androidアプリ作りました

まぁ、1ヶ月前あたりのブログ記事を読めばバレバレなのですが。

こういうものができました。

はちゅねまわし

2年くらい前にこんな記事を書いたわけですが、これのAndroid版です。

と言っても、プログラムは全面的に作り直してますし、以前のGLUTのものはマウスで「はちゅねさんの向きを変えられる」という程度だったのですが、今回はAndroidなのでタッチパネル操作ではちゅねさんをグリグリ回しちゃえるようになっています。そのために四元数(クオータニオン)の勉強とかしちゃいましたよ。我ながらバカですね。

この辺りでひっそりと無料配布中です。Androidスマホお持ちの方はお試しください。ソースも公開中。例によってSkydriveで、この辺りにおいてあります

追記

ソースは.zipファイルですが、これをビルドする方は以下の手順で。

  1. JDK 6 (32ビット版) と Eclipse (32ビット版) を普通にインストール。64ビットOSでも32ビット版が必要。
  2. Android SDK と ADT Plugin for Eclipse をインストール。やりかたはこの辺り参照。
  3. Android SDK Manager を起動して、"Android 2.2 (API 8) SDK Platform" と
    "Android 1.6 (API 4) SDK Platform" をインストール。
  4. ソースの .zip ファイルを展開せずそのまま Eclipse でインポートする。"File" > "Import..." > "General" > "Existing Projects into Workspace" > "Select archive file"

自動ビルドが有効なら、一時的にエラーが出たりしますが、しばらく待っているとエラーが勝手に全部消えてビルドが完了するはず。

| | コメント (0) | トラックバック (0)

2012年3月24日 (土)

android.opengl.GLSurfaceView.Renderer

そうか、GLSurfaceView.Rendererの実装はGLES11のサブクラスにすればいいんだ。

なるほど。よくできている。


と、思ったら、setDebugFlagsが利かなくなるという罠が…。

| | コメント (0) | トラックバック (0)

2012年3月23日 (金)

AndroidのOpenGLテクスチャでハマる

AndroidでOpenGLアプリを作っていたところ、glTexImage2DがGL_INVALID_VALUE (1281) というエラーになって動かない。よくよく調べると、テクスチャの寸法が768x768と、2のベキじゃない値になっている。元のPNGファイルは間違いなく512x512なのに。誰かが勝手に画像を拡大している!?

と、ここまで気づくのに2日間。

このテクスチャは、PNGをres/drawableに置いておき、BitmapFactory.decodeResource(Resources,int)で読み込んでいたのだが、このメソッドが勝手に拡大しているとしか思えない。

decodeResourceメソッドには、引数を3個取るバージョンがあって、第3引数にはBitmapFactory.Optionsというものを渡す。この説明をよーく読むと、Options.inScaledというパラメタがあって「ビットマップを読み込むときにターゲットの解像度に合わせてスケールする。デフォトはオンなので、ビットマップをスケールしないで読み込みたい場合はオフにしなさい。」みたいなことが書いてありました。それで、引数が2個の場合は、Optionsはすべてデフォルトとみなされる、と。

そこまでわかって改めて調べると、テストに使っていたデバイスのDisplayMetrics.densityは1.5だった。なるほどね。

つまり、こうすればよかったのだ。

BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap texture = BitmapFactory.decodeResource(res, R.drawable.texture, options);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, texture, 0);

わかってしまえばどうということは無いのだが、ウェブで検索してもこのポイントの説明を見かけない。こんなことでハマるのは私だけなのかな?


追記

「わかってしまえば」と偉そうなことを書きましたが、実はまだわかっていませんでした。

res/drawable-nodpi というフォルダを作って、そこにファイルを置けば、BitmapFactory.Optionsなんていうものを持ち出さなくてもそのまま読み込めました。

つまり、Androidでのビットマップファイルの置き場というのは、

res/drawable
デバイス解像度に応じて適当に拡大縮小されたものを読み込む
res/drawable-{l,m,h,xh}dpi
デバイス解像度に応じたフォルダが選ばれ、画像自体は拡大縮小されない
res/drawable-nodpi
デバイス解像度によらず、拡大縮小されずに読み込まれる

という規約なのでしたよ。

…ということが、まとめて書いてあるドキュメントが存在しないのが、また、なんというか、アレだ。

| | コメント (0) | トラックバック (0)

2012年2月26日 (日)

kyoto-client

NodeアプリケーションでKyoto Tycoon使おうと思ってkyoto-clientをインストールした。

Db.open() がエラーになって動かない。

調べたらこれってNode 0.4用みたいだ。Node 0.4 と Node 0.6は http Agent が別物で互換がないんだよね。

直そうと思ってソースを調べたら、kyoto-client って、何か知らないスクリプト言語(CoffeeScript?)で書いてあって、それをコンパイルしてJavaScriptを生成している。このバグ修正のために新しいスクリプト言語を勉強するってのはイマイチだなぁ。

どうしよう。

| | コメント (0) | トラックバック (0)

2012年2月25日 (土)

UbuntuのOpenSSLの開発パッケージ

UbuntuのOpenSSLの開発パッケージは libssl-dev というのか。openssl-dev じゃなくて。OpenSSLの実行パッケージは openssl なのに。

わからねーよ、こんなの。

| | コメント (0) | トラックバック (0)

2012年1月29日 (日)

LOOX U/C30でUbuntu Live CDを起動

LOOX U(のAtomの機種)はGMA500グラフィックスが鬼門でイマイチLinuxがちゃんと動きませんでしたが、今年の4月リリース予定のUbuntu 12.04 LTS (Precise) では、GMA500が正式サポートされる模様。

アルファ版を試したところ、起動手順を乗り切ればちゃんと動くことを確認しましたので、その手順を紹介します。(LOOX U/C30で試していますが、Atomを搭載した LOOX U なら他の機種でも同様と思います。また VAIO など他の GMA500 ノートでもいけるかも。)

  1. Ubuntu 12.04 Alpha 1 をダウンロード。(http://cdimage.ubuntu.com/releases/precise/alpha-1/ から Desktop CD の x86 (32ビット) 用を。) また、USBメモリからブートするため、Universal USB Installer をダウンロード (http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/)。
  2. Windows で Universal USB Installer を起動。Ubuntu 12.04 は選択肢にないので、一番下の Try Unlinsted Linux ISO (New Syslinux) を選択して、ブート用USBメモリを作成。(私の場合10分くらいかかりました。USBメモリの性能次第ですが。)
  3. LOOX UにUSBメモリを取り付けた状態で再起動。BIOS起動画面で ENTER を押し、「起動メニュー」を使ってUSBからブートする。
  4. じっと待つ。テキスト画面→グラフィック画面→テキスト画面→グラフィック画面と何回か画面モードが切り替わりながら Ubuntu 12.04 がブートストラップする。キーボードやマウス類には触らずに待つ。
  5. ついに(私の場合約3分かかる)、テキスト画面になって、「Welcome to Ubuntu Precise ...」から始まるメッセージが表示され、その数秒後にシェルのプロンプトが出る。その後すぐに画面がクリアされテキストカーソルが左上に出た状態で沈黙する。
  6. そこで、Ctrl-Alt-F1を押す。すると、画面クリア前の「Welcome to Ubuntu Precise」の画面に戻る。
  7. シェルのプロンプトに対して、以下のコマンドを入力。(キーボードがUS配列になってしまっているので、“_”は、“=”を入力するつもりでキーを押す。)
    sudo rmmod poulsbo ; sudo modprobe psb_gfx ; startx
  8. 十数秒で X が立ち上がり、さらに待つと Ubuntu の Unity Desktop になる。この状態でUbuntu 12.04 の Live 環境を試せる。
  9. 使い終わってデスクトップをシャットダウンすると、OS自体はシャットダウンされずにシェルのプロンプトに戻ってしまう(このとき、コンソールの字が小さくなっている)ので、以下のコマンドを投入。
    sudo shutdown -h now

ハードディスクにインストールした場合は、/etc/modprobe.d/ 配下に
blacklist poulsbo
を入れておけば、難しいことをやる必要がなくなる、はず。(実は私はまだ試していません。ハードディスク (SSDに交換しちゃったけど) に余裕が無くて、Linux パーティションを作れない…)

| | コメント (1) | トラックバック (0)

2011年12月10日 (土)

自動Windows Updateが終わらない

Windows 7で、いろいろインストールしたり変更したりして、手動でWindows Updateした。再起動後、もう少しいろいろやって、それで電源を切ろうとしたところ、「シャットダウン」にアップデートあり印が出ていた。

よくあることなので、インストールして電源断を選んだら、… 終わらない。

シャットダウン画面で「コンピューターの電源を切らないでください。更新プログラムをインストール中(1個中1個目)」という表示になってから、そろそろ4時間経ちます。いくらなんでも長すぎますよねぇ。ディスクアクセスをしている気配もないし。

ブチっと電源切るかなぁ。でも、さすがにこのタイミングは怖いなぁ。

とりあえず一晩放置してみますか…。

追記: 一晩寝て起きたら、無事に終わったらしく電源が切れていました。昨日の17時ころにアップデート適用開始して、ブログに書いたのが21時ころ。その後、午前1時くらいまで起きていましたがそのときはまだ終わっていませんでした。いったい何時間かかったのだろう。

| | コメント (0) | トラックバック (0)

2011年11月 3日 (木)

VC++ Express 2010にSP1を適用したらx64コンパイルできなくなったでござるの巻

私は、Visual Studioは買ってなくて、もっぱらExpressを使っています。最近のメインはVisual C++ Express 2010。Visual C++ Expressは、それ自身では32ビットコンパイルしかできないのですが、Windows SDKをインストールするとx64とかItaniumとかのコンパイルもできるようになります。

そうやって、Visual C++ Express 2010でx64バイナリを作っていたのですが、先週末から急にx64コンパイルができなくなってしまいました。コンパイルしようとすると、次のようなメッセージが出てとまってしまうのです。

Error: The "ConfigurationGeneral" rule is missing from the project

また、x64用のプロジェクトのプロパティを表示しようとすると、よくわからないダイアログが出て、プロパティを参照できない状態にもなってしまいました。

ずいぶん困ったのですが、結局これは(タイトルにも書いたとおり)Visual Studio の SP1 が原因だったようです。コンパイルできなくなっていることに気づく数日前に、Windows UpdateでVisual Studio 2010 Service Pack 1というのが来ていたのであまりよく考えずに適用したのですが、これが敗因でした。

Visual C++ Expressには32ビット版のコンパイラしか入っていないのですが、Windows SDKには、Visual C++のコンパイラ本体がフルセット(32ビット、x64、Itanium)含まれていて、だから、Windows SDK入れるとVisual C++ Expressでx64コンパイルができるようになるわけです。Visual Studio 2010 SP1は、C++コンパイラ本体も更新するのですが、どういうわけか、Visual C++ Expressに含まれる 32 ビットコンパイラだけを更新し、Windows SDKがインストールしたx64コンパイラは更新せずに放置する様子。このためx64コンパイラのバージョンが合わなくなっていたのでした。

売り物のVisual Studioにはx64用のコンパイラが入っていて、SP1は当然そのコンパイラは更新するはず。Expressの環境ではx64コンパイラがインストールされていても更新しないというのは、嫌がらせの域ですね。

最悪だったのは、VS SP1のアンインストールができないこと。

コントロールパネルからVisual Studio 2010 SP1 のアンインストールを選ぶことはできるのですが、ダイアログが出て「SP1をアンインストールすると、Visual Studioが起動できなくなって、SP1の再インストールもできなくなるけど、いいですか?」みたいなことを言われて。

そんなの、いいわけがない。

一瞬目の前が真っ暗になりましたが、System Restore(システムの復元)を使ってSP1適用前まで戻すことで、なんとか復旧できました。

マイクロソフトから何か対策が出ると信じて、SP1は適用せずに待つしかなさそうです。

| | コメント (1) | トラックバック (0)

2011年10月25日 (火)

Vectorにも置いていただきました

数ヶ月前に作っていたMobiHandlerと、先日公開したPDF Thumbnail Trimmerを、Vectorに置いていただきました。

Kindle持ってる人は日本語圏にはあまりいないと思うので、MobiHandlerの方は埋もれてしまうでしょうが、PDF Thumbnail Trimmerの方はそれなりに需要があるんじゃないかと思っています。(それで登録したのですが。)

それで、初めてVectorに登録したのですが、ソフトの登録画面に「Windows 95/98で動くか」みたいな選択肢があって絶句しました。95で動くかどうかなんて、そんなこと考えたこともありませんでした。Windows 2000ですら、サポート打ち切りになっている時代に。さすが伝統あるサイトだけのことはありますね。

| | コメント (0) | トラックバック (0)

2011年10月21日 (金)

Windows Vista/7でPDFのサムネイル(縮小版)表示を改良

Windows Vista以降では、デスクトップのファイル表示はサムネイル(縮小版というかライブアイコンというか)が普通になっています。

Adobe Readerをインストールすると、PDFファイルもサムネイル表示になりますが、上下または左右に余白ができて情けない感じになってしまいます。これを取り除くプログラムを作りました。

こんな感じ。(左が使用前、右が使用後。画像クリックで拡大。)

Ss
なお、おまけ機能として、64ビット対応も入れました。64ビットウィンドウズだと、PDFのサムネイル(縮小版)表示はうまく動かないことが多いのですが、それを調停して、64ビットでも確実にサムネイル表示ができるようにします。

例によって SkyDrive に置いてあります。ダウンロードページにアクセスし、PDFThumbTrimmer-1.0.7-setup.zip というファイルをダウンロードしてください。解凍すると中にPDFThumbTrimmer-setup.exeというファイルが入っていますから、これを実行します。するとインストールが始まります。(なお、ファイル名のうち".zip"とか".exe"の部分は、設定によっては表示されません。)PDFThumbTrimmer1.0.7-src.zipにはソース一式が入っています。普通は、ソースをダウンロードする必要はありません。

このプログラムはとても小さい(ダウンロードファイルは61KB、プログラムの本体は13KB)のですが、なぜかというと、自分でサムネイルを作っているわけではなくて、Adobe Readerが作るサムネイル画像を加工しているだけだからです。このため、単独では動作しません。あらかじめAdobe Readerをインストールしておく必要があります。

と、いうことで、PDFのサムネイルがきれいに表示されずに困っているかた、お試しください。

追記: このプログラムはWindows Vista以降専用というわけではなくて、Windows XPでも動きます。でも、Windows XPではあまり意味ないんですよね。デスクトップにはサムネイル表示できないし、フォルダビューだと必ず正方形の枠がついちゃし。

| | コメント (0) | トラックバック (0)

«iriver Story HD買いました