<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>akira the writings</title>
	<atom:link href="http://akr.tw/feed/" rel="self" type="application/rss+xml" />
	<link>http://akr.tw</link>
	<description>網路、網頁設計、軟體、電腦、翻譯、音樂、雜談，我的作品與隨筆筆記。</description>
	<lastBuildDate>Wed, 09 May 2012 14:20:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
	<atom:link rel='hub' href='http://akr.tw/?pushpress=hub'/>
		<item>
		<title>【Notepad++】給暗色系背景用的 CoffeeScript、Markdown 語法上色定義檔案</title>
		<link>http://akr.tw/2012/04/notepad-plus-plus-coffeescript-markdown-syntax-highlight/</link>
		<comments>http://akr.tw/2012/04/notepad-plus-plus-coffeescript-markdown-syntax-highlight/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 10:53:31 +0000</pubDate>
		<dc:creator>akira</dc:creator>
				<category><![CDATA[程式設計]]></category>
		<category><![CDATA[CoffeeScript]]></category>
		<category><![CDATA[Markdown]]></category>
		<category><![CDATA[Notepad++]]></category>

		<guid isPermaLink="false">http://akr.tw/?p=94</guid>
		<description><![CDATA[給 Notepad++ 編輯器的 CoffeeScript 和 Markdown 自訂語言上色檔案。 主要是修改自 blakmatrix 的 CoffeeScript_notepad_UDL 以及 thomsmits 的 markdown_npp，這兩個都是以預設的白色背景為主。 最近這幾個月看習慣黑底白字之後，以 Notepad++ 內建的 Zenburn 樣式做為參考，修改過背景和文字顏色。 CoffeeScript Dark Style Syntax for Notepad++ Markdown Dark Style Syntax for Notepad++ 放入 Notepad++ 底下的 userDefineLang.xml 就可以了。 2012/4/28 更新：修改顏色設定，看起來比較順眼一點了。]]></description>
			<content:encoded><![CDATA[<p>給 <a href="http://notepad-plus-plus.org/">Notepad++</a> 編輯器的 <a href="http://coffeescript.org/">CoffeeScript</a> 和 <a href="http://daringfireball.net/projects/markdown/">Markdown</a> 自訂語言上色檔案。</p>

<p>主要是修改自 <a href="https://github.com/blakmatrix/CoffeeScript_notepad_UDL">blakmatrix 的 CoffeeScript_notepad_UDL</a> 以及 <a href="https://github.com/thomsmits/markdown_npp">thomsmits 的 markdown_npp</a>，這兩個都是以預設的白色背景為主。</p>

<p>最近這幾個月看習慣黑底白字之後，以 Notepad++ 內建的 <strong>Zenburn</strong> 樣式做為參考，修改過背景和文字顏色。</p>

<p><span id="more-94"></span></p>

<h1>CoffeeScript Dark Style Syntax for Notepad++</h1>

<p><img src="http://i.imgur.com/xecoN.png" alt="CoffeeScript Dark Style Syntax for Notepad++" /></p>

<div style="font-size: 0.8em"><script src="https://gist.github.com/2508165.js"></script></div>

<h1>Markdown Dark Style Syntax for Notepad++</h1>

<p><img src="http://i.imgur.com/8aNGu.png" alt="Markdown Dark Style Syntax for Notepad++" /></p>

<div style="font-size: 0.8em"><script src="https://gist.github.com/2508225.js"></script></div>

<hr />

<p>放入 Notepad++ 底下的 userDefineLang.xml 就可以了。</p>

<hr />

<p><strong>2012/4/28 更新</strong>：修改顏色設定，看起來比較順眼一點了。</p>
]]></content:encoded>
			<wfw:commentRss>http://akr.tw/2012/04/notepad-plus-plus-coffeescript-markdown-syntax-highlight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Picasa（Google+）圖片外連的 URL 參數整理</title>
		<link>http://akr.tw/2012/04/picasa-url-parameters/</link>
		<comments>http://akr.tw/2012/04/picasa-url-parameters/#comments</comments>
		<pubDate>Sun, 08 Apr 2012 03:33:21 +0000</pubDate>
		<dc:creator>akira</dc:creator>
				<category><![CDATA[網路]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Picasa]]></category>

		<guid isPermaLink="false">http://akr.tw/?p=91</guid>
		<description><![CDATA[當外連或下載 Picasa 相簿裡面的圖片時，Google 事實上提供許多參數來自定輸出的圖片。但目前似乎沒有官方的文件來整理這些參數。（至少我在網路上沒有找到…） 所以稍微整理了一下目前已知的參數和功能。 一張 Picasa 的相片外連網址如下： https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/w419-h236-k/20%2B-%2B1.jpg 其中最後檔名前面的「w419-h236-k」就是可自訂的參數： 縮放圖片 w, h 指定圖片的寬度（w）和高度（h），後面接任意整數值。Picasa 會自動等比例縮放。 若設為 0 則會拿到原始上傳時的圖片大小。 【例】取得寬度為 360px 的圖片。 https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/w360/20%2B-%2B1.jpg 【例】取得高度為 80px 的圖片。 https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/h80/20%2B-%2B1.jpg sXXX-c、sXXX-p 指定圖片的寬度，後面接任意整數值。Picasa 會自動等比例縮放。 若設為 0 則會拿到原始上傳時的圖片大小。 後面可接「-c」或「-p」，會得到正方形裁切後的照片。 （「-c」和「-p」似乎在裁切的基準點上有點不一樣。） 【例】取得 180 x 180 正方形圖片。 https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/s180-c/20%2B-%2B1.jpg 加點效果 -r90、-r180、-r270 翻轉圖片。後面接翻轉的度數（90、180、270）。 【例】取得寬高都是 180px、翻轉 180 度的圖片。 https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/s180-c-r180/20%2B-%2B1.jpg -o 加個播放按鈕在圖片上，應該是給影片縮圖用的。 【例】取得寬度是 360px、有個播放按鈕的圖片。 https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/w360-o/20%2B-%2B1.jpg 輸出圖片 -d [...]]]></description>
			<content:encoded><![CDATA[<p>當外連或下載 Picasa 相簿裡面的圖片時，Google 事實上提供許多參數來自定輸出的圖片。但目前似乎沒有官方的文件來整理這些參數。（至少我在網路上沒有找到…）</p>

<p>所以稍微整理了一下目前已知的參數和功能。</p>

<p><span id="more-91"></span></p>

<p>一張 Picasa 的相片外連網址如下：</p>

<blockquote>
  <p><img src="https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/w419-h236-k/20%2B-%2B1.jpg" alt="Picasa" /></p>
  
  <p>https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/<mark>w419-h236-k</mark>/20%2B-%2B1.jpg</p>
</blockquote>

<p>其中最後檔名前面的「<mark>w419-h236-k</mark>」就是可自訂的參數：</p>

<h1>縮放圖片</h1>

<dl>
<dt>w, h</dt>
<dd>指定圖片的寬度（w）和高度（h），後面接任意整數值。Picasa 會自動等比例縮放。<br />
若設為 0 則會拿到原始上傳時的圖片大小。</dd>
</dl>

<blockquote>
  <p><strong>【例】取得寬度為 360px 的圖片。</strong><br />
  <img src="https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/w360/20%2B-%2B1.jpg" alt="Picasa" /><br />

https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/<mark>w360</mark>/20%2B-%2B1.jpg</p>

  <p><strong>【例】取得高度為 80px 的圖片。</strong><br />
  <img src="https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/h80/20%2B-%2B1.jpg" alt="Picasa" /><br />

https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/<mark>h80</mark>/20%2B-%2B1.jpg</p>

</blockquote>

<dl>
<dt>sXXX-c、sXXX-p</dt>
<dd>指定圖片的寬度，後面接任意整數值。Picasa 會自動等比例縮放。<br />
若設為 0 則會拿到原始上傳時的圖片大小。<br />
後面可接「-c」或「-p」，會得到正方形裁切後的照片。<br />
（「-c」和「-p」似乎在裁切的基準點上有點不一樣。）</dd>
</dl>

<blockquote>
  <p><strong>【例】取得 180 x 180 正方形圖片。</strong><br />
  <img src="https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/s180-c/20%2B-%2B1.jpg" alt="Picasa" /><br />

https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/<mark>s180-c</mark>/20%2B-%2B1.jpg</p>

</blockquote>

<h1>加點效果</h1>

<dl>
<dt>-r90、-r180、-r270</dt>
<dd>翻轉圖片。後面接翻轉的度數（90、180、270）。</dd>
</dl>

<blockquote>
  <p><strong>【例】取得寬高都是 180px、翻轉 180 度的圖片。</strong><br />
  <img src="https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/s180-c-r180/20%2B-%2B1.jpg" alt="Picasa" /><br />

https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/<mark>s180-c-r180</mark>/20%2B-%2B1.jpg</p>

</blockquote>

<dl>
<dt>-o</dt>
<dd>加個播放按鈕在圖片上，應該是給影片縮圖用的。</dd>
</dl>

<blockquote>
  <p><strong>【例】取得寬度是 360px、有個播放按鈕的圖片。</strong><br />
  <img src="https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/w360-o/20%2B-%2B1.jpg" alt="Picasa" /><br />

https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/<mark>w360-o</mark>/20%2B-%2B1.jpg</p>

</blockquote>

<h1>輸出圖片</h1>

<dl>
<dt>-d</dt>
<dd>直接下載圖片，而不是用瀏覽器顯示。</dd>
</dl>

<blockquote>
  <p><strong>【例】下載原始大小的圖片。</strong><br />
  <a href="https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/s0-d/20%2B-%2B1.jpg">https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/s0-d/20%2B-%2B1.jpg</a><br />
  （點連結會直接跳出下載視窗。）</p>
</blockquote>

<dl>
<dt>-h</dt>
<dd>輸出成 HTML 格式。</dd>
</dl>

<blockquote>
  <p><a href="https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/s0-h/20%2B-%2B1.jpg">https://lh5.googleusercontent.com/-ttvP4PQqAeg/T2lr_RM-0YI/AAAAAAAADiU/tcP0ahLmJz4/s0-h/20%2B-%2B1.jpg</a></p>
</blockquote>

<hr />

<p>還有像是「-k」、「-b」這種看不出個所以然，所以似乎有很多未知的參數…</p>
]]></content:encoded>
			<wfw:commentRss>http://akr.tw/2012/04/picasa-url-parameters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>為 WordPress 加入文章分頁導覽</title>
		<link>http://akr.tw/2012/04/wordpress-pagination/</link>
		<comments>http://akr.tw/2012/04/wordpress-pagination/#comments</comments>
		<pubDate>Sat, 07 Apr 2012 14:06:39 +0000</pubDate>
		<dc:creator>akira</dc:creator>
				<category><![CDATA[程式設計]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://akr.tw/?p=90</guid>
		<description><![CDATA[要在 WordPress 加上帶有頁碼的分頁導覽，一般會用 WP-Paginate 等外掛。但如果要在佈景主題內直接插入分頁導覽的話，可使用 WordPress 內建的 paginate_links 函式。 在佈景主題的 functions.php 內： function my_pagination() { global $wp_query, $wp_rewrite; $pagination = array( 'base' =&#62; @add_query_arg( 'paged', '%#%' ), 'format' =&#62; '', 'total' =&#62; $wp_query-&#62;max_num_pages, 'current' =&#62; $wp_query-&#62;query_vars['paged'] &#62; 1 ? $wp_query-&#62;query_vars['paged'] : 1, 'show_all' =&#62; false, 'type' =&#62; 'plain', 'prev_text' =&#62; '&#38;laquo;', 'next_text' =&#62; '&#38;raquo;', 'end_size' [...]]]></description>
			<content:encoded><![CDATA[<p>要在 WordPress 加上帶有頁碼的分頁導覽，一般會用 <a href="http://wordpress.org/extend/plugins/wp-paginate/">WP-Paginate</a> 等外掛。但如果要在佈景主題內直接插入分頁導覽的話，可使用 WordPress 內建的 <code>paginate_links</code> 函式。</p>

<p><span id="more-90"></span></p>

<p>在佈景主題的 <code>functions.php</code> 內：</p>

<pre><code>function my_pagination() {
    global $wp_query, $wp_rewrite;

    $pagination = array(
        'base' =&gt; @add_query_arg( 'paged', '%#%' ),
        'format' =&gt; '',
        'total' =&gt; $wp_query-&gt;max_num_pages,
        'current' =&gt; $wp_query-&gt;query_vars['paged'] &gt; 1 ? $wp_query-&gt;query_vars['paged'] : 1,
        'show_all' =&gt; false,
        'type' =&gt; 'plain',
        'prev_text' =&gt; '&amp;laquo;',
        'next_text' =&gt; '&amp;raquo;',
        'end_size' =&gt; 2
    );

    if ( $wp_rewrite-&gt;using_permalinks() ) {
        $pagination['base'] = untrailingslashit( trailingslashit ( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%', 'paged' );
    }

    if ( ! empty( $wp_query-&gt;query_vars['s'] ) ) {
        $pagination['add_args'] = array( 's' =&gt; get_query_var( 's' ) );
    }

    echo paginate_links( $pagination );
}
</code></pre>

<p>接著在要插入分頁導覽的地方呼叫 <code>my_pagination();</code> 就會輸出分頁導覽的 HTML 了。</p>

<p>以上的函式會輸出成類似以下的 HTML：</p>

<pre><code>&lt;span class='page-numbers current'&gt;1&lt;/span&gt;
&lt;a class='page-numbers' href='/page/2'&gt;2&lt;/a&gt;
&lt;a class="next page-numbers" href="/page/2"&gt;&amp;raquo;&lt;/a&gt;
</code></pre>

<p>帶有 Class 名稱可以用來自訂樣式。</p>

<hr />

<p>其中 <code>$pagination</code> 內可自訂的地方：</p>

<dl>
<dt>show_all</dt>
<dd>Boolean值，是否要顯示出所有的分頁。如果設為 false，中間的分頁會被省略為「&#8230;」符號。<br />
<strong>true</strong> →  [1][2][3] &#8230; [5][>]<br />
<strong>false</strong> →  [1][2][3][4][5][>]</dd>

<dt>type</dt>
<dd>輸出的 HTML 類型。有 <strong>plain</strong>（單純的超連結）、<strong>array</strong>（PHP陣列）和 <strong>list</strong>（&lt;ul&gt; 列表）三種模式。</dd>

<dt>prev_text 和 next_text</dt>
<dd>「上一頁」，「下一頁」的文字。</dd>

<dt>end_size</dt>
<dd>要顯示最前面和最後面幾頁的連結（當 show_all 是 false 的時候）<br />
<strong>end_size = 2</strong> → [1][2] &#8230; [14][15]<br />
<strong>end_size = 3</strong> → [1][2][3] &#8230; [13][14][15]</dd>

<dt>mid_size</dt>
<dd>要顯示目前分頁前後幾頁的連結（當 show_all 是 false 的時候）<br />
<strong>mid_size = 1</strong> → [1][2] &#8230; [12]<strong>[13]</strong>[14] &#8230; [19][20]<br />
<strong>mid_size = 2</strong> → [1][2] &#8230; [11][12]<strong>[13]</strong>[14][15] &#8230; [19][20]</dd>
</dl>

<p>實際範例可參考本部落格首頁。</p>

<hr />

<p>參考資料：<a href="https://codex.wordpress.org/Function_Reference/paginate_links">WordPress Function Reference/paginate links</a></p>
]]></content:encoded>
			<wfw:commentRss>http://akr.tw/2012/04/wordpress-pagination/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【譯】Firefox 10 的網站相容性資訊</title>
		<link>http://akr.tw/2012/01/firefox-10-site-compatibility/</link>
		<comments>http://akr.tw/2012/01/firefox-10-site-compatibility/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 08:52:19 +0000</pubDate>
		<dc:creator>akira</dc:creator>
				<category><![CDATA[網頁設計]]></category>
		<category><![CDATA[翻譯]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://akr.tw/?p=88</guid>
		<description><![CDATA[（全文譯自：Firefox 10 のサイト互換性情報 &#8211; Mozilla Japan） Firefox 10 正在進行開發，預計在 1 月 31 日釋出。儘管在開發時已盡最大可能維持相容性，但為了與其他瀏覽器的互用、以及符合最新 Web 標準，在 10 版中做了許多有關向下相容的修正。以下整理出這些修正點，在網頁測試時可做參考。 本文僅介紹向下相容所影響的修正。其他新功能和變更請參考以下網頁： 針對使用者的新功能：Firefox 10 の主な新機能を紹介します（日文） 針對開發者的新功能和變更點：Firefox 10 for developers （英文） UserAgent 字串的版本號改為兩位數 Firefox 10 是第一個版本號為兩位數的正式版本。若用 UserAgent 字串來判斷瀏覽器而該程式碼的版本判斷不正確，有可能導致瀏覽器判斷錯誤。因此請確認使用 UserAgent 字串判斷瀏覽器的程式碼，或是先在 Firefox 10 Beta 版中測試。 Firefox 的 UserAgent 字串在正式版或測試版中如下所示： Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0) Gecko/20100101 Firefox/10.0 Mozilla/5.0 (Windows [...]]]></description>
			<content:encoded><![CDATA[<p>（全文譯自：<a href="http://mozilla.jp/business/resources/site-compatibility/firefox-10/">Firefox 10 のサイト互換性情報 &#8211; Mozilla Japan</a>）</p>

<p>Firefox 10 正在進行開發，預計在 1 月 31 日釋出。儘管在開發時已盡最大可能維持相容性，但為了與其他瀏覽器的互用、以及符合最新 Web 標準，在 10 版中做了許多有關向下相容的修正。以下整理出這些修正點，在網頁測試時可做參考。</p>

<p><span id="more-88"></span></p>

<p><img src="http://i.imgur.com/9wfTq.png" alt="Firefox" /></p>

<p>本文僅介紹<strong>向下相容所影響的修正</strong>。其他新功能和變更請參考以下網頁：</p>

<ul>
<li>針對使用者的新功能：<a href="https://dev.mozilla.jp/2011/12/firefox10/">Firefox 10 の主な新機能を紹介します</a>（日文）</li>
<li>針對開發者的新功能和變更點：<a href="https://developer.mozilla.org/en/Firefox_10_for_developers">Firefox 10 for developers </a>（英文）</li>
</ul>

<h1>UserAgent 字串的版本號改為兩位數</h1>

<p>Firefox 10 是第一個版本號為兩位數的正式版本。若用 UserAgent 字串來判斷瀏覽器而該程式碼的版本判斷不正確，有可能導致瀏覽器判斷錯誤。因此請確認使用 UserAgent 字串判斷瀏覽器的程式碼，或是先在 Firefox 10 Beta 版中測試。</p>

<p>Firefox 的 UserAgent 字串在正式版或測試版中如下所示：</p>

<pre><code>Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0) Gecko/20100101 Firefox/10.0
Mozilla/5.0 (Windows NT 6.2; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
</code></pre>

<p>正式版除了版本號為兩位數之外，之後若有安全性更新等版本，版本號會從原本由一個小數點區隔的「10.0」，變為有兩個小數點的「10.0.1」。請務必注意。</p>

<p>Firefox 的 Beta 版和正式版有一樣的 UA 字串，但 Nightly 版和 Aurora 版不同，如下所示：</p>

<pre><code>Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:12.0a1) Gecko/20120122 Firefox/12.0a1
Mozilla/5.0 (Windows NT 6.2; rv:12.0a2) Gecko/20120122 Firefox/12.0a2
</code></pre>

<p>要注意的是 Gecko/yyyymmdd 的部分並非固定是 20100101、版本號尾端的也會加上 a1 或 a2 。有關 Firefox 的 UserAgent 字串的更多詳細資訊請參考 <a href="https://developer.mozilla.org/en/Gecko%20user%20agent%20string%20reference">MDN 文件</a>。</p>

<p>此外，Internet Explorer 的<a href="http://blogs.msdn.com/b/ie/archive/2011/04/15/the-ie10-user-agent-string.aspx">版本號也即將邁入兩位數</a>。因此建議一並做好相對應的解決方案。</p>

<h1>&lt;table&gt; 元素的邊界（margin）會正確抵銷</h1>

<p>在 CSS 樣式內，前後元素的垂直方向邊界會發生「<a href="https://developer.mozilla.org/en/CSS/margin_collapsing">摺疊（margin collapse）</a>」。也就是說，在兩個元素的垂直方向間的邊界會互相抵銷，只會顯示兩個元素中較大的邊界。</p>

<p>但在 Firefox 9 以前，在 &#8216;&lt;table&gt;&#8217; 元素前後的元素邊界並不會抵銷，而是和 &#8216;&lt;table&gt;&#8217; 本身的邊界相加。在 Firefox 10 已經<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=87277">修正</a>為和其他元素一樣正確顯示。<strong>若 &#8216;&lt;table&gt;&#8217; 和前後元素都設定了邊界，邊界會比舊版來得小</strong>。在倚賴縱向大小的版面配置上特別要注意 &#8216;&lt;table&gt;&#8217; 的邊界設定。</p>

<p>例如<a href="http://jsfiddle.net/dynamis/hrRf4/">以下的原始碼</a>，在 Firefox 9 以前 &#8216;&lt;table&gt;&#8217; 的上下邊界為 1+2=3em、2+3=5em，但在 Firefox 10 之後會變成 Max(1,2) = 2em、Max(2,3) = 3em。</p>

<pre><code>&lt;p style="margin: 1em;"&gt;具有 margin-bottom 的元素&lt;/p&gt;
&lt;table style="margin: 2em;"&gt;&lt;tr&gt;&lt;td&gt;table 元素&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p style="margin: 3em;"&gt;具有 margin-top 的元素&lt;/p&gt;
</code></pre>

<h1>在非靜態位置的 &lt;table&gt; 內的絕對位置基準位置修正</h1>

<p>在 CSS 樣式內，指定為絕對位置(position: absolute) 的元素，會以母元素中最靠近的非靜態 (position: static) 的元素(position: relative or absolute or fixed)為基準來設定位置 (top, bottom, left, right) 。</p>

<p>但在 Firefox 9 以前，就算母元素之中的 &#8216;&lt;table&gt;&#8217; 元素不是靜態位置，子元素的位置會以更上層的非靜態元素為準。<strong>在絕對位置、相對位置或是固定位置的 &#8216;&lt;table&gt;&#8217; 元素內指定絕對位置元素的情況，在新版會改變原先的版面配置。</strong></p>

<p>例如<a href="http://jsfiddle.net/dynamis/yu3Q7/">以下的原始碼</a>，在 Firefox 9 以前 &#8216;&lt;table&gt;&#8217; 內的 &#8216;&lt;div&gt;&#8217; 元素為以更上層的 &#8216;&lt;div&gt;&#8217; 元素為基準，因此會出現在上方 0+50 = 50px、左 100+50 = 150px 的位置。在 Firefox 10 之後會改以 &#8216;&lt;table&gt;&#8217; 元素為基準，出現在上方 100+50 = 150px，左方 100+50 = 150px 的位置。</p>

<pre><code>&lt;div style="position: absolute; left: 100px;"&gt;絕對位置的母元素
&lt;table style="position: absolute; top: 100px;"&gt;&lt;tr&gt;&lt;td&gt;
  table 內的靜態位置元素
  &lt;div style="position: absolute; top: 50px; left: 50px;"&gt;table 內的絕對位置元素&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
</code></pre>

<p>以上兩項絕對誤置和邊界抵銷的問題都是針對 CSS 樣式的修正。其他瀏覽器也會做出相同的修正，因此以後不必為 Firefox 特別設計版面，只要讓版面相容於各大瀏覽器即可。詳細資訊請參考<a href="http://ehsanakhgari.org/blog/2011-10-04/upcoming-changes-absolute-positioning-tables-and-table-margin-collapsing-firefox-10">這篇文章</a>。</p>

<p>此外，這裡為了簡化所以寫成 &#8216;&lt;table&gt;&#8217; 元素，事實上只要是設定為 &#8216;display:table&#8217; 的元素都有修正。</p>

<h1>Strict 模式的 E4X 不再適用</h1>

<p>Firefox 的 JavaScript 引擎過去支援簡單處理 XML 的語法，稱為「<a href="https://developer.mozilla.org/ja/E4X">E4X</a>」。但在導入 ECMAScript 5th 的 Strict 模式下，將不能再使用 E4X 語法。</p>

<p>若同時使用 E4X 和 Strict 模式，請放棄 Strict 模式，或是重新改寫原先 E4X 的原始碼。</p>

<h1>刪除 DOM4 下不建議的屬性</h1>

<p>在 DOM4 中不再建議使用以下的屬性，因此從 Firefox 10 之後刪除。</p>

<ul>
<li><a href="https://developer.mozilla.org/en/DOM/document.xmlVersion">document.xmlVersion</a> 屬性</li>
<li>document.xmlStandalone 屬性</li>
<li><a href="https://developer.mozilla.org/Article_not_found?uri=ja/DOM/document.xmlEncoding">document.xmlEncoding</a> 屬性</li>
<li>text.isElementContentWhiteSpace 屬性</li>
<li>text.replaceWholeText() 方法</li>
<li><a href="https://developer.mozilla.org/Article_not_found?uri=ja/DOM/node.isSameNode">node.isSameNode()</a> 方法</li>
</ul>

<p>由於 document.xmlVersion 總是回傳 "1.0&#8243; ，因此以往只能用來判斷 document 是 XML 或 HTML。現在其判斷方法如下：</p>

<pre><code>if (document.createElement("foo").tagName == "FOO") {
  /* 在HTML 模式下 tagName 屬性會轉為大寫 */
}
</code></pre>

<p>若使用 <a href="https://developer.mozilla.org/en/DOM/node.isSameNode">node.isSameNode()</a> 方法，請改用同值運算符號 (===) 來比較。</p>

<h1>setAttribute() 設定為整數時，尾端的非數字會被省略</h1>

<p>在 <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/common-microsyntaxes.html#rules-for-parsing-integers">HTML 定義</a>下，設定屬性為整數時，所設定的字串尾端的非數字會被省略。即 "100fox" 會被當作 "100&#8243;。</p>

<p>Firefox 9 以前若屬性值不是數字，會被當成錯誤。但在 Firefox 10 之後<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=673820">修正</a>為讀取字串的數字部分。</p>

<p>例如以下的原始碼，在 Firefox 9 以前 &#8216;&lt;canvas&gt;&#8217; 的寬度會回到預設值 (300) ，而在 Firefox 10 之後設定為 100 。</p>

<pre><code>document.getElementById("canvasid").setAttribute("width", "100em");
</code></pre>

<h1>ESC 鍵不再觸發 oninput 事件</h1>

<p>在 <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#common-event-behaviors">HTML 定義</a>下，只有元素的值改變時才會觸發 oninput 事件，但在 Firefox 4 到 Firefox 9 為止，使用者按下 ESC 鍵時也會觸發 oninput 事件。</p>

<p>Firefox 10 之後將遵照標準，ESC 鍵<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=651956">不會再觸發事件</a>。</p>

<h1>IndexedDB 的實作配合最新標準</h1>

<p>Firefox 4 起開始支援當初起草的 IndexedDB 其中一部份 API，但之後支援的 API 經過多次的新增和標準修改。Firefox 10 起 IndexedDB 進行了<a href="https://developer.mozilla.org/en/Firefox_10_for_developers">較多的變更</a>，其中要注意的是版本的指定方式。</p>

<p>以往連接到資料庫之後是用 <a href="https://developer.mozilla.org/en/IndexedDB/IDBDatabase#setVersion%28%29">setVersion() 方法</a>指定版本，但 <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=687361">setVersion() 已經被刪除</a>，改為在連結資料庫時用參數的方式來指定版本。</p>

<p>有關此項 IndexedDB 的更改，可參考由 mzsm 在上個月所撰寫的日文文章「<a href="http://mzsm.me/2011/12/16/indexeddb-201112/">IndexedDBに関する覚書 (2011年12月版)</a>」。</p>
]]></content:encoded>
			<wfw:commentRss>http://akr.tw/2012/01/firefox-10-site-compatibility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>寫一個 HTML5 網頁 － HTML 篇</title>
		<link>http://akr.tw/2012/01/html5-tutorial-html/</link>
		<comments>http://akr.tw/2012/01/html5-tutorial-html/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 14:56:53 +0000</pubDate>
		<dc:creator>akira</dc:creator>
				<category><![CDATA[網頁設計]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://akr.tw/?p=79</guid>
		<description><![CDATA[HTML5 是 HTML 標記語言（它不是程式碼！）的下一個主要修訂版本， 儘管現在仍在草稿階段，但許多主流瀏覽器都已開始支援 HTML5 的各種功能， 這篇文章介紹一個基本的 HTML5 網頁如何構成。可能需要一點 HTML 的基本知識才能看懂。 一張基本的 HTML5 網頁 首先從最基本的 HTML 檔案開始看起。 &#60;!DOCTYPE html&#62; &#60;html lang="zh-TW"&#62; &#60;head&#62; &#60;meta charset="utf-8"&#62; &#60;title&#62;&#60;/title&#62; &#60;!-- META --&#62; &#60;meta name="description" content=""&#62; &#60;meta name="author" content=""&#62; &#60;!-- 行動裝置顯示設定 --&#62; &#60;meta name="viewport" content="width=device-width, initial-scale=1"&#62; &#60;!-- CSS 樣式表 --&#62; &#60;link rel="stylesheet" href="css/style.css"&#62; &#60;!-- Modernizr 函式庫 --&#62; &#60;script src="js/libs/modernizr-2.0.6.min.js"&#62;&#60;/script&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>HTML5 是 HTML 標記語言（它不是程式碼！）的下一個主要修訂版本，
儘管現在仍在草稿階段，但許多主流瀏覽器都已開始支援 HTML5 的各種功能，
這篇文章介紹一個基本的 HTML5 網頁如何構成。可能需要一點 HTML 的基本知識才能看懂。</p>

<p><span id="more-79"></span></p>

<h1>一張基本的 HTML5 網頁</h1>

<p>首先從最基本的 HTML 檔案開始看起。</p>

<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang="zh-TW"&gt;
&lt;head&gt;
    &lt;meta charset="utf-8"&gt;

    &lt;title&gt;&lt;/title&gt;

    &lt;!-- META --&gt;
    &lt;meta name="description" content=""&gt;
    &lt;meta name="author" content=""&gt;

    &lt;!-- 行動裝置顯示設定 --&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;

    &lt;!-- CSS 樣式表 --&gt;
    &lt;link rel="stylesheet" href="css/style.css"&gt;

    &lt;!-- Modernizr 函式庫 --&gt;
    &lt;script src="js/libs/modernizr-2.0.6.min.js"&gt;&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;

    &lt;!-- 網頁內容 --&gt;
    &lt;div id="container"&gt;
        &lt;header&gt;
        &lt;/header&gt;

        &lt;div id="main" role="main"&gt;
        &lt;/div&gt;

        &lt;footer&gt;
        &lt;/footer&gt;
    &lt;/div&gt;

    &lt;!-- JavaScript --&gt;
    &lt;script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"&gt;&lt;/script&gt;
    &lt;script&gt;window.jQuery || document.write('&lt;script src="js/libs/jquery-1.7.1.min.js"&gt;&lt;/script&gt;')&lt;/script&gt;

    &lt;script src="js/plugins.js"&gt;&lt;/script&gt;
    &lt;script src="js/script.js"&gt;&lt;/script&gt;

    &lt;!-- Google Analytics 追蹤程式碼 --&gt;
    &lt;script&gt;
    window._gaq = [['_setAccount','UAXXXXXXXX1'],['_trackPageview'],['_trackPageLoadTime']];
    Modernizr.load({
      load: ('https:' == location.protocol ? '//ssl' : '//www') + '.google-analytics.com/ga.js'
    });
    &lt;/script&gt;

    &lt;!-- 針對 IE6 使用者顯示 Chrome Frame 安裝提示 --&gt;
    &lt;!--[if lt IE 7 ]&gt;
    &lt;script src="//ajax.googleapis.com/ajax/libs/chrome-frame/1.0.3/CFInstall.min.js"&gt;&lt;/script&gt;
    &lt;script&gt;window.attachEvent('onload',function(){CFInstall.check({mode:'overlay'})})&lt;/script&gt;
    &lt;![endif]--&gt;

&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>以下開始將這張網頁從頭開始一行一行解說起。</p>

<h2>Doctype</h2>

<p>以往在 XHTML 的標準下，需要寫的 Doctype 可能是 &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; 等等一長串的文件類型宣告，而在 HTML5 底下，只需要 &lt;!DOCTYPE html>&#8217;，15個字元，簡潔有力。</p>

<p>要注意的是 Doctype 前面不能有任何字元，包含空格或是換行符號，否則某些瀏覽器可能會無視這個 Doctype。</p>

<h2>&lt;html lang="zh-TW"&gt;</h2>

<p>在 HTML 的根元素下，可以指定網頁的語言，如 &#8216;en&#8217;、&#8217;zh-TW&#8217; 等。至於以前 XHTML 的 &#8216;xmlns="http://www.w3.org/1999/xhtml"&#8216; 屬性當然也不再需要了。</p>

<h2>網頁編碼</h2>

<pre><code>&lt;meta charset="utf-8"&gt;
</code></pre>

<p>這一行指定了這個網頁的編碼是 UTF-8。事實上這是從 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8&#8243; /&gt; 這種寫法簡化而來的。這在所有瀏覽器內都行得通。</p>

<p>編碼的指定最好放在 &lt;head&gt; 裡的第一行，甚至在 &lt;title&gt; 之上。</p>

<h2>META 資訊</h2>

<pre><code>&lt;meta name="description" content=""&gt;
&lt;meta name="author" content=""&gt;
</code></pre>

<p>設定這個網頁的描述和作者名稱，這對於搜尋引擎或社群網站在抓取資料時非常有用。</p>

<pre><code>&lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
</code></pre>

<p>設定行動裝置（手機、平板電腦）上的預設縮放大小和寬度。</p>

<h2>Favicon</h2>

<p>對，這裡沒有宣告 &lt;link rel="favicon" &#8230; >&#8217;，瀏覽器也會自動去抓取網站根目錄下的 favicon.ico ，所以不需要特別寫出來。但當 favicon.ico 的位置不是在根目錄、或檔名不叫做 favicon.ico 的時候，就需要加個 &lt;link&gt; 標籤來告訴瀏覽器。</p>

<h2>CSS</h2>

<p>和以前一樣，使用 &lt;link rel="stylesheet" href="css/style.css"&gt; 來加入 CSS 樣式表檔案。</p>

<p>其中 type="css" 的屬性值已經不需要再寫了，因為目前這世上的樣式表只有一種格式，就是CSS。</p>

<h2>Modernizr 函示庫</h2>

<pre><code>&lt;script src="js/libs/modernizr-2.0.6.min.js"&gt;&lt;/script&gt;
</code></pre>

<p><a href="http://www.modernizr.com/">Modernizr</a> 是個很好用的函示庫，原先是用來檢測瀏覽器是否支援各種 HTML5 的功能。但發展到現在已經包山包海，包進了許多好用的函示庫。</p>

<p>其中一個重要的功能是 HTML Shim，這能讓不支援 HTML5 標籤的瀏覽器（對，就是IE）認得新的標籤。</p>

<p>要下載 Modernizr，請到<a href="http://www.modernizr.com/download/">官方網站的下載頁面</a>，自訂想要的功能。</p>

<p>Modernizr 必須在 &lt;head&gt; 內就先載入。其餘的 JavaScript 則放在 &lt;/body&gt; 之前，這樣能加快網頁載入的速度。</p>

<h2>&lt;body&gt;</h2>

<p>進入網頁的主要內容。HTML5 新增了語意元素（如範例中的 &lt;header&gt; 等等）。這裡先跳過…。</p>

<h2>JavaScript</h2>

<p>將所有的 JavaScript 放在網頁最底端可以節省網頁開啟的時間。</p>

<pre><code>&lt;script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"&gt;&lt;/script&gt;
&lt;script&gt;window.jQuery || document.write('&lt;script src="js/libs/jquery-1.7.1.min.js"&gt;&lt;/script&gt;')&lt;/script&gt;
&lt;script src="js/plugins.js"&gt;&lt;/script&gt;
&lt;script src="js/script.js"&gt;&lt;/script&gt;
</code></pre>

<p>第一行是 jQuery 函示庫。使用 Google CDN 上的檔案。
第二行是當 Google CDN 連不上、找不到 jQuery 時，可以改為載入放在伺服器上的檔案。
接著就是自己的 JavaScript 檔案了。
不需要 type="text/javascript 屬性值，瀏覽器也會當作是 JavaScript 來處理。</p>

<h2>Google Analytics</h2>

<pre><code>&lt;script&gt;
window._gaq = [['_setAccount','UAXXXXXXXX1'],['_trackPageview'],['_trackPageLoadTime']];
Modernizr.load({
  load: ('https:' == location.protocol ? '//ssl' : '//www') + '.google-analytics.com/ga.js'
});
&lt;/script&gt;
</code></pre>

<p>載入 Google Analytics 的追蹤程式碼。其中 <strong>UAXXXXXXXX1</strong> 要改為自己的 ID。</p>

<p>這裡使用的是 Modernizr 裡的「<a href="http://yepnopejs.com/">yepnope.js</a>」功能來載入。</p>

<h2>Chrome Frame</h2>

<pre><code>&lt;!--[if lt IE 7 ]&gt;
    &lt;script src="//ajax.googleapis.com/ajax/libs/chrome-frame/1.0.3/CFInstall.min.js"&gt;&lt;/script&gt;
    &lt;script&gt;window.attachEvent('onload',function(){CFInstall.check({mode:'overlay'})})&lt;/script&gt;
&lt;![endif]--&gt;
</code></pre>

<p>一起來終止 IE6 吧，這幾行程式碼可以在使用 IE6 瀏覽時顯示 Google 推出的 <a href="http://code.google.com/chrome/chromeframe">Chrome Frame</a> 外掛安裝提示，Chrome Frame 可以讓使用者在 IE 下直接使用 Chorme 的網頁引擎。</p>

<hr />

<p>以上就是一個基本的 HTML5 網頁。</p>
]]></content:encoded>
			<wfw:commentRss>http://akr.tw/2012/01/html5-tutorial-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AKB48 Google+ 留言過濾 Userscript「48 Comments Only」（2012/5/9 更新）</title>
		<link>http://akr.tw/2011/12/greasemonkey-akb48-googleplus-comment-filter/</link>
		<comments>http://akr.tw/2011/12/greasemonkey-akb48-googleplus-comment-filter/#comments</comments>
		<pubDate>Sat, 10 Dec 2011 13:27:23 +0000</pubDate>
		<dc:creator>akira</dc:creator>
				<category><![CDATA[程式設計]]></category>
		<category><![CDATA[AKB48]]></category>
		<category><![CDATA[Greasemonkey]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://akr.tw/?p=58</guid>
		<description><![CDATA[48 Comments Only。 一個 Userscript 能在 Google+ 上快速取出 AKB48 成員的留言。 下載 http://userscripts.org/scripts/show/120097（Userscripts.org） 安裝 Firefox 請先確定 Firefox 上已經安裝「Greasemonkey」這個附加元件，再到上述連結內按下右上方的「Install」下載。 Google Chrome Google Chrome 可以直接將 Userscript 安裝成擴充功能，直接到上述連結內按下右上方的「Install」下載就可以了。 使用方法 將滑鼠游標移到成員的文章上就會自動顯示出這篇文章下其他成員的留言回應，另外若是自己曾經留過言，也會一併顯示在下方。 註 實測過不能在 Firefox 3.6 使用。Firefox 4 以後的版本才行。 已知無法透過 Chrome 的 Blank Canvas Script Handler 套件安裝。 下拉頁面太快的時候可能會發生錯誤，請稍後一下應該就能恢復。 v1.21 更新（2012/5/8） 修正 Google+ 更改介面後無法使用的問題。 v1.20 更新（2012/3/28） 1.20 版參考了前幾版的意見，新增了自訂選項，可設定留言的位置、樣式、顏色等等。 可封鎖不想看到的成員留言。 可在訊息串中隱藏路人甲乙丙丁的留言。 可以透過個人檔案的網址來新增使用者到自訂名單。 成員名單按照組別（team）細分。 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>48 Comments Only</strong>。
一個 Userscript 能在 <a href="https://plus.google.com/">Google+</a> 上快速取出 AKB48 成員的留言。</p>

<p><span id="more-58"></span></p>

<h1>下載</h1>

<p><a href="http://userscripts.org/scripts/show/120097">http://userscripts.org/scripts/show/120097</a>（Userscripts.org）</p>

<h1>安裝</h1>

<h2>Firefox</h2>

<p>請先確定 Firefox 上已經安裝「<a href="https://addons.mozilla.org/zh-tw/firefox/addon/greasemonkey/">Greasemonkey</a>」這個附加元件，再到上述連結內按下右上方的「Install」下載。</p>

<h2>Google Chrome</h2>

<p>Google Chrome 可以直接將 Userscript 安裝成擴充功能，直接到上述連結內按下右上方的「Install」下載就可以了。</p>

<h1>使用方法</h1>

<p>將滑鼠游標移到成員的文章上就會自動顯示出這篇文章下其他成員的留言回應，另外若是自己曾經留過言，也會一併顯示在下方。</p>

<p><img src="http://i.imgur.com/MRHIe.png" alt="【Greasemonkey】AKB48 Google+ 留言過濾 Userscript" />
<img src="http://i.imgur.com/RbDkR.png" alt="【Greasemonkey】AKB48 Google+ 留言過濾 Userscript" /></p>

<h1>註</h1>

<ul>
<li>實測過不能在 Firefox 3.6 使用。Firefox 4 以後的版本才行。</li>
<li>已知無法透過 Chrome 的 Blank Canvas Script Handler 套件安裝。</li>
<li>下拉頁面太快的時候可能會發生錯誤，請稍後一下應該就能恢復。</li>
</ul>

<h2>v1.21 更新（2012/5/8）</h2>

<ul>
<li>修正 Google+ 更改介面後無法使用的問題。</li>
</ul>

<h2>v1.20 更新（2012/3/28）</h2>

<ul>
<li>1.20 版參考了前幾版的意見，新增了自訂選項，可設定留言的位置、樣式、顏色等等。</li>
<li>可封鎖不想看到的成員留言。</li>
<li>可在訊息串中隱藏路人甲乙丙丁的留言。</li>
<li>可以透過個人檔案的網址來新增使用者到自訂名單。</li>
<li>成員名單按照組別（team）細分。</li>
<li>新增簡體中文介面。（當 Google+ 和瀏覽器都是簡體中文的時候）</li>
</ul>

<h2>v1.0 更新（2012/3/13）</h2>

<ul>
<li>修正：編輯留言的換行問題。</li>
<li>修正：美化介面。</li>
<li>修正：複製貼上時不會複製到 +1 數和留言編號。</li>
<li>新增：可取出分享文章的人。</li>
<li>移除：從社交圈讀取成員資料。</li>
<li>移除：自訂成員名單（但仍可手動增加使用者。）</li>
</ul>

<h2>v0.95 更新（2012/3/1）</h2>

<ul>
<li>修正：取出成員名單時的錯誤。</li>
<li>修正：無法取消取出自己留言的錯誤。</li>
<li>修正：設定按鈕位置移動到個人資料內。</li>
<li>修正：在未登入狀態下也能使用。</li>
</ul>

<h2>v0.9 更新（2012/2/8）</h2>

<ul>
<li>新增：與 Google 試算表上的資料同步成員名單，未來要修改成員只要我這邊試算表一改就可以了。算是一種雲端（？）。</li>
<li>新增：從社交圈內讀取成員。</li>
<li>新增：可以修改自己的留言。但是還有點換行的問題要修正。</li>
<li>新增：可透過按鈕重新載入留言。</li>
<li>新增：標示留言是第幾樓。</li>
<li>新增：標示留言的修改時間戳記。</li>
<li>新增：支援行動版，還在測試中。</li>
<li>修正：將留言的按鈕列移到最上方。</li>
</ul>

<h2>v0.85 更新</h2>

<ul>
<li>新增：新增成員時可使用姓名搜尋。</li>
<li>修正：「DownloadSupport for Google+」按鈕相衝的問題。</li>
<li>修正：Google+ 修改了 CSS Class name 之後的失效問題。</li>
</ul>

<h2>TODO</h2>

<ul>
<li>自訂選項：留言樣式、手動自動切換、時間間隔、留言位置…。</li>
<li>封鎖特定成員。</li>
<li>成員分色。</li>
</ul>

<h1>原理</h1>

<p>（寫給看得懂的人看…）</p>

<p>腳本流程基本上就是利用 Google+ 的 API（不是 <a href="https://developers.google.com/+/api/">Developer 文件</a>裡正規的 API）取出文章底下的所有留言，再一一比對留言的作者 ID 是不是 48 成員。</p>

<p>比對的模式是用正規表達式（Regular Expression），比起跑迴圈檢查 Array 速度要快上非常多。用 AJAX 取回 JSON 資料之後再拿出想要的資料顯示出來就行了。</p>

<p>抓回來的 JSON 也包含自己的 ID，所以可以拿來比對自己的留言。</p>

<p>其中 Google+ 的 JavaScript API 使用了由 Mohamed Mansour 開發的 <a href="https://github.com/mohamedmansour/google-plus-extension-jsapi">google-plus-extension-jsapi</a>。在此特別感謝。</p>

<p>這東西是 <a href="http://www.opensource.org/licenses/mit-license.php">MIT License</a>，想要拿回去研究修改的人請便。</p>

<h1>追蹤</h1>

<p>要追蹤更新或回報問題，可在此或 userscript.org 上留言反映。<br />
也歡迎到我的 Google+：<a href="http://akr.tw/+">http://akr.tw/+</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://akr.tw/2011/12/greasemonkey-akb48-googleplus-comment-filter/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Google App Engine SDK 1.6.0 發布。支援 Python 2.7</title>
		<link>http://akr.tw/2011/11/google-app-engine-sdk-160/</link>
		<comments>http://akr.tw/2011/11/google-app-engine-sdk-160/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 09:34:12 +0000</pubDate>
		<dc:creator>akira</dc:creator>
				<category><![CDATA[程式設計]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://akr.tw/?p=53</guid>
		<description><![CDATA[Google App Engine 在前幾天（11/7）發布了 1.6.0 的 SDK。 主要的改進有： （一）新的（更貴的）收費模式（http://www.google.com/enterprise/cloud/appengine/pricing.html） （二）可以使用 Python 2.7 了。 其實在上一版就已經加入 2.7 的測試，但是 SDK 等到這次的 1.6.0 才開始支援本機端的 2.7。 要使用 Python 2.7 作為 runtime，首先要確認你的應用程式必須是 High Replication Datastore（HRD）模式才行。 現在建立新的應用程式的話，預設都是在 HRD 模式，如果是很古早前的程式，要先經過 Migration 程序轉換到 HRD 模式。（從後台「Application Settings」裡的「Migrate Application」） 接著在 app.yaml 中修改： runtime: **python27** threadsafe: **true** URL 的對應也要修改為： - url: /.* main.**app** 這樣就能在 Python 2.7 中開發你的應用程式了。（當然本機端也別忘了也要升級到 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/appengine">Google App Engine</a> 在前幾天（11/7）發布了 1.6.0 的 SDK。</p>

<p><span id="more-53"></span></p>

<p>主要的改進有：</p>

<p>（一）<strong>新的（更貴的）收費模式</strong>（<a href="http://www.google.com/enterprise/cloud/appengine/pricing.html">http://www.google.com/enterprise/cloud/appengine/pricing.html</a>）</p>

<p>（二）<strong>可以使用 Python 2.7 了</strong>。</p>

<p>其實在上一版就已經加入 2.7 的測試，但是 SDK 等到這次的 1.6.0 才開始支援本機端的 2.7。</p>

<p>要使用 Python 2.7 作為 runtime，首先要確認你的應用程式必須是 High Replication Datastore（HRD）模式才行。</p>

<p>現在建立新的應用程式的話，預設都是在 HRD 模式，如果是很古早前的程式，要先經過 Migration 程序轉換到 HRD 模式。（從後台「Application Settings」裡的「Migrate Application」）</p>

<p>接著在 app.yaml 中修改：</p>

<pre><code>runtime: **python27**
threadsafe: **true**
</code></pre>

<p>URL 的對應也要修改為：</p>

<pre><code>- url: /.*
  main.**app**
</code></pre>

<p>這樣就能在 Python 2.7 中開發你的應用程式了。（當然本機端也別忘了也要升級到 2.7。）</p>

<p>（三）<strong>支援各種 Python 2.7 的 <a href="http://docs.python.org/library/threading.html">Threading library</a></strong>。</p>

<p>（四）<strong>支援一些 C 語言的模組：</strong>&#8216;ctypes, sqlite, ssl, _ssl, fcntl, spwd, pwd, grp, syslog, select, _socket&#8217;</p>

<p>（五）<strong>支援 Python 原生的 JSON 函示庫。</strong></p>

<p>以往要在 GAE 裡使用 JSON 得靠 Django 的 simplejson，
Python 2.7 開始支援<a href="http://docs.python.org/library/json.html">原生的 JSON library</a>，速度會快上很多。</p>

<p>（六）<strong>支援許多第三方的函示庫。</strong></p>

<p>在新的 Python 2.7 runtime 可以使用 Django、lxml、jinja2、MarkupSafe、NumPy、PIL、PyCrypto、setuptools、WebOb、YAML、zipimport 這些 third-party libraries。</p>

<p>要在應用程式裡匯入這些 libraries，得先在 app.yaml 中設定好，以 lxml 來說：</p>

<pre><code>libraries:
- name: lxml
  version: "2.3"
</code></pre>

<p>其中 name 是 library 的名稱，version 是要使用的版本，也可以指定「latest」來使用伺服器上最新的版本。詳細的名稱和版本對應表可以在<a href="http://code.google.com/intl/en/appengine/docs/python/python27/using27.html#Configuring_Libraries">官方文件</a>裡找到。</p>

<p>接著就可以在程式裡直接 &#8216;import lxml&#8217; 匯入了。（當然要在本機上測試的話，也得先安裝好相對應的版本囉。）</p>

<p>（七）<strong>webapp 框架升級到 webapp2。</strong></p>

<p>簡單的「Hello, World!」範例：</p>

<pre><code>import webapp2

class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('Hello, WebApp World!')

app = webapp2.WSGIApplication([('/', MainPage)])
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://akr.tw/2011/11/google-app-engine-sdk-160/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS Reset 的另一種選擇－Normalize CSS</title>
		<link>http://akr.tw/2011/08/normalize-css/</link>
		<comments>http://akr.tw/2011/08/normalize-css/#comments</comments>
		<pubDate>Thu, 18 Aug 2011 15:25:41 +0000</pubDate>
		<dc:creator>akira</dc:creator>
				<category><![CDATA[網頁設計]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://akr.tw/?p=50</guid>
		<description><![CDATA[一般在網頁設計時，都會使用 CSS Reset 來清除各種瀏覽器的預設樣式，接著再設定想要的樣式時就會排除掉很多在不同瀏覽器上詭異的情況。 而現在，除了以往常見 Eric Meyer 版本、YUI 版本的 CSS Reset 之外，還有另一種選擇－ Normalize CSS Normalize CSS 和 CSS Reset 最大的不同在於，CSS Reset 是清除所有預設的樣式；而 Normalize CSS 則是賦予各種 HTML 元素一個預設的樣式，譬如 &#60;h1&#62;、&#60;h2&#62;、&#60;h3&#62; 等標題字型大小、&#60;ul&#62; 的預設該有的 padding 等等。也增加了一些可用性（如在 &#60;button&#62; 元素上游標會變成手指狀，告訴使用者可以按）。有了這些預設的樣式，在寫我們自己的 CSS 時，可以減少許多屬性設定。 另外 Normalize CSS 是針對 HTML5 的 CSS 框架，所以支援 HTML5 中新的標籤，包括 video、canvas 等等。如果要做 HTML5 的網頁的話，會非常方便。Normalize CSS 的專案頁面上提供了一個 Demo 的網頁。可以看看各種元素經過 Normalize [...]]]></description>
			<content:encoded><![CDATA[<p>一般在網頁設計時，都會使用 <a href="http://meyerweb.com/eric/tools/css/reset/">CSS Reset</a> 來清除各種瀏覽器的預設樣式，接著再設定想要的樣式時就會排除掉很多在不同瀏覽器上詭異的情況。</p>

<p>而現在，除了以往常見 <a href="http://meyerweb.com/eric/tools/css/reset/">Eric Meyer 版本</a>、<a href="http://developer.yahoo.com/yui/reset/">YUI 版本</a>的 CSS Reset 之外，還有另一種選擇－
<a href="http://necolas.github.com/normalize.css/"><strong>Normalize CSS</strong></a></p>

<p><span id="more-50"></span></p>

<p>Normalize CSS 和 CSS Reset 最大的不同在於，CSS Reset 是清除所有預設的樣式；而 Normalize CSS 則是賦予各種 HTML 元素一個<strong>預設的樣式</strong>，譬如 <code>&lt;h1&gt;</code>、<code>&lt;h2&gt;</code>、<code>&lt;h3&gt;</code> 等標題字型大小、<code>&lt;ul&gt;</code> 的預設該有的 padding 等等。也增加了一些可用性（如在 <code>&lt;button&gt;</code> 元素上游標會變成手指狀，告訴使用者可以按）。有了這些預設的樣式，在寫我們自己的 CSS 時，可以減少許多屬性設定。</p>

<p>另外 Normalize CSS 是針對 HTML5 的 CSS 框架，所以支援 HTML5 中新的標籤，包括 video、canvas 等等。如果要做 HTML5 的網頁的話，會非常方便。Normalize CSS 的專案頁面上提供了一個 <a href="http://necolas.github.com/normalize.css/demo.html">Demo 的網頁</a>。可以看看各種元素經過 Normalize CSS 標準化之後的模樣。</p>

<blockquote>
  <p><strong>Normalize CSS on GitHub：</strong><a href="https://github.com/necolas/normalize.css/">https://github.com/necolas/normalize.css/</a><br />
  <strong>CSS 檔案：</strong><a href="https://github.com/necolas/normalize.css/blob/master/normalize.css">https://github.com/necolas/normalize.css/blob/master/normalize.css</a></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://akr.tw/2011/08/normalize-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 WordPress 的管理列上顯示頁面產生時間等資訊</title>
		<link>http://akr.tw/2011/08/display-performance-in-wp-admin-bar/</link>
		<comments>http://akr.tw/2011/08/display-performance-in-wp-admin-bar/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 15:14:42 +0000</pubDate>
		<dc:creator>akira</dc:creator>
				<category><![CDATA[程式設計]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://akr.tw/?p=46</guid>
		<description><![CDATA[在 WordPress 的工具列（網站管理員登入之後最上面那條黑黑的）上， 顯示網頁的資料庫查詢次數、頁面產生時間、記憶體使用狀態等資訊。 在佈景主題裡的 functions.php 裡加入這個函數。 function display_performance_admin_bar() { global $wp_admin_bar; // 只對網站管理員顯示。 if ( !is_super_admin() &#124;&#124; !is_admin_bar_showing() ) return; // 取得資料庫查詢次數、頁面產生時間、記憶體使用狀態。 $status = sprintf( '&#38;lt;strong&#38;gt;%d&#38;lt;/strong&#38;gt; queries &#124; &#38;lt;strong&#38;gt;%.2f&#38;lt;/strong&#38;gt; seconds &#124; &#38;lt;strong&#38;gt;%.2fMB&#38;lt;/strong&#38;gt; memory', get_num_queries(), timer_stop( 0, 3 ), memory_get_peak_usage() / 1024 / 1024 ); // 新增到管理列上。 $wp_admin_bar-&#62;add_menu( array( 'id' =&#62; 'status', 'title' =&#62; $status, [...]]]></description>
			<content:encoded><![CDATA[<p>在 WordPress 的工具列（網站管理員登入之後最上面那條黑黑的）上，
顯示網頁的資料庫查詢次數、頁面產生時間、記憶體使用狀態等資訊。</p>

<p><img src="http://i.imgur.com/hde3Rl.png" alt="在 WordPress 的管理列上顯示頁面產生時間等資訊" /></p>

<p><span id="more-46"></span></p>

<p>在佈景主題裡的 <strong>functions.php</strong> 裡加入這個函數。</p>

<pre><code>function display_performance_admin_bar() {
    global $wp_admin_bar;

    // 只對網站管理員顯示。
    if ( !is_super_admin() || !is_admin_bar_showing() )
        return;

    // 取得資料庫查詢次數、頁面產生時間、記憶體使用狀態。
    $status = sprintf(
        '&amp;lt;strong&amp;gt;%d&amp;lt;/strong&amp;gt; queries | &amp;lt;strong&amp;gt;%.2f&amp;lt;/strong&amp;gt; seconds | &amp;lt;strong&amp;gt;%.2fMB&amp;lt;/strong&amp;gt; memory',
        get_num_queries(),
        timer_stop( 0, 3 ),
        memory_get_peak_usage() / 1024 / 1024
    );

    // 新增到管理列上。
    $wp_admin_bar-&gt;add_menu( array(
        'id' =&gt; 'status',
        'title' =&gt; $status,
        'href' =&gt; false,
    ) );
}
add_action( 'admin_bar_menu', 'display_performance_admin_bar', 1000 );
</code></pre>

<p>當然也可以運用這個函數，讓這些資訊顯示在其他地方，不過我是認為一般使用者不太需要知道這些資訊，所以就放在只有管理員能看到的工具列上。</p>
]]></content:encoded>
			<wfw:commentRss>http://akr.tw/2011/08/display-performance-in-wp-admin-bar/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>【Greasemonkey 腳本】Google Light Navbar 自訂 Google 導覽列顏色</title>
		<link>http://akr.tw/2011/06/greasemonkey-google-light-navbar/</link>
		<comments>http://akr.tw/2011/06/greasemonkey-google-light-navbar/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 12:51:01 +0000</pubDate>
		<dc:creator>akira</dc:creator>
				<category><![CDATA[程式設計]]></category>
		<category><![CDATA[Greasemonkey]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://akr.tw/?p=43</guid>
		<description><![CDATA[最近 Google 的改版，讓原先雪白的 Google 頁面上多出了條黑色的導覽列，在網路上也引起不少討論。有人認為好看，有人拚命想改回白色。於是就試著寫了個把導覽列修改回舊式白色的 GM 腳本… 安裝 安裝腳本：http://userscripts.org/scripts/show/105735（點選右上方綠色的［Install］安裝。） 說明 原先的功能很簡單，就是把黑底變白底而已，。 Google Chrome、Opera 也可以直接使用。 PS. 其實我覺得新版黑色介面蠻好看的…。 v1.4 (2012/3/2) 更新 修改至適用新版的 Google 導覽列，還有一些問題要修正。]]></description>
			<content:encoded><![CDATA[<p>最近 Google 的改版，讓原先雪白的 Google 頁面上多出了條黑色的導覽列，在網路上也引起不少討論。有人認為好看，有人拚命想改回白色。於是就試著寫了個把導覽列修改回舊式白色的 GM 腳本…</p>

<p><span id="more-43"></span></p>

<h1>安裝</h1>

<p><strong>安裝腳本</strong>：<a href="http://userscripts.org/scripts/show/105735">http://userscripts.org/scripts/show/105735</a>（點選右上方綠色的［Install］安裝。）</p>

<h1>說明</h1>

<p><img src="http://i.imgur.com/U15UJ.png" alt="Google Light Navbar" /></p>

<p>原先的功能很簡單，就是把黑底變白底而已，。
Google Chrome、Opera 也可以直接使用。</p>

<p>PS. 其實我覺得新版黑色介面蠻好看的…。</p>

<h2>v1.4 (2012/3/2) 更新</h2>

<p>修改至適用新版的 Google 導覽列，還有一些問題要修正。</p>
]]></content:encoded>
			<wfw:commentRss>http://akr.tw/2011/06/greasemonkey-google-light-navbar/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

