標籤:des os io 使用 檔案 資料 div 問題 sp
從第一次拖著行李入京找活,至今已工作若干年了。這些年一直追逐自己的夢想,跑過三個城市,換了三份工作,認識了很多業內的朋友。和朋友們閑聊時,發現很多人都已經不再做用戶端軟體了。有的轉去做管理,有的轉去做IOS,有的轉去做安卓,有的轉去做投資,“堅守”的人真的不多。曾經朋友開玩笑,說我們都是抱著微軟的大腿,如果微軟倒了,我們就失業了。我們說這句話時,多半是抱著戲謔的態度。時過境遷,隨著移動互連網的興起,PC的沒落是難免的。相應的PC用戶端沒落,從業人數減少,現在想招一個合格的windows程式員已經非常難了。或許是出於一種紀念,我想起編寫該系列部落格,和大家講講windows用戶端軟體開發中的點點技術。讓大家可以清晰瞭解到一款軟體的誕生之旅。
一般一款軟體的誕生會經過漫長的準備過程,比如立項、調研、互動設計、UI設計等。出於介紹Windows用戶端相關技術的目的,開發之前的所有步驟將一筆帶過。各個模組使用的技術細節也不會進行詳細的介紹,因為該系列博文側重於介紹實現模組所有“用”到的技術。同時出於考慮該系列博文主要針希望瞭解Windows開發軟體的同學,所以也不會使用一些複雜的技術——比如boost。但是為了不失去樂趣,我將介紹hook技術,並使用hook技術實現一些“不可思議”的功能。
以下為我將介紹的模組提綱和相關的技術:
- 介面。Windows之所以可以佔據PC端系統大部分份額,一個很重要的原因就是其有良好的介面互動。所以windows用戶端程式,一個很重要的因素便是介面。我經曆過很多項目,其中介面相關的重構及開發都佔據很大的比例。往往一個產品做到最後一個迭代,也是介面改動需求——say goodbye。所以這塊技術非常重要。目前這塊技術分為如下幾種:
- 視窗控制項類型。比如我們熟知的MFC和WTL,以及在這些基礎上封裝的金山貝殼UI引擎等。
- 無視窗控制項類型。比如DUI和Htmlayout,以及一些對瀏覽器核心封裝後的介面引擎。
- 網路。在互連網如此普及的年代,假如你的軟體沒有連網功能,那可能就真的out了。一般情況下,我們軟體會使用到如下網路行為:
- 上傳。除了一些無良的公司會偷偷上傳一些使用者資訊外,其中一個用到上傳功能的情境是:上傳崩潰分析日誌。
- 下載。下載是讓軟體實現更新功能的必要技術。如果一款軟體失去了自更新,我一般認為它就是“殭屍”了。因為它已經失去了“重生”的機會。
- 查詢。對於一些機密演算法,我們放在本地自然不合適,因為破解對高手來說是easy的。那麼我們通過網路向伺服器提供“物料”,讓儲存機密演算法的伺服器告知我們計算結果。
- 資料。資料的形式非常多。如果我們一旦涉及通訊,便會有資料參與。比如和伺服器通訊,我們可能需要對資料進行加密或者hash。我們會在之後介紹如下演算法的使用:
- MD5。它是一種hash演算法,之前人們一直認為該演算法是唯一性很高的演算法。它一般用於做資料校正。前幾年中國某大學教授發現MD5可以發生碰撞,但是MD5在電腦界的地位還是無法撼動的。可以說我們日常使用的軟體裡,幾乎都存在MD5演算法。特別是一些URL請求,其中一些欄位就是某些欄位組織後進行MD5計算後的結果。這對做過協議破解的人來說,應該是司空見慣的。
- AES。它是一種密碼編譯演算法,它是用於取代DES演算法的。
- DES。它也是一種密碼編譯演算法,但是已經out了,盡量使用AES吧。
資料是什麼格式,是CS端相互約定的。我將介紹如下兩種格式的使用:
資料如果過大,可能要壓縮或者解壓。這塊我將介紹兩種庫的使用:
- 日誌打點。日誌打點的作用不可小視。對於開發同學,日誌可以標識程式執行的脈絡,從而方便我們定位問題。對於產品互動設計同學,打點可以協助統計一個按鈕被按下多少次,是經過什麼順序被按下的,從而我們可以依據這些資料設計出更合理的互動。有時候,我們安裝一款軟體後,往往會有個勾選——協助我們改進。如果你勾選了,那麼這款軟體就會上傳這些日誌打點資訊。一般,每條日誌,都會攜帶使用者標誌資訊。對於沒有賬戶系統的軟體,使用者標誌一般是若干硬體資訊(硬碟序號等)組合後的結果。
- 崩潰。可能除了著名的Hello World,沒有哪款著名的程式可以保證自己不崩潰。對於折騰過破電腦或者安裝過很多殺軟的同學來說,應該見過藍屏是什麼樣子——作業系統崩潰了。連作業系統都會崩潰,更何況我們寫的程式呢?所以崩潰並不可怕,可怕的是我們不能收集崩潰日誌和不會分析崩潰日誌。這塊技術,我將講解兩個模組:
- 資料庫。任務一款軟體,都可能試圖在系統本地留點什麼——老子到此一遊。那軟體怎麼刻字,又刻在什麼地方呢?簡單點,寫幾個檔案就行了。複雜點就要使用到資料庫了。
以上基礎的模組介紹完後,我們會插入一些有意思的技術:
- 處理序間通訊。有時候,我們需要調用其他進程來完成任務。一種可能是這款軟體是我們自己寫的,我們可以在軟體代碼內部編寫處理序間通訊代碼。另一種是這款軟體只有固定的輸出,我們需要接管其輸出,完成單向通訊。
- 雲指令。這是一個非常有意思的主題。通過指令可配置化,我們可以像控制網頁一樣方便的控制用戶端的行為——一般情況下,如果我們要改變用戶端邏輯可能需要修改代碼並發布新的版本。採用雲指令後,我們只要改動伺服器配置便可以輕易完成對用戶端行為的改變,而不需要走漫長的發布和升級流程。
- 修改別的進程的行為(入侵)。入侵可能每個技術Geek都曾嘗試過的經曆。為了讓我們這次開發之旅變得有意思,我會在最後做個善意的“入侵”,完成一些好玩的功能。
希望經過這次旅程,大家可以對windows用戶端開發技術和模組有個瞭解。可以藉助該系列博文中的模組,快速搭建自己的應用。
VC開發Windows用戶端軟體之旅——前言