2011年10月29日
搜索了一下,應(yīng)該是非正常關(guān)機(jī)導(dǎo)致eclipse工作區(qū)的文件狀態(tài)錯(cuò)誤導(dǎo)致。在工作區(qū)目錄中,有一個(gè).metadata目錄,里面是工作區(qū)及各插件的信息,刪除此目錄可以解決問題。
為保險(xiǎn)起見,將.metadata改名移動(dòng)到/tmp目錄,再重啟eclipse,果然可以正常啟動(dòng)eclipse了,但原來工作區(qū)的配置和項(xiàng)目信息也都消失,直接顯示的是歡迎界面。
如何恢復(fù)原來的project配置呢?嘗試對(duì)比了當(dāng)前的.metadata和之前備份的那個(gè)目錄,發(fā)現(xiàn)缺少了很多配置文件。試著一點(diǎn)點(diǎn)恢復(fù)一些目錄,但效 果不理想。因?yàn)椴恢滥男┪募?目錄)可以恢復(fù),哪些恢復(fù)會(huì)帶來問題。將備份的整個(gè)目錄恢復(fù)試試?Eclipse又回到了無法啟動(dòng)的狀態(tài)了。
怎么辦?這時(shí)想到啟動(dòng)停止時(shí)顯示的狀態(tài):"Loading workbench",看來和這個(gè)workbench插件有關(guān)。查看原來的.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.workbench 和 org.eclipse.ui.workbench.texteditor。
不管三七二十一,刪了這兩個(gè)目錄,重新啟動(dòng)eclipse。正常啟動(dòng)且原項(xiàng)目信息正確加載。
轉(zhuǎn)自:作者: Fenng | 可以轉(zhuǎn)載, 但必須以超鏈接形式標(biāo)明文章原始出處和作者信息及版權(quán)聲明
網(wǎng)址: http://www.dbanotes.net/startup/small_problem_big_problem.html
最近團(tuán)隊(duì)遇到一個(gè)案例。看似很小的事情,但仔細(xì)研究起來,徹底分析,每一個(gè)環(huán)節(jié)都沒做好,細(xì)節(jié)部分糟糕得一塌糊涂,最后導(dǎo)致一件事情的結(jié)果:完全失敗。
經(jīng)常有人在聊起公司的時(shí)候問我,你現(xiàn)在最擔(dān)心的事情有哪些? 我當(dāng)然會(huì)重點(diǎn)提到團(tuán)隊(duì)。不過在談及團(tuán)隊(duì)的時(shí)候,我又最擔(dān)心在「細(xì)節(jié)」問題上做不好。
細(xì)節(jié)就是競爭力,尤其是對(duì)小團(tuán)隊(duì)來說,小團(tuán)隊(duì)更應(yīng)該注重細(xì)節(jié)問題。大一點(diǎn)的公司可以追究責(zé)任人,靠流程、靠制度,靠各級(jí)評(píng)審等等一系列的「成本」來提升細(xì)節(jié)能力。小一點(diǎn)的公司或者團(tuán)隊(duì)怎么辦? 恐怕只有依賴每個(gè)人的能力和責(zé)任心了。
細(xì)節(jié)也是鍛煉人的能力的地方,搞清楚每一個(gè)細(xì)節(jié),將每一個(gè)細(xì)節(jié)涉及到的背景知識(shí)和技能掌握好,能力自然也就會(huì)得到提升。繼而,著手做更大的事情也不 會(huì)手忙腳亂。相反,做不好細(xì)節(jié)和小事的人,如果總?cè)轮觥钢匾沟氖虑椋龈小柑魬?zhàn)」的事情,這樣的事情真的到你面前,真的能接住么?
為什么我們?cè)诩?xì)節(jié)上做不好?
對(duì)細(xì)節(jié)問題不夠重視 一件事情到了自己這里,頭腦中先入為主認(rèn)為只是一件小事,是一件簡單的事情。這樣,當(dāng)然就不會(huì)給予足夠的重視。小事不一定不重要,小事不一定意味著做起來就簡單。
對(duì)事情復(fù)雜度缺乏認(rèn)知 不就是給客戶寫一封電子郵件么? 不就是用 HTML 寫一個(gè)頁面么? 不就是做一則橫幅廣告么? 那么,這些事情真的簡單么? 為什么別人為客戶寫的郵件打開率更高? 為什么別人寫的頁面更容易被搜索引擎收錄? 為什么別人做的廣告轉(zhuǎn)化率更好? 背后涉及到哪些知識(shí)? 不想研究一下么? 不能研究一下么?
對(duì)細(xì)節(jié)缺乏耐心 草草了事,應(yīng)付了事,遇到問題馬馬虎虎,輕易得放過了很多可以讓自己得到成長的機(jī)會(huì)。「這問題我沒想過」「這事情我沒遇到過」「設(shè)計(jì)稿都改過兩次了」... 這類借口在任何一個(gè)團(tuán)隊(duì)都很常見。
缺少責(zé)任心 常常覺得自己這里做不好,還有別人會(huì)把關(guān)呢。擔(dān)心什么? 可如果所有人都這么想呢? 「文案是產(chǎn)品經(jīng)理的事情,關(guān)我甚么事?」如果你能對(duì)文案也有改進(jìn)意見,誰說以后你就不能做產(chǎn)品經(jīng)理做的事情呢?
主觀上不認(rèn)可自己的工作 就給我這么一點(diǎn)錢,要我做這么多工作? 問題是我們?nèi)绻欢嘧鲆稽c(diǎn)工作,不提升一下自己,又怎么能多一點(diǎn)錢呢?
為什么細(xì)節(jié)上做不好? 不同人不同的角度還會(huì)有不同的看法。不過有一點(diǎn)我能肯定,細(xì)節(jié)不會(huì)決定成敗,但做不好細(xì)節(jié),一定會(huì)失敗。
做好細(xì)節(jié),百事可作。
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
下載下來后,直接安裝,默認(rèn)設(shè)置就可以了,然后可以建個(gè)link,方便選擇。
- sudo -s
- cd /System/Library/Frameworks/JavaVM.framework/Home
- ln -s /Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home/docs.jar
- ln -s /Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home/src.jar
- 最后跟windows類似,在eclipse中用command + click點(diǎn)擊查看一個(gè)類的源碼。然后選“add source",選中上面的 src.jar 文件即可
我平常學(xué)習(xí)android用的2.2版本,從網(wǎng)上下載了2.2的源碼(從官方git庫下載太麻煩,是從網(wǎng)友共享的源碼位置下載的).按照網(wǎng)上的說法,我把 解壓后的那一堆文檔放在了android-sdk-root\platforms\android-8\sources目錄下.不過并沒有重啟 eclipse.而是通過這種方法來做的-----在eclipse中,鼠標(biāo)放在一個(gè)android提供的類上,按下ctrl鍵,會(huì)打開一個(gè)新頁面,提示 找不到對(duì)應(yīng)的類的class或者源文件,但這個(gè)新頁面上有個(gè)導(dǎo)入源碼的按鈕,點(diǎn)擊之后選擇下載好的source位置,確定后就可以了.
順便說下我下載android源碼的位置:
http://tech.cncms.com/UploadFiles/20101025/androidsdk2.2_sources.zip
下載源碼到maven倉庫: http://search.maven.org/#search|gav|1|g%3A%22com.google.android%22%20AND%20a%3A%22android%22
1. 使用工具:微博第三方插件已經(jīng)提供了很多功能,適合自己的都用起來,這個(gè)我覺得最節(jié)省我的時(shí)間,其他網(wǎng)上提供的軟件都可以使用,重要是適合自己,安全第一。
2. 寫工具:有很多個(gè)性化需求的時(shí)候,如果變相的不能實(shí)現(xiàn),人為處理太慢太花時(shí)間,我們現(xiàn)在是小創(chuàng)業(yè)團(tuán)隊(duì),很多事情都需要自己做,數(shù)據(jù)增長慢,在有限的資源下,寫工具是非常好的方式,作為技術(shù)人員就直接動(dòng)手寫,當(dāng)然也需要看看性價(jià)比。
4.主要工作流程:(這個(gè)圖是轉(zhuǎn)的)
5.常用的微博話題(這個(gè)圖片也是轉(zhuǎn)的)
7.微博運(yùn)營最重要的是:一段時(shí)間需要總結(jié)挑選合適的方法執(zhí)行,沒有效果的去除。
如:微博發(fā)布時(shí)間/數(shù)量
JMock是幫助創(chuàng)建mock對(duì)象的工具,它基于Java開發(fā),在Java測(cè)試與開發(fā)環(huán)境中有不可比擬的優(yōu)勢(shì),更重要的是,它大大簡化了虛擬對(duì)象的使用。本文中,通過一個(gè)簡單的測(cè)試用例來說明JMock如何幫助我們實(shí)現(xiàn)這種孤立測(cè)試。
我們?cè)跍y(cè)試某類時(shí),由于它要與其他類發(fā)生聯(lián)系,因此往往在測(cè)試此類的代碼中也將與之聯(lián)系的類也一起測(cè)試了。這種測(cè)試,將使被測(cè)試的類直接依賴于其他類,一旦其他類發(fā)生改變,被測(cè)試類也隨之被迫改變。更重要的是,這些其他類可能尚未經(jīng)過測(cè)試,因此必須先測(cè)試這些類,才能測(cè)試被測(cè)試類。這種情況下,測(cè)試驅(qū)動(dòng)開發(fā)成為空談。而如果其他類中也引用了被測(cè)試類,我們到底先測(cè)試哪一個(gè)類?因此,在測(cè)試中,如果我們能將被測(cè)試類孤立起來,使其完全不依賴于其他類的具體實(shí)現(xiàn),這樣,我們就能做到測(cè)試先行,先測(cè)試哪個(gè)類,就先實(shí)現(xiàn)哪個(gè)類,而不管與之聯(lián)系的類是否已經(jīng)實(shí)現(xiàn)。
虛擬對(duì)象(mock object)就是為此需要而誕生的。它通過JDK中的反射機(jī)制,在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建虛擬對(duì)象。在測(cè)試代碼中,我們可以驗(yàn)證這些虛擬對(duì)象是否被正確地調(diào)用了,也可以在明確的情況下,讓其返回特定的假想值。而一旦有了這些虛擬對(duì)象提供的服務(wù),被測(cè)試類就可以將虛擬對(duì)象作為其他與之聯(lián)系的真實(shí)對(duì)象的替身,從而輕松地搭建起一個(gè)很完美的測(cè)試環(huán)境。
JMock是幫助創(chuàng)建mock對(duì)象的工具,它基于Java開發(fā),在Java測(cè)試與開發(fā)環(huán)境中有不可比擬的優(yōu)勢(shì),更重要的是,它大大簡化了虛擬對(duì)象的使用。
本文中,通過一個(gè)簡單的測(cè)試用例來說明JMock如何幫助我們實(shí)現(xiàn)這種孤立測(cè)試。有三個(gè)主要的類,User,UserDAO,及UserService。本文中,我們只需測(cè)試UserService,準(zhǔn)備虛擬UserDAO。對(duì)于User,由于本身僅是一個(gè)過于簡單的POJO,可以不用測(cè)試。但如果你是一個(gè)完美主義者,也可以使用JMock的虛擬它。在這領(lǐng)域,JMock幾乎無所不能。
這里我用到的是:(我用的是maven依賴)
在官方的網(wǎng)站上也有的下載。 地址: http://jmock.org/dist/jmock-2.5.1-jars.zip
使用C2DM框架的要求
2. 使用C2DM功能的Android設(shè)備上需要設(shè)置好Google的賬戶。
3. C2DM需要依賴于Google官方提供的C2DM服務(wù)器,由于國內(nèi)的網(wǎng)絡(luò)環(huán)境,這個(gè)服務(wù)經(jīng)常不可用,如果想要很好的使用,我們的App Server必須也在國外,這個(gè)恐怕不是每個(gè)開發(fā)者都能夠?qū)崿F(xiàn)的

(2)C2DM服務(wù)器會(huì)返回一個(gè)registration_id值給Android設(shè)備,設(shè)備需要保存這個(gè)registration_id值。
(3)Android設(shè)備把獲得的registration_id和C2DM功能的用戶賬戶(android.c2dm.demo@gmail.com)發(fā)送給自己的服務(wù)器,不過一般用戶賬戶信息因?yàn)楹头?wù)器確定好的,所以不必發(fā)送。
這樣Android設(shè)備就完成了C2DM功能的注冊(cè)過程,接下來就可以接收C2DM服務(wù)器Push過來的消息了。
(4)服務(wù)器獲得數(shù)據(jù)。這里圖中的例子Chrome To Phone,服務(wù)器接收到Chrome瀏覽器發(fā)送的數(shù)據(jù)。數(shù)據(jù)也可以是服務(wù)器本地產(chǎn)生的。這里的服務(wù)器是Google AppEngine(很好的一項(xiàng)服務(wù),可惜在國內(nèi)被屏了),要換成自己的服務(wù)器。服務(wù)器還要獲取注冊(cè)使用C2DM功能的用戶賬戶(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)自:
地理位置索引支持是MongoDB的一大亮點(diǎn),這也是全球最流行的LBS服務(wù)foursquare 選擇MongoDB的原因之一。我們知道,通常的數(shù)據(jù)庫索引結(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ù)是無法建立索引的,所以MongoDB在建立索引的時(shí)候,會(huì)根據(jù)相應(yīng)字段的坐標(biāo)計(jì)算一個(gè)可以用來做索引的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è)值來做索引,則地圖上點(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次。