歡迎來到小豬圈!
2009-07-15
2009-07-07
The Sims 3 意外的好玩
- 因為遊戲主題並不合我胃口的關系,我並沒有玩過前面兩代,沒想到三代一玩就停不下來。不過大部份時間都在蓋房子就是了。
- 官方的人物模組做不出日式虛擬人物的風格(瓜子臉)。
- 遊戲操縱的角色在以家庭為單位,意指一個家有多少小人,你就要控制多少小人。雖然一次控制一個小人是有點少,但一次兩個(或以上)就有點麻煩了。
- 很多飾品真是只是裝飾用的,能多一點可互動的物件會更好。
- 上下班的共乘車不能取消,也不能設定成慢跑或開車。
- 目前東西還不算多,期待資料片的發行。
- 我對遊戲的評價分級:
- 好玩:玩完一遍會想繼續再玩的,就像 The Sims 3 和前陣子的 Fallout 3。
- 普通:玩過一遍就好,像是“Tom Clancy's H.A.W.X”
- 不好玩:連一遍都玩不下去,最近的例子是“Tom Clancy's End War”和“King's Bounty: The Legend”。
- 這遊戲某方面來說真實的令人感到恐怖,即便創立的角色都與我本人迥異,但還是常有在過現實生活的錯覺…
2009-06-23
[已解決] 安裝 Apache HTTPD 時出現 Installation Wizard Interrupted
- 從之前(參見:“安裝 Apache HTTPD 失敗 Installation Wizard Interrupted”一文)至今一直存在的問題,今天終於解決了!方法就是:將網路斷線再安裝即可。
2009-06-21
關於生物特徵辨識
想起之前玩過的眾多遊戲,只要是得用指紋、虹膜等個人特徵作為鑰匙才能開啟的門,最後一定得勞駕後人將當事者的手指頭、眼珠血淋淋地送到門面前開門。到底,人類要什麼時候,才會學到教訓?
出自“扁蟲窩: 戰神(God of War)十大衰尾路人”一文。- 如果要避免被截肢的情況,做手掌的指紋及靜脈辨識的同時要測量脈搏,虹膜及視網膜辨識時要順便驗一下光之類的。
2009-05-13
在 Windows Apache 上同時執行 PHP4 與 PHP5
- 將 PHP4 與 PHP5 分別以 CGI 和 Apache module 模式執行,以副檔名 .php4 與 .php 分辨執行的版本。
- 在 httpd.conf 加入
<Directory "C:/php4"> AllowOverride None Options None Order allow,deny Allow from all </Directory> # PHP 4 #"C:/php4/" 這裡尾端必須要加上斜線 ScriptAlias /php/ "C:/php4/" AddHandler php4-script .php4 Action php4-script "/php/php.exe" # PHP 5 LoadModule php5_module "C:/php5/php5apache2_2.dll" AddType application/x-httpd-php .php PHPIniDir "C:/php5"
2009-04-29
在 Google App Engine 上執行 PHP
- 執行 PHP 是我申請 Google App Engine 的主要目的,利用 Quercus 執行簡單腳本是沒有問題。但麻煩的是 Datastore 的部份,不但沒辨法用 PDO 存取,而且 Datastore 也跟關聯式資料庫差很多,存取資料庫的部份基本上得要重寫。
- 另一個麻煩是,我在 Java 5 發行之前就沒有再接觸 Java 了,熊熊看不懂 JDO Annotations 跟 JPA 這些 Java 5 以後的新功能(囧),不過還算是小事就是了。
2009-04-28
申請到了 Google App Engine 試用
- 日前在看到 Google App Engine 支援 Java 的消息同時,才知道這世界上有人實作 PHP in JAVA,一個叫 Quercus 的東西。雖然是個詭異的產品,不過這種情況(GAE不支援PHP)還真的派的上用場。
- 雖然我申請時沒辨法收到 Google 的認證簡訊 (SMS),不過再回報後兩天還是成功啟用。
2009-04-27
2009-04-25
用字串索引存取陣列要加上引號
- 陣列的索引是字串型態的話,一定要加上引號,雖然不加引號也可以執行,但 PHP 會先嘗試以常數去解譯,所以可能產生預料外的結果。而如果沒有對應到的常數,再嘗試以字串解譯,並同時會輸出 E_NOTICE 影嚮效能。
- 整數的索引也可以用字串(加引號)的方式取存,但用整數存取速度比較快。
- 在建立陣列或其項目時,索引是十進位的數字的話會自動轉成整數。
<?php define('string_index', 'unexpected'); $a = array( 'string_index' => 'string_index', 'unexpected' => 'unexpected'); $b = array( '-1' => 0, '1' => 1, '02' => 2, '0x3' => 3 ); echo $a['string_index']; // output: string_index echo $a[string_index]; // output: unexpected var_dump($b); /* output array ( -1 => int 0 1 => int 1 '02' => int 2 '0x3' => int 3 ) */ ?>
2009-04-22
將字串分割為字元陣列
- PHP 支援用陣列的方式存取字串的字元
$string[1],但不能直接將字串用在迴圈上。 - 上述方式與 str_split() 會有中文斷字的問題,preg_split() 沒有加 u (utf-8 mode)修飾字符也會有一樣問題。
- 這種情況下 mb_split 派不上用場,雖然支援 regular expression 但不能用空的 pattern (不用 start/end delimiter)。
- 兩個解決方案之一是用 mb_* 自已寫函式處理,另一個就是用 preg_split() 加上 u 修飾字符,見範例:
<?php function string_to_array ($string) { $array = array(); $strlen = mb_strlen($string); for ($i=0; $i<$strlen; $i++) { $array[] = mb_substr($string, $i, 1, 'UTF-8'); } return $array; } $string = '中文字測試'; str_split($string); preg_split("//", $string); mb_split("", $string); // Warning: mb_split(): Empty regular expression preg_split("//u", $string); //This modifier is available from PHP 4.1.0/Unix and from PHP 4.2.3/win32 var_dump(string_to_array($string)); ?>
寫 PHP 要注意的事項 效能篇
- 用 isset 取代 strlen 檢查字串最小長度,見 PHP: Strings - Manual 中 String access and modification by character 一節。
<?php $string = 'aaabbb'; $string2 = 'aaabbbcccddd'; var_dump((strlen($string) > 9) ?true:false);//false var_dump((strlen($string2) > 9)?true:false);//true var_dump((isset($string[9])) ?true:false);//false var_dump((isset($string2[9])) ?true:false);//true ?> - 字串用單引號 (') 標示比雙引號 (") 快,但在嵌入超過一、二個變數以上時,情況就相反了。
<?php $string = '中文字測試'; $string = '中文字' . $string . '測試'; $string = "中文字測試"; $string = "中文字{$string}測試"; ?> - 在相同結果的情況下,儘量使用字串類函式取代 Regular Expressions 函式
- 在存取整個檔案時 file_get_contents/file_put_contents 比自已用 fopen 快,remote 的情況似乎相反。
- is_file 比 file_exists 快四、五倍,不過似乎要注意在大量執行緒下的情況。
- 用 ++$i 比 $i++ 快,但我測試的結果差距非常小。
- 優先使用內建常數,再找內建函式,再來才考慮自行運算
- 用 PHP_VERSION 取代 phpversion(),而用 version_compare() 比較版本。
- 用 M_PI 取代 pi() ,以及其它 M_* 開頭預先計算好的值。
- DATE_ATOM 及其它 DATE_* 常數。
- 陣列的索引是字串型態的話,一定要加上引號,雖然不加引號也可以執行,但會產生 E_NOTICE 影嚮效能。整數的索引也可以用字串(加引號)的方式取存,但用整數比較快,參見:用字串索引存取陣列要加上引號。
- 類別建構式(Class constructor)使用 PHP4 版,跟類別同名的函式,比用 PHP5 版 __construct 快約兩倍,這是我在測試版本相容性時發現的,原因不明。
2009-04-21
查注音函式
- 利用 xcin 的表格做查詢注音符號的依據。
<?php function findZhuyins($word, $cinTable = 'bopomofo.cin') { static $data = null; static $keyMap = null; $result = array(); if (!$data) { $data = file_get_contents($cinTable); $pattern = "/%keyname\s+begin\s+(.+?)\s+%keyname\s+end/uis"; //找出按鍵對應字根的區段 preg_match($pattern, $data, $matches); $pattern = "/(.)\s+(.)\s+/ui"; preg_match_all($pattern, $matches[1], $matches ); $keyMap = $matches; } $pattern = "/\n(.+)\s+{$word}/ui"; preg_match_all($pattern, $data, $matches ); foreach ($matches[1] as $key => $value) { $ary = str_split($value); $result[$key] = ''; foreach ($ary as $value2) { $idx = array_search($value2, $keyMap[1]); $result[$key] .= $keyMap[2][$idx]; } } return $result; } var_dump( findZhuyins("得")); ?> - 注音符號的 cin 表格可以到 OXIM 專案的 FTP(ftp://ftp.opendesktop.org.tw/odp/others/OXIM/cin_tables/)下載,cin 表格清單。
- 中文轉注音(PHP)
2009-04-18
寫 PHP 要注意的事項
程式可攜性
- 使用內建常數 DIRECTORY_SEPARATOR
<?php include dirname(__FILE__) . DIRECTORY_SEPARATOR . 'some.php'; ?>大部份情況下直接使用 / 就可以了,除了在展開由系統取得的路徑時,如:<?php var_dump( explode(DIRECTORY_SEPARATOR, getcwd()) ); ?> - 使用內建常數 PATH_SEPARATOR
<?php $path = '/usr/lib/pear'; set_include_path(get_include_path() . PATH_SEPARATOR . $path); ?> - 使用下列兩種 PHP 標籤 (PHP: Escaping from HTML - Manual):
<?php echo phpversion(); ?> <script language="php"> echo phpversion(); </script>不要用簡短及 ASP 風格的 PHP 標籤:<? echo phpversion(); ?> <?= phpversion(); ?> <% echo phpversion(); %> <%= phpversion(); %>
- 以零開頭的整數進位制,見 PHP: Integers - Manual:
<?php $a = 1234; // decimal number $a = -123; // a negative number $a = 0123; // octal number (equivalent to 83 decimal) $a = 0x1A; // hexadecimal number (equivalent to 26 decimal) ?> - 在迴圈中使用參照 (reference) 要注意離開迴圈後參照還是有效。
<?php $array = array( 'aaa', 'bbb', 'ccc'); foreach($array as &$value) { $value = $value . 'ddd'; } $value = 'test'; var_dump($array); // $array[2] = 'test' $array2 = array( 'aaa', 'bbb', 'ccc'); foreach($array2 as $key => $item) { $array2[$key] = $item . 'ddd'; } $item = 'test'; var_dump($array2); ?>
2009-04-16
2009-04-08
強制下載及預設檔名 HTTP-Header: Content-Disposition
- 加入 Content-Disposition 這項 header 即可。
<?php $filename = 'test.htm'; header("Content-type: text/plain"); header("Content-Disposition: attachment; filename=$filename"); readfile($filename); ?>
2009-03-31
自製的 PHP 模版引擎:Classifield
- Classifield 的主要特色是將模板語法嵌入 HTML 元素的 class 屬性裡。
- 絕大部份的 HTML 元素都有 class 屬性,而且可以輸入複數的值,不會影嚮既有的 CSS class selector 。
- 沒有 class 屬性的 HTML 元素有:html 、 head 、 title 、 meta 、 link 、 param script 、 style。
- Classifield 的原始碼可以到 Google Code (http://code.google.com/p/classifield/)下載。
- Classifield 使用(接近)純碎 HTML 的模板,幾項特色或優缺點:
- 模板可以直接用瀏覽器預覽,以及可以被驗証 (參見:The W3C Markup Validation Service)。
- 分離模板邏輯與模板語法,將程式與美工人員的分工更為明確。
- 模板不需要插入 PHP 程式碼、模板專用的語法或其它 HTML 以外的語法,對負責模板設計美工的而言,較為友善。
- 模板能被任何一般文字網頁編輯器,或所見即所得的網頁編輯器正確的開啟。
- 承上,模板能在所見即所得的網頁編輯器裡編寫模板的語法。以 PHP (本身也是模板引擎) 插入變數到元素的屬性值裡為例:
<div <?php echo $var1?>="<?=$var2?>"></div>
部份編輯器會限制或自動編碼元素屬性欄位。 - 模板語法可以結合網頁結構,下為 Smarty 與 Classifield 的差別:
<ul> {foreach from=$myArray item=foo} <li>{$foo}</li> {/foreach} </ul><ul class="php-foreach-myArray-as-foo"> <li class="php-echo-foo"></li> </ul>
- 使用即有的技術,減少學習門檻。
- 需要 DOM lib 剖析模板,降低執行時的效能與提高記憶體需求。
- 需要其它選擇元素的方式,如QueryTemplates使用的 CSS selector (by phpQuery)
- 關於分離模板邏輯與模板語法,此點可參考另一個模板引擎 QueryTemplates,該模板引擎做的比較徹底。以及該作者的文章(Pure HTML templates theory « Personal devlog)。
2009-03-02
Demon's Souls 惡魔之魂 [Updated: 2009-05-18]

- 破關心得:這遊戲除了「難度」以外,沒什麼內容(汗)。NPC少、對話少(而且還嘴賤),武器、防具、道具都少,連主線劇情都是淡淡的帶過而已。遊戲畫面與氣氛設計的很棒,但如果是對像我一樣偏好受劇情而非挑戰難度的人來話,這片可以說是地雷片一枚。
- 雖然破關花了很多時間,但大部份的時間都花在重玩。主要的遊戲難度來自於每隻小怪都要小心應對,不然很容易陰溝裡翻船。第一次玩連第一關(1-1)就花了半天!
- 大部份長註魔法不能同時使用,浮游箭例外。
- 刷魂可以裝強慾之戒加白銀之鐲(女用),再加渴求(黃之魂)。
- 初期貴族的靈魂箭(魔法)超強,有耐心一點的話還可以殺龍!殺龍的地點在1-2箭塔上,趁噴火時攻擊,一次扣 19 HP ,約半小時可以擊斃火龍,可另外準備兩、三瓶香料。
- Demon's Souls デモンズソウル攻略Wiki - livedoor Wiki(ウィキ)
- Demon's Souls (Demons Souls,デモンズソウル) 攻略簿 マップ付 日文攻略,有部份地圖。
- 惡魔靈魂 哈啦板 - 巴哈姆特電玩資訊站。
- 楔之神殿之旅
- 等同於教學關卡,可以選擇跳過
- 遇到教學關卡的 BOSS (擴散尖兵;有翅膀的肥仔)時,基本上是一定會被幹掉送走的(劇情),但其實是可以打倒它的。
- 當他發動攻擊時往他揮刀的手的方向滾,飛起來的時候要後退。
- 1-1
- 這關過了以後(打倒BOSS史萊姆),才會出現火防女與要人,跟要人對話後才可以去其它關卡。
- 救王子的地方可以拿盜賊戒指,可以減少被敵人發覺的距離,其它遊戲設計類似的道具大都沒什麼用,但這個道具在本遊戲非常實用!
- 1-2 高塔 Boss 魂學魔法:絕對防護。
- 1-3 殺了貴族戴帽子可以去救魔女。
- 1-4 在這關的第二次遇到可以殺龍、打這關 BOSS 之前是最後升級的機會、被 BOSS 抓到等級會下降
- 2-1
- 純黑時,在有人丟石頭的那邊電梯下方有原生惡魔。
- 2-2
- 將這關 Boss 魂拿去給 2-1 的鐵匠,就可用 Boss 魂打造武具。
- 魔法與奇蹟雙修者刷黑,到垂直落下的路線中途,打倒黑色 NPC 可拿獸之護符。
- 2-3 龍之魂學的魔法火之嵐,威力大但耗魔也大
- 3-1 拿盜賊套裝防毒 救賢者
- 3-2
- 這關 Boss 我覺得是本遊戲最難的!除了場地狹長加上 Boss 橫衝亂撞之外,打到一定時間另一隻小惡魔就會加入混戰,建議連線合作或用魔法:死之雲。
- 原生惡魔在底層某處…。
- 3-3 Boss 建議離線、黃之魂學浮游箭(魔力31時,對有效的敵人攻擊約靈魂光的五倍)
- 4-1
- 黑骷髏後面可以拿欠月彎刀(回MP),也可以自已打造就是了。
- 肥之魂打造屠刀,該 Boss 魂還可學奇跡:再生,但除了收集完全不值得學。
- 4-2
- 刷魂(死神+黑雙刀骷髏約 11k~16k)。
- 原生惡魔在入口旁的懸崖邊。
- 勇士之魂打造打寶刀(該魂還可學奇跡:復活,死亡時會立即復活但沒有無敵時間,不如魔法:絕對防護)。
- 4-3 嵐之魂學反魔法領域
- 5-1 蟲之魂學毒之雲或治療
- 5-2 原生惡魔在往蛞蝓巢的樓梯入口處。
- 5-3
- 聖騎士的暗銀盾可以防魔法(靈魂箭之類)。
- 聖女 Boss 的純血魂可以學死之雲,對 3-2 Boss 尤是。
2009-02-20
握機車油門剎車的方法
- 我個人是用拇指、食指與小拇指握油門手把,中指與無名指按剎車。跟網路上推薦用食指和中指按剎車不同,應該是我的食指比無名指短關係。
- 僅用拇指和食指握油門的話,真的很容易在巔頗時鬆手,台灣的柏油路實在是有夠“平”的。
- Mobile01 手套穿戴問題與握油門方式?
2009-02-14
SQL identifier 識別符號
- SQLite 可以使用識別符號單引號 'keyword'、"keyword"、[keyword]、`keyword`。
- MySQL 預設是使用 `keyword` ,可以設定 ANSI_QUOTES 來使用 "keyword"。
- 石頭閒語:Oracle 的表格、欄位名稱都要大寫嗎? - 樂多日誌
- SQLite Query Language: SQLite Keywords
- MySQL :: MySQL 5.0 Reference Manual :: 8.2 Schema Object Names
- " ascii(34)
- ' ascii(39)
- [ ascii(91)
- ] ascii(93)
- ` ascii(96)
Subscribe to:
Posts (Atom)
個人常用鏈結
Labels
- .NET (1)
- Accessibility (3)
- ADSL (1)
- Apache (9)
- ASP.NET (1)
- Babyer (1)
- Browser (1)
- Canon MX700 (1)
- CAPTCHA (1)
- CentOS (1)
- CSS (7)
- DB:SQL (1)
- DB:SQLite (2)
- DNS (3)
- English (1)
- EXIF (1)
- filename.ext (1)
- Firefox (4)
- Firewall (1)
- Flash (4)
- Game 遊戲 (28)
- Game:PC (6)
- Game:PS3 (4)
- Game:Xbox360 (3)
- GNU (1)
- Google (6)
- Google:Android (8)
- Google:Blogger (2)
- Google:Chrome (1)
- Google:Code (2)
- GoogleAppEngine (2)
- GoogleMaps (1)
- GPG (1)
- Hinet (1)
- HTML (2)
- HTTP (1)
- i18n (1)
- IE (3)
- Java (2)
- Javascript (2)
- Linux (1)
- Microsoft (2)
- MIME (1)
- MySQL (7)
- NexusOne (2)
- OAuth (1)
- Open source 開放原始碼 (1)
- OpenID (1)
- OS (1)
- OS:Windows (33)
- PHP (49)
- PHP:GTK (2)
- PHP:PEAR (1)
- PHP:PECL (3)
- PHP:ZendFramework (4)
- PostgreSQL (1)
- PPPoE (1)
- RegularExpressions (2)
- Security (11)
- Sphinx (2)
- SQLite (1)
- TCP (1)
- Ubuntu (1)
- UDP (1)
- Usability (2)
- Virtaul PC (1)
- Wii (2)
- XML (1)
- Yahoo (2)
- Yahoo:BBAuth (1)
- Yahoo:YUI (1)
- Youtube (1)
- 不如賣雞排 (2)
- 不願役 (33)
- 中文處理 (1)
- 圖 (5)
- 媒體 (2)
- 影片 (1)
- 影音 (19)
- 思 (8)
- 攝 (9)
- 政 (7)
- 敗 (2)
- 漫畫 (5)
- 生活 (34)
- 硬體設備 (13)
- 網站開發 (16)
- 網路 (8)
- 英文 (3)
- 貓 (2)
- 資安 (1)
- 趣 (29)
- 軟體 (12)
- 遊記 (8)
- 運動 (2)
- 關於我 (1)
- 電影 (10)

