2014年2月26日水曜日

モノクロ液晶画面風ボックス


このアプリのUIが素敵だったので、CSSのボックスで再現してみた。


モノクロ液晶画面風ボックス

IE11、Chrome、Opera、Firefox、Safariで動作確認済み。このサイトにも早速適用してみた。

至高のfont-family

Webサイトのフォント設定に毎回悩むので、何か良い例はないかと思い、探していたらこんなのを見つけた。

【決定版】僕の考えた最強のfont-family指定
body {
    font-family: 'Hiragino Kaku Gothic ProN', Meiryo, 'MS PGothic', Sans-serif;
    font-size: 14px;
    line-height: 1.3;
    font-weight: normal;
}
すごく良いかも。line-heightは個人的には1.6が好きなので、font-familyだけ使わせてもらおう。もうフォント選びに迷わない!

Bitmapを綺麗に表示させる

Bitmapを拡大縮小して描画すると、画像が汚くなってしまうことがある。そのような場合、PaintクラスのsetFilterBitmapメソッドを実行すると、画像が綺麗に表示される。
Paint p = new Paint();
p.setFilterBitmap(true);
ただし、この処理は若干重いので、大きな画像を扱ったり、大量の画像を扱う際には気をつけよう。

3000x3000のBitmapに、この処理を加えると、はっきり遅延を体感できる。Androidでそんなに大きな画像を扱うのがそもそも問題だけどw

2014年2月25日火曜日

OpenFL情報はこちら


OpenFLに関する情報は、大きなテーマになりそうなので、別サイトに専用ページを作成しました。

2014年2月22日土曜日

Eclipseで行番号や空白を表示する


Eclipseで行番号や空白を表示するには、

Window -> Preference -> General -> Editors -> Text Editorsの

Show line numbersShow whitespace charactersをチェックする。

これも毎回忘れてしまうのでメモっておくw

OpenFLを始める前に用語の確認

OpenFLを本格的に勉強しようと思ったけど、その前に、知らない用語だらけだったので、よく見る用語について整理してみた。

OpenFL

OpenFLは、ゲームやアプリケーションを構築するための環境を提供するフリーでオープンソースのソフトウェア開発キットです。
http://ics-web.jp/lab/archives/1329より

OpenFLで使用するHaxeは、Action Scriptに似ていて、Flashとほぼ同じAPIが使える。Airより速いらしい。

Windows, Mac, Linux, iOS, Android, BlackBerry, Tizen, Flash, HTML5向けの実行ファイルを出力できるらしい。万能すぎ!



Haxe(ヘックス)

Haxeとは、汎用プログラミング言語の一つで、静的型付けのオブジェクト指向言語であり、構文はActionScriptおよび標準化が中止されたECMAScript 4に類似している。
http://ja.wikipedia.org/wiki/Haxeより

まだ全部見てないけど、かなり素敵な言語だ。enumが便利そう。



Lime(ライム)

Lime(Light Media Engine)とは、スクリプト言語またはバーチャルマシンに依存せずに、単一のコードベースでクロスプラットフォームをシンプルに実現するための抽象レイヤーである(意訳)。
https://github.com/openfl/limeより

OpenFLは、これを使って、各プラットフォーム向けのコードを生成しているのかな。



Neko

Nekoは、Nicolas Cannasseによって開発されたハイレベルのdynamically typed programming languageで、コンパイラとガベージコレクタを備えたバーチャルマシンを持っている(意訳)。
http://en.wikipedia.org/wiki/Neko_(programming_language)より

Limeとの違いがよくわからないけど、まあ今のところは似たようなものだと認識しておくw



NME

どうやら、OpenFLの前身となる技術のようだ。あまり重要じゃなさそうなので省略。


要するに、OpenFLというのは、Haxeで書いたコードを、LimeやNekoを使って、各プラットフォーム向けの実行ファイルに変換するための環境ってことか。でも、これだけ知っていれば万能ってことでもなく、複雑なことをやろうとすると、ある程度変換先のシステムについても知っておかないと活用できないかも。

いろいろな言語を覚えるのが面倒(覚えても片っ端から忘れる)自分にはぴったりの言語だな。真面目に取り組んでみるか。

2014/02/26

LimeとNekoの関係を、勘違いしていたかも。Limeは、HaxeのコードをNeko用に変換して、Nekoはそれを解釈してプログラムを実行するっていう仕組みのようだ。
正確な情報は、こっちに書きますw

OpenFL情報

2014年2月21日金曜日

Eclipseの文字コードをUTF-8に変更する


Window -> Preference -> General -> Workspace -> Text file encoding

いつも忘れるので、ここにメモしておく。

特に理由が無い限りUTF-8にしておくのが無難。

2014年2月18日火曜日

How to make 3D printer data



Fumotrimを使って、3Dプリント用のデータを作る方法です。

Androidで制作したモデルをSTLフォーマットでエクスポートして、Windowsのnetfabbで読み込んで、データを補正しています。

2014年2月14日金曜日

ntpdの状態確認

nptdがDDoS攻撃に使われているようだ。

ntpd の monlist 機能を使った DDoS 攻撃に関する注意喚起

【重要】NTPの脆弱性について

自分のサーバー(Cent OS)は大丈夫かなと調べてみると、
# /etc/rc.d/init.d/ntpd status
ntpd (pid  2091) is running...
nptdばっちり動いてるし...

バージョンを確認してみると、
# ntpq -c rv
4.2.6.xだった...

とりあえず、止めておこう(適当w)。
/etc/rc.d/init.d/ntpd stop

2014年2月12日水曜日

Fumotrim1.7.6: 塗りつぶし機能の追加など


次回のアップデートでは、塗りつぶし機能を追加予定。これは、ペイントソフトにあるような塗りつぶし機能だけど、3Dブロックに適用しようとすると、なかなか難しいので、実装を見送ってきた。特にFumotrimのブロックは固定サイズではないので、アルゴリズムがなかなか複雑。簡単にアルゴリズムを説明すると、

1, 塗りつぶしを始めるブロックをユーザーが指定

2, ブロックの周辺6ブロックを探査して同じ大きさのブロックがあれば、色を塗る。

3, 周辺6ブロックに移動して、2-3を繰り返す。

箇条書きすると簡単そうに見えるけど、ブロック探査が難しい。Fumotrimのブロックの内部構造は、3次元グリッドのような並び方ではなく、8分木構造で、しかもブロックのサイズがばらばらなので、探査アルゴリズムは複雑な仕組みになっている。でも、このアルゴリズムはアイソメトリック図を作るときに、すでに実装していたので、今回は流用するだけで済んでよかった。

最初にコードを書いた時は、再帰処理を使っていたけど、スタックが深くなりすぎて、StackOverflowErrorが発生してしまった。そのため、再帰処理を使わない形式に書き換えた。再帰処理は、やりすぎると落ちるし、メソッド呼び出しの多発で遅くなるので、使用はほどほどに。

あとは、サイズが異なるブロックにも塗りつぶしを適応しようとしたけど、ちょっと面倒な問題があったのでやめた。同じサイズのブロックしか塗りつぶさないっていうポリシーのほうがわかりやすいし。

それから、Undoシステムにも問題があったので修正した。

さらに、レビューコメントでリクエストがあったカメラのシフト機能を実装してみたけど、これは動画で説明しないと難しいかな。3Dビューの両横の余白をタッチしてスライドすると、カメラの注視点を移動できる。英語で説明するのが難しいから動画を撮影しよう...

あと、レンダリング速度もほんの少し速くなったかも。

テストして、週末にリリースできそう。次期アップデートをお楽しみに!

2014年2月7日金曜日

アプリのバージョン情報を取得する

自分のアプリのバージョン情報を取得するには、Activity内に以下のようなコードを書けばよい。
try {
  PackageManager packageManager = getPackageManager();
  PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), PackageManager.GET_ACTIVITIES);
  String versionCode = packageInfo.versionCode;  // バージョンコード
  String versionName = packageInfo.versionName;  // バージョン名
} catch (NameNotFoundException e) {
  e.printStackTrace();
}

2014年2月3日月曜日

わかりやすいAndroid NDK導入手順 2014年版

AndroidでNDKを利用する手順について調べてみました。NDKについての解説記事はたくさんありますが、情報が古くて、そのままだと使えないことが多かったので、現時点での僕が試した方法について説明します。

まずは準備から。

今回使用した開発環境は、Windows7 64bit、JDK1.7.0、ADT(v22.3.0-887826)です。Android SDKのAPIレベルは、最新版の19を使用しました。

コマンドプロンプトからjavahコマンドを実行できるように、あらかじめJDKへのパスは設定しておいてください。パスの設定はこちらが参考になります。

http://www.javadrive.jp/install/jdk/index4.html

まずは、NDKのダウンロードサイトから、NDKのWindows 64bit版をダウンロードします。

http://developer.android.com/tools/sdk/ndk/index.html

android-ndk-r9c-windows-x86_64.zipというファイルです。

ファイルをダウンロードして、解凍したら、C:\ndkというディレクトリを作って、そこに入れてください。場所は任意ですが、ここではわかりやすいように、実際に僕が利用している環境を記します。

C:\ndk\android-ndk-r9c-windows-x86_64\android-ndk-r9c

という場所にNDKが入りました。

次に、ADTを起動して、[Window -Preference]の[Android - NDK]という設定画面を開いてください。


NDK Location

C:\ndk\android-ndk-r9c-windows-x86_64\android-ndk-r9c

と入力して、OKを押して、設定画面を終了してください。

これで設定は完了です。

2014年2月1日土曜日

WebViewを含んだActivityを終了するときに、Window Leakedエラーが発生する

WebViewを含んだActivityを終了するときに、こんなエラーが発生してた。
02-01 13:14:50.958: E/WindowManager(738): android.view.WindowLeaked: Activity com.fb.fumotrim.ui.FStorageActivity has leaked window android.widget.ZoomButtonsController$Container{426b0148 V.E..... ......I. 0,0-1280,65} that was originally added here
どうやら、ズームボタンを有効にしている際に起きるようで、WebView設定のsetBuiltInZoomControls(true)を設定していると、エラーメッセージが出るまではわかった。調べてみると、同じような症状がstackoverflowにあった。もう、stackoverflow先生に足を向けて寝られないw

http://stackoverflow.com/questions/11889562/webview-with-builtinzoomcontrols-throwing-exceptions-and-crashing

ActivityのonDestroyをオーバーライドすると、エラーが出なくなった。
@Override
protected void onDestroy() {
 setVisible(false);
 super.onDestroy();
}
どうしてこうなるかはよくわかってないけど、直ってよかった(^^;)