Alexのぶろぐ

programming/scala/play!/php/javascript/three.js/unity/xcode5/rails/rubymine メモ用です

Play! scala でテンプレートごとに読み込むcssを変える方法

ページごとに読み込むcssを変えたい場合どうしたらいいのかわからなかったのでメモ

とりあえずとった方法は
main.scala.htmlにて

一番上の引数の部分を

@(title: String,assets: List[String])(content: Html)

にする
→assetsというリストを引数にとる

<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/style.css")">

とかかいてあるところのすぐ下に

@assets.map { asset =>
          <link rel="stylesheet" media="screen" href="@routes.Assets.at(asset)">
        } 

って書く。
つまり配列でmain.scala.htmlにそのテンプレートで使いたいファイルを渡してあげる

んで、各viewのテンプレートhoge.scala.htmlのmainを呼び出す箇所にて呼びたいcssを記述してあげる

@main("Welcome to Play",List("stylesheets/login.css","stylesheets/hoge.css")) {
   //中身
}

みたいな!!!

とりあえずリストでmain.scala.htmlにファイル名だけ渡してループさせているのですが、
もっとちゃんとしたやり方があればご教授ください。。。

play! scala でiosのpush通知を実装する

play! scalaでapnsを通してiosデバイスにpush通知を実装しまする

ということで証明書関係やとりあえずphpで通知するまでの手順は

iOSでプッシュ通知を実装する方法の超詳細まとめ(前編) | Lancork
ここがめっちゃ詳しかったのでここでやりました。


で、どうやってscalaに書き換えるのかというところから。

下準備

先ほどのリンクで取得した

Apple Production IOS Push Services
・Entrust.net Certification Authority (2048)

の二つのファイルを一つのp12ファイルにします

やり方はキーチェーンで2つの項目を選択した状態から右クリックで「2個を
書き出す」でひとつのp12ファイルにすることができます。

中身

んで、build.sbtファイルに

"com.notnoop.apns"%"apns"%"0.1.6"

との記述をする

そしたらあとはもう簡単

プッシュ通知を実装したい箇所で

//さっき作ったファイルのパス
val APNSCertPath = "/path/to/sakki/tukutta/p12/file"
//さっきつくったファイルのパスワード
val APNSCertPassword = "password"
//APNSオブジェクト生成
val service = APNS.newService
      .withCert(APNSCertPath, APNSCertPassword).withSandboxDestination.build
//プッシュ通知内容詳細
val payload = APNS.newPayload.alertBody("pushpushpush!!!doyaaaaaa").badge(1).sound("default").customField("name", "neel").build
//デバイストークン
val token = "<<<<<<<<<<<<<<<<<<<<<<Device Token kaitene>>>>>>>>>>>>>>>>>>>>>>"
val notif = service.push(token, payload)

最後に、APNSのライブラリをちゃんとインポートするのを忘れずに!

import com.notnoop.apns.APNS;
import com.notnoop.apns.ApnsService;

ああとちゃんと依存性のやつをインストールするのも忘れずに!

Unity メモリのせいでアプリがクラッシュした時の対応

シーン移動時にメモリがなくなっておちたよというxcodeの表示とともにアプリがクラッシュ

 

いろいろ調べた結果、シーン遷移前のシーンでのメモリ消費が激しすぎて新しいシーンを読み込むとメモリがオーバーするという現象に陥ってる模様

→読み込める時と読み込めない時があり、読み込める時は前のシーンのオブジェクトが少なかったことから考察

 

Unity側が全部勝手に勝手にやってくれるとの記述を信じていたがそうでもない(勉強不足なだけ?)ので、どうしてもメモリのせいでアプリが落ちてしまう場合はシーン間にクッションのシーンを置けば解決できるのではという解決方法

 

つまり、

シーンA(メモリ消費大)→シーンB

でアプリが落ちていたのにたいして

シーンC(メモリ消費小)→シーンB

では落ちていなかった。このことから間にメモリの消費が少ないシーンを間にはさむ↓

シーンA(メモリ消費大)→クッションシーン→シーンB

ことでいけるのではという仮説

 

結論としてはクラッシュせずに読み込めたが、シーンを読み込む時間が長くなってしまった。

 

アセットストアから購入するのではなく、アプリに最適化されたアセットが欲しい、、、

 

mysqlで on duplicate key update を使うときの注意

mysql で on duplicate key update を使うときはユニークなキーにする値をカラムのオプションでuniqueに設定しないとだめ

 

ユニークな値として指定しているカラムがない場合には

alter table テーブル名 change カラム名 カラム名  カラム情報 unique;

とやらないとだめ

 

alter table User change uuid uuid varchar(64) unique;

など

unity ゲームオブジェクトをFindできないときの注意

GameObject.Find("hoge")

ってやるときにFind("")はダブルクオーテーションじゃないといけないらしい

理由はよくわからない

シングルクオーテーションにしたらエラーがでたので、Findするときにエラーがでたらシングルクオーテーションになってないか確認する

unity NGUIのUIButtonをdisabledにする

GameObject名.GetComponent<UIButton>().isEnabled = false;

 

これでdisabledになるのでボタンを押したら色をかえたい時などは便利

こんな簡単なのでもC#のプロパティをうまく使いこなせてなくてちょっと詰まった