搜索
Table_bottom

标签云
Table_bottom

分类
Table_bottom

声明
文章若未特別註明,皆採用 知识共享许可协议 請自覺遵守
Table_bottom

存档
Table_bottom

匆匆过客
28871
Table_bottom

功能
Table_bottom

三角形具有穩定性

作於2017.1.23

 

人們在總結許多事情的時候,出於並不知道什麼原因,得到的結論經常可以表示成金字塔結構,於是也可以叫三角形。例如……以及社會階級。

由於社會和每個人息息相關,所以關於社會階級的劃分可謂是各個三角形中被談論最多的。然而好玩的是,當談及“爲什麼會產生不同社會階級,最終形成三角形狀”時,許多人的“理由”是:“因爲三角形具有穩定性。”

“三角形具有穩定性”是小學所學的一句話,其所指的是在各種平面圖形中,只有三角形不會變形。我還記得當時用幾根棒子組成骨架(圖形的邊),互相之間在兩頭嵌合(圖形的頂點),然後嘗試各種圖形,只有三角形立起來不會塌下去。

然而這只是平面圖形的結構骨架本身的一種特性,甚至和圖形所圈出的那個平面都沒有什麼關係;那些描述成金字塔結構的理論中所應用的,卻恰恰是三角形中按相應劃分法所得到的各個部分的面積關係,和骨架並沒有什麼關係。所以我始終無法想明白爲什麼總會有人用這樣的說法來“解釋”那些理論。一開始也許是一個人懶了一下不動腦子,然而那些傳播的人卻居然信以爲真而廣加分派。

 

其實我們生活中有不少地方都被這種似是而非的理論佔據,例如我最喜歡說的簡化字問題、傳統服飾問題、中醫和現代醫學腦殘粉之爭以及唯科學理論論者(或者叫“科學教徒”)的問題——其中一些由於教育中的不斷灌輸已經較爲沉寂,另一些依然活躍。仔細想想,總有許多並不能證明有因果而只是有時間先後順序的事被人們強加上因果,從而變成“真理”流傳——做出假設當然可以,可假設需要論證啊。

這種事情和國別無關,然而這究竟是人本身的特性還是教育仍然不夠好導致的,卻無法確認。前一段和一英國兄台偶然談到英國教育是怎麼說中國、蘇聯乃至共產主義的,他說他們所接收的信息總結下來就是:共產主義=蘇聯當年的狀況=壞東西;資本主義(以及自由市場)=好東西而且其是世界上最好的制度——由於蘇聯解體了而美國沒有解體;凡是說資本主義不好則統統是共產主義者(二者只能二選一)。在這點上我表示慶幸——慶幸我們的教育中引入了《資本論》的理論以及大量事件,從而告訴我們至少在馬克思的理論中資本主義並不是最終形態/理想社會,使得我們可以思考究竟誰說得更合理。但同時我也在思考,我所受的教育、我所接觸的觀點中究竟有多少是這樣,這樣不完整而又似是而非的?

至少我想明白一點:用貼標籤的方法對人進行分類,並且將某個人的特質直接等同於自己所以爲的那一類人的特質,這種方式非常容易導致錯誤的認知。貼標籤可以方便認知,但也可以干擾認知。

不過這個問題太大,所以並沒有辦法詳細追究。不過至少我認識到了,那麼這一認識可以爲我日後起幫助,這就足夠了——如同王陽明所說的,知行本乃一物。

或許是我們有主觀意識的原因,我們需要說服的只是自己,所以並不一定要追求真相;然而也恰恰因爲我們有主觀意識,所以我們認識到了主觀的侷限性,從而我們追求真相以便減少主觀帶來的危害。

Arch下XPS 13 9343的触摸板多指动作

昨天偶然意識到需要經常“後退”和“前進”,而又懶得用兩隻手去按鍵盤快捷鍵,於是想到觸摸板多指動作。

我的鼠標是羅技的M345,滾輪可以向左右傾斜而觸發後退和前進動作,而且不需要額外設置就可以用,於是感覺應該是有專門的通用事件來處理它,故而試圖尋找觸摸板觸發該事件的方法。

 

由於觸摸板雙指滾動已被佔用,而且知道自己觸摸板可以識別三指(點按),於是鎖定目標在三指滑動。然而synaptics驅動中似乎並沒有該功能,故而前去尋找,終於找到mtrack

該倉庫原本由BlueDragonX維護,後來擱置,於是p2rkw接手並且在持續維護。

 

AUR中有該包(xf86-input-mtrack-git指向的是p2rkw維護的),直接裝之(和xf86-input-synaptics衝突,pacman會提示卸載)。安裝後會自己放置配置文件到/usr/share/X11/xorg.conf.d/10-mtrack.conf,理論上應該可以自動切換觸摸板所用“驅動”(InputClass配置的Driver項)到其上。

然而我之前手動設置了觸摸板的一些配置(在/etc/X11/xorg.conf.d/下),所以還需要改該文件。不過在修改配置之前,首先要確認mtrack到底啓用了沒有,所以我就把我的配置文件中Driver項從synaptics改成了mtrack。

xf86-input-mtrack-git的安裝腳本會提示“可能需要把自己加到input組中”——貌似由於X不再以root運行,所以需要讓自己在input組中以便mtrack可以正確配置觸摸板。

由於X只有在啓動時會讀取配置文件,所以只好忍痛將所有程序都關掉然後重啓X。然而啓動後發現無論用xev怎麼測,三指的動作死活無法觸發(默認配置中,三指上下左右分別對應按鍵8、9、10、11)。於是懷疑是不是mtrack根本沒有啓用。而由於xf86-input-libinput現在被xorg-server依賴,所以沒辦法從源頭上排除(刪掉所有其他和觸摸板相關的東西,如果觸摸板還能工作,說明mtrack在處理它)。故而前去查詢X的日誌(用DM來管理的話在/var/log/Xorg.0.log,startx的話在$HOME/.local/share/xorg/Xorg.0.log),發現mtrack被載入了,然而有這麼幾句:

[     4.741] (EE) mtrack: cannot configure device
[     4.741] (EE) Couldn't init device "我的觸摸板名稱"
[     4.741] (II) UnloadModule: "mtrack"
搜索了很久,然而始終沒有找到對我有用的信息(都是macbook云云)。而網上一些人說道即使有cannot configure device這句,mtrack的配置依然會生效(然而他們及其後的人也說過只要把用戶加到input組中就不會再有這個消息了,可是我這還是有)。後來偶然重新去看日誌,發現上面還有
[     4.741] (WW) Touchpad has minimal capabilities. Some features will be unavailable.
然而也沒有什麼有效信息,只是讓我確認了我的觸摸板功能不夠全……於是繼續搜索了一大圈,最後意識到好像是閾值設置得太高了(SwipeDistance默認是700)……另外,所有有效的“Option”都會打出到日誌中。
 
最後在把閾值設置低一些(我設置的220)以後,通過xev成功監聽到了三指動作的觸發……(然而四指的無論如何都無法觸發,不知是硬件問題還是什麼)
它的配置文件中Scroll*代表雙指划動動作,Swipe*代表三指划動動作,Swipe4*代表四指划動動作;另外還有似乎並沒有通用行爲只是觸發按鍵的:Scale*代表的雙指縮放、Rotate*代表的雙指旋轉。
 
再然後就是配置它以使得符合我的需求。我需要的是左右划動觸發後退和前進,而上下暫時沒有需求。於是通過xev監聽我鼠標滾輪左右的事件,發現是按鈕8和9,而mtrack默認配置和我的需求不同,於是在配置文件中修改之。爲了保留原有的並不知道有什麼用的按鍵10和11,故而選擇交換上下和左右的動作。最終這部分是這樣的:
        Option "SwipeDistance" "220"
        Option "SwipeClickTime" "120"
        Option "SwipeSensitivity" "0"
        Option "SwipeUpButton" "10"
        Option "SwipeDownButton" "11"
        Option "SwipeLeftButton" "8"
        Option "SwipeRightButton" "9"

 

然而在改完了之後,忽然發現xf86-input-mtrack倉庫中的example有(且僅有)XPS 9333的配置文件……雖然是前代,但很多地方還是很有參考借鑑意義的……於是最終將它的配置文件抄過來稍加修改……

 

不過話說回來,example中有許多我是看不懂的(畢竟對X的配置理解不深刻),尤其是那堆重複寫Swipe和Swipe4動作的部分。哪位理解的話希望可以指點一下。

 

另外還見到了兩個其他相關軟件,然而我都沒有試:一個叫touchegg的似乎是截獲觸摸板動作然後改轉發其他動作的軟件;另一個叫easystroke的似乎是手勢識別軟件。

直覺上的Hobbs算法

註:文中“(即……)”形式的內容爲輔助理解本質的內容,並非算法內容。

算法分成幾個按順序的部分,每部分如果匹配上,則直接返回,否則往下走。“匹配”的標準爲:agreement等正確,同時滿足當前部分的要求。

整體邏輯/基本想法

算法可大體分爲三個部分:

  1. 在當前句子中尋找(過程較爲複雜,後面詳細說明)
    1. 在目標節點左側進行尋找
    2. 找完還沒找到則在右側進行尋找,但不進入NP和S節點
  2. (如果找不到或沒有合適的)在前面的句子中尋找(如果找不到則繼續向前直到找到爲止)
    • 過程十分簡單:以從左向右、寬度優先爲原則遍歷子樹,尋找匹配的NP

算法過程

算法初始化:從目標代詞(記爲T)所在的NP節點(記爲“當前節點”和/或“X”)開始(即NP->Pron規則中的NP)。

算法唯一循環:

  1. 尋找X之上最近的NP或S節點作爲當前節點,替換原先的X。
  2. 以從左向右、寬度優先爲原則,尋找當前節點X的子樹中(同時在T到X路徑左側)第一個匹配的NP
  3. 若X是S,則看前一個句子的語法樹(見上面)。(只有兩種情況會滿足該要求:
    1. T是句子中(從左往右數)第一個NP(即該句子爲以目標代詞爲主語的句子,或是以目標代詞爲賓語的祈使句等),則首次進入則會遇到該規則
    2. 循環回來遇到S(即尋找完當前句子而沒有找到相匹配的NP)
  4. 尋找X之上最近的NP或S節點作爲當前節點,替換原先的X。
  5. 如果X是NP,而且從T到X的路徑中沒有經過Nominal節點(即T並非X這個NP的定語),則試圖匹配X
  6. 以從左向右、寬度優先爲原則,尋找當前節點X的子樹中(同時在T到X路徑左側)第一個匹配的NP
  7. 如果X是S(即左側已找完),則尋找T到S路徑右側的所有子樹中尋找相匹配的NP。此時如果遇到NP和S,不進入其子樹。
  8. (若如果仍未匹配上)回到3

 

(最近在爲NLP的(高速入門)課準備考試,於是也在看J&M的Speech and Language Processing。其中關於Hobbs的描述看得很頭痛,於是dump一下自己的理解。)

從何而來的安全

先說引子:

某日在fuubo中轉發微博,提示出錯。反復多次,皆是如此,於是上網頁版的排查。然而打開之後提示“系统检测到您的微博帐号近期存在异常,已锁定部分功能。为保障帐号安全,请立即修改密码。”如圖:

我心想:應該是因爲我在新移動設備的網頁端登錄微博,並且轉發了一個,所以說我有安全風險。那麼既然這樣,就改吧。

然後點擊了修改密碼,然而跳轉到的頁面並不是修改密碼的頁面,而是:https://security.weibo.com/rmabnormal/verifyadd

WTF!

先觀察網址:這是一個通用的頁面,而不是和我賬號直接相關的頁面。(而且其路徑也昭示了其作用。)

然後,看其中的文辭:“请填写一个有效的手机号用于验证您的身份”。

什麼叫“有效的手機號”?由上一個步驟我們知道這並不是我賬號相關的頁面,所以說並不是新浪數據庫中存儲的和我賬號相關的某個手機號。退一步說,即使這個步驟是想要依靠手機號來索引(查明)賬號,那麼也是不可能的。爲什麼?因爲我從來都沒有給新浪過我的任何手機號!我的新浪微博是使用新浪郵箱註冊的,新浪郵箱的安全通知機制是安全郵箱而並不是手機;而除了微博中公開的信息以外,我沒有在其中增加任何和我個人隱私相關的信息。

綜合下來,這個“有效的手機號”只能有一個解釋:任何人的手機號!

重新看看標題和副標題:“解除帐号异常——您的帐号存在安全风险,请按照如下流程解除异常”。莫大的諷刺:我的賬號有安全風險於是受到限制,而解除該限制的方法是使用任何一個人的手機號。換句話說:任何人都可以用這個頁面填寫手機號,然後通過驗證!

所以這究竟是爲了我賬號更安全,還是不在乎我賬號的安全?

 

這只是某風氣的一個體現而已,其所反映的是網絡上很多企業/公司在推行的一種方案:收集用戶手機號。名義上,這些公司收集用戶手機號號稱是“爲了用戶賬號安全着想”。然而是否有人想過,該做法保證的是什麼安全呢?

首先通過觀察我們可以發現,獲得用戶手機號之後,服務提供方所採取的方案分爲三種:1、在登錄時就要求手機獲取驗證碼,不正確則無法登錄(或者說兩步驗證);2、在異常時給用戶發送通知;3、在某些特定情況下(如用戶想要修改密碼時)發送驗證碼用以鑑別身份。

當然,還有第四種:只收集手機號,之後什麼功能都不提供。不過由於這種情況顯然並沒有提高安全性,所以就不討論了。

網絡賬戶涉及到的可能不安全之處有這些:1、服務提供者本身泄密;2、用戶將密碼告知並不足夠可信的他人;3、用戶在不可信之處填寫自己的賬號密碼;4、用戶所用設備有惡意軟件;5、用戶密碼過弱導致被暴力破解;6、通信鏈路中數據明文傳輸且受到截獲。

其中第一點要看服務提供方自己的能力以及素質,這點我們作爲用戶只有兩個選擇:1、相信提供商;2、不使用其服務。而受制於很多因素,一些服務我們不得不使用(如教育部將某些學生必需的服務交與一些第三方企業提供),這種情況下我們就沒有選擇了。對於這種,一個手機號(無論採取哪種方案)無能爲力。

第二點其核心問題在於用戶本身:爲什麼要將密碼告知於一個不可信的人?互聯網上的例子可能感覺不明顯,我來舉個生活中的例子:我們應該經常見到新聞中報導某人受某些因素影響(謊稱中獎、公安等)將自己銀行卡中的資金轉到騙子處。對於這種情況,即使加入手機驗證(無論1/2/3)這一步驟,用戶依然會將驗證碼交給那個人,並不能保證安全。

第三點涉及兩方:1、用戶;2、盜取信息的網站。(順便一提:在我看來,在這種途徑中用戶泄漏賬號密碼,用戶的責任至少有一半。)在用戶這邊,所看到的是一個(無論是否貌似正常的)登錄區域,於是信手將賬號密碼填入;在網站那邊,它可以獲得所有人輸入的賬號密碼,不論是否正確。看起來這時候方案1可以有效解決問題——驗證碼是一次性的,即使對方獲取到了你的賬號密碼,沒有驗證碼也無法登錄你的賬戶。然而這種想法中有一個重大漏洞:假站點如果也要求輸入驗證碼呢?假站點可以通過你給它的真實驗證碼登錄你的賬戶,然後做出一些動作(例如給其他人發消息騙取錢財之類)。而方案2對此束手無策,最多只能事後告知,之後用戶去避免損失擴大(然而需要用戶“主動”,這種“主動”對許多用戶來說是堅決不可接受的);方案3面臨的問題和1類似,甚至還不如1的效果——直到修改密碼前都可以隨意登錄。服務商要求手機在這點中起到的唯一作用(而且需要方案1)就是:提高騙子行騙的技術門檻。

第四點中惡意軟件不包含虛假登錄框(因爲這樣和第三點就一樣了),而是指那些可能竊取用戶賬號密碼的軟件。這樣的話,方案1確實可以有效解決問題(參考第三點中的分析);而方案2/3則只能事後補救,且一些用戶堅決不願意如此做。

第五點則是(無論國內國外)許多人很容易犯的一種錯誤,而且這些人無論其他人怎麼呼籲,他們都不願意去修改自己的做法,於是導致這麼多年過去依舊大有人在。在該問題中,方案1可以有效解決;方案2/3只能事後補救。(然而如果用戶不願意爲自己的賬戶安全着想而設置較複雜的密碼,那麼爲何還依然要他設置靜態密碼而不直接完全使用動態密碼呢?)

第六點問題關鍵不在用戶,而在服務提供商——明知網絡鏈路不安全,仍然明文傳輸緊要信息。(而這樣不負責人的服務商,如何能讓人相信他會爲用戶的隱私負責?如何放心將手機號交與他?)是的,方案1對此有作用,然而依靠這種方案來掩蓋自己提供服務本身的不安全實在是令人不齒,也令人心驚。方案2/3無用,無須多議。

 

綜上:方案2和方案3對於防止非法獲得賬號信息沒有幫助;方案1在3/6的情況下可以解決該安全問題。而在方案1起作用的事件中,第六點並不是應該放任不管事情,所以該狀況不應當作爲增加手機可以防止賬號信息泄漏的支持,所以實際上只有2/5的情況下可以解決問題。而第四點隨着時代(技術)發展越來越少,早已不復當年之多;第五點所涉及的那些人,指望他們意識到安全問題實在是天方夜譚,其爲了安全而主動增加手機兩步驗證也實在是難以想像的事情。所以說是2/5的情況,其實際效果遠遠比狀況比例要低。

這就完了麼?並不是。我們可以注意到:第四點談論的是惡意軟件的問題,也就是病毒、木馬等東西的問題。一個正常的計算機(是的我已經限定到windows上了)上是沒有這些惡意軟件的,而惡意軟件(在windows vista以後)在用戶合理使用計算機的情況下(保持UAC的默認開啓,不下載不受信軟件,不允許非主動開啓的軟件通過UAC權限請求)是很難存在的。我無意在這指責這些人——因爲指責也沒用——而是想到了另一個問題:他們的智能手機也可以(而且是非常可能)感染惡意軟件!是的,我們到這之前討論的都是電腦的情況,而從來沒有考慮過手機假如不安全會如何!於是我們可以想象這種情況:一個人的手機上有一個可以讀取手機號碼、讀取短信(或是僅僅接收新短信)、連接網絡、開機啓動的惡意軟件(只要這四個權限即可),而同樣是這個人在自以爲安全的情況下放心大膽地在某個地方填寫了自己的賬號密碼,而恰好這兩處惡意都是來自同一方(某甲)!於是乎,這個人的賬號密碼被某甲知道了,而且他每次收到的驗證碼某甲也都知道,於是他的賬號安全在似乎是十分安全的情況下片甲不存。

也許有人會問了:“智能手機上惡意軟件哪那麼容易感染?軟件都是系統進行調控的,有沒有都是可以看出來的。”是的軟件是系統調控的,但是你去檢查一下,看看有多少軟件一次性要許許多多權限(手機識別碼、短信、網絡、自啓動只是基礎,相當多的國產軟件都是幾乎要了一切權限)?它們有的是“大公司”產品,有的只是不明作坊的產品,而其核心問題是:源代碼都不開放,作爲用戶無人能知其究竟做了什麼。更何況,由於我朝沒有官方市場(play store),普遍使用的軟件市場中軟件來路均不明,你怎麼保證自己下載到的都是官方所發佈的版本而不是第三方修改過後僞裝的版本?你怎麼知道自己以爲無害的程序不會在後面偷偷做小動作?

不知在考慮過這種情況後是否會覺得觸目驚心呢?自以爲的安全其實根本無法保證安全,它只是把風險從一個地方移到了另一個地方而已。而不巧的是,該風險是否會存在,其僅僅視乎用戶是否有一個良好的使用習慣——其保證者之前是用戶自己,現在仍然是用戶自己!

保護自己賬號安全永遠只能靠自己:不要輕信任何人、使用更安全的密碼、不亂登錄、儘可能使用受信的軟件/服務(開源軟件)。

 

那羣公司們不可能都想不到(加入手機號能提供的安全十分有限),但一個個仍然採取各種手段或勸或騙地收集用戶的手機號,還給通信公司資金以便能夠給你發短信,其目的何在?真的只是“爲了用戶賬戶的安全”嗎?別忘了,相當多的人可是沒有給他們錢的,他們——作爲以盈利爲目的的公司——憑什麼給你投入啊。

現在人們都很喜歡談論一個說法叫大數據,而且一些(不知道資金從何而來的)媒體煽風點火說“大數據時代用戶將沒有隱私”。這種說法背後的道理在哪?就是因爲一些用戶會在各種地方留下許多自己的敏感信息,而計算機軟件可以將這些信息綜合起來,將一個人在各個地方的信息連接起來。該做法的核心在於:有共同項。如果沒有共同項,任憑現在的軟件如何收集信息,也無法將一個人在不同平臺上的信息聯繫起來。聯繫起來之後,會發生什麼就不好說了,例如將你的信息再賣給其他願意出錢買的組織啊什麼的。

這就是爲什麼一個個公司都在收集用戶的各種信息。而爲什麼手機號這麼突出?原因有兩點:1、除了身份證和姓名以外,手機號可以說是一個人最不容易變的地方了;2、用戶往往並不在意自己的手機號,覺得這是“公開”的信息。於是,這些貢獻了手機號的用戶就這麼不知不覺地把自己賣給了那些公司。典型的被賣了還幫着數錢。

 

可以展望一下,當發現現有的收集方法效果不明顯以後,各個公司們還會宣稱:爲了保護用戶賬號安全,全面啓用短信動態密碼,都去提交手機號。是的動態密碼確實有助於保護,但是如果我沒帶手機或者手機沒電的時候該怎麼登錄我的賬號?更或者手機被偷了呢?我在手機上所登錄的所有賬號怎麼辦?

再下一步,公司們應該不滿足於手機號,估計就該收集身份證號了……至於名目嘛,我也可以幫他們想好:爲了確認用戶的身份,減少詐騙現象的發生。扯淡!你作爲一個企業而不是公安部門,如何而又如何能被允許驗證我提交的身份信息是否真實?真的出於某種明目而一定要對應賬號和身份,可以,叫政府來建立和管理數據庫——我寧願相信政府(不出敗類)也不願相信這些公司(不會拿我的身份信息去做別的事情)。

 

時代變了,手段變了,而事情的本質沒變。同樣的,用戶的隱私也一直在自己手裏,只是看自己是否願意去保護。

“十目所視,十手所指,其嚴乎?”“千夫所指,無病而死。”