Thursday, May 30, 2013

郭淮的时间线


曹魏在重要的几个州都是政军各有一名主官,而这其中最重要的就是前线三州,分别是西边的雍凉、南边的荆州和东边的扬州。郭淮是曹魏西线上重要的官员,为什麼说是官员而不仅仅是将领,因为郭淮大部分时间在西线都是刺史。所以说到郭淮必须先了解曹魏西线历个时期的形势。

郭淮的童少年时期,迎献帝至曹操西进时期(196-21116

早期曹魏对西边一帮小军阀是以安抚为主,所以并没有设置军事都督,只是让司隶校尉钟繇经营。而凉州刺史几十年一直都是后来被马超杀死的韦康。
韦康在诸多军阀的围困下经营凉州几十年深得官民爱戴,马超一杀了他,群吏皆反。所以我认为马超后来与其说是被夏侯渊赶出了凉州,还不如说是韦康多年之功,这也可见刺史的重要性。

郭淮的青壮年时期,曹操的三次西进(211-22010

  • 208年至209年期间,曹操几番南下东进都不顺利,开始转方向。
  • 211年曹操第一次西进,逼反了河西那些小诸侯,并击破马超韩遂后,并没有继续下去,隔年212年旋即回到东边打孙权。
  • 213年曹操即位魏公,开始大改。撤掉了司隶校尉召回钟繇做魏大理,而该年韦康也被反扑的马超所杀,曹操把凉州也废除并入雍州(后来又恢复)。
    时开始了曹魏几十年的刺史+都督双轨制--雍州刺史是大名鼎鼎的张既,第一任都督则是大名鼎鼎的夏侯渊,以护军将军屯关中。
  • 214年曹操再次东进打孙权不顺利。
  • 215年又回到了西线第二次西进,这时候我们的主角郭淮终於登场啦,大概二十岁出头不到二十五吧,以丞相兵曹议令史随曹操入汉中。平定张鲁之后曹操升夏侯渊为征西将军镇汉中,并留下郭淮为夏侯渊的司马。
  • 216年曹操即位为王后,马不停蹄的继续和孙权打,东边仍然不顺利。
    曹操几次三番没办法稳妥的先平定西边主要也是因为孙权一直在东线骚扰,所以孙刘联盟的功不可没,让刘备可以慢慢在西边蚕食。
  • 218年曹操第三次西进与刘备在汉中展开大战,219夏侯渊被杀,郭淮推举张郃为主帅,曹操让郭淮继续做张郃的司马。
  • 曹操败退出汉中之后,郭淮一直在张郃手下继续平定关中,转为镇西长史,又行征羌护军。

郭淮的刺史时期,曹丕称帝至曹爽死(220-24930

在刺史时期,他的同期都督分别是夏侯懋、曹真、司马懿、赵俨、夏侯玄。
  • 220年曹丕称帝,夏侯懋安西将都督关中诸军事,郭淮从221年接替张既为雍州刺史(注意火凤中张既和郭淮都是司马家的人)。这年郭淮应该不到三十或三十左右。
  • 226年曹睿即位,诸葛亮228年北伐,夏侯懋被召入尚书,改由曹真大将军都督雍凉诸军事,这时候郭淮雍州刺史上加了个建武将军的头衔。
  • 231年曹真死,司马懿接大将军都督雍凉诸军事时,郭淮换成了扬武将军继续雍州刺史。
  • 239年曹芳即位,司马懿在征辽东公孙康后被夺权由太尉变成了太傅,改由赵俨监雍凉二州军事,这时候郭淮升级为左将军仍然是雍州刺史。
  • 243年曹爽预备伐蜀,让亲族夏侯玄以征西将军都督雍凉诸军事,郭淮升为前将军
  • 249年曹爽被司马懿收了,夏侯玄被司马懿召回剥夺实权成为太常

郭淮的晚期与死后,(249-2557

一直到这时候郭淮才终於出头,由前将军雍州刺史升迁接替夏侯玄成为征西将军都督雍凉诸军事,整整30年啊!这时候郭淮应该至少已经六十。雍州刺史职位则由陈泰接替。
第二年郭淮又升为车骑将军并开府,六年后死。他死后陈泰接替以征西将军都督雍凉,王经接任为刺史
陈泰因为不是司马家心腹,第二年就业被夺权召回朝中作尚书仆射,由司马家的司马望接替征西将军都督雍凉
许司马家对司马望的实际领兵能力不放心,於是司马家的门生邓艾前一年才从兖州刺史的位置上调到了雍凉以安西将军领东羌校尉,第二年就改以镇西将军都督陇右了。邓艾之前曾经作为南安太守在西线和郭淮陈泰待过一段时期。
这时候是256年,雍州军事上分为二都督,雍凉和陇右。司马望和邓艾的搭配一直持续到灭蜀。

Monday, July 30, 2012

215年曹操称王之后手下主要将领的分配


诸夏侯曹

  • 夏侯惇:扬州军区总司令 (以伏波将军都督二十六军屯居巢)
  • 夏侯渊:关中军区总司令 (以征西将军镇汉中)
  • 曹仁:荆州军区总司令 (以征南将军屯樊城)
  • 曹洪:京畿卫戎部队总司令 (都护将军)
所以他们后来在曹丕称帝之后的升迁也是顺迁:

  • 夏侯惇升大将军
  • 夏侯渊升骠骑将军 (如果没死,但是他死了魏国这个位置就空了,后来曹洪补上)
  • 曹仁升车骑将军
  • 曹洪升卫将军
比之蜀汉呢,关羽如果没死,他就是大将军。他死了所以这个大将军位置就是一直空著。
张飞是车骑、马超是骠骑。所以张飞相当於曹仁、马超相当於夏侯渊。
而赵云最适合做卫将军,一直以来的工作也相符,只是他劝阻刘备不要伐吴惹刘备不高兴了,就变成了征南将军了。

  • 夏侯惇在做扬州军区总司令的时候统领二十六军,这包括了在合肥的张辽、李典、乐进,以及徐州的臧霸。
  • 曹仁在荆州军区做总司令的时候,手下统领的人我们可以从江陵之战和樊城之战看出来。其中包括了他的部将牛金、横野将军徐晃、襄阳太守乐进、奋威将军满宠、汝南太守李通、江夏太守文聘。
  • 夏侯渊做关中军区总司令打的两仗,都有曹操参与,我们只能大概算出他最开始统领谁。大概就是张郃、徐晃、朱灵、郭淮等。

五子

从上面我们可以看出,五子裏面,张辽是一直待在东边的。和其他两个军区不一样,虽然扬州军区虽然名义总司令是夏侯惇,但是仗都是张辽带人打的。而其他两个军区夏侯渊、曹仁都要亲自上阵。所以张辽可以视为扬州军区夏侯惇的副手,也是实际上的执行人。

张郃呢,则一直待在西边,他可以肯定说是夏侯渊的副手,因为夏侯渊死后众人就推举他为主帅。说来张郃其实比较悲催,他做了一辈子的关中战区二把手。之后先是在曹真手下做,后来又在司马懿手下做二把手。

而徐晃、乐进这两个右將軍则比较游动,徐晃在江陵之战、樊城之战属曹仁,潼关、汉中之战则属夏侯渊。乐进则是江陵之战属曹仁、合肥之战属夏侯惇管辖。

我们是不是忘掉了一个人?对的,就是于禁,他完全不属於这三个战区任何一人的统辖,就算是樊城之战他也是独立带七军。所以五子裏面,可以肯定在于禁在的时候,他位置最高。

虎豹骑

曹操手下还有一支精兵是直属的,就是虎豹骑,虎豹骑的主帅我们都知道,就是曹纯、曹休、曹真。基本上这几个人我们只会在曹操亲征的时候才会看到。所以我们可以肯定他们不属於三大军区的统属。曹纯早死、曹休、曹真后来分别做了东西军区总司令,如果曹纯没有早死他应该是荆州军区总司令,不会轮到夏侯尚。和夏侯懋一样,夏侯尚没什麽才干。夏侯懋、夏侯尚都是夏侯家的子弟,分别做过一段时间军区司令就被替下了。远不如三个虎豹骑锻炼出来的曹休、曹真。

而曹洪也是只有在曹操亲征的时候才会出现,因为他的任务是卫戎。当然卫戎部队也是可以派出去的,所以曹洪经常作为曹操亲征时的前沿部队出现,例如潼关之战与汉中之战。有时候也和虎豹骑一起行动。至於虎豹骑是否归于曹洪统属,我认为不是,虎豹骑应该是曹操直属的,与曹洪的部队并列关系。

其他的二线武将

  • 许褚(典韦)这是纯粹的保镖,与曹洪不同,曹洪统领的是卫戎部队,而许褚只统领最多一个营的卫兵而已。记住这也是赵云的职责更像曹洪,与许典完全不同的地方。
  • 李典、臧覇、吕虔,李典不多说。臧覇、吕虔一直都是分别统领青徐,属於夏侯惇的管辖范围。
  • 李通、文聘,一个汝南太守、一个江夏太守,都是属於曹仁统属的,在江陵之战出现。
  • 满宠在曹仁手下,后来在曹休死后做了扬州军区总司令。
  • 郭淮是夏侯渊手下,后来在司马懿卸任之后作了关中军区总司令。
  • 其他北边边戎的几个将领我这里就不说了。

曹操救援樊城爲什麽要派出于禁?

我們知道樊城之戰發生的時候,曹操剛剛從漢中之戰敗退回來。參與漢中之戰的部隊需要調整才能出發。

這個時候我上面所說的那些高級將領裏面,夏侯惇坐鎮東邊不能動,曹操也不會動他。樂進已死,張遼也不能動。事實上在孫權投降之後張遼就開拔前往樊城。

曹仁困守樊城裏,張郃應該是留在了關中軍區整頓。曹洪、以及曹真、曹休所部是否跟隨曹操撤回,還是留在關中不清楚,不過徐晃倒是撤了回來。

這時候曹操所最可能派出的高級將領,以及救援部隊,就是在此前幾大戰役中都沒有動用過的于禁了。于禁作爲生力軍,應該足以扭轉形勢,事實上他的能力也是如此。他的帶兵風格以嚴整著稱。曹操當時的目的是想讓他從一旁震懾牽制住關羽軍,以待後面的援軍陸續來到。

只是非常不巧,關羽這次的進攻是很有計劃性的,漢水大漲也是在他計劃之中。否則他不會事先就準備好大船攻城,要知道大船想從南郡長江那邊繞入漢水,必須得經過江夏文聘的屬地。文聘之前江陵之戰還威猛威猛的,這次不知道怎麽就躲起來也沒阻攔。

所以于禁事實上是中了關羽安排好的時間上的一個陷阱。我們假設先帶兵來救的是徐晃,恐怕他也得變成水鱉,至於投不投降,就因各人不同了。而于禁替代了徐晃的位置,則帶兵來時水已退,孫權已襲江陵,于禁應該也能立徐晃之功。

那麽誰帶兵來才不會受困水斗呢?恐怕只有那些能夠因地制宜排兵佈陣的謀將才可以了,例如曹操自己、識變數的張郃、後期的鄧艾。

Friday, May 4, 2012

Project Sanguo

五月份我將開始一個新的Project,這個Project籌備了有半年時間,是一個非常私人的Project,目的一是爲了填補空白時間,二整合一下自己整理的一些東西,三來學習自己以前比較少用到的技術。

Project内容

中國的史書有紀傳體、編年體與紀事本末體三大體例。梁啟超說:「蓋紀傳體以為主,編年體以為主,而紀事本末體以為主。」中國官方編撰的史書也就是所謂的正史「二十四史」都依照《史记》紀傳體體例编纂而成。

紀傳體是以為人物立傳記(皇帝的傳記稱「」,皇族、外威、一般人物稱「」,特殊情形的人物稱「世家」或「載記」,記載制度、風俗、經濟等稱「」、「意」或「考」,以表格排列歷史大事稱「」)的方式记叙史实。所謂「〈紀〉以包舉大端,〈傳〉以委曲細事,〈表〉以序其年爵,〈志〉以總括遺漏。逮於天文、地理、國典、朝章,顯隱必該,洪纖靡失。」

《三國志》雖然被後世稱為「志」,但是其實全書完全是按人物排列的本紀和列傳,沒有任何如地理、經濟、典章制度等的志書或表的內容,這對想要系統性去了解那個時代非常的不便。
至今已有許多前人整理補充各種志表,按wikipedia上的資料。
補志方面:
補表方面:
  • 謝鍾英《三國疆域表》*、《三國疆域表疑》*。
  • 周嘉猷《三國紀年表》*。
  • 謝鍾英《三國大事表》*,張守常《謝鍾英〈三國大事表〉補正》。
  • 萬斯同《歷代史表》中有《三國大事年表》*、《三国漢季方鎮年表》*、《三國諸王世表》*、《魏國將相大臣年表》*、《魏將相大臣年表》*、《魏方鎮年表》*、《漢將相大臣年表》*、《吳將相大臣年表》*。
  • 黃大華《三國志三公宰輔年表》*。
  • 周明泰《三国志世系表》*,陶元珍著《三國志世系表補遺附訂偽》*。

今人也有不少人將以上各類補表錄入電子化。我個人就曾將萬斯通《歷代史表》中三國相關的部分錄入Excel,後來又有陸續整理過一些資料錄入Access,GenePro之類不同用途的數據庫。也以Excel及Visio整理過簡略的圖表給文做附。
 但整體給我一個感覺,這些東西太過零散,輸入既需要時間且無法重復使用,每次都需要各種不同工具來生成想要得出的效果,很沒有效率。使用Access做數據繪入就是因爲我萌生了整合成一個數據庫然後通過定制顯示頁面來達到自己想要的想法。

只是使用Access數據庫,一來過於簡陋,二來也無法與衆人隨時隨地分享,後來便想要自己寫一個程序。最初是想做成iOS的軟件將來還能有機會在AppStore上賣錢。但是後來覺得平臺的局限性太大,而且很多東西也無法表現出來。

Project技術

比較來去,最後使用Web成爲了唯一的選擇。在一開始,我覺得更需要的是Presentation上面的靈活性,所以停留在各種動態網頁表現上,看了很多Flash和Silverlight的資料,又看了很多HTML5的資料。

但因爲自己不是Digital media出身,對於這些東西實在是看得懵囃囃,不知道從哪裏開始,如何將已錄入的數據以炫酷的形式表現出來。於是我詢問了做Web FrontEnd開發的好友,好友建議說像我這樣的需求,還是應該以Web Application形式來做,於是向我推薦了ASP.NET MVC。

ASP.NET MVC的模式我一看就很喜歡,適合我這種學軟件開發出身的。它是以傳統的軟件開發模式來開發網頁,對我非常地親切。只是以MVC這種模式開發,一刀一斧工程浩大,耗時會比普通的WebForm形式更爲費時耗力。所以爲了保險起見我做了更多關於這方面的調查,進行比較。包括ASP.NET的WebForm,Ruby on Rails和Java的各種Web Framework。

理論上,我目前工作環境都是Java,公司的產品也是用Java開發的Web application,我應該選擇Java才對,又能工作和自身學習相搭配。只是不知道爲什麽,我實在是不喜歡Java,雖然最早接觸的語言就是Java,算是我的啓蒙語言,各個學校學習用的也多是Java,我也是爲了讓自己更熟悉Java而進入這個公司強迫自己有這個環境。

只是這麽一年過去了,我對Java卻產生更大的排斥心理,討厭Ant也討厭Maven,更不用説Eclipse那個IDE了。我總覺得Java無法像C/C++那樣寫出很自由很酷的服務器軟件,也沒有像Visual Studio能提供非常容易上手易用的工具套件,雖然Java的跨平臺優勢前兩者無可比擬。

相比之下,在嘗試ASP.NET MVC的過程中,Visual Studio卻讓我覺得無比的親切,也許這就是一種天生的個人喜好,無法以更客觀的角度去選擇使用的技術。所以就算將來Host ASP.NET的服務器租金可能更貴,暫時也管不了那麽多了。

在閲讀了更多的資料之後我最後還是決定選擇使用ASP.NET MVC,特別是因爲MVC3使用了Razor引擎。總結的說,選擇的理由就是簡單易用,快捷方便,又能作出很系統性完整的東西,將來的擴展性也大。而且在各方面的知識上,雖然其他知識我也都是淺嚐爲止,Web我卻幾乎沒有接觸過,能夠增加很多這方面的知識,例如HTML5、Ajax。同時也能夠加深對C#的理解。

Project參考資料

決定了使用的技術後,我也決定買一本書來加強學習。基本上也就兩本入門到中級的可供選擇,分別是Wrox的Professional ASP.NET MVC3與Apress的Pro ASP.NET MVC 3 Framework
經過多次比較,我還是選擇了後者,因爲後者的後面部分感覺會更深入一些,前者則讓我感覺與網上那些免費的教程相去不遠。只是在購入了後者之後我發現作者用了自己的很多習慣來做教程,而前者則基本上沿用Microsoft的Convension。所以還是有點後悔,我的怪癖就是覺得用官方的習慣標準會比較舒服,所以有可能也會把前者也買下來。我選擇的是電子書版本,比較便宜也隨時隨地可以看。比較了iBook版和Kindle版發現還是Amazon的比較便宜。

而前面所提到的前人所著之各種補志補表,目其中帶*有收錄在中華書局所刊印的《二十五史補編》的《三國志補編》裏,國家圖書館出版社有專出這本。國内大城市的書城還可以買到。旁邊的悉尼大學的Fisher圖書館有著南半球最大的東亞圖書收藏,我查了一下,比較主要的基本清代以前補編的志表裏面都有,倒是近現代民國學者王欣夫編撰的《補三國兵志》沒有。

這些資料已然足夠,關鍵系統要架構起來,錄入這些數據是長期的事情。我的計劃是做一個關於三國無論橫向覆蓋或者縱向深入都比較完整的數據庫,方便查找歸類,並且能生成各種各樣的圖表形式。如果將來有機會製作遊戲還可以很好的使用,目前我有一些關於這方面的想法。至於文字方面内容反倒是其次,現在許多例如wikisource那樣的網上書庫已經很多可以查閲。之後我將會詳細談談哪些是我想要的。

Sunday, July 17, 2011

魚水之歡

引言

我們都知道,一個勢力想要成功奪取天下,需要具備兩個條件:一個是階級基礎,一個是群衆基礎。南華派那幾個善於蠱惑人心的八怪,懂得利用群衆基礎來作亂。可惜他們沒有階級基礎,於是不能長久。

那個時代的階級基礎是什麼?是士人,士人就是知識分子。水鏡府作爲當時知識分子的最高殿堂,自然成爲當時各大勢力爭奪人才的地方。

有云以人爲本。又有云得人心者得天下。人心是可以操控的,輿論的走向是可以牽引的。經過了兩次黨錮之爭,大義牢牢地掌握在士人手裡,這是其一。

其二,沒錢的人是讀不起書的,寒士不是沒有,但不是主流,當時的士人多出於豪強士紳大族。黃巾與董卓之亂後,鄉縣民衆在這種狀態下為求自保都聽令於當地大族。於是士族豪強紛紛聚眾起事自保,形成地方上的割據。有了士人的支持,也就等於有了一定的群眾基礎。

第三,也因爲那時的教育不普及,知識只掌握在士人手裡。要打架做反當山賊,可能靠煽動來發動點群衆基礎就可以了。但我們都知道戰爭最終打的是後勤,後勤就在於根據地的發展治理。讓沒有知識的庶民治理一個地​​方是不可能的,打仗的方法就是換著地方搶,終不能長久。

--
如魚得水

劉備是有點群衆基礎的,他是庶民出身,身邊追隨的也多是庶民寒士,懂得掌握這方面的民心。也正因爲如此,他沒有士人基礎。且不說他令人不信服的皇叔身份,就算他是真落魄皇叔,在世族裏也毫無號召力。

《火鳳》裏有個細節,很多人沒注意到。老七救徐之後,已認定劉備為他追隨之主。但他不在其老家徐州投靠劉備,反而先去荊州,讓劉備去找他。因爲老七知道中原一帶的士人早已確定追隨袁或曹,無劉備立足的空間。

三爺也是如此想法,他一手謀劃讓劉備入徐再棄徐。因爲三爺知道中原已無立業之處,他作畫天下三分便是清楚的表達了這個意思。這圖後來贈與老七或水鏡,這二人後來共賞這幅畫,得出張飛的三劉相合以圖三分之意,於是老七先去荊州與當地士人建立關係網以待劉備。

劉備後來常說如魚得水,水是魚的生活環境,不是指諸葛亮這個人。魚離開了水就會窒息而亡,一個離開了士人支持的勢力也是如此。劉備所謂的如魚得水,指的是得到了諸葛亮所建立的知識分子圈,他終於能得到一些士人們的支持了。

所謂的臥龍鳳雛,得一可得天下,也是這個意思。不只是他們的才能卓越所以天下可得,而是諸葛亮和龐統都與當時荊楚的士人豪族交際廣泛(《火鳳》裏,龐統能夠一匡諸多小勢力,在南陽狙擊曹操)。得到了他們的支持,就相當於得到了荊州士人們的支持。得到了荊州士人的支持,就能得到荊州,進而圖謀天下。


--當然,這些都只是想當然。所謂的臥龍鳳雛只是互相吹捧的說法,他們的一廂情願並無法去號領天下所有的士人。就算只在荊州範圍內,也無法通吃。

首先,荊州有很多南下避難的北方士人,比如王粲、徐庶、孟建、石韜等等。諸葛亮雖然與這些人交情不錯,但卻沒法改變他們的想法。這些人在荊州的目的就只是避難,沒想在南方紮根,所以曹操一南下,他們也就北上回鄉,在曹操主持的朝廷裡做官。

諸葛亮自己也是屬於南下避難的北方士族,不過他們家很快就在南方扎了根,而且很深。諸葛家南下之後,與荊州的四大士族,蔡、蒯、黃、龐都有姻親關係。而次一級的四個大士族,馬、向、習、楊都是其好友。


儘管諸葛亮在荊州發展出的的關係網很大,也不能領導他們。畢竟他是外來之人,對較大的四族,蔡蒯黃龐,諸葛亮都沒有影響力,只靠姻親攀上關係。這四個家族都只是圖個安穩,保有產業。至於上頭是劉表還是曹操,都沒有差別。倒是較小的四族,馬向習楊都被諸葛亮忽悠得隨劉備奔波,一直到入蜀之後都還起到重要的作用,打壓益州當地的士族集團。

所以得臥龍得到的天下,就只是荊楚本土小部分士人的支持,去掉北下士人、荊楚大族,就剩下三成。不過就只是三成的水,已足以讓劉備這魚很高興了,這就是基礎啊。所以之後他才能很快的掌握荊州南部。

要知道劉備之前是沒有士人支持的基礎的。別看他領過徐州,做過豫州牧,當地的士人都只是當他在其位的時候,任其職。像陳群、陳登、袁渙等他提拔過的人在他離開之後可都沒有跟隨,因為這些人很多本來就是當地大族。他們跟的是地方,不是劉備。真正跟隨劉備到處流浪的,只有糜竺,以及孫乾。

--
上善若水

天下魚這麼多,諸葛亮為什麼會選擇劉備?為什麼南下北方士族都北歸的時候,他不北歸?要知道諸葛家在徐州可是大族,他的族人在魏晉時期歷任大官。為什麼他的荊楚姻親士族都投曹的時候,他卻獨自帶領剩餘肯跟隨的士人一直堅持抗曹?

隆中對暴露出了諸葛亮一直就有抗曹的思想,沒有這種思想,他不會想要在荊州紮根,完全可以在北方恢復太平了就回去。我個人覺得,只是因為曹操的屠徐,而劉備卻在力量單薄的時候救徐。人的選擇有時候就是這麼簡單,幼時對好惡的分辨容易影響了一生。

我一直認為曹操的屠徐之舉有百惡而無一益,讓他間接失去了“天下”。試想一下,如果他當時沒有屠徐,只是攻徐,到最後徐州還是會在他手裡。後來徐州畢竟治理得不錯,諸葛亮也不會如此反感曹操,而會像其他學友那樣北歸。這樣荊州就不會有那三分之一被諸葛亮帶動起來的反曹派,劉備在荊州便站不住腳。就算孫權周瑜還是能在赤壁擊敗了曹操,之後曹操捲土重來時就不需要同時面對荊州與揚州(後來再加上個益州)的左右牽制。劉備在荊州站不住腳,也沒有機會可以被邀請入蜀。而就算入蜀了,沒有那些荊州的人才幫助也壓制不了益州的士人。


曹操雖然一直都好殺,但他當時不過是領了兗州,收了三十萬青州兵,就以為天下無敵地開始濫殺,未免太不明智。那段時間他應該是被沖昏了頭吧,屠徐讓他間接失去了“天下”,殺邊讓,則差點讓他失去了全部身家。

曹操的出身很不好。在士人的眼裡,劉備可能只是出身布衣,或者冒牌皇叔,不會選擇他。但是曹操可是真正的贅閹遺醜,黨錮之爭士人被宦官壓制得很慘,不管你曹騰是不是好宦官,總之就是閹醜。就算不至於成爲仇敵,看不起肯定是有的。所以曹操一開始就只有他自己夏侯家曹家的人跟隨(也就是他譙縣的群衆基礎),不像袁紹一開始就是士人領袖,眾望所歸。


我們知道當時中原的士族最多,也就是河北河南。袁紹與曹操的發展方針也很明確:袁紹以河北為基礎,以冀州的士族為基礎。曹操以河南為基礎,就是兗州。《火鳳》有一集登泰山而小天下,得兗州者得天下,這裡的“天下”其實又是指兗州的士人。當時這兩個州受到之前的黃巾影響而四處避難的士族比較少。青徐很多士人都南下揚州避難,而豫州則有很多到了荊州。

袁紹是士人領袖,他到冀州取得統治權實在是輕而易舉,韓馥的手下個個都是人心向袁。曹操則波折得多,劉岱死後受到鮑信迎入主持兗州,其實兗州的士人還是有很多不服,所以邊讓看不起曹操,並引來殺身之禍,最終導致張邈陳宮迎呂布入主。張邈是八廚之一,陳宮也是兗州當地名士,他們可能也會看不起呂布,但至少沒像曹操殺名士那麼可恨。程昱是少數仍然支持曹操的兗州名士,也因為他,使得曹操不至於全失兗州,至少能保有三城。他的這次貢獻,也使得程昱成為第一批與夏侯惇曹仁能享配太廟的曹魏大臣,可見有多重要。

--
弱彌堅

如魚得水的人,不只有劉備,曹操也是。曹操雖然比起劉備有家族基礎,但也缺乏士人的支持,而荀彧就是他的水。

天下名士,以豫州穎川郡為冠,汝南郡次之。雖然黃巾之亂為禍這兩個郡最深,當地許多士人都南逃荊州,比如前面提到的司馬徽、徐庶、石韜來自於穎川,孟建、許劭許靖兄弟來自於汝南。還有許多北上冀州追隨袁紹,例如荀湛、郭圖、辛氏兄弟。荀諶是荀彧的弟弟、郭圖可能和郭嘉也有點關係。荀彧郭嘉,最開始也都是先想去追隨袁紹,後來發現不是成大事之人,才嘗試接觸一下曹操。

荀彧之所以是曹操的水,是因為他能把穎川遺留下的人才都集結起來以供曹操使用。荀氏是本地的大族,比起諸葛亮那種外地人想在荊州忽悠當地的大族來得容易得多,穎川的大族荀氏、陳氏、鐘氏盡皆歸附曹操,給他提供了戲志才、郭嘉、鍾繇、陳群、杜襲、棗詆等起到很大作用的人才。

有了這些穎川大族們的支持,曹操能在兗州不穩的情況下把根據地轉為豫州,繼續與呂布爭奪兗州,後來迎奉獻帝到許縣就是穎川的一個治縣。這才是他奪取天下的基礎,《火鳳中》荀彧養兵千日這個情節的故事背景。


曹操的第二次大危機是官渡,他與袁紹實力的差距,不僅僅在於兵力與資源上,名聲人望上也遠遠不如。曹操是什麼?贅閹遺醜。袁紹是什麼?當時的名士領袖。除了荀彧郭嘉這兩個一開始見過袁紹並棄之而選曹操的,其他幾乎沒什麼人覺得曹操有勝算。

事實上,袁紹不僅得到河北名士大族的支持(田豐、沮授都是冀州鉅鹿大族,審配則是冀州魏郡,也就是鄴城的大族),還得到了河南的部分士人的支持,如之前說的穎川的荀湛、郭圖、辛氏兄弟。《火鳳》中袁方貴為水鏡府八奇之首,能力之高,就是當時袁紹這些名士集結歸附的一個縮影。


(題外話,說一下袁紹在南下方針上的兩派分歧:反對南下的主要是田豐和沮授這些河北大士族,因為戰爭對於他們來説等於增加本族的開支,沒有什麽好處;而最支持南下的郭圖等人則是因為他們老家在河南。

這其實也是中國自古以來的地域性拉幫結派的一個縮影。在田豐沮授被消滅之後,本處為鄴的審配逢紀繼續與來自於穎川的辛評郭圖各擁一派互相對抗。辛評郭圖還支持袁譚與南方的曹操結盟,方針都不像田沮審這些以守家保土為主。這些放在《火鳳》裏面就是縮影在袁方這個私生子對抗袁氏本家的那些人。類似這種外來士族與當地士族的不合在後來歷史一直還會發生,劉備入蜀之後,諸葛亮所拉攏的荊襄士人就與益州本地的士人一直有摩擦。)


當時袁紹能收到很多投誠的信,非常正常。大多數河南的士人只是想要保全性命而不敢反曹,但是他們看好袁紹,提前聯繫好感情以免之後出問題。汝南一郡則成為了袁紹在曹操的敵後根據地,因為袁家本來就是汝南郡出身,稍微號召一下,召集一些黃巾餘黨是再容易不過的事情,這個根據地直到官渡之戰結束後才被曹操剿滅。這些映射到《火鳳》裏面,就成爲了大師兄的養兵與佈置。

天子在手,只是讓曹操的征伐有名而已,很多自己有號召力的集團都不賣這個賬。更不用說袁紹了,他們完全可以以曹操挾持天子為由,清君側為名來對抗,事實上之前就這麼做過。

董卓剛入洛陽的時候也想要收買人心,想得到士大夫們的支持,於是他把當時那些名士們都封到各地做刺史太守,結果到頭來還是搬石砸腳。士人自視品德高尚,首先最仇視宦官,宦官被除掉了他們同樣也看不起董卓這種守戎邊疆的武夫。之前士大夫們都只得一張嘴,沒有實際權力,現在董卓把他們放在有兵有糧的位置上(因為黃巾之亂各州郡都有了一定的自主權)。於是這些剛被董卓委任出去的這些名士們鼓譟一下又聚集起來推袁紹為首反董卓了。董卓那時候也是天子在手,可以以天子名義發號施令,一樣一點法子也沒有。曹操也是一樣,在對袁紹上處於了極大的劣勢,但他比董卓強在於他有荀彧。

荀彧不僅替他把後勤輸送新戰鬥力等工作都做好,還能安撫後方的士人不至於添亂。同出於穎川大族的鐘繇則鎮關中,提供補給而且還說服了關中的軍閥出兵平定了幫袁紹在河東為亂的郭援。郭援是鐘繇外甥,尚且幫助袁紹,可見當時曹操領地内的大族分歧之大。

--
水能窒魚

現在的很多人,老是矯枉過正,看了點史聽一些人說的獵奇,就覺得演義太誤人。覺得諸葛亮前期打醬油,後期各種悲劇。郭嘉多牛逼,有郭嘉不會輸赤壁。

中國的歷史就是一部人際關係史。沒有諸葛亮,劉備不可能得到荊州僅剩的那些士族的支持。沒有這些人才,他無法在荊州站住腳,也沒有資本進益州。而沒有荀彧的關係網,曹操想得到河南剩下那部分士人的支持也很難,就算不被袁紹拉走,也會持觀望狀態。沒有這些人才基礎,曹操兩個的難關都很難過。沒有戲志才,荀彧可以推薦郭嘉,沒有郭嘉,也還有其他人。郭嘉在曹氏看來的重要性甚至不如替曹操保住兗州最後基礎的程昱。


不過曹操始終最喜歡的是郭嘉,一是郭嘉能看透人心,迎合曹操的脾性;二來比起手下這些豪族名士,郭嘉也不那麽高節清風(鐘繇數次當堂責難郭嘉的行爲作風)。曹操與手下的這批士人,一直到最後都仍貌似神離。曹操覺得雖然現在這些人荀彧的凝聚下幫他,心裡還是有會被看不起的陰影。

曹操利用荀彧,荀彧其實也是在使用曹操,可能什麽時候水就往其他地方去了。《火鳳》裏華陽儆君之後曹操明白爲什麽荀彧會幫他,而歷史上曹操則三次下達求賢令,唯才是擧,唯才是用。多用寒士以及原本德行上有點欠缺的人才,以爲了避免人員過度局限於荀彧所薦用的有志節的士族清流,為漢室做了嫁衣。


再後來曹操勢力擴大了,便開始著手清除那些可能會對他造成阻礙的清流名士。崔琰毛玠為官清風亮節,同為曹操的首席文官,掌銓衡選拔人才的任務十餘年,所举用的都是清廉正直之士。崔琰下獄死,毛玠被營救但免職。

出自孔子世家的孔融自黨錮之禍以來就是天下名士,門第出身、政治背景與立場都與宦官之後的曹操有明顯差異,而且他非常堅定的效忠於日趨式微的漢朝天子,成為當權的曹操推行自己政策的最大障礙之一,最終招來殺身之禍。楊修出身四世太尉的高門士族弘農楊家,也被曹操借故除去。

除了一開始就幫他打天下的穎川士族外,其餘不妥協於他的名士都處於殺身的威脅之中,就連荀彧之死也是讓後人有諸多猜測。


所以曹操在赤壁之戰之後的幾次征伐,都無法盡全功。征馬超、張魯,與孫權相持於濡須口,同劉備於漢中相爭,每次都不敢帶軍在外太久就得急急趕回。何故?再沒有荀彧在後方幫他鎮撫群士,後方內亂不斷。值得注意的是自從荀彧死後,曹操便再也未能擴張寸土。

其後的關羽能夠威震華夏,和這也有不少關係。當時曹操指派的荆州刺史胡修、南乡郡太守傅方都投降了关羽,治郡下許多義軍早已受關羽遙控,從荊北至司豫更有許多叛亂都想引關羽為援。試想那時曹操已經經營十數載尚且如此,當年的袁紹更有號召力,如果沒有荀彧在後方的鎮撫,恐怕叛亂的影響就不止於想要遷都這麼簡單了。


經過了曹操的幾番清理,士族們為了保全身家性命,就只剩下了妥協。少了忠貞之士,曹丕的篡權便是那麼的水到渠成。曹丕稱帝之後,就沒有也沒必要繼續打壓這些士族群體。只是士人們畢竟只是妥協,缺乏了忠貞之士的維護,曹家可以取代劉家天下,司馬家也可以,何況河內司馬家本來就是一個比曹家出身更好的士族。曹氏在士族們眼裡,只不過是一個暴發戶。

在司馬氏的奪權過程中,幫曹操平定北方起到很大作用的穎川荀氏、鐘氏繼續起著很大的作用,只是這次他們幫的不是曹家,而是司馬家了。能夠獲得士族認同的司馬家的後人們雖然很混帳,但是他們的天下卻能長過曹魏。

Fin
--
秉忠贞之诚,守退让之实;君子爱人以德

Thursday, September 30, 2010

Mobile Platform Wars



Went to the conference last night, basically it was all about (free beers & foods,) presentation & debates from developer's perspective between 3 major mobile platform + cross platform.
It was present in a more friendly way than what I thought to be, here are a little summary from it:

Android is catching up iOS in terms of Apps have developed per month:
pro:
  • Developer-friendly with those who had wrote JAVA Swing before;
  • The learning curve is starting with easy but will encounter hump at later stage;
  • Free install on any android phone;
con:
  • Pirate problem - free install on any android phone (yes, both pro & con).
  • Compatible problem - inconsistency version of android OS with different handset (CPU speed, memory and resolution etc.)

iOS is still holding the crown, but I feel people is getting a bit of aesthetic fatigue with it.
pro:
  • Apple controls the version update and handset standard (only Apple products running iOS);
  • Rich documentation and examples from Apple;
  • No pirate problem, money guaranteed;
con:
  • Approval process of Apps required to go through Apple, and need to pay money before putting on shelf.
  • Object-C and iOS dev kit require a bit more time to get familiar with, hump at begging of the learning curve.

Windows Phone 7 was all re-designed, they learnt a lot of experience from previous two platform. Plus that Microsoft is putting huge amount of money into it, it looks promising.
The demo was directly projected from the prototype phone (previous two were through slides), which was pretty cool.
Its new clean & slice Zune style UI gave me some impression on over those iPhone style touch-phone UI (although android does provide some different things, such as widget/gadget on dashboard)
pro:
  • Backed by the powerful Visual Studio & .net, this isn't something like iOS devkit or Eclipse can compete with.
  • Instant wealth feedback with Microsoft's money support even before you start list your apps.
  • Microsoft chose some middle way between Android & iOS:
    a. Controlling with approval, but also allow you to invite people for free install.
    b. Still have different manufactures but they mentioned they will control the version updates and standardisation.
con:
  • Still need to wait for market reaction after a real phone on shelf.
  • The conference was sponsored by Microsoft, and they present in a more user experience way rather than from developer's perspective.

Cross-Platform basically means you write apps as web app, good for writing small scale apps.
pro:
  • With a local platform wrap you can write core codes once and able to run on all kind of OS.
  • Easily hop on for those web developers - cross languages.
con:
  • Compatible problem, different resolutions etc.
  • Performance problem because app is not running in native code.
  • Development curve might be hump after humps.

Overall I felt that if Apple is not going to do any change in future years, they might fall behind with the fierce growing of Android and menacing return of the Windows Phone.
However consumers will be happy to see the competition in smartphone world is going into a new stage soon.

Thursday, August 19, 2010

Software Testing

Developers will rarely like to work on software testing because it's boring. It isn't like creating code that requires creativities, but more like a repeating labor work. To help/enforce developer to overcome this laziness, with the power of Agile methodology, TDD (Test-Driven Development) requires you to write tests based on requirements before you can start actual coding.

Ok, Software Testing is not in my job description, but because there are no tester or QA in our development firm, every developer has to do his testing by himself, consequently we only have automated tests, and as SCMer I need formalize them as part of build automation, therefore I need to understand a bit more in it.

Software Testing is an complicated and time-consuming discipline, what I'm addressing here will not be entirely correct, but rather to be just my understanding at moment. Write them down to allow me to revisit and revise in the future.


All testing were done by our developers with all automated, hence they are all white box testing.

Unit testing verifies the functionality of a specific section of code at the function/class level, it is the most fundamental one, we use it from first year of computer science study. But unfortunately it is still the only test that some of our projects have, and in a few projects they don't even have a proper unit testing.

Unit testing frameworks help simplify the process of unit testing, it provides assertions, exception handling and other control flow mechanism that make your work of adding unit tests become relatively easy. We use Boost Test Library for C++ and NUnit for C#, some of our cool kids start to use google test.


One of the task I was working on is the Code Coverage, it tests how your source code been covered by your unit tests. In other word unit tests test code, and coverage test measure unit test. We use gcov for C++ projects (with lcov as an extension to generate reports), and NCover for C# projects.

Three common metric we get from code coverage are:
  • Function coverage - How many times each function in the program been called during exercising unit tests.
  • Statement coverage - How many times does each line been visited.
  • Branch coverage - Does every edge/decision/condition been executed?


Unit testing is a Dynamic testing, there are other Dynamic testing such as Integration Tests, System Test and Acceptance Tests. We don't have most of them, and due to the nature that our software are in-house only software, our end users are acting as tester and doing all these tests for us kindly.


Contrast to dynamic testing there is static testing, or as we called it - code review, primarily it is just to walkthrough the code manually. In my previous company we were required to have a "buddy check" before doing any commit, now in my current one we are not that restricted but people will still ask someone in the same team to review. This does help the collaboration by letting other team members to understand what your are working on, thereby improve both the overall quality of code and the developers' skills.

ReviewBoard is the tool that I deployed to help pre-commit review, it is a relatively new open source tool so don't expect to be that perfect. I also configured post-commit mailer for Subversion to emails code to reviewers automatically after checkin is made.


Static testing without human analysis is called static code analysis, this is performed by an automated tool. Coverity is one of the tool that identifies security vulnerabilities and code defects, some say it is a very powerful, but it is very expensive as well - charge by per line of code it analyse. I wonder if it's worth because I only had a glance on it, for next few days I will take some time to deploy and test it.

There are other two statis analysis tools we use for our C# projects, they are both from Microsoft and they are free (uhh?). FxCop analyse .NET programs that compile to CIL object code, and StyleCop analyse C# source code to enforce a set of style and rules. Although FxCop was running there for a long time and its result appeared to be similiar to what we got from Coverity, but no one had ever care about them. Because they are from Microsoft and they are free, hence most of our developers think they are weak? what a pity.


These are just the tip of the iceberg in the entire software testing empire, but they covered most of what SCMer need to know and take care with. If your boss ask you to do anything more than tests that can be automated, you should suggset him/her to hire some more experienced tester to setup a testing team.

Remember, as the hub of the wheel we help but we don't do everything.

Wednesday, August 4, 2010

Clash of Titans: G.A.M on!

從第一輪起到現在,多數挑戰者都是採用了G大神的Android系統,在單一手機上也許愛鳳無敵,但G神要像上個世紀M帝一樣使出人海戰術,讓喬幫主的歷史再一次重演。

生果的的iOS與G神的Android,就好比上個世紀的MacOS與Windows之爭。MacOS是個人電腦的奠基者,有著1984年的iPhone之稱,創意與風頭都是一時無兩。但是其系統只出在自己生産的硬件上,自己的硬件也無法運行其他的系統,軟硬沒有分離,被後來居上的Windows超過。M帝只做軟不做硬,與intel結成了wintel聯盟,除了生果集團的硬件廠商都用它的,最後以量取勝。

和Windows一樣,G神推出Android,創意沒做到,先機沒搶到,但是現在卻穩步搶奪市場,因爲更多的手機開發商採用,就有更多的機型可供選擇,就有更多的使用者,然後就會有更多的開發者,更多的内容,而後鋪天蓋地。生果一年推出一支愛鳳,以精品取勝,可據一方,但要以一敵百,霸佔市場,恐怕很難。

不知道喬幫主還會不會讓自己重新走上幾十年前的老路?Android反其道以多搶攻,之後會佔上風,但要達到Windows在個人電腦市場上那種壟斷,應該也不行。畢竟M帝的Windows Mobile現在仍有手機平臺不少的份額,比之個人電腦那種OS格局,手機OS今後更有可能是三分天下再加上Symbian、RIM等其他攪局的情況。

RIM雖然現在仍然是美國境内購買量最多的智能手機OS,但因爲它因爲也是種生果(黑莓)所以只在自己的手機上裝專屬的OS,而且其本來的出發點就過於企業化,不具有大衆效果,所以逐步下滑被iOS與Android吞噬份額。其最終形態應是像電腦有專作服務器OS那樣的繼續守住商務區的一畝三分田了。

Symbian作爲最早的智能手機系統、Nokia作爲最大的手機制造商,至今仍然佔據半數以上的智能手機市場,但竟被認爲跟不上時代的步伐,不禁讓人感嘆一代江山一代人,前浪死在不思進取上。至於其他的Linux based系統(Intel的MeeGo、Samsung的bada),沒有更具創新的點籽及過硬的實力,想要尋找夾縫,極其之難。


以前說生果代表的是硬件、M帝代表的是軟件、G神代表的是網絡,但現在這三者相互競爭,領域並不局限於自己擅長的,也逐漸侵蝕到對方的市場,手機平臺的較量,只是一部分。現在的戰爭,就是全面戰爭,請看下回--G.A.M: Total War。