2013年10月20日 星期日

使用PhpConsole Debug

使用PhpConsole可以直接在Browser的console上
如同對JavaScript做 debug資訊顯示

一.安裝
1.安裝PhpConsole 的 Chrome Extension
https://chrome.google.com/webstore/detail/nfhmhhlpfleoednkpnnnkolmclajemef
2.下載PhpConsole Class
http://code.google.com/p/php-console/downloads
在web server自己找地方放(例如放在includes目錄下)

二.使用
require_once '../includes/PhpConsole.php';
PhpConsole::start();
$data = 'hello debug';
debug($data);

三.注意
debug接的值為string
若$data為array or object
要用
debug(var_export($data,TRUE));

2013年10月15日 星期二

由Bitbucket deploy到Linode

當你將程式碼放到bitbucket或github上
要做source code deply除了可以透過CI來做自動deploy的工作
也可以利用git上所提供的git功能來做自動deploy
其原理很簡單
就是在你的server上也clone一份你的repos資料
當有人做commit push時,Server上的repos會自動pull最新的回來
就達到自動deploy的工作
以下是需要的工作

1.Server需要安裝git環境
因為是需要透過git pull去把code拉到Server上,會需要安裝git環境
ubuntu:
sudo apt-get install git-core
opensuse:
sudo zypper install git-core

2.建立Web 可以操作的 SSH Key
通常產生ssh key都會是建立在使用者的自己所在的
.ssh目錄下,
但因為要執行git command會是經由web page進來的
所以所建立的ssh key必須是要以web user的身分所建立
apache server進來的web user身分
ubuntu:www-data
sudo -u www-data ssh-keygen -t rsa
opensuse:wwwrun
sudo -u wwwrun ssh-keygen -t rsa
產生的key
ubuntu是在
/var/www/.ssh/
opensuse是在
/var/lib/wwwrun/.ssh下

3.設定Deploy Key
在Bitbucket上的repos設定
在Deploy key加上產生的key pub
使用Deploy Key 只能pull不能push

4.clone repos到server上
要clone repos到server上,先將使用者身分切換到web user
所clone下來的東西擁有者就會是web user,就可以允許透過
web page操作這些資料
ubuntu:
su www-data
git clone xxx

opensuse:
sudo -u wwwrun -s
git clone xxxx

5.寫git pull script
可以用一個script放到server上
例以下是以php寫的sample
http://brandonsummers.name/blog/2012/02/10/using-bitbucket-for-automated-deployments/

6.設定hook
到bitbucket上,設定加入一個POST Hook
只到上面所寫的script路徑即可

2013年10月10日 星期四

屏東

上禮拜 到台中開會 結束後
也順道回家一趟
平常日的客運票價 遠低於高鐵
在沒有時間壓力下 其實還蠻好的
中正交流道 下車
就直接走路回家

騎車去屏東
難得享受 台北生活所沒有的自在
一路上 隨走隨停
終點 是老媽煮好了飯在等著我
萬巒豬腳街就是這裡



萬巒先帝廟

萬金聖母教堂



2013年9月2日 星期一

Memo About StreetVoice

關上電源的這一刻
也是結束 在StreetVoice 五年的時光

還記得在某一天的下班後
騎著車來到國父紀念館旁的一個小巷子裡
StreetVoice所在的舊公寓
就在以前魔岩不遠處

跟主管談一下技術聊一下發展
聽說 老闆想跟我談一下

我所熟悉 著迷的中國火 唐朝
那幾年所燃起燎原般的中國搖滾革命
站在我眼前這位高壯滿臉鬍子的中年男子
參與了這一切

聽他聊起 唐朝 張楚他們演唱會的許許多多
這些只能在唱片裡聽到的聲音
彷彿又更靠近了我一些
談到他的理想
談到他想要的未來

是的 老闆是可以點燃你的熱血
如果你的血液的還有一點搖滾的因子

五年的時間
環境在變  人也在變
當時的幾個單身男子 現在都變成了爸爸

It's Time to Say GoodBye

2013年8月12日 星期一

Wild one

每到了生命的轉折點
總會有一些音樂
有一段時間 聽完了所有的Savatage
然後在一次的失戀後
買了一張又一張的Neil Young

最近一直聽著Thin Lizzy
也許在未來的日子
想起現在的這段時光
就是那一首一首的音樂


讓 IE可以 在CoffeeScript 取得 Class Name

以CoffeeScript寫Class要取得Class Name
通常可以用
@constructor.name
取得
但 IE並不支援JS裡的 function.name
所以可以改以
@constructor.toString().match(/^function\s(.+)\(/)[1]

2013年7月30日 星期二

離家 是冒險,回家 也是冒險

當年離家 到台北 才20幾歲
不知道自己能做什麼 只是懷著滿腹的理想
來到這裡

40多歲了
想回家了 真的想回家了
這回家的路 遙遠又漫長

離家 是冒險
回家 也是一場冒險
謝謝 老婆可以給的支持
希望一樣 都可以 順利
加油 歐吉桑 !!

2013年7月11日 星期四

object is not a function 解法

當以物件型態定義一個物件或類別
可能會發生物件內的function被誤判為object
若改以
Obj.prototype.myMethod=function()
即可解決
更方便的作法是
利用CoffeeScript的Class定義來設計物件Class
更快更沒問題

2013年6月24日 星期一

回家的路

禮拜六去台中跟朋友聊了一下午
許多人 在40歲過後
想要的 不過只是要
找到那條 可以回家的路

1988 蔡淳專輯裡的歌裡面是這樣寫的

很小的時候我們的心就離開了家
它不知要去找什麼 也不知身在何方

它說不要管我 它說我自有主張
漸漸地它忘了它來自什麼地方

不知是從什麼時候開始的現象
我們總是喜歡說家不是我的家
就在把回家的地圖丟掉的時候
口袋裡唯一的指南針也被偷走

回家的路還很長 回家的路還很長
你是否知道家的方向 回到你該去的地方

2013年6月19日 星期三

Requirejs使用變數動態載入Module

要使用變數儲存動態載入路徑
一定要使用callback處理

switch layout
    when 'case1'
        _path= '_v/View1'                    
    when 'case2'                            
        _path= '_v/View2'                                
    else
        _path= '_v/View3'
require [_path],(View)=>                                
    view= new View
        el:'#container'                    
    @dispatchEvent 'ready'

2013年3月20日 星期三

避免require js被browser cache

在使用RequireJS的Project上,若要讓所相依的JS每次都要讀取最新檔案
不被Cache,可以在Main.js的config內加入參數
urlArgs: "ver="+new Date().getTime()
則內部所有相依性的js檔案都會被統一在載入路徑後加入一個動態參數避免被Cache

而若要讓Main.js不被Cache則需在載入main之前
先加入一段
var require = {
  urlArgs : "v="+new Date().getTime()
};

Backbone.js model執行fetch可設定的options參數

Backbone的model在做fetch取資料
可以另外傳入options 選項
options是一個物件
可包含的設定值
就是jQuey ajax的設定值
都可以用

2013年3月12日 星期二

Elicpse minified js Error

使用Elicpse Build PhoneGap Project
assets內的js檔案若是經過minified處理過
會觸發error的錯誤而無法build
可透過以下設定去除不必要的Error讓Project可以繼續
1.在Project上開啟Property
2.Project Properties > JavaScript > Include Path > Source
3.選擇Excludsion/Edit
4.選擇要排除的目錄或檔案

2013年3月1日 星期五

BackboneJs Collection Sort 排序

BackboneJs Collection 排序
在Backbone若需要用到排序功能
使用Collection來對資料排序,速度會比自己另外寫演算法還要快很多
注意事項
1.資料需儲存在Collection內的models
2.設定comparator
建議使用underscore的sortBy方式來設定comparator
sortBy的設定方式是
所設定的funcion會有一個model物件,要依照model物件的哪個屬性做排序
就回傳那個要比較的值就可以了
如果要做多種不同屬性的sort
可由外部設定一個sortType帶入,依照sortType切換即可

@collection.comparator=(_model)=>
  switch @sortType
    when 'name'
      _model.get('songName')
    when 'artist'
      _model.get('artistName')
    when 'album'
      _model.get('albumName')    
3.設定監聽 當排序完成會被觸發

@collection.comparator=(_model)=>
  switch @sortType
    when 'name'
      _model.get('songName')
    when 'artist'
      _model.get('artistName')
    when 'album'
      _model.get('albumName')    
4.執行排序
@collection.sort()

2013年2月26日 星期二

HTML5 Audio 資料載入同時播放問題

要做html5 auduio播放
若要載入資料後,依照資料內設定的audio檔案做立即audio播放
則在第一次的資料載入需採用同步
之後則都必需以非同步方式載入資料
因為
若第一次不採用同步載入資料
在PC上載入資料後可自動播放歌曲
但在iOS上載入資料後並不會自動播放

若之後取得資料仍採用同步載入
則無法做連續歌曲自動播放


isInit=true
loadSongData=function(){
    var _async=true
    if(this.isInit){
        this.isInit=false
        _async=false
    }
    _item.fetch({
        success:function(data){                                
            loadSong(data);
            
        },
        async:_async
    })
}