青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評論-2670  文章-0  trackbacks-0
    為了給自己寫的C++ GUI庫做宣傳,在幾個月前我決定要給他做一個網(wǎng)站,經(jīng)歷了這幾個月不斷的重構,現(xiàn)在網(wǎng)站的架構終于定型了。考慮到在這之前我?guī)缀鯖]有開發(fā)網(wǎng)站的經(jīng)驗,所以在這里做點小總結來介紹自己一路走來發(fā)生的事情。

    一開始為了制作這個網(wǎng)站購買了萬網(wǎng)的域名和一個很便宜的一年500塊錢的空間。這個空間支持低版本的asp.net,不過當時還沒學會這方面的東西。后來我就開始學習HTML和CSS,然后做出了幾個頁面。不同的瀏覽器有不同的bug,導致HTML和CSS搞起來相當復雜,特別是div和float的結合,更是焦頭爛額。后來索性整個網(wǎng)頁都用表格布局。雖然表格布局并不是什么流行的做法,但是鑒于GacUI的網(wǎng)站并沒有多么復雜的內(nèi)容,因此最后這么做,避開了很多跨瀏覽器的問題。當然以后如果網(wǎng)頁內(nèi)容變得太復雜的話總是要改回div的吧。對于常年寫圖形和編譯器方面的我來說,剛開始深入接觸HTM和CSS的時候就對他的雜亂無章所震驚。使用programming language領域的經(jīng)驗和標準來看,HTML、CSS和Javascript作為編程的工具實在是爛到不能再爛了。不過事物的存在總是有其合理性的,縱觀這三樣東西的發(fā)展和歷史,我們會發(fā)現(xiàn)其過程充滿了各種巧合,而且當初這些東西在發(fā)明的時候就僅僅是為了解決一些簡單的問題。如今流行了,就跟COBOL、Java和C語言一樣,全世界的程序員都只能接受其不可忽視的弱點而就這么開發(fā)下去了。

    在熟悉了簡單的HTML和CSS之后,我就開始給GacUI做網(wǎng)站了。這個網(wǎng)站的主要目的就是用來介紹GacUI的特點、展示一些Demo、告訴人們?nèi)绾蜗螺d并使用,最后就是提供一個在線文檔。文檔就跟MSDN一樣,當然搜索功能還不存在。剛開始就遇到了美工問題。技能書都點在了系統(tǒng)軟件上,自己的美工自然是連自己都不能滿足的。后來找了幾個例子,看來看去覺得還是http://www.codeplex.com最順眼。但是它的代碼復雜到吐血,我便只好依樣畫葫蘆,自己慢慢復刻。最后復刻的結果還是令我比較滿意的。在做完了導航條之后,我就發(fā)現(xiàn)了一個問題。如果不使用如今的框架來做網(wǎng)頁,而采用手寫的方法來生成HTML文件的話,勢必是無法DIY的。不過那個時候還沒有意識到這個問題的嚴重性,于是就采用了簡單粗暴的復制代碼的方法來做好那五個頁面。這也為我之后轉向Windows Azure埋下了伏筆。

    之后做Demo的展示頁面比較順利。因為目前展示Demo的方法就是先貼效果圖,然后貼C++代碼,十分的簡單粗暴。于是立刻就遇到了一個新的障礙,要如何寫一個類似MSDN的HTML文檔。其實這件事情跟做網(wǎng)站本身是沒什么關系的,但是自從決定了要提供在線文檔之后,這個問題也就無法避免了。C++生成文檔地方法之前略有研究,畢竟關于這個功能的一個簡單的原型就是我跟幾個朋友在大一的時候參加學校的軟件競賽的作品。后來還考慮過諸如Doxygen這樣的工具。但是由于Doxygen生成的文檔很難調(diào)整風格,使其整體融入我的網(wǎng)站的樣式里,因此最終就放棄了。然后我便想起了Visual Studio的XML注釋功能。在略為研究之后,我便給我的整個GacUI的類庫的public class編寫了XML注釋。當我最終要執(zhí)行生成文檔的這一步的時候,我才發(fā)現(xiàn)所有的工具都不支持原生C++程序和XML注釋的文檔生成功能。不過想來其實也有道理。Visual Studio在編譯了XML注釋之后提供的一個xml文件只包含符號和注釋的對應關系。至于符號究竟是什么內(nèi)容,則完全沒有。因此.net的程序是怎么生成文檔的呢?自然是利用反射了。C++的苦逼就在這里啊,除了直接寫代碼,就沒有任何方法。但是寫了這么多的XML文檔要放棄實在是太可惜了,所以我就不斷的找呀找,然后發(fā)現(xiàn)Visual Studio在安裝的時候提供了一個叫做DIA的庫,可以讓我閱讀pdb文件!

    這讓我欣喜若狂啊。既然Visual C++的調(diào)試器可以通過閱讀pdb就得到了一切的信息(看那個完美的調(diào)試器界面就知道了!),那我自然也可以從pdb里面找到所有東西的。抱著這個想法,我開始研究原生C++的pdb文件的符號的語義結構,后來就把我的經(jīng)驗寫成了這兩篇博客:http://www.shnenglu.com/vczh/archive/2012/03/10/167538.htmlhttp://www.shnenglu.com/vczh/archive/2012/03/10/167539.html。雖然PDB并沒有包含模板類的直接信息,不過這暫時不成問題,因為GacUI的大部分類也不是模板類。經(jīng)過了這些研究,我就得到了一個相當于靜態(tài)反射的功能了。之所以說是靜態(tài),是因為我沒辦法跟.net程序一樣通過反射來調(diào)用函數(shù)。但是這對于生成文檔來說已經(jīng)足夠了。后來我做了一件事情,就是寫了個程序,讀pdb獲得所有的符號dump出一份xml,然后再寫一個程序把xml里面的符號和Visual Studio產(chǎn)生的那個XML總注釋文件的符號聯(lián)系起來(這個過程有點復雜,因為兩邊的表示方法不一樣……),得到了一份既包含符號的完整內(nèi)容又包含對應的注釋的這么個幾十M的XML文件。之后我設計了一個簡單的文檔格式,寫了個程序把那個幾十M的XML文件轉換成用那個簡單的文檔格式表達的文檔。之所以這樣做是考慮到將來說不定除了HTML還要生成其他格式的文檔,于是就做了那么個程序可讀的中間格式。最后一步當然是讀這些文件產(chǎn)生HTML文件了。整個流程如下所示:

    PDB(VC++編譯器提供) -> Symbols.XML (因為DIA是一個COM組件,所以這一步我用C++寫,下面所有的步驟都用C#寫。C#用起來還是更容易啊……)
    Symbols.XML + Comment.XML(VC++編譯器提供) -> FullSymbols.XML
    FullSymbols.XML -> *.docitem.txt
    *.docitem.txt -> *.html

    經(jīng)過了這些步驟,我就得到了整整一個文件夾的一千五百多個HTML文件了。然后我把這些文件跟我的網(wǎng)站合并在一起上傳,就得到了第一個版本的GacUI網(wǎng)站了:http://www.gaclib.net。當然現(xiàn)在已經(jīng)看不到第一個版本的網(wǎng)站了。做完這些步驟之后,我就暫停了下來,繼續(xù)開發(fā)GacUI。一邊開發(fā)一邊產(chǎn)生Demo,添加Demo頁面,產(chǎn)生新的文檔,消滅一些沒用的函數(shù)的文檔。寫代碼的時候還比較容易,再把代碼的更改反映到這個網(wǎng)站的時候,就體現(xiàn)出了手寫純靜態(tài)網(wǎng)站的弱點:維護起來真TMD麻煩啊!雖然上面的這些步驟已經(jīng)被我合并到了一個bat文件,每次雙擊就能自動完成,但是修改Demo頁面的時候還是人肉的。這讓我十分不爽。

    一個偶然的機會,我用了信用卡注冊了一個Windows Azure的空間。這個空間其實并不powerful,只給了我相當于六顆CPU的計算能力。不過用來做這個網(wǎng)站已經(jīng)足夠了。想到每次修改網(wǎng)站都要復制HTML代碼,修改了結構的話還要動所有的HTML文件,煩了大概一個月之后我就下定決心要把HTML做成動態(tài)生成的。在看了Windows Azure的一些介紹之后,我覺得ASP.NET MVC3加上Windows Azure的簡單存儲功能十分適合用來作這種東西。

    剛開始接觸MVC3還是讓我覺得比較困難,不過最大的困難還是在于理解router的機制那里。GacUI的網(wǎng)站內(nèi)容簡單,所以并不需要ASP.NET的其他高級技術。結果所有的困難都出現(xiàn)在router機制里面。在經(jīng)過了兩天的學習之后,我初步的掌握了它的使用方法。MVC3的router基本上就是一個pattern matching的過程,把你的url映射到一個對controller的調(diào)用上面。你不僅可以映射controller的類名和函數(shù)名,還可以從url抽取一些參數(shù)。在掌握了它的原理之后,操作router的感覺就跟寫haskell一樣,又直接又清爽。接下來就是razor模板的事情。從programming language的觀點上看,razor是一個設計的相當出色地模板語言。第一個特點就是和宿主語言C#融合的十分緊密,第二個特點就是幾乎一點語法噪音都沒有。用過原始asp和php的人都知道代碼里面充滿了<%%>是一件十分令人討厭的事情。每一處代碼和HTML的切換都要<%%>,整個文件一眼望去就是一坨屎。razor很好地解決了這個問題。他采用了復雜的判斷方法來分辨哪些東西是C#,哪些東西是HTML。小部分C#和HTML的切換至需要一個@符號就搞定了,大部分的切換都是自動的。雖然偶爾razor會有分析錯誤的情況,但是他仍然提供了@:操作符來讓我們workaround這個分析過程。整個模板語言下來毫無語法噪音,寫起來十分直接,十分干凈。

    在網(wǎng)站差不多做完之后,我往生成HTML文檔的程序添加了一個功能:生成一個包含HTML文檔內(nèi)容和元數(shù)據(jù)的XML。然后我寫了一個程序把這一大堆XML灌入了Windows Azure的Blob Storage里面。Blob Storage就跟一個硬盤一樣,可以用來存放大量的不需要計算(SQL數(shù)據(jù)庫就屬于那種需要計算的)數(shù)據(jù)。然后我給每一個文檔頁面建立了一個統(tǒng)一的Model,Model里面包含了“讀取和分析這些XML文件”的功能,controller則做一個簡單的轉發(fā),最后在model里面把所有被Model標記出來的需要改寫的URL都用@Url.Action來處理。在這個過程中我學到了一個razor的小技巧:雖然不是很安全,但是在razor里面使用MvcHtmlString可以繞過html encoding的功能,把存儲在變量里面的HTML代碼直接嵌進頁面。這么用的時候需要有清醒的意識。

    如今GacUI終于有了鏡像網(wǎng)站:http://asia.gaclib.nethttp://us.gaclib.net了。萬網(wǎng)的破爛空間自然不可能直接訪問Windows Azure Storage了。所以我采用了一個看起來比較傻逼的方法。首先我修改好網(wǎng)站之后,上傳到EastAsia和West US兩個服務器,然后我寫了一個程序再把每一個生成好的HTML頁面下載下來。下載的過程其實就和寫爬蟲差不多,每獲得一個新的HTML文件就去分析里面的鏈接,然后繼續(xù)下載。寫完了之后我發(fā)現(xiàn)這個小程序還有了發(fā)現(xiàn)死鏈的功能,直接找出了網(wǎng)站代碼的幾個bug。下載完之后FTP到萬網(wǎng)的空間里面。這個服務器在杭州。因此網(wǎng)站就有三個服務器了。

    整個過程零零碎碎耗費了大約半年的時間,都是利用每天下班后的時間完成的。自己又點了技能樹的一個新子樹,漲了點經(jīng)驗值,覺得這些經(jīng)驗對于某些人來說可能還有參考的價值,于是就寫了這篇博客,大家共勉。
posted on 2012-07-09 10:27 陳梓瀚(vczh) 閱讀(4711) 評論(9)  編輯 收藏 引用 所屬分類: 其他GacUI

評論:
# re: 終于點了ASP.NET MVC3的技能樹了[未登錄] 2012-07-09 19:02 | kk
直接放在github上不就完了,有項目主頁功能。
再不計,用bootstrap,backbone之類也簡單死了。。  回復  更多評論
  
# re: 終于點了ASP.NET MVC3的技能樹了 2012-07-09 19:42 | lwch
向始終活躍在cppblog的同志致敬:)  回復  更多評論
  
# re: 終于點了ASP.NET MVC3的技能樹了 2012-07-09 19:57 | 陳梓瀚(vczh)
@kk
我是堅定不移的codeplex黨和造輪子先鋒隊員啊  回復  更多評論
  
# re: 終于點了ASP.NET MVC3的技能樹了 2012-07-09 21:40 | Kevin Lynx
有很多根據(jù)rst或markdown之類的標記語言直接生成整個HTML站點的工具。很多程序庫的網(wǎng)站都是這樣干的。https://github.com/search?q=static+site&type=Everything&repo=&langOverride=&start_value=1  回復  更多評論
  
# re: 終于點了ASP.NET MVC3的技能樹了 2012-07-10 04:41 | 陳梓瀚(vczh)
@Kevin Lynx
隔行如隔山吶……  回復  更多評論
  
# re: 終于點了ASP.NET MVC3的技能樹了 2012-07-15 18:57 | phoenixbing
生命不息,折騰不止
  回復  更多評論
  
# re: 終于點了ASP.NET MVC3的技能樹了 2012-07-17 00:57 | zaccheo
樓主的這個庫不支持xp嗎?
RemoveClipboardFormatListener 這個api xp 是不支持的。  回復  更多評論
  
# re: 終于點了ASP.NET MVC3的技能樹了 2012-07-19 20:41 | wxd
堅定不移的codeplex黨和造輪子先鋒隊員:)  回復  更多評論
  
# re: 終于點了ASP.NET MVC3的技能樹了 2012-07-26 03:52 | 張振渠
都生成了靜態(tài)呀,速度很快。。。  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品乱码久久久久久蜜桃麻豆| 国产精品美女久久久久久免费| 国产亚洲女人久久久久毛片| 亚洲综合国产激情另类一区| 国产精品一卡二卡| 国产专区综合网| 久久天天躁夜夜躁狠狠躁2022 | 亚洲国产欧美一区二区三区同亚洲 | 性久久久久久久久| 国产在线精品一区二区中文| 久久久一本精品99久久精品66| 欧美一区二区精品在线| 亚洲高清电影| 亚洲毛片视频| 国产日韩在线视频| 欧美国产精品v| 欧美日韩中文字幕| 久久久一二三| 欧美日韩视频在线观看一区二区三区| 亚洲一区二区免费视频| 欧美一区二区三区四区视频| 亚洲激情不卡| 亚洲影院在线观看| 亚洲人成绝费网站色www| 9人人澡人人爽人人精品| 国产小视频国产精品| 欧美激情国产日韩| 国产精品一区二区久久| 欧美大学生性色视频| 国产精品久久波多野结衣| 久久综合伊人| 国产精品久久久久国产a级| 美日韩免费视频| 欧美日韩亚洲三区| 欧美成人精品激情在线观看| 国产精品久久久亚洲一区| 欧美二区在线播放| 国产日韩精品久久| 日韩天堂在线观看| 在线日韩av永久免费观看| av72成人在线| 亚洲精品日韩一| 久久久久九九九九| 欧美一级二级三级蜜桃| 欧美日韩精品二区第二页| 欧美高清不卡| 黄色成人av网| 亚洲欧美日韩中文在线制服| 一区二区日韩免费看| 开心色5月久久精品| 久久蜜桃精品| 国产一区二区三区不卡在线观看| 亚洲美女91| 99精品欧美一区二区三区综合在线| 欧美一区二区三区精品| 欧美一级专区免费大片| 欧美午夜在线视频| aa级大片欧美三级| 亚洲小视频在线观看| 欧美精品一区二区三区一线天视频 | 亚洲影视中文字幕| 一区二区高清在线观看| 欧美国产一区视频在线观看| 老牛国产精品一区的观看方式| 国产欧美视频一区二区| 亚洲一区免费网站| 欧美一区二视频| 国产精品综合视频| 欧美一区在线直播| 久久综合福利| 在线观看亚洲一区| 欧美成人免费全部| 亚洲人久久久| 亚洲一区免费视频| 国产精品热久久久久夜色精品三区| 一本综合精品| 欧美伊人久久| 激情综合视频| 久久综合给合久久狠狠色| 欧美高清视频在线播放| 亚洲毛片在线免费观看| 欧美精品 日韩| 中文日韩欧美| 久久免费观看视频| 亚洲国产欧美日韩另类综合| 欧美电影免费观看网站| 一区二区av在线| 久久精品夜色噜噜亚洲aⅴ| 黄色一区二区三区四区| 欧美电影美腿模特1979在线看| 亚洲狼人综合| 久久精品青青大伊人av| 亚洲狠狠婷婷| 国产精品免费一区豆花| 久久精品道一区二区三区| 欧美福利视频网站| 亚洲欧美国产三级| 激情久久久久久| 欧美日韩另类一区| 午夜日韩视频| 亚洲精品综合久久中文字幕| 午夜精品美女久久久久av福利| 黑人一区二区三区四区五区| 欧美激情视频一区二区三区免费 | 久久久久久久久久看片| 91久久精品国产91久久性色tv| 亚洲欧美一区二区精品久久久| 伊人久久大香线| 国产精品人人爽人人做我的可爱| 久久久久久久一区二区三区| 999亚洲国产精| 免费日韩av片| 小处雏高清一区二区三区| 亚洲黄页一区| 激情成人中文字幕| 国产精品一区二区久久久久| 另类酷文…触手系列精品集v1小说| 亚洲乱码精品一二三四区日韩在线 | 久久综合一区二区| 亚洲伊人久久综合| 亚洲国产精品综合| 久久久精彩视频| 亚洲欧美激情四射在线日| 亚洲人永久免费| 伊人久久大香线蕉av超碰演员| 国产精品美女xx| 欧美精品一区三区在线观看| 欧美一区二区三区免费看| 在线综合亚洲欧美在线视频| 欧美承认网站| 麻豆精品在线视频| 久久精品国产99精品国产亚洲性色| 在线午夜精品| 99re8这里有精品热视频免费| 精品1区2区3区4区| 国产一区二区三区网站| 国产精品视频精品视频| 欧美视频四区| 欧美午夜不卡在线观看免费| 欧美精品www| 欧美精品v国产精品v日韩精品| 久热精品视频在线| 久久精品三级| 久久久亚洲高清| 久久综合九色欧美综合狠狠| 久久久91精品国产一区二区三区| 久久av一区二区三区| 久久爱www.| 久久久久久综合| 老司机久久99久久精品播放免费| 久久久女女女女999久久| 久久久精品免费视频| 久久字幕精品一区| 欧美大片网址| 欧美日韩亚洲一区二区三区在线观看| 欧美极品在线播放| 欧美三级小说| 国产农村妇女精品一二区| 国产亚洲欧美日韩精品| 精品成人a区在线观看| 亚洲国产午夜| 中文精品一区二区三区| 亚洲永久免费观看| 久久av在线看| 欧美成人精品在线| 亚洲第一在线视频| 亚洲欧洲视频在线| 亚洲一区二区在线观看视频| 欧美在线视频在线播放完整版免费观看| 久久精品在线播放| 欧美激情偷拍| 国产欧美一级| 亚洲精品偷拍| 久久国产毛片| 91久久极品少妇xxxxⅹ软件| 一区二区三区国产| 久久视频在线看| 欧美日韩一区在线| 一区二区亚洲精品| 亚洲午夜未删减在线观看| 欧美中文字幕在线观看| 亚洲电影免费观看高清完整版在线| 9l国产精品久久久久麻豆| 久久国产精品久久久| 欧美日韩国产麻豆| 激情小说亚洲一区| 亚洲一区二区三区精品视频| 久久久视频精品| 中文亚洲视频在线| 欧美1区免费| 国内外成人免费激情在线视频 | 欧美视频一区在线| 亚洲国产高清一区| 欧美一级久久| 亚洲精品小视频在线观看| 欧美在线观看一区二区| 欧美体内she精视频在线观看| 韩国欧美国产1区| 香蕉久久国产| 亚洲少妇自拍|