用 IE 的 conditional comments 建立 class

IE 的 Conditional comments 可以拿來建立對應的 class,可以減少 css 使用 IE hack 的情況 (有些 IE hack 會使得 css 的語法不正確,用工具壓縮後可能會出問題),以 IE6 為例,下面的例子可以把 IE6 與 IE7 分別標上 class="ie6" 或是 class="ie7"

<!--[if IE 6]><body class="ie6"><![endif]-->
<!--[if IE 7]><body class="ie7"><![endif]-->
<!--[if gt IE 7]><!--><body><!--<![endif]-->

這個方式不需要 javascript,而且是合法的 HTML (只有 IE 會看懂 comment 內的說明)...

jQuery 1.5.1 釋出

jQuery 的官方 blog 宣佈 1.5.1 正式出版:「jQuery 1.5.1 Released」,除了 bugfix 外,也宣佈要開 1.6 Roadmap Meeting 討論下一個版本要做的事情,預定在 irc.freenode.net 的 #jquery-meeting 上開,時間是 3/7 (時區是 EST)。

這次 Google CDN 上已經有 1.5.1 版,需要的人可以改過去了...

Protocol Preserve URI 的過濾

雖然知道 //host.domain/path 這種 Relative Protocol 用法 (而且也用很久了),不過最近在 irc.perl.org 上的 #plack 剛好有人提到,再加上最近剛好有人在探討安全性問題:「Bypassing "RequestPolicy" Using Protocol Relative URLs」,剛好可以拿出來再說一次。

簡單來說就是「以 / 開頭的 URI 並非一定是 same origin,不可以以此當作 same origin 的判斷」。因為「//ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js」這種用法是正確的用法,表示保留 Protocol。

另外講些題外話,這個用法也還是有缺點,用在 IE 的 css 時會造成重複抓取 (到 IE9 都還是):「CSS files downloaded twice in Internet Explorer with protocol relative URLs」,script 或是 relative path 都不會,只有 css 會...

反過來說,因為 js 的部份大家都沒問題,所以當使用 Google 提供的 jQuery 時,「永遠」都應該使用「//ajax.googleapis.com/...」,因為 Google Libraries API 是同時支援 HTTP 與 HTTPS 的。

Markapl:Markup as Perl

Markaplgugod 寫的 Perl module,這是在 miyagawa (宮川達彦) 的 Sunaba 模組上看到的... 以 Perl 的語法建立 HTML。

目前 CPAN 上面 Markapl 的不是最新版 (0.11),在 GitHub 上的 Markapl 比較新... (據說是作者忘記在 release 0.11 後有 commit 了,在寫這篇文章的時候已經 release 新版,等下應該就會看到了...)

至於範例... 直接參考 Sunaba 的 View.pm 會比較快。(我故意連到特定版本,避免之後改動架構這個檔案被搬走。目前版本的 View.pm 請點這個連結)

用 Markapl 除了可以用 Perl 語法外,另外一個「好處」是強迫自己將 css 與 javascript 搬到 template 外面,因為 template 內實在是不好寫... (用「q/.../」?用「<<CSS;」然後「CSS」結尾?gosh XD)

另外補充一點,範例上都沒有 DOCTYPE,請用「outs_raw('<doctype html>');」加在 html 前即可。

Blog 關掉 CloudFront CDN...

剛剛用手機看自己的 blog 發現版面亂掉,看起來是 CSS 有問題...

測了一些東西後發現,如果 W3 Total Cache 使用 CloudFront CDN,會使得 WPTouch 失效,拿掉 CDN 的部份就會恢復正常...

那只好先拿掉了,現在用手機看 blog 的人應該就正常了...

用 Dist::Zilla 管理 Perl Module...

之前寫過一篇「產生 Perl Module 的工具:Module::Starter」是用 Module::Starter 管理,另外再配合其他工具上傳到 CPAN 上。前陣子在 GitHub 上亂逛的時候看到有人 Perl module 裡面只有一個 dist.iniChanges,另外就是 lib/t/,就感覺到應該是我要的東西 XD 花了一些時間測試後發現功能不多,但對於初期應該足夠了,等到熟悉後再跳到功能比較完整的管理軟體...

首先先用 dzil setup 設定環境,如果有 PAUSE 帳號的話也能夠整合進去。設定完後記得將 ~/.dzil/ 設為 700,裡面的檔案設為 600。

接下來就是建立模組,像是 dzil new Plack::Middleware::HTMLMinify 這樣的指令。建好後就把 module 寫完,然後設定 dist.ini。(文件上的說明應該夠用)

接下來可以用 dzil build 編,或是用 dzil test 測試。沒問題之後用 dzil release 上傳到 PAUSE。

基本的功能大概就這樣...

Updatedist.ini 的範例可以在 plack-middleware-htmlminify-perl 的 repository 裡看到。

換 Ubuntu 的 mirror site...

Zeroplex 遇到類似的問題 (參考「NCHC for Ubuntu sources.list」這篇),放在台大的 tw.archive.ubuntu.com 常常連不上,所以就換掉 mirror site 了。UbuntuDebian 相同,都是用 APT,所以就是換掉 /etc/apt/ 下面的設定。

Zeroplex 使用的是 http://free.nchc.org.tw/,我則是用 http://ftp.twaren.net/。換完後再 apt-get update 一次就可以了。

jQuery 1.5.1 RC 1

jQuery 1.5.0 出來以後 (2011/1/31) 沒幾天又準備要出 1.5.1 了,剛剛在官方的公告「jQuery 1.5.1 RC 1 Released」上公佈了 1.5.1 RC 1 的連結 (讓人測試),以及大量的 bugfix 資訊...

昨天看了幾個報社的網站,發現不少網站都用 jQuery:(看首頁的部份)

而「自由時報電子報」首頁沒有看到 jQuery...