Androidアプリを複数のプロジェクトに分割して開発する時の設定

Posted on Mon 01 October 2012 in Android

eclipseのプロジェクトのプロパティから「Java Build Path」や「Project References」を設定してみたら、ビルドは通るが実行時にClassNotFoundExceptionが出て上手くいかなかった。

正しくは、プロジェクトのプロパティの「Android」を選んでLibraryの設定をするようだ。

  • 呼び出される側のプロジェクトはIs Libraryにチェックを入れる。
  • 呼び出す側のプロジェクトはAddから呼び出すプロジェクトを選択する。

また、AndroidManifest.xmlに呼び出す側のActivityなりServiceなりを下記のように書いておく必要がある。

・・・
<service android:name="key0note.GoogleReaderWidget.GoogleReaderWidgetDataService" />
・・・

参考リンク

http://tmpla.info/archives/1211


SSE用いたアルファブレンドの高速化4 アライメントがずれている画像同士のアルファブレンド

Posted on Sat 03 December 2011 in ペイントツール

↓の続き

今回はアライメントをずらした場合での計測をします。

_mm_loadu_si128などアライメントをあわせる必要がないロード・ストア命令を使用する場合は、
前回と同じ様に何も考えずに読み込んでアルファブレンドを行い、書きこむという順で処理を行うことができます。

しかし、アライメントを合わせる必要があるロード・ストア命令を使用する場合は、
処理方法をアライメントのズレによって変える必要があります。

今回のアルファブレンド処理では、

  1. 入出力メモリともアライメントが揃っている場合
  2. 入出力メモリともアライメントから同じだけずれている場合
  3. 入力、出力メモリのアライメントのずれ量が違う場合

の3通りに分けてコードを実装しました。

1の場合は、前回と同様のコードで処理します。
2の場合は、ずれてる分を処理して入出力ともアライメントを合わせた状態にして、1と同じように処理します。
3の場合は、ずれてる分をシフト演算を使用してずれを合わせる処理をいれて、
ロード・ストア命令がアライメントが合った状態で実行されるようにします。

計測方法

32bit,64bit向けに2通りに実行ファイルを作成、それぞれについて

  1. SSEを使わない処理
  2. _mm_loadu_si128でメモリ読み込み、_mm_storeu_si128でメモリ書き込み
  3. _mm_load_si128でメモリ読み込み、_mm_store_si128でメモリ書き込み
  4. _mm_load_si128でメモリ読み込み、_mm_stream_si128でメモリ書き込み

の4通りの処理の処理速度を計測する。
前回までは間違えて浮動小数点用の_mm_loadu_ps等を使っていたので、今回は_mm_loadu_si128等を使います。

  • チャンネルサイズ8bit 5700x5700BGR画像を2枚読み込み、アルファ値を指定してアルファブレンドを行う。
  • 画像の保存、読み込みは …

Continue reading

SSE用いたアルファブレンドの高速化3 アルファチャンネルをもつ画像同士のアルファブレンド

Posted on Mon 28 November 2011 in ペイントツール

↓の続き
http://d.hatena.ne.jp/hiroki0/20090914/1252931917
http://d.hatena.ne.jp/hiroki0/20100320/1269074009

使用するアルファブレンド計算式

チャンネルサイズ8bitとして
a_{dst} = 255 - (255 - a_{over})(255 - a_{under}) /
255
d_{dst} = (d_{over} a_{over} + (d_{under} a_{under} (255 -
a_{over}) / 255) /
a_{dst}

ここで、aはアルファ値、dは画素値である。

この計算式をコードにすると以下のようになる。
255による除算は、高速化のために256の除算に変更しシフト演算で処理している。
また、計算量を減らすためにアルファ値により分岐を行なっている。
今回は、この処理をSSEにより実装して計測を行う。

if ((over_pix->a == 255) || (under_pix->a == 0)) {
    dst_pix->value = over_pix->value;
} else if (over_pix->a == 0) {
    dst_pix->value = under_pix->value;
} else …

Continue reading

TI-Android-Froyo-DevKit-V2.2のビルドでinternal_install_SDK.expが見つからないとエラーが出るときの対処

Posted on Mon 06 June 2011 in Android

./internal_install_SDK.exp: コマンドが見つかりませんでした

とエラーがでる場合は次のようにして、expectパッケージをインストールする。

sudo apt-get install expect

wintabから傾きを取得するコード

Posted on Fri 24 December 2010 in ペイントツール

f:id:hiroki0:20101225035447j:image Azimuthがペンとタブレットの前後方向の軸がなす角、
Altitudeがペンとタブレット平面がなす角です。
ペンが逆さまのときAltitudeは負の値になります。
矢印が向いてるほうがタブレットの上側を表しています。

まず、取得するデータ型に傾きを定義するために、PK_ORIENTATIONをPACKETDATAに含めます。

#include <wintab.h>
#define PACKETDATA (PK_CURSOR | PK_X | PK_Y | PK_Z | PK_BUTTONS | PK_NORMAL_PRESSURE | PK_ORIENTATION)
#define PACKETMODE PK_BUTTONS
#include <pktdef.h>

タブレットからのデータを正規化するために、
WTInfo関数を呼び出して、AzimuthとAltitudeの最大値を調べています。

typedef UINT (API *WTInfo_)( UINT wCategory, UINT nIndex, LPVOID lpOutput );

HMODULE dll = LoadLibrary("wintab32.dll");
WTInfo_ wtInfo = (WTInfo_)GetProcAddress(dll, "WTInfoA");

double …

Continue reading

CPUID命令のIntrinsic関数を使用して、SSEに対応しているか調べるコード

Posted on Sat 06 November 2010 in Windows

↓のコードをIntrinsic関数を使用して書き換えてみます。

CPUID命令を使用して、SSEに対応しているか調べるコード

__cpuid()

CPUID命令のIntrinsic関数は、

void __cpuid(
int CPUInfo[4],
int InfoType
);

です。
InfoTypeで数値を指定して、対応した情報がCPUInfoに入ります。
今回はSSEの対応情報を調べるので、InfoTypeには 1を入れます。

先頭をbit0として、次のように対応情報が格納され、
対応している場合はbitが1になっています。

  • CPUInfo[3] bit23 MMX
  • CPUInfo[3] bit25 SSE
  • CPUInfo[3] bit26 SSE2
  • CPUInfo[2] bit0 SSE3
  • CPUInfo[2] bit19 SSE4.1
  • CPUInfo[2] bit20 SSE4.2 :::

コード

#include <intrin …

Continue reading

CUDA VS Wizardで作ったプロジェクトにインクルードパスを追加する

Posted on Sun 20 June 2010 in CUDA

  • プロジェクトのプロパティを開く
  • CUDA Build Ruleを選択
  • General選択
  • Additional Include Directoriesにパスを追加

UbuntuにMozcのインストール

Posted on Sun 06 June 2010 in Linux

Google日本語入力のオープンソース版であるMozcが公開されています。
Webデータから抽出された語嚢データは含まれていないようです。
http://code.google.com/p/mozc/

このMozcのUbuntu用の野良パッケージを作成してくれている方がいたのでインストールしてみました。
Mozc - Google日本語入力のオープンソース版 - 憩いの場【Linux/ソフト紹介】

インストール方法は、すべて↑の通り。
Anthyは使いにくいなぁ、と思っていたので助かりました。


まるごと吸い出したHDDイメージをマウントする

Posted on Fri 09 April 2010 in サーバー管理

ddなどでHDD全体をイメージファイルにした場合は、そのままマウントすることが出来ないので以下の手順でマウントを行う。

まずは、HDDディスクイメージをループバックデバイスに結びつける。

$ sudo losetup /dev/loop0 hdd.img

次に、fdiskでパーティション構成を出力。

$ sudo fdisk /dev/loop0 -lu
Disk /dev/loop0: 4034 MB, 4034838528 bytes
128 heads, 63 sectors/track, 977 cylinders, total 7880544 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0x001c2022
Device Boot      Start         End      Blocks   Id …

Continue reading

Ubuntuにmrtgをインストールする。

Posted on Sat 03 April 2010 in サーバー管理

mrtgは、cronで定期的に実行され snmpから機器の状態を取得して、HTML形式のグラフに加工し出力するツールです。
Ubuntu serverをインストールしてあるマシンにmrtgをインストールしてグラフ表示出来るようにします。

パッケージのインストール

 $ sudo apt-get install snmp snmpd mrtg

snmpd.confの編集

コミュニティ名 privateに設定します。

$ sudo vi /etc/snmp/snmpd.conf

-com2sec paranoid default public
+#com2sec paranoid default public
+com2sec local localhost private
+group MyRWGroup any local

また、ディスク使用量を監視するために、以下のコメントアウトを外します。

-#disk / 10000
+disk / 10000

snmpdデーモンを再起動させます。

 $ sudo /etc/init …

Continue reading