2013-07-24

Bingo Hits 上架

Bingo Hits 賓果嘻打

Bingo Hits 賓果嘻打Bingo Hits 賓果嘻打

賓果嘻打是一款線上和朋友一起玩的賓果遊戲。透過地理位置偵測,可以讓幾個人一起玩賓果。

至少要有兩個 iOS 裝置才可以一起玩。

1) 首先,先讓一個朋友點選「主持人建立遊戲」,建立遊戲室。
2) 接著,其他朋友點選「加入遊戲」,並選擇遊戲室。
3) 主持人將玩家加入遊戲室,完成後開始遊戲。
希望這個遊戲可以為朋友之間帶來更多樂趣。



2013-07-23

Yii 筆記 2 (CRUD)

在 MySQL 建立資料庫和資料表。資料庫連線設定在 protected\config\main.php 的 application components 內,將其設定為 MySQL。

使用 gii 的 Model Generator 建立 Model 檔,欄位填入 Model 類別名及對應的資料表名稱。

使用 gii 的 CRUD Generator 建立 CRUD,欄位填入 Model 類別名及欲新增的 Controller ID。建立之後,新增一個 Controller 類別檔,並在 View 的子目錄裡新增數個 View 內容檔。

表單欄位驗證設定位於 Model 類別的 rules() 方法裡。格式:
array('屬性列表', '驗證器', ...其它設定選項);

驗證器:
boolean:  CBooleanValidator, 布林值 true 或 false。
captcha:  CCaptchaValidator, 圖形驗證碼。
compare:  CCompareValidator, 判斷兩欄位的值是否相等。
email:    CEmailValidator, 有效的 e-mail address。
date:     CDateValidator, 有效的時間值。
default:  CDefaultValueValidator, 是否為預設值。
exist:    CExistValidator, 在資料表中是否已存在。
file:     CFileValidator, 檔案欄位。
filter:   CFilterValidator, 使用 filter 轉換。
in:       CRangeValidator, 某範圍的值。
length:   CStringValidator, 限定資料長度。
match:    CRegularExpressionValidator, 符合某 regular expression。
numerical:CNumberValidator, 數值。
required: CRequiredValidator, 必填欄位。
type:     CTypeValidator, 特定類型的資料。
unique:   CUniqueValidator, 資料表中的唯一資料。
url:      CUrlValidator, 有效的網址格式。

2013-07-21

Yii 筆記 1 (建立 webapp)

下載 yii 並解壓縮到 web server 的 DocumentRoot。以 Yii 的 requirements 檢查環境是否符合需求 http://localhost/yii-1.1.13/requirements/

利用 yiic 建立 webapp
c:\wamp\www\yii-1.1.13\framework>yiic webapp .\..\..\yiitest01

建立的 webapp 並沒有包含 Yii framework, 可以將 c:\wamp\www\yii-1.1.13\framework 複製到 yiitest01/ 裡。然後修改 index.php 裡 $yii 的 framework 路徑。

到 protected/config/main.php 開啟 gii module 設定
 'modules'=>array(
  'gii'=>array(
   'class'=>'system.gii.GiiModule',
   'password'=>'密碼',
   // If removed, Gii defaults to localhost only. Edit carefully to taste.
   'ipFilters'=>array('127.0.0.1','::1'),
  ),
 ),

連到 http://localhost/yiitest01/index.php?r=gii 輸入密碼後,可以看到 gii 預設的功能選單,包含:Controller Generator、Crud Generator、Form Generator、Model Generator、Module Generator。

點選 Controller Generator,在 Controller ID 欄填入 message,Action IDs 欄填入 hello(預設為 index),接著按 "preview" 按鈕,將產生兩個檔案:
controllers\MessageController.php
views\message\hello.php
點按 "Generate" 按鈕,以產生檔案。

點按 "try it now" 時,由於沒有 index action 所以會得到 404
http://localhost/yiitest01/index.php?r=message    // 得到 404
http://localhost/yiitest01/index.php?r=message/hello    // 得到正常頁面

查看 MessageController.php
class MessageController extends Controller
{
    public function actionHello()
    {
        $this->render('hello');
    }
}

也可以設定某個 action 為 default action
public $defaultAction = 'hello';

在 View 裡,變數對應的關係:
$this    // controller object
$this->id    // controller id
$this->action->id    // action id
echo CHtml::link('連結字串', array('控制器/動作')); // 顯示連結

2013-07-17

AIR 3.8 for iOS 載入外部 SWF

依據官方說明文件 Loader.load() 「在 iOS 上,您無法載入包含任何 ActionScript ByteCode (ABC) 的 SWF 檔案」,但這是舊版的說明。

AIR 3.6 for iOS 較早版本可以載入 SWC,3.7... 3.8... 為了求真相,以下直接用 AIR 3.8.0.820 for iOS, iPhone 實機,MC Graphics API 做測試。

1) 把 SWF 一同打包到 ipa 裡時 (相同 Application domain),使用文件上的
var loaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null);
loader.load( new URLRequest('app:/easy_draw.swf'), loaderContext );
SWF 裡的 AS 可以正常執行 (所有東西不用再包成一包 SWF 了, 泣...)

2) 載入 Application domain 以外的 SWF (放在網路上測試),動畫可以正常播放,裡面的 AS 不會 (不能) 執行。

3) 雖然 Application domain 以外的 SWF 裡不能執行 AS,有趣的是載入後 loader.content 是個 MovieClip,而且 MC 的所有屬性都可以用,可以使用 addEventListener() 去偵聽,也可以使用 mc.addFrameScript() 設定 frame actions。而且有命名的子物件,也可以控制。


AIR 到 3.8 (目前還是 beta) 已經可以載入外部的 SWF 並執行,只是因為安全性的問題,依然不讓非 Application domain 的 SWF 執行 AS。希望之後可以開放這個限制,而採用和 AIR for Android 的安全機制,讓我們拭目以待。

Adobe Gaming SDK 1.1 的 SocialUI ANE 有臭蟲

Adobe Gaming SDK 1.1 的 Social.ane 有臭蟲, 根本不能用, 官方論壇也有人問到這個問題, Adobe 終於有人跳出來給了個正常的 ANE.

論壇討論: SocialUI.isSupported always returns false

可正常執行的 Social.ane

SocialUI 提供三種社群的貼文工具: Facebook, Twitter, Weibo。為什麼是這三種? 主要應該是和 iOS 有合作的就這三種,你可以在 iOS 的設定看到她們是一組的。

SocialUI 的功能並不是直接貼文,而是透過 OS 去叫喚社群的 App 來貼文。所以用戶必須安裝那三種社群 Apps,沒裝的話會提醒安裝。Facebook 的貼文也不用建立 FB App 就可以運作,當然這種貼文訊息也就沒有標註 FB App(及其連結)。

2013-07-14

使用 pm2 做 Node 行程管理

用 Nodejs 寫了個小 server,但掛點機會太高,所以用 forever 做行程管理,但偶爾還是會有連不上的情況。

原本想找出問題出在哪(記得安裝 forever 時就出現過版本不支援的情況),結果看到這篇「告别node-forever,拥抱PM2」,索性就把 forever 換成 pm2 跑跑看,目前還算 OK,希望就這樣保持下去 :-D。

pm2 專案位於 https://github.com/Unitech/pm2

2013-07-12

Google Text-To-Speach

Google translate 的 TTS, 英語是女聲, 例如:
http://translate.google.com/translate_tts?ie=UTF-8&tl=en&q=Nice%20to%20meet%20you

國語也是女聲, 例如:
http://translate.google.com/translate_tts?ie=UTF-8&tl=zh&q=%E6%9E%97%E6%96%B0%E5%BE%B7,%E4%BD%A0%E5%A5%BD

Google dictionary 的服務則是男聲, 但只能發英語單字音, 例如:
https://www.gstatic.com/dictionary/static/sounds/de/0/cheer.mp3

免費的 AdMob ANE for iOS

Update 2013-07-17: 這個 ANE 是 Non-PIE Binary... 殘念...

在 Native Extensions for AIR 找到 AdMob ANE for iOS
作者的 blog 介紹 Adobe Native Extension - AdMob
說明文件

Blog 內容裡的用法是舊的,使用方式請看它的說明文件。

Android/iOS 通用版 ANE 在 http://www.enriquedavid.es/admob-native-extension-para-ios-y-android.html

2013-07-08

Feathers ui 使用裝置字型

之前提到 Feathers components 的字型 的問題,用了一陣子之後發現她內部提供的 embeded 字型好用,但只有英文字型。

其文件中載明最好使用 bitmap fonts;在效能上 bitmap fonts 最好,embeded fonts 次之,device fonts 最差(呈現出來的效果也最差)。但許多時候,難免會用到英文以外的字型,用 device fonts 是最好的解法。

在 iPhone 上由於 retina resolution 的關係,device font 沒有反鋸齒,效果也不會太差。但 Feathers ui 並沒有一個設定可以由預設的 embeded fonts 直接改用 device fonts。我自己的做法是複製 MetalWorksMobileTheme.as 另存成 MetalWorksMobileThemeDeviceFont.as,直接修改 MetalWorksMobileThemeDeviceFont 類別的內容。

把 regularFontNames 改成我要的 device fonts
const regularFontNames:String = "Heiti TC Light,Heiti SC Light,微軟正黑體,_sans";

接著把所有的
.embedFonts = true;
改成
.embedFonts = false;

字型呈現在 iPhone 上算 OK,但感覺是有點暴力的解法 :P

Installing node.js on Fedora 17 using nvm

參考 https://github.com/creationix/nvm 的作法
先安裝編譯用的工具, 原則上只要 gcc-c++ 即可, 其它工具則是用原碼安裝或 git 安裝時需要
yum install gcc-c++ make openssl-devel
yum install git
執行 .sh
curl https://raw.github.com/creationix/nvm/master/install.sh | sh
完成,重開 console 就可以開始使用 nvm

另外,在 console 裡查看 process 狀態 ( nodejs 執行的 process )
# ps -aux
停止某 process
# kill #pid
常駐 nodejs 程式可以使用 forever
npm install forever -g #全域安裝
forever start $js_path #開始執行程式
forever list           #列出目前執行的程式訊息 (包含 log 檔路徑)
forever stop $id       #停止執行程式,$id 為 forever 對程式的編號,由 0 開始
forever restart $id    #重新執行程式
forever cleanlogs      #清除所有 log

2013-07-03

Shadow Maze 和 Shadow Maze 3D 上架


Shadow Maze 是一款簡單的平面迷宮遊戲, 裡面放了 iAD 廣告並使用 In-App Purchase 的功能。
這個 app 上架等了三週, 第一次因為分類設定為 kids 在 review 的前一天修改了分類別, 再多等六天才能 review。
接下來 review 被 reject 一次, 因為使用 Non-Consumable 的 In-App Purchase 規定要放 restore purchase 按鈕。



Shadow Maze 3D 是將 2D 的版本利用 Away3D 套上 3D 的效果, 容易頭暈的玩家請小心服用。3D 的版本送 review 的時間晚 2D 版本約一週, 同樣是 Non-Consumable 的 In-App Purchase 沒放 restore purchase 按鈕被 reject 一次, 所以兩個 Apps 同時上架。


自己裝了之後發現 iAD 沒有正常顯示, 不知道是不是又踩雷了, 再查查...
沒廣告也是大放送啦 XD

FB 留言