アプリ広告収入 2015/02
2月は日数が少ないですからね!笑
iOS nend
ときめきエキスプレスStation ¥1
https://itunes.apple.com/jp/app/tokimekiekisupuresustation/id660044163?mt=8&at=10l8JW&ct=hatenablog
バブルデコレータ(iOS) ¥359
https://itunes.apple.com/jp/app/baburudekoreta/id741537396?mt=8&at=10l8JW&ct=hatenablog
バブルデコレータ(android) ¥282
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
計 ¥643
Android AdMob
THE じゃんけん ¥56
https://play.google.com/store/apps/details?id=org.waremon.janken&hl=ja
原発を運転せよ ¥11
https://play.google.com/store/apps/details?id=org.waremon.fissioin2&hl=ja
音神経衰弱 ¥6
https://play.google.com/store/apps/details?id=org.waremon.soundmemory2&hl=ja
計 ¥73
計 ¥716
2月はバブルデコレータのandroid版をリリースしたんですが、あんまりインパクトは無いですね。
相変わらず、昼飯代程度という事で。。。
NewrelicでAWSのモニタリングするときのRDSのFree Disk監視がいけてない
NewrelicでのAWSのモニタリングが予想以上に便利だった
最近は、自前で色々と作らなくても監視やらリソースモニタリングやらクラウドサービスで出来るようになってすばらしい。
NewrelicはAWSのアカウントを持っているとStandardプランが無料で使えるので色々と設定してみたところ、非常に便利で感動した。
この辺り、参考に。
http://www.rco.recruit.co.jp/blog/%E6%8A%80%E8%A1%93tips/273
http://www.rco.recruit.co.jp/blog/%E6%8A%80%E8%A1%93tips/273
唯一、保存できるデータが過去1週間までというのが引っかかるが、まあ無料なので一週間でも有り難い。
欲を言えば、過去のデータは丸めて精度を落としてでもある程度見れるようになっているとうれしい。
一点、RDSのFree Diskの監視がいけてない
newrelic_aws_cloudwatch_pluginをいれてRDSの監視を始めるとおかしな事が発生。
1. RDSのDiskが5Gなので、Free Diskのアラート閾値を1Gに設定してみる。
2. 今の残りが4Gなのでまだまだ余裕のはず。
3. なぜかアラートが飛ぶ。
4. 色々と閾値を試してみると、どうやら4G以上を設定してみるとアラートが飛ばない。
なにこれ、逆、逆。
バグでしょうか。何でしょうか。
ググってみると、偉大なpostを発見。
コメントにpull req出してくれよ!って書いてあるのでそのうち改善されるんでしょうか。
Getting New Relic and RDS to play nice - Shine Solutions Group
対応
上のポストの修正を自分で入れるのが良さそうだけど、さくっとやりたかったのでRDSのFree DiskだけはCloudWatchで監視する事にした。
UIImageを使おうと思ったら、expected a typeというエラーが出た
小ネタの割にはまった
こんな感じでメソッドを定義したらexpected a typeというエラーが出た。
ImageUtilsというクラスのヘッダファイル[ImageUtils.h]
#import <Foundation/Foundation.h> @interface ImageUtils : NSObject + (UIImage *) makeThumbNail:(UIImage *)orgImage; <<<ここで expected a typeというエラー @end
大抵はimportの循環参照らしいが
このエラーはimportの循環参照が引き起こすらしいが、新しいアプリを書きはじめで怪しい部分などない。ググりまくる。
UIImageはUIKitの中にあるらしい
ちゃんとドキュメント読めと。。。
NSObjectを継承したクラスを作るとデフォルトではFoundationがimportされているが、UIImageはUIKitの方にあるらしい。
#import <UIKit/UIKit.h>
に変えて解決。めでたし。
いやいや、めでたしじゃない。昔のprojectはUIKitなんてimportしてなくてもUIImageつかえたぞ
そう、xcode5時代から作っていたようなprojectではいちいちUIKitをimportしなくてもUIImageを使えていた。
色々調べた結果、pchファイルがxcode6から自動的に作られなくなった事が原因ぽい。
このため今まではあらかじめ読み込まれていたUIKitが読み込まれていなかった。
pchを作る方法はこの辺りが参考になりそう。
Xcode6 PCHファイルがないので追加する - あぷすた - iPhoneとWebとプログラミングと
ということで、めでたし。
sambaサーバーにつながらないと思ったらルーターの設定でポートが閉じていた
大分はまった
諸事情によりsambaをインストールしていたのだけど、なぜか自宅のMacから接続できない
インストールはこの辺りを参考に
接続確認
いざ、Macから接続しようとしてもなぜかTimeoutになってしまう。ログにも出ない。
設定自体は出来ているのか、サーバーが動いてるホストで以下を実行してみる。
# smbclient -L xxx.xxx.xxx.xxx -U username
いろいろバーっと出てきて問題無さげ
試しに、別のサーバー(sakuraのVPS)からアクセスしても問題無さげ。
水玉コラ作成アプリ バブルデコレータ Android版リリース!
反省
Titaniumで作る時は、Androidを先に作っておくべきかなという感じ。iPhoneではちゃんと動くのにー的な体験をすごいしたし、ググってもそんな話が大量に出てくる。
手間無くワンソース、マルチプラットフォームは夢だったのだろうか。。。
今後
やっと、iOSとAndroidで同じアプリをリリースできたのでプラットフォームの違いとかいろんな事を実体験として発見できると良いかなと思っている感じです。
とりあえずインストールお願いします!
Andorid版
https://play.google.com/store/apps/details?id=org.waremon.bubble2&hl=ja
iPhone版
https://itunes.apple.com/jp/app/baburudekoreta/id741537396?mt=8
[asin:4839941084:detail]
Titanium mobile Androidにnendのバナー広告を貼る
Advertising IDが必要らしい
iPhone版で動いていたソースをそのまま動かしたらエラー
[INFO] : dalvikvm: Could not find method com.google.android.gms.ads.identifier.AdvertisingIdClient.getAdvertisingIdInfo, referenced from method net.nend.android.NendHelper.getAdvertisingId (以下、エラーがドバーっと)
Google Playのポリシー変更により、Android で提供されている Advertising IDというものが必要との事。
さらに、Advertising IDを使用するにはGoogle Play Serviceを導入する必要がある。なかなか面倒。
Google Play Serviceの導入はググると出てくるので割愛。
Google Play Serviceだけインストールしたかったんだけど色々とアップデートされて3時間くらい使った。。。
Titanium用にモジュールを配置
そのあとどうすんだろと、色々調べていたが結局公式のウェブサイトのリンクに解決策があった。
最初にドキュメントを確認しろと。
モジュールの組み込み · fan-ADN/nendSDK-Titanium Wiki · GitHub
結構時間使った割に単純な話でした。
AWSiOSSDKv2 AWSS3TransferManagerで同名のファイルをS3から並列にダウンロードする時には注意!
小ネタだけど、どはまりしたのでメモっておく
別ディレクトリ、同名のファイルをダウンロードすると画像が壊れている、全て同じファイルになる、という現象にぶつかる
例えば、こんな感じの構成のファイルがS3にある場合
BucketName/Dir1/image.jpeg BucketName/Dir2/image.jpeg
これをAWSS3TransferManagerを使って、並列にダウンロードしようとして
(snip) AWSS3TransferManagerDownloadRequest *downloadRequest = [AWSS3TransferManagerDownloadRequest new]; downloadRequest.bucket = BucketName; downloadRequest.key = key; // keyはDir1/image.jpeg or Dir2/image.jpegでforで回す [[transferManager download:downloadRequest] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) { // ごにょごにょ }); (snip)
/tmp/image.jpeg /tmp/image.jpeg (1)
みたいに、同名のファイル + カッコのナンバリングの形になってしまう。
そこではまった
そんな処理を繰り返していると、
1. /tmpを見て、次の番号を決める
2. 画像を書き込む
3. 書き込み完了
の処理タイミングが被ってしまったファイル同士で書き込み先がコンフリクトしてしまい、ファイル自体が壊れるか、ぱっと見はちゃんとした画像だけど、同名別画像で上書きされてしまう、という状況になってしまった。
ダウンロード先のファイル名は指定してあげた方が無難
そのため、以下のプロパティを追加してあげた。
downloadRequest.downloadingFileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:"被らなそうなユニークな文字列"]];
これで問題なくなる。
大量にダウンロードした時に全部同じ画像になったりしていたらその辺りを疑うともしかしたらこんなことが起きているかもしれません。