A certain engineer "COMPLEX"

開発メモ125 Android NDKをWindowsで使ってみる

Introduction


Xamarinを再び勉強しはじめています。
Nativeのライブラリを使いたいので、試行錯誤中です。

Get Started!!


Androidで動作するNativeライブラリを作成するには、Android NDK (Native Development Kit)が必要です。
最初自分はg++でできると思い込んで、それをAndroidのEmulatorに配置していたのですが、それは間違っていました(白目)

なので、NDKの使い方から。

Download

公式のDownloadから入手します。
Windows、Mac、Linux用が提供されています。今回はWindows版を。

ダウンロードしたら、適当な場所に展開し、パスを通しておきます。
が、パスに空白が入ると動かないので注意。

パスを通したら

のように表示されれあば準備完了です。

Build

コンパイル環境ができましたので、ビルドを行います。

ビルドについては、

Android NDK でデフォルトディレクトリを jni 以外にする方法
主にプログラミングに関するブログ。Android と Java に関することが多いが、C, C++, C#, Javascript 等も。

が非常に参考になりました。

ソースは下記です。

calc.cpp

calc.h

export.h

次にビルドする際は、CMakeLists.txtのようなビルドの手順を示した

  • Android.mk
  • Application.mk

ファイルを用意します。

Application.mk

Android.mk

これらを下記のような構成で展開します。

ここで、Application.mkにカレントディレクトリを移動して、下記のコマンドを実行することで、ライブラリが生成されます。

libsフォルダにアーキテクチャ毎にライブラリが生成されます。

開発メモ124 64bitのRHELで32bitでソースをビルドする

Introduction


備忘録。
簡単にできると思ったんですが、手こずったので....

何をやっても

こんな感じで、お手上げでした。

How?


下の記事に答えが書いてありました。

「C」64bit のGCC で 32bit アプリケーションを作成する環境構築 ( CentOS 6.4 ) - プログラム日記
64bit のGCC で 32bit アプリケーションを作成する環境構築のメモです。まぁ、やることとしては、以下のページに記載の通りに glibc-devel.i686 glibc-devel libstdc++-...

で良かったです。

開発メモ123 macOS 10.13 High Sierra にアップデートしたらxcrun: error: invalid active developer pathエラー

Introduction


掲題の通り。ただの備忘録です。
何でアップデートしただけで既存のコマンドが動かないんですかねぇ(白目)

How to resolve


StackExchangeに回答がありました。

macOS Sierra: invalid active developer path
After upgrading to macOS Sierra, I tried to run git from Terminal but it kept giving me the following error:xcrun: error: invalid active developer path (/Lib...

下記のダイアログが表示されるのでインストールを選択。

同意するを選択。

ダウンロードが始まります。

インストールが完了。

これで既存のコマンドが動くようになります。

開発メモ その122 TensorFlowをCUDA 9.1 + CuDNN 7 on Windowsでビルドする

Introduction


公式バイナリでもよいのですが、自分でビルドしたのでメモです。
CMakeでビルドします。
なお、Visual Studio 2015が必要です。2017ではビルドできませんでした。
あと、ビルドにすごい時間がかかります。

Preparation


まず必要なものをダウンロードして、インストールまたは展開します。

CMake

PATHを通しておきます。

CUDA 9.1

CUDA Toolkitから環境に適応したインストーラをダウンロードします。

CuDNN 7

NVIDIA cuDNNから環境に適応したバイナリをダウンロードします。
なおダウンロードには登録が必要です。
また、C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1に展開する必要はありません。
自由にディレクトリに展開しておくことができます。

Python 3.6

自分の環境では、Visual Studio 2017でインストールしたAnacondaが入っていますので、これでPythonに対応します。

SWIGWIN

公式ページのDownloadから入手します。
SWIGとSWIGWINがあるので間違いないように。

git

これもPATHが通っている必要があります。
Git for Windowsをインストールしておくのが無難です。

Build


まず、tensorflow\contrib\cmake\CMakeLists.txt を開きます。
40行目を

このように変更します。
これで準備は完了です。
あとは、tensorflow\contrib\cmakeに移動してCMakeをたたくだけです。
少しコマンドが長いですが...

ここでビルド前に生成されるプロジェクトファイルに手を加えます。
具体的には、ビルド中に生成されるlibファイルをリンクしているプロジェクトがあるのですが、そのリンクパスが間違っているため、ビルドが途中で停止します。
下記に情報がありました。

【windows】AVX2を有効にしてTensorflowをビルドする(GPUなし) - Qiita
# 概要タイトルの通りです。widnows環境でcmakeの方でtensorflowをビルドします。その時にいろいろと小技が必要だったので、その内容を備忘録的に書いておきます。# 注...

修正対象は下記のプロジェクトファイル。

  • _beam_search_ops.vcxproj
  • _gru_ops.vcxproj
  • _lstm_ops.vcxproj
  • _nearest_neighbor_ops.vcxproj
  • _periodic_resample_op.vcxproj

修正内容は、

になります。

修正後は下記のコマンドでビルドを開始します。

これでビルドが通ります。
が、前にも書いたように、すごく時間がかかります。
i7 8700K32GBの環境でも、2時間から3時間もビルドに時間がかかりました...

上記の設定でビルドすると、Releaseフォルダに、

  • tensorflow.dll
  • tensorflow.lib
  • tensorflow_static.lib

を含む大量のバイナリが生成されます。

Why using Visual Studio 2015?

2017を使うと下記のエラーが出てビルドがうまくいきませんでした。

調べたところ、下記の記事を見つけました。

tensorflow 1.3,1.4,1.5,1.6 DLL load failed with CUDA 9.1, CUDnn-7.05, Windows 10 · Issue #16939 · tensorflow/tensorflow
import tensorflow strack trace> py lib\_learn\tensorflow\versions\versiontest.pyTraceback (most recent call last): File "lib/tensorflow_gpu_...

この中で、

というVisual Studio 2017 15.5でCUDAが停止する、というNvidiaのコミュニティへのリンクがあります。
詳細は続報待ちですが、2015に変えたら動いたのでそういうものだと捉えておきます。

Why specify Numpy dir?

下記のエラーが出てビルドがうまくいきませんでした。

CMakeList.txtを解析していくと、NUMPY_INCLUDE_DIR変数を参照していたので、CMakeの引数で指定することで明示的に指定したわけです。

開発メモ その121 OSSの資産管理WebアプリSnipe-ITをDockerで使う

Introduction


IT会社にいると、大なり小なり資産の管理作業が発生します。
自分のグループだけでもかなりの資産がありますが、それをExcelで管理していて辛い状況です。
そんな中、資産管理のWebアプリでよさげなアプリが、OSSかつDockerで提供していたの導入してみました。
ちなみに、Windows 10でのDocker for Windows環境です。

Get started!!


インストール手順は下記に書いてありますが、ちょっと分かりにくいです。

Docker
Docker is a very popular software containerization platform. While it's not difficult to use, it can be a little confusing for folks who are less famili...

1. 設定ファイルの用意

下記のようなテキストファイルを用意します。

このファイルのパスを、ここではD:\VirtualMachines\Docker\volume\snipe-it\env.txtとして保存します。任意の場所でよいです。

2. データベースコンテナの用意

次に、データの保存先であるデータベースのコンテナを用意します。
データベースのファイルはホスト側に保存しますので、ディレクトリをあらかじめ用意しておきます。
ここでは、D:\VirtualMachines\Docker\volume\snipe-it\mysqlがデータベースファイルの格納先とします。
下記がデータベース用のコンテナです。

3. APP_KEYの取得

先のテキストファイルに★後から設定★と書かれていた値を取得します。

このbase64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxという部分を先のテキストファイルに貼り付けます。
つまり下記のようになります。

4.Snipe-ITの起動

最後にSnipe-ITそのもののコンテナを作成します。
ここでも設定などをホスト側に作成するので、ディレクトリをあらかじめ用意しておきます。
ここでは、D:\VirtualMachines\Docker\volume\snipe-itとします。
下記がコンテナ作成のコマンドです。
ホスト側のポート番号9001は自由に変えてもらって結構です。

これでWebからアクセスできますが、このままだと動きません。
情報が見当たらなかったのですが、必要なフォルダとファイルが作られていないため、データベースを作る際にエラーになってしまうので、下記のコマンドで回避します。

5.セットアップ

Next: Create Database Tables をクリック

Next: Create User をクリック

必要な情報を入力して、Next: Save User をクリック

セットアップ終了!!