莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理


              我們在維護(hù)的淘寶開源消息中間件的metaq的github分支,今天發(fā)布了1.4.2版本,主要做了如下改進(jìn):

              1.添加了大量的使用和原理文檔,參見Wiki。
              2.合并tools和server-wrapper工程,提供統(tǒng)一的腳本來管理Broker,管理Broker的工作變得非常容易,全部工作都可以通過metaServer.sh的腳本來執(zhí)行。同時提供了bat啟動腳本,用于在windows上啟動Broker做測試。
              3.新功能:
             (1)新的客戶端API用來獲取topic的分區(qū)列表
             (2)新的客戶端API用來獲取Broker的統(tǒng)計(jì)信息
             (3)異步復(fù)制的Slave可以自動獲取Master的配置變更,例如Master在配置文件中新增或者刪除了topic并順利reload熱加載成功后,slave可自動復(fù)制或者移除變更的topic,無需重啟。
             (4)新的統(tǒng)計(jì)項(xiàng)目,可以通過'stats config'協(xié)議獲取Broker的配置文件。
              4.添加meta-python項(xiàng)目,一個python的客戶端,暫時僅支持發(fā)送消息功能。
              5.其他小改進(jìn),如統(tǒng)計(jì)信息的優(yōu)化、構(gòu)建工具的整合等。

              更詳細(xì)的發(fā)行日志請看RelaseNotes。

              下載地址:  https://github.com/killme2008/Metamorphosis/downloads
              入門指南:  《如何開始
              更多文檔請看Wiki。

          posted @ 2012-05-09 22:47 dennis 閱讀(4692) | 評論 (1)編輯 收藏


              我發(fā)現(xiàn)很多人沒辦法高效地解決問題的關(guān)鍵原因是不熟悉工具,不熟悉工具也還罷了,甚至還不知道怎么去找工具,這個問題就大條了。我想列下我能想到的一個Java程序員會用到的常用工具。

          一、編碼工具

          1.IDE:Eclipse或者IDEA,熟悉盡可能多的快捷鍵,《Eclipse常見快捷鍵列表
          2.插件: 
          (1) Findbugs,在release之前進(jìn)行一次靜態(tài)代碼檢查是必須的
          (2) Clover,關(guān)心你的單元測試覆蓋率
          (3) Checkstyle 代碼風(fēng)格檢查

          3.構(gòu)建和部署工具:ant或者maven,現(xiàn)在主流都是maven了吧,使用nexus搭建maven私服,再加上持續(xù)集成jenkins。代碼質(zhì)量不用愁。

          4.版本管理工具: svn或者git

          5.diff和patch

          6.設(shè)置你的eclipse或者IDEA,如formatter,save actions以及code template等。代碼風(fēng)格,直接用google的也可以啊?!?a >Google style guide》

          7.掌握一個文本編輯器,Emacs或者VIM,熟悉常用快捷鍵。這在你需要在線編輯代碼,或者編寫其他語言代碼時候特別有用?!?a >神器圣戰(zhàn)》

          二、JDK相關(guān)

          1.jstat : 觀察GC情況,如:

          jstat -gcutil pid 2000

          2.jmap,查看heap情況,如查看存活對象列表:
          jmap -histo:live pid |grep com.company |less 

          或者dump內(nèi)存用來分析:

          jmap -dump:file=test.bin pid

          3.分析dump的堆文件,可以用jhat:

          jhat test.bin

            分析完成后可以用瀏覽器查看堆的情況。這個工具的分析結(jié)果還比較原始,你還可以用Eclipse MAT插件進(jìn)行圖形化分析,或者IBM的Heap Analyzer.

          4.jvisualvm和jconsole: JVM自帶的性能分析和監(jiān)控工具,怎么用?請自己看文檔。

          5.jstack:分析線程堆棧,如

          jstack pid > thread_dump

              查看CPU最高的線程在干什么的方法結(jié)合top和jstack:http://www.iteye.com/topic/1114219

          6.更多JVM工具,參見官方文檔:http://docs.oracle.com/javase/6/docs/technotes/tools/

          7.學(xué)習(xí)使用btrace分析java運(yùn)行時問題?!?a >Btrace使用簡介》

          8.GC日志分析工具:GC viewerGC-console或者自己挑吧。

          9.性能分析工具,除了自帶的jvisualvm外,還可以用商業(yè)的jprofiler。

          10.JVM參數(shù)大全

          11.《JVM調(diào)優(yōu)標(biāo)準(zhǔn)參數(shù)陷阱》,iteye神貼。

          三、Linux工具

          1.熟悉常用的shell命令,


          3.使用htop替換top。

          4.熟悉下strace,gdb甚至systemtap來分析問題。

          5.熟悉vmstat,iostat,sar等性能統(tǒng)計(jì)工具。

          5.自動化部署腳本,py-fabric或者自薦下我的clojure-control

          四、其他

          1.掌握一門腳本語言,Python或者Ruby,高效解決一些需要quick and dirty的任務(wù):比如讀寫文件、導(dǎo)入導(dǎo)出數(shù)據(jù)庫、網(wǎng)頁爬蟲等。注意不是python.com,咔咔。

          2.使用Linux或者M(jìn)ac os系統(tǒng)作為你的開發(fā)環(huán)境。

          3.升級你的“硬件工具”,雙屏大屏顯示器、SSD、8G內(nèi)存甚至更多。

          4.你懂的:https://code.google.com/p/goagent/

          五、如何查找工具?

          1.搜索引擎,google或者baidu,《搜索技巧

          2.萬能的stack overflow:http://stackoverflow.com/

          3.虛心問牛人。

          六、最重要的是⋯⋯

          一顆永不停止學(xué)習(xí)的心。

          posted @ 2012-04-17 17:05 dennis 閱讀(19226) | 評論 (17)編輯 收藏


              最近陸陸續(xù)續(xù)補(bǔ)充了不少metaq的文檔,部分是直接從官方文檔里摘抄出來,放在了github工程的wiki頁,有興趣了解甚至使用meta的可以仔細(xì)閱讀下,一份目錄:     
              后續(xù)還會繼續(xù)補(bǔ)充。

          posted @ 2012-04-13 22:43 dennis 閱讀(47517) | 評論 (13)編輯 收藏

              Java世界里有findbugs這樣的神器,可以讓你避免很多“簡單愚蠢”的bug。同樣,Clojure世界里也有相應(yīng)的替代品,這就是今天要介紹的kibit。不過kibit現(xiàn)在還比較年輕,判斷的規(guī)則較少,但是已經(jīng)可以使用起來做clojure代碼的靜態(tài)檢查。

          項(xiàng)目主頁:https://github.com/jonase/kibit
          使用:
          1.安裝lein插件:
          lein plugin install jonase/kibit 0.0.2

          2.在項(xiàng)目的根目錄運(yùn)行
          lein kibit

          kibit會分析項(xiàng)目里所有clojure源碼,每個namespace分別分析,例如我分析clojure-control的輸出:

          == control.commands ==
          == control.core ==
          [186] Consider (zero? (:status (ssh host user cluster (str "test -e " file)))) instead of (= (:status (ssh host user cluster (str "test -e " file))) 0)
          == control.main ==
          == leiningen.control ==
          [null] Consider Integer/parseInt instead of (fn* [p1__61444#] (Integer/parseInt p1__61444#))
          [null] Consider Integer/parseInt instead of (fn* [p1__65254#] (Integer/parseInt p1__65254#))

              顯然,kibit一個一個namespace分析過去,并且按照規(guī)則對它認(rèn)為有問題的地方打印出來,并提出建議。例如這里它建議我用
          (zero? (:status (ssh host user cluster (str "test -e " file))))
              替換control.core里186行的:
           (= (:status (ssh host user cluster (str "test -e " file))) 0)

              目前kibit大多數(shù)是這類代碼風(fēng)格上的檢查,還沒有做到類似findbugs那樣更豐富的檢查,例如NPE異常檢查等。此外kibit還提供反射檢查,任何有反射調(diào)用的地方都給出警告。
              kibit是基于core.logic實(shí)現(xiàn)的,它的規(guī)則都放在了這里,通過defrules宏來定義檢查規(guī)則,源碼中對算術(shù)運(yùn)算的規(guī)則定義:
          (defrules rules
            [(+ ?x 1) (inc ?x)]
            [(+ 1 ?x) (inc ?x)]
            [(- ?x 1) (dec ?x)]

            [(* ?x (* . ?xs)) (* ?x . ?xs)]
            [(+ ?x (+ . ?xs)) (+ ?x . ?xs)])
             
              第一個規(guī)則,任何對類似(+ 1 x)的代碼,都建議替換成(inc x),后面的與此類似。理論上你也可以自定義規(guī)則,并提交給官方??傮w上說kibit仍然是比不上findbugs的,期待未來發(fā)展的更好。

          posted @ 2012-03-23 21:28 dennis 閱讀(4572) | 評論 (0)編輯 收藏


              我們經(jīng)常需要在程序中測量某段代碼的性能,或者某個函數(shù)的性能,在Java中,我們可能簡單地循環(huán)調(diào)用某個方法多少次,然后利用System.currentTimeMillis()方法測量下時間。在Ruby中,一般都是用Benchmark module做測試,提供了更詳細(xì)的報(bào)告信息。

              同樣,在Clojure里你可以做這些事情,你仍然可以使用System.currentTimeMillis()來測量運(yùn)行時間,例如:

          user=> (defn sum1 [& args] (reduce + 0 args))
          #'user/sum1

          user=> (defn sum2 [& args]
                       (loop [rt 0
                              args args]
                           (if args
                             (recur (+ rt (first args)) (next args))
                             rt)))
          #'user/sum2

          user=> (defn bench [sum n]
                   (let [start (System/currentTimeMillis)
                         nums (range 0 (+ n 1))]
                     (dotimes [_ n] (apply sum nums))
                     (println (- (System/currentTimeMillis) start))))

          user=> (bench sum1 10000)
          1818
          nil
          user=> (bench sum2 10000)
          4220
          nil
             
              定義兩個求和函數(shù)sum1和sum2,一個是利用reduce,一個是自己寫loop,然后寫了個bench函數(shù)循環(huán)一定次數(shù)執(zhí)行sum函數(shù)并給出執(zhí)行時間,利用System.currentTimeMillis()方法。顯然sum1比sum2快了一倍多。為什么更快?這不是我們的話題,有興趣可以自己看reduce函數(shù)的實(shí)現(xiàn)。

              除了用System.currentTimeMillis()這樣的java方式測量運(yùn)行時間外,clojure還提供了time宏來包裝這一切:
          user=> (doc time)
          -------------------------
          clojure.core/time
          ([expr])
          Macro
            Evaluates expr and prints the time it took.  Returns the value of
           expr.
          nil

              time宏用的不是currentTimeMillis方法,而是JDK5引入的nanoTime方法更精確。重寫bench函數(shù):
          user=> (defn bench [sum n]
                       (time (dotimes [_ n] (apply sum (range 0 (+ n 1))))))
          #'user/bench

          user=> (bench sum1 10000)
          "Elapsed time: 5425.074 msecs"
          nil
          user=> (bench sum2 10000)
          "Elapsed time: 7893.412 msecs"
          nil
               盡管精度不一致,仍然可以看出來sum1比sum2快。
              
               這樣的測試仍然是比較粗糙的,真正的性能測試需要考慮到JVM JIT、warm up以及gc帶來的影響,例如我們可能需要預(yù)先執(zhí)行函數(shù)多少次來讓JVM“預(yù)熱”這些代碼。慶幸的是clojure世界里有一個開源庫Criterium幫你自動搞定這一切,它的項(xiàng)目主頁也在github上:https://github.com/hugoduncan/criterium

               首先在你的項(xiàng)目里添加criterium依賴:
          :dependencies [[org.clojure/clojure "1.3.0"]
                                  [criterium "0.2.0"]])
             
               接下來引用criterium.core這個ns,因?yàn)閏riterium主要宏也叫bench,因此我們原來的bench函數(shù)不能用了,換個名字叫bench-sum:
          user=> (use 'criterium.core)
          nil
          user=> (defn bench-sum [sum n]
                        (with-progress-reporting (bench (apply sum (range 0 (+ 1 n))) :verbose)))
          #'user/bench-sum

               調(diào)用criterium的bench宏執(zhí)行測試,使用with-progress-reporting宏包裝測試代碼并匯報(bào)測試進(jìn)展,測試進(jìn)展會打印在標(biāo)準(zhǔn)輸出上。請注意,我這里并沒有利用dotimes做循環(huán)測試,因?yàn)閏riterium會自己計(jì)算應(yīng)該運(yùn)行的循環(huán)次數(shù),我們并不需要明確指定,測試下結(jié)果:
          user=> (bench-sum sum1 10000)
          Cleaning JVM allocations 
          Warming up for JIT optimisations 
          Estimating execution count 
          Running with sample-count 60 exec-count 1417 
          Checking GC
          Cleaning JVM allocations 
          Finding outliers 
          Bootstrapping 
          Checking outlier significance
          x86_64 Mac OS X 10.7.3 4 cpu(s)
          Java HotSpot(TM) 64-Bit Server VM 20.4-b02-402
          Runtime arguments: -Dclojure.compile.path=/Users/apple/programming/avos/logdashboard/test/classes -Dtest.version=1.0.0-SNAPSHOT -Dclojure.debug=false
          Evaluation count             : 85020
                       Execution time mean : 722.730169 us  95.0% CI: (722.552670 us, 722.957586 us)
              Execution time std-deviation : 1.042966 ms  95.0% CI: (1.034972 ms, 1.054015 ms)
                   Execution time lower ci : 692.122089 us  95.0% CI: (692.122089 us, 692.260198 us)
                   Execution time upper ci : 768.239944 us  95.0% CI: (768.239944 us, 768.305222 us)

          Found 2 outliers in 60 samples (3.3333 %)
              low-severe     2 (3.3333 %)
           Variance from outliers : 25.4066 % Variance is moderately inflated by outliers
          nil


          user=> (bench-sum sum2 10000)
          Cleaning JVM allocations 
          Warming up for JIT optimisations 
          Estimating execution count 
          Running with sample-count 60 exec-count 917 
          Checking GC
          Cleaning JVM allocations 
          Finding outliers 
          Bootstrapping 
          Checking outlier significance
          x86_64 Mac OS X 10.7.3 4 cpu(s)
          Java HotSpot(TM) 64-Bit Server VM 20.4-b02-402
          Runtime arguments: -Dclojure.compile.path=/Users/apple/programming/avos/logdashboard/test/classes -Dtest.version=1.0.0-SNAPSHOT -Dclojure.debug=false
          Evaluation count             : 55020
                       Execution time mean : 1.070884 ms  95.0% CI: (1.070587 ms, 1.071136 ms)
              Execution time std-deviation : 1.057659 ms  95.0% CI: (1.050688 ms, 1.062877 ms)
                   Execution time lower ci : 1.024195 ms  95.0% CI: (1.024164 ms, 1.024195 ms)
                   Execution time upper ci : 1.145664 ms  95.0% CI: (1.145664 ms, 1.145741 ms)

          Found 1 outliers in 60 samples (1.6667 %)
              low-severe     1 (1.6667 %)
           Variance from outliers : 19.0208 % Variance is moderately inflated by outliers
          nil


              這個報(bào)告是不是相當(dāng)專業(yè)?不是搞統(tǒng)計(jì)還不一定讀的懂。大概解讀下,sample-count是取樣次數(shù),默認(rèn)是60次,exec-count是測試的執(zhí)行次數(shù)(不包括前期warm up和JIT在內(nèi)),CI是可信區(qū)間,這里取95%,Execution time mean是平均執(zhí)行時間,而lower和upper是測試過程中執(zhí)行時間的最小和最大值。而outliers是這一組測試中的異常值,比如執(zhí)行sum1測試發(fā)現(xiàn)了2組異常結(jié)果。從結(jié)果來看,sum1的平均執(zhí)行時間是722微秒,而sum2的平均執(zhí)行時間是1.07毫秒,因此還是sum1更快一些。

              總結(jié)下,如果只是在開發(fā)過程中做一些小塊代碼的簡單測試,可以直接利用內(nèi)置的time宏,如果你希望做一次比較標(biāo)準(zhǔn)的性能測試,那么就應(yīng)該利用criterium這個優(yōu)秀的開源庫。

          posted @ 2012-03-22 21:14 dennis 閱讀(4153) | 評論 (0)編輯 收藏


              繼續(xù)Clojure世界之旅,介紹下我今天的探索成果,使用clojure生成clojure項(xiàng)目的API文檔。在java里,我們是利用javadoc生成API文檔,各種build工具都提供了集成,例如maven和ant都提供了javadoc插件或者task。在Clojure世界里,同樣有一系列工具幫助你從源碼中自動化生成API文檔。今天主要介紹三個工具。不過我不會介紹怎么在clojure里寫doc,具體怎么做請看一些開源項(xiàng)目,或者直接看clojure.core的源碼。

              首先是codox,使用相當(dāng)簡單,我們這里都假設(shè)你使用Leiningen作為構(gòu)建工具,在project.clj里添加codox依賴:
            :dev-dependencies    [[codox "0.5.0"]]

              解下執(zhí)行lein doc命令即可生成文檔,生成的文檔放在doc目錄,在瀏覽器里打開index.html即可觀察生成的文檔。我給clojure-control生成的codox文檔可以看這個鏈接,效果還是不錯的。

              第二個要介紹的工具是marginalia,使用方法類似codox,首先還是添加依賴:
          :dev-dependencies [lein-marginalia "0.7.0"]
             
              執(zhí)行l(wèi)ein deps處理依賴關(guān)系,然后執(zhí)行lein marg命令即可在docs目錄生成文檔,與codox不同的是marginalia只生成一個html文件,沒有帶js和css,但是效果也不錯,可以看我給clojure-control生成的marg文檔鏈接marginalia生成的文檔說明和源碼左右對照,很利于閱讀源碼。

             最后要介紹的就是Clojure.org自己在使用的autodoc,如果你喜歡clojure.org上的API文檔格式可以采用這個工具。并且autodoc可以跟github pages結(jié)合起來,生成完整的項(xiàng)目文檔并展示在github上。例如以clojure-control為例來介紹整個過程。首先你需要配置你的github pages,參照這個鏈接
          http://pages.github.com/。

              第一步,仍然是在project.clj添加依賴:
          :dev-dependencies [[lein-autodoc "0.9.0"]]
                 第二步,在你的.gitignore里忽略autodoc目錄:
          autodoc/**
                 將這些更改提交到github上,接下來在你的項(xiàng)目目錄clone一份項(xiàng)目源碼到<project>/autodoc目錄:
           git clone git@github.com:<user name>/<project name>.git autodoc
                 進(jìn)入autodoc目錄,執(zhí)行下列命令創(chuàng)建一個gh-pages分支:
           $ cd autodoc
           $ git symbolic-ref HEAD refs/heads/gh-pages
           $ rm .git/index
           $ git clean -fdx
           $ cd ..
               回到項(xiàng)目根目錄后,執(zhí)行lein autodoc命令在autodoc目錄生成文檔:
          lein autodoc
               接下來將生成的文檔推送到github分支上:
           $cd autodoc 
           $ git add -A
           $ git commit -m"Documentation update"
           $ git push origin gh-pages
              等上幾分鐘,讓github渲染你的文檔,最終的效果看這個鏈接 http://killme2008.github.com/clojure-control     
              autodoc和marginalia都支持maven,具體使用請看他們的文檔。

          posted @ 2012-03-21 22:24 dennis 閱讀(4240) | 評論 (0)編輯 收藏

              前面一篇博客介紹了我在github上的一個metaq分支,今天下午寫了個metaq的python客戶端,目前僅支持發(fā)送消息功能,不過麻雀雖小,五臟俱全,客戶端和zookeeper的交互和連接管理之類都還具備,不出意外,我們會首先用上。第一次正兒八經(jīng)地寫python代碼,寫的不好的地方請盡管拍磚,多謝。
              項(xiàng)目叫meta-python,仍然放在github上:https://github.com/killme2008/meta-python

              使用需要先安裝zkpython這個庫,具體安裝這篇博客,使用很簡單,發(fā)送消息:
              from metamorphosis import Message,MessageProducer,SendResult
              p=MessageProducer("topic")
              message=Message("topic","message body")
              print p.send(message)
              p.close()

              
          MessageProducer就是消息發(fā)送者,它的構(gòu)造函數(shù)接受至少一個topic,默認(rèn)的zk_servers為localhost:2181,可以通過zk_servers參數(shù)指定你的zookeeper集群:

          p=MessageProducer("topic",zk_servers="192.168.1.100:2191,192.168.1.101:2181")

          更多參數(shù)請直接看源碼吧。一個本機(jī)的性能測試(meta和客戶端都跑在我的機(jī)器上,機(jī)器是Mac MC700,osx 10.7,磁盤沒有升級過):
          from metamorphosis import Message,MessageProducer
          from time import time
          p=MessageProducer("avos-fetch-tasks")
          message=Message("avos-fetch-tasks","http://www.taobao.com")
          start=time()
          for i in range(0,10000):
              sent=p.send(message)
              if not sent.success:
                  print "send failed"
          finish=time()
          secs=finish-start
          print "duration:%s seconds" % (secs)
          print "tps:%s msgs/second" % (10000/secs)
          p.close()

           結(jié)果:


          duration:1.85962295532 seconds
          tps:5377.43415749 msgs/second

          posted @ 2012-03-21 19:08 dennis 閱讀(5557) | 評論 (1)編輯 收藏

              開源的memcached Java客戶端——xmemcached發(fā)布1.3.6版本。

              主要改進(jìn)如下: 

          1.  為MemcachedClientBuilder添加兩個新方法用于配置:

          public void setConnectTimeout(long connectTimeout);  
          public void setSanitizeKeys(boolean sanitizeKeys);

           

          2.  用于hibernate的XmemcachedClientFactoryd添加了connectTimeout屬性,感謝網(wǎng)友 Boli.Jiang的貢獻(xiàn)。

          3.  添加新的枚舉類型 net.rubyeye.xmemcached.transcoders.CompressionMode,用于指定Transcoder的壓縮類型,默認(rèn)是ZIP壓縮,可選擇GZIP壓縮。Transcoder接口添加setCompressionMode方法。

          4.  修改心跳規(guī)則,原來是在連接空閑的時候發(fā)起心跳,現(xiàn)在變成固定每隔5秒發(fā)起一次心跳檢測連接。

          5.  修改默認(rèn)參數(shù),默認(rèn)禁用nagle算法,默認(rèn)將批量get的合并因子下降到50。

          6.  修復(fù)bug和改進(jìn),包括:161163165、169172、173、176、179180。

           

          項(xiàng)目主頁:http://code.google.com/p/xmemcached/

          項(xiàng)目文檔:http://code.google.com/p/xmemcached/w/list

          下載:http://code.google.com/p/xmemcached/downloads/list

          源碼:https://github.com/killme2008/xmemcached

           

          Maven依賴:

           <dependency>  

              <groupId>com.googlecode.xmemcached</groupId>  
              <artifactId>xmemcached</artifactId>  
              <version>1.3.6</version>  
          </dependency> 

              最后感謝所有提出issue和改進(jìn)意見的朋友們。

          posted @ 2012-03-19 10:51 dennis 閱讀(4909) | 評論 (3)編輯 收藏

              加入avos.com已經(jīng)一個月多一點(diǎn),很榮幸加入這個充滿活力的跨國團(tuán)隊(duì)。去了趟北京,跟我的同事們終于當(dāng)面認(rèn)識了下,并且順利舉辦了cn-clojure的第二次聚會。不過很悲劇的是在北京一周都在生病,哪也沒去成,要見的人也沒見到,要湊的飯局也沒吃到,非常遺憾,希望以后再彌補(bǔ)。不過我暫時因?yàn)榧彝サ囊蛩剡€在杭州遠(yuǎn)程辦公,溝通都是通過gtalk和google+ hangout,很多東西對我來說都是全新的經(jīng)歷。遠(yuǎn)程辦公有利有弊,其實(shí)我還是更喜歡能在一個辦公室里工作,交流方便,只要轉(zhuǎn)個椅子就好。

              正式介紹下我們公司,大boss是youtube創(chuàng)始人查德•赫利(Chad Hurley)和陳士駿(Steve Chen),我們在中國的boss是前google員工/耶魯?shù)牟┦?a >江宏帥哥,更多關(guān)于團(tuán)隊(duì)成員的介紹請看這里,我的同事們真的很強(qiáng)大,我要學(xué)習(xí)的地方很多。我們做的產(chǎn)品是從雅虎手上買下來的delicious.com,不過中國團(tuán)隊(duì)運(yùn)作的是美味書簽——mei.fm。我們剛在3月1號開始做public beta,預(yù)計(jì)會在4月份的時候正式對外開放注冊。我們的團(tuán)隊(duì)博客在這里。

              我在團(tuán)隊(duì)里做的事情還是偏向后端,這一個月來做的事情更偏向運(yùn)維之類,搞搞solr復(fù)制、mysql復(fù)制、程序監(jiān)控之類,將原來只是簡單了解過的東西動手做了一遍,能親手實(shí)踐的感覺不錯。在此過程中要感謝鋒爺和劉帥哥的幫助,再次感謝。淘寶的同事們開源了metaq和gecko,我也做了點(diǎn)工作,都在這里。幾個維護(hù)的開源項(xiàng)目都沒有太大進(jìn)展,很慚愧,還被人催發(fā)新版本,能承諾的是周末發(fā)xmemcached的新版本,主要還是修bug。本來要寫個clojure世界的系列文章,因?yàn)轫憫?yīng)寥寥,也不是很有動力寫下去。雜七雜八讀了幾本書,都沒讀完,這一個月杭州太冷了,雨下個不停,不過終于這一周開始晴天了,希望老天爺別再掉眼淚。

              收拾收拾心情,整裝待發(fā),希望新的一年里能做出點(diǎn)不同的東西。
              

          posted @ 2012-03-16 22:59 dennis 閱讀(2982) | 評論 (7)編輯 收藏


              上周我在淘寶的同事開源了一個消息中間件metamorphosis,放在了淘蝌蚪上。我從淘蝌蚪的svn上fork了一個github的分支,放在了這里:
           1.主體工程:https://github.com/killme2008/Metamorphosis
           3.Twitter storm的spout項(xiàng)目:https://github.com/killme2008/storm-metamorphosis-spout
              
              主要做了一些pom文件的簡化,發(fā)布1.4.0.2版本到maven central倉庫,并且寫了幾個簡單的入門文檔,提供了一個完整打包可運(yùn)行的下載,有興趣的自己看github頁面吧。 Wiki文檔放在:
              https://github.com/killme2008/Metamorphosis/wiki
             
               客戶端Maven依賴包括,可自行選擇添加:
          <dependency>
              <groupId>com.taobao.metamorphosis</groupId>
              <artifactId>metamorphosis-client</artifactId>
              <version>1.4.0.2</version>
          </dependency>

          <dependency>
              <groupId>com.taobao.metamorphosis</groupId>
              <artifactId>metamorphosis-client-extension</artifactId>
              <version>1.4.0.2</version>
          </dependency>

          <dependency>
              <groupId>com.taobao.metamorphosis</groupId>
              <artifactId>storm-metamorphosis-spout</artifactId>
              <version>1.0.0</version>
          </dependency>

               ps.我開通了新浪微博,有興趣相互關(guān)注下:http://weibo.com/fnil,你看,偏見是可以改變的。

          posted @ 2012-03-16 10:39 dennis 閱讀(8389) | 評論 (12)編輯 收藏

          僅列出標(biāo)題
          共56頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
          主站蜘蛛池模板: 喜德县| 天峨县| 马鞍山市| 寿光市| 安吉县| 高淳县| 资溪县| 普陀区| 湟源县| 佛教| 宁陵县| 宁夏| 绥芬河市| 商都县| 台江县| 江阴市| 霞浦县| 商城县| 昌乐县| 聊城市| 小金县| 辰溪县| 齐河县| 杨浦区| 阜城县| 灌阳县| 陕西省| 津南区| 东光县| 新宾| 阳新县| 陵水| 宜宾县| 滨州市| 黎平县| 广宗县| 铜川市| 通辽市| 建平县| 汶川县| 永胜县|