代碼風格問題續

剛說完代碼風格問題,今天下午來了個Bug。

也是個小概率事件啦,我扔出去的指針,在對象已經被釋放了的情況下,仍然被外面拿著,結果就崩了……如果換成Handle就肯定不會有這個問題。

這個Bug本來很難踫到,從邏輯上來說幾乎是不可能的,這次踫到是因爲打了個斷點,在某個方法内停留得太久導致的。今天臨時的做法是加了一個析構的Notify,通知外面不要Hold這個指針了。

我在想要不要統一改用Handle算了。不過這樣會導致性能的下降,因爲外面每次對這個對象進行操作都要有一個從Handle到對象的查找。還有一種做法是智能指針,或者自己實現引用計數。

其實我的代碼裏面已經有引用計數了,不過沒有暴露出去。

關於代碼風格的問題

代碼風格一向是仁者見仁,智者見智的,不過我一直認爲人在寫代碼的時候,或多或少都會被現有的代碼風格所影響,而這個,有時候會影響思路,進而,儅需要實現一個新功能的時候,會影響這個新功能的架構,或者說,實現的方法。

我現在工作的項目,原來是由三個人來做的,我的小Leader,我的一個同事和我。一開始我和我的小Leader的風格或者說思路就很不一樣:他更傾向于C的風格,結構比較平坦;而我更傾向于C++的風格,喜歡做一些封裝,雖然還不至於成了過度封裝。這個也影響對外接口的設計,他的設計裏面,一般都用自己分配一個整數來作爲一個Handle來標識資源,對這類資源的所有操作都通過一個Manager類來完成;而我則比較簡單,把資源包在一個類裏面,把這個對象的純虛接口的指針直接暴露給外界。

我們一起合作的時候,由於我那時經驗不夠,不覺得是個問題,而我小Leader估計是覺得他的架構都做得差不多了,我再怎麽做也不會有太大的影響,再加上我在一些可能會影響到以後的實現思路或者新功能添加的地方都會準備兩個方案和他討論一下,所以他也沒有說什麽。

大概一年前,這個項目完成了大半,框架基本上定下來了,他去了另外一個項目,然後就把這個項目交給了我……而在這一年裏面,這個項目的確也是在原有框架下穩定發展,畢竟主要功能都已經差不多了,要做的也就是一些修補,或者加一些小的地方,或者是實現原來就預留了但那時候沒有來得及做的功能。

前幾天(其實也有兩個星期了)我在做一個新功能的時候,想讓它有更大的靈活性,就想看看如何讓它更好融合到現有框架裏面,結果發現了我之前一直視而不見的小Leader的一行註釋,和我現在的想法是完全不同,往大了說幾乎是兩個極端。最後我決定這個新功能按我的思路做下去,在原來的架構上加一個小瑕疵,而不動原來的架構。但是我最近就時不時想起這個問題,雖然目前的做法還沒有引起問題,僅僅是代碼看上去不是那麽的漂亮,但是繼續下去的話,就不知道在以後如果有類似問題的時候會不會引發大問題了。

我知道我有點吹毛求疵或者杞人憂天,但是這個可能性還是存在的。而且維護起來也會讓人覺得一點點不爽。

前幾天(這就真的是前幾天了)還和偉哥討論了一下,我說C++就要有C++的樣子,什麽樣的語言就干什麽事。他說其實還是要看實際應用的,他也會在C++上面寫更像C的程序云云。我們討論了好長時間(貌似到晚上1點多快2點了),最後勉強把我說服了,不過,如何補救現有代碼,或者,還是就讓他這樣子了,反正以後基本上也不會有大動筋骨的改動。我還沒有一個令我滿意答案。

但其實很顯而易見的是,目前不動它的話,應該不會有問題,而在補救的時候,更容易出問題。現在就讓它拖下去吧,在我可預見的將來,我還沒有看到對框架進行大改動的需要,等到這個需要來了,“補救”方案也許就水到渠成了。

其實,也許,這真不是什麽大問題…………

空椅子

就是這樣子的空椅子
空椅子
挪威市政廳會議現場
视频截图
主席臺上的空椅子
主席台
證書頒給了椅子
证书

加了友情鏈接

在右邊加勒友情鏈接,看來要認真學學圖書館學,都不知道怎麽分類了- -b。先這樣吧。

是從我的Google Reader裏面挑出來的。為了干這個順便還整理了一下我的Google Reader,把“好友的Blog”標簽全部整理了一遍,將2010年沒有更新的Blog放入了“不再更新的Blog”裏面……同時這次添加的友情鏈接都是在2010年裏面至少更新過一次的。

比較特殊的是夏老同學,不知道什麽時候就將她的Blog設為私密的了,雖然在2010年有更新,不過也沒有做鏈接了……

建了個新的數據庫

原來我的博客和偉哥的博客是在同一個數据庫(Database,或者說Schemas)裏面的,根據不同的表的前綴來區分,後來在用WP-DBManager插件的時候,發現它是管理整個數據庫的,每次備份、還原都同時影響我們的博客,這就讓我很不爽了。

於是我今天就建了一個新的數據庫,然後把舊的内容都倒過去……

小額捐款

自從奧巴馬上臺以來,小額捐款這種捐款形式就越來越被中國人所了解。

小額捐款對於一個捐贈人來説開銷並不大,但是對於捐贈人的心理意義是很大的,使人有一種參與感和責任感。當然了,小額捐款也是有條件的,需要有方便的支付方式,例如網絡支付。

上個月結石寶寶之父趙連海被判刑的時候,我就給他捐了6塊錢。數額不多,幾乎是所有人都能承受的。

今天我給維基百科(注意:和現在很熱的維基解密沒有半點關係)捐了6美元。雖然我在維基百科並不活躍,只是羅列了一堆模板的用戶頁也800年沒有更新了。

就這樣吧。

通脹與房價

這篇東西其實想寫了好久了,一直都沒有時間。

最近幾個星期以來,CCTV2早上9點的新聞頭條大部分都是和穩定物價有關的,而且,無一例外,都是以行政命令,紅頭文件的方式。這説明大規模通脹已經來了,國家所謂的調控永遠是慢半拍的,永遠是不見棺材不流淚的,永遠是等到病入骨髓才如夢初醒然後拼命下猛藥造成更嚴重的後遺症的。

我一向認爲用行政命令干預經濟是最愚蠢的事情。不管什麽行政命令,都有空子可鑽,都會有陽奉陰違的問題。用行政命令控制某件商品的價格,很容易挫傷生産者的積極性,購買者也會覺得物超所值而大量購買,導致供不應求,之後就產生黑市,而黑市的交易成本是相當高的,而且黑市的價格是無法用行政命令管制的,此商品的實際價格反而會變得更高。看看朝鮮就知道了。

前不久,溫傢寳在澳門的時候,承認房價很難降下來,“如果買不起,可以先租著”

這也説明,他的工作重心,基本上已經從調房價轉移到控通脹裏面了。而房價的提升,可以吸收不少增發的貨幣,可以拉低通脹,所以,如果繼續通脹下去的話,那麽,説不定,政府會通過刻意拉高房價的做法,來吸收一部分通脹,以保證“關係到國計民生”例如糧食等物資不至於漲得讓民衆造反。

所以我覺得現在可能是買房子的一個比較好的時機,至少現在應該是處在一個極小值上。不過最好之後在比較恰當的時機賣掉。如果現在不買,可能,就要等2~3年甚至更長的時間,等通脹大規模爆發得差不多了,中國經濟停滯甚至倒退,很大一部分人破產,經濟硬著陸,到那個時候,房價應該能徹底回歸正常……我發現我對中國的未來的看法真悲觀阿……

nginx單IP多域名多ssl證書的配置

今天無意中和@snnn119說起SSL的事情,我才發現居然現在有免費的SSL證書了。搜了一下,發現從2009年的9月開始,微軟就把startssl加進根證書列表裏面了……

好吧。記錄一下。

首先去http://www.startssl.com,點左上角的“Sign Up”來申請一個帳號。

填一堆註冊信息之後,會發封郵件給你,把郵件裏面的驗證碼填上后,賬號就算註冊好了。不過這個還不夠,馬上就會要“認證”郵件。其實就是給你郵箱再發一封驗證碼,然後再填一次,然後就徹底Ok了。

之後是“認證”域名。

Control Panel》Validations Wizard,然後選擇“Domain Name Validation”,然後輸入域名,然後選擇是往whois裏面的郵箱、[email protected]domain、 [email protected][email protected]其中的一個發驗證碼,收到之後再填回去就算是認證成功了。

然後就是生成SSL的key和cer。

選擇“Certificates Wizard”,然後選擇“Web Server SSL/TLS Certificate”,輸入一個密碼,然後重復(一定要記下來,這個很重要,配置好nginx之後每次重啓nginx都要用,也可以去Tools那裏Decrypt一下,就不用了),然後就可以生成一個private key了。然後輸入子域名,就可以生成cer文件了。

如果有多個子域名,那麽就生成多對key/cer文件。

然後就是配置nginx了。之前聽説一個IP只能對應一個SSL證書,經過@snnn119的講解,這個也是正常的,畢竟要先要根據證書建立一個SSL連接,然後再在上面走http協議。我是根據這個教程來配的。

我的是這樣的:

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
  listen 443; #端口
  ssl on;  #打開SSL
  ssl_session_timeout 5m; #ssl超時
  server_name blog.netson-cn.net; #域名
  ssl_certificate blogssl.cer; #給blog.netson-cn.net生成的cer文件的地址
  ssl_certificate_key blogssl.key; #對應的key文件

  #日誌地址
  access_log /var/log/nginx/ssl-blog.netson-cn.net.access.log;
  #我之前把根目錄、php配置、50x錯誤頁面等内容都放在這個文件裏面了,這下省事了:)
  include wordpress-netson.conf;
}

説白了就是建立多一個nginx的虛擬機,端口是443,打開ssl……

之後測試成功了……然後我想死馬儅活馬騎,生成了另外一個子域的key和cer,照貓畵虎再配一遍……於是,很意外地,成功了……一點周折都沒有……

不過這可把@snnn119奇怪坏了,我這完全是瞎貓撞死老虎,SSL的原理一點都不懂,配好了也是知其然不知其所以然的……到這會兒人家還在研究這究竟咋回事呢……而我就悠哉遊哉得寫這篇Blog了……

PS:根據@snnn119的最新研究研究結果表明,用linux下的wget訪問排在nginx配置文件後面的那個子域的話,會用第一個子域的key,導致驗證失敗,但是用瀏覽器FireFox 3.6,IE8則沒有這個問題,“wget请求的时候,没有把servername带上。而浏览器带的有”,而在連接ssl的時候帶上servername,“是以TLSv1的extension的方式出现的”。

PSS:@snnn119同學發了一篇Blog詳細地説了一下原理。

最重要的是下面的内容:

库:

  • openssl: 0.9.8f

客户端:

  • Mozilla Firefox 2.0 or later
  • Opera 8.0 or later (with TLS 1.1 enabled)
  • Internet Explorer 7.0 or later (on Vista, not XP)
  • Google Chrome
  • Safari 3.2.1 on Mac OS X 10.5.6

服务器:

  • apache/nginx的较新版本都支持,主要取决于tls库(比如openssl)。

也就是說,在XP下面,並且用IE的話,如果用HTTPS訪問nginx配置文件裏面排在後面的ssl虛擬機,就會報一個證書不匹配的錯誤。

Tags: , , ,

Firefox導入證書的問題

今天嘗試弄SSL證書,申請了個StartSSL(這個以後再説),發現在StartSSL登錄居然是用證書的。從公司備份了證書回家后發現在我的Firefox下不能導入,報告“PKCS #12 文件失敗,原因未知”,但是在IE下面卻能導入成功。

上網搜了一下,發現這篇文章。原來如此。禁用TorButton之後導入成功。後來乾脆把TorButton卸掉了,反正現在用AutoProxy+SSH,不用Tor了。

VPS記錄(6)

本來想自己架一個mail服務器的,後來忽然想到Google自己就提供免費的小型企業服務,其中就包括郵箱,於是就註冊了個Google App……

注意:是Google Apps,不是Google Apps for Business,後者要收費的。

首先來這裡註冊:http://www.google.com/apps/intl/zh-CN/group/index.html,然後要驗證域名,又兩種方法,一種是增加一個給定的隨機CNAME子域,一個是在你的域名下上傳一個指定的html文件,我就添加了一個CNAME子域,指向google.com。

裏面的内容都是中文的,按照提示來就是了,網上教程也有很多,都沒有什麽困難。

比較鬱悶的就是web登陸,默認的管理地址是https://sites.google.com/a/netson-cn.net, 郵件地址是https://mail.google.com/a/netson-cn.net,我想把它分別改爲sites.netson-cn.net和mail.netson-cn.net,按照Google的説明都改好了,可是還不行……我還以爲是改域名的滯後性,不過之前改A記錄和驗證域名的CNAME記錄都是很快地生效的阿,晚上回家的時候,死馬儅活馬騎,開了全局代理再試一次——行了!原來ghs.google.com被墻了……

搜了一下網上的解決方案,都沒有啥一勞永逸的做法,反正我也不怎麽web登錄,那就不管了,就這麽着吧……

所以,我現在的郵件地址是:netson(at)netson-cn.net。

Tags: , , ,