2011年8月12日

Chrome 擴充功能 - Plus Plurk 介紹

※本 Chrome Extension 已廢止,感謝大家支持,造成不便懇請見諒!

基本上這是一個協助格揆我將發佈在 Google Plus 上的訊息同步到 PlurkGoogle 瀏覽器 擴充套件 / 功能。原本只是格揆個人單純在同步文字訊息使用,但是經過一陣加油添醋式的亂改後覺得也許可以開放給 Google Plus 及 Plurk 的重度使用者試看看,於是就把它上到 Chrome 線上應用程式商店 了。

開發源由歷程

當不小心偷渡進 Google Plus 後,格揆一度因為專心在 Google Plus 上打混而幾乎放棄了在 Plurk 上的活動,此作為連帶使得卡馬值在短短幾天就從 98.x 掉到 97.y,在發現這種情形時原本一度考慮要使用凍結卡馬的方式來欺瞞自己。但此刻一個由 Google Plus 同步訊息到 Facebook 的 Publish Sync 擴充功能上線到線上應用程式商店,經過簡單試用後就有了『不然我也來寫一個從 Google Plus 將訊息同步發送到 Plurk 的擴充功能』的念頭並真正的開始研究 Plurk API ,隔了幾天後突然到 Chrome 線上應用程式商店付了 US$5 的入場券,然後還拗了 他踢 幫忙拉了一個 ICON,最後還賺了一場由 火焰銘王 提供的美國隊長電影,終於在 08/02 開始了募集測試人員的測試流程,然後就是因為一時恍神而在 08/11 莫名其妙的正式把它給弄上 Chrome 線上應用程式商店

核心思想

和 Publish Sync 的規劃不同,這個擴充套件是基於使用者以 Google Plus 為唯一發言人,並想將相關資訊散佈到 Plurk 上的散播模式而開發。換句話說如果您是希望以 Plurk 為主要發言來源,但想將訊息同步到 Google Plus 上訊息傳播模式的話,那這個套件就不會適合您的需要。在安裝前請先理解此一核心思想所造成的設計上的差異。

功能特色

本擴充套件 / 功能的主要特色如下:
  • 直接對 Plurk 發送訊息:所有的訊息都直接對 Plurk 進行操作,訊息分享沒有延遲
  • 訊息分享限制:本擴充功能支援『僅限朋友閱讀』之私噗模式,也能設限回噗對象的範圍
  • 訊息分享格式:依訊息內容的差異,提供 5 種轉噗到 Plurk 上的訊息格式
  • 訊息長度預覽:Plurk 屬微網誌系統,本套件可以預判訊息長度,提前避免傳送失敗的情形
  • 多段訊息轉噗:擔心個人感想太長無法轉送到 Plurk 嗎?沒關係,只要您分段得宜,本套件會自動將各段轉成回噗送上 Plurk

安裝與授權

本套件為 Google 瀏覽器 Chrome 所屬的擴充套件,如果您尚未使用 Google 瀏覽器可以在 Google 瀏覽器 產品頁面下載安裝。另外提醒的是 Google 瀏覽器安裝並不需要系統管理者權限,只要作業系統為 Windows XP 以上的使用者都能直接下載安裝。
安裝 Plus Plurk
請使用您已安裝的 Google 瀏覽器連接到 Plus Plurk - Chrome 線上應用程式商店 上並按下『加到 Chrome』按鈕即可,如附圖:
權限要求
本擴充功能僅存取以下三個網站資料:
  1. www.plurk.com: 將資料傳輸給 Plurk
  2. plus.google.com: 擷取在 Google Plus 上預定發佈的訊息、在 Google Plus 上啟用本擴充套件
  3. www.googleapis.com: 將預定分享到 Plurk 的網址預先進行網址為 http://goo.gl/xxxxx 之用
重新載入 Google Plus
完成安裝後套件會自動將相關程式載入 Google Plus 頁面中,不過您也可以重新載入 Google Plus 頁面,確保相關程式正確的嵌入 Google Plus。只要相關程式已正確嵌入,那麼在輸入訊息時會在分享鈕右側看到多出一個 Plurk Share 圖示。但是因為目前還沒有取得 Plurk 服務授權,所以此刻暫時無法點選。如附圖:
取得 Plurk 服務授權
套件安裝後會自動開啟 Plus Plurk 選項設定頁面以利噗友進行 Plurk 服務授權,另外您也可以按下 Chrome 右上角的 Plus Plurk 圖示,它會直接開啟 Plus Plurk 選項設定頁面,如附圖:

點選『進行授權』鈕後會開啟 Plurk 服務授權存取頁面,不同意的話是沒辦法發送訊息給 Plurk 的喲~~
授權完成後會自動關閉該頁面回到 Plus Plurk 選項設定頁面,其中『授權狀態』欄位會變更為『已完成授權』,同時『授權人』欄位會取得 Plurk 的使用者名稱資訊,如附圖。特別注意的是一旦更換電腦,這個授權動作就要執行一次!
如果授權後發現授權人的名字不是您的名字請先登出 Plurk 後再重新進行授權;如果這是一台公用電話的話請在使用完畢並登出 Google Plus 後一併記得登出 Plurk 及清除 Plus Plurk 授權設定(請注意:Plus Plurk 並非透過 Plurk 帳號及密碼登入 Plurk ,故光是登出 Plurk 並不會取消 Plus Plurk 存取 Plurk 的權限),清除授權設定後則『受權狀態』欄位會恢復為『尚未授權』,如附圖。

一般使用

Plus Plurk 只要完成 Plurk 服務存取授權後,就可以將訊息同步分享到 Plurk 上。不管是心情碎碎念、文章心享、心得感言、照片紀念、還是影音記錄等等等,只要沒有超過 Plurk 內文長度限制,Plus Plurk 都可以幫你噗到 Plurk 上。以下都是將 Google Plus 上輸入的資訊與 Plurk 實際獲得的噗文結果合併後的圖例。
心情碎碎念 / 純文字訊息
心得分享
純文章分享
與『心得分享』最大的差異就是... 沒有心得... (被毆)
內嵌文章分享
0.3.2.2 調整功能
如果是 Plurk 支援的文章連結,則 Plurk 會以部落格區塊轉貼方式呈現,如附圖。
目前 Plurk 支援的 oEmbed 網站列表如下(請參考 Plurk Labs (Chinese)):
  • YouTube
  • Vimeo
  • Slideshare
  • Wordpress.com
  • PIXNET痞客邦部落格、相片/相簿
  • 未來事件交易所
  • ted.com
  • itunes.apple.com
  • Flickr
  • scribd
  • Xuite 隨意窩部落格、相片/相簿
  • 蘋果日報新聞
圖片分享

噗文管理

Plus Plurk 一開始預設的 Plurk 訊息是可在河道上自由被檢視及回噗的,但是人生總有些訊息並不想如此大方的公開或是讓人家插花回覆的,有一些開關可以應付這方面的需求。
檢視限制
可以選擇是公開給所有人檢視或僅朋友能檢視。
回噗限制
可以限制是否同意任何人皆可回噗,僅限朋友可以回噗、或完全不能回噗!
同步限制
0.3.1.0 新增功能
應該有不少噗友是利用 Plurk 提供的 Facebook 同步功能將訊息同步到 Facebook 上的,而 Plurk 其實也提供了如何不同步到 Facebook 的方式。Plus Plurk 自 0.3.1.0 版起也提供了指定是否開放讓 Plurk 自動同步臉畫的選項開關,如附圖。

訊息格式管理

和 Twitter 不同(應該吧),Plurk 本身並不是純文字型態的微網誌系統,因此 Plus Plurk 在分享訊息到 Plurk 時依訊息種類提供不同的訊息分享格式。這些設定可以在 Plus Plurk 的選項設定頁中進行修改,修改完後記得要『儲存』後相關設定才會生效。至於那些變數所對應的資料項目可透過點選 符號查閱之。
  • 戳記:在 Facebook 上我們可以看到每一筆訊息的來源為何,但是 Plurk 上卻沒有這方面的設定,所以格揆很堅持的希望在 Plurk 上能一眼的看出來這筆噗文的來源為何。它的預設值為『[fr. G+]』,但因為會佔用到噗浪內文的空間所以格揆已自行改成『[G+]』,您也可以直接設為空白。
  • 訊息 / 純文字分享:如果某筆訊息沒有包含文章連結、影像連結、或圖片連結時,視為單純的訊息分享。此時能使用的變數只有代表訊息的 ${MESSAGE} 及戳記 ${STAMP} 兩種。
  • 心得分享:為預設的分享模式,一份完整的心得分享中會包含個人的心得、感想(${MESSAGE})、文章連結(${LINK})、文章標題(${TITLE})、以及文章圖片(${PICTURE})。
  • 內嵌文章分享:針對 Plurk 能自動讀取特定網站資訊所採取的對應格式,只需文章連結(${LINK})即可由 Plurk 自動帶出連結網址標題及第一張圖片。
  • 文章分享:少了個人心得、感想(${MESSAGE})的訊息分享屬之。
  • 影片分享:目前以連結 ${LINK} 為 Youtube 或 Vimeo 的網址時視為影片分享,Google Plus 在捉取影片資訊時會提供影像連結(${LINK})及影像擷圖(${PICTURE})兩種資訊,由於 Plurk 也會自行捉取影像內的資訊,故通常不會使用到影像擷圖(${PICTURE})這個變數。
  • 圖片分享:當訊息中不含文章連結(${LINK})及文章標題(${TITLE})時即屬圖片分享。您可自行決定圖片要放前面還是放後面。
另外『${DESCRIPTION}』這個變數主要是指一篇文章或影片的內容描述,但因為它本身經常超出 Plurk 內文的上限,所以不建議各位使用。
0.3.3.2 新增功能
自 2011-08-23 起 Plurk 支援訊息斷行顯示,因此在格式設定上也新增了斷行的符號『|』,如上圖中的『訊息分享』即使用了這個斷行符號,斷行的輸入範例如下圖:



需要特別注意的是 Plurk 官方允許的斷行行數是 4 行,如果在格式設定中使用了斷行符號『|』,那麼實際能輸入的訊息行數就只剩下 3 行,下圖即為超過上限行數時的檢查結果,出現第 5 行的原因就是因為 | 多產生了一行戳記(${STAMP})列所導致。。

多段式噗文

因應 Plurk 單則訊息 140 個字的限制,Plus Plurk 支援將訊息分成數段噗在同一筆噗浪主文下成為回噗。但這並不是自動分段,Plus Plurk 的分段依據是透過使用者預先安排的。
Plus Plurk 在處理 ${MESSAGE} 時會針對連續兩個 ENTER 鍵進行訊息切割,訊息切割之後再依序將訊息內容送往 Plurk 河道,這個發送的時間間隔是每秒一筆,以下介紹的兩種應用方式,它們之間的差異只在於有沒有先空個兩行再輸入個人的心得或意見而以。



訊息長度檢測

有時候在下筆如神助、文思如泉湧時的摸門特是很難有心思力氣去一個個數每一段落各有多少字。每次數的結果都不一樣也就罷了,就怕是還沒數完前就讓原本澎湃的思緒化為枯竭的溝流,這樣怎麼有資格當文青呢?
沒關係,Plus Plurk 可以透過某種不明確不科學沒有保證的計算公式提前告知這一篇文章中最長的那一段總共有幾個字,如附圖。特別注意的是這裡的第一段指的是文章的連結、標題、文章內附圖的連結等等的綜合計算結果,並不是心得部份的文字字數。

另外這個燈泡的顏色會隨著文字長度是否超過 140 字上限或是 Plurk 斷行上限而變色,綠色(通常)表示可安心噗文,紅色(幾乎確定)表示有某一段訊息過長或行數過多請予修正。特別注意的是這個檢查結果並不會阻止『分享』鈕的功能,而 Plus Plurk 在收到 Plurk 拒絕噗文的回覆時則會停止後續訊息的發送以便有辦法一行行手動將訊息補進河道內。

常見問題與說明

  1. 問:為什麼在 Google Plus 上明明只是換行,但在 Plurk 上卻成多段式噗文呢?
    這通常是發生在訊息內容是從剪貼簿貼到 Google Plus,Google Plus 雖然顯示上看起來像換行,但實際上捉出來的訊息卻是每行一段,故轉送到 Plurk 時就變成多段式噗文了。

成果示範

在本文剛撰寫時格揆提過當時的卡馬值一度落到 97.y ,經過本套件的協助後在三週內竟然已提升到 99.81,您看看,這套件是不是真的很有用?廢話!老是把 Google+ 上的資料倒進 Plurk 當然會提高卡馬值啊,而且三週才提升 2 似乎有點...

多語系支援

目前並未支援其他語系,非常歡迎有意願者協助翻譯!

感謝

改版記錄

2011年7月25日

一個恐龍法條 + 一個愛現的官僚 = 什麼?

基本上這原本是在 Google+ 上針對台北市政府法規會與 Google 對 Android Market 7 日鑑賞期事件所留的一段心得,不過因為近日又多了一點心得,加上北市府額外奉送的兩週延議期也快到了,所以趁機把它搬到部落格中作為歷史遺跡,順便為這個荒廢多時的部落格灌點水... :p
整個故事的發展演進請直接參閱 『Google Android Market、Apple App Store 7日鑑賞期事件懶人包』 及 『北市府裁罰事件,Google:法律解讀有疑慮,app 繼續下架』 兩篇文章說明而不再贅述,以下即為個人的看法:
  1. 台灣消費者從此與世界豐富的應用程式無緣
  2. 和中國一樣出現一大堆山寨版應用程式在電信公司的市集上騙錢
  3. 因為台灣看不到付費軟體,所以也不會有人幫作者翻譯使用者界面為正體中文
  4. iPhone/iPad 使用者也不用太高興,別以為世界各地的應用軟體開發者就會認同或支持台灣 Apple Store 的特別條款;也不要天真的以為 iOS 軟體開發者都有那種力氣來面對、統計、或處理台灣的退費條款(狀態可能有所改變,容後述)
  5. 以目前的狀況來看,恐怕也讓某些原本想要寫 Android App 的開發人員陷入躊躇不前的困擾中,iOS 的開發人員可能就稍好一點,至少可以樂觀的相信被退款的機率應該不會太高。但總體來看似乎並不利於行動應用軟體業的發展
  6. 免費軟體的使用一併受到影響:這是近日的感想,應該也會是 iPhone 軟體開發者比 Android 軟體開發者有利的地方
基本上到了 07/15 後,Apple 正式增列台灣專屬條款『您得自產品收受之日起七日內,取消對產品之購買。在您通知iTunes您已刪除產品所有備份之前提下,iTunes將會退還您已支付之價款。自您取消購買時起,您不再被授權繼續使用該產品。此項權利不可拋棄。』,但是軟體內 (In-App) 購買、訂閱部份目前看來是無法退費的。這個差異可能會轉移軟體開發者對於軟體功能的規劃:『表面上是免費軟體,但是多數功能都要另行在軟體內付費啟用』,而且此作法某種程度下還能對抗盜版軟體。
有趣的地方就在這兒,在 iTunes / Apple Store 下雖然付費軟體有七日退費條款,但是開發者可以讓軟體免費下載,之後再透過 In-App 方式付費購買擴充功能,這些付費功能無法退費,所以 iOS 開發人員其實也不見得需要特地處理台灣地區軟體的退費事宜;但與過去比較起來消費者可能會發現連寫信退費的權利恐怕也沒了。
Android Market 也提供所謂的 In-App 付費功能,也有許多軟體開始透過此付費模式提供購買特殊裝備或啟用特別功能(個人覺得這些也算是騙子軟體),不過因北市府法規會介入的關係導致 Market 整個付費功能被 Google 關閉後,自此每次在開啟這類具 In-App 付費功能的軟體時就會看到一個很刺眼的訊息:『Can't make purchases』且一而再、再而三的提醒台灣的使用者因為一個愛現的官僚所造成無法付費購買軟體的窘境。
距上次北市府美其名對 Google 釋出善意再給兩週寬限期的時間又快到了,不知道這個號稱天龍國的地方政府有沒有任何方案足以應對 Google 不接受七日退費期費要求的因應作為?
還要用 Google 有挾消費者以令天子之嫌 那招開罰嗎?

2011年3月23日

本格文章詞頻分析

看了 timdream文字雲工具 後,也把這個部落格的資料給餵進去看看,然後就出現了以下這個分析圖...
簡單的說,格揆我對『可以』這個詞兒的使用頻率實在太高啦~~ 同時這也更加明確的確認出這個部落格確如其名的只是一份胡思亂想鬼扯蛋的雜記而以...

2011年2月19日

智慧型手機綁約方案選擇

電信業者透過一定程度的補貼手段以爭取用戶的方式其來由自,但早期功能型手機世代時其實並不是那麼划算而在這方面沒有太多的困擾。但是直到 iPhone 3G/3Gs 登陸台灣後,因為合約中綁定了無線數據上網的部份,所以開創了鄉民們針對電信業者智慧型手機綁約方案的研究與心得整理。這一篇也是網海中注定會浮沉的一個片段,但在它還尚未沉沒前應該還是有一絲絲的參考價值... 吧!

同手機、同上網資費但不同話務資費比較

格揆我曾在 噗浪/Plurk 上隨手寫了一段 綁約資費方案的選擇條件,這篇文章算是進一步對這些條件加以說明。先來看看當時留的選擇條件如下:
  1. 網路使用習慣:隨時隨時要取得朋友的各種資訊、只需要行事曆/天氣/郵件通知、還是完全不使用
  2. 各資費下的總支出金額:並不是低資費就一定會繳的少
  3. 該資費下的免費通話量:有些資費方案是能月租折抵通信費用,有些甚至是直接贈送固定金額的通信費用
  4. 個人的通話量:把自己過去 6 個月的平均通話量套到前述條件內,看看那一個方案的額外花費最少。
前兩個條件很容易數據化,下表即為假設在中華電信辦理 iPhone 4 32G 手機,選擇 mPro 950 上網吃到飽方案時(即前述第一條件)分別選擇大家講-589及大家講-289(前述第二條件)時不同資費的支出試算。這個試算表中把話務月租費分成兩段的原因在於某些優惠方案可以在滿足一定月份(通常是 12 個月)後調降話務月租費,不過此表中的這兩個 iPhone4 超值方案都無此選項。
至於數據上網月租費方面也有分吃到飽和限量飲食的選擇,由於 mPro 950 是屬於一個價碼吃到飽的模式,所以上、下限都是 NT$950 元打八折的 NT$760 元。
仔細看看這份試算表可以發現:雖然表面上看來『大家講-289』方案的每月支出只要 NT$1,049 元,但若加上手機費用及預繳折扣後反而比『大家講-589』方案的總支出要再貴上 NT$500 元。這就是為什麼網路上及格揆我所一再強調的 並不是低資費就一定會繳的少 的原因啊!
這裡簡單說明一下各項數值的來源吧,然後就可以看看其他幾種方案的比較。當然如果覺得這些數據有什麼疑問之處歡迎一起討論。
  1. 話務月租費總支出:就兩年下來總共要繳多少通話費
  2. 數據上網月租費總支出:一樣是指兩年下來總共要繳多少上網費,不過因為某些上網方案並不是吃到飽的,所以這裡分成上、下限兩個數據。注意:通常這個上限值不應該發生才對。
  3. 購機準備金:這是指要領到手機所必須先付出的費用,通常是手機優惠價加上購機預繳費用。若電信公司有推出免預繳方案(通常是 VIP 或 NP)時,購機準備金就會降低。不過看了幾個方案後發現電信公司不管什麼方案要準備的預算都一樣... XD
  4. 綁約期內月支出:這是指帳面上每個月要繳給電信公司的費用,但是目前這個試算表沒辦法精確區分出話務費及上網費都會變動的情形。例如,如果話費為先 589 後 289 而上網費則是先 450 後 950 時,這個試算表只會捉出下限為 289 + 450 = 739 的數字而不是實際的 589 + 450 = 1039 這個數值。
  5. 綁約期內總支出:話務月租費總支出 + 上網費用總支出 - 預繳贈送金額。中華電信以前的方案是折抵預繳金額的 20%,現在的方案只剩下 10% 而以。
  6. 賣出價格:若綁約所取得的手機不為自用的話,可以透過售出方式減少費用支出
  7. 另購新機價格:若把綁約手機賣了又需要另一隻手機的話,就得另外花一筆費用。6. 和 7. 之前的價差即俗稱為洗機所得,後續會談到
  8. 洗機後最低總支出:洗機的目的是要壓低約期內的總支出,所以此處就只考慮最低總支出費用

同資費但不同手機間比較

上一段內容是以同手機但不同資費作為比較,這段則改成同資費但手機分別選擇 iPhone 4 32G 及 HTC Desire HD 時各自會有什麼不同?
基本上 HTC Desire HD 的空機價格本來就比 iPhone 4 32G 要便宜 NT$8,000 上下,所以單單從總支出來看的話選擇 HTC Desire HD 一如預期的必然會比選擇 iPhone 4 32G 的花費要少。但是不對啊?為什麼 HTC Desire HD 的總支出只比 iPhone 4 32G 便宜約 NT$1,000 而以呢?不是說價差約 NT$8,000 嗎?於是有人想到了是不是可以辦 iPhone 4 32G 後,把 iPhone 4 稍微降個價、打個折賣了再到通訊行買隻 HTC Desire HD 來貼補一下月租費的支出呢?
是啊,這方式就是大家常常聽到的洗機。又因為有電信公司是否受制於各家手機制造商的微妙關係,iPhone 系列手機通常會享有電信公司較高的貼補金額,這也是為什麼網路上都建議洗 iPhone 的原因。
下表就是以中華電信『大家講-589』為基礎,在分別選擇 iPhone 4 32G 及 HTC Desire HD 時的各項支出數據。其中 iPhone 4 32G 空機價依 PChome 報價為 NT$32,900 元,但為了要能脫手以免造成庫存壓力(什麼跟什麼啊)所以此處料敵從嚴的把售價訂在 NT$25,000。當然兩者間的差距不算小,能夠賣的愈高價則所能貼補的月租費就愈多,總支出也會跟著下調,這部份就要看個人機運了。如何賣掉 iPhone 的方式很多,不少人是透過網路拍賣進行競價,但是也有部份的人因為懶惰或其他原因而選擇直接把手機賣給通訊行吧?至於 HTC Desire HD 也依 PChome 報價的話是 NT$20,900 元,不過通訊行的價格應該不會這麼硬才對!

其他不同方案的比較

這篇是以智慧型手機綁約為前提所寫的介紹文,那麼有沒有單純針對通話為唯一要件的方案建議呢?
答案可能讓人失望,格揆我會建議 直接用空機價格購買功能型手機,然後向電信商辦理通信費用補貼 即可。
以下繼續對各種不同基礎所進行的方案比較,但各比較表僅僅只能作為參考、計算示範之用。任何方案的付費細節請參閱各家電信公司官網或聯絡其客服以取得最新、最正確的資訊。
是否一定要選擇 mPro 950 吃到飽方案實際取決於每個月的上網傳輸量是否僅少量甚至是不超過方案上限值。不過可以確定的是如果有 7 個月以上因傳輸爆量達 mPro 450 收費上限 NT$1,200 的話,那麼選用 mPro 450 的費用支出就會開始超過 mPro 950 了。
如果比較一下各家電信業者的資費方案,可以做為是否 NP 的決策。不過各家對 NP 的補貼倒是不一定能享受到就是了!另外這份表中的遠傳資費不一定正確,因為格揆不太瞭解遠傳資費的解讀方式,有可能因為認知錯誤給了一個不正確的數值。

結論

其實整個評估作業最簡單的方式不過就是計算月租費及手機費用的總支出,少數電信公司的預繳費用會有更多的折扣,那就再扣除這些多的折扣就是最終取得手機的實際支出。聰明的你應該馬上能計算出自己所需的優惠方案了吧?

追加報導 - 《 中華電信 - 平板+智慧新機成對帶著走!「天生一對」方案 》

個人看法:
  • 個人覺得綁約三年的各種合約都儘量少碰,尤其像手機這種半年就一款旗艦機的情形下更沒有再堅持一年的必要性
  • mPro 450 每月有 500MB 的額度,和 mPro 750 相比上限值雖然多 NT$100,但是一般以 WI-FI 環境為主的情形下月租費卻可以少掉 NT$300,個人認為是買空機情形下比較划算的選擇
  • 個人認為如果真有行動平板電腦的需求,透過洗手機(目前效果差很多)的方式可能比較划算
  • 對了,除非辦了兩組上網門號,不然 Flyer 要上 3G 時要拔 SIM 卡進行交換... XD

2011年1月28日

次世代主機的體感創意落差

我是看了 『老任第三季營收掉了46個百分比,狂賣缺貨的日子已是往日榮光?』 這篇文章時突然覺得老任營收會下調營收預測似乎是必然的,畢竟這是一台老主機,加上 XBox 360 Kinect 的出現明顯搶了 Wii 的風采。
以下是格揆我對三大主機在體感創意方面的自我主張,大家可以參考參考:
  • 任天堂 Wii Remote/Remote Plus:這玩意兒無疑是對體感遊戲的可能性具有重大貢獻,但是年代已久早顯疲乏;不過在某些需要精準控制的遊戲需求上仍有其重要性存在。
  • 微軟 Kinect:可視為自 Wii Remote 發表以來的重大演進,不光是少了遊戲過程中額外控制器的需求,還能被應用在各種 人體動作補捉上。
  • 索尼電腦娛樂 PS Move:雖然看來有一些和 Wii Remote/Remote Plus 不同的運用方式,但原始創意來源怎麼看都覺得是抄自任天堂的,所以目前看不出有何氣勢似乎也是很合情合理的。
所以,格揆我不小心在過年前從 電腦家 訂了一組 XBOX 360 + Kinect 同綑包要回家孝敬爹娘了... XD

2011年1月19日

如何在 Shell Script 中捉取 MySQL 資料庫中的指定記錄值

很久沒寫 Blog 了,也許是因為撞牆期吧?
總之,來寫個跟 Shell Script 及 MySQL 有關的東西吧:如何在 Shell Script 中直接取得 MySQL 資料庫中某記錄的值!

需求起因

事情的發展是這樣的:為了確保系統發出的 EMAIL 能有效的送達用戶手上,所以懶人如格揆我就很順手的把 /var/log/maillog 中的郵件寄送記錄給解出來了,反正不需要我每天動手做的任何方式都是最佳的方式。但是,代誌毋係憨人想ㄟ哈呢甘單,沒多久就有人寄信來希望能加上信件主旨,於是格揆很快的又回到每日人工查資料的機械生活中,這完全是忤逆懶人天性,違乎常理的發展啊。
就因為『懶散要超越懶散』,格揆我其實一直希望能把這動作併入 Shell 中自動補完,終於在今天找出了正確的解法,先記錄一下以免腦殘之後忘了該怎麼辦!

編碼問題

在讀取資料庫中的資訊前有一點很重要:系統編碼!
mysql> status
--------------
mysql  Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (i686) using readline 5.1

Connection id:          2468601
Current database:       *** 不要問 ***
Current user:           *** 很恐怖 ***
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.0.86-community-log MySQL Community Edition (GPL)
Protocol version:       10
Connection:             *** 您知道的 ***
Server characterset:    latin1
Db     characterset:    utf8
Client characterset:    latin1
Conn.  characterset:    latin1
TCP port:               3306
Uptime:                 428 days 21 hours 44 min 57 sec

Threads: 8  Questions: 115577998  Slow queries: 8  Opens: 81015  Flush tables: 1  Open tables: 64  Queries per second avg: 3.119
--------------
如果登入 MySQL 時看到了像是上圖中顯示了不同的編碼狀態,那麼任何 select 到的中文字都會變成亂碼!這問題不難處理,在使用 MySQL Command line Tools 加上 --default-character-set=encodename 即可,如上例即應改由以下方式登入 MySQL:
[ada@myhost ~]$ mysql --default-character-set=utf8
加上了預設編碼設定後後,再到 mysql 命令列工具中下達 status 指令就會看到編碼設定已經被改過了,如下:
Server characterset:    latin1
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8

Select 取值方式

之前在對 Oracle 進行操作時,它有提供如何在 Shell 中去讀取資料庫內容的作法,這裡用讀取資料庫系統時間作為例子:
[ada@ora ~]$ NOW=$(sqlplus -s << END
> set heading off
> set feedback off
> select sysdate from dual;
> exit;
> END)
[ada@ora ~]$ echo $NOW
2011-01-19 17:02:48
但如果想要在 MySQL 中如法泡製的話,輸出結果顯然需要額外再加工才行,如下所示:
[ada@myhost MYSQL]$ NOW=$(mysql --default-character-set=utf8 --silent -E <<END
select now();
END)
[ada@myhost MYSQL]# echo $NOW
*************************** 1. row *************************** now(): 2011-01-19 16:40:25
靠杯,為什麼兩台的時間差這麼多?
還好 MySQL 另外提供一個方式可以讓我們只看到實際輸出資料而沒有欄位名稱什麼的,如下例:
[ada@myhost MYSQL]$ NOW=$(echo "select now()" | mysql --default-character-set=utf8 --silent)
[ada@myhost MYSQL]# echo $NOW
2011-01-19 17:07:56
好啦,想要在 Shell 中去讀取 MySQL 中的某個值就是這麼簡單。如果要撈的是多筆、多欄位的資料呢?沒有問題,系統會用空白串接所有擷取出的欄位值,這樣會比較難處理,但它確確實實還是能夠加以操作。
[ada@myhost MYSQL]# LIST=$(echo "select status, time_start, creator from epaper" | mysql --silent)
[ada@myhost MYSQL]$ echo $LIST
0 2012-08-03 00:00:00 admin 1 2010-09-01 00:00:00 admin 0 2011-09-08 00:00:00 admin 0 2011-09-03 00:00:00 admin 1 2010-10-02 00:00:00 admin 1 2010-10-05 00:00:00 admin 1 2010-10-05 00:00:00 admin 1 2010-10-05 00:00:00 admin 0 2011-11-11 00:00:00 admin 1 2010-11-03 00:00:00 admin 0 2011-11-05 00:00:00 admin 0 2011-11-07 00:00:00 admin 1 2010-11-05 00:00:00 admin 1 2010-12-01 00:00:00 admin 1 2010-12-02 00:00:00 admin 0 2012-12-06 00:00:00 admin 1 2011-01-15 00:00:00 admin
其實也可以改成以下這樣啦,只不過這樣會多出欄位標題出來,需要自行濾除...
[ada@myhost MYSQL]$ mysql --default-character-set=utf8 --silent -e 'select status, time_start, creator from epaper'
status  time_start      creator
0       2012-08-03 00:00:00     admin
1       2010-09-01 00:00:00     admin
0       2011-09-08 00:00:00     admin
0       2011-09-03 00:00:00     admin
1       2010-10-02 00:00:00     admin
1       2010-10-05 00:00:00     admin
1       2010-10-05 00:00:00     admin
1       2010-10-05 00:00:00     admin
0       2011-11-11 00:00:00     admin
1       2010-11-03 00:00:00     admin
0       2011-11-05 00:00:00     admin
0       2011-11-07 00:00:00     admin
1       2010-11-05 00:00:00     admin
1       2010-12-01 00:00:00     admin
1       2010-12-02 00:00:00     admin
0       2012-12-06 00:00:00     admin
1       2011-01-15 00:00:00     admin

[ada@myhost MYSQL]$