莊周夢(mèng)蝶

          生活、程序、未來(lái)
             :: 首頁(yè) ::  ::  :: 聚合  :: 管理


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

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

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

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

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


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

          一、編碼工具

          1.IDE:Eclipse或者IDEA,熟悉盡可能多的快捷鍵,《Eclipse常見快捷鍵列表
          2.插件: 
          (1) Findbugs,在release之前進(jìn)行一次靜態(tài)代碼檢查是必須的
          (2) Clover,關(guān)心你的單元測(cè)試覆蓋率
          (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的也可以啊。《Google style guide

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

          二、JDK相關(guān)

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

          jstat -gcutil pid 2000

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

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

          jmap -dump:file=test.bin pid

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

          jhat test.bin

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

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

          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)行時(shí)問(wèn)題。《Btrace使用簡(jiǎn)介

          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來(lái)分析問(wèn)題。

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

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

          四、其他

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

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

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

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

          五、如何查找工具?

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

          2.萬(wàn)能的stack overflow:http://stackoverflow.com/

          3.虛心問(wèn)牛人。

          六、最重要的是⋯⋯

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

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


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

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

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

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

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

          kibit會(huì)分析項(xiàng)目里所有clojure源碼,每個(gè)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一個(gè)一個(gè)namespace分析過(guò)去,并且按照規(guī)則對(duì)它認(rèn)為有問(wèn)題的地方打印出來(lái),并提出建議。例如這里它建議我用
          (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ī)則都放在了這里,通過(guò)defrules宏來(lái)定義檢查規(guī)則,源碼中對(duì)算術(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)])
             
              第一個(gè)規(guī)則,任何對(duì)類似(+ 1 x)的代碼,都建議替換成(inc x),后面的與此類似。理論上你也可以自定義規(guī)則,并提交給官方。總體上說(shuō)kibit仍然是比不上findbugs的,期待未來(lái)發(fā)展的更好。

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


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

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

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

              除了用System.currentTimeMillis()這樣的java方式測(cè)量運(yùn)行時(shí)間外,clojure還提供了time宏來(lái)包裝這一切:
          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
               盡管精度不一致,仍然可以看出來(lái)sum1比sum2快。
              
               這樣的測(cè)試仍然是比較粗糙的,真正的性能測(cè)試需要考慮到JVM JIT、warm up以及gc帶來(lái)的影響,例如我們可能需要預(yù)先執(zhí)行函數(shù)多少次來(lái)讓JVM“預(yù)熱”這些代碼。慶幸的是clojure世界里有一個(gè)開源庫(kù)Criterium幫你自動(dòng)搞定這一切,它的項(xiàng)目主頁(yè)也在github上:https://github.com/hugoduncan/criterium

               首先在你的項(xiàng)目里添加criterium依賴:
          :dependencies [[org.clojure/clojure "1.3.0"]
                                  [criterium "0.2.0"]])
             
               接下來(lái)引用criterium.core這個(gè)ns,因?yàn)閏riterium主要宏也叫bench,因此我們?cè)瓉?lái)的bench函數(shù)不能用了,換個(gè)名字叫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í)行測(cè)試,使用with-progress-reporting宏包裝測(cè)試代碼并匯報(bào)測(cè)試進(jìn)展,測(cè)試進(jìn)展會(huì)打印在標(biāo)準(zhǔn)輸出上。請(qǐng)注意,我這里并沒有利用dotimes做循環(huán)測(cè)試,因?yàn)閏riterium會(huì)自己計(jì)算應(yīng)該運(yùn)行的循環(huán)次數(shù),我們并不需要明確指定,測(cè)試下結(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


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

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

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


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

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

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

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

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

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

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

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

              使用需要先安裝zkpython這個(gè)庫(kù),具體安裝這篇博客,使用很簡(jiǎn)單,發(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ù)接受至少一個(gè)topic,默認(rèn)的zk_servers為localhost:2181,可以通過(guò)zk_servers參數(shù)指定你的zookeeper集群:

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

          更多參數(shù)請(qǐng)直接看源碼吧。一個(gè)本機(jī)的性能測(cè)試(meta和客戶端都跑在我的機(jī)器上,機(jī)器是Mac MC700,osx 10.7,磁盤沒有升級(jí)過(guò)):
          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 閱讀(5562) | 評(píng)論 (1)編輯 收藏

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

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

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

          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ī)則,原來(lái)是在連接空閑的時(shí)候發(fā)起心跳,現(xiàn)在變成固定每隔5秒發(fā)起一次心跳檢測(cè)連接。

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

          6.  修復(fù)bug和改進(jìn),包括:161163165169172、173176179180

           

          項(xiàng)目主頁(yè):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 閱讀(4917) | 評(píng)論 (3)編輯 收藏

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

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

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

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

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


              上周我在淘寶的同事開源了一個(gè)消息中間件metamorphosis,放在了淘蝌蚪上。我從淘蝌蚪的svn上fork了一個(gè)github的分支,放在了這里:
           1.主體工程:https://github.com/killme2008/Metamorphosis
           3.Twitter storm的spout項(xiàng)目:https://github.com/killme2008/storm-metamorphosis-spout
              
              主要做了一些pom文件的簡(jiǎn)化,發(fā)布1.4.0.2版本到maven central倉(cāng)庫(kù),并且寫了幾個(gè)簡(jiǎn)單的入門文檔,提供了一個(gè)完整打包可運(yùn)行的下載,有興趣的自己看github頁(yè)面吧。 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 閱讀(8393) | 評(píng)論 (12)編輯 收藏

          僅列出標(biāo)題
          共56頁(yè): 上一頁(yè) 1 2 3 4 5 6 7 8 9 下一頁(yè) Last 
          主站蜘蛛池模板: 恭城| 册亨县| 渭南市| 岱山县| 禹城市| 鄄城县| 花莲县| 兴城市| 霍林郭勒市| 林口县| 枣庄市| 丽水市| 江西省| 泌阳县| 辉县市| 承德市| 昌吉市| 双柏县| 团风县| 普安县| 大连市| 尼木县| 休宁县| 定边县| 资源县| 竹北市| 那坡县| 南宫市| 铜梁县| 隆林| 瑞昌市| 年辖:市辖区| 丹江口市| 库车县| 文水县| 北安市| 辽宁省| 铁力市| 宝清县| 肃宁县| 孙吴县|