Work Records

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

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年からのレコードを返してしまうようだ。

androidアプリが停止された -エロは駄目だよpart2-

アップデートをかけたら停止された

最近リリースしたandroidアプリ「バブルデコレータ」。
ちょっと機能追加したのでアップデートをしてみた。

数時間後、そろそろ更新されたかなーと思ってディベロッパーコンソールを見たところ。。。
f:id:kenjiszk:20150414123300p:plain

むむむ。

原因はアダルトコンテンツ

まあ、あたりまえです、エロは駄目。もう一度、エロアプリは駄目。

とはいえバブルデコレータ自体は単にこのアプリで水玉コラ写真を作るだけだったんで良かったんですけどね、
それを投稿出来る掲示板と、そこにはってある広告(むしろこっちが主?)が引っかかったんだろうと予想。

最初のリリースでは大丈夫だったのに

最初のリリース時点でこの掲示板はあったのになぜいま?とも思ったけどよく考えると、

  • リリース後にかなりきわどい感じのコラ写真がたくさん投稿されて溜まっていた
  • アダルト広告を追加しちゃった(ごめんなさい)

これが原因ですね。本当にごめんなさい。

androidでも最低限の審査はあるんだな

今回の発見として、androidでも簡単な審査はあるんだなあということ。
人間がやってるのか、機械がやっているか分からないけど。

アプリ出し直し

一度停止されると修正しても同じアプリとしてリリースは出来ないらしい。
仕方が無いので、新しく作り直して新しいアプリとしてリリース。
https://play.google.com/store/apps/details?id=org.waremon.bubble2&hl=ja

今まで広まってたURLが変わっちゃうからショック!
とりあえず本ブログに記載されていたURLは修正したけど、別サイトにのせてもらっているURLは修正出来ない。。。ショック!

iOSも直しておこう

実はiOSも同じような機能があるのでアプリを消されないうちに掲示板機能は潰しておこう。
https://itunes.apple.com/jp/app/baburudekoreta/id741537396?mt=8&at=10l8JW&ct=hatenablog



[asin:4822285022:detail]
[asin:B00MZ8KM9Y:detail]

androidアプリのバージョンアップに必要なkeystoreのパスワードを忘れた!

keystoreのパスワードとエイリアス

androidアプリをリリースする時に必要なkeystore。
アプリをアップデートする時には、リリース時に使ったkeystoreと設定したパスワードが必要なのでしっかりメモっておく事。

忘れてしまったら、、、思い出すしか無い

と言いつつ、メモるの忘れてた。適当に作ったアプリだったからアップデートなんてする気無かったし。

どうしようか。。。


手当たり次第試す!これしか無い。
簡単にばーっと試すにはコマンドラインが良いので、以下のコマンド打ちまくって使ってそうなパスワード打ちまくって試しまくる。

$ keytool -list -keystore /path/to/keystore
キーストアのパスワードを入力してください: 

ちなみに、パスワードを入れずにエンター押すとエイリアスだけは分かるみたい。

という事で、1時間くらいうんうん言いながらパスワード試しまくって見事発見。
今度はちゃんとメモっておこう。

思い出す以外の方法があるのだろうか。

あったら誰か教えてください!


アプリ広告収入 2015/03

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

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

売上 @nend

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

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

バブルデコレータ(android) ¥321
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

計 ¥1,123

まとめ

計 ¥1,208
金額としては過去最高。ちょっと良いランチ食える。バブルデコレータのandroid版出したので当然か。
まあ当初の数百円に比べたらまだ成長しているんだろうか。目標は20万円ですけど。笑


今月はバブルデコレータの広告の表示をちょっと変えてみる予定。
あと、出来れば計画中のアプリを一つ出したい。予定では有料アプリ。

放置気味の奴らもなんとかしないとなあ。
unityをちょっとかじりだしたのでゲーム系はリメイクしようかな。


AWSのwebコンソールでS3のバケットの中身の表示時にファイル名検索出来た!

webコンソールでs3の中身の検索って出来ないと思っていた

Ctl+fでブラウザの検索をしても、ファイル数が多い場合には一定数以上が表示されていないので、下にずーーーっとスクロールして、次のファイル読み込んでーーー、ってやってやっと目的のファイルにたどり着いていた。

こんな感じで、下までいくと次のファイルを読み込んでくれる。
f:id:kenjiszk:20150401014041p:plain

なんと検索する方法があった

ところが検索する方法がなんとあった。

1. 適当なファイルを選択状態にする
f:id:kenjiszk:20150401014046p:plain

2. 目的のファイルの最初の文字を打つ(画像の場合、oを打っている)
f:id:kenjiszk:20150401014053p:plain

すると、oから始まるファイルだけがずらーっとならぶ。
なんと簡単。そして隠し機能すぎる。

nginxのアクセスログがaccess_log.1になる

なんでだろうと思っていたら同じようにはまっている人がいた。
serverfault.com

たしかに、ディレクトリの所有者がwww-dataになってる。

という事で、chmod 755 してnginxリロードして様子見中。

追記
様子見していたら、ログローテートのタイミングでパーミッションが戻ってしまうようだった。
ここに書いてあるような設定をして完了。
http://shakezoomer.com/?p=668shakezoomer.com


[asin:4873116457:detail]

自作アプリにおける反省

思いつきで作ってなんとなくリリースまでは普通に出来る

以下、個人的体験。
こんなん面白そうだなーとアプリを作り始める。
出来上がってせっかくなのでマーケットに出す。
で、インストール数伸びない。笑

目標/目的大事

まあ、別に趣味だから流行らなくてもいいといえばそれまでなんだが、それなりの時間を使っているのでせっかくなのでちゃんとしたい。
ちゃんとするの定義もいろいろあるけど、アプリ一つ一つに目的や目標を立てるのが大事かなと最近真面目に考えた。

一番分かりやすい例で言えば、このアプリで何円稼ぐ、とか、何万ダウンロード目指す、とか。
それが達成出来なかった場合に何がいけなかったのか、まで考える必要があると思う。
多分こんな事は普通の会社ならやっている事で、個人の開発だからってやらなくて良い理由などない。

積み上げの目標より希望的目標で

という事で目標とか立ててみようと思う。
今現在非常に残念な事に、月間1,000円くらいしか稼いでいない自作アプリたちなのだが、現実的にいえば月1万も稼げれば御の字であるし、普通に頑張ってもそれくらいにしかならない気がする。

が、そんな事よりいくら欲しいのかで考える事にする。
その方がやる気出るし、頭が柔らかくなる。気がする。
なので2015年度で、月20万目指す。

費やした時間を記録する

これも結構大事だと思う。
時給計算とかしてみたら多分ひどい事になる。笑
でもそれを記録して自覚する事が大事。

まとめ

以上、個人的アプリ開発所感。
会社ではなく個人でアプリを作る時の気分の良さは、
こういった"◯◯にしたら良い気がする!根拠ないけど!"みたいなのを誰の許可も無く出来るところだったりする。