當你刪除檔案時所花費時間變久(反應變慢),可以試著先把資源回收桶清掉試試。
歡迎來到小豬圈!
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家電視台分別採訪了我們的假事件,而且在製作過程我們也發現了很多電視台的弊端,希望各位能做最有力的見證者!
不過可惜的是,在看完影片之後,我最想知道的問題:「既然很多人都知道台灣的新聞媒體不夠好,還是能每天“看新聞、配飯吃”呢?」依然沒有答案…
Update 20070623
最離譜的是當他問我覺得有什麼電視聞覺得不像是新聞的時候,我想了比較久的時間才回答他,但他最後播出來的版本卻只有我在想的畫面,居然把我回答的畫面刪掉,然後就說我"對新聞的認知回答不出來"。
相關連結
2007-06-16
日記 牙痛與飯局
流水帳模式啟動…
昨天吃完晚飯後,下門牙痛到不行,可是家附近的牙醫診所又沒開,只好先買止痛藥(Prophenatin HD-252)吃、並在基隆長庚的網站上掛號。
今天是ET那屆的畢典所以HS有上來台北,便約了晚上跟HS、GD、FN到衣蝶S館的鬥牛士吃飯。HS跟GD真是一對活寶,好久沒有笑這麼開心了。中途一段小插曲:不修邊幅的HS竟然叫一個看起來不到二十歲的服務生為“大姐”,而之後那位大姐有好一陣子沒來本桌服務…
吃完到附近走走,沒想到中山地下街的行政廣場竟然沒什麼人…
攝於光點電影院。
回家時路過中山地下街的藝廊,看到許多不錯的作品,以下是幾幅讓我想拍下來留念的。
to be insatiably avaricious (無法滿足地貪婪)。
還有許多不錯作品在中山地下街的藝廊展出。
2007-06-12
相機小歐本年度第一次下水
今天遇到漲潮,水裡漂了不少垃圾,拍出來的效果也如預期的差…,不過小魚們還是很捧場,快把我手毛也吃光了!
因為拍的不好,所以就不在這裡貼出來了。我在flickr開一個Set專門放浮潛攝影的作品:UnderSurface。
玉米的裝備還真是不賴啊,不愧是砸了錢的啊!
2007-06-10
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
PHP Smarty
- 以 $smarty->fetch() 取得輸出內容後,再輸出成網頁檔。
- 需要使用 Smarty 並改寫程式。
- 需考慮是否適合輸出成靜態網頁。
PHP Output Control Functions
- 利用 Output Control Functions 的 ob_get_contents()取得輸出內容後,再輸出成網頁檔。
- Output Control Functions 為 PHP 內建函式,且程式變動較少。
- 一樣要考慮是否適合輸出成靜態網頁。
就我的情況而言,我需要的是將動態網頁輸出的結果另存到靜態網頁的檔案,所以後兩者比較適合,正在學的Smarty,剛好派上用場。另外,改成靜態網頁似乎有助於SEO咧。
資料來源
2007-06-06
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_alpha 和 ctype_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
2007-05-24
我的相機 Olympus μ-720sw
Olympus μ-720sw 日文官網介紹、
中文官網介紹。圖片來自元佑實業。
當初為了“防水”、“輕便”兩個需求所買的相機,使用近一年下來的心得:
- 成像不夠銳利、飽和度也不夠,幾乎每一張都得後製。
- 紫邊在放大看的時很明顯…
- 廣角瑞的桶狀變形在LCD上預覽時就看的出來,每次拍海平面都會變成“海凸面”…
- 而xD卡在實際使用上倒是沒造成什麼困擾(因為裝上後幾乎就沒有再缷下來過了),只是買的時候心理很幹就是了。我出門一整天拍攝的量大約兩、三百張內,用720sw最高畫質(3072*2304, JPEG)拍攝,平均單張約3MB左右,1G的容量剛好可以滿足我的需求。
- 自拍(定時)器只有12秒可選,很多情況下都太久了,如果能增加選項或自訂秒數會更好。
- 場景模式切換方式很簡單(上下選擇),但很不方便,二十幾個模式一個一個按要按到什麼時候啊!?
- 附贈光碟裡的軟體Olympus Master,用起來實在不怎麼方便,所以後來就沒有深入研究,只有在用全景合成的功能。
- 拍攝全景(panorama)模式時只能由左至右拍,合成的時候也沒有任何選項可以調。
如果還有下一台相機的話:
- 即使輕便型相機也一定要有手動模式(M/Tv/Av)。
- 如果有記錄垂直構圖的資訊(EXIF)的話更好。
- 更高畫素。對我而言,高畫素主要是在後製的時候比較方便。像我常會用裁切的方式重新構圖,再調整亮度、飽和度等,處理完後再用縮圖達到銳化的效果。還有就是可以保留一些在拍照當下沒有注意到的細節。
2007-05-08
初遊獅頭山;眺望燭台雙嶼
玉米今天有排休,臨時約去燭台雙嶼拍照。這次一樣從外木山沿著海岸走,一開始玉米先帶我繞到基隆港港西岸,牛稠港旁的小山上(從中山隧道入口旁的小路上山),從這裡可以看到許多停在軍用港口的船隻。
下山發現像似公園入口的階梯,原來這裡是基隆築港殉職者紀念碑。
再到外木山賞浪。
又在野柳逗留一下。
岩壁有如嚴重鏽蝕後的刀刃(可惜紫邊太嚴重了…),攝於野柳地質公園外。
人們要到什麼時候,才能懂得不要去破壞自然環境?攝於野柳地質公園外。
聽說野柳地質公園入口旁有條路,不用買門票就可以爬上那裡的小山丘,不過這次沒找著。
破舊的小巷子中發現一隻正在做日光浴的貓,攝於野柳地質公園外。
終於到獅頭山,沿途有很多蝴蝶。
回程的時候太陽已經快下山了。
搬家經驗
由於某些因素,這次實在稱不上是搬“新”家,把一些心得記下來,供以後做參考。
油漆工
- 一大一小的刷子,小刷塗邊比較方便。
- 刮刀,填平空隙(矽利康或補土)、刮掉舊漆、壁癌用。
- 易撕膠帶,擦油漆前先沿邊緣貼起來就可以放心的刷了。
- 舊報紙,不管再怎麼注意,油漆還是很容易滴到地板,先舖好再擦吧。
- 油性的油漆“必須”要稀釋後再擦,不然擦完表面會變的軟軟、粘粘的,稍微按壓就會留下痕蹟,這個情況會持續超過五天。
- 水性的油漆(水泥漆)要擦兩遍以上顏色才會飽和。
- 油漆同一種顏色有分平光跟非平光,平光擦後看起來光滑、亮亮的,而非平光的看起來會粉粉的。
- 油性油漆散發的氣味有毒,對環境也不好,除了擦室外牆面或金屬表面等,盡量避免使用,使用時也務必保持空氣流通。
- 使用前或稀釋後務必將油漆攪拌後再擦。如果攪伴棒伸住桶底攪伴時阻力異常增加,那表示還不夠均勻,可以用桶子互相倒(像印度拉茶那樣)的方式攪伴。
網路工
- 佈線用的壓條最好買比需要的大小再大一點的,不然線路會不好塞進壓條裡。
- 網路接頭,最好一次買多一點,為了一、兩個接頭再出門一趟實在划不來。
水電工
- 三用電錶和驗電筆,據說可以用電錶取代驗電筆,不過我實在沒那個勇氣去摸負極…。
- 電鑽是必備工具,要買能鑽水泥牆和木頭的(配合鑽頭)。打釘前先鑽一個小孔,四週比較不會裂開。
- 電鑽上會標示一組分數(像我們家的是八分之三)是指可以安裝最大的鑽頭大小(直徑;寸),四分之一是比較常用的大小。買的時候還要注意鑽頭尾部的形狀(圓柱、六角形或四角形),電鑽不一定都能夾的住。
- 鑽頭在鑽水泥牆或木頭之後會發燙,不要徒手去碰。
- 電源插座(以面對插座的方向來說)右邊較短的孔是火線(帶電、紅線),左邊較長的孔是水線(不帶電、白線),下方的圓孔是地線(不帶電、綠色)。
- 電源(電燈)開關應該接在火線上,避免不必要的耗電。
- 鐵門門鎖不像喇叭鎖那麼容易自行更換,像這次就遇到孔太小還有軸心太長的問題,沒有可以切鐵的砂輪機還真沒辨法咧。
- 螺旋型的省電燈泡發光效率較U型及圓型好,也有不同長度(螺旋圈數)與功率的省電燈泡可以選。
- 常見的燈泡接座大小主要有兩種:E27直徑比十圓硬幣大一點,常用於天花板上吸頂燈座;E14直徑比一圓硬幣小一點,常用於小夜燈。(E27、E14好像就是直徑分別是27mm、14mm的樣子)
- 常見的燈泡顏色也有兩種:一種是白色的稱晝光色或白光色;另一種是黃光或稱燈泡色。
- 我們家是整個弄反,火線是白色、水線是紅色、插座孔也左右相反。配電箱有一個接地的銅排,但都沒有拉線到插座。
傢俱在可能的情況下要考慮:
- 易拆易組裝:搬運方便或能節省儲藏空間,安裝時用自攻螺絲取代釘子。
- 可折疊收納:暫時不用可以騰出空間,如折疊椅、折疊桌。
- 多用途:座椅兼收納箱、沙發兼床。
IKEA 的家具看起來都容易拆卸、組裝,但卻沒看到幾樣是可以折疊、收納。
我看過的組合床有兩種,主要差別在於床板的支撐方式,一種是床板比較厚,直接扣住四週床架;另一種床板較薄,下方由幾根支柱撐著。個人覺得後者比較穩,在床上滾的時候比較沒有噪音。
修補單扇門大小(約2m*1m)的紗窗網,用釣魚線$600、鐵線$1200。塑膠輪$150、長方形鋁框加紗窗$600;正方形400,鋁門鉸鏈$100 小形單鐵柱鎖$100。
2007-04-29
2007-04-23
require 和 include 的差別
- 簡單來說就是 require 出錯時會讓該 script 停下來(throw Fatal Error),而當include出錯時 script 會繼續執行(Warning)。
- 還有就是,require 和 include 都是 Control Structures,而不是 Function。
2007-04-20
個人常用鏈結
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)
