2010年5月26日水曜日

携帯、特にAUとかでFlashのLoadVariables使うときの注意

携帯のFlash Liteの実装適当すぎ
マジしねばいいのに

クロスドメインでLoadVariablesするときの注意

crossdomain.xmlの注意点



サーバーのルートに置きましょう
その時、返すContent-Typeは、
http://www.adobe.com/jp/devnet/articles/crossdomain_policy_file_spec.html#introduction
の推奨する
Content-Type: text/x-cross-domain-policy
には絶対にしてはいけません。
これにしてしまうと、AUが認識しません。
text/xmlやapplication/xmlなどにしておきましょう。

loadvariablesへの応答を返すときの注意点



応答を返すときのContent-Typeは
http://livedocs.adobe.com/flash/9.0_jp/main/wwhelp/wwhimpl/js/html/wwhelp.htm?href=Part15_FL1_ASLR_1.html
の推奨する
Content-Type: application/x-www-form-urlencoded
には絶対にしてはいけません。
AUが認識しません。
text/plainにしておきましょう。

loadvariables実行時の注意



loadvariablesの第3引数に"GET"の指定は必要なければやめましょう
これをつけてしまうとリクエストのGETパラメーターに、第2引数で与えているフレームの変数全てがつけられてしまいます。しかも、AUだと第一引数にすでにGETパラメータが入っていても?でパラメータをくっつけるのでおかしなことになりかねません

@Flash

kudo = "wahoo"
misuzu = "gaogao"
loadvariables("loadvariables.txt?cache=2",_root,"GET")

とした場合

@AU
loadvariables.text?cache=2?kudo=wahoo&misuzu=gaogao

とかになるので場合によってはおかしなことになります。

2010年5月12日水曜日

JavaのString.formatいろいろ

String.formatによる書式指定覚書

基本

String.format("本日は%sなり%s","晴天","!");
//本日は晴天なり!



進数を変える
//16進数
String.format("%x",12);
//c
String.format("%X",12);
//C

//8進数
String.format("%o",12);
//14


桁区切りにカンマ
String.format("%,d",10000);
//return 10,000


桁数を合わせて、足りない桁は0詰め
String.format("%04d",1);
//0001
String.format("%04d",23);
//0023


小数を指定の小数点以下の桁まで表示する
String.format("%.2f",0.1);
String.format("%.2f",0.0002);
String.format("%.2f",100.0);
//0.10
//0.00
//100.00


インデックスを明示
String.format("%2$s %1$s %2$s","1番","2番");
//2番 1番 2番

2010年4月8日木曜日

LiftでUTF-8以外のレスポンスを返す

現在のLiftは、テンプレートのレスポンスを強制的にUTF-8で返してしまうので、
Shift-jis等の他の文字エンコーディングでレスポンスを返したい場合の方法を紹介

とりあえず、今回はLiftRules.responseTransformersを使用して、NodeResponseの文字エンコーディングを変更する方法紹介します。

1. Responseの定義

import net.liftweb.http.{LiftResponse,InMemoryResponse}
import _root_.scala.xml._
import net.liftweb.util.AltXML

case class MyXHtmlResponse(out : Node,encoding : String) extends LiftResponse{

def xmlDeclare = "\n"

var headers :List[(String,String)] = List()

var code = 200


def toResponse = {

val sb = new StringBuilder(64000)

sb.append(xmlDeclare)

AltXML.toXML(out, _root_.scala.xml.TopScope,
sb, false, false, false)

sb.append(" \n ")
val ret = sb.toString

val h : List[(String,String)] =

("Content-type","application/xhtml+xml;charset=" + encoding) :: headers.filter {
h => h._1.toLowerCase != "content-type"
}

InMemoryResponse(ret.getBytes(encoding), h, List(), code)
}


}



XmlNodeResponseなどは、現在の時点では文字エンコーディングがUTF-8直書きとなっているので、独自に文字コードを変えられるResponseを作成。(なお、ガラケー向けに作る途中のものなので、Cookieなどは無視してます。)

2. Responseの変換メソッドを定義

def convertResponse(response : LiftResponse) : LiftResponse = {
response match {
//
case r : NodeResponse => {
MyXHtmlResponse(r.out,"shift-jis")
}
case _ => response
}

NodeResponseの時のみ変換を行う。

3. 変換メソッドを登録

//Boot時に行う
LiftRules.responseTransformers.append(convertResponse)



Return none utf-8 response with lift framework.

2010年3月23日火曜日

Mavenでその辺に落ちているJarをローカルレポジトリーにインストール

Mavenでその辺に落ちているJarをローカルレポジトリーにインストールする方法

mvn install:install-file -Dfile={filename} -DgroupId={groupId} -DartifactId={artifactId} -Dversion={version} -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true