歡迎來到小豬圈!

2007-12-30

關於 php_curl (二)

  • 以下的 $ch 指的是 php curl_init() 傳回的 resource(cURL handle) ,同等於 libcurl 的 easy-handle,$mh 以此類推。
  • $ch 在加入 $mh 之後就不能重覆使用(意指僅用 curl_setopt() 重設 URL)了,得關掉後重新初始化再來。
  • $ch 在加入 $mh 之後 curl_errno() 會失效(總是傳回 int(0),原因不明),而 curl_error() 則是有些錯誤抓不到(已知 CURLE_COULDNT_RESOLVE_HOST(6) 不行)。
  • 承上, 改用 curl_multi_info_read() 替代。傳回值如下:
    <?php
      $curlmsg = curl_multi_info_read($mh);
      var_dump( $curlmsg );
      // 當沒有訊息時傳回
      boolean(false)
      // 反之則傳回
      array(3) {
        ["msg"]=>
        int(1)
        ["result"]=>
        int(0)
        ["handle"]=>
        resource(9) of type (curl)
      }
    ?>
    
  • $curlmsg["msg"] 目前只有定義 CURLMSG_DONE(1) 一值,暫時可以不用理它。
  • $curlmsg["result"] 值為 CURLE_* 之一。
  • $curlmsg["handle"] 訊息來源的 $ch。
  • curl_multi_info_read() 較為明確的呼叫時機,是當執行 curl_multi_exec($mh, $rh) 之後, $rh 變動(減少)的時候。
  • curl_multi_select() 並非必要的,呼叫的主要目地是為了先檢查開啟的 sockets 有無資料,再做對應的動作,以減少佔用的 CPU 資源。以下為 Unix Socket FAQ 摘錄:
      2.9.  What are the pros/cons of select(), non-blocking I/O and SIGIO?
    
      Using non-blocking I/O means that you have to poll sockets to see if
      there is data to be read from them.  Polling should usually be avoided
      since it uses more CPU time than other techniques.
    
      Using SIGIO allows your application to do what it does and have the
      operating system tell it (with a signal) that there is data waiting
      for it on a socket.  The only drawback to this soltion is that it can
      be confusing, and if you are dealing with multiple sockets you will
      have to do a select() anyway to find out which one(s) is ready to be
      read.
    
      Using select() is great if your application has to accept data from
      more than one socket at a time since it will block until any one of a
      number of sockets is ready with data.  One other advantage to select()
      is that you can set a time-out value after which control will be
      returned to you whether any of the sockets have data for you or not.
    
  • [comp.unix.programmer] Unix-socket-faq for network programming

2007-12-27

廣告插播? - HiNet 線上通知服務同意書

2007-12-25

關於 php_curl

  • 最近開發 Stylet Reader 時,為了要抓取 feed 用上了 php_curl,但文件實在有夠少的。雖然 libcurl 官網有一份 C API 的文件,但命名有些出入,所以我自製了一份對照表(見文末,僅供參考)。
  • 從原始碼看來 curl_multi_select() 僅是代為呼叫 curl_multi_fdset() 與 select() ,後者可參考socket_select()
  • 依照文字說明, curl_multi_info_read() 的第二個參數($msgs_in_queue)應該是 passing by reference 吧!?怎麼會是 passing by value 呢?真詭異。
  • 承上,雖然可以手動傳址 curl_multi_info_read( $mh, &$msgs_in_queue),但得打開 allow_call_time_pass_reference = On (不建議)。
  • select Function (Windows) MSDN。
php_curl 與 libcurl 的函數對應
php_curl libcurl
curl_close curl_easy_cleanup
curl_copy_handle curl_easy_duphandle
curl_errno
curl_error curl_easy_strerror
curl_exec curl_easy_perform
curl_getinfo curl_easy_getinfo
curl_init curl_easy_init
curl_multi_add_handle curl_multi_add_handle
curl_multi_close curl_multi_cleanup
curl_multi_exec curl_multi_perform
curl_multi_getcontent
curl_multi_info_read curl_multi_info_read
curl_multi_init curl_multi_init
curl_multi_remove_handle curl_multi_remove_handle
curl_multi_select curl_multi_fdset + select
curl_setopt_array
curl_setopt curl_easy_setopt
curl_version curl_version

2007-12-21

關於 meeya

監獄兔 ウサビッチ|USAVICH.TV

關於 PHP Constants (常數)

  • 關於 PHP 的常數:
    • 在宣告時其值必需為已知、固定的值。
    • 常數名稱在“慣例”上都是大寫,並且字詞間以底線分開。如:define('FOO_BAR', 'something');
    • 宣告該常數以後,在執行期間其值不能被改變。
    • 不管在哪宣告,全域都能存取。
  • 使用常數的目的之一是要決解“魔術數字”的問題,即程式碼中沒有註解或命名的數字,容易造成程式碼不易維護。
  • 使用常數時,效能不該是考量的要素之一,因為在 PHP 使用常數“並沒有”比用變數快!(這倒是出乎我的預料)剛試了一下,用常數反而慢一點點(差距很小,不曉得是不是我測試方式的關係)。
  • 以下為我測試的程式碼,註解的地方為可選的比較方式:
    <pre>
    <?php
    define('VAR1' , 'a long long long long long long long long long long long long long text');
    define('VAR2' , 'a long long long long long long long long long long long long long text');
    $var1 = 'a long long long long long long long long long long long long long text';
    $var2 = 'a long long long long long long long long long long long long long text';
    
    $start = 0;
    $end = 0;
    
    for($i =0; $i < 20; $i++){
      $tmp = null;
      $start = microtime(true);
      for($j =0; $j < 5000; $j++){
        $tmp .= $var1;
        //$tmp = "Something here" . $var1;
        //$tmp = "Something here{$var1} Nothing here{$var2}";
        //$tmp = "Something here{$GLOBALS['var1']} Nothing here{$GLOBALS['var2']}";
      }
      $end = microtime(true);
      echo 'V: ' . ($end - $start);
      echo "\t";
    
      $tmp = null;
      $start = microtime(true);
      for($j =0; $j < 5000; $j++){
        $tmp .= VAR1;
        //$tmp = "Something here" . VAR1;
        //$tmp = 'Something here' . VAR1 . ' Nothing here' . VAR2 ;
      }
      $end = microtime(true);
      echo 'C: ' . ($end - $start);
      echo "\n";
    }
    ?>
    </pre>
    
  • 自行定義的常數值,在宣告時必需為固定的值,如:
    define('TEST_TXT', 'some string here');
    
    但一個實用的例外(來自 wordpress 的 wp-config-sample.php),是用 magic constants 來取得路徑:
    define('ABSPATH', dirname(__FILE__));
    
  • PHP: Constants - Manual
  • Magic number (programming) - Wikipedia, the free encyclopedia

2007-12-20

Yahoo UI 是好物

  • 真的是易學易用,不過速度似乎有點慢…。
  • 事件綁定時要去掉“on”(不知是否我眼挫,這件事我在文件上沒找到?),如:
    window.onload = doSomething;
    // 上述改用 YUI 如下
    YAHOO.util.Event.addListener(window, 'load', doSomething);
    
  • YAHOO.util.Event.addListener 會自動附加(而不是覆蓋)綁定,以前要自已做到這功能的話得如下:
    function addListener(newListener) {
      var oldListener = window.onload;
      if (typeof window.onload != 'function') {
        window.onload = newListener;
      } else {
        window.onload = function() {
          oldListener();
          newListener();
        }
      }
    }
    
  • 範例不錯,但文件不夠完備。像 API Doc 的部份,如果能每個 Method 附上簡短範例會更好(像 PHP Manual 那樣)。

2007-12-17

安裝 VMware 與 CentOS

  • 就為了 PHP: flush - Manual 這一句:

    Several servers, especially on Win32, will still buffer the output from your script until it terminates before transmitting the results to the browser.

  • 看了鳥哥的 Linux 私房菜後決定安裝 CentOS,目前版本是最近才更新的 CentOS 5.1。
  • 初次用文字模式,安裝過程相當順利。第一個遇到的問題是 shutdown 與 Run-level (一裝完就想關機了… 囧)。輸入 shutdown now 的話只會切換到 Run-level 1,要關機的話是要輸入 shutdown -h now 才切換到 Run-level 0 ,意即關機。
  • Linux Run-level 的 7 種模式
    • 0: 關機
    • 1: 單一使用者模式
    • 2: 單一使用者模式附帶網路功能
    • 3: 啟動於文字模式下的多使用者模式
    • 4: 未定義
    • 5: 啟動於 X Windows 模式下的多使用者模式
    • 6: 重開機
  • BTW,我覺得 Linux 令人難已接近的原因之一就是那堆難以聯想的縮寫(指令、檔名、目錄名都是)…。
  • 鳥哥的 Linux 私房菜 -- 伺服器架設篇目錄
  • www.centos.org - The Community ENTerprise Operating System
  • Runlevel - Wikipedia, the free encyclopedia

2007-12-15

(X)HTML content-type 的選擇

  • 這裡說的 Content-type 和 Media type 基本上是一樣的東西,源自於MIME type。其常見的內容項目有:text/html 、 image/gif 、 application/octet-stream … 等。
  • 在 HTTP 協定中會送出 Content-Type 的 header 來指明接下來要傳送的資料類型。如:
    Content-Type: text/html
    
  • XHTML Media Types - Summary 該文總結中指出: HTML 應該使用 text/html , 而 XHTML 應該使用 application/xhtml+xml,但在考量與 HTML 相容的情況下也可以使用 text/html 。
  • IANA | MIME Media Types

2007-12-14

紀曉君與家家演唱的 Santa Lucia

  • 康熙來了(20071127)片段,紀曉君與家家合唱的 Santa Lucia:

2007-12-13

MySQL Index 長度限制為 1000 “bytes”

2007-12-12

2007-12-10

字字珠璣

2007-12-09

初試 Google Code - Project Hosting 提供 svn 服務

2007-12-07

Charset (字元集)的選擇:UTF-8!

  • Just UTF-8!這該算是資訊界難得的共識吧。
  • UTF-8 是一種不固定長度的編碼方式,原定義在 ASCII (128 以下) 佔用 1byte,而其它語言的字元則佔 2、3或4個 bytes。
  • 漢字在 UTF-8 中佔 3 bytes ,相較於用 Big5(字元固定 2 bytes)編碼的文件,其所佔用的空間較多。
  • 時至今日,大多的編輯器都能正確支援 UTF-8。唯一要注意的是:不要寫入 BOM,像是 Windows 內建的 Notepad 在轉存 UTF-8 格式時會自動在檔案頭開插入 EF BB BF ,雖然在支援 UTF-8 編輯器不會顯示出來,但這會造成一些問題(如驗証 HTML 時會出錯)。
  • Byte-order mark - Wikipedia, the free encyclopedia

DTD 的選擇:Strict!

  • DTD Document Type Definition 也就是一般網頁原始碼上<!DOCTYPE開頭的東西。個人推薦的是 XHTML 1.0 StrictHTML 4.01 Strict
  • 無論是選擇 XHTML 或 HTML,都要 Strict!Strict 可不僅僅是宣告,在撰寫時也要避免依賴瀏覽器容錯的能力。
  • 選擇 HTML 4.01 Strict 如 Yahoo! UI LibraryGrids CSS 所推薦的:
    We use and recommend this !DOCTYPE to trigger Standards Mode in browsers with multiple rendering modes:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
    
  • 選擇 XHTML 1.0 Strict 則是在程式處理上比較方便:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    
  • HTML 4.01 Specification
  • XHTML™ 1.0 The Extensible HyperText Markup Language (Second Edition)

2007-12-06

Super Pitch Gorugo

  • 日本人對投魔球還真有迷樣的執著啊。

2007-12-05

關於 Hinet 與 Xuite 信箱設定

  • 要使用 Xuite 信箱 POP3 的功能,得先下面鏈結處申請才行。不然會看到 [AUTH] Authentication failed. 的錯誤訊息。
  • 而 Hinet 信箱 會遇到在 Webmail 看是有信的,但收信軟體收不到信的情況。這要到“個人設定 » 進階 » 登出時(強制)移回信件”設定。
  • 申請開放 POP3 服務 - HiNet 會員中心
  • HiNet webmail -常見問題

關於 MagpieRSS

  • 目前最新的版本是 magpierss-0.72 (November 5, 2005),已經是兩年前的東西啦…。
  • 文件不夠詳細。
  • Snoopy.class.inc 需要 socket 的功能,如 fsockopen(),但很多免費空間都不允許。
  • fetch_rss() 函式只能從 URL 載入 Feed。
  • 從檔案載入 Feed 的寫法:
    require_once(MAGPIE_DIR . "rss_fetch.inc");
    
    // 一般用法
    $rss = fetch_rss($url);
    
    // 用 CURL 替代
    $ch = curl_init($url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    $xml_string = curl_exec($ch);
    curl_close($ch);
    
    // 或從檔案讀入
    $xml_string = file_get_contents("feed.xml");
    
    // 載入預設值(原本是設計在裡 fetch_rss() 呼叫的)
    init();
    
    $rss = new MagpieRSS( $xml_string, MAGPIE_OUTPUT_ENCODING, MAGPIE_INPUT_ENCODING, MAGPIE_DETECT_ENCODING );
    
    
  • Magpie RSS - PHP RSS Parser

2007-12-04

剛申請了 Google AdSense

2007-12-03

關於 MySQL 的 TIMESTAMP 格式

2007-12-01

RSS 與 ATOM 各版本比對

Name Version Full name root Namespace
RSS 0.90 RDF Site Summary rdf:RDF http://my.netscape.com/rdf/simple/0.9/
RSS 0.91 Rich Site Summary rss
RSS 1 RDF Site Summary rdf:RDF http://purl.org/rss/1.0/
RSS 2 Really Simple Syndication rss
ATOM 0.3 feed http://purl.org/atom/ns
ATOM 1 feed http://www.w3.org/2005/Atom

2007-11-30

用 CURL 替代 allow_url_fopen 的限制

  • allow_url_fopen 是用來設定 fopen 是否能開啟 URL,預設值是開啟的,但有資安的問題,建議關閉。
  • 一個替代方案是用 CURL 取代:
    <?php
      $ch = curl_init('http://example.com/');
      curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
      $file_contents = curl_exec($ch);
      curl_close($ch);
      echo htmlspecialchars($file_contents);
    ?>
    

關於 Accessibility 與 Usability

Unobtrusive Javascript

  • Unobtrusive JavaScript (也有用 Unobstructive 的) 之前看到的一個詞,個人暫譯“無妨礙的 Javascript”。
  • 並不是個新東西,意指在設計時考量到沒有 script 的環境下也能正常(或折衷)執行,而不是讓使用者對著 script error 大眼瞪小眼。
  • 兩個面向,一是瀏覽者完全沒有或關閉 script 的功能;二是使用者部份載入(網路問題、NoScript)、或因瀏覽器特性…等原因,script 沒有正確執行。
  • 一個常見的範例:
    <a href="..script..">link</a>
    <a href="..url.." onclick="..script..">link</a>
  • 另一個範例:
    <input type="button" onclick="doSubmit()" />
    <input type="submit" onclick="doSubmit()" />
    
  • Unobtrusive JavaScript - Wikipedia, the free encyclopedia

2007-11-29

HostWQ.net

  • 下午申請了 HostWQ.net 的支援 PHP 與 MySQL免費空間,規格看起來還不錯。要注意申請第一格是 Site's Name,使用者 ID 是系統產生的。
  • 有提供六個免費的 Sub-domains,不過是從 *.HostWQ.net (三級域名)開始?
  • 我在 blog.jano.hostwq.net 用 Fantastico type installer 安裝 Wordpress ,很快,但有檔案權限的問題(後來改用另一個 jano.hostwq.net 就沒這個問題)。
  • Control Panel 有些地方網址的 Domain 是錯的?指到 byetcluster.com 去了。
  • FTP 超慢!我用 FireFTP 傳 wordpress 上去,一直都沒有超過 2KB/s,而且中途還掉了127個檔…(Code:450)。還好 FireFTP 有一項比較本地與遠端目錄的差別,並針對檔案有無、大小來上下傳的功能,還不錯用,不過第二次還是掉了25個檔…。(怒)
  • 後來改用 FileZilla 傳到自然斷,用 FireFTP 一比,還是缺了一堆!(翻桌)
  • 再試一陣子看看吧…

2007-11-24

URL 的長度限制

2007-11-22

我用過的作業系統

  • 曾使用(個人/家用)的作業系統如下:
  • MS-DOS 6.22,國中在校第一次接觸的作業系統。
  • Windows 3.1,安裝在自家第一臺電腦上,也是從國中開始。
  • Windows 95,開始撥接上網!
  • Windows 98,僅次於 XP 之後,我用最久的一套。
  • Windows XP Professional 目前主要的作業系統。
  • 還真是一脈相承啊…。(茶)
  • 其實我也用過 Linux 一陣子,包括 Red Hat 和 Fedora,以及 Mandrake 與 Mandriva Linux (兩者在改名前後各試用過一次),不過最後都還是逃回來了…,最近 Ubuntu 似乎很紅,找個時間來用一下好了。

2007-11-09

「賠錢貨」英文翻譯

2007-11-07

老黃的照片

  • 這是為了試試 MX710 的相片列印,從跟B君借來的相機所拍的照片中,挑出來一張比較能看的。
  • MX710 的相片列印品質還不錯啊(至少我很滿意)。

Firefox 調校

  • 在網址列輸入 about:config,並視情況修改。
  • 修改 browser.cache.disk.enable
  • 修改 browser.cache.disk.capacity
  • 增加 String 參數 browser.cache.disk.parent_directory 值為 R:\ (指定快取存放的目錄)
  • 修改 browser.cache.memory.enable
  • 增加 browser.cache.memory.capacity
  • Knowledge Base - MozillaZine Knowledge Base

2007-11-06

Wordpress 試用心得

  • 安裝的是目前最新版本 Wordpress 2.3.1。
  • 安裝步驟真的是簡單到我都不知道該講什麼!
  • 新 Blog 的網址是 stylet.no-ip.org (暫訂)。
  • 目前還是以 Blogger 為主,Wordpress 以(手動)同步文章測試中。

2007-11-02

Google Photos Screensaver

  • 再次安裝 Google Photos Screensaver 。
  • 台灣版的Google Pack沒有包含 Google Photos Screensaver,似乎只有英文語系的國家才有。
  • Pan and Zoom 的效果很棒!

2007-11-01

Canon PIXMA MX700

  • 2009-11-28 更新!
  • 網路連接不是用 Standard TCP/IP port ,而是 Canon 自家的 Canon BJNP Port ,這點真的很麻煩。
  • 有提供 Windows 7 / Vista 與 x64 的驅動。
  • 在 Windows 7 上遇到了無法安裝的情況,後來查出是在搜尋網路連接的印表機的階段,“無預警”的被內建防火牆阻擋的關係。

  • 2007-11-05 更新!
  • 安裝的問題在動用到 Wireshark 後總算查出來了,原來是我擋了所有 UDP Port 的關係。
  • 第一份文件印的是 YUI 2.3 Cheat Sheats ,速度還好(標準-彩色列印)。
  • 從前紙匣列印要勾選“自最未頁列印”,不然出來順序會相反。

  • 2007-11-01 敗入!
  • LCD 感覺有點小。
  • 只有簡體中文而沒有繁體中文,可惜。
  • 因為不知道我賤手關了什麼服務或設定,(以網路連接的方法)安裝上並不順利,最後並沒有查出什麼原因(以重灌解決),只知道網路連接埠的部份並不是用 Standard TCP/IP Port ,而是 Canon 自已的協定(Canon BJ Network Port)與軟體(Canon IJ Network Tool)。

2007-10-30

分割 Apache log 檔

2007-10-28

無法複製的檔案

  • Error Copying File or Folder Cannot copy filename: It is being uesd by another person or program. Close any programs that might beusing the file and try again.
  • 第一次遇到沒辨法複製檔案(還不是因為空間不夠喔),權限調過也不行,暫無解(也懶的解了)。

Checklist for Securing PHP Configuration | Ayman Hourieh's Blog

  • allow_url_fopen = Off
  • register_globals = Off
  • open_basedir = /var/www/htdocs/files
  • safe_mode = Off
  • safe_mode_gid = On
  • safe_mode_exec_dir = /var/www/binaries
  • safe_mode_allowed_env_vars = PHP_
  • max_execution_time = 30 ; Max script execution time
  • max_input_time = 60 ; Max time spent parsing input
  • memory_limit = 16M ; Max memory used by one script
  • upload_max_filesize = 2M ; Max upload file size
  • post_max_size = 8M ; Max post size
  • display_errors = Off
  • log_errors = On
  • expose_php = Off

    在某些地方顯示執行 PHP 的資訊 (例:在 HTTP Header 裡加上一行 X-Powered-By: PHP/5.2.4 及 Server: Apache/2.0.59 (Win32) PHP/5.2.4 )。

  • <FilesMatch "\.(inc|.*sql|.*~)$">
      Order allow,deny
      Deny from all
    </FilesMatch>
    

2007-10-26

詭異的登錄檔機碼 HKEY_CURRENT_USER\S\P\

  • HKEY_CURRENT_USER\S\P\xxxxxxxxxx
  • 結果是跟 MSN Messenger 有關,xxxxxxxxxx 是指 MSN Messenger 的帳號(數字),在 %AppData%\Microsoft\MSN Messenger 下可以看到。
  • 資料來源:Registry problem

2007-10-24

存儲密碼

  • 絕對不要用明文儲存密碼!
  • 一個常見儲存密碼的方式,是用雜湊函數(如 MD5、SHA1) 計算出的雜湊值,來取代儲存密碼明文在資料庫裡。使用時(如使用者登入)只比對雜湊值而不直接取用密碼原文,可以避免被有心人士取得密碼表後直接拿去利用。
  • 但是,若只是直接單純使用 MD5 算出來的值,有可能利用 Rainbow Tables (預先運算的值所建立資料表)快速推算出原值(或 collision)。
  • 對欲計算雜湊值的字串“加料”,是一個對程式變動較少的解決方法。類似的方法不少,但簡單來說就是用兩個步驟以上處理密碼。
  • Blog.XDite.net » 淺談 BBS 資料的安全性
  • 石頭閒語:在 C 程式中使用 MD5 library 及其應用 - 樂多日誌
  • Rainbow Hash Table 與密碼破解 | 資安之眼
  • 對於一般的使用者:
  • 可以的話,使用最少 8 字元以上的密碼。
  • 可以的話,在密碼中加入特殊字元,即除了英文字母與數字[^A-Za-z0-9]以外的的字元(如!@#$%^&*)。
  • 避免使用單字、常見詞彙或其組合,來做為密碼。
  • 在不同的地方(網站或應用程式等)使用不同的帳號、密碼。

2007-10-23

停用 Dr. Watson

關閉特定 Ports

  • 查詢目前的網路連線 netstat.exe -an
  • 關閉 123(ntp) port ,停用 Windows Time Service。
  • 關閉 135(epmap) port ,目前還沒試成,替代方案是用 IP Security Policies 阻擋。
    1. Control Panel
    2. Administrative Tools
    3. Local Security Policy
    4. Right Click IP Security Policies on Local Computer
    5. Create IP Security Policy...
    6. Un-select Activate the default response rule
  • 關閉 445(microsoft-ds) port ,修改 registry (如下)後重開機。
  • Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters]
    "SMBDeviceEnabled"=dword:00000000
    
  • Port Assignments for Well-Known Ports

2007-10-22

UnRegister Windows XP DLLs

regsvr32 /u shmedia.dll
regsvr32 /u shimgvw.dll
regsvr32 /u zipfldr.dll
  1. 取消預覽 avi 檔的功能,預覽 avi 檔這個功能有時會造成 avi 檔無法刪除的問題。
  2. 取消圖片預覽(Windows Picture and Fax Viewer)
  3. 取消內建 Zip folder 的功能。

2007-10-16

Supercoder 2000

2007-10-15

用 RegExp 抓圖

  • 昨天為抓漫畫(謎),寫了小一段PHP,因為它用亂數檔名但沒有擋圖片外連,所以把所有網頁抓下來,用 Regular Expressions 把目錄裡所有網頁裡的圖片連結抓出來。
  • Regular Expressions 真的是說難不難;說簡單是一點都不簡單。
  • <?php
    $dir = 'tmp';
    $files = scandir($dir);
    array_shift($files); //移掉 . (本目錄)
    array_shift($files); //移掉 .. (上層目錄)
    
    foreach ($files as $i => $v) {
      $s = file_get_contents($dir. '/' . $v);
      $x = preg_replace('/[\S\s]+img src=(\S+) border=1[\S\s]+/i', '${1}', $s);
      echo "<a href=$x>$v</a><br>";
    }
    ?>
    

2007-10-13

text-overflow 自動截斷過長文字並補上省略符號

  • IE 6 以上版本及 Opera (最早支援的版本未知,我目前用 9.23 是支援的) 支援
  • .ellipsis{
       overflow:hidden;
       white-space:nowrap;
       text-overflow:ellipsis; /* for IE, O */
       -o-text-overflow:ellipsis; /* for Opera priv */
       width:10em;
    }
    
    <p class="ellipsis">這是一段沒什麼意義,但是很長、很長、很長、很長、很長、很長的文字。</p>
    
  • 同時需設定 width(相對要設定display:block;) 、 overflow:hidden; 、 white-space:nowrap; 等屬性。
  • MSDN textOverflow Property (defaults, A, ABBR, ...)
  • jide.fr » Emulate text-overflow:ellipsis in Firefox with CSS
  • 上一個鏈結提供的方式,我試用時得將(第12行) html>body .ellipsis span:after { 改成 html>body .ellipsis:after { 才能運作。

不得不駭(CSS) IE7

  • 因為 IE7 增加/修正了一些對 CSS 標準的支援,其中支援 !important 應該是對(有用這項 CSS Hack 的)網站開發人員最麻煩的一項。
  • 這也是不建議使用 CSS Hacks 的原因之一,某項 hack 有可能會遇到跨瀏覽器、跨版本支援等非預期的情況。
  • CSS Hack « 就是愛程式

2007-10-09

學生 ?= 廉價勞工

2007-10-04

conime.exe

  • 網路上說法太多了,無法確認。其中一種說法是亞洲語系的 Windows 系統有 conime.exe 是正常的,但我用的是英文版的…。
  • 僅刪除 %SystemRoot%\system32\conime.exe 的話, winlogon.exe 會立即將其從%SystemRoot%\system32\dllcache\conime.exe 寫回。

taso.exe

  • 網路上找到的資料以韓文為主,沒輒。TASO.EXE, Prevx
  • 在我 msconfig - Stratup 裡 taso 是寫在 temp\taso.exe ,但我的 temp 是放在 ramdisk 裡的(一關機就清掉了),所以目前死無對証…。

kavo.exe

  • 曬月亮的魚 這隻木馬還真麻煩-Kavo.exe-這篇裡有詳述。感恩啊~。
  • 病徵之一是無法改變“顯示系統隱藏檔”的選項。
  • 病徵之二是 msconfig - Startup 裡多了 kavo 一項。
  • attrib改變各分割區根目錄下的 autorun.inf 、 ntdelect.com ,以及 %systemroot%\system32\kavo*.* 的檔案屬性後予以刪除。
  • 注意 NTDETECT.COM 為系統檔案,勿誤刪。
  • 通常 kavo0.dll 處於已執行狀態,掛於 explorer.exe 下。

病毒三連擊!

  • 一次中三個病毒…最近“抓”太兇啦…
  • 一開始是因為隨身碟被掃到有毒,不過因為懶的弄,所以放了幾天沒處理。直到最近 IE 怪怪的,才想要清(結果竟然跟 IE 的問題無關…)。
  • 兩個簡易檢查有無中毒的地方,執行中的程序(Processes)及開機自動執行的設定(執行 msconfig.exe 裡 Startup 項目)。

2007-09-29

Lost 第一季

  • 最討厭的角色是 Charlie,比起來 Sawyer 還沒那麼討人厭。
  • Hurley 真的是個敏捷的胖子。
  • 第24集 Exodus, Part 2 裡,我以為 Arzt 只是單純想搶戲的人,事後查了一下,沒想到硝化甘油(硝酸甘油)還真的是很不穩定的東西。zh.Wikipedia.org…硝酸甘油由桌面高度掉落地面即可引爆…

2007-09-27

Nikon D50 試用心得

  • 跟 Benson 君借D50,算是第一次較完整的試用DSRL,配備如下:
    • Nikon D50
    • Nikkor AF 50mm f1.8D
    • Tamron SP AF Di 90mm f2.8 MACRO 1:1
    • Nikon Speedlight SB-800 + SD-800
  • 光圈超過 f4 以上的景深比我想像中淺太多了,一顆貓頭(的厚度)都拍不清楚。到 f1.8 時對眼睛拍,鼻頭就糊掉了。使用大光圈時,正確的對焦落點變的更加重要。
  • 用外閃打跳燈拍出來的效果,比機頂閃燈好太多了。
  • DSLR 續航力真是出乎意料的強,拍了約五百張後竟只掉一格。

The Prestige 頂尖對決

  • 主軸結局很容就猜到(雖不中亦不遠矣),但許多細節的地方都需要思考一下,才能將整個故事“補完”。

IE 寬度解譯與建議標準不同的問題

  • IE解析寬度(width)是內容寬度加上padding及border寬度。
  • 而建議標準的寬度僅指內容寬度,不包括margin、padding與border的寬度。
  • Cascading Style Sheets, level 1 Formatting model.
  • 其中一個方法是個人不喜歡用的 CSS hack。
  • 解決方法之一是用兩層block(如div),並避免在對同一層同時定義width與padding跟border-width。像用內層的margin取代外層的padding等。

2007-09-24

火鳳遼原

  • 有勇無謀如何能名留青史。
  • 漫畫裡的所謂的武將都是智勇雙全、武藝超凡;而智將則是機關算盡、料事如神。

2007-09-19

匯入 CSS 用 link 與 import 的差別

2007-09-17

24反恐任務 第六季

  • 真是有夠“緊湊”的!
  • 17集後半(搶到核彈後)突然就看不太下去。
  • 結尾不夠精彩。

2007-09-15

同時安裝多個版本 Firefox

移除 Adobe CS3 的 mDNSResponder.exe

2007-09-14

葉學弟打退伍

  • 葉學弟(兼同學)打退伍,在台北鬥牛士

安裝多重版本IE

2007-09-10

Dungeon Siege 2

  • 打一開始就用區域連線的合作模式過關,感覺還滿棒的。因為連線時會搶對話、同伴,所至我覺得最好還是先玩一遍單機(至少玩到Eva加入)。
  • 中文語音聽起來實在很奇怪。
  • 視角無法往上。
  • 第二章初期才有戰鬥法師的同伴加入。
  • 改字型大小,用 Dungeon Siege II Tool Kit 裡的 Tank Viewer 2 開 language.ds2res 找 global_settings.gas 改內容,再用TankCreator2 封成(任意檔名.ds2res)丟回Dungeon Siege 2\Resources。14點以上的字,段落結尾常看不到。
  • 用 ATI 顯卡,字型看起來模糊的話,改像素中心設定。

2007-09-06

羊男的迷宮

  • 輔導級?
  • 奇幻?
  • 精靈好醜!
  • 女主角又貪吃又笨…
  • 女間諜刺軍官那段我喜歡,通常這種橋段不是失敗的很愚蠢、就是刺的很沒力。
  • 軍官太強了吧!
  • 結局告訴我們:一切都是幻覺,嚇不倒我的…

蟲師 (1-8集)

  • 一套日式的靈異鬼怪/地方傳說的漫畫
  • 我個人並不喜歡這樣的題材類型 但這部並不會讓人感到反感 這還滿特別的
  • 租書同時也借了最新的四本火鳳燎原 店員竟然主動提醒我有兩本有借過了 真貼心啊

2007-09-05

網頁用UTF-8編碼 在 IE 無法正常顯示

  • 會有這個問題 是因為IE用title裡的字判斷編碼關係
  • 把 title 放在 meta 字集宣告之後即可
相關連結

2007-09-04

詭異的BT分享心態

BT 這種玩意應該是越多人抓越快、越多人做種越好吧,怎麼一堆人分享種子還加密、限回、限會員咧?

房間裡的螞蟻

前陣子不知道什麼原因,房間裡的螞蟻完全不見蹤影,直到最才開始又冒出來。但,詭異的是,最近冒出來的這批螞蟻,不吃甜食也不喝飲料,專喝白開水!?尤其是冷飲杯外凝結的水珠,更是牠們的最愛…

VisiPics

  • 一套尋找重覆圖檔的程式。
  • 固定的版面配置用來不順手。
  • Loose(est)搜尋,很容易會誤認色調偏黃或暗的圖為一樣的,即使內容差很多。

2007-09-03

罪與罰關於死刑

  • 不贊成廢除死刑,即使懸而不用也好。
  • 應廢除無期徒刑,刑期超過一定年限即等同死刑。例如:國民平均年齡70歲,總刑期超過70年則改判死刑(只是舉例)。
  • 重大犯罪,如蓄意連續殺人無悔意,應延遲執行死刑,期間需服其它刑罰(如鞭刑),依情節無限上綱。
  • 入監服刑必需工作,生產至個人所需。

  • 以下更新於 2008-01-02
  • 讓受刑人工作可能有安全(逃獄或取得違禁品等)上的疑慮,跑步機發電(不知道為什麼第一個想到的畫面是皮卡丘…)應該是個不錯的方法。執行起來單純、還可以消耗受刑人多餘的體力。

2007-08-15

Ghost Recon Advanced Warfighter 2

在剛玩過R6V後才玩這款遊戲,讓我頓時難以適應,連Easy級的第一關都過不了。看了網路上的討論後,試 著用主角一個人過關看看,這才體會到,同伴是用來擋人海的,其它情況根本派不上用場!

我覺得這遊戲還是以單人為主,策劃只是(很微小的)輔助。必竟你人身在前線,根本也沒什麼時間看地圖啊。

  • 第一次玩戰役的情況下,要重新部署第一關的話,得要把個人設訂檔刪掉才行!?
  • 這裡面最先進的,我覺得非 ZEUS-MPAR 莫屬,不但可以射後不理(自動追蹤),而且具有一發幹掉直升機、裝甲車甚至坦克的威力。
  • 手榴彈很難丟準,煙霧彈沒什麼效,M32(榴彈)很難瞄。
  • 敵人九成是用G36K,其餘的九成是用RPG,剩下的則是定點的重機槍。
  • 該帶 ZEUS-MPAR 就乖乖帶上吧,雖然一些場景有RPG可以撿,但用RPG很難打中啊。
  • 沒有熱顯像模式。
  • 同伴中彈時語音很吵,而且一點也沒有專業戰士的感覺。沒有命令可以執行時,同伴會一直傳語音來,彷彿怕被遺忘似的,煩。
  • 有時語音通訊會停倬,但按一下滑鼠就可以恢愎。
  • 敵人在在近距離碰到你時命中率很低,但中遠距離又準的要命。
  • 每場戰役簡報時預設的人員、武器配置有參考的必要。像加裝GL表示會有一大票敵人,有 ZEUS-MPAR 表示要轟掉些什麼。
  • 快速存檔會自動輪流使用三個存檔。這設計還不錯,不會有滿地存檔的情況,想後悔還可以退回三次存檔前。
  • 個人愛用MGS90加MP5SD。M99 Sniper 雖然帥(手動退彈、準心旁有距離標示、威力又大)但彈藥太少。
  • 可視距離太短!這裡指的是3D遊戲中呈現3D物件的距離,遊戲中也沒有提供設定選項。這項設定不但影嚮效能也影嚮遊戲性。
  • 承上,我在 Codename Farallon 這關一開始就遇到這個問題,敵人在可以看的到範圍外就開始攻擊。
  • 空照圖(戰術地圖)範圍太小,甚至小於可視距離,在指定同伴攻擊直升擊或轟炸時很不方便。很多時候都是得自已先到前方,再用戰術地圖指定同伴行動。
  • 戰術地圖為什麼不和綜覽圖(Overview)合在一起?
  • Drone 和 Mule 太少出場啦。
  • Texture quality 有選項但卻無法自訂。
  • 遊戲開始的影片都可以單鍵跳過,讚。可是破關畫面不能,太可惜了。
  • 戰役模式難度頗高(我玩Normal),中後期不帶同伴都不行。
  • 同伴AI和強度都不高。有看到同伴對一個敵人發射榴彈的情況,而狙擊手時常兩、三發才放倒一個。沒有指定同伴攻擊載具的話,就算背著 ZEUS-MPAR ,他還是會給你用槍慢慢打的。指定地點的途中有路障或需要繞路的話,就很容易卡住。
  • 遊戲配樂都不是很搭啊,尤其是破台後工作人員介紹的片段。
  • 似乎有帶同伴並全部存活的話,就會得到A的評價。
  • 不帶同伴一定會得到Leader成就(同伴沒有受傷)。
  • XBOX360 和 PC 版似乎有不小差距。

2007-08-11

牙齒與短命

如果人類是一種被設計、製造的生物的話,那麼,在原先的設計目標中,人類應該不是長命的生物。因為一般情況下,人類在成年前牙齒會全部換過一次,接下來的牙就跟著你一輩子。但是,若沒有一直持續妥善的保謢牙齒,牙齒的強度應該稱不過二、三十年,而牙齒又是人類進食必要的器官之一。所以我推論:

  • 人類預期壽命約四十歲上下。
  • 人類其實很適合吃流質食物。
  • 人類必然有能力(本能或智慧)保護牙齒健康。

2007-08-10

Command & Conquer 3 Tiberium Wars Part 2

終於把 GDI 、 Nod 和 Scrin 三個陣營的戰役玩完了,不過還是越玩越懷念RA啊!

  • 玩過 Nod 和Scrin 的戰役後就可以確認,會卡關不是因為GDI弱,而是敵方部隊有“加強”…。
  • 噴火車威力超強,但是皮也超薄,幾乎是被打到就爆了,不過我還是很愛用,尤其是看著火從窗口噴出來(笑)。
  • 很多場 Scrin 的戰役,我都用智者把工兵傳送到敵陣內佔建築的方法過的,先佔主堡或電廠,再防剩餘部隊的反攻就 OK 了,所以很多該陣營的能力我幾乎都沒用到…
  • 照劇情推論,Scrin 陣營都只是派來採礦的工兵部隊,而真正的入侵部隊看來下集才會出現。不過工兵就這麼強了,那下集人類這方要靠什麼打平(這類遊戲設計的目標都是打平而已)入侵部隊? Kane 嗎…
  • Nod 對於 Tiberium 及 Scrin 的了解,似乎比 GDI 深入許多…
  • 看到每個陣營的最後一段影片時,都讓人覺得好空虛啊…,一個說我名留青史(打到挫青屎到是真的),另一個帶我走到轉角(遇到…外星人!?),最後一個則是to be continue…
  • 三個陣營所經歷的戰役,都是基於相同的故事劇情上,只是時間、地點錯開了,玩家戰役結果並不影嚮劇情發展,這也許是讓我感到空虛的因素之一。
  • 我覺得這款遊戲過.於.強.調“一物剋一物”了,所以有些地方設計的不合理,像一隊星級的飛彈兵很容易被輕裝甲車擊斃,卻可以站在原地同時跟兩台小坦克對轟還羸(不被輾壓的話)。
  • 對戰地圖很明顯的,都是為了比賽而設計的,而且沒開放戰役中使用的地圖這點實在太可惜了。
  • 裝甲神兵的轟炸還要配合狙擊手,不實用。玩到後來這兩個單位我都不想用了,自找麻煩而已。
  • 人型機甲還滿酷的,還可以升級,八成是日本人做的(笑)。
  • 那個三足根本就是從世界大戰跑出來的嘛(翻桌)。
  • Scrin 的閡限之塔其實只是超大型的無敵採礦場(而且還防摔、防水、防泥巴)!?

2007-08-09

Barrett M107 .50 Caliber Long Range Sniper Rifle

Discovery 新時代武器看到的,Barrett M107 .50 口徑超遠距狙擊步槍,有效射程1500至2000公尺,有於實戰中成功狙擊2400公尺外目標的記錄。

真的是活見鬼了,被兩公里外的子彈打到不認命也不行,打哪來都不知道啊。

2007-08-05

Command & Conquer 3 Tiberium Wars

剛玩完GDI的劇情,實在不懂為什麼這款遊戲評價這麼高…(都是業代嗎?)。好懷念RA啊!

  • 遊戲提供的更新下載很慢。
  • GDI 的戰役有夠難的,尤其是需要建造基地的關卡,敵人如潮水般湧入!後半我都把成簡單然後把錢改滿了玩。
  • GDI 技術有夠落後的,一點都沒有未來感。
  • 等級很難提升,升滿最明顯的改變除了掛星星外,就是炮火顏色變了…
  • 為什裝甲部隊上都沒有配機槍?吉普車沒有、小戰車沒有、重戰車沒有連飛機也沒有!(反而是採礦車上才有)而且敵人還是人多的NOD,一點都不合理。
  • 同上,為什連飛機上也沒有配機槍?飛彈對空對地還得回基地換,是合理但不好玩。
  • 工兵只剩佔領建築一個功用而已,RA還可以搭APC修戰車咧。
  • 榴彈兵也只有把敵人炸出建築物有用而已,除此外幾乎用不上,可以的話還是把建築物連人一起轟爆比較安心。
  • 沒有英雄角色可用,那個突擊隊跟本就是渣啊…而且又貴!爆破完就趴在地上裝死兼等死。雖說是剋步兵單位,但遇兩三隊步兵以上還是被秒殺啊。

2007-08-04

三豪一翰 at 五分埔

  • 原本是要去逛衣服的,突然一場大雨把我們都關在一家小麵店,而C則是在捷運站。

2007-08-01

Devil May Cry 3 Special Edition (PC;TChinese)

  • 使用的中文字型真詭異。
  • 這種特定視角的第三人稱遊還真不合我味口。

2007-07-25

Tom Clancy's Rainbow Six Vegas (PC;English)

  • 讚!這才是我想玩的遊戲類型,操作簡單、動作流暢,同伴指揮容易、強度與AI都不差。找掩護(TAKE COVER)的動作設計的也很棒。
  • 我覺得 Story Mode 最不方便的是記錄點(Check point)是固定的,不夠密集而且也不一定在彈藥箱之前或之後。
  • 有些敵人是觸發特定條件後才出現的,所以偶而有同伴走過後沒事,自已走時敵人才出現的情況。
  • 被擊中時的特效太糊了(每次都被打中眼睛!?)。
  • 遊戲對話沒有字幕。
  • 1.05 的 patch 是有包括之前(1.01到1.04是各別安裝的)的更新。更新完就可以玩 coop story mdoe 了(謎)。
  • coop story mode 沒有劇情,只是把各個地圖依序過一次而已。
  • 20070726 發的 map pack (在xbox上好像是要錢的)也有包括一些更新。安裝完 coop t hunt 看的到地圖但還是不能玩…(謎)
  • 更新時若遇到找不到版本號的錯誤,可用regmon攔劫更新程式對登錄的存取,找出鍵值填上就好。每個人的鍵值會不一樣,而需要的數值錯誤訊息會告訴你。(謎)
  • 遊戲執行需讀光碟,CD-KEY只有online需要,單人與LAN不用。

2007-07-23

蓓來外木山浮潛

  • 沒想到蓓這麼會游泳啊,比班上某些人好多了呢(笑)。
  • 這麼久不見,蓓竟然還說我白,已經曬成這樣了還白(翻桌);蓓自已才真是瘦過頭了,感覺手一掐就斷的樣子。
  • 蓓的男友對她好像不是很體貼咧…希望是我的錯覺,不過這也不關我的事啦。

2007-07-21

Lost Planet Extreme Condition

  • 意外的難玩…總覺得動作很不流暢,也許是我操作不良造成的偏見。
  • VS很帥,尤其是老爸機那可以滑行的那型。而且看到變身的老爸機就知道這一定是日本做的!可動零件這麼多…
  • 敵人(士兵)在被遠距離攻擊時也不會反擊(VS會)。
  • 原本以為,依照遊戲裡T能源會持續減少的設計來說,這應該是快節奏的遊戲,可是我卻感受不到…只有開老爸機那段比較有感覺。可能與我太晚發現其實“很多敵人都可以直接闖過不用打”有關。
  • 當敵人連續攻擊或一次遇到太多敵人時,很容易被圍爐至死。
  • 鉤繩距離太短,也不能連續使用,很多時候想用鉤繩帥氣的迴避或移動,但下個畫面都還在原地…
  • 之前在路邊店家展示XBOX360時看過遊戲畫面,覺得還不賴。用自已的舊電腦跟爛螢幕來看就還好,雪花反而是種雜訊咧。(汗)
  • 雖然原文的劇情我只懂一些,但還是可以感受的到很多詭異的情結。其中我覺得最詭異的就是Basil幹嘛自爆?沒意義啊。這裡有過場動畫的劇情翻譯 SIDE 7 殖民地墜落計畫 - 始動

2007-07-20

Company of Heroes

  • 好玩!
  • 部隊進註建築物時會依照建築物損情況站不同位置。
  • 單人模式可以叫老兵出來(上一場戰役有升級並存活的單位),不過單位等級高低的差異不大(不像RA)。
  • 大頭模式很可愛。
  • CTRL + SHIFT + ~ open console
  • FOW_Toggle - Toggle Fog of War ON/OFF
  • ee_bigheadmode(#) - Bighead mode (#=0/1 Off/On)
  • setsimrate(#) - Set Game Speed (#=speed, 10=normal)
  • FOW_RevealAll - Remove Fog (need "-dev" arg)

2007-06-22

刪除檔案所花時間變久

當你刪除檔案時所花費時間變久(反應變慢),可以試著先把資源回收桶清掉試試。

ftp.adsl.hinet.net

由 Hinet 提供的 FTP 站,可以暱名上、下載大檔以測試速度。

上個月底家裡換成光纖(10M/2M)所以再試了一下,似乎有對下載檔案做限速,下載 test001m.zip 至 test040m.zip 速度只能至 180 kB/s,而 tset100m.zip 與 test200m.zip 可以到800 kB/s 。上載的部份都可以到160 kB/s 。

2007-06-19

腳尾米 關於台灣新聞媒體

這是一部有關台灣電視新聞的紀錄片,內容是我們設計了一些假新聞事件然後誘發電視新聞媒體採訪,成果方面讓我們非常震撼,因為總共有4家電視台分別採訪了我們的假事件,而且在製作過程我們也發現了很多電視台的弊端,希望各位能做最有力的見證者!

影片連結:腳尾米完整版腳尾米30分鍾版

不過可惜的是,在看完影片之後,我最想知道的問題:「既然很多人都知道台灣的新聞媒體不夠好,還是能每天“看新聞、配飯吃”呢?」依然沒有答案…

Update 20070623

最離譜的是當他問我覺得有什麼電視聞覺得不像是新聞的時候,我想了比較久的時間才回答他,但他最後播出來的版本卻只有我在想的畫面,居然把我回答的畫面刪掉,然後就說我"對新聞的認知回答不出來"。

相關連結

2007-06-16

日記 牙痛與飯局

流水帳模式啟動…

昨天吃完晚飯後,下門牙痛到不行,可是家附近的牙醫診所又沒開,只好先買止痛藥(Prophenatin HD-252)吃、並在基隆長庚的網站上掛號。

今天是ET那屆的畢典所以HS有上來台北,便約了晚上跟HS、GD、FN到衣蝶S館的鬥牛士吃飯。HS跟GD真是一對活寶,好久沒有笑這麼開心了。中途一段小插曲:不修邊幅的HS竟然叫一個看起來不到二十歲的服務生為“大姐”,而之後那位大姐有好一陣子沒來本桌服務…

吃完到附近走走,沒想到中山地下街的行政廣場竟然沒什麼人…

20070616-4659 (by 蟲仔)攝於光點電影院

20070616-4670 (by 蟲仔)回家時路過中山地下街的藝廊,看到許多不錯的作品,以下是幾幅讓我想拍下來留念的。

20070616-4661 (by 蟲仔)熊貓。

2007616-4664情感隔閡。

20070616-4673都市情感。

20070616-4669to be insatiably avaricious (無法滿足地貪婪)。

還有許多不錯作品在中山地下街的藝廊展出。

2007-06-12

相機小歐本年度第一次下水

今天遇到漲潮,水裡漂了不少垃圾,拍出來的效果也如預期的差…,不過小魚們還是很捧場,快把我手毛也吃光了!

因為拍的不好,所以就不在這裡貼出來了。我在flickr開一個Set專門放浮潛攝影的作品:UnderSurface

玉米的裝備還真是不賴啊,不愧是砸了錢的啊!

2007-06-10

在資料庫裡儲存密碼

在儲存密碼時,可以用Hash函式(如MD5, SHA1)計算出來的值取代明文,來存入資料庫裡,這是我從MySQL的架構裡偷學來的。

我個人認為,這樣可以減少一點使用者資料被有管理權限的人濫用的風險。而且當真的不小心密碼洩露出去,也不能直接拿來用。

缺點是需要耗費CPU Time。額外的好處是,不用去管使用者輸入的密碼格式(特殊字元、大小寫或長度),反正Hash過後都是唯一的鍵值(理論上)。

  • 這也是建議使用者在每個站使用不同密碼的原因,如果你註冊在某個站的資料被管理者盜用,不只是在該站的資料會有損失,也有可能帳號密碼被拿去其它網站嘗試登入。

2007-06-09

檢查表單 <form> 的 referer

檢查表單資料是不是“來自它應該來的地方”,有心人士可以在本地端建立一個表單,可以藉此略過一些檢查來送出資料。

PHP 可以用 $_SERVER['HTTP_REFERER'] 取得referer,但就如同PHP Manual寫的,這個值是不可靠的,所以只能當做基本的檢查。比較好的方法,可以用hidden欄位插入特定的值…(秘)。

'HTTP_REFERER'
The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.

2007-06-08

Blogger Timezone 裡沒有 Taipei Time …

剛剛在修改文章時間的時候,發現日期差了一天,直覺告訴我是時區錯誤的問題。到Setting > Formatting裡看到時區是[UTC -08:00]Pacific Daylight Time整個傻掉了,就是設錯也會不錯的這麼離譜,沒想到選單一拉下來竟然找不到Taipei Time(+08:00)…?

不過話說回來,我對時區設定並沒有什麼印像,也許是原本就沒有…吧。

2007-06-07

PHP 輸出靜態網頁的方法

最近在思考架站的問題,有考慮過以自已的電腦做為主機,不過這樣就得一直開著,而且也許會影嚮到我一般的使用(上網)。而虛擬主機需要花費,問題似乎也不少(CPU Time、頻寬、合約期限等)。

所以我在考慮一種方式,就是利用自已的主機執行動態網頁,輸出成靜態網頁(類似像Blogger)後,放在網路上的免費空間。這樣我的主機就可以正常使用,而網站也可以一直在線上,也不用煩腦太多主機的問題。

所以到網路上找到幾個PHP輸出靜態網頁的方法:

Apache mod_rewrite
  • 用伺服器模組去改寫網址,外表看起來是靜態網址(web_123_456.html),實際是動態網頁在運作(web.php?a=123&b=456)。
  • 對現有的程式架構影嚮較小。
Apache AddType
  • 我從前述方式想到的,就是修改Apache組態(httpd.conf),把PHP副檔名改掉。參見Hiding PHP
  • 需要變動的地方應該算是最少的吧。
  • PHP Smarty
    • 以 $smarty->fetch() 取得輸出內容後,再輸出成網頁檔。
    • 需要使用 Smarty 並改寫程式。
    • 需考慮是否適合輸出成靜態網頁。
    PHP Output Control Functions
    • 利用 Output Control Functions 的 ob_get_contents()取得輸出內容後,再輸出成網頁檔。
    • Output Control Functions 為 PHP 內建函式,且程式變動較少。
    • 一樣要考慮是否適合輸出成靜態網頁。

    就我的情況而言,我需要的是將動態網頁輸出的結果另存到靜態網頁的檔案,所以後兩者比較適合,正在學的Smarty,剛好派上用場。另外,改成靜態網頁似乎有助於SEO咧。

    資料來源

    2007-06-06

    Gecko DOM 的 selection 與 range

    • Gecko DOM 的 selection 與 range 只能作用在網頁上而且不包括 textarea

    2007-06-05

    Cluesheet.com

    在找 PDO 在 SQL injection 方面的資料時找到的網站Cluesheet.com,裡面有許多關於PHP的tips。

    以下為摘錄資安與效能部份,完全內容請至Cluesheet.com。雖然 PHP開發人員必須知道的一些技巧 裡有翻譯一些,但第一句好像就翻錯了(也許是原站有改過也說不定)?所以我想試著翻譯看看。

    Security

    • 使用 PDO parameters 來傳遞 SQL 值以避免 SQL injection 。
    • 使用 htmlspecialchars/htmlentities and/or strip_tags to escape html and JavaScript 以避免 XSS 攻擊。
    • 使用 sessions 與 secure sockets to 避免 session hijacking. Use md5 檢查碼去檢證 session ids. Store a special token md5(uniqueid(rand(),time)) in the session and bump it against a hidden field in the post form. eg. $_SESSION["token"]===$FORM["token"].
    • 使用 escapeshellarg/escapeshellcmd 在你呼叫 exec 函式前以避免command injection。
    • Do remove linebreaks from incoming headers to prevent early header termination and injection. Fixed >PHP5.1
    • 使用 md5 檢查 serialized (序列化)的值與 sessionid 是否完整。
    • === 來確認輸入的值是否連型態都正確。[譯註:由於PHP不是強制型別的語言,如使用==來比較的話,就不能確定使用者輸入的是ture、1、-1還是"1"?請參考the type comparison tables。]
    • Do use security through obsurity:
      • ini_set("display_errors",false);
      • ini_set("log_errors",true);
      • ini_set("error_log","path/to/php.log");
      • ini_set("session.save_path","path/above/www"); or "mm" session module or store in a sqllite db
      • php.ini expose_php=off
      • php.ini register_globals=off
      • Apache servertokens=prod
    • Use session_regenerate for any user privledge escalation in application.
    • Use secure sockets SSL for commerce transactions.

    Performance

    • 使用單引號取代雙引號。[譯註:雙引號要檢查裡面是否有變數如 "He drank some $beers."。]
    • 使用switch 取代大量的 if 句法。[譯註:可以配常數來使用。]
    • 避免在每次都重覆的情況下,使用函式來測試迴圈條件 for($i=0;i<=count($x);$i++){...[譯註:可以先決定值的話,就移到迴圈外吧,$cntX = count($x); for($i=0;i<=$cntX;$i++){...]
    • Do use foreach for looping collections/arrays.
      • PHP4 items are byval
      • >PHP5 items are byref
    • 當你在建立複雜的 PHP classes時,考慮一下使用 Singleton Method
    • Do use POST over GET for all values that will wind up in the database for TCP/IP packet performance reasons. 基於效能的理由,使用 POST 取代 GET 傳遞所有的值對於資料庫傳遞 TCP/IP 封包有顯助的提升。
    • 基於效能的理由,使用 ctype_alnum,ctype_alphactype_digit 取代 regular expression 來測試表單數值的類型。
    • Do use full file paths in production environment over basename/fileexists/open_basedir to avoid performance hits for the filesystem having to hunt through the file path. Once determined, serialize and/or cache path values in a $_SETTINGS array. $_SETTINGS["cwd"]=cwd(./);
    • Do use require/include over require_once/include_once to ensure proper opcode caching.
    • Do use tmpfile or tempnam for creating temp files/filenames
    • Do use a proxy to access web services (XML or JSOM) on foreign domains using XMLHTTP to avoid cross-domain errors. eg. foo.com<-->XMLHTTP<-->bar.com
    • Do use error_reporting (E_ALL); during debug.
    • Do set Apache allowoverride to "none" to improve Apache performance in accessing files/directories.
    • Do use a fast fileserver for serving static content (thttpd). static.mydomain.com, dynamic.mydomain.com
    • Do serialize application settings like paths into an associative array and cache or serialize that array after first execution.
    • Do use PHP output control buffering for page caching of heavilty accessed pages
    • Do use PDO prepare over native db prepare for statements. mysql_attr_direct_query=>1
    • Do NOT use SQL wildcard select. eg. SELECT *
    • Do use database logic (queries, joins, views, procedures) over loopy PHP.
    • Do use shortcut syntax for SQL insers if not using PDO parameters parameters. eg. INSERT INTO MYTABLE (FIELD1,FIELD2) VALUES (("x","y"),("p","q"));

    使用 PDO parameters 來避免 SQL injection

    • 在找 PDO 在 SQL injection 方面的資料時找到的網站 Cluesheet.com,開宗明義,第一句就講了:Do use PDO parameters over SQL values to avoid SQL injection.,可是沒說HOW and WHY…(汗)。
    • 所以小實驗了一下,發現 bindParam() 有像 mysql_real_escape_string() 的效果。
    • $dbh = new PDO(DB_DSN, DB_USER, DB_PASSWORD);
      $sql_find_repeat = 'SELECT COUNT(*) FROM `table_name` WHERE `col_name` = ?;';
      $sth = $dbh->prepare($sql_find_repeat);
      $sth->bindParam(1, $value, PDO::PARAM_STR);
      $sth->execute();
      

    2007-06-01

    Smarty 學習筆記初篇

    只要include到Smarty.class.php就好,不需增加目錄到 include_path 也可以使用。

    將定界符改掉(預設是大括號{}),建議用兩個字元以上,這樣可以減少跳脫(escape)的麻煩。前後加上HTML的註解符號,可以讓模版獨立預覽(除了嵌入檔案、<title>與屬性值之外,對網頁影嚮較少),對於設計者也比較方便。

    require_once('x:/realpath/Smarty-2.6.17/libs/Smarty.class.php');
    $smarty = new Smarty();
    $smarty->left_delimiter = '<!--{';
    $smarty->right_delimiter = '}-->';
    $a = 'This is a title';
    $smarty->assign('title', $a);
    $smarty->display('index.tpl.html');
    
    PHP Strict: Timezone = Asia/Taipei

    由於我在php.ini有設定error_reporting = E_ALL | E_STRICT。所以安裝Smarty 的時候出現 strict 錯誤訊息:

    Strict Standards: strftime(): It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for '8.0/no DST' instead in XXX\Smarty-2.6.17\libs\Smarty_Compiler.class.php on line XXX

    到 php.ini 設定 date.timezone = Asia/Taipei 就好。

    2007-05-29

    來更新網路

    • 中華電信的工程師來換裝 vDSL 的 MODEM (ZyXEL P-872H) 及 MOD 的機器。
    • 工程師騎的機車上,除一大包線材與工具外,具然還掛了一個小馬椅!真是辛苦。

    2007-05-24

    我的相機 Olympus μ-720sw


    Olympus μ-720sw 日文官網介紹中文官網介紹。圖片來自元佑實業

    當初為了“防水”、“輕便”兩個需求所買的相機,使用近一年下來的心得:

    • 成像不夠銳利、飽和度也不夠,幾乎每一張都得後製。
    • 紫邊在放大看的時很明顯…

      20070507-4370

    • 廣角瑞的桶狀變形在LCD上預覽時就看的出來,每次拍海平面都會變成“海凸面”…

      20070507-4462

    • 而xD卡在實際使用上倒是沒造成什麼困擾(因為裝上後幾乎就沒有再缷下來過了),只是買的時候心理很幹就是了。我出門一整天拍攝的量大約兩、三百張內,用720sw最高畫質(3072*2304, JPEG)拍攝,平均單張約3MB左右,1G的容量剛好可以滿足我的需求。
    • 自拍(定時)器只有12秒可選,很多情況下都太久了,如果能增加選項或自訂秒數會更好。
    • 場景模式切換方式很簡單(上下選擇),但很不方便,二十幾個模式一個一個按要按到什麼時候啊!?
    • 附贈光碟裡的軟體Olympus Master,用起來實在不怎麼方便,所以後來就沒有深入研究,只有在用全景合成的功能。
    • 拍攝全景(panorama)模式時只能由左至右拍,合成的時候也沒有任何選項可以調。

    如果還有下一台相機的話:

    • 即使輕便型相機也一定要有手動模式(M/Tv/Av)。
    • 如果有記錄垂直構圖的資訊(EXIF)的話更好。
    • 更高畫素。對我而言,高畫素主要是在後製的時候比較方便。像我常會用裁切的方式重新構圖,再調整亮度、飽和度等,處理完後再用縮圖達到銳化的效果。還有就是可以保留一些在拍照當下沒有注意到的細節。

    2007-05-08

    初遊獅頭山;眺望燭台雙嶼

    玉米今天有排休,臨時約去燭台雙嶼拍照。這次一樣從外木山沿著海岸走,一開始玉米先帶我繞到基隆港港西岸,牛稠港旁的小山上(從中山隧道入口旁的小路上山),從這裡可以看到許多停在軍用港口的船隻。

    下山發現像似公園入口的階梯,原來這裡是基隆築港殉職者紀念碑。

    20070507-4297眺望基隆港,攝於基隆築港殉職者紀念碑。

    再到外木山賞浪。

    20070507-4314浪花,攝於外木山海興海水浴場旁。

    20070507-4328浪花,攝於外木山海興海水浴場旁。

    20070507-4349岩石旁看到,圓潤的葉子,攝於外木山海興海水浴場旁。

    又在野柳逗留一下。

    20070507-4367-2特別的邊緣,攝於野柳地質公園外。

    20070507-4370岩壁有如嚴重鏽蝕後的刀刃(可惜紫邊太嚴重了…),攝於野柳地質公園外。

    20070507-4372直挺挺的小草,攝於野柳地質公園外。

    20070507-4379清澈的海水,攝於野柳地質公園外。

    20070507-4420人們要到什麼時候,才能懂得不要去破壞自然環境?攝於野柳地質公園外。

    聽說野柳地質公園入口旁有條路,不用買門票就可以爬上那裡的小山丘,不過這次沒找著。

    20070507-4432破舊的小巷子中發現一隻正在做日光浴的貓,攝於野柳地質公園外。

    20070507-4438野柳常見半面山的地形,攝於野柳地質公園外。

    20070507-4440廟旁發現心型的葉子,攝於野柳地質公園外。

    終於到獅頭山,沿途有很多蝴蝶。

    20070507-4446蝴蝶一直飛舞著,攝於獅頭山公園。

    20070507-4462燭台雙嶼,攝於獅頭山公園。

    20070507-4489岩壁上有幾朵百合,攝於獅頭山公園。

    回程的時候太陽已經快下山了。

    20070507-4515涼亭,攝於獅頭山公園。

    20070507-4508枯枝的剪影,攝於獅頭山公園。

    20070507-4509枝頭鳥,攝於獅頭山公園。

    20070507-4519x2夕陽下的磺港漁港,此圖是由兩張照片合成的全景照,攝於獅頭山公園。

    搬家經驗

    由於某些因素,這次實在稱不上是搬“新”家,把一些心得記下來,供以後做參考。

    油漆工
    • 一大一小的刷子,小刷塗邊比較方便。
    • 刮刀,填平空隙(矽利康或補土)、刮掉舊漆、壁癌用。
    • 易撕膠帶,擦油漆前先沿邊緣貼起來就可以放心的刷了。
    • 舊報紙,不管再怎麼注意,油漆還是很容易滴到地板,先舖好再擦吧。
    • 油性的油漆“必須”要稀釋後再擦,不然擦完表面會變的軟軟、粘粘的,稍微按壓就會留下痕蹟,這個情況會持續超過五天。
    • 水性的油漆(水泥漆)要擦兩遍以上顏色才會飽和。
    • 油漆同一種顏色有分平光跟非平光,平光擦後看起來光滑、亮亮的,而非平光的看起來會粉粉的。
    • 油性油漆散發的氣味有毒,對環境也不好,除了擦室外牆面或金屬表面等,盡量避免使用,使用時也務必保持空氣流通。
    • 使用前或稀釋後務必將油漆攪拌後再擦。如果攪伴棒伸住桶底攪伴時阻力異常增加,那表示還不夠均勻,可以用桶子互相倒(像印度拉茶那樣)的方式攪伴。
    網路工
    • 佈線用的壓條最好買比需要的大小再大一點的,不然線路會不好塞進壓條裡。
    • 網路接頭,最好一次買多一點,為了一、兩個接頭再出門一趟實在划不來。
    水電工
    • 三用電錶和驗電筆,據說可以用電錶取代驗電筆,不過我實在沒那個勇氣去摸負極…。
    • 電鑽是必備工具,要買能鑽水泥牆和木頭的(配合鑽頭)。打釘前先鑽一個小孔,四週比較不會裂開。
    • 電鑽上會標示一組分數(像我們家的是八分之三)是指可以安裝最大的鑽頭大小(直徑;寸),四分之一是比較常用的大小。買的時候還要注意鑽頭尾部的形狀(圓柱、六角形或四角形),電鑽不一定都能夾的住。
    • 鑽頭在鑽水泥牆或木頭之後會發燙,不要徒手去碰。
    • 電源插座(以面對插座的方向來說)右邊較短的孔是火線(帶電、紅線),左邊較長的孔是水線(不帶電、白線),下方的圓孔是地線(不帶電、綠色)。
    • 電源(電燈)開關應該接在火線上,避免不必要的耗電。
    • 鐵門門鎖不像喇叭鎖那麼容易自行更換,像這次就遇到孔太小還有軸心太長的問題,沒有可以切鐵的砂輪機還真沒辨法咧。
    • 螺旋型的省電燈泡發光效率較U型及圓型好,也有不同長度(螺旋圈數)與功率的省電燈泡可以選。
    • 常見的燈泡接座大小主要有兩種:E27直徑比十圓硬幣大一點,常用於天花板上吸頂燈座;E14直徑比一圓硬幣小一點,常用於小夜燈。(E27、E14好像就是直徑分別是27mm、14mm的樣子)
    • 常見的燈泡顏色也有兩種:一種是白色的稱晝光色或白光色;另一種是黃光或稱燈泡色。
    • 我們家是整個弄反,火線是白色、水線是紅色、插座孔也左右相反。配電箱有一個接地的銅排,但都沒有拉線到插座。

    傢俱在可能的情況下要考慮:

    • 易拆易組裝:搬運方便或能節省儲藏空間,安裝時用自攻螺絲取代釘子。
    • 可折疊收納:暫時不用可以騰出空間,如折疊椅、折疊桌。
    • 多用途:座椅兼收納箱、沙發兼床。

    IKEA 的家具看起來都容易拆卸、組裝,但卻沒看到幾樣是可以折疊、收納。

    我看過的組合床有兩種,主要差別在於床板的支撐方式,一種是床板比較厚,直接扣住四週床架;另一種床板較薄,下方由幾根支柱撐著。個人覺得後者比較穩,在床上滾的時候比較沒有噪音。

    修補單扇門大小(約2m*1m)的紗窗網,用釣魚線$600、鐵線$1200。塑膠輪$150、長方形鋁框加紗窗$600;正方形400,鋁門鉸鏈$100 小形單鐵柱鎖$100。

    2007-04-29

    初探石門老梅

    一早玉米打來說要乘退潮時(約下午兩點半)去老梅拍照。

    20070428-4157我們十一點半左右出發,從外木山過去。在那看到一些“勇伯”在遊泳,攝於基隆外木山海興海水浴場旁。

    20070428-4169再拍一次澳底海灘,攝於澳底橋旁。

    20070428-4179先遶到萬里的飛行傘場地遠眺翡翠灣,今天天氣不好,沒人飛。

    20070428-4200下山時在路邊看到一顆桐花樹,掉了一地桐花。

    20070428-4218看人衝浪,攝於野柳龜吼漁港旁住翡翠灣方向。

    20070428-4237很漂亮的地質紋路,攝於野柳東澳漁港旁。

    拍到一半發現已經超過兩點半了,再這樣走走停停沿路拍的話,老梅就不用去啦!所以我們決定直接出發前住老梅。但就在這個時候,我的相機沒電了!

    待續…

    2007-04-23

    require 和 include 的差別

    • 簡單來說就是 require 出錯時會讓該 script 停下來(throw Fatal Error),而當include出錯時 script 會繼續執行(Warning)。
    • 還有就是,require 和 include 都是 Control Structures,而不是 Function。

    2007-04-20

    科技進步,人心依舊 « Mr./Ms. Days - 網路, 資訊, 觀察, 生活

    • 如果科技是為了滿足人類的欲望與需求而生,那生活在擁有先進科技的當下,為何人們還是不快樂呢?

    2007-04-19

    Flickr 免費帳號偷吃步分享

    不要在網路上使用真名

    • 傳說中的法師是不會讓別人知道他真正的名字,以免被其它的法師下咒。

    • 在網路上張貼文章或資料時,要注意不要使用別人真實的姓名,也不要將別人真實的姓名跟照片放在一起。
    • 除非是用在正式的場合,如引用論文等,或是經過他人的同意。
    • 因為你並無法去限制誰能看到那些放在網路上資料,其中包括網站資管理者。

    2007-04-17

    再戰 VMware

    • 今天整天都在搞 VMware,原本想架幾個 Virtual Machine 當 Server 來用,照理說設定成Birdged Network 應該不會有這個問題,但不知為何就是無法從 Host OS 連到 Guest OS,反過來卻可以!?
    • 用 Wireshark 分析封包後還是看不出來問題點在哪(暈)。還有當試著在 Gues OS 裡打開網卡的IEEE 801.2p 後,就無法撥接adsl!?
    • 弄了一陣子,還是決定暫時先放棄架 server 在 VMware 上這個想法…

    石磚縫裡的小花

    • 石磚縫裡的小花。攝於基隆八斗子,望幽谷。
    • 老家屋頂上的小花圃開了花。

    2007-04-03

    大武崙沙灘

    • 攝於基隆市安樂區,澳底漁港旁的沙灘。為基隆市僅存的沙灘,不過時至今日,大部份的沙都是人工填回的吧。

    2007-03-28

    Free Hugs Campaign.

    • Sometimes, a hug is all what we need.

    • 看到這部影片,你是否會感慨現實生活中,人與人竟是如此的難以親近?
    • 以下是影片配樂的歌詞:

      All The Same by Sick Puppies
      I don't mind where you come from
      As long as you come to me
      I don't like illusions I can't see
      Them clearly
      
      I don't care no I wouldn't dare
      To fix the twist in you
      You've shown me eventually
      What you'll do
      
      I don't mind...
      I don't care...
      As long as you're here
      
      Go ahead tell me you'll leave again
      You'll just come back running
      Holding your scarred heart in hand
      It's all the same
      And I'll take you for who you are
      If you take me for everything
      Do it all over again
      It's all the same
      
      Hours slide and days go by
      Till you decide to come
      And in between it always seems too long
      All of a sudden
      
      And I have the skill, yeah I have the will
      To breathe you in while I can
      However long you stay
      Is all that I am
      
      I don't mind...
      I don't care...
      As long as you're here
      
      Go ahead tell me you'll leave again
      You'll just come back running
      Holding your scarred heart in hand
      It's all the same
      And I'll take you for who you are
      If you take me for everything
      Do it all over again
      It's always the same
      
      Wrong or right
      Black or white
      If I close my eyes
      It's all the same
      
      In my life
      The compromise
      I close my eyes
      It's all the same
      
      Go ahead say it you're leaving
      You'll just come back running
      Holding your scarred heart in hand
      It's all the same
      And I'll take you for who you are
      If you take me for everything
      Do it all over again
      It's all the same

    Youtube 2006 年度精選影片

    安裝 Apache HTTPD 失敗 Installation Wizard Interrupted

    • 執行 .msi 安裝檔時遇到的問題,試過 1.3、2.0、2.2三個版本都一樣。
    • 查了記錄也看不出怎麼回事:msiexec XXX.msi /l*v log.txt
    • 網路上找到了手動安裝這個方法:msiexec /a XXX.msi
    • 接下來就是複製並修改 httpd.conf,還有得手動建立 logs 目錄,否則無法啟動。

    2007-03-27

    遠眺野柳


    • 遠眺野柳 20040725. 攝於基隆外木山 by Jano
    • 整理相片時發現幾張似乎還有後製的空間,結果一天就過去了…
    • 上傳時再次試用很久以前申請的flickr(沒想到帳號還在),嗯,網頁的反應速度滿快的,操作介面也很容易上手,懷疑當初為什麼沒再用下去呢?模糊的印像中只記得:免費的flickr帳號只能設三個SET…一年$24.59USD…還滿心動的…

    2007-03-26

    壞孩子的 Videogame - 匯豐 GTA PS2

    2007-03-24

    我與Wii的第一次接觸

    1. 從我家騎了一個半小時(約四十三公里)到捷運府中站,到 Chrono 家玩 Wii。
    2. Wii Sport、第一次接觸、壞莉歐等,兩個小時左右我就沒力了。
    3. 玩到後來我以經沒力再動,乾脆叫Chrono玩一下薩爾達給我看,畫面很棒也很流暢。
    4. 最後玩兩局保齡球做為Ending,去府中站旁吃了一碗博多拉麵後,回家。

    2007-03-23

    The Joel on Software 讀後心得摘要

    • 前幾年看過其中的兩、三篇(繁中翻譯計畫),這次則是一口氣把他看完,眼睛好酸啊。我覺得 Joel 寫的內容主要是針對“打算要賣錢的軟體”產品,對於那些只是做好玩的程式不見得適用,但對於軟體專案的經理及程式設計師都相當值得參考。
    • 經驗!
    • 讓員工有足夠的權力及不被打擾地做好他該做的事,包括不要切換工作(即使是同性質不同內容也不要)。
    • 更好的硬體資源(如:減少等待編譯的時間)及安靜的工作環境對生產力是有幫助的。
    • 員工對公司的助益至今乃無法有效衡量,所以在組織內做排名(考積、積效、獎勵)大部份情況下是有害無益的。
    • 註解應該註明:為什麼要寫這段程式碼,避免事後在整理原始碼或最佳化時,把原本解決的問題又弄回來了。
    • 程式介面的反應應該與使用者預期的一樣。
    • 如果沒有必要就不要提供使用者選項或訊息。
    • 告訴使用者他們必須要知道的,像一套產品要多少錢。
    • 提供回到預設值(全部或局部)的功能。
    • 使用者都是不看手冊的!
    • 當使用必需看手冊時,手冊必需是簡潔有效的!
    • 調查使用者是如何用你的產品。
    • 相容性!!取得別人的客戶,首先得挖別人牆角。
    • 提供資料的匯出匯入的功能,讓使用者能放心的採用你的產品。
    • 使用錯誤追蹤。
    • 發起錯誤者,才可關閉追蹤。
    • 當程式當掉的時,提供記錄程式錯誤的功能或資訊,以利除錯。
    • 量產。
    • “實際去用”自已的產品。
    • 好的程式語言,嚴謹的規範。
    • 盡可能讓自已的產品不需依賴別人的產品。
    • 備份。不需要到世界末日還在工作,但也不能因為一顆硬碟掛掉而損失寶貴資料。
    • 不要死守規則!

    2007-03-22

    IT WORKS ON MY MACHINE

    2007-03-21

    黑貓名片

    地小人稠

    • 民國93年統計,台北市與高雄市人口密度達每平方公里近一萬人!

    • 我覺得台灣有很多的問題都來自於這裡吧。忘了從哪聽得來的事,說台灣都市的人口密集度全世界僅次於香港。
    • 註:曾在 Discovery 看到:香港的人口密度平均下來,大約是一個網球場上要住二十二個人。

    2007-03-19

    300

    • Madness!? THIS IS SPARTA!
    • 跟玉米去美麗華看300壯士IMAX版,很棒的一部片,而且也有很多很有氣勢的台詞!

    • Spartans! Tonight, we dine in hell!

      下巴好像要脫臼了…

    • We shall fight in the shade.
      箭雨下談笑風生,是我滿喜歡的片段。
    • 而最後被包圍的那段,沒有表現出奮戰到底的感覺,是比較可惜的部份。
    • 第一次看IMAX,布幕真的很大,但字幕真的很小…
    • 世紀帝國新種族“斯巴達人(300版)”:只要在蓋城牆的地點附近殺死敵人,就可以減少石頭的花費…。

    我的電腦及零組件清單

    目前的設備
    舊零件
    • AMD Athlon 64 3000+(D0,Winchester,90nm,512KB) FSB 2000
    • Giga-byte GA-K8NSC-939
      • BISO Ver. F8 2005/12/26
    • Elsa 影雷者 940GT
      • NVIDIA GeForce 6800 GT, Core Clock: 350 MHz
      • AGP8X
    • Transcend DDR400 1G TS128MLD64V4J * 2
    • WD 2500JS 250G SATA
    • AMD Duron 950
    • Iwill KK-266Plus-R
    • SDRAM PC-133 128MB * 1 + PC-100 64MB * 1
    • Ti 4200 啟亨大銀家
    • ST340810A 3.34 40G
    • Asus CRW-5232AS
    • Case 雜 ATX 四大二小四五隱
    • Power 雜 300w (ATX1.3或更舊)
    • Delta 250W

    Active@ Partition Recovery

    • 大前天(2007-03-16)想試用一下 CF to IDE 的轉接卡來裝 FreeDOS 看看,沒想竟然不小心把主硬碟的分割區資料給清了!接下來兩天可真是惡夢啊。
    • 其間試了許多方法,最後是用了NTFS.com推薦Active@ Partition Recovery,馬上藥到病除。Windows版的主程式不用安裝,可直接執行,只要按下QuickScan後再選擇要恢復的分割區就OK,方便又快速,讚!

    2007-03-16

    要開始學點東西了

    • 拿衣服給小粉,看到學校圖書館一樓改的還挺不錯的。
    • 跑去天瓏買了一本 Zend PHP Certification STUDY GUIDE (NT$1020)。結帳時老闆說可以收集至該店購物的發票到6000元可換會員卡一帳,無期限。

    2007-03-15

    Thermalright HR-05 SLI


    • 圖來自 Thermalright 官網。
    • 於光華入手 Thermalright HR-05 SLI (NT$860),原本只是去幫老哥買個 8cm 風扇的啊…。
    • 效果出奇的好!剛裝完後第一次開機還以為敏熱電阻壞了,怎麼只比室溫(當下是攝氏24度)高一度?用手指摸了一下發現敏熱電阻沒壞,run了半個小時也只提升三度而已(原本的散熱片在拔掉風扇後,溫度會直接飆升到40到45度),真是太讚啦!
    • 另外還買了:
      • Goot BS-10 助焊油 10g $60
      • Goot ST-30 烙鐵架 $150
      • Buffalo ETP-C6-F1LG CAT.6 白色扁線 網路線 1m $99
      • 台製吸緆線 $21
    1. Thermalright Thermalright HR-05 SLI

    2007-03-09

    終於把烏龜的電腦搞好了

    • 以後還是少做這種賠錢生意吧,一台電腦搞的兩個人這三天都在大雨中來回,真是。
    • AthlonXP Barton 2500+
    • MSI K7N2 Delta-L

    SLIK MINI-PRO III 入手!

    • 楔石入手。去拿貨的時候,一開始店員竟然跟我說要價$1400!幸好是虛驚一場,還是以$850入手。

    2007-03-04

    觀音山硬漢嶺


    • 圖為觀音山硬漢嶺對聯:「走路要找難路走,挑擔要揀重擔挑」,攝於 2007-03-04。
    • 約“山友”烏龜爬觀音山,打聽到要搭三重客運由台北北門開往觀音山的車,一開始還以為是台北火車站的北門…

    2007-02-26

    年初五的三天兩夜

    • 一早出門本以為可以順利、準時的搭車,沒想到,到了北門才發現日統換地方了,害我提著大包(Roa的)小包(芳的)在路上跑…。 (-_-|||)
    • 第一天先黑松在白河的老家,六溪電影文化城,南元農場,黑松朋友家過夜。
    • 第二天一早小烏龜加入,再到日月潭,爬慈恩塔,夜遊華山。
    • 第三天竹崎親水公園及竹崎火車站,回程路過梅山。
    • 來回車程(斗六到台北)都只花了約三個半小時,真是意外的順。
    1. 六溪電影文化城的傳統街道並沒有預期中的復古的味道,反而給人破舊的感覺,因為許多地方看起來都沒有規劃及維護,中途依婷還踩爆了一片木質地板咧。相較之下,台灣故事館就好得多了。
    2. 日月潭風景真的不錯,下次再找機會去。
    3. 這次出遊已經有預設中南部的天氣比較熱,沒想到結果天氣還是比想像中的好(熱),害我多帶一了些衣服沒穿到。

    副檔名 .SQM

    • Service Quality Monitor 的首字母縮寫,系統槽根目錄(C:\)底下的 sqmdata00.sqm 與sqmnoopt00.sqm 等檔案,是由 Windows Live Messenger 產生的,可刪。

    2007-02-19

    年初二 回娘家 收紅包

    • 這次娘家就在家門口斜對面,走沒兩三步就到了。這次應該是最後一次拿紅包了吧。

    2007-02-13

    買了新手機 Asus V80

    • Asus V80 空機簡配(NT$5500)加 SanDisk MiniSD 2G (NT$1150元)。

    2007-02-09

    終於去辨返鄉與新身份證了

    意外的快速與順利!

    先拿舊的身份證去辨報到,然後再去換新證。從頭到尾包括領到新證,整個過程約不到十分鐘,令人激賞的效率!完全不像想像那樣牛步的處理速度。當要領新證前,服務人員請我到旁邊等候,當我瀏覽一遍牆上公告後,正想拿一本雜誌來看的同時,竟然就叫到我的名字了(辨好了)!雜誌都還沒抽出來也!

    辨完返鄉報到後,我的軍旅生涯就算正式結束了(不是告個段落喔),因為我服務的單位好像不需要教、點招,爽啊!

    2007-02-08

    南港山親山步道一遊

    • 從象山靈雲宮出發,經拇指山轉住坑頭土地公廟(樹梅古道),之後沿著研究院路四段至福德宮,經麗山橋步道接南港山稜線步道,住九五峰方向前進並折回象山。總共花了六個小時。

      只有累而已!

    • 松鼠很多,還有人丟了一袋麥片,一隻松鼠就不顧旅客往來,就在路邊啃了起來。
    • 九五峰就看到上面站兩隻鴿子,其中一隻看到我拍照就拉了一坨屎,然後走掉…。

    2007-01-31

    問別人.別人的事

    • 提醒自已:當有需要問別人“另一個人的事”的時候,務必表明來意,記得也跟別人寒暄幾句,避免讓人留下只是為了利用一下的感覺。
    • 前兩天 Money 小姐打電話來就有問候幾句,但畢竟平常沒什麼交集,最後也不了了之。

    2007-01-22

    為splash page提供一個skip link

    • splash page指的是網站或程式開啟時,用來廣告或吸引注意的第一頁,且通常沒有放置網站主要的內容。若用 Flash 動畫(或其它)時,需提供讓使用者跳過不看的鏈結,而且該鏈結不能只做在Flash動畫裡
    • 功能列表的鏈結,若使用者無法使用,就不應該顯示或提供鍵結,浪費使用者時間。

    康熙來了 孩子王大變身

    • 汗…怎麼跟她哥差這麼多!

    2007-01-19

    言葉にできない more than words can say

    • 一圖勝千言,一切盡在不言中…

    早知如此,何必…

    2007-01-13

    移除MSN廣告

      1. 用Resource Hacker 改msgres.dll
      2. 找 4004 → 923 → 1033 →“Constrainer layoutpos=top”
      3. 將 top 改為 none 然後按"編譯指令碼"
    • 移除MSN主頁面的廣告的部份,在WLM 8.0.0812.00測試成功,而移除MSN對話框的廣告的部份沒有成功。
    • Archer's Blog: Msn 無廣告 免path - 利用 Resource Hacker

    2007-01-06

    Flood Maps

    標籤分類

    Blog Archive

    Labels

    Google Analytics Tracking Code

    About Me

    My photo
    Keelung, R.O.C, Taiwan
    一個不學無術、混吃等死的傢伙…