Android apk をインストールする時にerror: device offline

Androidの開発でエミュレータへapkをインストールする時は

プロンプトで「adb install apkのフルパス」を叩く

その際、「error: device offline」と表示される場合がある。

これはエミュレータから任意の端末設定を起動(自分が試したのは2.2設定)

そして画面ロックを解除してから再度コマンドを叩くと直った

CoreGraphicsでメモリがどんどん使われる

CGContextShowGlyphsAtPointを使ったアプリでleaksを使ってメモリの消費を見ていた時のこと

内部のadd_chunkという関数でmallocが使われてメモリがみるみる浪費されていく…。

どうやらGlyphs用のキャッシュ機能っぽい。

せめてある程度制御できる手段が提供されているといいんだけど、そんなメソッドもなさげ。

同じ文字を使う限り増加せず、今まで使用した事がない文字(マルチバイト文字だけかも?未調査)を渡すと

160byteと32byteあたりが増えるので、これをどうにかしたい訳だが現状ではどうにもできなさげ。

OpenAL 1つのソースで複数バッファを切り替える

1つのソースに複数バッファを割り当てて切り替えたい時は、

alSourceStop( ソースのID );
alSourcei( ソースのID, AL_BUFFER, 0 );

と停止してからバッファに0をセットして一度処理中のキューを空にする。
キューが空になってないとリークする事があるっぽい。

その後、

alBufferDataで新たに切り替えたいサウンドをセットすればよい。

セットしたサウンドはalBufferData内で別途確保されてコピー済みなのでfreeしてよい。

OSStatus -43

どうやらFileNotFoundっぽい

EclipseでGAE/Pのmemcacheがエラー扱いになる

「設定>インタープリタ-Python>強制ビルトイン」に

google.appengine.api.memcache

を追加したら直った

エンティティのインデクスを作らない時

test = db.IntegerProperty( indexed=False )

のように「indexed=False」を付与する

クラスのソート

クラスhogeがvという数値の変数を持っていて、それを元にいくつかのhogeクラスをソートしたい時

a = hoge(2)
b = hoge(1)
c = hoge(3)

list = [a,b,c]

list.sort(lambda x, y: cmp(x.v, y.v))

# list == [b,a,c]

とする

UnicodeEncodeErrorが出る

そんな時は、一度以下を試してみる。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, codecs
sys.stdout = codecs.lookup('utf_8')[-1](sys.stdout)

諸々の意味はググればすぐ出るので、それで思い出す事。

エンティティを継承するには

「db.Model」ではなく「polymodel.PolyModel」で親モデルを定義する

key_nameに全角文字

キー名は数値じゃないときは文字列型って事なので、

全角で指定とかできるのかしらと試したら、

hoge = YourEntity( key_name=u'hoge_ほげほげ' )

みたいにしても動くみたい。

まだデプロイしてないからなんとも言えないけど、開発サーバだけって可能性は否めない。

使い道あるのかな…。

まとめてput

entity1.put()
entity2.put()
entity3.put()

という処理は、

list = [entity1,entity2,entity3]
db.put(list)

とすれば、トランザクションでputしてくれるみたい。

MacのEclipse更新後に起動しなくなったとき

ターミナルでEclipseをcleanすると直った。

>eclipseのパス/eclipse -clean

1ファイルにあまり定義しない方がよい?

ダラダラとhelloworld.pyの1ファイルに、

リクエストハンドラのクラスや諸コードをやたらと長く書いてたのを、

ちゃんとファイル名も変えて整理して、細かくファイル分けしたら

レスポンスまでの体感速度が若干上がったようなのでメモ。

GAEのPython2.7用YAMLメモ

application: yourappname
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url:  /

  script: main.app


# django
#----------------------------------------------------------------
libraries:
- name: django
  version: 1.2


########################
# YAMLは以上、以下補足 #
########################


上記ハンドラは○○.appspot.com/ にアクセスが来た時main.pyで処理する設定例

main.py には以下を定義

app = webapp.WSGIApplication([('/', TopPage)], debug=True)
def main():
run_wsgi_app(app)

if __name__ == "__main__":
main()



"app"という変数にハンドラ情報入れてるので

script: 部分のファイル名は「処理したいPythonファイル名」.「ハンドラ入れた変数名」と書く

yamlのscript: にパッケージに入れてある階層内のpyを書く時

script: foo/bar/hoge.app

のようにスラッシュ区切りはダメ。

script: foo.bar.hoge.app

パッケージ指定の時と同じくここもピリオド区切り。

開発サーバかの区別

def is_local():
return os.environ.get('SERVER_SOFTWARE', '').startswith('Development')

という関数作ってどっかに入れとく。

いつまで使えるかは怪しい…。

スマホ用JavaScriptフレームワークの雑感

使って試してすごい雑な雑感。使って移行していった順。

iScroll4 … シンプルでよければこれで十分。サンプル少ない?ナビゲーションが面倒かも。

jQTouch … ナビーションアニメーションやバーも簡単に組み込める、ちょっと重い?

AppML…jQTouchとiScrollのいいとこどりだが重いのが惜しい。
動的コンテンツに対応した作りになっていないので、動的にページ内のサイズが変わるときは自前で修正が必要

Web2.0Touch…重くなくて動的ページが基本の作りなAppMLって感じ。現状これでよさそう。
標準ではタブバーのスクロールができないが自分でiScrollを足せば解決

日付プロパティを数値プロパティで代替する場合を考える

時系列系のプロパティ(DateTimeProperty、DateProperty、TimeProperty)を使わずに

他の方法で日付プロパティを表現するにはと考えた結果、

def getCurrentDate():
t = datetime.datetime.today()
if is_local() is False:
t += datetime.timedelta(hours=9)
return long(t.strftime("%Y%m%d"))

def getCurrentTime():
t = datetime.datetime.today()
if is_local()is False:
t += datetime.timedelta(hours=9)
return long(t.strftime("%Y%m%d%H%M"))

def getCurrentTimeSec():
t = datetime.datetime.today()
if is_local() is False:
t += datetime.timedelta(hours=9)
return long(t.strftime("%Y%m%d%H%M%S"))

みたいな数値をIntegerPropertyで持つくらいしか思い浮かばず。

(時間を足している所は、開発サーバじゃない時に日本時間に直す…つもりで書いたもの)

素直にdate系使ってても特に問題はないので、意味のない妄想であった。