李陵是作死的

| Comments

漢書卷五十四:

陵對:「無所事騎,臣願以少擊眾,步兵五千人涉單於庭。」上壯而許之……

關於李陵的遭遇,多數人從司馬遷身上多少都是知道的:祖上是追殺燕太子丹的秦將李信,祖父是飛將軍李廣,出身將門世家的李陵自然驍武憑陵,以五千步兵力戰十萬匈奴精騎,最後矢盡援絕,不得已才投降。即便對於信仰「文死諫,武死戰」的中國人,多數也是同情的。

然而這個故事主要來自於史記,這就尷尬了。從某種意義上說,李陵是給史記定下基調的人。這就決定了它展示給讀者的不會是故事的全貌。比如很多年前,我第一次看到這個故事的時候就想不明白一個問題:用五千步兵孤軍遠徵遊牧的匈奴,傻子都知道勝算很小,劉徹和李陵的智商同時下線了?

最近讀到漢書的李陵傳,發現了更多有趣的細節。

天漢二年,武帝命二師將軍李廣利出兵三萬攻打在天山的匈奴右賢王,想讓李陵監押輜重。如果把武帝的軍事史濃縮成一句話,那就是劉徹和他的小舅子們。李廣利就是因為裙帶關係上位的,所以將門世家的李陵恥於為其搞後勤,就跟武帝說:「我本部的軍隊都是精銳,希望能單獨出兵一路,這樣可以迫使匈奴人分兵,二師將軍那邊的壓力也會輕一些。」武帝多精啊,一眼就識破李陵的小九九,說:「這次我出兵很多,沒有富余的騎兵給你。」

於是李陵就開始作了,就有了本文開頭的那句話。以少擊眾、步兵打騎兵、孤軍深入,哪一條都是兵家大忌,估計李陵說這句話時頭皮都是硬的。

當然李陵也不是完全沒有資本,漢軍的戰鬥力是超過匈奴人的。硬碰硬的正規戰爭,匈奴人敗多勝少。因為戰爭打的是綜合實力,無論是經濟實力、人口、技術,漢朝都遠超匈奴,即使三歲騎馬五歲彎弓的匈奴人的單兵素質超過漢朝的民兵。

後來的戰事就證明了這一點。首戰浚稽山,匈奴人就損失數千人,漢軍步兵還追著騎兵打。主要原因就是經濟和技術水平的落差太大。匈奴人主要裝備的是弓箭,箭頭是用獸骨和石頭磨成的片狀,漢軍裝備的是連弩,箭頭是金屬質三稜狀,無論在射速、穿透力還是精准度上,前者都遠遠落後於後者。所以轉戰上千里,堅持很多天,直到最後漢軍的箭用完了,匈奴人才在距離邊境五十公里的地方吃掉這支孤軍。換句話說,如果箭量充足,十萬匈奴騎兵都打不過五千漢軍步兵,這個戰力的對比,很明顯吧。

最後不服從領導安排的李陵還是敗了,敗在距離邊境只有五十公里的地方。據說最後的日子里,他還單獨出營一次,理由是想刺殺單于,搞個斬首行動,回來後就徹底喪失了戰鬥意志。我覺得這又是個疑點,是不是想溜啊。


本文最早发布在公众号:两司马门下走狗

改用Bear記筆記

| Comments

再次證明我是後知後覺的。

曾經對印象筆記不屑一顧,因為對所見即所得的偏見和印象筆記對技術人員的不友好。所以這些年一直用DokuWiki。

DW的編輯模式不是傳統的所見即所得,自己的wiki標記簡潔好用。能針對段落進行修改。可以列出大綱。插件和主題較多。使用文件存儲數據,方便同步。平台無關,對Linux友好。

不過DW自身也存在一些問題。比如需要搭建服務、自行處理同步、移動端訪問不便、編輯和查看操作有割裂感。

最近開始琢磨記筆記的最佳實踐。考慮到用DW的痛點,感覺對於記筆記最重要的是是否方便記錄和查看。在這點上,所見即所得的確有優勢。所以我嘗試轉換到這類工具上。

選擇Bear而不是印象筆記的原因主要是:

  • 支持代碼語法高亮
  • 支持導出Markdown格式
  • 極簡風和多種主題

代碼語法高亮是剛需,沒什麼可說的。導出Markdown格式可以方便寫博客,這樣就不需要Cmd Markdown了。極簡的風格和包括Solarized在內的多種主題很毒我。

不過Bear也有不少問題:

  • 標籤只支持兩級,大量標籤不好管理
  • 不支持掃描
  • 對Linux不友好

用標籤替代分類的方式我很喜歡,不過兩級的限制讓筆記分類很傷腦筋,而且容易造成標籤太多、難以管理。掃描也是剛需,印象筆記的掃描就很好用,Bear目前沒有這個功能,只能用掃描全能王暫補,割裂感很強,而且還增加了APP。

希望Bear盡快變得更好用。

JSON是對象還是字符串?

| Comments

前兩天,一個前端跟我爭論說JSON是對象。我在接口文檔里的數據格式寫的是JSON,結果對方真就傳了個對象過來。

要搞清楚JSON是什麼,先得知道JSON是為瞭解決什麼問題的。維基百科里的定義是:

JSON(JavaScript Object Notation)是一種由道格拉斯·克羅克福特構想設計、輕量級的數據交換語言,以文字為基礎,且易於讓人閱讀。儘管JSON是Javascript的一個子集,但JSON是獨立於語言的文本格式,並且採用了類似於C語言家族的一些習慣。

所以說,JSON是為瞭解決語言之間數據交換的一種文本格式,體現在數據上,JSON就是字符串類型。那麼為什麼需要為數據交換制訂一種通用的文本格式呢?可以做一個簡單的試驗:

用JavaScript建立一個到PHP的WebSocket併發送一個對象:

1
2
var ws = new WebSocket('ws://127.0.0.1:4759');
ws.send({name:"hello"});

PHP接收並打印對象:

1
2
3
4
5
6
use Workerman\Worker;
$worker = new Worker('websocket://0.0.0.0:4759');
$worker->onMessage = function($connection, $data) {
        var_dump($data);
}
Worker::runAll();

得到的結果是:

[object Object]

所以,一種語言的對象的實例以二進制形式直接傳遞給另一種語言是無法識別的,因此需要把對象數據用文本描述之後再行傳遞。

此外,相對於XML等其它格式,JSON有可讀性上的優勢,如果是對象,二進制的數據哪來的可讀性?

在Vim窗口标題中顯示會話名

| Comments

同時處理多個項目時,在窗口标題中顯示會話名,方便區分,需用session管理會話。

1
2
3
4
5
6
7
8
9
10
11
" custom the window title
fun! MyTitleString()
    let sessionName = xolox#session#find_current_session()
    let sessionStr = ''
    if len(sessionName)>0
        let sessionStr = ' ['.sessionName.'] '
    endif
    return 'VIM'.sessionStr.': %-25.55F %a%r%m'
endfun
au BufEnter * let &titlestring=MyTitleString()
set titlelen=70

時人食狗亦與羊豕同

| Comments

漢書卷四十一:「樊噲,沛人也,以屠狗為事。」

顏師古注:「時人食狗亦與羊豕同。」

狗對於中國古人的意義和西方人不同。西方人,確切的說是美國人,對狗的感情完全是因為發展的時間太晚。美國開國也就二百來年,從印地安人手裡奪來的大量耕地和牧場保證了充足的食物來源,而狗為地廣人稀的美國在開拓過程中提供了重要的陪伴和保護,所以美國人不吃狗。

中國發展的時間遠早於美國,而且沒有大片的牧場提供穩定的肉食來源,大型牲畜作為農業主要替代勞力一般也不會用於食用,甚至歷朝長期立法禁止宰殺大型牲畜。所以狗長期是作為一種重要的肉食來源。

「失我祈連山,使我六畜不藩息」,「六畜」分別是豬、牛、羊、馬、雞、狗,這是最早被中國人馴化並作為肉食來源的牲畜,而且長期作為祭祀天地祖宗的高檔祭品。《道德經》里說:「天地不仁,以萬物為芻狗」。「芻狗」就是草扎的狗,是祭祀時當祭品用的,祭祀的時候高高在上、被人們頂禮膜拜,祭祀之後被棄之如敝履,所以說天地不仁。之所以用草狗做祭品,是生產力進步的表現,最初一定是用真狗的,只是後來更高檔的肉食逐漸普及,狗肉上不了台面了,才逐漸被抽象成草偶。

所以中國人是有吃狗的傳統的,美國人不吃狗肉也並不表示更文明,至於「狗是人類的朋友」,更是道德綁架,誰也不能隨便替別人認朋友,最多只能說你的狗是你的朋友,如果別人吃的不是你的朋友,即便自以為站在道德的高度,你也沒有任何權力干涉別人的自由,有句話說的好:自由,就是我有不和你一樣高尚的權利。

我個人也不吃狗肉,但我不覺得別人吃來源合法的狗肉有什麼問題。事實上,吃狗肉的問題並不在於吃不吃本身,而是在這個問題上表現出來的人性的惡,人總是自以為站在道德的高度就可以踐踏別人的權利,每個暴政無不是利用人性的這個弱點。

切記,儒以文亂法。


本文最早发布在公众号:两司马门下走狗

Archlinux安裝過程中的幾個坑

| Comments

安裝方案

Archboot是比官方鏡像更友好的安裝媒介,此外還有AUIArch Anywhere,沒有試過。

分區

Archboot使用parted處理分區任務。

第一個分區不能從sector 0開始,否則安裝完成後系統玩法啓動,報如下錯誤:

no operating system found

正確的姿勢:

(parted) mkpart primary 2048s 512

以上假設第一個分區用來掛載/boot,分配512M。

還需要設置/boot所在的分區可啓動:

(parted) set 1 boot on

啓動引導器

GRUB的兼容性比較好。

如果是syslinux,對於沒有單獨對/boot分區並且根分區使用ext4的情況,會無法啓動,報如下錯誤:

failed to load ldlinux.c32

此時,應對/boot單獨分區並使用fat格式。

圖形界面

安裝X不會連帶安裝顯卡驅動,要單獨安裝,否則啓動圖形界面會黑屏。

在VirtualBox中安裝時,驅動在「virtualbox-guest-utils」。

小確幸,用shift切換輸入法

| Comments

把Alfred升級到3,就想著把切換中英輸入狀態的問題一塊解決掉。

Alfred可以設置默認使用英文輸入狀態,然後用Karabiner把Shift_L映射成Ctrl+Space。現在切換輸入狀態和用Alfred的效率都高多了。

1
2
3
4
5
6
7
<item>
<name>Shift_L to Shift_L</name>
<appendix> + When you type Shift_L only,change to previous system input method</appendix>
<appendix>Shift_L == (Ctrl-Space)</appendix>
<identifier>private.change_input_source_to_squirrel.Rime</identifier>
<autogen>__KeyOverlaidModifier__ KeyCode::SHIFT_L, ModifierFlag::SHIFT_L | ModifierFlag::NONE, KeyCode::SHIFT_L, KeyCode::SPACE,ModifierFlag::CONTROL_L</autogen>
</item>

讀完《走出帝制》

| Comments

用了四天時間,讀完了這本書。之所以叫「這本書」,是因為這是本在豆瓣里都找不到記錄的書,去年上市不久即被下架,通常意義上,叫禁書。

一般走狗君讀的書,作者不是死了兩千年,至少也有八百年,連渣渣都不剩的那種。所以如果不是禁書,我還真不一定知道它,更不會讀。不過既然是禁書,又是歷史方面的,那就好玩兒了,他們不想讓我知道的,一定是我應該瞭解的,他越恐懼,我越好奇。

讀完的感覺嘛,確實是本好書,每個人都應該讀一下,如果你能找到的話。


本文最早发布在公众号:两司马门下走狗

Kindle Paperwhite 1代與3代白色版對比

| Comments

如果說2代相對於1代的改進微乎其微,3代在屏幕和配置上的升級是效果顯著的。

從原來的212 PPI升級到300PPI,屏幕像素增加了一倍,加上對比度的提升,顯示效果相對1代的變化還是相當明顯的,文字更加犀利。內存從256M增加到512M,操作流暢度也有較大的提升,尤其是在用輸入法的時候,已經可以基本流暢的輸入了。

然而3代剛推出的時候我還是沒有換。一方面以上所說的提升和價格的增量並不匹配。另一面,前代在外觀和材質上有很大的問題。

首先是顏色,黑色稍微粘上點灰就很明顯,對於像我這樣的強迫症患者,擦灰的時間幾乎和閱讀一樣多。另外,前代的背面採用的是磨砂處理,在乾淨的前提下手感是不錯,不過很容易粘灰,而且粘灰後手感很差,最要命的是,磨砂加上黑色就是指紋收集器!

所以白色版的出現簡直就是一次救贖。白色粘灰後並不明顯,背板採用顆粒較大、質感較硬的做工,手感比前代好很多。加上前面所說的在閱讀體驗上的提升,可以升級了。


本文最早发布在公众号:两司马门下走狗

讀完《史記》

| Comments

之前讀通鑒,用了四年,這次用了七個月。終於是名正言順的兩司馬門下走狗了,哦耶。

史記這本書,說到底還是個人修史,主觀性是很大的。因為坐李陵案,司馬遷是有悲憤的情結的,所以他特別喜歡悲劇英雄,很多名篇都是寫這種人的抒情散文,比如《屈原賈誼列傳》、《項羽本紀》。主觀的愛憎過多,一定會失之客觀。所以項羽以一暴君成垓下悲歌,劉邦以一英主成千古屌絲。褒貶無需作假,有所取捨足矣。

另外,史料的真實性是值得商榷的。因為秦始皇的焚書坑儒,六國史書盡毀,司馬遷的史料來源駁雜,有些事情甚至不同章節互相矛盾。比如黃池之會,左傳就只說「遂長吳國」,史記也是照抄這句,究竟晉吳誰做了盟主,還是有爭議的。

史記的成功,在於司馬遷的文採和宏觀的大體真實。魯迅說它是無韻之離騷,因為司馬遷用了大量小說家的筆法寫文章。比如講齊威王的一生,說此人繼位後,好為淫樂長夜之飲,諸侯交侵,相聲演員淳於髡看不下去了,跟威王說,我聽說國中飛來一隻大鳥,三年不飛,三年不鳴,你說這是腫麼了?威王說,這只鳥啊,三年不飛,一飛沖天,三年不鳴,一鳴驚人。於是罷飲宴,召集大臣,殺一人,賞一人,全國肅然。然後發兵四境,奪回失地,齊國大振。了了幾十字,搖人心旌。

然而史實肯定不是這麼簡單,戲劇之所以好看,就在於它將所有出場的人物臉譜化、劇情簡單化。比如講到冒頓單于,主要講了兩件事。

第一件是鳴鏑弒父。依次射野獸、愛馬、愛妾、單于坐騎,確保鳴鏑已有足夠的威信,然後完成致命一擊。

第二件是擊滅東胡。東胡利用冒頓剛繼位的時機,來索要千里馬。冒頓召集臣屬商量,都說馬是遊牧民族的命,不能給。冒頓說,不能因為一匹馬讓大家冒生命的危險,妥協了。然後東胡又來要冒頓的媳婦兒,冒頓如法炮製。最後東胡說,有塊廢地也給我們吧。當大家都說反正是廢地給就給了的時候,冒頓拍案而起,說土地是國家根本,雖廢地寸土必爭,然後發兵突襲東胡,一舉成功。

把歷史戲劇化,這就是史記好看的地方。馬未都先生說,歷史沒有真相,只殘存一個道理。對於大部分人來說,歷史細節的真相並不重要,大框架對就可以了,宏觀層面的東西足以讓人受益匪淺,追本溯源的事留給專業做學問的就好。


本文最早发布在公众号:两司马门下走狗