【閱後感】我們每個人的 Permanent Record
斯諾登現身說法親自撰寫的第一本書,萬眾期待之下約兩星期前出版了。我第一時間訂購,一口氣幾日之間讀完。坦白說,作點期望管理,不能說是大量爆料,或者是揭發了很多前所未知的秘密。看來作者的目的,是希望世人更加了解斯諾登是個什麼人,為什麼他成為揭密者,公開美國政府大規模監察人民網絡資訊的秘密。
這本書對我來說不難讀,一方面是因為斯諾登提及的技術內容,都是IT人非常熟悉的。另一方面是因為他形容至少接觸科技的過程和經驗,實在與我這一代人的經歷非常接近。由家中接觸第一部個人電腦至沉迷打機,學校成績不好,但電腦技術能力高,雖然缺乏學歷,仍然能在短短十年時間在情報機構擔任重要技術位置,但有是什麼驅使他成為揭密者呢?
斯諾登的父母都是在政府軍事和情報機構工作, 2001年911事件之後,他因為一腔愛國熱情,甚至參軍接受基本訓練,卻因傷未能成為軍人,但這卻造就了他走上了在情報機構擔任IT系統管理的事業之路。雖然號稱是合約員工,經常由一個外判商轉到另一個,但事實上他擁有極高的保安授權,基本上就是政府員工甚至等同前線特務,只不過身份是一個『合約IT狗』,他的情況令人覺得與香港的T合約IT員工相近。
美國政府在911事件之後,由小布殊總統開始利用情報機構收集大量社交媒體數據甚至元數據(metadata)。如果說是監察或監聽(surveillance)不好聽,就改叫作『大量蒐集』(bulk collection),即使本來有法例限制,但這些事既然是機密情報行動,只要政府不公開,外間根本沒有人有辦法證明。斯諾登特別指出,除了行政部門濫權,美國國會立法機關其實一直也在配合監控,不聞不問不知道,暗地裡放政府一馬,甚至連司法機構也一樣『合作』。當情報機構偶然真的向法庭申請手令進行監察的時候,法庭幾乎『自動波』地容許。這些都令我想起近期香港反佔中運動中警方濫權的狀況。
所以,斯諾登說當時經過十年大規模監察之後,科技使用上變成反恐的作用不足,剝削人民自由和私隱綽綽有餘。於是,他就有一個本來聽聽話話,即使雖然不喜歡一些規矩,但也不敢違抗命令的人,變成一個被指為『叛國賊』的揭密者。
但他能夠取得如此大量資料,其中原因之一,就是因為他在整個情報機構之中以管理權限來說是接近最低層,但作為系統管理sysadmin,可以接觸到的資料權限卻是最高。加上他細心地計劃如何把資料螞蟻般大量地蒐集,再精心將資料重重加密,才能成事。
2013年春天斯諾登來港匿藏,為什麼他選擇香港?他說,是因為香港擁有高度新聞自由和示威文化,還有不受過濾的互聯網,而且香港的自治和法治容許他不用太擔憂北京對他的干預或利用(兩制)。相反地這也令美國想來香港把他引渡,也會因為北京的影響力而相對困難(一國)。這些都是他之前在訪問中說過的,不過如果他今天才選擇出走的地方,恐怕香港逐漸流失的一國兩制和高度自治,已經不能給予他當年同樣的信心。
不過,如果讀者想從本書看到多些斯諾登在香港之後,以至他流放俄羅斯期間發生的事,恐怕就會失望了。因為書內對此着墨實在很少,部份原因可能因為詳情早已在衛報記者Glenn Greenwald的著作、Laura Poitras的紀錄片Citizenfour,甚至Oliver Stone的荷里活電影Snowden中出現過,相信很多細節當事人仍然不想透露。但他仍未忘向兩位香港的公民律師 Robert Tibbo和文浩正 Jonathan Man,以及秘密照顧他的難民家庭朋友致敬。
本書一個美中不足的地方,是只限集中於批判西方民主國家對監控人民的濫權。揭露這個問題固然極為重要,但在斯諾登揭密後這六年多之間,極權國家在監控人民,甚至應用於社會信用評分等系統的趨勢,更是發展迅速甚至驚人。對這些國家和人民面對的巨大威脅,作者就沒有作出討論。
斯諾登在書中說,「一個國家的自由程度,只能建基於對人民的權利的尊重。」然而,如果有些國家,根本不自由,根本不尊重人民的權利,那些國家的人民又怎辦?
#EdwardSnowden #PermanentRecord
#斯諾登 #揭密者 #香港 #hk
#光讀書 #書評 #讀書
metadata作用 在 Charles Mok 莫乃光 Facebook 的精選貼文
【閱後感】我們每個人的 Permanent Record
斯諾登現身說法親自撰寫的第一本書,萬眾期待之下約兩星期前出版了。我第一時間訂購,一口氣幾日之間讀完。坦白說,作點期望管理,不能說是大量爆料,或者是揭發了很多前所未知的秘密。看來作者的目的,是希望世人更加了解斯諾登是個什麼人,為什麼他成為揭密者,公開美國政府大規模監察人民網絡資訊的秘密。
這本書對我來說不難讀,一方面是因為斯諾登提及的技術內容,都是IT人非常熟悉的。另一方面是因為他形容至少接觸科技的過程和經驗,實在與我這一代人的經歷非常接近。由家中接觸第一部個人電腦至沉迷打機,學校成績不好,但電腦技術能力高,雖然缺乏學歷,仍然能在短短十年時間在情報機構擔任重要技術位置,但有是什麼驅使他成為揭密者呢?
斯諾登的父母都是在政府軍事和情報機構工作, 2001年911事件之後,他因為一腔愛國熱情,甚至參軍接受基本訓練,卻因傷未能成為軍人,但這卻造就了他走上了在情報機構擔任IT系統管理的事業之路。雖然號稱是合約員工,經常由一個外判商轉到另一個,但事實上他擁有極高的保安授權,基本上就是政府員工甚至等同前線特務,只不過身份是一個『合約IT狗』,他的情況令人覺得與香港的T合約IT員工相近。
美國政府在911事件之後,由小布殊總統開始利用情報機構收集大量社交媒體數據甚至元數據(metadata)。如果說是監察或監聽(surveillance)不好聽,就改叫作『大量蒐集』(bulk collection),即使本來有法例限制,但這些事既然是機密情報行動,只要政府不公開,外間根本沒有人有辦法證明。斯諾登特別指出,除了行政部門濫權,美國國會立法機關其實一直也在配合監控,不聞不問不知道,暗地裡放政府一馬,甚至連司法機構也一樣『合作』。當情報機構偶然真的向法庭申請手令進行監察的時候,法庭幾乎『自動波』地容許。這些都令我想起近期香港反佔中運動中警方濫權的狀況。
所以,斯諾登說當時經過十年大規模監察之後,科技使用上變成反恐的作用不足,剝削人民自由和私隱綽綽有餘。於是,他就有一個本來聽聽話話,即使雖然不喜歡一些規矩,但也不敢違抗命令的人,變成一個被指為『叛國賊』的揭密者。
但他能夠取得如此大量資料,其中原因之一,就是因為他在整個情報機構之中以管理權限來說是接近最低層,但作為系統管理sysadmin,可以接觸到的資料權限卻是最高。加上他細心地計劃如何把資料螞蟻般大量地蒐集,再精心將資料重重加密,才能成事。
2013年春天斯諾登來港匿藏,為什麼他選擇香港?他說,是因為香港擁有高度新聞自由和示威文化,還有不受過濾的互聯網,而且香港的自治和法治容許他不用太擔憂北京對他的干預或利用(兩制)。相反地這也令美國想來香港把他引渡,也會因為北京的影響力而相對困難(一國)。這些都是他之前在訪問中說過的,不過如果他今天才選擇出走的地方,恐怕香港逐漸流失的一國兩制和高度自治,已經不能給予他當年同樣的信心。
不過,如果讀者想從本書看到多些斯諾登在香港之後,以至他流放俄羅斯期間發生的事,恐怕就會失望了。因為書內對此着墨實在很少,部份原因可能因為詳情早已在衛報記者Glenn Greenwald的著作、Laura Poitras的紀錄片Citizenfour,甚至Oliver Stone的荷里活電影Snowden中出現過,相信很多細節當事人仍然不想透露。但他仍未忘向兩位香港的公民律師 Robert Tibbo和文浩正 Jonathan Man,以及秘密照顧他的難民家庭朋友致敬。
本書一個美中不足的地方,是只限集中於批判西方民主國家對監控人民的濫權。揭露這個問題固然極為重要,但在斯諾登揭密後這六年多之間,極權國家在監控人民,甚至應用於社會信用評分等系統的趨勢,更是發展迅速甚至驚人。對這些國家和人民面對的巨大威脅,作者就沒有作出討論。
斯諾登在書中說,「一個國家的自由程度,只能建基於對人民的權利的尊重。」然而,如果有些國家,根本不自由,根本不尊重人民的權利,那些國家的人民又怎辦?
#EdwardSnowden #PermanentRecord
#斯諾登 #揭密者 #香港 #hk
#光讀書 #書評 #讀書
metadata作用 在 Kewang 的資訊進化論 Facebook 的最讚貼文
前一篇 (https://www.facebook.com/kewang.information/posts/2241503749459320) 提到了 Autocomplete 的實作方式,但仍然有許多可以調整的地方,像是如何加大 throughput、帶額外資料...等,下面就來分享一下小編的作法。
---
## 1. 減少傳輸量
因為 Autocomplete 的操作行為是使用者每打一個字,就要傳給 server,server 再回傳使用者一些 candidate。所以減少傳輸量是最先要處理的事情,要不然資料量太大傳輸慢會影響前端使用體驗。最簡單的作法就是改變原本回傳的 JSON 格式,如下所示:
### 調整前
[
{"id": 123, "candidate": "taipei"},
{"id": 456, "candidate": "taiwan"},
{"id": 789, "candidate": "tall"}
]
### 調整後
["123%taipei","456%taiwan","789%tall"]
前端拿到資料後自己再用 split 的方式分割字串,實測下來大概可以減少 40% 的資料量。
---
## 2. 減少傳輸量
沒錯!第二點也是減少傳輸量,將準備要回傳的資料用 gzip 壓縮後再回傳。
以 expressjs 本身建議的 compression 套件來說,實測下來發揮不了什麼作用。因為 compression 套件預設為資料量大於 1kb 才會做壓縮,而目前的資料已經是小於 1kb 了,所以沒做任何壓縮就直接回傳。
另外還發現加了 compression 套件之後,以目前開的 heroku 機器來說,回應時間會加上 5-10ms 左右。不過現在服務還沒上線,沒有使用量都不準,等上線之後再來觀察看看好了。
---
## 3. 減少使用者打 server 的次數
前端可以在輸入一個字元的時候不要送 request 給 server,因為經驗法則,使用者應該至少會打兩個字元之後,Autocomplete 回應給使用者 candidate,這樣對 UX 上應該會比較好吧 (小編不專業分析 XD)。不止可以降低 server 的 loading,也可以減少存入 Redis 的資料量。
但這會牽涉到 CJK 與 non-CJK 的處理方式,這就還要再看看如何處理比較好。
---
## 4. 減少使用者打 server 的次數
沒錯!又是減少次數。client 可以在 server 回傳資料的時候,將資料暫存在 client 的記憶體內。因為常會有輸入相同文字的時候,這時就可以直接從 client 的記憶體取出資料,就不用打到 server 了。
但這個使用方式比較不好處理,需視情境而定。若是 Redis 的資料常常在變動,那這個方式會造成取不回最新的資料。或許可以在 client 放個 LRU cache 來做處理。
---
## 5. 減少使用者打 server 的次數
又是我 XDDD!這次是要 server 幫忙,當 client 重複輸入相同 keyword 時,client 會帶 If-None-Match 的 header 給 server,server 會檢查這串值是否已經有打過了,如果打過就回 client 304,表示資料沒變動,可以直接用 client 本身的資料。
這在之前的 JCConf 有分享 (https://www.facebook.com/kewang.information/posts/2192127034396992) 過,大家可以回去翻一下。
---
## 6. 減少 Redis 的資料量
西方國家所用的拉丁字母除了大家常用的 26 個英文字母外,也常會有一些包括重音之類的字母。像是 a 及 á 之類的,這個在搜尋的時候不會太影響,JavaScript 可以利用 String.normalize('NFD') 把 á 轉換成 aˊ,最後再將 ˊ 取代為空字串 (https://stackoverflow.com/a/37511463/939212),Redis 裡面只要存 a 就好,這樣可以節省不少資料量。
當然還有將大寫轉為小寫、trim 掉頭尾空白這幾種做法,也都可以省下不少資料量。
至於 CJK 的話,再說吧 XDDD
---
## 7. 存入 metadata
如果這個 Autocomplete 只是單純選擇 candidate 之後做搜尋,那可以不用存 metadata 進去。但有些功能其實是要把 candidate 回傳給 client 時,也帶一些 metadata 給 client 做其他運用,最常見的應該就是帶 id 這類 metadata 了。
最簡單的作法就是在存入 candidate 的時候,直接把要存的 metadata 帶在字尾,如下所示:
1. t
2. ta
3. tai
4. taiw
5. taiwa
6. taiwan
7. taiwan*123
把 123 放在 taiwan 後面,在取出 candidate 的時候再利用 split 的方式把 taiwan 跟 123 分別取出就可以了。
---
總結上面的幾種方式,目前小編這裡用到了 1, 2, 5, 6, 7 共五種,效果還不錯,就等上線再來看看實戰結果囉。
#funliday #autocomplete #redis #javascript #nodejs