OpenCASCADE 6.9.0 を Debian でビルド

先月の12日にリリースされた Open CASCADE の 6.9.0 をビルドしました。公式のロードマップでは 6.x 系列は 6.8 が最後で、次は 7.0 になるとの話だったはずですが、何だかんだで 6.9 がリリースされた模様

v6.9 のリリースノートを読んではいましたが、ここのところ忙しくて対応ができなかったので出遅れてしまいました。

ここ数バージョンは、ビルドの仕方マニュアルがいろいろと整備されてきて、時代に合わせてなのか、ビルド環境ごとの Markdown なドキュメントも付属しています。このブログで改めて紹介する必要性もあまりなくなってきました。詳しい内容は公式ドキュメントに任せるとして、要点だけかい摘まんで紹介したいと思います。

公式ドキュメンテーション

v6.9.0 の内容は次のドキュメントで網羅されています。

v6.9.0 のリファレンスマニュアルは、ソースコード tar ボールや Windows インストーラー内に同梱されています。最も最新バージョン(開発版)のリファレンスマニュアルであればこちらで参照できます。

v6.9.0 リリースの要点

モデリング・アルゴリズム

ファジー ブール演算

これまでのバージョンでは、ソリッドモデル等で行うブール演算時に対象と対象がちょうど同一の位置にある面や線を共有して存在していた場合、意図した演算結果にならない事が多くありました。意図した結果にならない場合はまだ良かったんですが、いつまで経っても計算が帰ってこない、または例外を吐いてお亡くなりになるケースもありました。この点が改善されているようです。

複数の引数を取るブール演算

これまでのブール演算では TopoDS_Shape を二つ用いて、Fuse, Common, Cut 等の演算を実行していました。あんまり詳しく見てませんが、同時に複数の TopoDS_Shape を演算させることができるようになるようです。これまで数回の処理で書いていたものが一度にできるわけですが、複数のソリッド群の一つに reverse させたソリッドを混ぜて Common に投げて、結果的にその部分だけは Cut させる動作にするなど、より「ブーリアン」っぽい演算としてコーディングできるようになりそうです。

ビジュアライゼーション

選択処理を再設計して、より良いパフォーマンスに

OCCT のビジュアライゼーションは長いことほったらかしになっていた様子で、ちょっと貧弱でした。これは、あくまでも OCCT は三次元幾何演算とトポロジックな形状の演算がメインであり、代替ライブラリーを用いて解決できるビジュアライゼーションは二の次でも大丈夫!という背景もあります。 実際、OCCT を採用している有名なオープンソース三次元 CAD ソフトの FreeCAD は、OCCT 提供のビジュアライゼーションを使用せずに別のライブラリで三次元ビューを提供しています。 ただ、ここ数バージョンでは、前述の幾何を扱うことろがだいぶ安定してきたのか、二の次だったビジュライゼーションが次々と強化されており、パフォーマンスも改善しています。まだ実験的な印象ではあるものの、レイトレーシングレンダリングの採用、GLSLシェーダが読み込めるようになっていることなど、単なる計算ライブラリから本当に「CAD」として必要な機能の強化が見てとれます。 後述する VTK の採用も注目すべき点です。

OpenGL ES 2.0 互換

ビジュアライゼーションの改良の特記すべきもう一つの点は、iOS, Android などのモバイル端末への対応です。OpenGL ES はモバイル端末向けの OpenGL のサブセットです。OCCT の幾何ライブラリの部分は、早い段階から Android にも移植されて動作していましたが、ビジュアライゼーションはそのままではビルドできませんでした。ES 互換となることにより、これらの環境へもシームレスな移植が可能となりそうです。

シェイプを表示する際の三角形メッシュ化の制御

コンテキストにシェイプを追加する際、これまでは必要に応じて自動的にシェイプの描画データである三角形メッシュを内部で生成していました。これを外側から無効にするオプションが導入されたようです。 形状の変形はなく、大量のシェイプを回転させるだけでも再三角形メッシュ化が走って表示速度が落ちていましたが、それらを動的に制御することができそうです。(※回転も行列演算している意味では変形(トランスフォーメーション)ですが、自由曲面の式まで遡って、形状の三角形メッシュを再構築する必要すらない場合も往々にあります)

その他

Intel TBB ライブラリを使わない並列処理のサポート

こちらも詳しく追っていませんが、自前で並列処理を行う環境が整いつつあるようです。

サンプルに AndroidQt, JniViewer for Android が追加

Android 環境のサンプルも充実してきました。

JniViewer

JniViewer for Android

AndroidQt

GUI は QML を使って書いてあるみたいです。本当に WPF/.NET Framework なんて使ってる場合じゃないです。

AndroidQt

その他のサンプルに、Qtデスクトップ版、MFC、C# があります。C# では WPF ベースのものと System.Windows.Forms 版があり、今のご時世でいうと半ばどうでもいいですが、Direct3D デモも追加されています。

v6.9.0 の全体的な感想

幾何演算部分の改良は喜ばしい限りで、ビジュアライゼーションの強化も頑張ってほしいところです。ようやくモバイル端末のサポートも視野に入れてきているようですが、個人的にはいっそのこと三次元ビューアは WebGL 環境へシフトしていくのもアリなんじゃないかなぁと考えています。OCCT をサーバ上で並列処理させて、クライアントの WWW ブラウザ上で表現する…素晴しいじゃないですか。最近は NW.js (Node.js + Webkit)のようなツールキットも存在しますので、ライトウェイトなビューアーからワークステーションで動かす CAD まで環境に依存しないビジュアライゼーション機能になっていけばいいな、と思っています。え?お前が Context や Viewer, View を JavaScript で再実装しろって?それが仕事になればいいんだけどなぁ…;)

v.6.9.0 のビルド

ビルド方法は次のドキュメントに詳しく書いてあります。

なお、このドキュメントはソースコード tar ボールを解凍して生成されるdoxディレクトリ以下に markdown ファイルとして収録されています。(逆に言うと、上記の HTML はそれらのファイルを doxygen にかけたものと思います。)

ビルド環境

OCCT のビルド環境もかなり充実してきており、以前のようにチューニングしながらあれやこれやする必要もほとんどなくなりました。公式サポートしているのは次の環境です。

  • Automake
  • CMake
  • CMake + ADT (Android SDK)
  • Code::Blocks (Mac OSX)
  • Xcode (Mac OSX)
  • Microsoft Visual C++ (Windows)

また、パフォーマンスチューニングレポートでは Linux 版の Clang/LLVM でも検証されているようです。

今回は一番馴染みがある Automake でいきたいと思います。

ビルド手順

作業ディレクトリに入り、tar ボールを落としてきます。ソースコードは前バージョンまではユーザー登録&ログインしないとアクセスできなかった気がしますが、今回から下記の URL で落とせるようです。なお、git での clone は登録が必須です。

cd /tmp
wget http://files.opencascade.com/OCCT/OCC_6.9.0_release/opencascade-6.9.0.tgz

解凍してディレクトリにはいります。

tar zxvf opencascade-6.9.0.tgz
cd opencascade-6.9.0/

configue をビルドして configure します。オプションについては後述します。

./build_configure
./configure -prefix=/opt/occ690 \
-with-vtk-include=/usr/include/vtk-6.1 \
-with-vtk-library=/usr/lib/i386-linux-gnu/

make して install します。

sudo make -j2 install

とりあえずこれだけです。便利。

貧弱な自宅サーバ(Debian GNU/Linux、32bit環境、Intel Atom)では、make で

real    183m57.121s
user    336m24.168s
sys     16m36.896s

となりました。

configue オプション

-prefix=

最終的にビルドしたファイルをインストールする場所です。自分は /opt/occ690 に指定しています。

-with--include=, -with--library=

ヘッダのインクルードパスとライブラリパスを追記しています。VTK が見えてなかったようなので、明示的に指定しました。

その他のオプションはこちらを参考にしてください。

ビルド時のテクニック

configure では、ビルドする環境にインストールされているライブラリの有無によって OCCT のモジュールとよばれるライブラリ群の Makefile を生成します。

モジュール > ツールキット > パッケージ > クラスや列挙型など

OCCT は上記のように階層構造を持ったライブラリです。ツールキットの部分が共有ライブラリファイル(.so)に当たります。Windows ではダイナミックリンクライブラリ(.dll)になります。モジュールはそれらをまとめて用途別にグループにしたものだと思ってください。

モジュールには次のものがあります。

  • FoundationClasses … 共通関数などを提供
  • ModelingData … 幾何形状をデータとして表現する機能
  • ModelingAlgorithms … 幾何形状を構築する機能
  • Visualization … 幾何形状を画面に描画する機能
  • ApplicationFramework … OCCT を使ったアプリのための有用な機能
  • DataExchange … 幾何データファイルのサポート(IGES,STEP,STLなど)
  • Draw … テスト環境

ざっくりと説明すると上に行くほど依存関係が少なくてすみます。詳細な依存関係はリファレンスマニュアルの図のとおりです。

occt modules

さらに、個々のモジュール内のツールキットの中で依存関係があります。なお、IGES などのデータファイルをサポートするには、GUI が必要がない場合でもビジュアライゼーションやアプリケーションフレームワークの各ツールキットを全て背負い込まなければならないかというと、実はそうではありません。具体的にはモジュール同士の依存関係の奥にはツールキット同士の依存関係があり、それを満たしていればこの図の限りではありません。今のところ、モジュールを越えた関係図はないので、リファレンスマニュアルを見て何が必要なのかを調べる必要があります。

さて、ビジュアライゼーション以下のモジュールは、さらに多くの別の人(サードパーティ)が開発しているグラフィック系のライブラリに依存しています。

そのため、グラフィック系のライブラリがない環境で configue すると、ビジュアライゼーション以下のモジュールが無効になった Makefile が生成されます。

configure の出力に各モジュール名と Yes/No といった表示が出力されるので、それでモジュールが有効になっているか無効になっているか、無効の場合はどのライブラリが足りていないのかを表示してくれます。以下に私の環境の configure 出力を示します。

3rdparty mandatory products       
---------------------------------
freetype      : yes 
tcltk         : yes 

3rdparty optional products       
---------------------------------
gl2ps         : no (--with-gl2ps=DIR option was not defined)
freeimage     : no (--with-freeimage=DIR option was not defined)
tbb includes  : no (--with-tbb-include=DIR option was not defined)
tbb libraries : no (--with-tbb-library=DIR option was not defined)
opencl        : no 
qt            : no (--with-qt=DIR option was not defined)
vtk           : yes 

Component                   Build
--------------------------  -----
FoundationClasses           yes 
ModelingData                yes 
ModelingAlgorithms          yes 
Visualization               yes 
ApplicationFramework        yes 
DataExchange                yes 
Draw                        yes 

「3rdparty mandatory products」は必須ライブラリ、「optional」は指定があったら使うライブラリです。必要なライブラリとそのバージョンは、以下にまとめてあります。

Open CASCADE Technology: Overview

Debian GNU/Linux jessie 32bit 版では、すべてのサードパーティ・ライブラリを標準リポジトリからインストールすることができました。(ソースコードの取得とビルドは不要)

また、テスト環境である Draw や Qt のサンプルプロジェクトをビルドする必要がなければ、 Tcl/Tk や Qt のインストールは必要ありません。 上記の「mondatory products」に Tcl/Tk が入っているのは、すべてのモジュールをビルドする際に必須、という意味だと思います。

siren をビルド

OCCT を使った siren というソフトを作ってます。OCCT が提供する三次元幾何演算機能を Ruby で簡単に記述することができ、ちょっとした演算なら手軽にすることができます。

上記でビルドした OCCT 6.9.0 を使って siren の最新リビジョン(OCCT6.8.0ベースで記述)をビルドし直してみると、あっけなくビルドが通りました。クラス名が変更されたり、siren で使っている機能が変更されることがなかったようです。

ひとまず安心しました。


NEC Life Touch NOTE に Debian GNU/Linux を導入

NECのAndroid端末「Life Touch NOTE」にDebian GNU/Linux をインストールした時の覚え書きです。

root 権限の奪還

ホストマシンにAndroid SDKのインストールしたら、USBでホストとLTNをつないで、以下の手順でroot権限を取り返します。

まず、SuperOneClickのZIPをダウンロードし、適当な場所に解凍しておきます。配布物はWindows向けのアーカイブですが、気にせず解凍します。unzip後のディレクトリに移った後、

[bash]
adb push Exploits/psneuter /data/local/tmp
adb push Dependencies/busybox /data/local/tmp
adb push Root/su-v1 /data/local/tmp
adb push Root/su-v2 /data/local/tmp
[/bash]

と、必要そうなファイルをLTNの/data/local/tmpに転送します。次に、LTNに接続し、転送したものに実行権限を与えてからpsneuterを実行します。

[bash]
adb shell
(adb) cd /data/local/tmp
(adb) chmod 755 *
(adb) ./psneuter
[/bash]

上手くいけば勝手に切断されるので、接続しなおします。接続後、プロンプトが「#」になりスーパーユーザになっていることを確認してください。

[bash]
adb shell
[/bash]

次にデフォルトのPATHが設定されている位置に busybox をインストールします。

[bash]
(adb) set

/system/xbin がパスに登録されているが、このディレクトリは存在しない。

カスタムコマンドを設置するにはもってこい。

(adb) df

/system は /dev/block/mmcblk3p6 らしい。

(adb) mount -o remount,rw /dev/block/mmcblk3p6 /system
(adb) mkdir /system/xbin
(adb) chmod 755 /system/xbin
(adb) cd /system/xbin

cp コマンドがなかったので、busybox のアプレットで busybox をコピーする

(adb) /data/local/busybox cp /data/local/busybox .

リンクを展開

(adb) ./busybox –install .
[/bash]

ConnectBot で localhost 接続して、busybox が使える状態になっているか確認します。

[bash]
$ which wget
/system/xbin/wget
$ dc
1 2 + p
3
$ vi
[/bash]

よし、いい具合。これでroot権限が使え、かつ自由に作業する為の足がかりが整いました。

2. Debian GNU/Linux の導入

59414d41さんのハックの賜物であるLTN用Debian(Lenny)配布ページに従ってインストールします。ページを見ると詳しい事が書いてありますが、ここでは要点だけかいつまんで書いておきます。

まず、ホストマシンにSDカードを差して、起動用SDカードを作成します。ホストマシン上で次のコマンドを実行しました。

[bash]
mkdir backup
cp -r /mnt/sdcard/* backup/
su # ←ここからroot権限
mkfs.ext3 /dev/mmcblk0p1
mount -t ext3 -o rw /mnt/sdcard /dev/mmcblk0p1
cd /mnt/sdcard
wget http://205.196.121.246/q4mgjdew5pag/0rnq7nc7lc1d0uq/ltna-debian-010.tar.gz
tar xfpz ltna-debian-010.tar.gz
[/bash]

この時、カレントディレクトリである/mnt/sdcardには次のようなファイルが詰まっています。

busybox … 作業用 busybox。
ltna-debian-010 tar gz … 落としてきたアーカイブ。解凍したのでもう不要。
ltna-debian-rootfs cpio gz … SD カードに展開する予定のルート・ファイルシステム。
recovery2 img … init を書き換えた改造リカバリ領域データ。
setup_recovery sh … リカバリ領域のバックアップと上書きをするスクリプト。
setup_rootfs sh … 必要ファイルをコピーし、ルート・ファイルシステムを展開するスクリプト。
sh … 作業用シェル。

アンマウントしてホストのrootを抜けます。

[bash]
cd
umount /mnt/sdcard
exit
[/bash]

SD カードをホストマシンから LTN に差し替え、USB デバッグ接続します。SDカードを/sdcardにマウントして中を見てみると、準備したファイル群が見えると思います。それらを実行します。

[bash]
(ホストから)$ adb shell

root権限

mount -t ext3 /dev/block/mmcblk2p1 /sdcard
cd /sdcard
./setup_rootfs.sh ….. ルートファイルシステムを SD カード内に展開。
extract…
copy wpa_supplicant.conf
copy /system/lib/BCM4329B1.hcd
copy bcm4329 files…
copy /system/lib/hw/wlan/usibcm4329-RC218-nvram.txt
debian rootfs ready.
adb# ./setup_recovery.sh … リカバリ領域のバックアップと改造データでの上書き。
Backup recovery…
New recovery ready.
cp recovery_org.img /data/local/tmp …. オリジナルのリカバリ領域を移しておく。
cd /
umount /sdcard
exit
[/bash]

LTNで起動中の Android を普通に終了します。電源ボタンから「電源を切る」でOKです。
完全に電源が切れたことを確認し、HOMEボタンを押しながら電源を投入します。これにより、リカバリモードで起動します。NECのロゴが消えるまで、HOMEボタンを押しておけば確実です。

[bash]
Login: root
Password: (root)
passwd
ifup eth0
ping www.yahoo.co.jp .. 外とつながってるか調べる。
apt-get update …….. うちでは失敗したので、リポジトリを修正する。
vi /etc/apt/source.list
– deb http://ftp.ja.debian.org/debian lenny main non-free contrib
+ deb http://ftp2.ja.debian.org/debian lenny main non-free contrib
apt-get update …….. 今度はうまくいった。
apt-get install aptitude
aptitude install bluez-utils ntp ssh vim
aptitude install x-window-system ttf-mona ttf-kochi-gothic ttf-kochi-mincho
aptitude install xserver-xorg-input-evtouch rxvt-unicode ratpoison gdm
cp /opt/ltna/xorg.conf /etc/X11/
echo ‘inet:x:3003:user’ >> /etc/group
[/bash]

ここまで来て、startxとしたいところを我慢して、念の為再起動すると、Android が立ち上がりました。しまった!と思って、ホストマシンと繋ぎ直し、setup_recovery.sh を実行しなおしました。電源を一度切り、HOMEボタンを押しながら電源投入すると、Linux の起動メッセージが流れた後、嬉しい事に GDM がお出迎えしてくれました。

その後、

[bash]aptitude install locales && dpkg-reconfigure locales[/bash]

で日本語化を行いました。

2.1. SD カードの入れ替え

2.2. バッテリー残量を得るスクリプト

モバイル WiFi + Debian on LTN 環境で、バッテリー残量が取れないと不便だった。インストールしてみた acpi では上手く取れなかったので、簡単なスクリプトを書いてみました。もっと上手い方法があるかもしれませんが、これで十分かな。

[bash]

!/bin/sh

dev="/sys/devices/nvec/nvec_battery/power_supply/battery"
[ ! -e $device ] && exit 1

stat=$(cat $dev/status)

emp=$(cat $dev/charge_empty)
ful=$(cat $dev/charge_full)
now=$(cat $dev/charge_now)

par=$(expr $now * 100 / $(expr $ful – $emp))
[ $par -gt 100 ] && par=100

echo $par% $stat
[/bash]

実行すると、残量のパーセンテージと電源の状態(充電中か、など)が表示されます。

Android SDK の導入

Ubuntu 11.10 に NEC LifeTouch NOTE をつないで、いじくる時に操作したメモです。基本的には、以下の手順で OK なはず。

  1. android-sdk_r*-linux.tgz のダウンロード、解凍。
  2. tools/android update sdk –no-ui の実行。

下記では、Java SDK をインストールしていなかったので、その導入からしています。

まず、都合がいい場所に作業ディレクトリを設け、バイナリを落としてきます。

[bash]
mkdir android
cd android
wget http://dl.google.com/android/android-sdk_r16-linux.tgz
tar xvf android-sdk_r16-linux.tgz
cd android-sdk-linux
[/bash]

解凍して出てきたSDK Readme.txtの中にupdate sdkせよ、との記述があるので、それに従います。

[bash]
tools/android update sdk –no-ui

Java がないよ、と怒られる

[/bash]

Java 環境をインストールしていなかったので、ここからJavaインストール・フェイズ。

[bash]
sudo aptitude update
sudo aptitude search java | less

OpenJDK や gcj だけで、Sun 製の Java がない。

Ubuntu11.10 用のリポジトリを追加してやる。

sudo add-apt-repository ppa:ferramroberto/java
sudo apt-get update
sudo apt-get install sun-java6-jdk

デフォルトの Java 環境設定

sudo update-alternatives –config java
[/bash]

気を取りなおして、再度SDKのインストーラを実行します。

[bash]
tools/android update sdk –no-ui
[/bash]

Android4.0 や 3.x 向け環境がわさわさ入ってしまう。うっわ要らねえ、うち 2.2 と 1.6 しか持ってないのに・・・と思ってマニュアルを読んでみると、ターゲットバージョンを指定するオプションがある模様です。
次に、Android 端末をホストに USB 接続します。

[bash]
dmesg # 反応あり。
adb devices # デバイスが表示された。
adb shell # つながったー。
[/bash]

拍子抜けするほど、あっさりつながりました。
adb を使いたいだけなのに、Java SDK をごっそり入れてしまいました。ちゃんと調べれば、必要なものだけ入れることができたのかもしれません。

NEC LifeTouch NOTE with SKK for Android IS01 ed. その2

NEC LifeTouch NOTE に、SHARP IS01 のハードウェアキーボード向けにカスタマイズされた SKK for Android をインストールし使ってみた感想を書きましたが、作者の ray_m さんにコメントを頂き、修正を施したとの事だったので、早速使ってみました。

修正がほどこされた点をかいつまんで紹介します。

  • Shift キー押下しっぱなしでの連続入力に対応。修正前のバージョンでは、「入れる」と入力する際、タイプでは「IReru」となりますが、I と R を Shift キーを押しっぱなしにして連続で入力する事が出来ませんでした。( Shift+i、Shift+r の間で、Shift キーを”離す”必要があった。) ray_m さんによると、IS01 のタイプ方法をベースに作成されていた為という事でそれを受けてすぐに修正して頂きました。LifeTouch NOTE は持ってらっしゃらないようなのに、迅速に修正して頂けるなんて頭が下がるばかりです。

IS01 の特殊キーは、同時押しではなく、キーを押した次のキーに作用するように出来ています。 これは QWERTY ハードウェアキーボードを搭載していても、サイズ自体が小さい為、同時押しがしづらい物理的な問題に対処するものだと考えられます。例えば、IS01 で大文字の ‘A’ を入力する場合、Shift キーを押した上で、( 押しっぱなしにしても、離してしまっても、Shift 押下状態が続くので、その直後に ) a キーを押す事によって入力する事が出来ます。自分の IS01 は電話専用機になってしまっているので、SKK を導入する必要はないですが、LifeTouch NOTE や Dynabook AZ のようなネットブックに匹敵するサイズの QWERTY キーボードを搭載している Android 端末上では、SKKer にとって、キラーアプリになるくらい外せないアプリになっています。

  • z キーでの記号入力に対応。カタカナ入力モードのトグルキーである q キーや、半角英数モードにする l キーは以前から利用出来ていましたが、日本語でよく利用する記号を 2 タイプで呼び出す z キー機能がありませんでした。これ自体はクリティカルに SKK の使い勝手を落とすわけではないのですが、新しいバージョンではサポートされるようになりました。これで、『』~・…‥←↓↑→ といった記号を 2 タイプで入力する事が出来ます。
  • 一時的に半角英数を入力する際、▽の表示に対応。ちょっと細かな話ですが、/ キーを押して一時的に半角英数文字をタイプする際に、最初の 1 文字を入力するまで、SKK による入力中である事を示す▽が出てきませんでした。最新版では、これもちゃんと出ている模様で、/ キーを押した状態で「えーと、スペルどうだっけ」と一瞬ディスプレイから目を離した時に、再度、/ キーを押してしまって「▽/」という入力状態にならなくなりました。
  • 通常の Android 端末にはまず付いていないであろう Delete キーは、LifeTouch NOTE 専用のテキストエディタである「ライフノート」では、IM がオンの状態でも使う事が出来ます。コピー C-c、ペースト C-v、カット C-x、アンドゥ C-z、全選択 C-a などのライフノート・ショートカットキーを使うにはは、IM をオフにする必要があります。

前回の記事は、SKK for Android をインストールしたその夜に使い勝手を調べながら書いたものですが、それから 1 ヶ月以上使ってみて、ますます満足しています。残すは変換候補の表示位置のみといったところでしょうか。

LifeTouch NOTE は、せっかく左にある Menu キー( IBM-PC キーボードで言う CapsLock の位置 )を Ctrl キーに変更する設定項目まで搭載してくれているのに、Android 自体の仕様が全体的に Ctrl キーをサポートしていないのが残念な限りです。自分に課題を出すとすれば、確定 C-j やキャンセル C-g を多用している SKKer としても、”C” になるキーを指定させてそれらをサポートしたいところです。

2011/09/23 追記

ray_m さんから新しいバージョン 1.4 のご連絡があり,早速試してみると,変換候補の表示位置がずれてしまう現象が解消されたようです.

また,上の記事には書いていませんでしたが x キーによる小文字(っ,ぁ,ぃ,ぅ …など)にも今回のバージョンから対応しているようで,使用感はほとんど Emacs や SKKIME と変わらなくなっています.

さらに SKK 使いでフルキーボードを搭載している Android 端末ユーザには,離せないアプリになっていると思います.

※ 2020/07/02 度重なるブログ移転・ブログシステムのアップデートにより崩れた記事を校正。

Cで書いてクロスコンパイルしたバイナリをAndroidで実行する

備忘録です。ホストOSは x86 な WIndowsXP で、Android SDK を導入済み、Android 端末とUSB 接続で通信ができる状態です。

続きを読む Cで書いてクロスコンパイルしたバイナリをAndroidで実行する