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

            因為最近要用到RPC,考察了一下thrift(facebook用的一套rpc框架)和google protocol buffer。

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

            此次移植的目的是在windows上運行的client和compiler,因為server肯定是用linux的,移植沒太大必要。根據我從前移植代碼的經驗,發現妨礙移植的關鍵在于系統api的差異,或者是某些依賴庫的差異,如果差異太大,則移植比較麻煩。另外,在移植時我比較傾向于先移植一個最小的功能集合,并逐步完善。

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

            接下來就是client和server了,我打算主要使用Framed Transport+Binary protocol+nonblocking server,因為使用的是libevent(在windows上已經有移植,直接拿過來用就可以了,在linux上面用的是epoll,性能也不錯),也沒有其他的依賴庫,移植起來還是比較方便的。

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

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

            client的代碼因為移植時間比較緊,只有半天時間,還沒清理,就不放上來丟人了。

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





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

            2007年1月8日

            vs2005sp1出來已經有一段時間了,由于安裝速度太慢,我一直都沒有安裝,今天遇到一個vs的bug,不得已需要安裝sp1,上網找了一下,發現一個解決安裝速度慢的方案。
            之所以速度慢是很大程度上是因為windows installer的cache造成,在安裝時暫時禁用掉windows installer的cache可以極大的加速sp1的安裝,而且可以節省1.3G的磁盤空間。
            將下面的代碼存為bat文件,通過這個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對C++來說實在太慢,代碼量大的時候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/




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

            現在還沒有可供測試的版本,希望很快可以用上

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

            2006年6月19日

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

            boost.build分為v1和v2兩個版本
            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日

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

            近日研究VC的CRT,發現原來是通過調用規范(calling coventions)實現的。
            調用規范分為參數傳遞次序,調用棧維護,命名修飾和大小寫轉換4個規范組成。

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

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

            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日

            現在的工作是在unix平臺,平時是用UE的ftp功能來寫代碼的,有時候文件大了,傳輸就很慢,而且經常不是很穩定。
            下定決心要學學Vim(現在應該沒有人用原始的vi了吧),在經過二周的使用后,發現Vim實在是非常不錯的一個editor,現在我在Windows上也裝了一個Vim,使用起來頗為順手,基本上已經替代了UE。

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

            ?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 " ?使用語法進行折疊
            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 " ?設置swap文件的目錄
            67 set?dir = D:\vim\tmp
            68 " 設置備份文件的目錄
            69 set?backupdir=D:\vim\bak
            70
            71 " ?設置leader的快捷鍵,原來的“\”太遠了,而且位置還不固定
            72 let?mapleader = " , "

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

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

            ?
            3. Vim的插件
            有幾個插件強烈推薦
            (1) A:在同名的cpp和h文件之間切換 http://www.vim.org/scripts/script.php?script_id=31
            (2) NERD_comments:超強的注釋插件,支持很多語言的注釋風格,按照上面的設置,只需要",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:再也不用擔心打開大文件會慢了 http://www.vim.org/scripts/script.php?script_id=1506
            (5) TipOfTheDay:多讀讀vim的tips會有很多收獲的,記得要經常更新tips文件啊 http://www.vim.org/scripts/script.php?script_id=88
            (6) cppomnicomplete:提供C++中類/對象成員的補全(需要Vim7) http://www.vim.org/scripts/script.php?script_id=1520
            (7) ColorSamplerPack:提供上百種顏色主題,必有一款適合你,不過大多數都是在GUI下才有相應的效果 http://www.vim.org/scripts/script.php?script_id=625
            (8) vimcdoc:漢化的vim幫助 http://vimcdoc.sourceforge.net/

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

            在.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的自動補全功能
            一般使用Ctrl+n就可以自動補全了,從Vim7后,C/C++的函數、變量或者是類的成員,使用Ctrl+x,Ctrl+o也可以自動補全。在安裝了cppomnicomplete后,對象的成員也可以用Ctrl+x,Ctrl+o來補全

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

            6. 自動格式化代碼
            在Visual模式下,選中代碼按=就可以了
            Normal模式下,按=會格式化光標所在行

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

            Vim的功能是不是很強大?
            經過1年多的測試Vim 7.0也release了,還不快下載來試試
            http://www.vim.org

            Happy Vimming!

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

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

            今天又看到一個和Source Offsite類似的軟件:SourceAnywhere。不用裝.net framework,對中文的支持也很好,早知道有這個東東,就不用浪費一個下午取搞定那個中文版的SOS了
            不過這個東東和SOS實在是有點太像了,就連沒有指定database之前不能啟動服務都一模一樣,不知道兩者之間有什么關系

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

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


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

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

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

            今天在bt上發現了一個懷舊小游戲合集,里面都是10幾年前我們在電腦房(現在網吧的前身)里面dos下玩的游戲,雖然現在看來非常粗糙,但是曾經在電腦房里鏖戰的日日夜夜卻是難以磨滅的美好回憶。

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

            實在不行就在VMWare里面裝個dos來懷舊吧。

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

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

            posted @ 2006-05-14 14:14 BoolKinG| 編輯 收藏
            僅列出標題  
             
            久久www免费人成看国产片| 国产精品99久久99久久久| 久久久亚洲欧洲日产国码aⅴ | 久久综合综合久久97色| 亚洲狠狠婷婷综合久久蜜芽| 香蕉99久久国产综合精品宅男自 | 精品久久久无码中文字幕天天| 少妇久久久久久被弄高潮| 天天躁日日躁狠狠久久| 久久久久成人精品无码中文字幕| 亚洲精品国产字幕久久不卡| 欧美黑人又粗又大久久久| 嫩草伊人久久精品少妇AV| 99国产精品久久久久久久成人热| 久久午夜伦鲁片免费无码| 精品久久一区二区三区| 久久99国产一区二区三区| 午夜福利91久久福利| 久久综合久久美利坚合众国| 麻豆AV一区二区三区久久| 亚洲国产精品久久久久久| 亚洲中文字幕伊人久久无码| 久久亚洲精品无码VA大香大香| 99久久国产精品免费一区二区| 99久久国产热无码精品免费 | 日韩久久久久中文字幕人妻| 久久99热这里只有精品66| 国产午夜福利精品久久2021| 色综合久久88色综合天天| 亚洲国产成人久久综合区| 久久久一本精品99久久精品66| 中文字幕亚洲综合久久| 亚洲性久久久影院| 久久精品国产一区二区三区日韩| 中文精品久久久久人妻| 久久九九亚洲精品| 亚洲国产精品无码久久久不卡| 国产精品女同一区二区久久| 亚洲精品无码久久久久sm| 欧美午夜A∨大片久久| 免费精品99久久国产综合精品|