2012年9月28日 星期五

Twitter Cards

Twitter cards 是 Twitter 目前測試在 tweets 裡嵌入媒體內容的功能,之前只有類似 Youtube、instagram 或 Twitter 認可的上傳圖片服務才能在 tweets 內顯示出內容。一開始 Twitter cards 的文件出來時,我就有把影像紀錄區加入需要的 header,直到前陣子 Twitter 開始開放申請登記,趕緊幫影像紀錄區填表申請。就在今天(9/27)凌晨收到審核通過的通知,現在可以在 Twitter 中直接展現作品圖片。


Twitter cards 和 Facebook Open Graph 一樣,只要在 header 裡面加入相關的屬性。Twitter cards 有三種類型: "summary"、"photo"、"player",影像紀錄區在各作品頁面設定 "photo" 的類型。例如這個作品 #622tweet 範例
<meta name="twitter:card" content="photo">
<meta name="twitter:title" content="Toomore (toomore) #622 作品">
<meta name="twitter:description" content="這條巷子可以看到 85 大樓… By toomore">
<meta name="twitter:image" content="http://pic.isuphoto.org/622_m_img7967.jpg">
<meta name="twitter:url" content="http://pi.isuphoto.org/post/622">
<meta name="twitter:creator" content="@toomore">
<meta name="twitter:site" content="@pi_isuphoto_org">
也可以使用 Twitter 提供的預覽工具測試,觀察所設定的值是否正確。最後如果都沒有問題,就可以填表申請 Twitter cards,然後再等個幾天審核通過。

另外如果頁面本身就有使用 Facebook 的 Open Graph header 設定,Twitter 也會直接套用 Facebook 的參數值,如果找不到 Twitter cards 時。當然要讓 Twitter 辨識的出來就還是要填寫申請單。

Update 2012/09/28 04:35
補一張透過 Twitter app 看到的畫面

2012年9月5日 星期三

MongoDB 2.2 新功能 存活時間 TTL 用法

MongoDB 在 8/29/2012 發佈 2.2 版本,其中有一項功能我很期待,就是存活時間 (TTL, Time to live),以下整理文件的內容:


基本運作
MongoDB 透過 mongod 背景處理過期的資料,頻率為一分鐘一次。在建立索引時(ensureIndex)加入 expireAfterSeconds 選項與秒數就可以完成 TTL 設定。

限制
  • 索引欄位必須為 BSON 的時間格式,如果不是時間格式,TTL 就無效。
  • _id 欄位不能設定為 TTL 的時間索引欄位。(這有點可惜,ObjectID 本身既有時間紀錄在裡面,還需要再指定一個時間欄位有點多餘…)
  • 如果時間欄位是陣列(array)包含多個時間值,則以最近的時間為基準設定。
  • 不可以在 Capped Collections 設定 TTL,因為 Capped Collections 格式的資料本身就無法刪除。
  • 在某些情況下,過期的資料還會存在,直到下一個 mongod 定期的刪除循環止。

設定
假設有一 Collection 名稱為 "forgetpwd",存活時間為 1800 秒,建立 TTL 索引時可以用以下設定:
db.forgetpwd.ensureIndex({'date': 1}, {expireAfterSeconds: 1800})
建立資料:
db.forgetpwd.save({'user': 'toomore', 'date': New Date()})
建立資料後,該筆資料就會以 date 欄位的時間 + 1800 秒後刪除。以上的範例可以實作在使用者忘記密碼的流程裡:使用者使用忘記密碼時,請求一個有時效的重新設定密碼連結,在限定時間內設定新密碼,否則取消請求連結

以上為 MongoDB TTL 的用法。