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

            XGuru's Blog

            技術(shù),是一種態(tài)度。關(guān)注:高性能后端技術(shù)/服務(wù)器架構(gòu)/C++/C/LAMP

               :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              20 Posts :: 0 Stories :: 93 Comments :: 0 Trackbacks

            公告





            twitter / xoXGuru

            feedsky
            抓虾
            google reader
            鲜果
            QQ邮箱
            九点

            常用鏈接

            留言簿(12)

            搜索

            •  

            最新評論

            閱讀排行榜

            2011年7月21日 #

            最近重溫《Python源碼剖析》一書,將python基本對象的要點(diǎn)記錄如下
            python 整數(shù)對象
            1.python中的整數(shù)使用c語言中的long類型存儲
            2.python int進(jìn)行加法會檢查結(jié)果是否溢出,如果溢出則自動(dòng)轉(zhuǎn)換為pyLongObject對象
            3.python中的文檔無縫集成在語言實(shí)現(xiàn)中
            1 = 11
            2 print a.__doc__

            4.小整數(shù)對象完全緩存在內(nèi)存中,其他整數(shù)對象輪流使用一塊內(nèi)存空間
            5.小整數(shù)對象在python初始化中調(diào)用的_PyInt_Init中創(chuàng)建,然后就一直存在著, 直到python虛擬機(jī)退出

            python String對象
            1.pyStringObject在創(chuàng)建之后,內(nèi)部維護(hù)的字符串不能再改變
            2.intern機(jī)制是否只在字符數(shù)組長度0或者1的時(shí)候使用? 書中提供的代碼太過于精簡了,沒講清楚,但是看后面的演示結(jié)果,應(yīng)該是所有的字符串都實(shí)現(xiàn)了intern機(jī)制
            3.字符串連接操作嚴(yán)重影響python程序執(zhí)行效率,使用join只需分配一次內(nèi)存,能夠大大提高效率.用法舉例
            "".join(['s1','s2','s3'])

            Python Dict對象
            1.Python中的dict采用hashtable而不是R-B Tree。
            2.采用開放定址法解決沖突。
            3.為保證沖突探測鏈的連續(xù)性,采用偽刪除技術(shù),active對象刪除則設(shè)置為dummy態(tài)
            4.為減少沖突,轉(zhuǎn)載率大于2/3時(shí)則改變table的大小,每次增大4倍,如果table中的active態(tài)的元素個(gè)數(shù)大于50000時(shí)(巨型表),
            則放慢增長速度,每次增長2倍??梢钥闯鯬ython中dict的查找效率較高,而對于內(nèi)存的使用是省了又省,還考慮了巨型表增長減少倍數(shù)。

            Python List對象
            1.PyListObject類似STL中的Vector。
            2.Python對內(nèi)存的使用十分節(jié)儉,如果list改變的新尺寸不到分配內(nèi)存的1/2,則收縮內(nèi)存.
            3.在Pylist中建插入元素需要逐個(gè)移動(dòng)后面的元素,類似C中的數(shù)組,因此需要盡量避免對中間元素的插入和刪除操作。
            4.STL和PyListObject自動(dòng)擴(kuò)容算法對比:個(gè)人覺得list改名為array比較恰當(dāng)一些,嘿嘿
            //sgi STL:
            len 
            = (old_size != 0 )?2*oldsize:1
            //(不夠用則擴(kuò)充兩倍,如果開始為空則設(shè)置為1)
            //Python:
            new_allocated
            =(newsize>>3)+(newsize<9?3:6)
            //(???)
            5.對于增長倍數(shù)的選擇,這里有討論
            http://en.w3support.net/index.php?db=so&id=1100311

            p70書中筆誤 :"allcated/2"應(yīng)改為"allocated/2"

            posted @ 2011-07-21 23:16 XGuru 閱讀(2532) | 評論 (1)編輯 收藏

            2010年12月22日 #

            via :Kevin Watters's blog
            譯:XGuru

            原始狀態(tài)

                我曾經(jīng)觀看過小提琴家非常有激情地拉弦演奏,我有了這種想法:也許我投入到文本編輯器中的腦細(xì)胞數(shù)量和他為投入所喜好的樂器的演奏中差不多吧。我還有種奇異的想象,當(dāng)他獨(dú)奏的時(shí)候,腦中的核磁共振圖和我在使用VIM中操控代碼的的圖像也許不會相差太大吧?





                如果你愿意的話請你仔細(xì)思考下,以下是一個(gè)vimmer的學(xué)習(xí)旅程的剪輯




            Vim涅磐所經(jīng)歷的漫長而艱苦的道路


            星期一

                “Eclipse當(dāng)然是簡潔實(shí)用的”

                “但是一些滿臉落腮胡的奇怪家伙在工作中似乎使用vim確實(shí)非???我應(yīng)該試一下。”

                “好吧!我弄了個(gè)Gvim,這看起來不是很糟糕,這里甚至還有菜單界面!”

                “等什么?我的文本去哪了?等一下,撤銷,不要?。?#8221;

                “:help”

                “:q!!!!!”

                今天剩下的時(shí)間還是回到擁有讓人上癮的自動(dòng)補(bǔ)全樣板功能的Eclipse中獲得解脫吧


            星期二

                 “好吧 vim,這是新的一天了,這是個(gè)磨礪自己學(xué)習(xí)新東西的一個(gè)嶄新的機(jī)會,我不是那么容易放棄的人!”

                “為什么我就不能一直呆在插入模式里面呢?FJDSAKLFJDALSKJKLDF(發(fā)狂的敲擊鍵盤)”

                “等一下,你在告訴我保存的時(shí)候必須按ESC-shift-冒號-w-回車?這簡直就是狗屁啊”

                “在花了2個(gè)小時(shí)學(xué)習(xí)教程以后,我基本上懂的就是ddp命令可以交換兩行的內(nèi)容,真是蛋疼啊”




            一個(gè)禮拜以后

                 “哇噢,任何地方都有vim阿,這意味著這付出的所有的努力將不會白費(fèi),比如當(dāng)我用ssh遠(yuǎn)程登入主機(jī)修改一些配置的時(shí)候”

                 “太爽了,嘿,朋友們來看看這個(gè)全暗色的配色主題,我新的工具鏈表面上看起來非常安逸了”

                 “噢,真是扯蛋,我的.vimrc沒有在我的遠(yuǎn)程主機(jī)里,當(dāng)我ssh登入編輯一些配置的時(shí)候,所有我的酷玩意都沒了”




            兩個(gè)月以后

                 HJKL的移動(dòng)方式習(xí)慣成自然,你神秘的失去了使用鼠標(biāo)的能力。

                “我將始終使用我剛下載的這400個(gè)插件!尤其是這個(gè)折疊latex語法的插件,噢,哥們”

                “使用小箭頭方向鍵簡直是自我折磨阿”

                “再見,Caps Lock鍵”

                “就這樣吧,這是忍耐的極限,vim甚至不能讓文本合適的自動(dòng)換行,我準(zhǔn)備回到edit.com了”



            一年后

                更少的大聲說話了。

                安裝command-T插件,每天節(jié)約成百上千次的鍵盤敲擊。

                用宏試著讓你肩膀后的某個(gè)人感到印象深刻,通過在整個(gè)文件里混合大小寫和參雜ROT13暗碼(回轉(zhuǎn)十三位加密)。

                最終在某個(gè)奇跡般的一天學(xué)會在肌肉記憶里用ctrl+[來延緩了腕關(guān)節(jié)炎癥降臨。

                學(xué)會了移動(dòng)光標(biāo),使用visual模式和*鍵----這意味著已經(jīng)沒有退路了。

                “vim不支持交互性緩存?都20年了?好吧,作為一名黑客,我決定給它添加這項(xiàng)支持。”

                查看vim代碼庫,瘋狂地讓它向相反的方向運(yùn)行。

                “誰無論如何也需要在編輯器里弄個(gè)控制臺?我就是所有的unix哲學(xué)。”

                對周圍的”vim只是將一個(gè)編輯模式合并到真正的編輯器中“觀念感到無可忍耐。

                因?yàn)槟憷鲜窃诜块g里令人討厭地回復(fù)”:w”,IRC的朋友們最后將你孤立


            兩年以后

                vim腳本就是一種對上帝的深惡痛絕。

                有點(diǎn)覺得emacs的從始至終的指令模式相對有點(diǎn)像在天堂一樣。

                我昨晚做了一個(gè)噩夢,夢到我始終沒有學(xué)會在寬屏顯示器中垂直切分窗口,這樣提心吊膽真是夠混帳阿。

                偷偷地瞄一下周圍,綁定ctrl+s到保存,允許自己悄悄地松一口氣。

                意識到hjkl搜索定位不足以成為終極時(shí)間節(jié)約工具,發(fā)現(xiàn):python腳本,所建立的大量定制功能達(dá)到鼎盛期,對<Leader>key綁定直到你的鍵盤類似于NASA指揮中心控制面板一樣有點(diǎn)繁多到荒謬的功能感覺有一點(diǎn)糟糕。

               “嘿,每個(gè)聽的到我聲音的家伙過來看看,我現(xiàn)在控制電腦,寫博客,檢查郵件,運(yùn)行測試,調(diào)試程序,瀏覽黑客新聞
                       所有的一切都能在vim溫暖舒適,超級可以定制化的母體中進(jìn)行”

                為什么你這小子不做幾個(gè)后空翻來慶祝一下呢?



            模糊又很長某段時(shí)間之后

                在“文本編輯中模態(tài)的明顯的優(yōu)勢”演講結(jié)束后失去了幾個(gè)朋友。


                盡情享受在github.com/me/vimfiles中分享自己配置的快樂中,有義務(wù)完成關(guān)于如何特立獨(dú)行地安裝語法檢查,lint工具,自動(dòng)補(bǔ)全,快速文檔查看,成噸的殺手級縮寫,世界上所有文件類型對應(yīng)的插件,使vim在每種功能的高效性上接近真正的IDE的博客帖子。開機(jī)時(shí)間日志寫入服務(wù)器,下意識地使用nano來編輯配置文件。不會為沒有使用插件和vimrc中的更多語法而更新所有的配置文件而感到深深的羞愧。

                變得十分淡定,重復(fù)性的編輯任務(wù)再也難不住你,不再去參加emacs與vim誰好誰壞的爭論
            。

            ...這就是你用vim時(shí)大腦的終級形態(tài)






             --EOF--
            Creative commons license
            by XGuru is licensed under a Creative Commons 署名-非商業(yè)性使用-相同方式共享 2.5 中國大陸 License.

            posted @ 2010-12-22 23:05 XGuru 閱讀(13325) | 評論 (11)編輯 收藏

            2010年12月1日 #

            via:git.or.cz


            posted @ 2010-12-01 11:54 XGuru 閱讀(1067) | 評論 (3)編輯 收藏

            2010年10月24日 #

            2010 developer’s problem solving sequence:

            from: 


            1.Google
                技術(shù)上的問題多去google,wikipedia上看看絕對沒錯(cuò),想看性用品廣告就多上上Baidu。

            2.Coworkers
                找同事幫忙,如果你的同事熱心腸而且技術(shù)不錯(cuò),而且遇到過類似的問題,他的建議就會很顯得非常寶貴,也許就能一針見效。

            3.StackOverflow
                去編程互助網(wǎng)站搜索下答案,不行就上去發(fā)帖提提問,熱心人還是蠻多的,但是感覺這個(gè)網(wǎng)站上的Java/.Net的問題比較多。

            4.RTFM
                讀下令人郁悶的幫助文檔(Read the f*cking manual),在linux下man一下或者查看下MSDN文檔,mannual文檔一般會組織得很好,很清晰。但是語言表達(dá)得太專業(yè)化了,有時(shí)候會讓人很郁悶。

            5.Think
                最后不行了,還是自己想下怎么解決問題吧,求人不如求己。

            posted @ 2010-10-24 15:18 XGuru 閱讀(10666) | 評論 (8)編輯 收藏

            2010年10月7日 #

            大家都為linux下壓縮格式繁多,而且每種格式都對應(yīng)不同的命令,這是個(gè)很讓人頭疼的問題。
            我就介紹個(gè)方法給大家:
            在bashrc里加入

            ex () {
              
            if [ -f $1 ] ; then
                
            case $1 in
                  
            *.tar.bz2)   tar xjf $1        ;;
                  
            *.tar.gz)    tar xzf $1     ;;
                  
            *.bz2)       bunzip2 $1       ;;
                  
            *.rar)       rar x $1     ;;
                  
            *.gz)        gunzip $1     ;;
                  
            *.tar)       tar xf $1        ;;
                  
            *.tbz2)      tar xjf $1      ;;
                  
            *.tgz)       tar xzf $1       ;;
                  
            *.zip)       unzip $1     ;;
                  
            *.Z)         uncompress $1  ;;
                  
            *.7z)        7z x $1    ;;
                  
            *)           echo "無法解壓'$1'文件!!" ;;
                esac
              
            else
                echo 
            "'$1' 不是一個(gè)合法的文件!"
              fi
            }



            解壓文件的的話只需要簡單輸入"ex [壓縮文檔]"就可以了,如果你有其他格式的壓縮文檔格式也可以自己加入進(jìn)來。
            從此告別煩人的各種解壓縮命令。
            posted @ 2010-10-07 21:54 XGuru 閱讀(3144) | 評論 (5)編輯 收藏

            2010年7月27日 #


                               Emacs是否真的能煮咖啡?        by XGuru









                坊間有傳言曰:“emacs無所不能,甚至能夠用來煮咖啡!”

                煮咖啡何解?勾起了我的考究欲望。

                上網(wǎng)搜索之,得出幾種初步結(jié)論如下:

                1.這只是一種好玩的說法,只是用來形容emacs功能無所不包而已。

                2.Java的標(biāo)志就一杯咖啡,用來形象的表示寫代碼

                      

                3.emacs的確具有煮咖啡的功能,有腳本能夠控制自動(dòng)咖啡機(jī)運(yùn)行。


                覺得第一種說法比較符合邏輯;第二種說法感覺有點(diǎn)唐突,畢竟Emacs是Richard Stallman(GNU創(chuàng)始人)所寫,而Java是Bill Joy(vi作者)等人完成的,這兩派都差點(diǎn)上升到宗教沖突了,這種解釋有點(diǎn)差強(qiáng)人意;第三種的如果是真的話就會變得很有趣。


                于是就開始了探究,首先追本溯源,找到這段腳本代碼的源頭。發(fā)現(xiàn)已經(jīng)地址已經(jīng)失效,終于在在debian的一個(gè)軟件包里找到了副本。這是emacs常用腳本的一個(gè)打包。

            代碼如下
              1 ;;; coffee.el --- Submit a BREW request to an RFC2324-compliant coffee device
              2 ;;;
              3 ;;; Author: Eric Marsden <emarsden@laas.fr>
              4 ;;; Version: 0.2
              5 ;;; Copyright: (C) 1999 Eric Marsden
              6 ;;; Keywords: coffee, brew, kitchen-sink, can't
              7 ;;
              8 ;;     This program is free software; you can redistribute it and/or
              9 ;;     modify it under the terms of the GNU General Public License as
             10 ;;     published by the Free Software Foundation; either version 2 of
             11 ;;     the License, or (at your option) any later version.
             12 ;;    
             13 ;;     This program is distributed in the hope that it will be useful,
             14 ;;     but WITHOUT ANY WARRANTY; without even the implied warranty of
             15 ;;     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
             16 ;;     GNU General Public License for more details.
             17 ;;    
             18 ;;     You should have received a copy of the GNU General Public
             19 ;;     License along with this program; if not, write to the Free
             20 ;;     Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
             21 ;;     MA 02111-1307, USA.
             22 ;;
             23 ;; Please send suggestions and bug reports to <emarsden@laas.fr>.
             24 ;; The latest version of this package should be available at
             25 ;;
             26 ;;     <URL:http://purl.org/net/emarsden/home/downloads/>
             27  
             28 ;;; Commentary:
             29 ;;
             30 ;; This module provides an Emacs interface to RFC2324-compliant coffee
             31 ;; devices (Hyper Text Coffee Pot Control Protocol, or HTCPCP). It
             32 ;; prompts the user for the different additives, then issues a BREW
             33 ;; request to the coffee device.
             34 ;;
             35 ;; coffee.el requires a special BREW-capable version of Emacs/W3 to be
             36 ;; installed.
             37 ;;
             38 ;; Reference: <URL:ftp://ftp.isi.edu/in-notes/rfc2324.txt>
             39 ;;
             40 ;;
             41 ;; Thanks to Giacomo Boffi <giacomo.boffi@polimi.it> for some typos
             42 ;; and the addition of the "Brown-Coffee" sweetener type.
             43  
             44 ;;; Code:
             45  
             46 (require 'cl)
             47  
             48 (defvar coffee-host "coffee"
             49   "*The host which provides the coffee service.")
             50  
             51 (defvar coffee-pot-designator 1
             52   "*On machines with multiple pots, the number of the pot to brew in")
             53  
             54 (defvar coffee-brew-hook nil
             55   "*Hook executed before issuing a BREW request")
             56  
             57 (defconst coffee-milk-types
             58   '("Cream" "Half-and-Half" "Whole-Milk" "Part-Skim" "Skim" "Non-Dairy"))
             59  
             60 (defconst coffee-syrup-types '("Vanilla" "Almond" "Raspberry" "Chocolate"))
             61  
             62 (defconst coffee-sweetener-types '("White-Sugar" "Brown-Sugar" "Artificial-Sweetener"))
             63  
             64 (defconst coffee-alcohol-types '("Whiskey" "Rum" "Kahula" "Aquavit"))
             65  
             66 (defconst coffee-addition-types
             67   `(("Milk"      . ,coffee-milk-types)
             68     ("Syrup"     . ,coffee-syrup-types)
             69     ("Sweetener" . ,coffee-sweetener-types)
             70     ("Alcohol"   . ,coffee-alcohol-types)))
             71  
             72 ;;;###autoload
             73 (defun coffee ()
             74   "Submit a BREW request to an RFC2324-compliant coffee device"
             75   (interactive)
             76   (require 'url)
             77   (let* ((additions-list
             78           (append coffee-milk-types
             79                   coffee-syrup-types
             80                   coffee-sweetener-types
             81                   coffee-alcohol-types))
             82          (additions-string
             83           (mapconcat #'identity additions-list ","))
             84          (url (coffee-url))
             85          (url-request-method "BREW")
             86          (url-request-extra-headers
             87           `(("Content-type"     . "message-coffeepot")
             88             ("Accept-Additions" . ,additions-string)))         
             89          (url-request-data "START"))
             90     (run-hooks 'coffee-brew-hook)
             91     (url-retrieve url)))
             92  
             93 (defun coffee-additions ()
             94   (let* ((type-name
             95           (completing-read "Coffee addition: " coffee-addition-types nil t))
             96          (type (cdr (assoc type-name coffee-addition-types)))
             97          (ingredients (mapcar #'(lambda (a) (cons a a)) type))
             98          (ingredient
             99           (completing-read "Addition type: " ingredients nil t)))
            100     ingredient))
            101           
            102 (defun coffee-url ()
            103   (require 'w3-forms)
            104   (concat "coffee://" coffee-host "/"
            105           (int-to-string coffee-pot-designator)
            106           "?" (w3-form-encode-xwfu (coffee-additions))))
            107  
            108  
            109 (provide 'coffee)
            110  
            111 ;; coffee.el ends here

                這個(gè)腳本看起來還是煞有其事的,文中提到"Submit a BREW request to an RFC2324-compliant coffee device"

                能夠向與RFC2324協(xié)議兼容的咖啡設(shè)備提交BREW請求
            ,即兼容Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)協(xié)議。超文本咖啡壺協(xié)議,光看這名字就夠喜慶了,但這份協(xié)議寫得很規(guī)范,看不出一絲破綻。有細(xì)心的朋友shrek.wang提醒了我,注意看日期:

            Network Working Group                                       L. Masinter
            Request for Comments: 2324                                 1 April 1998

                1998年4月1號,愚人節(jié)!這個(gè)就讓人產(chǎn)生了疑問。
                通過查wiki發(fā)現(xiàn),原來互聯(lián)網(wǎng)國際標(biāo)準(zhǔn)機(jī)構(gòu)也是很有才的惡搞高手。

            這里列舉其中幾個(gè)好玩的
              • 2001年,RFC 1149由一班挪威Linux使用者協(xié)會的成員實(shí)現(xiàn)了。他們傳送了9個(gè)封包到約5公里外的地方,每個(gè)封包由不同的鴿子攜帶,并有一個(gè)ICMP應(yīng)答要求封包(ping)。他們收到4個(gè)回應(yīng),封包流失率是55%,回應(yīng)時(shí)間是3000至6000秒。[1]
              • RFC 1607 來自21世紀(jì)的觀點(diǎn) Vint Cerf 1994
              • RFC 3091 圓周率數(shù)字產(chǎn)生協(xié)定 . H. Kennedy 2001年
            更多的可以看這里wiki。

              
                 這里可以大膽地作出推斷,這個(gè)協(xié)議只是 IETF 開的一個(gè)善意的joke,而coffee.el的作者Eric Marsden也是一個(gè)幽默的程序員,于是就做了一個(gè)兼容RFC2324的腳本,他也沒想過要真正的控制咖啡機(jī),所以這整個(gè)事情都源于程序員的冷幽默。
                                      
                 然而遠(yuǎn)程控制咖啡機(jī)還是有可能的,這里有一個(gè)開源咖啡機(jī);這里還有一個(gè)允許網(wǎng)絡(luò)控制的咖啡機(jī)(據(jù)說還是兼容RFC2324的)。
                 估計(jì)IETF應(yīng)該做夢也沒想到自己開的一個(gè)玩笑竟然還真的有人做出了實(shí)物。 國外的牛人們還真是閑得蛋疼阿??梢奼eek們還是極富幽默感的。
            朋友們,你的心中已經(jīng)有答案了么?你們想要一臺這樣的咖啡機(jī)不?







            PS.在這里BS下CPPBLOG的編輯器,真的很爛啊,文章寫到一半時(shí)點(diǎn)保存,竟然給發(fā)布了!

             Creative commons license

            by XGuru is licensed under a Creative Commons 署名-非商業(yè)性使用-相同方式共享 2.5 中國大陸 License.


            posted @ 2010-07-27 21:15 XGuru 閱讀(12985) | 評論 (5)編輯 收藏

            2010年6月28日 #

            豆瓣火狐小組是這樣說的:


            Firefox不是完美的,不是最穩(wěn)定的,不是沒有漏洞的,也不是最快的,但它可以是自己的。



            很喜歡這句話,就是因?yàn)橛辛素S富多彩的插件,火狐才能如此的受歡迎.
            下面的這幾個(gè)插件是我個(gè)人最喜歡的,推薦給大家!


            1.ColorfulTabs

            人對顏色的分辨別速度大大超出文字,根據(jù)頁面的主色調(diào)生成標(biāo)簽顏色,讓你的標(biāo)簽變得色彩斑斕.不僅賞心悅目,更讓你方便地切換到想要的標(biāo)簽.



            插件地址


            2.All-in-One Gestures

            這年頭,沒有鼠標(biāo)手勢還能活么?該插件操作快捷,定制性強(qiáng)!
            插件地址


            3.AutoProxy

            非常智能好用的Fuck GF.W的插件,tor,proxy,ssh都能很好的支持,最爽的是可以訂閱規(guī)則,決定那些頁面使用代理,哪些無須使用.和諧社會,和諧你我他!




            插件地址


            4.Readability

            當(dāng)頁面繁雜不堪,難以閱讀時(shí),輕輕一點(diǎn),魔法立現(xiàn).整頁面變得美觀大方,甚至感覺像是在看一份精美排版報(bào)紙/小說.

            整容前:



            整容后:



            插件地址



            5.Tab Popup

            當(dāng)你鼠標(biāo)放在不同的標(biāo)簽頁上,就會顯示出該頁的縮略圖.
            插件地址


            6.Adblock Plus

            廣告已經(jīng)成往事!告別各種煩人的彈窗.
            插件地址


            7.Vimperator

            讓你的firefox變得像vim一樣舒服,適合骨灰級vimer!


            (圖from linuxtoy)

            插件地址 在線幫助


            8.Personas Plus

            firefox皮膚想換就換!打造個(gè)性的firefox
            插件地址


            9.Integrated Gmail



            google發(fā)燒友必備,將google其他的功能都集中到gmail里.All your Google Needs in One Place!
            插件地址

            相似的有另外一個(gè)優(yōu)化 greader的插件,一個(gè)google產(chǎn)品大全的shortcuts插件



            PS:
            插件多了會當(dāng)然會使firefox變慢,大家根據(jù)需要禁用一些
            自己平時(shí)不常用的插件.
            另外Firefox 3.6.6主要是改進(jìn)了插件崩潰或者停止響應(yīng)之后終止該插件的時(shí)間.喜歡裝插件的朋友趕快更新吧!
            win 32位版本下載
            linux 32位版本下載

            --EOF--
            posted @ 2010-06-28 23:29 XGuru 閱讀(4813) | 評論 (2)編輯 收藏

            2010-12-29-update:找到一個(gè)最新的版本,由jason提供,地址在這


            上網(wǎng)找了幾個(gè)版本在ubuntu下都用不了
            于是就自己重新修改了jackbillow的版本,用起來感覺還不錯(cuò).



            Usage: nginx.sh {start|stop|conf|restart}
            //開始|停止|配置|重啟

            注:需要以管理員身份運(yùn)行


            ################################################
            #!/bin/bash
            # v.0.0.3
            # create by jackbillow at 2007.10.15
            # redevelop by XGuru at 2010.6.28
            # On Ubuntu 10.04
            # nginx - This shell script takes care of starting and stopping nginx.
            #
            # description: nginx [engine x] is light http web/proxy server
            # that answers incoming ftp service requests.
            ###############################################


            nginx_path
            ="/usr/local/nginx"
            nginx_pid
            ="/usr/local/nginx/logs/nginx.pid"
            prog="nginx"

            RETVAL=0


            start() {
            # Start daemons.
                    if [ -$nginx_path/conf/nginx.conf ];then
                      echo 
            -n $"Starting $prog: "
                      
            $nginx_path/sbin/nginx -$nginx_path/conf/nginx.conf &
                      RETVAL
            =$?
                    [ 
            $RETVAL -eq 0 ] && {
                    echo Start 
            "$prog" successfully!
                    }
                    
            else
                    RETVAL
            =1
                    fi
                    
            return $RETVAL
            }
            # Stop daemons.
            stop() {
                    echo 
            -n $"Stopping $prog\n"
                    sudo killall 
            -9 nginx
                    RETVAL
            =$?
            }
            # See how we were called.

            conf(){
                    gvim 
            "$nginx_path/conf/nginx.conf"
            }
            case 
            "$1" in
            start)
                    start
                    ;;
            stop)
                    stop
                    ;;
            conf)
                    conf
                    ;;        
            restart)
                    stop
                    start
                    ;;

            *)
                    echo $
            "Usage: $0 {start|stop|conf|restart}"
                    echo $
            "Your may need root privilege to execute this script!"
                    
            exit 1
            esac
            exit $RETVAL

            --EOF--
            posted @ 2010-06-28 16:43 XGuru 閱讀(960) | 評論 (0)編輯 收藏

            2010年6月25日 #

             libevent的初衷就是設(shè)計(jì)一個(gè)跨平臺的輕量級I/0框架,由于歷史問題,各平臺的I/O復(fù)用機(jī)制難以統(tǒng)一。因此,這部分處理跨平臺的方法值得重點(diǎn)關(guān)注。

             eventop在源碼中定義如下:

            static const struct eventop *eventops[]={

            #ifdef HAVE_EVENT_PORTS

                     
            &evportops,

            #endif 

            ….

            }

                由此可見libevent通過宏來在編譯期找出可用的復(fù)用機(jī)制。

            其中的順序也是大文章的。官方的文檔中說明libevent中支持的復(fù)用機(jī)制 /dev/poll, kqueue(2), event ports, select(2), poll(2) and epoll(4).

                libevent開發(fā)人員通過對各種機(jī)制的基準(zhǔn)測試,根據(jù)性能高到低選擇復(fù)用機(jī)制優(yōu)先順序如圖所示:

             

                從中也可以了解到不同平臺機(jī)制的不統(tǒng)一。標(biāo)準(zhǔn)的 poll select卻難以滿足大規(guī)模架構(gòu)的需要,具體可以參考Dan Kegel "The C10K problem"文檔。

            關(guān)于機(jī)制的采用,libevent采用的是函數(shù)指針的方法。

             

             

            struct eventop {
                
            const char *name; /*機(jī)制名稱*/
                
            void *(*init)(struct event_base *); /*初始化事件*/
                
            int (*add)(void *struct event *);    /*添加事件*/
                
            int (*del)(void *struct event *);    /* 刪除事件*/
                
            int (*dispatch)(struct event_base *void *struct timeval */* 調(diào)度事件 */
                
            void (*dealloc)(struct event_base *void *);/* 釋放資源*/
                
            int need_reinit;
            }
            ;

             

            每個(gè)eventop即對應(yīng)一種IO復(fù)用機(jī)制,其中的每個(gè)函數(shù)指針都指向使用該機(jī)制對事件進(jìn)行操作的方法。

            比如對應(yīng)epolleventop結(jié)構(gòu)中:
            1.void *(*init)(…)函數(shù)指針對應(yīng)的是static void * epoll_init(…)
            2.在epoll_init()里,首先對環(huán)境變量進(jìn)行檢測,發(fā)現(xiàn)沒有epoll機(jī)制時(shí)立即返回NULL。
            3.使用epoll_create(32000)指定了連接數(shù)目的上限為32000個(gè),然后對epollop的各個(gè)成員所需資源進(jìn)行分配。
            4.最后調(diào)用libevent自身的信號初始化函數(shù)。

            選擇機(jī)制并將其初始化的過程十分簡單:

             

                for (i = 0; eventops[i] && !base->evbase; i++{

                   
            base->evsel = eventops[i];

                   
            base->evbase = base->evsel->init(base);

                }

                遍歷存儲機(jī)制的eventops數(shù)組,按順序依次嘗試初始化,一種機(jī)制被成功初始化則立即跳出循環(huán)。當(dāng)然,檢測系統(tǒng)環(huán)境可用機(jī)制,選擇哪種機(jī)制更合適,具體的復(fù)用機(jī)制如何使用,這一切的瑣碎細(xì)節(jié)你都無需關(guān)心,使用時(shí),只要調(diào)用event_init()函數(shù)即可。Libevent對各種復(fù)用機(jī)制的巧妙封裝避免了開發(fā)者開發(fā)大規(guī)模架構(gòu)時(shí),處理跨平臺時(shí)機(jī)制選擇的苦惱。

            posted @ 2010-06-25 16:30 XGuru 閱讀(1737) | 評論 (0)編輯 收藏

            2010年6月24日 #



            可能(這里)有點(diǎn)大,但是我覺得看起挺方便的。有錯(cuò)誤的意見歡迎提出,我會盡快修正。這里有英文原版。

            附上幾個(gè)類似的:
            1.作弊手冊cheat sheet
            這里,
            2.鍵位圖 這里[EN] [CN] ,
            3.vgod大神的版本,
            4.這里也有一個(gè),
            5.這里還有張壁紙

            posted @ 2010-06-24 15:42 XGuru 閱讀(3420) | 評論 (2)編輯 收藏

            久久久久亚洲AV无码观看| 久久播电影网| 久久久久亚洲av综合波多野结衣| 久久人人爽人爽人人爽av| 精品国产99久久久久久麻豆| 无码国内精品久久人妻蜜桃 | 亚洲美日韩Av中文字幕无码久久久妻妇| 久久午夜电影网| 婷婷久久综合九色综合九七| 无码专区久久综合久中文字幕| 国内精品久久久久久久97牛牛| 久久精品18| 久久久久久狠狠丁香| 久久久久综合国产欧美一区二区| 人妻无码中文久久久久专区| 午夜视频久久久久一区 | 久久99精品国产麻豆| 久久99精品久久久久久噜噜| 亚洲精品tv久久久久久久久| 国产精品久久久99| 精品国产福利久久久| 国产成人久久精品激情 | 91精品国产91久久久久久青草| 亚洲国产精品一区二区久久hs| 99久久精品国产一区二区蜜芽| 影音先锋女人AV鲁色资源网久久| 亚洲国产小视频精品久久久三级 | 日本加勒比久久精品| 久久国产免费观看精品| 亚洲国产精品久久久天堂| 伊人久久大香线蕉综合5g| 精品水蜜桃久久久久久久| 26uuu久久五月天| 99久久亚洲综合精品网站| 精品久久久久久国产91| 久久天天躁狠狠躁夜夜avapp| 久久夜色精品国产亚洲| 亚洲va久久久噜噜噜久久男同 | 久久久久久毛片免费播放| 99久久人妻无码精品系列| 亚洲αv久久久噜噜噜噜噜|