Work Records

日々の作業記録です。ソフトウェアエンジニアリング全般から、趣味の話まで。

iTunes ConnectのAppアナリティクスでAppStoreのPVが見れるようになってハッピー

iTunes ConnectでAppアナリティクスがβ版使用可能になりました

appleからメールが来て使いたいよーっていえばβ版のAppアナリティクスが使えるようになりました。
f:id:kenjiszk:20150524220423p:plain

何よりもAppStore閲覧数が見れるのがうれしい

バブルデコレータのAppStore閲覧数(ノープロモーションなのでしょぼいPVですが)

https://itunes.apple.com/jp/app/baburudekoreta/id741537396?mt=8

f:id:kenjiszk:20150524220415p:plain


アプリをインストールしてもられればその後はログを仕込むなり何なりでユーザー動向は追えるが、AppStoreのアプリページがどのくらい閲覧数があってどのくらいの割合でインストールまで繋がっているかが今まで分からなかった。

AppStore閲覧数が見えるようになった事で、プロモーション用の画像やアプリ説明文のチューニングをデータを元にして出来るようになった!素晴らしい!

ありがとう、Apple


[asin:477415783X:detail]

Qiitaに投稿してみた

Qiitaを使ってみた

とある事情から、Qiitaにまとめる必要があったので書いてみた。

MySQLでToo many connectionsが出た時の対応

qiita.com

結構PVが来る

書いて半日くらいで66PV来ていた。
結構すごいなQiita
f:id:kenjiszk:20150523032653p:plain

kobitoがとりあえず便利すぎる

これ、すごい便利。
デフォルトでチートシートがあるとか、最高。

Apache SetEnvIfでenvに一つの値しか設定出来なくて困った

ApacheのSetEnvIfは便利

access_logで画像関連のlogを出したくない時にこんな感じの設定を入れる。

SetEnvIf Request_URI "\.(gif)|(jpg)|(jpeg)|(png)|(css)|(js)$" no_log

CustomLog /var/log/httpd/access_log combined env=!no_log

Request_URIで別条件も入れたくなった

外部に公開したくないサイトの場合、basic認証をかけるんだけど、LBや監視からのヘルスチェックだけはbasic認証をかけたくない。
SetEnvIfを使ってこんな感じで書けるのだけれど、、、
d.hatena.ne.jp

すでに、Request_URIのenvをno_logで使ってしまっているので、この方法は使えない。
SetEnvIfでkeyとvalueを追加出来るようになったら良いのに!!!

LocationMatchを使う

色々と考えたが、LocationMatchを使ってヘルスチェック用のurlだけbasic認証を除外する

<LocationMatch "^/(?!health_check)$">
    AuthType Basic
    AuthName "Secret Zone"
    AuthUserFile /var/www/html/.htpasswd
    Require valid-user
</LocationMatch>

これでなんとかやりたい事が実現。
Apacheのconfigの正規表現perlと一緒なんですね。


[asin:4774172480:detail]

アプリ広告収入 2015/04

個人的に作っているアプリの広告収入

拙作の大した事無いアプリの広告売上を公開しています。
ほとんどのアプリが単なる学習目的でしたがせっかくなので収益化を少しながらしています。
とてもしょぼい金額ですが、反省も込めて。

売上 @nend

ときめきエキスプレスStation ¥27
https://itunes.apple.com/jp/app/tokimekiekisupuresustation/id660044163?mt=8&at=10l8JW&ct=hatenablog

バブルデコレータ(iOS) ¥407
https://itunes.apple.com/jp/app/baburudekoreta/id741537396?mt=8&at=10l8JW&ct=hatenablog

バブルデコレータ(android) ¥369
https://play.google.com/store/apps/details?id=org.waremon.bubble2&hl=ja

高額喫煙納税 ¥0
https://itunes.apple.com/jp/app/gao-e-chi-yan-na-shui/id902170473?mt=8&at=10l8JW&ct=hatenablog

計 ¥803

まとめ

計 ¥838
バブルデコレータのandroidがマーケットから消されたり、iphone版はリジェクトされたり結構大変だった。笑
インタースティシャル広告を入れてみたりしてるのでとりあえず早くマーケットに出したい。。。
効果が分かるのは5月からかな。


Route53でPrivate Hosted Zoneを作る時にはVPCの設定に注意

Route53のPrivate Hosted Zone

外部に公開する必要が無い or したくないようなドメインを設定出来て非常に便利。
ホスト名とか、VPC内でしか使わないAPIとか、rdsのドメインが長いから短い名前をつけたりとか。

VPC側の設定が必要

Hosted Zoneを作成してレコードも登録したのになぜか名前が引けなかった。

なぜかと思ってかなりはまって、結局VPC側の設定も必要だった事に気づいた。
この二つ、yesにしましょう。

f:id:kenjiszk:20150506000102p:plain



以上。時間を無駄にした。。。



[asin:4774171417:detail]

CentOS7でdaemontoolsを動かす

CentOS6からはインストールしただけだとdaemontoolsは動かない

CentOS6の場合はこちら
wp.kaz.bz

CentoOS7の場合はどうすんだ?

centos7はデーモンをsystemctlで動かすので、daemontoolsもそれに従うと良さそう。

こんな感じでdaemontools.serviceを作る

# cat /etc/systemd/system/daemontools.service 
[Unit]
Description=daemontools Start supervise
After=getty.target

[Service]
Type=simple
User=root
Group=root
Restart=always
ExecStart=/command/svscanboot /dev/ttyS0
TimeoutSec=0

[Install]
WantedBy=multi-user.target

そのあと以下を実行でめでたく動きます

systemctl enable daemontools
systemctl start daemontools


MySQLでdatetimeに10000年を指定すると残念な事になる。

MySQLのBETWEENに'10000-01-01 00:00:00'のように9999年以上の値を入れると予期せぬ結果が返ってくる

MySQL ver : 5.6.20

こんなテーブルに対して

mysql> select * from date_test_table;
+---------------------+
| date                |
+---------------------+
| 2015-01-01 00:00:00 |
| 9999-01-01 00:00:00 |
| 0000-01-01 00:00:00 |
| 1015-01-01 00:00:00 |
| 3015-01-01 00:00:00 |
+---------------------+

BETWEENのminのほうに1000年と間違えて10000年を指定してしまった。
普通はエラーになるだろうと思ったらなぜかレコードが返ってきた。
謎い。

mysql> select * from date_test_table where date between "10000-01-01" AND "2050-01-01";
+---------------------+
| date                |
+---------------------+
| 2015-01-01 00:00:00 |
| 0000-01-01 00:00:00 |
| 1015-01-01 00:00:00 |
+---------------------+

どうやら挙動的には0000年になっているっぽい

DateTimeは0年から9999年まで

そもそもMySQLのDateTime自体が9999年までしか対応していない。

更新はエラーだけど参照はwarning

実際に10000年に関してのクエリを打ってみると、更新はエラーになるが参照はwarningという不思議。

mysql> insert date_test_table set date = '10000-01-01 00:00:00';
ERROR 1292 (22007): Incorrect datetime value: '10000-01-01 00:00:00' for column 'date' at row 1
 
mysql> select * from date_test_table where date = "10000-01-01 00:00:00";
Empty set, 2 warnings (0.00 sec)

mysql> show warnings;
+---------+------+--------------------------------------------------------------------+
| Level   | Code | Message                                                            |
+---------+------+--------------------------------------------------------------------+
| Warning | 1292 | Incorrect datetime value: '10000-01-01' for column 'date' at row 1 |
+---------+------+--------------------------------------------------------------------+

BETWEENは空文字でも受け付ける

一方で、BETWEENは空文字でもクエリを受け付ける仕様のようだ。しかも自動的に最小の値になっているっぽい。

mysql> select * from date_test_table where date between "" AND "2050-01-01";
+---------------------+
| date                |
+---------------------+
| 2015-01-01 00:00:00 |
| 0000-01-01 00:00:00 |
| 1015-01-01 00:00:00 |
+---------------------+

BETWEENとDateTimeの仕様の合わせ技でおかしな事に

この二つの挙動が合わさると、BETWEENのmin側に10000年を入れるとempty(="")と評価されて、0000年からのレコードを返してしまうようだ。