2011年7月13日

          前兩天休眠后機(jī)器非正常關(guān)機(jī),重新啟動(dòng)后運(yùn)行eclipse。悲催的發(fā)現(xiàn)eclipse 無(wú)法啟動(dòng)了。每次雙擊啟動(dòng)后,確定完workspace后,顯示啟動(dòng)畫(huà)面,沒(méi)過(guò)一會(huì)就進(jìn)入灰色無(wú)響應(yīng)狀態(tài)。啟動(dòng)畫(huà)面始終停留在Loading workbench狀態(tài)。反復(fù)重啟,狀態(tài)依舊。嘗試解決。

          搜索了一下,應(yīng)該是非正常關(guān)機(jī)導(dǎo)致eclipse工作區(qū)的文件狀態(tài)錯(cuò)誤導(dǎo)致。在工作區(qū)目錄中,有一個(gè).metadata目錄,里面是工作區(qū)及各插件的信息,刪除此目錄可以解決問(wèn)題。

          為保險(xiǎn)起見(jiàn),將.metadata改名移動(dòng)到/tmp目錄,再重啟eclipse,果然可以正常啟動(dòng)eclipse了,但原來(lái)工作區(qū)的配置和項(xiàng)目信息也都消失,直接顯示的是歡迎界面。

          如何恢復(fù)原來(lái)的project配置呢?嘗試對(duì)比了當(dāng)前的.metadata和之前備份的那個(gè)目錄,發(fā)現(xiàn)缺少了很多配置文件。試著一點(diǎn)點(diǎn)恢復(fù)一些目錄,但效 果不理想。因?yàn)椴恢滥男┪募?目錄)可以恢復(fù),哪些恢復(fù)會(huì)帶來(lái)問(wèn)題。將備份的整個(gè)目錄恢復(fù)試試?Eclipse又回到了無(wú)法啟動(dòng)的狀態(tài)了。

          怎么辦?這時(shí)想到啟動(dòng)停止時(shí)顯示的狀態(tài):"Loading workbench",看來(lái)和這個(gè)workbench插件有關(guān)。查看原來(lái)的.metadata/.plugins目錄,在眾多文件夾中
          com.collabnet.subversion.merge          org.eclipse.search
          org.eclipse.compare                           org.eclipse.team.core
          org.eclipse.core.resources                  org.eclipse.team.cvs.core
          org.eclipse.core.runtime               org.eclipse.team.ui
          org.eclipse.debug.core                 org.eclipse.ui.ide
          org.eclipse.debug.ui                   org.eclipse.ui.intro
          org.eclipse.dltk.core                    org.eclipse.ui.views.log
          org.eclipse.dltk.core.index.sql.h2     org.eclipse.ui.workbench
          org.eclipse.dltk.ui                           org.eclipse.ui.workbench.texteditor
          org.eclipse.epp.usagedata.recording    org.eclipse.wb.discovery.core
          org.eclipse.jdt.core                             org.eclipse.wst.internet.cache
          org.eclipse.jdt.ui                                 org.eclipse.wst.jsdt.core
          org.eclipse.ltk.core.refactoring          org.eclipse.wst.jsdt.ui
          org.eclipse.ltk.ui.refactoring            org.eclipse.wst.jsdt.web.core
          org.eclipse.m2e.core                    org.eclipse.wst.sse.ui
          org.eclipse.m2e.logback.configuration  org.eclipse.wst.validation
          org.eclipse.mylyn.bugzilla.core        org.eclipse.wst.xml.core
          org.eclipse.mylyn.tasks.ui             org.tigris.subversion.subclipse.core
          org.eclipse.php.core                   org.tigris.subversion.subclipse.graph
          org.eclipse.php.ui                     org.tigris.subversion.subclipse.ui

          發(fā)現(xiàn)了兩個(gè): org.eclipse.ui.workbenchorg.eclipse.ui.workbench.texteditor

          不管三七二十一,刪了這兩個(gè)目錄,重新啟動(dòng)eclipse。正常啟動(dòng)且原項(xiàng)目信息正確加載。
          posted @ 2012-11-11 14:15 胡鵬 閱讀(6468) | 評(píng)論 (7)編輯 收藏

          最近團(tuán)隊(duì)遇到一個(gè)案例。看似很小的事情,但仔細(xì)研究起來(lái),徹底分析,每一個(gè)環(huán)節(jié)都沒(méi)做好,細(xì)節(jié)部分糟糕得一塌糊涂,最后導(dǎo)致一件事情的結(jié)果:完全失敗。

          經(jīng)常有人在聊起公司的時(shí)候問(wèn)我,你現(xiàn)在最擔(dān)心的事情有哪些? 我當(dāng)然會(huì)重點(diǎn)提到團(tuán)隊(duì)。不過(guò)在談及團(tuán)隊(duì)的時(shí)候,我又最擔(dān)心在「細(xì)節(jié)」問(wèn)題上做不好。

          細(xì)節(jié)就是競(jìng)爭(zhēng)力,尤其是對(duì)小團(tuán)隊(duì)來(lái)說(shuō),小團(tuán)隊(duì)更應(yīng)該注重細(xì)節(jié)問(wèn)題。大一點(diǎn)的公司可以追究責(zé)任人,靠流程、靠制度,靠各級(jí)評(píng)審等等一系列的「成本」來(lái)提升細(xì)節(jié)能力。小一點(diǎn)的公司或者團(tuán)隊(duì)怎么辦? 恐怕只有依賴(lài)每個(gè)人的能力和責(zé)任心了。

          細(xì)節(jié)也是鍛煉人的能力的地方,搞清楚每一個(gè)細(xì)節(jié),將每一個(gè)細(xì)節(jié)涉及到的背景知識(shí)和技能掌握好,能力自然也就會(huì)得到提升。繼而,著手做更大的事情也不 會(huì)手忙腳亂。相反,做不好細(xì)節(jié)和小事的人,如果總?cè)轮觥钢匾沟氖虑椋龈小柑魬?zhàn)」的事情,這樣的事情真的到你面前,真的能接住么?

          為什么我們?cè)诩?xì)節(jié)上做不好?

          對(duì)細(xì)節(jié)問(wèn)題不夠重視 一件事情到了自己這里,頭腦中先入為主認(rèn)為只是一件小事,是一件簡(jiǎn)單的事情。這樣,當(dāng)然就不會(huì)給予足夠的重視。小事不一定不重要,小事不一定意味著做起來(lái)就簡(jiǎn)單。

          對(duì)事情復(fù)雜度缺乏認(rèn)知 不就是給客戶(hù)寫(xiě)一封電子郵件么? 不就是用 HTML 寫(xiě)一個(gè)頁(yè)面么? 不就是做一則橫幅廣告么? 那么,這些事情真的簡(jiǎn)單么? 為什么別人為客戶(hù)寫(xiě)的郵件打開(kāi)率更高? 為什么別人寫(xiě)的頁(yè)面更容易被搜索引擎收錄? 為什么別人做的廣告轉(zhuǎn)化率更好? 背后涉及到哪些知識(shí)? 不想研究一下么? 不能研究一下么?

          對(duì)細(xì)節(jié)缺乏耐心 草草了事,應(yīng)付了事,遇到問(wèn)題馬馬虎虎,輕易得放過(guò)了很多可以讓自己得到成長(zhǎng)的機(jī)會(huì)。「這問(wèn)題我沒(méi)想過(guò)」「這事情我沒(méi)遇到過(guò)」「設(shè)計(jì)稿都改過(guò)兩次了」... 這類(lèi)借口在任何一個(gè)團(tuán)隊(duì)都很常見(jiàn)。

          缺少責(zé)任心 常常覺(jué)得自己這里做不好,還有別人會(huì)把關(guān)呢。擔(dān)心什么? 可如果所有人都這么想呢? 「文案是產(chǎn)品經(jīng)理的事情,關(guān)我甚么事?」如果你能對(duì)文案也有改進(jìn)意見(jiàn),誰(shuí)說(shuō)以后你就不能做產(chǎn)品經(jīng)理做的事情呢?

          主觀上不認(rèn)可自己的工作 就給我這么一點(diǎn)錢(qián),要我做這么多工作? 問(wèn)題是我們?nèi)绻欢嘧鲆稽c(diǎn)工作,不提升一下自己,又怎么能多一點(diǎn)錢(qián)呢?

          為什么細(xì)節(jié)上做不好? 不同人不同的角度還會(huì)有不同的看法。不過(guò)有一點(diǎn)我能肯定,細(xì)節(jié)不會(huì)決定成敗,但做不好細(xì)節(jié),一定會(huì)失敗。

          做好細(xì)節(jié),百事可作。

          posted @ 2012-10-28 16:31 胡鵬 閱讀(247) | 評(píng)論 (0)編輯 收藏
          mac中自帶的jdk并不包含源代碼,所以在eclipse中無(wú)法查看, 需要到apple上去下載,
          https://developer.apple.com/downloads/index.action
          Documentation and developer runtime of "Java for OS X 2012-005". Contains JavaDoc, tools documentation, and native framework headers.
          目前的版本是:Java for OS X 2012-005 Developer Package
          下載下來(lái)后,直接安裝,默認(rèn)設(shè)置就可以了,然后可以建個(gè)link,方便選擇。
          1. sudo -s
          2. cd /System/Library/Frameworks/JavaVM.framework/Home
          3. ln -s /Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home/docs.jar
          4. ln -s  /Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home/src.jar
          5. 最后跟windows類(lèi)似,在eclipse中用command + click點(diǎn)擊查看一個(gè)類(lèi)的源碼。然后選“add source",選中上面的 src.jar 文件即可
          posted @ 2012-10-16 21:48 胡鵬 閱讀(3799) | 評(píng)論 (0)編輯 收藏
          雖然android安裝完成后會(huì)有一套參考手冊(cè),其中包括了api,但是如果在開(kāi)發(fā)過(guò)程中能查看android的源碼(sdk的源碼),將對(duì)我們學(xué)習(xí)android有一定的幫助.畢竟,有時(shí)候源碼比api文檔更能說(shuō)明問(wèn)題.
              我平常學(xué)習(xí)android用的2.2版本,從網(wǎng)上下載了2.2的源碼(從官方git庫(kù)下載太麻煩,是從網(wǎng)友共享的源碼位置下載的).按照網(wǎng)上的說(shuō)法,我把 解壓后的那一堆文檔放在了android-sdk-root\platforms\android-8\sources目錄下.不過(guò)并沒(méi)有重啟 eclipse.而是通過(guò)這種方法來(lái)做的-----在eclipse中,鼠標(biāo)放在一個(gè)android提供的類(lèi)上,按下ctrl鍵,會(huì)打開(kāi)一個(gè)新頁(yè)面,提示 找不到對(duì)應(yīng)的類(lèi)的class或者源文件,但這個(gè)新頁(yè)面上有個(gè)導(dǎo)入源碼的按鈕,點(diǎn)擊之后選擇下載好的source位置,確定后就可以了.
              順便說(shuō)下我下載android源碼的位置:
                  http://tech.cncms.com/UploadFiles/20101025/androidsdk2.2_sources.zip

          下載源碼到maven倉(cāng)庫(kù): http://search.maven.org/#search|gav|1|g%3A%22com.google.android%22%20AND%20a%3A%22android%22

          posted @ 2012-09-16 10:15 胡鵬 閱讀(466) | 評(píng)論 (0)編輯 收藏
                  離開(kāi)淘寶后,自己創(chuàng)業(yè),產(chǎn)品需要推廣,考慮到當(dāng)今流量最大的聚集在微博上,我們也來(lái)做做微博運(yùn)營(yíng),我是一個(gè)技術(shù)人員,運(yùn)營(yíng)對(duì)于我來(lái)說(shuō),從0開(kāi)始,站在巨人的肩膀上學(xué)習(xí),稍稍總結(jié)了下。

          1. 使用工具:微博第三方插件已經(jīng)提供了很多功能,適合自己的都用起來(lái),這個(gè)我覺(jué)得最節(jié)省我的時(shí)間,其他網(wǎng)上提供的軟件都可以使用,重要是適合自己,安全第一。

          2. 寫(xiě)工具:有很多個(gè)性化需求的時(shí)候,如果變相的不能實(shí)現(xiàn),人為處理太慢太花時(shí)間,我們現(xiàn)在是小創(chuàng)業(yè)團(tuán)隊(duì),很多事情都需要自己做,數(shù)據(jù)增長(zhǎng)慢,在有限的資源下,寫(xiě)工具是非常好的方式,作為技術(shù)人員就直接動(dòng)手寫(xiě),當(dāng)然也需要看看性?xún)r(jià)比。


          3.微博定位:
          找好本微博的主題,內(nèi)容一般遵循原則:定制+非定制。定制是指針對(duì)你的目標(biāo)群體來(lái)選擇內(nèi)容,要讓這部分人感興趣,非定制:是指那種適合任何粉絲的內(nèi)容。

           

          例如:我的目標(biāo)群體是女性,我的定制內(nèi)容就有美容、護(hù)膚、服飾搭配、星座、愛(ài)情等女性關(guān)注的話(huà)題,非定制的有笑話(huà)、經(jīng)典語(yǔ)錄、旅游等大眾類(lèi)容。根據(jù)內(nèi)容來(lái) 建立話(huà)題,如#美容護(hù)膚# #開(kāi)心一笑##XX語(yǔ)錄#等等,我就為自己建立了10個(gè)左右話(huà)題,每天的內(nèi)容按照話(huà)題來(lái)制作。

           

          4.主要工作流程:(這個(gè)圖是轉(zhuǎn)的)


          5.常用的微博話(huà)題(這個(gè)圖片也是轉(zhuǎn)的)



          6. 關(guān)注項(xiàng)目:微博和主動(dòng)@,評(píng)論,私信,群,邀請(qǐng),勛章,策劃產(chǎn)品活動(dòng),參與微活動(dòng)

           

           7.微博運(yùn)營(yíng)最重要的是:一段時(shí)間需要總結(jié)挑選合適的方法執(zhí)行,沒(méi)有效果的去除。

          如:微博發(fā)布時(shí)間/數(shù)量

          我(轉(zhuǎn),不是我)曾在粉絲超過(guò)一萬(wàn)之后就開(kāi)始研究的我的微博改什么時(shí)候發(fā)布,每天發(fā)布多少。我現(xiàn)在粉絲中做了一個(gè)投票:你們一般什么時(shí)候織微博。最后有200多人參加, 我大概劃分了5個(gè)時(shí)段,9-12點(diǎn),12-17點(diǎn) 17-19點(diǎn) 19-22點(diǎn) 22-24點(diǎn) 0-3點(diǎn),做多選擇3個(gè)答案,結(jié)果出來(lái)之后就有個(gè)大概了。接下來(lái)我用一周的時(shí)間從9點(diǎn)—24點(diǎn)之間每1小時(shí)發(fā)布一條信息。總共16條信息,我就分析每條信 息的轉(zhuǎn)發(fā)、回復(fù)數(shù)量,一周之后我就可以摸清粉絲的上網(wǎng)時(shí)間規(guī)律。然后我選擇哪幾個(gè)時(shí)間段重點(diǎn)維護(hù),并在那幾個(gè)時(shí)間段進(jìn)一步研究發(fā)布數(shù)量規(guī)律,我又分為每1小時(shí),每0.5小時(shí)兩個(gè)因素來(lái)研究發(fā)布數(shù)量。



                
          posted @ 2012-03-28 18:28 胡鵬 閱讀(261) | 評(píng)論 (0)編輯 收藏

          JMock是幫助創(chuàng)建mock對(duì)象的工具,它基于Java開(kāi)發(fā),在Java測(cè)試與開(kāi)發(fā)環(huán)境中有不可比擬的優(yōu)勢(shì),更重要的是,它大大簡(jiǎn)化了虛擬對(duì)象的使用。本文中,通過(guò)一個(gè)簡(jiǎn)單的測(cè)試用例來(lái)說(shuō)明JMock如何幫助我們實(shí)現(xiàn)這種孤立測(cè)試。
              我們?cè)跍y(cè)試某類(lèi)時(shí),由于它要與其他類(lèi)發(fā)生聯(lián)系,因此往往在測(cè)試此類(lèi)的代碼中也將與之聯(lián)系的類(lèi)也一起測(cè)試了。這種測(cè)試,將使被測(cè)試的類(lèi)直接依賴(lài)于其他類(lèi),一旦其他類(lèi)發(fā)生改變,被測(cè)試類(lèi)也隨之被迫改變。更重要的是,這些其他類(lèi)可能尚未經(jīng)過(guò)測(cè)試,因此必須先測(cè)試這些類(lèi),才能測(cè)試被測(cè)試類(lèi)。這種情況下,測(cè)試驅(qū)動(dòng)開(kāi)發(fā)成為空談。而如果其他類(lèi)中也引用了被測(cè)試類(lèi),我們到底先測(cè)試哪一個(gè)類(lèi)?因此,在測(cè)試中,如果我們能將被測(cè)試類(lèi)孤立起來(lái),使其完全不依賴(lài)于其他類(lèi)的具體實(shí)現(xiàn),這樣,我們就能做到測(cè)試先行,先測(cè)試哪個(gè)類(lèi),就先實(shí)現(xiàn)哪個(gè)類(lèi),而不管與之聯(lián)系的類(lèi)是否已經(jīng)實(shí)現(xiàn)。

              虛擬對(duì)象(mock object)就是為此需要而誕生的。它通過(guò)JDK中的反射機(jī)制,在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建虛擬對(duì)象。在測(cè)試代碼中,我們可以驗(yàn)證這些虛擬對(duì)象是否被正確地調(diào)用了,也可以在明確的情況下,讓其返回特定的假想值。而一旦有了這些虛擬對(duì)象提供的服務(wù),被測(cè)試類(lèi)就可以將虛擬對(duì)象作為其他與之聯(lián)系的真實(shí)對(duì)象的替身,從而輕松地搭建起一個(gè)很完美的測(cè)試環(huán)境。

              JMock是幫助創(chuàng)建mock對(duì)象的工具,它基于Java開(kāi)發(fā),在Java測(cè)試與開(kāi)發(fā)環(huán)境中有不可比擬的優(yōu)勢(shì),更重要的是,它大大簡(jiǎn)化了虛擬對(duì)象的使用。

              本文中,通過(guò)一個(gè)簡(jiǎn)單的測(cè)試用例來(lái)說(shuō)明JMock如何幫助我們實(shí)現(xiàn)這種孤立測(cè)試。有三個(gè)主要的類(lèi),User,UserDAO,及UserService。本文中,我們只需測(cè)試UserService,準(zhǔn)備虛擬UserDAO。對(duì)于User,由于本身僅是一個(gè)過(guò)于簡(jiǎn)單的POJO,可以不用測(cè)試。但如果你是一個(gè)完美主義者,也可以使用JMock的虛擬它。在這領(lǐng)域,JMock幾乎無(wú)所不能。

          這里我用到的是:(我用的是maven依賴(lài))

                      <dependency>
             <groupId>org.jmock</groupId>
             <artifactId>jmock</artifactId>
             <version>2.5.1</version>
          </dependency>
           
          <dependency>
             <groupId>org.jmock</groupId>
             <artifactId>jmock-junit3</artifactId>
             <version>2.5.1</version>
          </dependency>

          在官方的網(wǎng)站上也有的下載。   地址:  http://jmock.org/dist/jmock-2.5.1-jars.zip

           


          public class User {
          private String name;
          public User() {
          }
          public User(String name) {
          this.name = name;
          }
          public String getName() {
          return name;
          }
          public void setName(String name) {
          this.name = name;
          }
          }

           UserDAO負(fù)責(zé)與數(shù)據(jù)庫(kù)打交道,通過(guò)數(shù)據(jù)庫(kù)保存、獲取User的信息。盡管我們可以不用知道JMock如何通過(guò)JDK 的反射機(jī)制來(lái)實(shí)現(xiàn)孤立測(cè)試,但至少應(yīng)知道,JDK的反射機(jī)制要求這些在運(yùn)行時(shí)創(chuàng)建的動(dòng)態(tài)類(lèi)必須定義接口。在使用JMock的環(huán)境中,由于我們要虛擬 UserDAO,意味著UserDAO必須定義接口

          public interface UserDAO {
          public User getUser(Long id);
          }

          public interface UserService {
          public void setUserDAO(UserDAO userDAO);
          public User getUser(Long id);
          }



          public class UserServiceImpl implements UserService {
          private UserDAO userDAO;
          public UserServiceImpl() {
          }
          public void setUserDAO(UserDAO userDAO) {
          this.userDAO = userDAO;
          }
          public User getUser(Long id) {
          return userDAO.getUser(id);
          }
          }


           
          import org.jmock.Expectations;
          import org.jmock.integration.junit3.MockObjectTestCase;

          public class UserServiceTest extends MockObjectTestCase {
          private UserService userService = new UserServiceImpl();
          private UserDAO userDAO = null;
          public UserServiceTest(String testName) {
          super(testName);
          }
          protected void setUp() throws Exception {
          userDAO = mock(UserDAO.class);
          userService.setUserDAO(userDAO);
          }
          public void testGetUser() {
          String name = "lsb";
          final User fakeUser = new User(name);
          checking(new Expectations(){{
                      oneOf(userDAO).getUser(1L);
                      will(returnValue(fakeUser));
                  }});
          User user = userService.getUser(1L);
          assertNotNull(user);
          assertEquals(name, user.getName());
          }
          protected void tearDown() throws Exception {
          }
          }

          posted @ 2012-02-23 21:52 胡鵬 閱讀(870) | 評(píng)論 (0)編輯 收藏
                   在開(kāi)發(fā)Android和iPhone應(yīng)用程序時(shí),我們往往需要從服務(wù)器不定的向手 機(jī)客戶(hù)端即時(shí)推送各種通知消息,iPhone上已經(jīng)有了比較簡(jiǎn)單的和完美的推送通知解決方案,可是Android平臺(tái)上實(shí)現(xiàn)起來(lái)卻相對(duì)比較麻煩,最近利用 幾天的時(shí)間對(duì)Android的推送通知服務(wù)進(jìn)行初步的研究。
          在Android手機(jī)平臺(tái)上,Google提供了C2DM(Cloudto Device Messaging)服務(wù)。

          Android Cloud to Device Messaging (C2DM)是一個(gè)用來(lái)幫助開(kāi)發(fā)者從服務(wù)器向Android應(yīng)用程序發(fā)送數(shù)據(jù)的服務(wù)。該服務(wù)提供了一個(gè)簡(jiǎn)單的、輕量級(jí)的機(jī)制,允許服務(wù)器可以通知移動(dòng)應(yīng)用程序直接與服務(wù)器進(jìn)行通信,以便于從服務(wù)器獲取應(yīng)用程序更新和用戶(hù)數(shù)據(jù)。C2DM服務(wù)負(fù)責(zé)處理諸如消息排隊(duì)等事務(wù)并向運(yùn)行于目標(biāo)設(shè)備上的應(yīng)用程序分發(fā)這些消息。

          使用C2DM框架的要求
          1. 需要Android2.2及以上的系統(tǒng)版本
          2. 使用C2DM功能的Android設(shè)備上需要設(shè)置好Google的賬戶(hù)。
          3.  C2DM需要依賴(lài)于Google官方提供的C2DM服務(wù)器,由于國(guó)內(nèi)的網(wǎng)絡(luò)環(huán)境,這個(gè)服務(wù)經(jīng)常不可用,如果想要很好的使用,我們的App Server必須也在國(guó)外,這個(gè)恐怕不是每個(gè)開(kāi)發(fā)者都能夠?qū)崿F(xiàn)的

          要使用C2DM來(lái)進(jìn)行Push操作,基本上要使用以下6個(gè)步驟


          (1)注冊(cè):Android設(shè)備把使用C2DM功能的用戶(hù)賬戶(hù)(比如android.c2dm.demo@gmail.com)和App名稱(chēng)發(fā)送給C2DM服務(wù)器。

          (2)C2DM服務(wù)器會(huì)返回一個(gè)registration_id值給Android設(shè)備,設(shè)備需要保存這個(gè)registration_id值。

          (3)Android設(shè)備把獲得的registration_id和C2DM功能的用戶(hù)賬戶(hù)(android.c2dm.demo@gmail.com)發(fā)送給自己的服務(wù)器,不過(guò)一般用戶(hù)賬戶(hù)信息因?yàn)楹头?wù)器確定好的,所以不必發(fā)送。

          這樣Android設(shè)備就完成了C2DM功能的注冊(cè)過(guò)程,接下來(lái)就可以接收C2DM服務(wù)器Push過(guò)來(lái)的消息了。

          (4)服務(wù)器獲得數(shù)據(jù)。這里圖中的例子Chrome To Phone,服務(wù)器接收到Chrome瀏覽器發(fā)送的數(shù)據(jù)。數(shù)據(jù)也可以是服務(wù)器本地產(chǎn)生的。這里的服務(wù)器是Google AppEngine(很好的一項(xiàng)服務(wù),可惜在國(guó)內(nèi)被屏了),要換成自己的服務(wù)器。服務(wù)器還要獲取注冊(cè)使用C2DM功能的用戶(hù)賬戶(hù)(android.c2dm.demo@gmail.com)的ClientLogin權(quán)限Auth。

          (5)服務(wù)器把要發(fā)送的數(shù)據(jù)和registration_id一起,并且頭部帶上獲取的Auth,使用POST的方式發(fā)送給C2DM服務(wù)器。

          (6)C2DM服務(wù)器會(huì)以Push的方式把數(shù)據(jù)發(fā)送給對(duì)應(yīng)的Android設(shè)備,Android設(shè)備只要在程序中按之前和服務(wù)器商量好的格式從對(duì)應(yīng)的key中獲取數(shù)據(jù)即可。

          轉(zhuǎn)自:
          posted @ 2011-12-29 17:57 胡鵬 閱讀(1176) | 評(píng)論 (0)編輯 收藏

          地理位置索引支持是MongoDB的一大亮點(diǎn),這也是全球最流行的LBS服務(wù)foursquare 選擇MongoDB的原因之一。我們知道,通常的數(shù)據(jù)庫(kù)索引結(jié)構(gòu)是B+ Tree,如何將地理位置轉(zhuǎn)化為可建立B+Tree的形式,下文將為你描述。

          首先假設(shè)我們將需要索引的整個(gè)地圖分成16×16的方格,如下圖(左下角為坐標(biāo)0,0 右上角為坐標(biāo)16,16):

           

          單純的[x,y]的數(shù)據(jù)是無(wú)法建立索引的,所以MongoDB在建立索引的時(shí)候,會(huì)根據(jù)相應(yīng)字段的坐標(biāo)計(jì)算一個(gè)可以用來(lái)做索引的hash值,這個(gè)值叫做geohash,下面我們以地圖上坐標(biāo)為[4,6]的點(diǎn)(圖中紅叉位置)為例。

          我們第一步將整個(gè)地圖分成等大小的四塊,如下圖:



          劃分成四塊后我們可以定義這四塊的值,如下(左下為00,左上為01,右下為10,右上為11):

          01 11
          00 10

          這樣[4,6]點(diǎn)的geohash值目前為 00

          然后再將四個(gè)小塊每一塊進(jìn)行切割,如下:



          這時(shí)[4,6]點(diǎn)位于右上區(qū)域,右上的值為11,這樣[4,6]點(diǎn)的geohash值變?yōu)椋?011

          繼續(xù)往下做兩次切分:




          最終得到[4,6]點(diǎn)的geohash值為:00110100

          這樣我們用這個(gè)值來(lái)做索引,則地圖上點(diǎn)相近的點(diǎn)就可以轉(zhuǎn)化成有相同前綴的geohash值了。

          我們可以看到,這個(gè)geohash值的精確度是與劃分地圖的次數(shù)成正比的,上例對(duì)地圖劃分了四次。而MongoDB默認(rèn)是進(jìn)行26次劃分,這個(gè)值在建立索引時(shí)是可控的。具體建立二維地理位置索引的命令如下:

          db.map.ensureIndex({point : "2d"}, {min : 0, max : 16, bits : 4})

          其中的bits參數(shù)就是劃分幾次,默認(rèn)為26次。










           

          posted @ 2011-11-25 17:19 胡鵬 閱讀(582) | 評(píng)論 (0)編輯 收藏
               摘要: java中的引用分為4種:String Reference, WeakReference, softReference,PhantomReference  Strong Reference: 我們平常用的最多的就是強(qiáng)引用了 如:String s = new String("opps");這種形式的引用稱(chēng)為強(qiáng)引用,這種引用有以下幾個(gè)特點(diǎn) 1.強(qiáng)引用可以直接訪問(wèn)目標(biāo)對(duì)象&...  閱讀全文
          posted @ 2011-10-30 11:59 胡鵬 閱讀(1109) | 評(píng)論 (0)編輯 收藏
               摘要:   一、對(duì)ThreadLocal概術(shù)             JDK API 寫(xiě)道: 該類(lèi)提供了線程局部 (thread-local) 變量。這些變量不同于它們的普通對(duì)應(yīng)物,因?yàn)樵L問(wèn)某個(gè)變量(通過(guò)其 get 或 set 方法)的每個(gè)線程都有自己的局部變量,它獨(dú)立于變量的初始...  閱讀全文
          posted @ 2011-10-29 17:39 胡鵬 閱讀(1452) | 評(píng)論 (0)編輯 收藏
               摘要:        起因:在寫(xiě)java的時(shí)候,經(jīng)常遇到函數(shù)需要返回2個(gè)值或者3個(gè)值,java必須編寫(xiě)一個(gè)Object,來(lái)封裝,但很多應(yīng)用場(chǎng)景只是臨時(shí)使用,構(gòu)建對(duì)象感覺(jué)殺雞用宰牛刀,而其他語(yǔ)言有比較好的實(shí)現(xiàn)方法。(當(dāng)然通過(guò)指針引用可以解決一部分問(wèn)題) 如:一般寫(xiě)法:     Code high...  閱讀全文
          posted @ 2011-10-28 18:35 胡鵬 閱讀(6416) | 評(píng)論 (0)編輯 收藏
               摘要:     java.util.concurrent包分成了三個(gè)部分,分別是:                        ...  閱讀全文
          posted @ 2011-10-12 17:25 胡鵬 閱讀(2448) | 評(píng)論 (0)編輯 收藏
                不復(fù)制內(nèi)容了,可以看戲如下鏈接,還是有很多值得看的東東,有空看下。~

              
              http://terryblog.blog.51cto.com/1764499/547777
          posted @ 2011-07-13 20:12 胡鵬 閱讀(259) | 評(píng)論 (0)編輯 收藏

          導(dǎo)航

          <2011年7月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆分類(lèi)

          隨筆檔案

          agile

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 汉阴县| 沧源| 普定县| 永安市| 临汾市| 呼图壁县| 莲花县| 伊吾县| 沂南县| 沈阳市| 辽宁省| 涿州市| 金山区| 惠东县| 岑巩县| 墨玉县| 基隆市| 西城区| 新闻| 防城港市| 达孜县| 济阳县| 永新县| 泰州市| 汽车| 方城县| 沙雅县| 丹巴县| 五常市| 金川县| 通辽市| 博白县| 孟村| 徐闻县| 台南市| 海城市| 邳州市| 万安县| 鄢陵县| 永兴县| 五华县|