• <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>
            隨筆-90  評論-947  文章-0  trackbacks-0
             
                 摘要: 引言   之前也做過一些含內(nèi)嵌IE控件的東西,只是一直用MFC/ATL等框架,對于里面的原理其實一知半解,只有脫離它們寫一遍,才算能真正懂。前不久在寫一個SkyDriveClient的時候正好有一個需求,就練習了一下。技術(shù)含量沒有,在此記錄一筆,供后來人入門,供前輩們批評。   本文中,行文以流水帳、貼代碼方式為主,同時為了不帶來干擾,代碼將盡量以不帶或少帶封裝的方式書寫。目...  閱讀全文
            posted @ 2012-09-01 01:04 溪流 閱讀(7352) | 評論 (19)編輯 收藏

            (cnBeta: http://www.cnbeta.com/articles/203020.htm

             

            微軟拼音輸入法的新體驗?zāi)J剑鋵嵤俏④浧匆粢恢币詠淼闹饕J健9P者從1.5版開始接觸微軟拼音以來就一直是這種模式,主要特點就是長句輸入、二次確認,在第一次確認的時候,文字就進入仿佛實際輸入?yún)^(qū)域,但是文字下面有虛線,此時我們可以用光標鍵左右移動,就像下圖顯示的一樣:

            而在輸入拼音的時候,我們其實無需開啟候選詞窗口,也不用看屏幕:

            輸入完畢之后按空格,觀察首選是否正確,如果正確的話再一次空格確認,否則按一下右光標鍵回到句首開始選詞。非常方便,也顯得很專業(yè)。

             

            習慣于詞組輸入的同學可能喜歡時刻盯著屏幕出現(xiàn)的候選詞,一旦有錯立刻糾正選擇。而長句輸入則不必這樣,輸入整個句子,讓輸入法在整句的語境中替你選詞,命中率會高很多,特別是在打長篇文章的時候,非常有用。

             

            很多時候別人在看我輸入的時候,發(fā)現(xiàn)屏幕上有錯別字,會忍不住提醒我錯了,但是當我最后確認的時候,往往又對了,會顯得有一點點疑惑,但是通常不說。有趣的是,我在打別人名字的時候,他們發(fā)現(xiàn)一開始的錯別字,也會忍不住提醒我錯了,并且對輸入法把某人的名字弄成另外一個字非常感興趣,有時會以此"嘲笑"那個人。然后當我最后回來選詞的時候,他們會"指責"干嘛一開始不選對的字……我已經(jīng)習慣了。但是整句輸入帶來的便捷之處,大部分人是沒法認識到的。所以我今天在這里花很大的篇幅介紹一下。

             

            遺憾的是,微軟拼音1.5、2.0、3.0都沒人叫好。到Office2003的時候,因為"新體驗"模式的出現(xiàn),使得一部分人叫好,但那部分人其實還是把它當作詞組輸入法來用的。到Office2010出來的時候,又有一部分人叫好,實際上很大一部分人是為"簡捷"模式叫好。到現(xiàn)在Win8成了簡體中文語言下默認輸入法,即便有強推的味道,但好多人還是叫好,而新體驗?zāi)J降南В瑓s很少有人問津。

             

            下面正式來看標題中提到的問題。Win8安裝完畢后簡體中文下只有一個微軟拼音簡捷,新體驗?zāi)J讲灰娏耍。。?

             

             

            有需要的同學,請跟隨筆者,一步一步找回新體驗?zāi)J健?

             

            1、打開開始屏幕,在英文狀態(tài)下輸入regedit,然后回車,打開注冊表編輯器。(遇到UAC提醒,請選擇"是")

            2、在左側(cè)展開目錄樹,一直到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CTF\TIP\{81d4e9c9-1d3b-41bc-9e6c-4b40bf79e35e}:

             

             

            微軟對這一項做了特殊的權(quán)限保護,它的權(quán)限和相鄰的那幾個不一樣,我們要取得寫權(quán)限。

             

            3、右鍵單擊它、選擇權(quán)限,打開如下圖的窗口:

             

             

            4、單擊"高級",再打開一個窗口:

             

             

            5、在所有者的右邊點擊"更改",輸入"everyone"或者當前登錄用戶名,按"確定",并選中"替換子容器和對象的所有者",然后按應(yīng)用。(不要關(guān)閉這個窗口,等下我們還要改回來。)

             

             

            6、然后點擊左下方的啟用繼承(按了后該按鈕變?yōu)榻美^承),并選中"使用可從此對象繼承的權(quán)限項目替換所有子對象的權(quán)限項目"。最后按"應(yīng)用",遇到提示選擇"是"。

             

             

            現(xiàn)在,這個窗口變成這個樣子了:

             

             

            保留這個窗口,我們進行下一步。

             

            7、打開開始屏幕,在英文狀態(tài)下輸入"cmd",左側(cè)出現(xiàn)"命令提示符",右鍵點擊選中它,再到屏幕下方點擊"以管理員身份運行",遇到UAC提示選擇"是"。這樣我們打開具有管理員權(quán)限的命令提示符窗口,工作路徑位于System32目錄。

             

            8、輸入"regsvr32 ime\imesc\imsctip.dll",并按回車。

             

             

            直到看到下圖的提示,點擊確定,關(guān)閉命令提示符窗口。

             

             

            9、回到剛才的高級安全設(shè)置窗口,點擊左下方的"禁用繼承"按鈕,這時出現(xiàn)下圖提示:

             

             

            選擇第二項,"從此對象中刪除所有以繼承的權(quán)限":

             

             

            并選中"使用可從此對象繼承的權(quán)限項目替換所有子對象的權(quán)限項目",按"應(yīng)用",遇到提示選擇"是"。

             

            10、點擊上方所有者右邊的"更改",輸入"nt service\trustedinstaller",按"確定",并選中"替換子容器和對象的所有者",然后按"應(yīng)用"。

             

             

            至此,我們將注冊表權(quán)限恢復如初了。

             

            打開輸入法管理界面:

             

             

            我們可以看到多出來的"Microsoft Pinyin NewExperience"了,它就是我們要找的新體驗?zāi)J剑?

             

            悲劇的是,貌似新體驗?zāi)J皆贛etro界面下有問題,每次確認輸入,光標都會回到最前面(注:確認這是當時新浪微博Win8客戶端的Bug,不是輸入法的問題,新浪微博貌似已經(jīng)修正此問題)。也許是因為有這些Bug,微軟才隱藏它的吧。不過,桌面模式下使用起來未發(fā)現(xiàn)任何問題哦。

            posted @ 2012-08-25 15:31 溪流 閱讀(4664) | 評論 (23)編輯 收藏

            因為接下去要做優(yōu)化工作,在此之前,先做下簡單的性能測試。

            比較的對象是std::regex,暫時只比較兩項:

            1、解析正則表達式的速度

            2、使用解析好的正則表達式去匹配字符串的速度。

            測試代碼如下: 

            SECTION_BEGIN(StdRegExParse100000);

            PERFORMANCE_TEST_BEGIN(StdRegExParse100000);

            for (int i = 0; i < 100000; ++i)

            {

                wregex r;

                r.assign(L"http://([a-zA-Z0-9\\-]+.)+[a-zA-Z]+/");

            }

            PERFORMANCE_TEST_END(StdRegExParse100000);

            SECTION_END();

             

            SECTION_BEGIN(xlRegExpParse100000);

            PERFORMANCE_TEST_BEGIN(xlRegExpParse100000);

            for (int i = 0; i < 100000; ++i)

            {

                RegExp r;

                r.Parse(L"http://([a-zA-Z0-9\\-]+.)+[a-zA-Z]+/");

            }

            PERFORMANCE_TEST_END(xlRegExpParse100000);

            SECTION_END();

             

            SECTION_BEGIN(StdRegExMatch100000);

            {

                wregex r;

                r.assign(L"http://([a-zA-Z0-9\\-]+.)+[a-zA-Z]+/");

                PERFORMANCE_TEST_BEGIN(StdRegExMatch100000);

                for (int i = 0; i < 100000; ++i)

                {

                    regex_match(L"http://w-1.w-2.w-3.streamlet.org/", r);

                }

                PERFORMANCE_TEST_END(StdRegExMatch100000);

            }

            SECTION_END();

             

            SECTION_BEGIN(xlRegExpMatch100000);

            {

                RegExp r;

                r.Parse(L"http://([a-zA-Z0-9\\-]+.)+[a-zA-Z]+/");

                PERFORMANCE_TEST_BEGIN(xlRegExpMatch100000);

                for (int i = 0; i < 100000; ++i)

                {

                    r.Match(L"http://w-1.w-2.w-3.streamlet.org/");

                }

                PERFORMANCE_TEST_END(xlRegExpMatch100000);

            }

            SECTION_END();

             

            前兩則是分別使用std::wregex和xl::RegExp解析"http://([a-zA-Z0-9\\-]+.)+[a-zA-Z]+/"十萬次,后兩則是拿來匹配http://w-1.w-2.w-3.streamlet.org/十萬次。

            結(jié)果如下:

            image

            匹配速度差很多,解析速度差不多。

            考慮到在解析“?”“+”“*”的時候,引入了很多ε邊,于是對那部分做點優(yōu)化,去除不必要的ε邊和節(jié)點構(gòu)造,然后再測試:

            image

            可以看到有所提高,但是解析速度還是跟std:wregex的差很多,匹配速度有明顯領(lǐng)先。目前只解析到ε邊、-NFA,如果再做狀態(tài)機轉(zhuǎn)化,雖然會提高匹配速度,可是解析速度會進一步下降。因此,一開始就要考慮使用一種更高效的狀態(tài)機存儲方法。

            這兩天著涼生病了,好難受啊……

            posted @ 2012-06-13 23:00 溪流 閱讀(522) | 評論 (0)編輯 收藏
                 摘要: 引言 根據(jù)預告,這篇我們對“?”“+”“*”進行處理,實現(xiàn)對重復的支持。“x?”匹配0個或1個“x”,“x+”匹配1到任意個“x”,“x*”匹配0到任意個“x”。   有了重復,就有貪婪模式和非貪婪模式。在貪婪模式下,“x+”匹配“xxxyyy”中的“xxx”;在非貪婪模式下,“x+”匹配“xxxyyy”中的第一個“x”。為了區(qū)別兩種模式,按照通常的語法,我們在重復控制符號后面加一個“?...  閱讀全文
            posted @ 2012-06-08 23:35 溪流 閱讀(1884) | 評論 (2)編輯 收藏
                 摘要: 引言 這篇我們要實現(xiàn)的是中括號表達式。   一個中括號里寫上任意數(shù)目的字符,表示匹配這些字符中的任何一個。比如“[abc]”匹配a或b或c。中括號里除了單個字符,也可以寫字符區(qū)間,比如“[a-c]”就表示從a到c的所有字符,這里“a到c”是指內(nèi)碼連續(xù)的一系列字符,包含首尾的a和c。綜合起來說,中括號里面可以放任意個字符或者字符區(qū)間,匹配所填字符或字符區(qū)間內(nèi)的任意一個字符。比如“[acd-...  閱讀全文
            posted @ 2012-06-04 22:19 溪流 閱讀(2118) | 評論 (0)編輯 收藏
            僅列出標題
            共18頁: First 2 3 4 5 6 7 8 9 10 Last 
            久久精品这里热有精品| 亚洲а∨天堂久久精品| 国内精品久久国产| 精品国产91久久久久久久a| 999久久久无码国产精品| 无码人妻久久一区二区三区 | 亚洲国产视频久久| 久久精品亚洲欧美日韩久久| 国产精品美女久久久| 国产精品久久久久影视不卡| 久久亚洲国产欧洲精品一| 久久超碰97人人做人人爱| 久久99精品国产99久久| 国内精品伊人久久久久影院对白| 久久国产精品一区| 久久亚洲国产最新网站| 无码伊人66久久大杳蕉网站谷歌 | 99久久伊人精品综合观看| 中文字幕亚洲综合久久2| 久久久久无码精品| 久久人人爽人人爽人人片av麻烦| 欧美亚洲色综久久精品国产| 99久久99这里只有免费的精品| 久久久久久久尹人综合网亚洲 | 久久中文字幕人妻熟av女| 亚洲熟妇无码另类久久久| 国产成人精品久久免费动漫| 成人午夜精品久久久久久久小说| 亚洲国产成人久久精品99| 伊人久久大香线蕉亚洲五月天| 久久美女网站免费| 久久WWW免费人成一看片| 国产成人久久精品一区二区三区 | 亚洲人AV永久一区二区三区久久| 亚洲精品无码久久久久久| 品成人欧美大片久久国产欧美...| 久久久SS麻豆欧美国产日韩| 91久久九九无码成人网站| 无码专区久久综合久中文字幕| 久久激情五月丁香伊人| 国内精品久久久久影院日本|