//定義Constant
define( CONSTANT_1 , 'value1' ) ;
define( CONSTANT_2 , 'value2' ) ;
define( CONSTANT_3 , 'value3' ) ;
//動態調用
echo constant( 'CONSTANT_' . 1);
echo constant( 'CONSTANT_' . 2);
echo constant( 'CONSTANT_' . 3);
這個方法適用在常數,若要動態取變數,請參閱
http://subocheng.blogspot.tw/2013/11/php-dynamic-variable-names-in-php.html
2013年11月21日
2013年11月15日
base 64 string encode online
這一個用JavaScript寫的base 64 轉換的程式,方便大家使用,
至於程式寫法,可參閱下面這一篇文章。
http://subocheng.blogspot.tw/2013/11/javascript-base64-encode.html
Source String
Base 64 String
至於程式寫法,可參閱下面這一篇文章。
http://subocheng.blogspot.tw/2013/11/javascript-base64-encode.html
Source String
Base 64 String
javascript base64 encode
/**
*
* Base64 encode / decode
* http://www.webtoolkit.info/
*
**/
var Base64 = {
// private property
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
// public method for encoding
encode : function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = Base64._utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
}
return output;
},
// public method for decoding
decode : function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = this._keyStr.indexOf(input.charAt(i++));
enc2 = this._keyStr.indexOf(input.charAt(i++));
enc3 = this._keyStr.indexOf(input.charAt(i++));
enc4 = this._keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
output = Base64._utf8_decode(output);
return output;
},
// private method for UTF-8 encoding
_utf8_encode : function (string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
}
else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
}
else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
},
// private method for UTF-8 decoding
_utf8_decode : function (utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;
while ( i < utftext.length ) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
}
else if((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i+1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
}
else {
c2 = utftext.charCodeAt(i+1);
c3 = utftext.charCodeAt(i+2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return string;
}
}
*
* Base64 encode / decode
* http://www.webtoolkit.info/
*
**/
var Base64 = {
// private property
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
// public method for encoding
encode : function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = Base64._utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
}
return output;
},
// public method for decoding
decode : function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = this._keyStr.indexOf(input.charAt(i++));
enc2 = this._keyStr.indexOf(input.charAt(i++));
enc3 = this._keyStr.indexOf(input.charAt(i++));
enc4 = this._keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
output = Base64._utf8_decode(output);
return output;
},
// private method for UTF-8 encoding
_utf8_encode : function (string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
}
else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
}
else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
},
// private method for UTF-8 decoding
_utf8_decode : function (utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;
while ( i < utftext.length ) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
}
else if((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i+1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
}
else {
c2 = utftext.charCodeAt(i+1);
c3 = utftext.charCodeAt(i+2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return string;
}
}
另外一種利用PHP寫排程的方法
這是一種非正規的方法。
我的目的是要系統定時去執行一段PHP的程式碼,幫我同步一些資料到Memcache內,方便使用者可以快速的讀取資料。
過程中我需要用到Web Server的一些Memcache特性,因此我需要定時去執行一個URL。
1. 首先用PHP寫一個程式,並放到Web Server下。
例如:http://127.0.0.1/testSync/Sync.php
2. 另外寫一個AutoRun.php,放到D:\test\AutoRun.php
<?php
set_time_limit(1200); //設定該Function最多只能執行20min
//Do Sync
$url = "http://127.0.0.1/testSync/Sync.php";
$ch = curl_init ($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$returndata = curl_exec ($ch);
curl_close($ch);
?>
3. 寫一個bat檔案,裡面的內容如下:
"C:\Program Files (x86)\PHP\php.exe" "D:\test\AutoRunSync.php"
我的目的是要系統定時去執行一段PHP的程式碼,幫我同步一些資料到Memcache內,方便使用者可以快速的讀取資料。
過程中我需要用到Web Server的一些Memcache特性,因此我需要定時去執行一個URL。
1. 首先用PHP寫一個程式,並放到Web Server下。
例如:http://127.0.0.1/testSync/Sync.php
2. 另外寫一個AutoRun.php,放到D:\test\AutoRun.php
<?php
set_time_limit(1200); //設定該Function最多只能執行20min
//Do Sync
$url = "http://127.0.0.1/testSync/Sync.php";
$ch = curl_init ($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$returndata = curl_exec ($ch);
curl_close($ch);
?>
3. 寫一個bat檔案,裡面的內容如下:
"C:\Program Files (x86)\PHP\php.exe" "D:\test\AutoRunSync.php"
前面這個php.exe的位置為你電腦安裝的php路徑(IIS CGI指定的路徑)
4. 最後將步驟3所產生的bat,加到Windows 排程去,設定讓他自動定時執行。
Finish.....
2013年9月30日
JavaScript Object Property get And set Method
範例:
var Obj = {}; Obj._aaa = null; Object.defineProperty(Obj, "aaa", { get: function () { return Obj._aaa; }, set: function (val) { console.log(Obj._aaa); Obj._aaa = val; } }); console.log(Obj.aaa); Obj.aaa = "test"; console.log(Obj.aaa);
結果:
說明:
可以在get and set的function做一些其他的事情,
當然你也可以不一定要用Obj._aaa;也可以將值寫入其他地方,例如localStorage
下面另外寫一個範例,儲存某些值到localStorage,若該值為空的,給他一個預設值。
範例
var Obj = {}; Object.defineProperty(Obj, "aaa", { get: function () { if(localStorage.getItem("aaa") == null) Obj.aaa = "Default Value"; return localStorage.getItem("aaa"); }, set: function (val) { localStorage.setItem("aaa",val); } }); console.log(Obj.aaa); Obj.aaa = "test"; console.log(Obj.aaa);
結果
var Obj = {}; Obj._aaa = null; Object.defineProperty(Obj, "aaa", { get: function () { return Obj._aaa; }, set: function (val) { console.log(Obj._aaa); Obj._aaa = val; } }); console.log(Obj.aaa); Obj.aaa = "test"; console.log(Obj.aaa);
結果:
null
null
test
說明:
可以在get and set的function做一些其他的事情,
當然你也可以不一定要用Obj._aaa;也可以將值寫入其他地方,例如localStorage
下面另外寫一個範例,儲存某些值到localStorage,若該值為空的,給他一個預設值。
範例
var Obj = {}; Object.defineProperty(Obj, "aaa", { get: function () { if(localStorage.getItem("aaa") == null) Obj.aaa = "Default Value"; return localStorage.getItem("aaa"); }, set: function (val) { localStorage.setItem("aaa",val); } }); console.log(Obj.aaa); Obj.aaa = "test"; console.log(Obj.aaa);
結果
Default Value
test
jQuery for each
針對Array進行for each
var ary = [ 52, 97 ]; $.each(ary, function( index, value ) { console.log( index + ": " + value ); });
結果
針對Object進行
var ary = {}; ary["aaa"] = "123"; ary["bbb"] = "456"; $.each(ary, function( index, value ) { console.log( index + ": " + value ); });
結果
break 效果 (return false)
var ary = [ 52, 97 ]; $.each(ary, function( index, value ) { if(index == 1) return false; console.log( index + ": " + value ); });
結果
continue 效果 (return true)
var ary = [ 52, 97 ,30,20]; $.each(ary, function( index, value ) { if(index == 1) return true; console.log( index + ": " + value ); });
結果
var ary = [ 52, 97 ]; $.each(ary, function( index, value ) { console.log( index + ": " + value ); });
結果
0: 52
1: 97
針對Object進行
var ary = {}; ary["aaa"] = "123"; ary["bbb"] = "456"; $.each(ary, function( index, value ) { console.log( index + ": " + value ); });
結果
aaa: 123
bbb: 456
break 效果 (return false)
var ary = [ 52, 97 ]; $.each(ary, function( index, value ) { if(index == 1) return false; console.log( index + ": " + value ); });
結果
0: 52
var ary = [ 52, 97 ,30,20]; $.each(ary, function( index, value ) { if(index == 1) return true; console.log( index + ": " + value ); });
結果
0: 52
2: 30
3: 20
林之晨:年輕人創業不缺錢,缺的是國際觀
我們能陪伴孩子一輩子嗎?台灣正在走向一條失落的道路,既然台灣教育無法培養有國際視野的年輕人,為了下一代的未來,準備一筆國外留學的教育基金,才是給孩子最好的禮物
林之晨:年輕人創業不缺錢,缺的是國際觀
林之晨,35歲,大三即開始創業,是個不折不扣的行動派,但在返台與友人合資成立「appWorks之初創投」後,他發現台灣年輕人缺乏國際觀,教育和實務脫節,創業失敗率高,「我越來越不鼓勵青年創業這檔事。」建議有志創業的年輕人先到相關小公司蹲10年,熬得住、沒放棄,再來談創業。
3月21日天氣晴,林之晨接受《ETtoday新聞雲》專訪,談論他最有興趣的青年創業與網路產業問題,雖然兩個多月前,他才因「22K根本是個偽議題」被許多人轟得滿頭包,但林之晨顯得不以為意,一派輕鬆地說:「你不可能要求每個人都非常認真對待自己的人生。」
之初創投,成立於2009年,不到30坪的辦公室只擺了幾張桌子,如此簡陋的地方,已促成近 150 個新創團隊與資本市場接軌,包括EZTABLE、 PubGame、 5945、 GameApe等知名網路公司,但林之晨未因此為滿,反之,他在試圖推動台灣網路產業的過程中,發現許多憑藉他個人之力難以改變的弊病。
回憶,剛從紐約返台時,很多朋友聽到他要搞個創投公司,還專投資「票房毒藥」網路產業,紛紛勸他不要那麼傻,質疑小小個台灣,哪來那麼多創業團隊?哪來那麼多資金?
3年過去,林之晨發現,相對資金和創業團隊數量,台灣網路產業真正的問題是缺乏國際觀,以至大家都像「閉門造車」。他收起招牌陽光笑容,用嚴肅的表情指出,過去10年,政府、企業、媒體、學校,從上到下一味盲目本土化,讓台灣越活越過去,台灣是世界中心的想法,害慘了這一代的年輕人。
「做事業,你要一步一腳印;做功課,你要看很遠很遠。」林之晨解釋,每一家公司都是從小做起,但網路產業是全世界一起發展的,創業者必需要有世界觀,個人也是一樣,年輕人忘了把自己拉升到國際水平,沒有發自內心想往國際發展,更容易陷入本土化思維,在台灣這個狹小的市場和競爭對手互相廝殺。
之初創投,一開始依循美國矽谷創投公司的作法,鎖定剛出校園的菜鳥創業者投資,沒多久時間,林之晨就發現台灣的環境和美國有很大差異,矽谷模式在台灣行不通,使他不得不修正,改為輔導已創業2、3年,有一定基礎,但不知如何將之轉為獲利的老鳥創業者。
他舉例,美國的創業者,好像是一家日本餐廳的學徒,已經有了3、5年經驗,再跳出來自己開店;台灣的創業者,雖然也有3、5年經驗,但多數都是學了中菜後跑去開日本餐廳,失敗機率相對較高。
問題在哪?林之晨認為,台灣教育與實務嚴重脫節、分類太細是主因「外面已經開始有數位相機了,學校還在教你洗底片」,一個成功的創業者,應該是通才,面面具到,台灣的教育體制,不易培養出適合創業的年輕人,就算只是想加入經濟活動,年輕人也離企業要求太遠,起薪不高很正常。
高等教育、人才政策問題,非常棘手,林之晨語帶保留地說:「我懷疑政府有那個GUTS(膽子)伸手去改變現有結構。」考慮到台灣環境,林之晨成立之初創投3年後,對創業的想法慢慢改變,從「先做再說」,變成「三思而後行」。
「創業的眉眉角角太多,各行各業又各有不同。」林之晨建議未來有志創業的年輕人畢業後,可先到相關的中、小型公司練功,學習企業運作的每個環節,直到有一天,你發現了一個市場的需求,但這家公司不願意做,再考慮創業也不遲。
創業並不輕鬆,在輔導新創團隊過程中,林之晨也發現有些年輕人,總將創業、當老闆和酷、帥畫上等號,等到面臨來自金主、員工、廠商四面八方相湧而至的壓力時,這類創業者很快就被打回原形,舉白旗投降。
《壽司之夢》,林之晨月前看了這部日本壽司師傅小野二郎的紀錄片,感觸良多,片中一名學徒在二郎的店內已實習10多年,每天仍孜孜不倦煮飯、煎蛋、切魚,磨練自己的技術,創業需要執著、創業需要決心,這些特質,都可以從工作經驗中慢慢培養。
「我們正走向一條失落的道路…….。」看到世界進步如此快速,林之晨不免對原地打轉的台灣充滿憂慮,這或許也是他憑藉著一點衝動、一點理想,毅然從美國紐約返台,與友人合夥創立「之初創投」的原因,冀望自己能為這塊土地投下一絲希望的火苗,陪伴那些在黑暗中探索的創業者,找到一條通往成功的道路。
未來10年、20年,軟體和內容產業將是各國經濟發展的重點,林之晨說,之初創投的長程目標,就是讓台北出現和矽谷、柏林能相提並論的經濟聚落,提到軟體產業,就想到台灣,他相信,這就是讓台灣站起來的關鍵。
林之晨:年輕人創業不缺錢,缺的是國際觀
林之晨,35歲,大三即開始創業,是個不折不扣的行動派,但在返台與友人合資成立「appWorks之初創投」後,他發現台灣年輕人缺乏國際觀,教育和實務脫節,創業失敗率高,「我越來越不鼓勵青年創業這檔事。」建議有志創業的年輕人先到相關小公司蹲10年,熬得住、沒放棄,再來談創業。
3月21日天氣晴,林之晨接受《ETtoday新聞雲》專訪,談論他最有興趣的青年創業與網路產業問題,雖然兩個多月前,他才因「22K根本是個偽議題」被許多人轟得滿頭包,但林之晨顯得不以為意,一派輕鬆地說:「你不可能要求每個人都非常認真對待自己的人生。」
之初創投,成立於2009年,不到30坪的辦公室只擺了幾張桌子,如此簡陋的地方,已促成近 150 個新創團隊與資本市場接軌,包括EZTABLE、 PubGame、 5945、 GameApe等知名網路公司,但林之晨未因此為滿,反之,他在試圖推動台灣網路產業的過程中,發現許多憑藉他個人之力難以改變的弊病。
回憶,剛從紐約返台時,很多朋友聽到他要搞個創投公司,還專投資「票房毒藥」網路產業,紛紛勸他不要那麼傻,質疑小小個台灣,哪來那麼多創業團隊?哪來那麼多資金?
3年過去,林之晨發現,相對資金和創業團隊數量,台灣網路產業真正的問題是缺乏國際觀,以至大家都像「閉門造車」。他收起招牌陽光笑容,用嚴肅的表情指出,過去10年,政府、企業、媒體、學校,從上到下一味盲目本土化,讓台灣越活越過去,台灣是世界中心的想法,害慘了這一代的年輕人。
「做事業,你要一步一腳印;做功課,你要看很遠很遠。」林之晨解釋,每一家公司都是從小做起,但網路產業是全世界一起發展的,創業者必需要有世界觀,個人也是一樣,年輕人忘了把自己拉升到國際水平,沒有發自內心想往國際發展,更容易陷入本土化思維,在台灣這個狹小的市場和競爭對手互相廝殺。
之初創投,一開始依循美國矽谷創投公司的作法,鎖定剛出校園的菜鳥創業者投資,沒多久時間,林之晨就發現台灣的環境和美國有很大差異,矽谷模式在台灣行不通,使他不得不修正,改為輔導已創業2、3年,有一定基礎,但不知如何將之轉為獲利的老鳥創業者。
他舉例,美國的創業者,好像是一家日本餐廳的學徒,已經有了3、5年經驗,再跳出來自己開店;台灣的創業者,雖然也有3、5年經驗,但多數都是學了中菜後跑去開日本餐廳,失敗機率相對較高。
問題在哪?林之晨認為,台灣教育與實務嚴重脫節、分類太細是主因「外面已經開始有數位相機了,學校還在教你洗底片」,一個成功的創業者,應該是通才,面面具到,台灣的教育體制,不易培養出適合創業的年輕人,就算只是想加入經濟活動,年輕人也離企業要求太遠,起薪不高很正常。
高等教育、人才政策問題,非常棘手,林之晨語帶保留地說:「我懷疑政府有那個GUTS(膽子)伸手去改變現有結構。」考慮到台灣環境,林之晨成立之初創投3年後,對創業的想法慢慢改變,從「先做再說」,變成「三思而後行」。
「創業的眉眉角角太多,各行各業又各有不同。」林之晨建議未來有志創業的年輕人畢業後,可先到相關的中、小型公司練功,學習企業運作的每個環節,直到有一天,你發現了一個市場的需求,但這家公司不願意做,再考慮創業也不遲。
創業並不輕鬆,在輔導新創團隊過程中,林之晨也發現有些年輕人,總將創業、當老闆和酷、帥畫上等號,等到面臨來自金主、員工、廠商四面八方相湧而至的壓力時,這類創業者很快就被打回原形,舉白旗投降。
《壽司之夢》,林之晨月前看了這部日本壽司師傅小野二郎的紀錄片,感觸良多,片中一名學徒在二郎的店內已實習10多年,每天仍孜孜不倦煮飯、煎蛋、切魚,磨練自己的技術,創業需要執著、創業需要決心,這些特質,都可以從工作經驗中慢慢培養。
「我們正走向一條失落的道路…….。」看到世界進步如此快速,林之晨不免對原地打轉的台灣充滿憂慮,這或許也是他憑藉著一點衝動、一點理想,毅然從美國紐約返台,與友人合夥創立「之初創投」的原因,冀望自己能為這塊土地投下一絲希望的火苗,陪伴那些在黑暗中探索的創業者,找到一條通往成功的道路。
未來10年、20年,軟體和內容產業將是各國經濟發展的重點,林之晨說,之初創投的長程目標,就是讓台北出現和矽谷、柏林能相提並論的經濟聚落,提到軟體產業,就想到台灣,他相信,這就是讓台灣站起來的關鍵。
2013年9月12日
訂閱:
文章 (Atom)