• <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>

            2009年1月19日

            因?yàn)樽罱玫絉PC,考察了一下thrift(facebook用的一套rpc框架)和google protocol buffer。

            thrift支持的語言非常多,不光支持c++,java,python,ruby等非常流行的語言外還支持ocaml,Squeak等很少見的語言,比google protocol buffer好多了,而且已經(jīng)內(nèi)置RPC,不像google protocol buffer的RPC還藏著掖著。比較google protocol buffer和thrift的文章比較多,其中g(shù)oogle到的比較靠前的一篇blog指出thift的c++版本對(duì)windows支持不好,我一開始也是覺得如此,主要是thrift只提供了autoconf,automake作為構(gòu)建工具,在windows上只能用cygwin或者msys才能比較方便的編譯,而google protocol buffer提供了vc的工程文件。另外在代碼的規(guī)范性方面,的確是google protocol buffer更好。

            此次移植的目的是在windows上運(yùn)行的client和compiler,因?yàn)閟erver肯定是用linux的,移植沒太大必要。根據(jù)我從前移植代碼的經(jīng)驗(yàn),發(fā)現(xiàn)妨礙移植的關(guān)鍵在于系統(tǒng)api的差異,或者是某些依賴庫的差異,如果差異太大,則移植比較麻煩。另外,在移植時(shí)我比較傾向于先移植一個(gè)最小的功能集合,并逐步完善。

            在泛讀了thrift的代碼和文檔后發(fā)現(xiàn)thrift中并沒有用到非常難于移植的api,我先用thrift compiler開始,thrift compiler很簡單,基本不用修改就可以在vc2008上編譯,主要依賴的是flex和bison,在windows下也都不難找到,也可以在linux生成后,再把生成的thriftl.cc,thrifty.cc和thrifty.h直接copy過來使用。編譯完成后發(fā)現(xiàn)在處理include和externs的時(shí)候有問題,主要是linux和windows的路徑分隔符("/"和"\\")的差異,修改main.cc里面的program_name和directory_name就可以解決了,這個(gè)問題在msys下面也存在。

            接下來就是client和server了,我打算主要使用Framed Transport+Binary protocol+nonblocking server,因?yàn)槭褂玫氖莑ibevent(在windows上已經(jīng)有移植,直接拿過來用就可以了,在linux上面用的是epoll,性能也不錯(cuò)),也沒有其他的依賴庫,移植起來還是比較方便的。

            先從client開始,在TSocket中因?yàn)槭褂昧藀oll來進(jìn)行超時(shí)處理,先改成阻塞方式,將所有的非阻塞和poll相關(guān)代碼注釋掉,基本可以編譯成功,然后還有就是ctime_t的地方可以用vc的ctime_s代替,但是dbgtime的長度要改成26。運(yùn)行tutorial沒什么問題。然后就是加入超時(shí)處理了,雖然ms在windows server 2008里面引入了WSAPoll,我用的是xp,只有用select來模擬一個(gè)poll了,反正功能差不多,只是接口不太一樣。完成后就可以生成基本的client runtime庫了。

            至于server,大致看了一下,里面主要的問題是使用了socketpair和poll,主要是用來做libevent的通知。不過socketpair就自己建兩個(gè)socket然后連接起來就可以了,poll用之前client的select模擬實(shí)現(xiàn),移植起來問題應(yīng)該不大。

            client的代碼因?yàn)橐浦矔r(shí)間比較緊,只有半天時(shí)間,還沒清理,就不放上來丟人了。

            只發(fā)一個(gè)tutorial的client的exe(需要vc9的runtime才能運(yùn)行),修改后的Framed Transport+Binary protocol+nonblocking server的linux server代碼和compiler的vc9工程代碼。下載





            posted @ 2009-01-19 14:39 BoolKinG| 編輯 收藏

            2007年1月8日

            vs2005sp1出來已經(jīng)有一段時(shí)間了,由于安裝速度太慢,我一直都沒有安裝,今天遇到一個(gè)vs的bug,不得已需要安裝sp1,上網(wǎng)找了一下,發(fā)現(xiàn)一個(gè)解決安裝速度慢的方案。
            之所以速度慢是很大程度上是因?yàn)閣indows installer的cache造成,在安裝時(shí)暫時(shí)禁用掉windows installer的cache可以極大的加速sp1的安裝,而且可以節(jié)省1.3G的磁盤空間。
            將下面的代碼存為bat文件,通過這個(gè)bat來安裝sp1

            reg?export?HKLM\Software\Policies\Microsoft\Windows\Installer?installer.reg
            reg?add?HKLM\Software\Policies\Microsoft\Windows\Installer?
            /v?MaxPatchCacheSize?/t?REG_DWORD?/d?0?/f
            net?stop?msiserver
            start?
            /wait?VS80sp1-KB926601-X86-ENU.exe
            reg?delete?HKLM\Software\Policies\Microsoft\Windows\Installer?
            /v?MaxPatchCacheSize?/f
            reg?import?installer.reg
            net?stop?msiserver
            del?
            /q?installer.reg?2>nul


            另外,VS2005的intellisense對(duì)C++來說實(shí)在太慢,代碼量大的時(shí)候cpu占用率一直在100%,功能也比不上VA,將Microsoft Visual Studio 8\VC\vcpackages\feacp.dll改名直接禁用之。

            posted @ 2007-01-08 14:29 BoolKinG| 編輯 收藏

            2006年7月1日

            BumpTop
            http://bumptop.ca/




            看演示非常不錯(cuò)
            對(duì)于我這種喜歡什么都放在windows桌面上的人是再合適不過的了,只用鼠標(biāo)一拖,所有的東西都自動(dòng)排好堆成一摞,而且查閱起來也非常方便。

            現(xiàn)在還沒有可供測(cè)試的版本,希望很快可以用上

            posted @ 2006-07-01 13:01 BoolKinG| 編輯 收藏

            2006年6月19日

            近日下載了一個(gè)VC2005 Express Edition,用它來編譯boost,發(fā)現(xiàn)有不少的warning C4819,說代碼文件中有cp936無法表示的字符,還有就是vc2005特有的廢棄的ANSI函數(shù)的錯(cuò)誤,雖說不影響編譯,但是看著時(shí)不時(shí)出現(xiàn)的warning總是讓人心神不安,還容易掩蓋其他的錯(cuò)誤,如果是直接用cl編譯,只要加上/wd4819 /D_CRT_SECURE_NO_DEPRECATE就可以不顯示這兩個(gè)錯(cuò)誤,但是大家都知道boost是使用其特有的boost.build進(jìn)行編譯的,下面我就給出如何修改boost.build來抑制這兩個(gè)錯(cuò)誤的顯示

            boost.build分為v1和v2兩個(gè)版本
            v1:
            修改$(BOOST_ROOT)/tools/build/v1/vc-8_0-tools.jam

            flags?vc - 8_0?C ++ FLAGS?:? / Zc:forScope?;

            改為

            flags?vc - 8_0?C ++ FLAGS?:? / Zc:forScope? / wd4819? / D_CRT_SECURE_NO_DEPRECATE?;

            v2:
            cvs版本
            修改$(BOOST_ROOT)/tools/build/v2/tools/msvc.jam

            #? 8.0 ?adds?some?more?options

            一行的下方加上

            flags?msvc.compile?CFLAGS?$(condition)?:? / wd4819? / D_CRT_SECURE_NO_DEPRECATE?;

            boost 1.33.1版本

            ????#? 8.0 ?deprecates?some?of?the?options
            ????
            if ? ! ?[?MATCH? ^ ([ 67 ]. * )?:?$(version)?]?
            ????{
            ????????flags?msvc.compile?CFLAGS?$(condition)
            /< optimization > speed?:? / O2?;
            ????????flags?msvc.compile?CFLAGS?$(condition)
            /< optimization > space?:? / O1?;
            ????????flags?msvc.link.dll?MANIFEST?:?
            " mt?-manifest? " ?;
            ????????flags?msvc.link.dll?OUTPUTRESOURCE?:?
            " -outputresource: " ?;
            ????}

            改為:

            ????#? 8.0 ?deprecates?some?of?the?options
            ????
            if ? ! ?[?MATCH? ^ ([ 67 ]. * )?:?$(version)?]?
            ????{
            ????????flags?msvc.compile?CFLAGS?$(condition)?:?
            / wd4819? / D_CRT_SECURE_NO_DEPRECATE?;
            ????????flags?msvc.compile?CFLAGS?$(condition)
            /< optimization > speed?:? / O2?;
            ????????flags?msvc.compile?CFLAGS?$(condition)
            /< optimization > space?:? / O1?;
            ????????flags?msvc.link.dll?MANIFEST?:?
            " mt?-manifest? " ?;
            ????????flags?msvc.link.dll?OUTPUTRESOURCE?:?
            " -outputresource: " ?;
            ????}
            posted @ 2006-06-19 17:44 BoolKinG| 編輯 收藏

            2006年6月7日

            學(xué)過C/C++語言的都知道程序的執(zhí)行從main函數(shù)開始(先不說static對(duì)象和CRT),大部分學(xué)過C/C++的也都知道m(xù)ain可以有int main()和int main(int argc, char**argv)的參數(shù)格式,有不少人還知道int main(int, char**, char**)的參數(shù)形式,返回值也可以為void,但是為什么C/C++ compiler能夠支持這些格式呢?在初學(xué)C的時(shí)候,我以為是編譯器內(nèi)置的功能來支持

            近日研究VC的CRT,發(fā)現(xiàn)原來是通過調(diào)用規(guī)范(calling coventions)實(shí)現(xiàn)的。
            調(diào)用規(guī)范分為參數(shù)傳遞次序,調(diào)用棧維護(hù),命名修飾和大小寫轉(zhuǎn)換4個(gè)規(guī)范組成。

            大部分的C語言編譯器(至少是在x86架構(gòu)上)遵循以下的規(guī)范
            命名修飾和大小寫轉(zhuǎn)換:無論函數(shù)的signature是什么樣子,在編譯時(shí)會(huì)將名為“Xxxx”的函數(shù)轉(zhuǎn)換為“_Xxxx”的形式,即在函數(shù)名前面加上“_”,大小寫不變,也就是說不管是什么形式的main函數(shù),有沒有返回值,有多少個(gè)參數(shù)都會(huì)在編譯時(shí)轉(zhuǎn)換為_main。因此雖然在CRT中使用的是
            int?__cdecl main(int,?char?**,?char?**);

            的形式聲明的main函數(shù),但是在鏈接的時(shí)候無論是什么形式的main都符合要求,只不過除了在文章開始提到的3種形式有意義外,其他的參數(shù)格式要么是得到無意義的值,要么還會(huì)溢出調(diào)用棧(使用超過3個(gè)參數(shù))
            測(cè)試代碼如下:

            int?main(int?a1,?char*?a2,?unsigned?long?a3,?float?a4,?double?a5,?unsinged?int?a6)
            {
            ?printf(
            "Hello?World!\n");
            ?
            return?0;
            }

            ?

            posted @ 2006-06-07 17:40 BoolKinG| 編輯 收藏

            2006年5月14日

            現(xiàn)在的工作是在unix平臺(tái),平時(shí)是用UE的ftp功能來寫代碼的,有時(shí)候文件大了,傳輸就很慢,而且經(jīng)常不是很穩(wěn)定。
            下定決心要學(xué)學(xué)Vim(現(xiàn)在應(yīng)該沒有人用原始的vi了吧),在經(jīng)過二周的使用后,發(fā)現(xiàn)Vim實(shí)在是非常不錯(cuò)的一個(gè)editor,現(xiàn)在我在Windows上也裝了一個(gè)Vim,使用起來頗為順手,基本上已經(jīng)替代了UE。

            下面介紹一些我在使用Vim的過程中得到的一些心得:
            1. 在使用Vim之前一定要進(jìn)行一些設(shè)置,否則你使用起來肯定會(huì)很不爽,下面是我的配置

            ?1 " ==============================================
            ?2 " ?General?settings
            ?3 " ==============================================
            ?4
            ?5 set?nocp
            ?6 set?ru
            ?7 " ?使用cindent
            ?8 set?cin
            ?9 set?cino = :0g0t0(sus
            10
            11 set?sm
            12 set?ai
            13 " ?縮近
            14 set?sw=4
            15 set?ts=4
            16 " ?不展開tab為空格,反之set?et
            17 set?noet
            18
            19 set?lbr
            20 set?hls
            21 set?backspace = indent , eol , start
            22 set?whichwrap = b , s , < , > , [ , ]
            23 set?fo+ = mB
            24 set?selectmode =
            25 set?mousemodel = popup
            26 set?keymodel =
            27 set?selection = inclusive
            28 set?matchpairs+ = <:>
            29
            30 " ==============================================
            31 " ?Cursor?movement
            32 " ==============================================
            33 nnoremap?<Down>?gj
            34 nnoremap?<Up>?gk
            35 vnoremap?<Down>?gj
            36 vnoremap?<Up>?gk
            37 inoremap?<Down>?<C-o>gj
            38 inoremap?<Up>?<C-o>gk
            39
            40 nnoremap?<End>?g$
            41 nnoremap?<Home>?g0
            42 vnoremap?<End>?g$
            43 vnoremap?<Home>?g0
            44 inoremap?<End>?<C-o>g$
            45 inoremap?<Home>?<C-o>g0
            46
            47 nmap?<C-F4>?:confirm?bd<CR>
            48 vmap?<C-F4>?<ESC>:confirm?bd<Enter>
            49 omap?<C-F4>?<ESC>:confirm?bd<Enter>
            50 map!?<C-F4>?<ESC>:confirm?bd<Enter>
            51
            52 " ?打開語法高亮
            53 syntax?on
            54 " ?使用語法進(jìn)行折疊
            55 set?foldmethod=syntax
            56
            57 if?(has( " gui_running " ))
            58 ????set?nowrap
            59 ????set?guioptions+=b
            60 ????colo?inkpot
            61 else
            62 ????set?wrap
            63 ????colo?ron
            64 endif
            65
            66 " ?設(shè)置swap文件的目錄
            67 set?dir = D:\vim\tmp
            68 " 設(shè)置備份文件的目錄
            69 set?backupdir=D:\vim\bak
            70
            71 " ?設(shè)置leader的快捷鍵,原來的“\”太遠(yuǎn)了,而且位置還不固定
            72 let?mapleader = " , "

            這里是一些基本設(shè)置
            如果有什么不太清楚的,可以在Vim里normal模式下
            :h 關(guān)鍵字
            查看幫助

            2. Vim教程
            推薦先看看Vim自帶的Tutor(這可是位好老師)
            用vimtutor啟動(dòng)Vim
            或者在Vim里面用:h?tutor來啟動(dòng)
            中文教程我推薦李果正的《大家來學(xué)Vim》
            這里還有Vim的鍵位示意圖,可以打出來隨時(shí)查看哦

            ?
            3. Vim的插件
            有幾個(gè)插件強(qiáng)烈推薦
            (1) A:在同名的cpp和h文件之間切換 http://www.vim.org/scripts/script.php?script_id=31
            (2) NERD_comments:超強(qiáng)的注釋插件,支持很多語言的注釋風(fēng)格,按照上面的設(shè)置,只需要",cc"就可以添加注釋了 http://www.vim.org/scripts/script.php?script_id=1218
            (3) csupport:寫C/C++代碼必備 http://www.vim.org/scripts/script.php?script_id=213
            (4) LargeFile:再也不用擔(dān)心打開大文件會(huì)慢了 http://www.vim.org/scripts/script.php?script_id=1506
            (5) TipOfTheDay:多讀讀vim的tips會(huì)有很多收獲的,記得要經(jīng)常更新tips文件啊 http://www.vim.org/scripts/script.php?script_id=88
            (6) cppomnicomplete:提供C++中類/對(duì)象成員的補(bǔ)全(需要Vim7) http://www.vim.org/scripts/script.php?script_id=1520
            (7) ColorSamplerPack:提供上百種顏色主題,必有一款適合你,不過大多數(shù)都是在GUI下才有相應(yīng)的效果 http://www.vim.org/scripts/script.php?script_id=625
            (8) vimcdoc:漢化的vim幫助 http://vimcdoc.sourceforge.net/

            3. 在telnet中使用vim的顏色
            如果是在linux中使用telnet,SecureCRT會(huì)自動(dòng)使用合適的顏色來顯示vim不同的顏色,但是如果在其他unix下就會(huì)無法顯示正確的顏色,所有的東西都是同一種顏色。

            在.vimrc中加入(^[的輸入方式是Ctrl-v然后輸入Esc):
            if !has("gui_running")
            set t_Co=8
            set t_Sf=^[[3%p1%dm
            set t_Sb=^[[4%p1%dm
            endif
            并在SecureCRT的模擬終端類型選擇ANSI,并鉤上ANSI Color,就可以顯示不同的顏色了

            4. vim的自動(dòng)補(bǔ)全功能
            一般使用Ctrl+n就可以自動(dòng)補(bǔ)全了,從Vim7后,C/C++的函數(shù)、變量或者是類的成員,使用Ctrl+x,Ctrl+o也可以自動(dòng)補(bǔ)全。在安裝了cppomnicomplete后,對(duì)象的成員也可以用Ctrl+x,Ctrl+o來補(bǔ)全

            5. 代碼折疊
            許多editor都支持代碼折疊,Vim也不例外
            常用的快捷鍵
            zc 折疊代碼
            zo 打開折疊的代碼
            還有其他的快捷鍵可以查看幫助
            :h fold

            6. 自動(dòng)格式化代碼
            在Visual模式下,選中代碼按=就可以了
            Normal模式下,按=會(huì)格式化光標(biāo)所在行

            7. 腳本支持
            Vim不僅有內(nèi)建的腳本功能,還支持Perl,Python,Tcl,Ruby和MzScheme這些流行的腳本語言編寫Vim的擴(kuò)展

            Vim的功能是不是很強(qiáng)大?
            經(jīng)過1年多的測(cè)試Vim 7.0也release了,還不快下載來試試
            http://www.vim.org

            Happy Vimming!

            對(duì)于已經(jīng)習(xí)慣了使用Vim但是要在Windows下編程的用戶
            我還推薦
            ViEmu,可以在VisualStudio下模擬Vi的編輯操作
            不過只有30天的試用期

            posted @ 2006-05-14 17:35 BoolKinG| 編輯 收藏
             
            以下轉(zhuǎn)自我在msn的blog

            今天又看到一個(gè)和Source Offsite類似的軟件:SourceAnywhere。不用裝.net framework,對(duì)中文的支持也很好,早知道有這個(gè)東東,就不用浪費(fèi)一個(gè)下午取搞定那個(gè)中文版的SOS了。
            不過這個(gè)東東和SOS實(shí)在是有點(diǎn)太像了,就連沒有指定database之前不能啟動(dòng)服務(wù)都一模一樣,不知道兩者之間有什么關(guān)系

            posted @ 2006-05-14 14:23 BoolKinG| 編輯 收藏
             
            以下轉(zhuǎn)自我在msn的blog

            本文內(nèi)容純屬技術(shù)研究,請(qǐng)勿將其用于非法用途!
            如需轉(zhuǎn)載,請(qǐng)注明出處。
            ?
            SourceOffsite是一個(gè)基于 Microsoft Visual SourceSafe 數(shù)據(jù)庫的源代碼管理軟件,具有以下特性:


            1. 比 Microsoft Visual SourceSafe 客戶端快。
            2. 可以通過 TCP/IP 方式訪問和操作 VSS 庫。
            3. 在 Windows、Slolaris 和 Linux 上都提供了客戶端。
            4. 并且通過傳輸數(shù)據(jù)的壓縮和加密方式,使得文件操作的速度大大加快并增強(qiáng)了系統(tǒng)的安全性。5. 高度 IDE 集成,可以成為 Visual C++ 的 SCC 提供者。
            就是有一個(gè)問題,對(duì)中文支持很糟糕,如果在代碼庫中有中文名的文件,就會(huì)出現(xiàn)亂碼,Rick的漢化版解決了這個(gè)問題,但是由于改變了對(duì)字符串的處理方式(SourceOffsite是一個(gè).net程序,我對(duì).net完全是一竅不通,所以不要問我是怎么修改的),以前的keygen不能用了,出現(xiàn)錯(cuò)誤“Incorrect format of serialnumber 1\n Incorrect format of serialnumbers”。雖然該漢化版附帶了2用戶的永久license,但是感覺總是不太爽,于是祭起.Net Reflector反編譯之,發(fā)現(xiàn)漢化版已經(jīng)Obfuscated,而原始版本卻沒有經(jīng)過Obfuscate,于是可以根據(jù)原始版本來得到漢化版的注冊(cè)的大致流程。
            ?
            {msn的blog真爛,居然有字?jǐn)?shù)限制,過程寫了貼不上來
            直接寫結(jié)果了(相信大部分人都希望直接看結(jié)果
            用UE打開漢化版的SosService.exe文件,將0xEEBC處的16改為17

            sossvr.prp文件中server.serialnumbers=00020002ffff000000000004853352c3
            大功告成,最大用戶數(shù)的永久license

            posted @ 2006-05-14 14:22 BoolKinG| 編輯 收藏
             
            以下轉(zhuǎn)自我在msn的blog:

            今天在bt上發(fā)現(xiàn)了一個(gè)懷舊小游戲合集,里面都是10幾年前我們?cè)陔娔X房(現(xiàn)在網(wǎng)吧的前身)里面dos下玩的游戲,雖然現(xiàn)在看來非常粗糙,但是曾經(jīng)在電腦房里鏖戰(zhàn)的日日夜夜卻是難以磨滅的美好回憶。

            下載下來發(fā)現(xiàn)有些游戲不能在xp下運(yùn)行,推薦三個(gè)軟件dosbox、VDMSoundglidos,第一個(gè)是一個(gè)跨平臺(tái)的dos模擬器,不想在VMWare里面裝個(gè)Dos就試試它吧,不過還是有些游戲支持的不是太好;第二個(gè)是一個(gè)在xp的console下模擬聲卡的東東;第三個(gè)是我強(qiáng)烈推薦的,可以在windows下運(yùn)行需要glide(游戲齡超過10年的人都知道這是當(dāng)年的3D硬件王者3dfx的編程接口,類似現(xiàn)在的Direct3D)的硬件加速游戲,很好的支持了古墓麗影1,就是非注冊(cè)版在后面幾關(guān)屏幕中間會(huì)出現(xiàn)一個(gè)很大的logo(試試emule,會(huì)有意想不到的收獲)。

            實(shí)在不行就在VMWare里面裝個(gè)dos來懷舊吧。

            posted @ 2006-05-14 14:21 BoolKinG| 編輯 收藏
             
            之前都是在msn寫blog的,現(xiàn)在live.com被封,msn的慢的不行,限制太多,我的maxthon還經(jīng)常被它弄的假死,因此換到cppblog。cppblog的確比msn快,而且用起來也順手些

            以后以此為家,各位前輩也多多指教了

            posted @ 2006-05-14 14:14 BoolKinG| 編輯 收藏
            僅列出標(biāo)題  
             
            69国产成人综合久久精品| 武侠古典久久婷婷狼人伊人| AAA级久久久精品无码片| 亚洲精品高清久久| 2020国产成人久久精品| 久久久精品国产sm调教网站 | 久久精品国产91久久麻豆自制 | 国产精品九九九久久九九| 精品久久综合1区2区3区激情| 人人妻久久人人澡人人爽人人精品| 无码AV中文字幕久久专区| 久久精品国产精品亚洲下载 | 色婷婷噜噜久久国产精品12p| 无码AV波多野结衣久久| 久久久久国色AV免费观看| 久久99精品久久久久子伦| 无码人妻久久一区二区三区蜜桃| 国产精品禁18久久久夂久| 伊人久久精品影院| 国产亚洲精久久久久久无码AV| 久久久久久国产精品免费无码 | 久久久精品久久久久久| 精品久久无码中文字幕| 久久久久久久女国产乱让韩| 精品国产婷婷久久久| 色成年激情久久综合| 国产精品久久影院| 国产美女久久精品香蕉69| 超级碰碰碰碰97久久久久| 欧美久久久久久午夜精品| 国产精品成人精品久久久| 久久精品国产久精国产| 亚洲精品蜜桃久久久久久| 日韩欧美亚洲综合久久 | 久久免费精品视频| 久久99精品国产99久久| 久久免费的精品国产V∧| 久久婷婷成人综合色综合| 亚洲熟妇无码另类久久久| 亚洲精品国产美女久久久| 亚洲国产精品无码久久一区二区|