2016年7月26日火曜日

MinGW sqlcipher build 忘備録

まず、Mingw のインストール

MinGW(gcc) の Windows へのインストールと使い方 を参考にインストールします。

MSYSのシェルを起動するショートカットを作成します。
参照は C:\MINGW\msys\1.0\msys.bat です。

MSYSのシェルを起動します。

ライブラリの探し方は
$ mingw-get list | openssl
とします。

mingw-libopenssl を入れてみます。
$mingw-get install msys-libopenssl

SQLCipher をダウンロードして展開します。

$ configure

.... はい、エラーになります。

OpenSSL をダウンロードしてビルドします。

$ Configure --prefix=$PWD/dist no-idea no-mdc2 no-rc5 shared mingw
$ make depend && make && make install
です。

ようやく build に入ります。主にこちらを参考にしました。

sqlcipher と openssl のソースが home 下に作成されているとします。
$ configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC -I../openssl-1.0.2h/dist/include 
        ../openssl-1.0.2h/dist/bin/libeay32.dll -L../openssl-1.0.2h/dist/lib -static-libgcc" DLFLAGS="-leay32"
make claen
make sqlite3.c
make
make dll

2016年7月21日木曜日

生産性の低いモバイル・アプリケーション開発


 近年、自分が感じているモバイル・アプリケーション開発に対する状況を書いてみよう。(自分はB2B系のシステム開発をしているので、コンシューマ向けの事業を行っている方面の方にはマッチしない考察である可能性があります)

 発売されているモバイル端末は多岐にわたる。iOS をはじめとする iPhone, iPad。Android をはじめとする Android 端末、タブレット端末、将来的には ウェアラブル端末。Windowsをはじめとする Windows Phone、Surface、得体のしれないタブレット端末類。どの端末をとってみても、これで開発しておけば安泰なんていう時代じゃなくなってます。少し前まであったAndroidタブレットは、現在生産しているのが数社に狭まり、今後、市場として成立するかどうかは全くの不透明。どの部分が明日には廃れていくか決め打ちするのもリスクが高すぎて選択できません。逆もまた然り。

 よって、全方位で製品を提供できる事が理想です。Microsoft社も、このように考えているようです。ひとつの解決策としては Xamarin があります。しかし、考えるに、Xamarin って生産性高いの?という疑問が付きまといます。HTML5も進化して、どんどんとネイティブ・アプリとブラウザ・アプリの差が縮まっているように感じています。札幌で行われたW3C会議のDeveloper Meetup に参加して思ったのは、Worker Service や Universal Payments など、野心的な開拓と提案で、この先も、どんどんと進化していく流れは続きそうだという事です。Google は Native の有用性と Browser の有用性は、それぞれにあり、どちらも必要性を認めていますが、両者の垣根は、だんだんと曖昧になってきていると考えているようです。

 ウェブは終わったと煽る記事もありますが、自分は、ウェブをベースにアプリを作成するのが幸せだと考えてます。もちろん Native コードじゃないと話にならない事もあります。アプリのパーツを考えた時、ウェブをベースとした作り方ができれば、生産性は高まります。レイアウトもコードも楽ですし、再利用できるコードも多いですし、なんならウェブ・アプリケーションとして提供するのもコストが少なくて済みます。調べてみると WebViewの出来は最悪みたいで、Android Kitkat 4.4 以上であれば ChromeViewが使えるようです。他には Crosswalk というものもあり、これなら Android と iOS、Windows Phone もプロジェクトがあるので使えそうです。

 ここから先の考え方は、現在無いように思う事項です。サーバーを端末内の node.js のようなもので代用できれば最高だと思いませんか?ポートを介して接続したりするので、モバイル端末等におけるセキュリィティの概念が必要でしょうが、VirtualHost的な考え方と認証を組み合わせれば大丈夫でしょう。サーバをローカルにするメリットは、まだあります。WebStorageで頑張らなくてもサーバサイドに機能を寄せる事ができます。フォッグ・コンピューティング的な考え方等を導入する場合でも、ローカル・サーバ・サイドの機能として隠蔽する事が可能なので幅が広がります。残念ながら Android に node.js を入れようと思ったら root化が必要そうではあります。変なサービス・アプリケーションを一生懸命開発するぐらいなら、ローカル・サーバ・サイドの機能として実装するのもアリだと思いませんか?

 こうやって、アプリケーション内を部分的にでもWebView的なもので置き換える事ができたら、グッと生産性が上がるんじゃないかな〜?どうでしょう?