まめーじぇんと@Tech

技術ネタに関して (Android, GAE, Angular). Twitter: @mame01122

2014-01-01から1年間の記事一覧

リストプロパティ内のindex

GAEのリストプロパティにて、TextやBlobなどのIndexされないものと、 IndexされるStringなどのデータを一緒に入れたときの話。GAEのドキュメントには、下記の英語の引用通りですが、・Indexされるものが先 (Stringなど。どうやらnullも含むらしい) ・Indexさ…

SQLCipher利用時のProguardについて

AndroidでProguardを使うときは、基本的にproject.propertiesの proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt のコメントを外し、Eclipseであればプロジェクトを選択し、 Android Tools > Export Signed Applicati…

メモリリークの確認方法

今回は、以前から気になっていたAndroidでのメモリリークに関して。 Bitmapを扱う部分など、ドキドキしていたので、今回しっかりとメモリダンプの取得方法を勉強してみました。今回は、DDMSを使って取得しています。 やり方は、下記の通りです。 まず、DDMS…

Androidのボタン二度押しを防ぐ

AndroidのButtonのonClickが二度呼ばれてしまう問題の対処について。 今作っているサービスのClient side (Android)で、 サーバ通信を伴う部分があり、その契機の1つがButtonがClickされたときになっています。 βテストをやっている中で、 「ボタンが二度押…

Privacy Policyの書き方 / 英語編(3)

前回、前々回に続き、Privacy Policyの書き方英語編3回目。 今回は、セキュリティや、情報の取り扱い方に関して。いくつかのPrivacy policyを見てみましたが、どうやら3つくらいの要素を記載する必要があるようです。・個人情報は漏洩しないようにしっかり守…

Privacy Policyの書き方 / 英語編(2)

前回に続き、Privacy Policyの書き方英語編2回目。 今回は、どのようなデータをどうやって集めるか?といったあたりを書いてみようと思います。前回紹介した概要に続き、いろいろなサービスでは、どのようなデータをどのように集めるか?というあたりの 説明…

Privacy Policyの書き方 / 英語編(1)

Privacy Policyを英語で書くのは、 普段英語を使わない日本路にとってはなかなか辛いもので、 そのあたりで僕が苦労した内容をシェアできれば、 これを読んでいる人の参考にもなるかな?と思いシェア。また、下記の内容は、あくまで「参考」レベルにとどめて…

Google Analytics利用時の注意

アプリやサービスをローンチする際、Google Analyticsを使って ユーザの行動を収集するケースは多いと思いますが、 今回はそのGoogle Analytics利用時の注意点について。一応、Google Analyticsのサイトにはこんな感じで記載があります。Google Analytics よ…

Base64エンコード/デコードでNoSuchMethodError on Android

Base64のエンコード/デコードを使ったときの話。Android + GAEでBase64エンコード/デコードしたときに、 org.apache.commons.codec.binary.Base64をインポートして使っていたら、 GAEでは問題ない一方で、Androidだと、 Base64.encodeBase64String();と Base…

DialogFragmentでIllegalStateException "Fragment already added"が発生する

AndroidのFragmentを使っているとアルアルな話かもしれませんが、 FragmentDialogをつかっていて、二度目以降のタイミングで、 IllegalStateException "Fragment already added"が発生する、という不具合に困っていました。 ようやくそれを修正できたので、…

AndroidでSSLを使う際のSecureRandomの問題点

AndroidでSSLを使うときに、 SSLContextを使うことがあるかと思いますが、 このSSLContextのinitで使えるSecureRandomに脆弱性があるらしい、という話です。出元は下記。 Some SecureRandom Thoughts | Android Developers Blogここによれば、SecureRandomは…

Low Level APIを使うことによるDatastore Read Operationsの変化

以前の記事 GAEのDatastore Read Operations - まめージェント 以降、GAEのDatastoreアクセス周りを大幅にリファクタリングしました。 今回は、JDOを使うこと前提の設計から、 Low Level APIで、極力Datastore Read OperationsやDatastore Write Operations…

Photoshopでjpgが書き出せない?

今日、小ハマりしたのでメモ。 Photoshopで画像を「別名で保存」でjpgとして書きだそうとしたら、 書き出し可能な形式にjpgがない・・・?あれ・・・? となった。 原因は、新規ファイル(ドキュメント? プロジェクト?)を作ったときのカラーモードで 16bi…

RDSとKVS

belboさんにDatastore Opsを減らすには、 QueryではなくKeyを使ってget()した方がいいよ、 というご指摘を受けよくよく考えると自分、 Keyって何なんだか、よくワカッテネ・・・。 そして、そもそもKVSとRDSの違い、よくワカッテネ・・・。 ということに気づ…

GAE上でのStaging / Production serverの切り替え

実際にサービスを公開するにあたり、GAE上で Staging server / Production serverをどうハンドリングするかについて 調べてみたのでメモ。今のところ、(やはりというべきか何というべきか)下記2つの方法がありそう 1: 同じApp IDを使い、アプリ内でIf文でS…

jpg画像の圧縮

最近のウェブサービスは(みんなTwitter bootstrapを使っているせいか)、 トップページのいわゆる「ヒーローショット」の画像が大きいかと思います。 僕も、174Kbの画像だったので、これをどうにか削減できないか、 と見つけたのが下記ウェブサービスです。…

HTMLのフォームからGAEメール送信で文字化け

仕事の方では普通、ドキュメントを英語で書いていることもあり、 今作っているサービスでも日本語であまり使ってなかったのですが、 HTMLのフォームをテストしていて、そこからメールを送信すると、 受信したメールの日本語部分が文字化けしていることに気づ…

jquery.localize.jsで多言語対応

前から対応せねば・・・と思っていた多言語対応をしました。いろいろと調べたところ、jquery.localize.jsが一番やりやすそうだったので、 今回はこちらで。1: jquery.localize.jsをダウンロード。 コチラから。 https://github.com/coderifous/jquery-locali…

GAEのDatastore Read Operations

GAEのDatastore Read Operationsの無料枠、 2014年6月末時点では0.05M (5万回)なんですが、 JMeterで負荷テストをしていて、この上限にあっという間に到達してビビったので その情報をシェア。DatastoreをQueryするときは、 だいたい下記のような感じでクエ…

JMeterのセットアップ

そろそろサーバーの負荷テストをしておかねば・・・ということで (あまりDatastore周りのクエリーをうまくできてない気がしているので)、 JMeterで負荷テスト。JMeter http://jmeter.apache.org/導入自体は非常に簡単。 1,2時間でメインとなるところは使え…

GAEの*.appspot.com上でのSSL証明書

GAEに対してHTTPS通信したい・・・ そのために、SSL証明書を用意しないと・・・と思いいろいろと調べたのでメモ。ネット上には”独自ドメインだと、証明書を用意しないといけないですよ” 的な記述はあるんですが、じゃあ普通(?)のhttps://myappname.appspo…

ChromeのDev tool / ロードに時間のかかるコンテンツ

ウェブ開発をする人にとっては知ってて当然の内容かもだけど、 ChromeのDev toolが便利。使い方は、Chromeを開いて(Macでは)[Command] + [Option] + [I]を押すだけ。今回、ウェブサイトのロード時間と、ロードするコンテンツの重さを調べたくて、 簡単にでき…

文字列にスペースがあるとJSONException

サーバ側から返ってきたJSONをAndroidでパースしているんですが、 ある日突然下記のExceptionが。 JSONException: Unterminated object at character x of x今まで何も問題なかったのに・・・と調べること15分、 どうやら文字列にスペースがあるとこのExcept…

GAEのrollback

GAEのデプロイ中にエラーが発生したり中断した際、 バージョンがどうのこうの、というエラーが発生し、デプロイができなくなることがある。そのときは、Eclipse上ではなく、ターミナルからRollbackをする必要がある。 コマンドは下記の通り。 ./appcfg.sh ro…

ローカルに保存されているpng画像をBitmapとして取得

前回の記事の続きで、今回は、 ローカルに保存されているpng画像をBitmapとして取得する方法。 public static Bitmap readBitmapData(Context context, String fileName) { Bitmap data = null; if (fileName != null) { try { InputStream inputstream = co…

Bitmapをpng画像として保存

Bitmapをpng画像として保存する方法。 public static boolean storeBitmap(Context context, Bitmap bitmap, String fileName) { if (bitmap != null && fileName != null) { ByteArrayOutputStream output = new ByteArrayOutputStream(); bitmap.compress(…

Eclipseのclean起動

Eclipseのキャッシュがおかしくなったときなど、 最終手段として使うEclipseのclean起動。 % cd /Applications/eclipse/Eclipse.app/Contents/MacOS/ % sudo ./eclipse -clean ただし、これをやるとEclipseで設定したパースペクティブ(Perspective)やビュー(…

antでのビルドエラー

ant debugで invalid resource directory nameというエラーが出たときの対処。単純だけど、binファイルを強制的に削除、その後 android update project --path .をすると解決。

Androidの自動テストで使うReflectionのUtilクラス

Androidの自動テストを書いていて、 Reflectionを使ってprivateフィールドにアクセスする機会があったので、メモ。 public class ReflectionUtil { public static <T> Object getValue(Class<T> className, String fieldName, Object targetObject) { Object resul</t></t>…

GAE上でString→Blob、Blob→Stringの変換

GAEでAndroidから渡されたStirngをBlobにしてDatastoreに格納したい、 というケースがあったのでメモ。■StringからBlob String origin = "test string"; if (origin != null) { try { byte[] bytes = origin.getBytes("UTF-8"); return new Blob(bytes); } c…