SEO 小註解

話說有本新書看到第六頁就卡住了, "..適當的使用 hgroup 元素對於 SEO 有一定的好處." 至於什麼是 SEO 倒是沒有做解釋. 原來此處的 SEO 是指 search engine optimization. 也就是如何更容易被搜尋引擎的機器人找到.

根據 "如何寫出一篇具有 seo 效果的開箱文 (三) – 鏈結的設置" 中的記載, 首先要為文章選出一個 25 字以下的標題, 3~5 個關鍵字. 關鍵字還要愈早出現愈好. 接著就是下標籤 (tag) 與分類. 如果標籤和分類給得愈恰當, 就愈容易被搜尋引擎找到.

另外要考慮錨點文字 (anchor text), 具體地說就是超鏈結文字. 跟論文一樣, 被別人引用的次數愈多, 就顯得自己的文章愈有內容. 寫得最簡明的是這篇 "日本 SEO 現狀":

在搜尋Google「Exit」的結果顯示排名在搜尋結果前面的是Disney和Yahoo!。但是Disney和Yahoo!的網站上並沒有「Exit」的文字,且網站內也沒有「Exit」的相關情報。其實會出現此結果的原因是Disney和Yahoo!得到如下所示的錨點文字連結。

If you are less than 18 years old, please <a href="http://www.disney.com/">EXIT</a&gt; now.

以上敘述可以從很多成人網站中看得到。其目的是為了讓未滿18歳的使用者退場,但是它的出口連結卻是指向Disney或Yahoo!。所以搜尋引擎在解析連結後的結果,於是顯示和關鍵字相關連的網站,即為Disney和Yahoo!了。

紅色的這段就是錨點文字. Exit 這個關鍵字就會對應到 <a href="…"></a> 的這個網站. 既然文章是給別人引用的, 好像不操之在我. 但第一篇文章中說, 只要自己多引用自己就可以了. 嗯, 寫論文好像也是如此. 不過論文只能 reference 自己以前的文章, 但部落格卻可以把本文的 URL 當作文章的開始或是結束.

好! 話說 hgroup 又關 SEO 什麼事? 所謂的 hgroup 是 HTML5 的標籤, <hgroup></hgroup> 一般包在 <header></header> 下一層. 用來夾住好幾個不同層級的標題. <h1></h1> 夾大標題, <h2></h2> 夾小一號的標題, 書上建議可以逐步用到 <h6></h6>.

搜尋引擎會去撈 <h1></h1> 裡面的字串當作關鍵字, 因此慎選 <h1></h1> 可以幫助文章被找到. 此外, HTML5 容許多個 header  和 footer, 所以這招用得好, 也比較容易被搜尋引擎找到.

Android 的 AV sync

我們播放多媒體檔案的時候, 很容易注意到 “沒有對嘴" 的情況, 這就是所謂的 lips sync (= synchronization) 或是 Audio-Video sync 的問題.

螃蟹公司怎麼做 AV sync 我不能告訴大家. 但是 Android 的世界裡就沒有太多秘密, 它又是如何做 AV sync 的呢? 

首先它不喜歡用傳統的 PTS (Presentation Time Stamp) 做單位, 而是採用 µs (微秒). 1 秒等於 90,000 PTS, 也等於 1,000,000 微秒. 即使在程式裡面還是難免用到 PTS 的概念, 不過 Android 的上層已經把它轉為時間的單位了.

在 Android 還使用 OpenCore 當播放器的時代, audio 和 video 分別和系統時間 (NPT = normal play time) 校正 [ref 1]. 由於媒體錄製的機器所使用的時鐘 (clock) 和播放器的時鐘會有一定的差異, 所以校正是必須的. 但是往往這個差異相當地小 (若干 ppm  – 百萬分之一的等級), 看完一部 MV 大概發現不了, 或許要看一部電影才會發現.

到了 StageFright 的時代, 計算好像有變複雜一點? 我只參考了兩篇網路文章 [ref 2, 3], 瞭解可能不夠全面. 不過以我對 AV sync 的瞭解, 看起來還是頗能自圓其說. 以下是我歸納的 rules.

1. 首先我們要知道依據播放器的時鐘, 我們已經播出了多少微秒. 請注意下面的 mSampleRate 其實是 frame rate. 這樣算出來的單位才會是秒, 乘上 106 就變成微秒.

2. 再來就是這個媒體的資料, 宣稱它現在是幾微秒? 其實拿 PTS 算一下就知道了, 這個值叫做 mPositionTimeMediaUs. 我們帥氣地把兩個值相減, 就知道系統時間比較快? 還是媒體時間比較快?

mTimeSourceDeltaUs = mPositionTimeRealUs – mPositionTimeMediaUs

3. 知道兩者差異之後, 我們就可以開始校正了. 我們想要播系統中第 N 秒 (RealTimeUs) 的資料時, 我們把這個 N 秒減去 mTimeSourceDeltaUs, 就知道該播的是媒體中第幾秒 (nowUs) 的資料.

nowUsRealTimeUs – mTimeSourceDeltaUs.

4. 從上下文觀察, 此處的 RealTimeUs 是由 audio 所計算出來的. 於是我們知道 Video 也應該要播媒體中的第 nowUs 秒的資料了. 不過 Video 該不該播出來呢? 要看現在 video 已經準備要播出的那一張的時鐘 (timeUs) 而定. 如果 nowUstimeUs 還小, 那麼表示我這張太早了, 稍微晚一點再播就 OK. 早多少可以接受呢? Android 說凡是早了 10 ms (毫秒) 以上, 都拖個 10 ms 再播!

如果 nowUs 比 timeUs 大, 表示遲到了!

lateness =  nowUs – timeUs.

5. 既然遲到還有甚麼藉口? 只要遲到 40 ms 以上, 一律趕快播! 

6. 如果竟然遲到超過半秒, 說不定 audio 都有問題了!? 所以會強制去 call 一次 AudioPlayergetMediaTimeMapping(&realTimeUs, &mediaTimeUs) 重新取得 realTimUs 和 mediaTimeUs.

以上就是我粗淺的心得, 還請路過的大神幫忙糾正, 順便去救一下 [ref 3] 呼救的那位. 謝謝!

[ref]

1. Android多媒体之OpenCore的A/V同步机制

2. Audio Mutlimedia Framework

3. understanding the logic behind the AV sync in Android 2.2

[後記]

雖然我應該去洗澡睡覺了, 但是還是忍不住講一下八卦. 上面用到微秒和毫秒的地方, 我檢查了一下, 大概沒寫錯. 我記得我大二考電子學第一次期中考的時候, 錯把微秒寫成 10-9, 結果被老師扣了 25 分. 整題計算都對, 只是在 Ans: 後面寫錯單位, 老師還是一分都不給我. 他 (當時還是讀博班的講師) 說: 如果你考博士班資格考 (俗稱 qualify), 錯任何一點點就沒分了. 等我自己考完 qualify, 我確認他是唬爛的…哈! 何況, 己所不欲勿施於人嘛.

Android APP 對 memory 的要求

剛剛在 Android 4.2 CDD (Compatibility Definition Document) 裡面看到 Android 對 APP 指定了可以給予多少 memory 的參考數字.

不過該表格使用的單位很不直覺, 它定義了 small, normal, large, xlarge 四種螢幕尺寸; 又定義了 ldpi, mdpi, tvdpi, hdpi, xhdpi, xxhdpi 等六種解析度 (DPI = dot per inch).

雖然我們可以顧名思義地推測, xlarge 就是 extra large. hdpi 就是 high DPI 等等. 還是做一張沒有特殊名詞, 直接看數字的表格來參考比較方便.

Screen Size Screen Density (DPI) Application Memory (MB)
426×320/480×320/640×480 120~160 16
213~240 32
320 64
960×720 160 32
213~240 64
320 128

據說真正的視網膜解析度是 477 DPI, 而 iphone 4 超越的視網膜 326 DPI 是指直線的方向而已.

總而言之, 在 Android APP 的世界裡, 還沒有 1080P, 4K2K, 或是超越視網膜這回事. 不然每個 APP 應該可以要個 256 MB 也不為過. 那 PM 就不用再想 "cost down 到一顆 256 MB DRR 有沒有可能?" 這種事了.

不過 Android 的確定義了兩種螢幕類型 (screen types). 一種是固定螢幕解析度 (Fixed-Pixel Device), 例如手機和平版. 所有的視訊都要縮放到它預設的解析度. 另一種類型 (Variable-Pixel Device) 是沒有螢幕, 或是有視訊輸出接口的. 對於後者, Android 就有 HD video 的觀念. 而且它很固執地規定只能有 720P 和 1080P 兩種解析度, 不准支援其它的輸出解析度.

Variable-pixel device implementations MUST support one or both of 1280×720, or 1920×1080 (that is, 720p or 1080p).

UIBC 小註解

UIBC 是指 User Input Back Channel, 用在 WIFI Display 的情境之下. 由於顯示裝置 (AV sink device) 和發送裝置 (AV source device) 只能透過無線傳輸, 所以從顯示裝置反過來操作發送裝置的話, 就叫做 UIBC.

上圖中的示意圖, 左邊的 310 可以換成平板或是手機 (410), 右邊可以換成筆電 (420). 不過手機一定是拿在手上, 自己控制自己就好啦!哪需要用到 UIBC?非也! Samsung 申請了個討厭的專利, 連筆電控制手機都納入了專利的範圍, 還好它在 2010/11/2 申請到現在還沒過.

UIBC Patent2

這個專利的摘要說:A method and apparatus for providing a user input back channel (UIBC) in an audio/video (AV) source device and an AV sink device communicating according to a wireless fidelity (Wi-Fi) display (WFD) standard is provided. The method includes: setting up an AV control session and an AV data session between the AV source devices according to the WFD standards; enabling the UIBC from the AV sink device to the AV source device by using the AV control session; and transmitting a user input from the AV sink device to the AV source device through the UIBC.

讓我們拭目以待, 看看拿了 20 個美國專利的 LEE; Jae-min, 和 11 個專利的 NA; Il-ju 這次是否能夠得逞.

解決 Outlook 進不了 Exchange Server 的問題

上次裝 Outlook 2003 的時候, 選用自動設定帳號, 總是會失敗. 改用手動設定之後, 它也不會成功. 更嚴重的是, 從此以後, Outlook 就開不起來了. 每次進去它就說無法連上 exchange server, 然後就自動離開, 再也回不去了. 對於這種固執錯誤己見, 不提供其他溝通管道的軟體, 我們還能說什麼呢? 當然是只好砍掉了!

今天早上心血來潮想看看 Outlook 2013 版有沒有變聰明? 結果,…竟然還是一樣. 上網 Google 了一下, 有幾篇遇到類似的問題:

Cannot start Microsoft Office Outlook. Unable to open the Outlook window

How to Solve MS Outlook and Exchange Server Errors | Solution

Users cannot open Outlook – “The name could not be resolved. The operation failed"

不過看了三篇都沒有合適的解法, 第二篇可能有用, 但是太麻煩了. 如果要靠自己的話, 只有再看看有什麼線索了. 由於每次它的錯誤訊息都會列出螃蟹公司的 Exchange URL (這個在 Mac Book Pro 上面明明是正確的, 不過 Windows 就是不買單.) 我想這東西一定是存在什麼地方吧? 

本機搜尋的結果也很令人失望, regedit 裡沒有一看就懂得特殊 Outlook 目錄, 硬碟也找不到帶有 realtek.com 的新檔案,… 幸好我改來改去, Outllook 又吐了找不到 myEMAILaccount.ost 的訊息. myEMAILaccount.ost 就是我的 email 帳號啦! 所以我就改為搜尋 myEMAILaccount.ost, 果然在 C:UsersmyPCaccountAppDataLocalMicrosoftOutlook 下面找到這個檔案. 把它 rename 之後, 就可以重新設定 Outllook 了.

附帶一提, 我在 Outlook 2003 版就試過重新安裝, 那招沒效. 所以這次也不會再做無謂的掙扎~~~

那個 C:UsersmyPCaccountAppDataLocalMicrosoftOutlook 是用第一篇 link 所說的 %appdata%MicrosoftOutlook 找出來的. myPCaccount 就是我在 PC 上的登入帳號, 和 email 帳號不同. 值得一提的是, 正確安裝之後, 跑到這邊再怎麼亂改名字, 基本上 Outllook 都會是對的, 砍掉都可以自動長出來.

我想起 Outlook 剛安裝的第一個畫面就是要我們順便設定一個 email 帳號, 所以這邊卡關之後, 後面都無法動作了. 這次幸運地重現生機, 我就決定無視 Outllook 的警告, 不設定任何 email account. 等到進入系統之後再加入手動加入. 而且, 為了避免設定錯誤, 這次我只使用自動設定.

和先前一樣, 自動設定時會跑來問密碼. 我設了一次不 OK, 再試同樣的動作, 一連做了 3 次, 忽然就自動連上了. 我想可能是敝公司的 time out 設的太短, 或是我中毒了!? 我姑且相信是前者吧! 總之, 這次 Outllook 2013 可以用了, 雖然 bug 都和以前一樣, 我總算找到解法 – POP3 可以用了. 唉, 好浪費生命啊! 還是寫下來供同病相憐的人參考吧!

其實, 比起下面這個小二數學, 這個 bug 也沒有考驗到太多觀察力. 不過, 小二數學花了我三五分鐘數眼睛、觸角、方塊、三角形, 至少我可以確定找到了正解. 爛 Outllook 花了我三五十分鐘, 我才只是勉強 hack 過而已 (嘆氣).

2nd gradeET