Skip to content

Instantly share code, notes, and snippets.

View kaiinui's full-sized avatar

kaiinui kaiinui

View GitHub Profile
@kaiinui
kaiinui / howtousedeferredtask.md
Created April 13, 2015 16:13
AppEngine の DeferredTask

DeferredTask とは

TaskQueue を、URL ハンドラの実装なしに使える便利クラスです。

通常、TaskQueue は指定された URL を叩いて Task を実行します。 この挙動は厳密な設計には便利ですが、Task の種類の数だけ URL を制御しなければなりません。 新たにルーティングを設定し、新たにコントローラメソッドを実装する必要があります。

これらを廃し、より気楽に使えるようにしたのが DeferredTask クラスです。 必要な要素はたった一つ、DeferredTask interface (#run のみ) を実装したクラスのみです。

@kaiinui
kaiinui / GcmHelper.java
Last active August 29, 2015 14:19
雑に gcmHelper.onCreate 呼ぶだけでよしなにやってくれるやつ。
package co.kotori.grumbler.utils;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.util.Log;
@kaiinui
kaiinui / GCSの設定.md
Created April 9, 2015 05:29
GCSの設定
  1. Default Permission を設定する
  2. ロギングを設定する

To enable Logging

Write パーミッションをつけ、logging を set on する。以上。 Writer にするのは cloud-storage-analytics@google.com

  1. gsutil acl ch -g cloud-storage-analytics@google.com:W gs://my_logs
@kaiinui
kaiinui / BundleUtils.java
Created April 6, 2015 13:14
BundleUtils.java
public class BundleUtils {
public static String toString(Bundle bundle) {
final StringBuilder sb = new StringBuilder("Bundle: \n");
final Set<String> keys = bundle.keySet();
final Iterator<String> it = keys.iterator();
while (it.hasNext()) {
final String key = it.next();
final Object obj = bundle.get(key);
// #{KEY} : #{VALUE} (#{TYPE})
sb.append(key).append(" : ").append(obj).append(" (" + obj.getClass().getSimpleName() + ")").append("\n");
@kaiinui
kaiinui / AppEngine+Slim3のbuild.gradle
Last active August 29, 2015 14:18
appengine+slim3+IntelliJ IDEA の build.gradle
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'war'
apply plugin: 'appengine'
sourceCompatibility = 1.7
version = '1.0'
def slim3Version = "1.0.+"
def appengineVersion = "1.9.18"
@kaiinui
kaiinui / GAEの管理機能.md
Created April 3, 2015 14:34
GAEの管理機能
@kaiinui
kaiinui / android.md
Created March 27, 2015 14:39
Facebook Mobile SDK について

LikeView

  • Web の Like をそのまま Mobile Apps にもってきた感じ。

  • ボタンを押すと Facebook アプリに飛ぶ。(そのためログイン不要)
  • 「いいね」を押すと、いいねがなされ、アプリに戻る。

@kaiinui
kaiinui / appengine.md
Last active November 10, 2017 02:31
AppEngine の BlobStore の createUploadUrl() と getServingUrl()
  1. BlobStoreService#createUploadUrl(String) でアップロード用の URL が作られる
  • URL は https://{id}.appspot.com/_ah/upload/XXXXXXX みたいな
  • multipart/form-data でバイナリを送る。キーは自由だしいくつも送ってもいい。
  • AppEngine は、リクエストがインスタンスに来る前に全てのバイナリを BlobStore にため、バイナリを除いたリクエストを createUploadUrl(String) に渡した URL にフォワードする(インスタンスに負荷無い)
  • フォワードされたリクエストからは、getUploads() で Map が取得出来る。Map のキーはマルチパートのキーであり、値は BlobKey である
    • フォワード先のレスポンスをクライアントにそのまま返す。(Status, Body, Header)
    • 400 番台とかだと失敗してるはずだが別にリトライして叩いたりはしない。
  • アップロードセッションはそのうち切れる。多分10分くらい。 400 Bad Request となる。
  • 同じアップロード URL で何回でもアップロードでき、ファイルも上書きされる事は無い。
  • でも、ローカルだと何故か出来ない。(404 Session Not Found となる)
@kaiinui
kaiinui / eventbus.md
Last active March 3, 2017 03:54
Android開発いろいろ

EventBus

EventBus は必ず onStart()onStop() で呼ぶ。バックグラウンドで色々動かれて困る。 また、onStop() では super.onStop() よりも 先に 呼ぶ。

@Override
protected void onStart() {
 super.onStart();
<a href="intent://hoge/#Intent;scheme=huga;package=com.kaiinui.Training;end">Limk</a>