2014年9月13日土曜日

新しいiTunesConnect(Aug 2014)にバイナリを上げたらWarning Build ~ does not contain the correct beta entitlement.

2014年の8月に、iTunesConnectが大きく変わった。

iTC上でのバイナリの管理方法が変わったこともあって、変更前に生成したバイナリだと以下のWarningが出ることがある。


Build ~ does not contain the correct beta entitlement. 

発生したら、App Store リリース用の Provisioning Profile を変更してビルドすれば良い。

2014年9月4日木曜日

tomcatのログローテート

logrotateコマンドを使用する方法


Amazon Linux、CentOS では、yum でインストール出来る。
Redhat系だったら導入は簡単ということ。他のディストリビューションは手元に無いので確認していない。

以下に設定ファイルを作成する。

/etc/logrotate.d

ファイルの名前で、logrorateを使っているアプリケーションがわかる。

ここでは、「/etc/logrotate.d/tomcat」とする。root で作業。

# vi /etc/logrotate.d/tomcat

# logrotate file for Tomcat
/opt/tomcat/logs/catalina.out {
  missingok
  copytruncate
  daily
  dateext
  rotate 60
}


オプションの整理



  • missingok:ログファイルが無くてもエラーを出さない
  • copytruncate:
  • daily:日でローテート
  • dateext:ファイル名末尾に日付をつける
  • rotate:残す世代数
  • compress:最新世代以外は圧縮
  • size:最大サイズを指定。最大になるとローテート


/etcc/cron.daily 配下のファイル logrotate がある。つまり、logrotateはcronによって毎日走る。

実行スクリプトがどこにあるかというと、logrotate.d にすべてのスクリプトが含まれる。

include /etc/logrotate.d



logrotateの強制実行


# logrotate -f /etc/logrotate.d/tomcat


cron.dailyの強制実行


# anacon -f

上記で、少なくとも logrotate と cron による実行確認可能。

サーバに設定して、動作確認すればOK。


accesslogの設定



catalina.outだけでなく、accessログも logrotate でローテートする場合は、tomcatが自動でローテートしないように以下の設定を行う。

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="access_log." suffix=".txt" ←★ファイル名は access_log.txt に固定される
               rotatable="false" ←★ 自動ローテートをOFF
               pattern='%h %l %u %t "%r" %s %b %D "%{Referer}i" "%{User-Agent}i"' />

その後、tomcatのローテート設定にファイルを追加する。

# logrotate file for Tomcat
/opt/tomcat/logs/catalina.out
/opt/tomcat/logs/access_log.txt
{
  missingok
  copytruncate
  daily
  dateext
  rotate 60
}

2014年9月3日水曜日

JNIの関数の戻り値を文字列にする時の簡単な注意事項

JNI でコーディングする間が開いたので、コンパイルに失敗してjstringで文字列を作成する関数なんだっけ、で数分を失ったのでメモ。

以下の関数で jstring を生成する。

jstring strj = env->NewStringUTF("debug");

既知なことだと思うが、envは引数JNIEnvを指す。

2014年8月30日土曜日

Octaveで行列の各要素に対する計算をしたら warning: product: automatic broadcasting operation applied が出る

Octaveでは、行列の各要素に対して処理を行う場合、以下の用に 「.」を使って表現出来る。

すべての要素に3をかける

> A .* 3

でもこれやると、warning: product: automatic broadcasting operation applied と出るのだ。

以下の、bsxfun を使うと良い。

bsxfun(fun,A,B)

http://www.mathworks.co.jp/jp/help/matlab/ref/bsxfun.html

たとえば A .* 3 を書き直すと


> bsxfun(@times, A, 3)

となる。

2014年8月29日金曜日

Appleのアプリ審査で新しく増えた項目 Unrestricted Web Access

Unrestricted Web Accessは何を意味しているか

登録ページのinformationには、以下の様に記述があります。


Select Yes if your app allows users to
navigate and view web pages, such as
 with an embedded browser.

日本語の navigate と意味合いが異なるらしい(英語レベルの高い方談)。

navigate の主語はあくまで user であって、app では無い。

そのため、ユーザが自主的にWebページを見ることを許可しているか?例えばブラウザーとかね。と聞かれていることになり、WebViewを使っているだけで on にしなければならない項目とは言えない、とのこと。

それでもrejectされるかもしれないけどあしからず。

グラフの可視化 Jung

Jungによるグラフの可視化


グラフ構造を分析・可視化するJavaライブラリ。

実装したAIのアルゴルズムのグラフを可視化するのが目的。

最新版の更新はちょっと古いですが、2.0.1が最新のようです。

Jung は Swingを使います。
Swingコンポーネントは以下の3階層です

トップレベルコンテナ

JFrameなど。メインウィンドウ。

中間コンテナ

JPanelなど。コンポーネントを配置するためのコンテナ、枠組み。

コントロール

コンテナに入れ込む部品


Jungは上記のSwingクラスを継承する形で作られています。

例えば、VisualizationViewer は、JPanel の ContentPane に追加して、コンテナとして使用出来ます。
VisualizationViewer には、Graph を入れた FRLayout を登録して描画します。

Graph にはいろいろなクラスが使えるようですが、SparseMultigraph が手っ取り早く使えます。

play framework for java の環境構築

play framework 2.3.3 for Java の環境を構築する


参考:http://mpon.hatenablog.com/entry/2014/07/20/012053

ハマったので先に書いておくと、windows環境で環境変数USERPROFILEに日本語が入っている場合、コンパイルエラーが発生する。

activator でセットアップしたライブラリは UESRPFORILE 配下 .activator、.ivy2、.sbt に展開され、
template も UESRPFORILE 配下を使うように固定設定されているから、日本語が含まれるとうまくpathが通らないのだ。
template を使わずコマンドラインで動作するminimal プロジェクトならうまく動作するが、素早くWEB開発をしたいなら template を使用したい。

ということでもし USERPROFILE が日本語(2byte文字含む)だった場合は別のアカウントを作るか、playのソースを UESRPFORILE 配下を使用しないように修正してビルドする必要がある。


ここでは、USERPROFILE について問題なかった場合の開発環境手順を追っていく。



ダウンロードしたファイルは展開してから、展開した場所をPATHに追加する。
activator コマンドのある場所が、play の home となり、プロジェクトごとのフォルダなどはここに出来る。


その後、activator.bat を実行する。PATHを追加しなかった場合、activator コマンドを実行した場所にプロジェクトが作成される。


Scalaをはじめとするライブラリやパッケージは、frameworkに含まれているようだが、UESRPFORILEに最新版のライブラリが展開される。



その後、playはコンソールによるプロジェクトの初期化とuiによる初期化が選べる。
以下を実行すると、ローカルにサーバが起動し、ブラウザからUIによってプロジェクトを操作するページが配置される。

※JAVA_HOMEがJava8に設定されていないと、JVMオプションエラーになるので注意。



> activator ui


以下のwarnが表示されるけど、問題無く動作した。

[warn] e.m.m.MimeDetectorRegistry - MimeDetector [eu.medsea.mimeutil.detector.MagicMimeMimeDetector] will not be registered as a MimeDetector with this name is already registered.


UIがまだ操作しやすいとは言えない状況なので、一度停止して、コマンドラインから実行してみよう。


コマンドラインの場合は、以下の様にサンプルプロジェクトを作成出来る。



> activator new [プロジェクト名] [タイプ play-javaでjava、play-scalaでscala]


または



> activator new

だけ入力すると、対話形式でアプリケーションの名前やタイプを決定できる。


コマンドが終わったら、以下で実行が可能。



> cd [作成したアプリケーション名]
> activator run


この後、「Getting org.scala-sbt sbt 0.13.5 ...」からダウンロードが始まる。
依存関係を解決している、とのこと。
参考サイトにも長いと書いてあったが、想像以上に長かった。知らなければ途中でやめるレベルで長い。


以下が出ると完了。



[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
(Server started, use Ctrl+D to stop and go back to the console...)


ブラウザでlocalhost:9000 にアクセスすると、以下の画面が表示されれば環境構築成功。






コンパイルエラーが発生したら、メッセージに合わせて手順を見直すと良い。


次は scalar for eclipse でIDE設定を行う。