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

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

            公告





            twitter / xoXGuru

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

            常用鏈接

            留言簿(12)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            2011年7月21日 #

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

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

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

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

            Python List對(duì)象
            1.PyListObject類似STL中的Vector。
            2.Python對(duì)內(nèi)存的使用十分節(jié)儉,如果list改變的新尺寸不到分配內(nèi)存的1/2,則收縮內(nèi)存.
            3.在Pylist中建插入元素需要逐個(gè)移動(dòng)后面的元素,類似C中的數(shù)組,因此需要盡量避免對(duì)中間元素的插入和刪除操作。
            4.STL和PyListObject自動(dòng)擴(kuò)容算法對(duì)比:個(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.對(duì)于增長(zhǎng)倍數(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) | 評(píng)論 (1)編輯 收藏

            2010年12月22日 #

            via :Kevin Watters's blog
            譯:XGuru

            原始狀態(tài)

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





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




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


            星期一

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

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

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

                “等什么?我的文本去哪了?等一下,撤銷,不要啊!”

                “:help”

                “:q!!!!!”

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


            星期二

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

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

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

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




            一個(gè)禮拜以后

                 “哇噢,任何地方都有vim阿,這意味著這付出的所有的努力將不會(huì)白費(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語法的插件,噢,哥們”

                “使用小箭頭方向鍵簡(jiǎn)直是自我折磨阿”

                “再見,Caps Lock鍵”

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



            一年后

                更少的大聲說話了。

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

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

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

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

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

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

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

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

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


            兩年以后

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

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

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

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

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

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

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



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

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


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

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


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






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

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

            2010年12月1日 #

            via:git.or.cz


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

            2010年10月24日 #

            2010 developer’s problem solving sequence:

            from: 


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

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

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

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

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

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

            2010年10月7日 #

            大家都為linux下壓縮格式繁多,而且每種格式都對(duì)應(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
            }



            解壓文件的的話只需要簡(jiǎn)單輸入"ex [壓縮文檔]"就可以了,如果你有其他格式的壓縮文檔格式也可以自己加入進(jìn)來。
            從此告別煩人的各種解壓縮命令。
            posted @ 2010-10-07 21:54 XGuru 閱讀(3144) | 評(píng)論 (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)人意;第三種的如果是真的話就會(huì)變得很有趣。


                于是就開始了探究,首先追本溯源,找到這段腳本代碼的源頭。發(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請(qǐng)求
            ,即兼容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號(hào),愚人節(jié)!這個(gè)就讓人產(chǎn)生了疑問。
                通過查wiki發(fā)現(xiàn),原來互聯(lián)網(wǎng)國(guó)際標(biāo)準(zhǔn)機(jī)構(gòu)也是很有才的惡搞高手。

            這里列舉其中幾個(gè)好玩的
              • 2001年,RFC 1149由一班挪威Linux使用者協(xié)會(huì)的成員實(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)該做夢(mèng)也沒想到自己開的一個(gè)玩笑竟然還真的有人做出了實(shí)物。 國(guó)外的牛人們還真是閑得蛋疼阿。可見geek們還是極富幽默感的。
            朋友們,你的心中已經(jīng)有答案了么?你們想要一臺(tái)這樣的咖啡機(jī)不?







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

             Creative commons license

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


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

            2010年6月28日 #

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


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



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


            1.ColorfulTabs

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



            插件地址


            2.All-in-One Gestures

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


            3.AutoProxy

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




            插件地址


            4.Readability

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

            整容前:



            整容后:



            插件地址



            5.Tab Popup

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


            6.Adblock Plus

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


            7.Vimperator

            讓你的firefox變得像vim一樣舒服,適合骨灰級(jí)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:
            插件多了會(huì)當(dāng)然會(huì)使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) | 評(píng)論 (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) | 評(píng)論 (0)編輯 收藏

            2010年6月25日 #

             libevent的初衷就是設(shè)計(jì)一個(gè)跨平臺(tái)的輕量級(jí)I/0框架,由于歷史問題,各平臺(tái)的I/O復(fù)用機(jī)制難以統(tǒng)一。因此,這部分處理跨平臺(tái)的方法值得重點(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ā)人員通過對(duì)各種機(jī)制的基準(zhǔn)測(cè)試,根據(jù)性能高到低選擇復(fù)用機(jī)制優(yōu)先順序如圖所示:

             

                從中也可以了解到不同平臺(tái)機(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即對(duì)應(yīng)一種IO復(fù)用機(jī)制,其中的每個(gè)函數(shù)指針都指向使用該機(jī)制對(duì)事件進(jìn)行操作的方法。

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

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

             

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

                   
            base->evsel = eventops[i];

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

                }

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

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

            2010年6月24日 #



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

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

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

            久久精品中文无码资源站| 久久久久青草线蕉综合超碰| 色欲久久久天天天综合网| 国内精品九九久久精品| 久久人妻少妇嫩草AV无码专区| 国内精品人妻无码久久久影院| 久久精品国产精品青草| 亚洲а∨天堂久久精品| 97久久婷婷五月综合色d啪蜜芽| 日韩精品久久久肉伦网站| 国产99久久久久久免费看 | www.久久99| 97超级碰碰碰久久久久| 国产日韩久久久精品影院首页| 2021国内久久精品| 99久久99久久精品国产片| 欧美激情一区二区久久久| 精品国产婷婷久久久| 亚洲国产另类久久久精品黑人| A级毛片无码久久精品免费| 久久夜色精品国产噜噜麻豆| 久久综合久久鬼色| 久久久久国产一级毛片高清板| 草草久久久无码国产专区| 99久久99久久精品国产片果冻 | 亚洲一区精品伊人久久伊人| 99久久超碰中文字幕伊人| 人人妻久久人人澡人人爽人人精品| 亚洲国产成人久久综合碰碰动漫3d| 热re99久久精品国99热| 丁香色欲久久久久久综合网| 久久中文精品无码中文字幕| 国产精品日韩深夜福利久久| 久久久中文字幕| 亚洲精品高清国产一久久| 久久精品无码一区二区三区| 久久精品国产亚洲av麻豆小说 | 国产欧美久久久精品影院| 久久综合久久性久99毛片| 欧美精品丝袜久久久中文字幕| 99国内精品久久久久久久|