Plurk 訊息取得時間分布 – 20111215

我在噗浪寫了幾隻機器人,其中有兩隻好友都超過 20 萬個,機器人有個特性很重要,就是必須要拿到好友的訊息,才會有所回應。

最近一個多月以來,機器人回應噗的狀況非常差,較前月以及去年同期掉了接近三成!

有以下幾個可能:

  1. 回應數暴跌是因為噗浪正在走下坡,使用者漸漸變少了,沒那麼多訊息,自然也就沒那麼多回應。換言之,,十一月份是噗浪的死亡交叉
  2. 回應數暴跌是因為機器人已經不好玩了,所以漸漸沒人在玩。
  3. 回應數暴跌是因為噗浪在同步使用者發表的訊息這一塊,效率真的不是很好,導致訊息同步的效率很差。

前兩點不是很確定,但其中以第三點的狀況有跡可循:

小籤籤分佈 小歌手分佈
機器人1取得訊息時間差統計 機器人2取得訊息時間差統計

上面這兩張圖,的解釋如下:

圖中數字的 0 代表透過 RealTime API 取得,其餘部分則是使用 Polling API 加上時間差參數 (Time Offset) 取得未讀訊息的數量分佈,而 30, 60, 90, 150, 240 則是我先設定好的時間差參數 (Time Offset) 。

理想的狀況是我所有訊息都可以透過 RealTime API 取得,但實際上的分佈,我只能取得六成的即時訊息,其他還是要靠 Polling API 來拿。

圖中數字 30, 60, 90, 150, 240 的意義可以粗略解讀如下:以 240 為例子,當使用者在 1:00:00 發表了一則訊息,程式要等到 1:04:00 (差了 240 秒) 才能拿到使用者發的那則訊息。

然後機器人不會使用 Polling API 拿取時間差參數 (Time Offset) 超過 240 秒的訊息,一方面是要降低 Plurk 那邊伺服器的負擔,另一方面是訊息的時效性已經沒那麼強。

基於以上的跡證,關於機器人沒有回應的問題,其實也沒什麼好方法來解決 (因為機器人根本就拿不到使用者的訊息,自然就無法回應)。

所以,還請機器人使用者多多包涵…抱歉了。

手機差點不見…懺悔中

我的手機是 HTC Desire 已經用了一年多,平常都會小心收好,但就在今天傍晚大概六點左右,我突然發現我的手機不見了,四處都找不到,口袋也沒有…

雖然我一直都對我的 Desire 不是很滿意,可是我目前還沒有和它分開的打算阿阿阿!

抱著死馬當活馬醫的心情,我打了我自己的電話,希望電話那頭可以有人接起。

第一次打電話,沒人接聽…

第二次打電話,依然沒人接聽…

就在我要死心的時候 ,突然我的電話響了(我的市內電話) 。看了看來電顯示,原來是樓上的收發室打來的。我心想,該不會是有人撿到我的電話,然後送到收發室吧?

我忐忑不安地接起了電話,電話那端傳來收發室的小姐的聲音:「你說是不是掉了手機?」

呼,我心中終於放下一顆大石頭,不用花錢買新手機了 Q_Q

還好是在公司裡面掉的,謝謝幫我把手機送到收發室的無名英雄,雖然我不曉得你是誰,但我打從心底謝謝你的好心,讓我不致於因為我自己的粗心大意而付出代價。

以後我會認真保管好手機的!

Plurk 訊息取得時間分布

這是一隻我寫的 Plurk 機器人(註一) 在不同時間差的情況下個別抓的「待回應訊息」 (註二) 分布狀況。

目前共有七隻 fetcher ,第一隻 fetcher 使用 Plurk Real Time Channel API ,其餘六隻 fetcher 使用 Plurk Polling API 並且以延遲 10s, 30s, 60s, 90s, 180s, 240s 的時間差 (offset) 來抓取訊息,圖表的縱軸代表「待回應的訊息」數目,橫軸則是時間差。整個圖表趨勢如果越往左靠,則表示 Plurk 系統對訊息同步的即時性越好,如果越往右靠,表示 Plurk 系統在訊息同步上花的時間越多。

之前在抓取訊息時,我都只抓取一分鐘之內訊息,過期的都不抓,但這樣也造成不少人說機器人沒有回應 (沒回應表示一分鐘內機器人沒抓到使用者發的訊息),以上圖來看,就是以前至少有 30% 的「待回應訊息」我漏抓了。

這種情況下,唯一的解決方法大概就是把時間差 (offset) 再加大。但其實這麼做的幫助很有限,因為使用者通常會因為等太久而自行砍掉沒有回應的訊息,然後機器人這邊則是會因此發生 (plurk not found) 的錯誤。

目前透過 Real Time Channel API 拿到的只佔 34% 左右,有 30% 是 offset 在 10s – 60s 之間拿到,而剩下 35% 則是超過 90s 才拿到。

備註:

  • 這隻機器人的架構設計分為 fetcher 和 replier ,可各別決定要跑幾個 process 起來,目前機器人有 26.8 萬個好友,現在實際狀況是跑七隻 fetcher 和一隻 replier 。
  • 「待回應的訊息」就是拿到的訊息中含有觸發機器人的關鍵字,其餘則為「不回應的訊息」 ,我會記錄每則回應的訊息,並以 fetch_offset 欄位代表是在哪個時間區間的 fetcher 抓到的,統計回應時間差的 SQL 如下

最近機器人的回應狀況不甚理想,我會再觀察一至兩週之後再 update 一下。

shell script 備份 www 目錄

因為上次把自己 VM 不小心刪掉又救回來的那件事情,所以開始著手計畫備份所有資料。

這隻是我寫的 Shell Script,每次執行都會把 $WWW_DIR 下面的所有目錄個別壓縮成 tgz 檔案,並且把 *.tgz 搬移到 $BACKUP_DIR 下面,然後刪掉 $BACKUP_DIR 目錄下大於一個月的備份。

目前我是放到 cron table 裡面跑,每三天會跑一次。

如果不想要輸出訊息,就在 crontab 裡面把輸出導向到 /dev/null 即可。

Install Squid 3 Server and Add Password Authentication

首先安裝 Squid 3

apt-get install squid3

把原本的 /etc/squid3/squid.conf 備份後,建立下面這個檔案


http_port 3128

auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/.passwd
auth_param basic children 1
auth_param basic credentialsttl 1 minute
auth_param basic casesensitive off

acl auth proxy_auth REQUIRED
acl localhost src 127.0.0.0/8

http_access allow auth
# 透過密碼認證
http_access allow localhost
# 本地端不用認證
http_access deny all
# 其他來源都不行

cache deny all

forwarded_for delete
request_header_access Via deny all

建立一個使用這帳戶,以供 proxy 認證使用

htpasswd -c /etc/squid3/.passwd {user_name}

重起 suqid3 即可

/etc/init.d/squid3 restart

我怎麼排列組合,都想不出為什麼蘇嘉全要捐農舍

馬政府執政這幾年下來,對於台北市飆漲的房價一點辦法也沒有,普通上班族工作一輩子也買不起房子,讓我早就有換人做做看的念頭。(現在台北市房價應該是…回不去了)

雖然明年才總統大選,不過最近選戰早已打得激烈,前陣子民進黨副總統參選人蘇嘉全被爆在屏東有豪華農舍一棟,四周有圍籬,儼如私人皇宮。但這件事情在我看來其實一點也沒什麼關係,畢竟如果我有錢,我也想要回鄉蓋棟房子來住,而且有錢蓋房子也不是什麼錯。不偷不搶,說實在的,到底有什麼問題?難道國家領導人就一定要家徒四壁嗎?別忘了,台灣人民選出來的三級貧戶之子(夠家徒四壁了吧),最後還不是進去蹲了。

所以治國能力才是重點,不要貪汙搞意識型態才是全民之福。誰的農舍有幾棟?說真的,我真的一點也不在意。

不過今天又爆了一個新聞:蘇嘉全宣布捐農舍 公布全家人財產

我心中的失望真的是….馬的,爛透了!

我怎麼排列組合,都想不出蘇嘉全要捐農舍是哪一招?

這件事情說穿了就是「為了選上副總統」所以「自己蓋的房子不要了」這樣的因果關係。

想一想,這樣不恐怖嗎?

副總統,到底是可以得到怎麼樣的一個利益?

目前有幾種可能性,由於蘇嘉全已經宣布捐出,所以就略過「持有農舍」的條件:

選上副總統 – 持有農舍 (這是最理想的狀況)
沒選上副總統 – 持有農舍 (至少財產上沒損失)

選上副總統(捐出農舍)

  • 當副總統是為了人民福利 – 蘇嘉全就算家徒四壁也要服務人民
  • 當副總統是為了自已利益 – 捐了農舍當投資,反正可以賺回來

沒選上副總統(捐出農舍)

  • 農舍對蘇嘉全來說是九牛一毛 – 所以捐出一棟也不算什麼
  • 農舍對蘇嘉全來說是重要的財產 – 但拼著賠了夫人又折兵的風險還是要賭副總統這個職位

還有其他排列組合嗎?我怎麼想都怎麼失望。

壓縮 vmdk 檔案

我的 BBS 是用 VMWare Player 在跑的。當初規劃的硬碟上限是 240GB ,而實際虛擬機器映像檔的大小大約在 60GB ,但在機器裡面看,卻只有使用 5.7 GB 而已。

roga@proxy:~$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda1             240G  5.7G  235G   3% /
tmpfs                 502M     0  502M   0% /lib/init/rw
udev                   10M  692K  9.4M   7% /dev
tmpfs                 502M     0  502M   0% /dev/shm
roga@proxy:~$ 

69GB 這麼大的映像檔,要備份和搬移都不是很容易,所以勢必要壓縮 (compact) 以節省 HOST 的磁碟空間,方法如下:

1. 先刪掉 Guest OS 裡面不要的檔案,包括垃圾桶也要清掉,然後 apt-get clean 也可以執行。
2. 接著在 Guest OS 裡面執行 cat /dev/zero > zero.fill; sync; sleep 1; sync; rm -f zero.fill 由於會跑很久,可以掛著 screen 放著。
3. 用 VMWare Player 本身提供的 GUI 工具對映像檔進行壓縮。

p.s 在虛擬機器的設定中,選好要壓縮的硬碟,然後選 Utilities > Compact 即可。

壓縮完畢之後,原本大約 60GB 的 vmdk 映像檔,只剩下 9.7 GB 。

來源:How To Shrink VMware Virtual Disk Files (.vmdk)

VirtualBox 存取 usb 子系統時失敗

在 Debian Squeeze 上面裝了 VirtualBox ,然後把舊的虛擬機器移過去,發現出現 VirtaulBox 存取子系統時失敗的錯誤。

錯誤訊息:

Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND). The service might be not installed on the host computer.
VirtualBox 存取 usb 子系統時失敗

然後原因是執行 VirtualBox 的使用者沒有加入到 vboxusers 這個群組裡面,只要多加進去就可以了。

來源:All about USB related Questions.

您的登入鑰匙圈並未在登入時自動解鎖

剛剛裝好 Debian Squeeze ,發現啟動 Gnome 預設的遠端桌面 (VINO) 之後,在使用者連線進來時,會出現:「您的登入鑰匙圈並未在登入時自動解鎖」並且再詢問一次密碼,當輸入密碼給 keyring 記住後,重新開機卻又失效了,上網找了一下,發現有不少人遇到類似問題…

解決方法如下:

1. 先打開鑰匙圈:

系統 -> 偏好設定 -> 密碼及加密金鑰
System-> Preferences ->Passwords and Encryption Keys

2. 刪掉已存密碼:

找到 Passwords: Login 展開後裡面的 vino:5900 (類似的東西) ,然後刪掉該筆密碼之後關閉程式

3. 再輸入指令 gconf-editor 開啟 gnome 的組態編輯器,

在組態裡面找到 /desktop/gnome/remote_access 這筆記錄
然後把以後要登入 VNC 的密碼用 base64 編碼過後,存到 vnc_password 欄位裡面
當然也要確定 enabled 有啟用以及其他欄位有設定好 (組態編輯器對每個欄位都有說明作用)

再來關掉組態編輯器,然後重新啟動系統就可以了。

來源:Re: Login Kerying issues with Remote Desktop