導航:首頁 > 源碼編譯 > 子比博客源碼

子比博客源碼

發布時間:2022-05-03 01:38:26

❶ 誰可以解釋下,android事件分發為什麼要設計成從根view到子view,而不是從子vie

Android事件傳遞流程在網上可以找到很多資料,FrameWork層輸入事件和消費事件,可以參考:
Touch事件派發過程詳解
這篇blog闡述了底層是如何處理屏幕輸,並往上傳遞的。Touch事件傳遞到Activity的DecorView時,往下走就是ViewGroup和子View之間的事件傳遞,可以參考郭神的這兩篇博客
Android事件分發機制完全解析,帶你從源碼的角度徹底理解(上)
Android事件分發機制完全解析,帶你從源碼的角度徹底理解(下)
郭神的兩篇博客清楚明白地說明了View之間事件傳遞的大方向,但是具體的一些晦暗的細節闡述較少,本文主要是總結這兩篇博客的同時,側重於兩點:
事件分發過程中一些細節到底如何實現的?
子view到底如何和父View搶事件,父View又是如何攔截事件不發送給子View,以及如果我們需要處理這種混亂的關系才能讓兩者和諧相處?。
MotionEvent抽象
要明白View的事件傳遞,很有必要先說一下Touch事件是如何在Android系統中抽象的,這主要使用的就是MotionEvent。這個類經歷了幾次重大的修改,一次是在2.x版本支持多點觸摸,一次是4.x將大部分代碼甩給native層處理。
一次簡單的事件
我們先舉個栗子來說明一次完整的事件,用戶觸屏 滑動 到手機離開屏幕,這認為是一次完整動作序列(movement traces)。一個動作序列中包含很多動作Action,比如在用戶按下時,會封裝一個MotionEvent,分發給視圖樹,我們可以通過motionevent.getAction拿到這個動作是ACTION_DOWN。同樣,在手指抬起時,我們可以接收到Action類型是Action_UP的MotionEvent。對於滑動(MOVE)這個操作,Android為了從效率出發,會將多個MOVE動作打包到一個MotionEvent中。通過getX getY可以獲取當前的坐標,如果要訪問打包的緩存數據,可以通過getHistorical**()函數來獲取。
加入多點觸摸
對於單點的操作來看,MotionEvent顯得比較簡單,但是考慮引入多點觸摸呢?我們定義一個接觸點為(Pointer)。每一個觸摸點Pointer都會有一個當次動作序列的唯一Id和Index.MotionEvent中多個手指的操作API大部分都是通過pointerindex來進行的,如:獲取不同Pointer的觸碰位置,getX(int pointerIndex);獲取PointerId等等。大部分情況下,pointerid == pointeridex。
我們從onTouch接受到一個MotionEvent,怎麼拿到多個觸碰點的信息?為了解開筆者剛開始學習這部分知識時的困惑,我們首先樹立起一種概念:一個MotionEvent只允許有一個Action(動作),而且這個Action會包含觸發這次Action的觸碰點信息,對於MOVE操作來說,一定是當前所有觸碰點都在動。只有ACTION_POINTER_DOWN這類事件事件會在Action裡面指定是哪一個POINTER按下。
在MotionEvent的底層實現中,是通過一個16位來存儲Action和Pointer信息(PointerIndex)。低8位表示Action,理論上可以表示255種動作類型;高8位表示觸發這個Action的PointerIndex,理論上Android最多可以支持255點同時觸摸,但是在上層代碼使用的時候,默認多點最多存在32個,不然事件在分發的時候會有問題。
ACTION_DOWN OR ACTION_POINTER_DOWN:
這兩個按下操作的區別是ACTION_DOWN是一個系列動作的開始,而ACTION_POINTER_DOWN是在一個系列動作中間有另外一個觸碰點觸碰到屏幕。
這部分詳細的描述,請參考:
android觸控,先了解MotionEvent
到這里,鋪墊終於結束了,我們開始直奔主題。
View的事件傳遞
Android的Touch事件傳遞到Activity頂層的DecorView(一個FrameLayout)之後,會通過ViewGroup一層層往視圖樹的上面傳遞,最終將事件傳遞給實際接收的View。下面給出一些重要的方法。如果你對這個流程比較熟悉的話,可以跳過這里,直接進入第二部分。
dispatchTouchEvent
事件傳遞到一個ViewGroup上面時,會調用dispatchTouchEvent。代碼有刪減
public boolean dispatchTouchEvent(MotionEvent ev) {

boolean handled = false;
if (onFilterTouchEventForSecurity(ev)) {
final int action = ev.getAction();
final int actionMasked = action & MotionEvent.ACTION_MASK;

// Attention 1 :在按下時候清除一些狀態
if (actionMasked == MotionEvent.ACTION_DOWN) {
cancelAndClearTouchTargets(ev);
//注意這個方法
resetTouchState();
}

// Attention 2:檢查是否需要攔截
final boolean intercepted;
//如果剛剛按下 或者 已經有子View來處理
if (actionMasked == MotionEvent.ACTION_DOWN
|| mFirstTouchTarget != null) {
final boolean disallowIntercept = (mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0;
if (!disallowIntercept) {
intercepted = onInterceptTouchEvent(ev);
ev.setAction(action); // restore action in case it was changed
} else {
intercepted = false;
}
} else {
// 不是一個動作序列的開始 同時也沒有子View來處理,直接攔截
intercepted = true;
}

//事件沒有取消 同時沒有被當前ViewGroup攔截,去找是否有子View接盤
if (!canceled && !intercepted) {
//如果這是一系列動作的開始 或者有一個新的Pointer按下 我們需要去找能夠處理這個Pointer的子View
if (actionMasked == MotionEvent.ACTION_DOWN
|| (split && actionMasked == MotionEvent.ACTION_POINTER_DOWN)
|| actionMasked == MotionEvent.ACTION_HOVER_MOVE) {
final int actionIndex = ev.getActionIndex(); // always 0 for down

//上面說的觸碰點32的限制就是這里導致
final int idBitsToAssign = split ? 1 << ev.getPointerId(actionIndex)
: TouchTarget.ALL_POINTER_IDS;

final int childrenCount = mChildrenCount;
if (newTouchTarget == null && childrenCount != 0) {
final float x = ev.getX(actionIndex);
final float y = ev.getY(actionIndex);

//對當前ViewGroup的所有子View進行排序,在上層的放在開始
final ArrayList<View> preorderedList = buildOrderedChildList();
final boolean customOrder = preorderedList == null
&& isChildrenDrawingOrderEnabled();
final View[] children = mChildren;
for (int i = childrenCount - 1; i >= 0; i--) {
final int childIndex = customOrder
? getChildDrawingOrder(childrenCount, i) : i;
final View child = (preorderedList == null)
? children[childIndex] : preorderedList.get(childIndex);

// canViewReceivePointerEvents visible的View都可以接受事件
// isTransformedTouchPointInView 計算是否落在點擊區域上
if (!canViewReceivePointerEvents(child)
|| !isTransformedTouchPointInView(x, y, child, null)) {
ev.setTargetAccessibilityFocus(false);
continue;
}

//能夠處理這個Pointer的View是否已經處理之前的Pointer,那麼把
newTouchTarget = getTouchTarget(child);
if (newTouchTarget != null) {
// Child is already receiving touch within its bounds.
// Give it the new pointer in addition to the ones it is handling.
newTouchTarget.pointerIdBits |= idBitsToAssign;
break;
} }
//Attention 3 : 直接發給子View
if (dispatchTransformedTouchEvent(ev, false, child, idBitsToAssign)) {
// Child wants to receive touch within its bounds.
mLastTouchDownTime = ev.getDownTime();
if (preorderedList != null) {
// childIndex points into presorted list, find original index
for (int j = 0; j < childrenCount; j++) {
if (children[childIndex] == mChildren[j]) {
mLastTouchDownIndex = j;
break;
}
}
} else {
mLastTouchDownIndex = childIndex;
}
mLastTouchDownX = ev.getX();
mLastTouchDownY = ev.getY();
newTouchTarget = addTouchTarget(child, idBitsToAssign);
= true;
break;
}

}
}

}
}

// 前面已經找到了接收事件的子View,如果為NULL,表示沒有子View來接手,當前ViewGroup需要來處理
if (mFirstTouchTarget == null) {
// ViewGroup處理
handled = dispatchTransformedTouchEvent(ev, canceled, null,
TouchTarget.ALL_POINTER_IDS);
} else {

if() {
//ignore some code
if (dispatchTransformedTouchEvent(ev, cancelChild,
target.child, target.pointerIdBits)) {
handled = true;
}
}

}
return handled;
}

上面代碼中的Attention在後面部分將會涉及,重點注意。
這里需要指出一點的是,一系列動作中的不同Pointer可以分配給不同的View去響應。ViewGroup會維護一個PointerId和處理View的列表TouchTarget,一個TouchTarget代表一個可以處理Pointer的子View,當然一個View可以處理多個Pointer,比如兩根手指都在某一個子View區域。TouchTarget內部使用一個int來存儲它能處理的PointerId,一個int32位,這也就是上層為啥最多隻能允許同時最多32點觸碰。
看一下Attention 3 處的代碼,我們經常說view的dispatchTouchEvent如果返回false,那麼它就不能系列動作後面的動作,這是為啥呢?因為Attention 3處如果返回false,那麼它不會被記錄到TouchTarget中,ViewGroup認為你沒有能力處理這個事件。
這里可以看到,ViewGroup真正處理事件是在dispatchTransformedTouchEvent裡面,跟進去看看:
dispatchTransformedTouchEvent
private boolean dispatchTransformedTouchEvent(MotionEvent event, boolean cancel,
View child, int desiredPointerIdBits) {

//沒有子類處理,那麼交給viewgroup處理
if (child == null) {
handled = super.dispatchTouchEvent(transformedEvent);
} else {
final float offsetX = mScrollX - child.mLeft;
final float offsetY = mScrollY - child.mTop;
transformedEvent.offsetLocation(offsetX, offsetY);
if (! child.hasIdentityMatrix()) {
transformedEvent.transform(child.getInverseMatrix());
}

handled = child.dispatchTouchEvent(transformedEvent);
}
return handled;
}

可以看到這里不管怎麼樣,都會調用View的dispatchTouchEvent,這是真正處理這一次點擊事件的地方。
dispatchTouchEvent
public boolean dispatchTouchEvent(MotionEvent event) {
if (onFilterTouchEventForSecurity(event)) {
//先走View的onTouch事件,如果onTouch返回True
ListenerInfo li = mListenerInfo;
if (li != null && li.mOnTouchListener != null
&& (mViewFlags & ENABLED_MASK) == ENABLED
&& li.mOnTouchListener.onTouch(this, event)) {
result = true;
}

if (!result && onTouchEvent(event)) {
result = true;
}
}
return result;
}

我們給View設置的onTouch事件處在一個較高的優先順序,如果onTouch執行返回true,那麼就不會去走view的onTouchEvent,而我們一些點擊事件都是在onTouchEvent中處理的,這也是為什麼onTouch中返回true,view的點擊相關事件不會被處理。

❷ 相關子查詢與不相關子查詢有什麼區別

相關子查詢與不相關子查詢區別為:處理次數不同、依賴不同、效率不同。

一、處理次數不同

1、相關子查詢:相關子查詢的處理不只一次,要反復求值,以供外層查詢使用。

2、不相關子查詢:不相關子查詢的處理總共執行一次,執行完畢後將值傳遞給外部查詢。

二、依賴不同

1、相關子查詢:相關子查詢中查詢條件依賴於外層查詢中的某個值

2、不相關子查詢:不相關子查詢是獨立於外部查詢的子查詢,不依賴於外層查詢中的某個值。

三、效率不同

1、相關子查詢:相關子查詢可以嵌套多層,但嵌套層越多,效率越低。

2、不相關子查詢:不相關子查詢不可以嵌套,效率相較於相關子查詢更高。

參考資料來源:

網路——相關子查詢

網路——子查詢

❸ 網路中常用的「博客」是什麼意思怎麼來的

什麼是「博客」?

blog的全名應該是Web log,中文意思是「網路日誌」,後來縮寫為Blog,而博客(Blogger)就是寫Blog的人。從理解上講,博客是「一種表達個人思想、網路鏈接、內容,按照時間順序排列,並且不斷更新的出版方式」。簡單的說博客是一類人,這類人習慣於在網上寫日記。

Blog是繼Email、BBS、ICQ之後出現的第四種網路交流方式,是網路時代的個人「讀者文摘」,是以超級鏈接為武器的網路日記,是代表著新的生活方式和新的工作方式,更代表著新的學習方式。具體說來,博客(Blogger)這個概念解釋為使用特定的軟體,在網路上出版、發表和張貼個人文章的人。

一個Blog其實就是一個網頁,它通常是由簡短且經常更新的帖子所構成,這些張貼的文章都按照年份和日期倒序排列。Blog的內容和目的有很大的不同,從對其他網站的超級鏈接和評論,有關公司、個人構想到日記、照片、詩歌、散文,甚至科幻小說的發表或張貼都有。許多Blogs是個人心中所想之事情的發表,其它Blogs則是一群人基於某個特定主題或共同利益領域的集體創作。

隨著Blogging快速擴張,它的目的與最初的瀏覽網頁心得已相去甚遠。目前網路上數以千計的 Bloggers發表和張貼Blog的目的有很大的差異。不過,由於溝通方式比電子郵件、討論群組更簡單和容易,Blog已成為家庭、公司、部門和團隊之間越來越盛行的溝通工具,因為它也逐漸被應用在企業內部網路(Intranet)中。

博客的歷史

最早,是由Jorn Barger在1997年12月提出博客這個名稱。但是在1998年,互聯網上的博客網站卻屈指可數。那時,Infosift的編輯Jesse J.Garrett想列舉一個博客類似站點的名單,便在互聯網上開始了艱難的搜索。

終於在1998年的12月,他的搜集好了部分網站的名單。他把這份名單發給了Cameron Barrett,Cameron覺得這份名單非常有用,就將它在Camworld網站上公布於眾。其它的博客站點維護者發現此舉後,也紛紛把自己的網址和網站名稱、主要特色都發了過來,這個名單也就日漸豐富。到了1999年初,Jesse的「完全博客站點」名單所列的站點已達23個。

由於Cameron與Jesse共同維護的博客站點列表既有趣又易於閱讀,吸引了很多人的眼球。在這種情況下,Peter Merholz宣稱:「這個新鮮事物必將引起大多數人的注意。作為未來的一個常用詞語,web-blog將不可避免地被簡稱為blog,而那些編寫網路日誌的人,也就順理成章地成為blogger——博客」。這代表著博客被正式命名。

隨著博客數量的增多,每個博客網站上編寫的網路日誌的內容也混雜起來,以至把每一個新出的站點主要內容和特色都不可能搞清楚。Cameron後來就只在網站上登載熟悉的博客站點了。時隔不久,Brigitte Eaton也搜集出了一個名叫「Eaton網路門戶」的博客站點名單,並且提出應該以日期為基礎組織內容。這也建立了blog分類排列的一大標准。

1999年7月,一個專門製作博客站點的「Pitas」免費工具軟體發布了,這對於博客站點的快速搭建起著很關鍵的作用。隨後,上百個同類工具也如雨後春筍般製作出來。這種工具對於加速建立博客站點的數量,是意義重大的。同年的8月份,Pyra發布了Blogger網站,Groksoup也投入運營,使用這些企業所提供的簡單的基於互聯網的工具,博客站點的數量終於出現了一種爆炸性增長。1999年末,軟體研發商Dave Winer向大家推薦Edit This Page網站,Jeff A. Campbell發布了Velocinews網站。所有的這些服務都是免費的,他們的目的也很明確:讓更多的人成為博客,來網上發表意見和見解。

博客帶來了什麼

現在,全世界每天傳播的媒體內容,有一半是由6大媒體巨頭所控制。其利益驅動、意識形態以及傳統的審查制度,使得這些經過嚴重加工處理的內容已經越來越不適應人們的需求。媒體的工業化,內容出口的工廠化,都在嚴重影響其發展。

比如,以美聯社為例,有近4000人專業記者,每天「製造並出廠」2000萬字的內容,每天發布在8500多種報紙、雜志和廣播中,把讀者當作「信息動物」一樣。這種大教堂式的模式主導了整個媒體世界。這時,以個人為中心的博客潮流卻開始有力沖擊傳統媒體,尤其是對新聞界多年形成的傳統觀念和道德規范。

博客是一種滿足「五零」條件(零編輯、零技術、零體制、零成本、零形式)而實現的「零進入壁壘」的網上個人出版方式,從媒體價值鏈最重要的三個環節:作者、內容和讀者三大層次,實現了「源代碼的開放」。並同時在道德規范、運作機制和經濟規律等層次,將逐步完成體制層面的真正開放,使未來媒體世界完成從大教堂模式到集市模式的根本轉變。

博客的出現集中體現了互聯網時代媒體界所體現的商業化壟斷與非商業化自由,大眾化傳播與個性化(分眾化,小眾化)表達,單向傳播與雙向傳播3個基本矛盾、方向和互動。這幾個矛盾因為博客引發的開放源代碼運動,至少在技術層面上得到了根本的解決。

博客的崛起

這幾年,對於所有新聞媒體來說,都品嘗到了技術變革的滋味。如今,再沒有任何人會否認互聯網對媒體帶來的革命,但是,好像也沒有多少人感知到互聯網的神奇:顛覆性的力量似乎並沒有來到人間。

所有的核心在於時間。對於性急的人來說,時間如同緩慢的河流,對於從容的人來說,時間又是急流。互聯網的力量的確還沒有充分施展,因為互聯網的商業化起始,到今天僅僅才10年;互聯網作為一種新的媒體方式,從嘗試到今天,也剛剛跨過10年。

對於一種全新的媒體形式來說,10年實在過於短暫。但是,10年也足以讓人們感受到勢不可擋的力量,以及依然靜靜潛伏著的沖擊力。而今,隨著博客的嶄露頭角,網路媒體異常的力量開始展現了,聲勢逐漸發大。雖然,博客依然在大多數人的視野之外,但是,他們改變歷史的征程已經啟動。

1998年,個人博客網站「德拉吉報道」率先捅出柯林頓萊溫斯基緋聞案;

2001年,911事件使得博客成為重要的新聞之源,而步入主流;

2002年12月,多數黨領袖洛特的不慎之言被博客網站盯住,而丟掉了烏紗帽;

2003年,圍繞新聞報道的傳統媒體和互聯網上的伊拉克戰爭也同時開打,美國傳統媒體公信力遭遇空前質疑,博客大獲全勝;

2003年6月,《紐約時報》執行主編和總編輯也被「博客」揭開的真相而下台,引爆了新聞媒體史上最大的丑聞之一;

2004年4月,轟動一時的Gmail測試者大部分從bloggers中產生;

……

這一系列發源於博客世界的顛覆性力量,不但塑造著博客自身全新的形象,而且,也在深刻地改變著媒體的傳統和未來走向。

博客今後的發展預測

博客秉承了個人網站的自由精神,但是綜合了激發創造的新模式,使其更具開放和建設性。要在網路世界體現個人的存在,張揚個人的社會價值,拓展個人的知識視野,建立屬於自己的交流溝通的群體。從這個意義上說,博客將會變得越來越普及,越來越為更多的人接受。2002年8月「博客中國」網站的開通,標志著「博客」(Blog)現象在中國互聯網界的顯露;11月18日,新聞傳播學術網站「紫金網」在改版之際,推出「博客擂台」新欄目。從信息傳播的角度看,博客網站、頻道的出現對於博客個體而言,意味著將信息採集與發布的通道最大程度的簡單化與快捷化。也許你現在還不相信,但是想一想,為什麼在互聯網的最低潮時期,在個人網站大蕭條時刻,在商業網站最凄慘之際,沒有一分投資,沒有大公司炒作,博客卻開始如火如荼?「當然,一切還都需要時間。博客剛剛開始發展,尤其是中國,目前僅僅是博客概念普及和萌芽階段。不能完全依據現在的狀況判斷未來,而要看1~2年後,3~5年後的發展步伐。當然,第一步,你自己應該首先去實踐一下。」

博客作為一種新表達的方式,它的傳播不僅情緒,包括大量的智慧、意見和思想。某種意義上說,它也是一種新的文化現象,博客的出現和繁榮,真正凸現網路的知識價值,標志著互聯網發展開始步入更高的階段

php+mysql博客系統源碼

易撲源碼---有很多博客系統源碼,而且大多數是免費,原創,你可以去看下,都還不錯。裡面有個「個性博客大比拼」都是一些比較好的博客源碼,相信一定有你喜歡的

❺ 求php個人博客源碼

了解一下wordpress,你會發現新大陸的,不需要求人要源碼。

Wordpress是一個以PHP和MySQL為平台的免費自由開源的博客軟體和內容管理系統。
WordPress擁有互聯網內容管理系統近60%的市場份額是有原因的。其中一些亮點包括:
1、適合初學者的無代碼環境。
2、易於理解的工具和功能。
3、來自開發人員和用戶的令人難以置信的支持結構。
4、易於遵循和學習的簡單布局。
WordPress是為了幫助新的網站開發人員而設計的,本身非常靈活,可以支持更高級的創建者。WordPress的每個方面都可以通過PHP、CSS和JavaScript進行自定義。
WordPress的主要用途:
1、創建博客
使用WordPress最常用的方法之一也許是建立一個博客。這些網站通常圍繞著信息共享,不管是個人的反映還是幫助客戶使用產品。
博客是吸引新消費者或幫助現有消費者的好方法。很多企業都在推廣產品教程、評論和其他相關信息,客人會覺得有用。最終結果是一個站點在增加銷售和銷售線索的可能性的同時提供了幫助。
寫博客也有助於提高品牌知名度以及在線認知度。得益於本地搜索結果,通過共享信息,並輔以良好的數字營銷,可以很容易地接觸到廣泛的受眾,包括親自購物者。
2、建立在線商店
使用WordPress的一種常用方法是創建一個在線商店。
WordPress使創建一個在線商店變得非常容易。得益於WooCommerce這樣的插件,只要想,現在就可以構建一個電子商務網站,然後立即開始銷售。只要有東西要賣,並且提供比的競爭對手更好的體驗,在線商店就有巨大的成功潛力。
3、建立社交網路
創建自己的社交網站就像在WordPress中設置BuddyPress這樣的插件一樣簡。這是建立一個有相似興趣的人的網路的好方法,特別是如果創建一個利基網站。例如,如果出售漁具,建立一個漁業社會中心就不需要花太多的時間。
4、創建幫助論壇
另一種有效利用WordPress的方法是建立幫助論壇。這些網站往往是由社區推動的,同時幫助人們解決各種問題。
使論壇對品牌有用的是為產品或服務提供幫助。幾乎每個主要製造商或開發人員都有一個實時論壇來幫助客戶。這向消費者表明了的幫助意願,同時也給的品牌帶來了積極的影響。
5、創辦視頻網站
在線視頻製作是一種很好的營銷手段。它非常有效,87%的在線營銷者在他們的常規戰略中加入視頻內容。視頻的使用也驅動著大部分消費者的互聯網帶寬。
通過WordPress的設置方式,可以快速上傳自己的視頻格式或從在線視頻網站嵌入內容。許多網站所有者都這樣做。例如,可以使用WooCommerce HTML5視頻插件將視頻添加到的在線商店產品描述中。
6、創建會員制和訂閱計劃
WordPress的一些最佳功能包括創建會員制或某種訂閱計劃。例如,可以提供免費信息,同時將相關內容鎖定在付費牆後面。
通過使用插件,可以非常容易地管理用戶和付款。可以設置一次性費用、每月訂閱,甚至提供折扣。
也可以考慮提供免費訂閱,例如新聞稿或郵件列表。這將幫助創建一個有效的電子郵件營銷戰略,以促進銷售和銷售線索。
7、促進本地商業發展
移動技術在互聯網瀏覽方面超越了台式計算機。由於WordPress是自動響應的,所以它可以幫助在沒有額外開發或編碼的情況下與附近的消費者進行溝通。
8、 性能改善
盡管WordPress本身就是一個強大的系統,但許多插件都在成倍地擴展它的功能以Jetpack插件為例。它附帶了一個模塊,將幫助校對內容的拼寫和語法。
想要一個更快的網站,可以找到附加組件,通過緩存和惰性載入方法來提高站點的速度。想要可自定義且易於修改的布局,只需查看可以直接從控制面板安裝的數千個免費主題即可。
9、提供大量安全功能
從可用的最佳備份插件到像Wordfence這樣的安全系統,只需幾分鍾就可以保護的數據和用戶。
安裝SSL是電子商務的一個重要方面。它通過加密網站中的信息來保護用戶。在WordPress網站上安裝SSL證書只需幾分鍾。
用戶角色管理、垃圾郵件防護、文件掃描等都可以通過WordPress獲得。最棒的是,大多數可用插件是免費使用的。
WordPress是一個功能強大的系統。從博客到電子商務,想到的都可以實現。得益於這個系統在互聯網上的廣泛支持,幾乎可以建立任何形式的網站。

❻ 誰推薦一個好的個人博客源碼(PHP+MYSQL)

wordpress 是個比較不錯的,我也用這個 WordPress 是一種使用 PHP 語言和 MySQL 資料庫開發的開源、免費的 Blog(博客,網志)引擎,用戶可以在支持 PHP 和 MySQL 資料庫的伺服器上建立自己的 Blog。 WordPress 是一個功能非常強大的博客系統,插件眾多,易於擴充功能。安裝和使用都非常方便。目前 WordPress 已經成為主流的 Blog 搭建平台。 WordPress 的原版是英文版的,UTF-8 編碼,最新版本為2010年4月3日發布的 3.0 beta 1。為滿足日益龐大的中文用戶需求開辟了中文官方站點且提供中文版程序下載。還有愛好者開發了中文語言包,使其可以支持中文。不過,由於使用的編碼原因,中文字元截斷時會出現亂碼。不過桑葚網友製作的中文 WordPress 工具箱插件可以解決這個問題。 WordPress 可以說是世界上目前最先進的 weblog 程序。目前開發的程序大多都是根據它仿造的。它更能把握搜索引擎,在你使用 WordPress 並掌握幾種插件後,對於優化將不用過多的操心,它會為你想的更多。 WordPress有許多第三方開發的免費模板,安裝方式簡單易用。不過要做一個自己的模板,則需要你有一定的專業知識。比如你至少要懂的HTML代碼、CSS、PHP等相關知識。

❼ 什麼是blog域名

Blog:Blogger/Blog是Weblog的簡稱。

中文譯為「博客」
Weblog,其實是Web 和Log的組合詞。Web,指World Wide Web,當然是指互聯網了;Log的原義則是「航海日誌」,後指任何類型的流水記錄。合在一起來理解,Weblog就是在網路上的一種流水記錄形式或者簡稱「網路日誌」。Blogger或Weblogger,是指習慣於日常記錄並使用Weblog工具的人。雖然在大陸早些時候或者台灣等地,對此概念的譯名不盡相同(有的稱為「網志」,有的稱之為「網錄」等等),但目前已基本統一到「博客」一詞上來。該詞最早是在2002年8月8日由著名的網路評論家王俊秀和方興東共同撰文提出來的。博客也好,網志也罷,僅僅是一種名稱而已,它的本義還是逃不過Weblog的范圍。只是,通常我們所說的「博客」,既可用作名詞Blogger或weblogger——指具有博客行為的一類人;也可以作動詞用(相當於英文中的Weblog或blog),指博客採取的具有博客行為反映、是第三方可以用視覺感受到的行為,即博客們所撰寫的Blog。因此,「他/她是一位博客,他/她天天在博客」及「博客博什麼客?」在中文語法與邏輯上都是正確的。只是不同場合的用法不同罷了。

Blog究竟是什麼?說了半天,其實一個Blog就是一個網頁,它通常是由簡短且經常更新的帖子(Post)所構成,這些張貼的文章都按照年份和日期倒序排列。Blog的內容和目的有很大的不同,從對其他網站的鏈接、評論,有關公司、個人構想的新聞,到日記、照片、詩歌、散文,甚至科幻小說的發表或張貼都有。許多Blogs只是記錄著blog個人所見、所聞、所想,還有一些Blogs則是一群人基於某個特定主題或共同利益領域的集體創作。撰寫這些Weblog或Blog的人就叫做Blogger或Blog writer。

博客存在的方式,一般分為三種類型:一是託管博客,無須自己注冊域名、租用空間和編制網頁,博客們只要去免費注冊申請即可擁有自己的博客空間,是最「多快好省」的方式。如英文的www.blogger.com、中文的「博客中文站」(www.blogcn.com)等都提供這樣的服務;二是自建獨立網站的博客,有自己的域名、空間和頁面風格,需要一定的條件。如方興東建立的「博客中國」站(www.blogchina.com);三是附屬博客,將自己的博客作為某一個網站的一部分(如一個欄目、一個頻道或者一個地址)。這三類之間可以演變,甚至可以兼得,一人擁有多種博客網站。

⒉博客與黑客的區別

博客一詞的創始人方興東先生對於博客與黑客的區別有這樣一段論述:①博客與黑客一樣,也是「知識工人」的一種類型(註:這里所說的黑客,是指像Linux社區成員那樣的生產性而非破壞性黑客)。黑客的力量與其說來自於他本人作為「知識個體戶」的智力,不如說來自於一種組織機制。而這種組織機制——開放性、自組織、自我優化,恰恰是由知識的充分共享——源代碼的開放——來保證的。在這個意義上,黑客與其說是指人,不如說是指一種全新的知識的生產方式和交流方式。與黑客不一樣的是,博客從一開始首先就是指一種網路交流方式——繼Email、BBS、IM(即時通訊)之後出現的第四種網路交流方式,一種媒體形式——自媒體(we media,或者叫「個人媒體」)。換言之,僅從字面上講,博客首先是指一群人,其次才是指某個人,首先是指「我們」,其次才是指「我」——通過多鏈接的、「序曲——導言」式的網路日誌,使「我」成為「我們」,並讓更多的人匯入到「我們」中來的「我」。知識共同體」是他們共同的血緣。在博客和黑客的世界裡,借用鄧恩的詩句來說,「沒有人是孤島」,每個人都是同一個大地的一部分。單個的博客不是一個自足的點,而是一個知識網路上的節點。相對而言,博客比黑客更明顯地表現出「節點」的性質來。②與黑客相比,博客的知識門檻低得多。任何人都可以在幾分鍾之類迅速成長為一名博客——只要他有這個興趣即可。博客的文本提供了不少信息,但博客本人往往可能不是作者(版權所有者),他所做的,可能僅僅是提供了一些鏈接而已。另外,博客的讀者也可以加上自己的鏈接。因此,與傳統媒體不一樣,博客往往不是把讀者的注意力引向自己,而是通過已有或潛在(有可能被其他人加上)的鏈接,把注意力引向一個個「他者」。最重要的是,博客通過把讀者引向讀者自己,讓讀者逐漸成為作者。從知識和信息的消費者變成提供者。

⒊博客的產生的背景及歷史簡介

理解了博客與黑客的區別,也就明白了博客的核心其實就是超文本語言的再現。這種理念甚至可以追溯到古代猶太人的一部法典《塔木德》。這是一種看起來多少有些奇怪的法典。表面上,它由正文與後人的注釋兩部分構成,但兩部分具有同等的法律效力,兩部分互為正文和注釋。而且,注釋也是多層次的,包括對注釋的注釋,對注釋的注釋的注釋……《塔木德》的特點就是:它是一種開放的文本而不是一本「只讀文本」;原創者(立法者)與再創者(法律的解釋者)只有先後之分,但在權威性上沒有差別,從而也就沒有嚴格的作者和讀者的差別。正因為《塔木德》的所有讀者(即所有的猶太居民)都參與了作品的創作(也就是修改和完善),使這樣的一部法律在不斷延伸的時間長河中不斷優化、升級。

但如果僅憑這些就說《塔木德》的作者們是最早的博客,恐怕有點讓人貽笑大方了。畢竟當時只知道什麼叫「蜘蛛網」,呵呵。不過,它的理念是博客的理念沒錯。真正的互聯網上最早的博客是誰,現在已無從考證了。不過,2000年,台灣阿堅發表的《網錄:一種新內容形式的崛起》,是一篇比較早的系統介紹博客的文章,該文發表於2000年1月7日。時隔不久,國內門戶之首的新浪也在「新浪科技」的業界新聞中,報道了博客現象,題為《直播網站和日誌網站在美國盛行》,作者署名「少岩」。由此可以看出,當時Blog現象已經引起多方注意。同年發生的震驚世界的「9.11」事件想必大家都記得吧,它不僅以人類社會歷史上的一次重大悲劇災難永載於史冊,同時,它也直接推動了Blog的普及和發展,使Blog開始正式進入普通人的視野。在「9.11」事件發生後的幾小時里,幾乎所有的主要傳統媒體網站都由於訪問量過大而近乎癱瘓,這中間包括CNN、紐約時報和BBC重量級的媒體網站,而更加傳統的電視媒體的報道內容卻被很多人認為不夠深入和全面。其實,互聯網在這種突如其來的「打擊」下並沒有死,而是以其他方式或者在其他地方重生了,這就是Blog。其中最著名的幾個Blog站點就是戴夫.溫納斯(Dave Winers)的Scripting News網站(http://www.scripting.com/)和Slashdot和Fark站點。這些站點一改以往的反世俗的態度,空前地在事件發生的第一時間就已經充滿了各種各樣的相關信息。從目擊者的親筆描述到緊張的試圖得到朋友和親屬狀況的請求。其中最典型的是當數戴夫.溫納斯的Scripting News。這個原本主要是介紹技術界的一些動態的站點,在襲擊發生的當時就擔負起了傳遞最新消息的責任。整個9月11日早晨這里一直是獲取第一手資料的最佳地點。僅9月11日當天,在Scripting News網站上,與「9.11事件」相關的消息有近100條,有從其他媒體上摘錄的新聞和申明(布希定義這是一場恐怖主義戰爭),也有目擊者的直接描述(兩座塔都已經倒塌),還有在其他國家的人提供的當地的反應(駐日美軍提高了戒備)和最新的照片。Scripting News甚至成為了傳統站點的一些消息的來源,《紐約時報》也報道了Scripting News作為互聯網上的代表反映了人們對於這場襲擊的反應和關注。Winers事後第三天在網站上進行了一些解釋:「在互聯網上有更多的人能夠描述一個故事。我們在得知新聞站點在突如其來的過度訪問面前近乎癱瘓,並且也沒有能夠提供太多有價值的新聞。這時候,我們就立刻開始了在自己的站點上讓更多的人貢獻新聞同時讓更多的人獲得新聞。互聯網沒有死,事實上它才剛剛開始。」

和Scripting news相比,另一個blog的參與者則更加與其原來的「理念」相距甚遠。以「這不是新聞,這是Fark」作為座右銘的「玩笑新聞」集散地Fark非常不情願自己成為一個「真正」的新聞來源,但是事實上他們卻成為了典型,證明了有多少人希望在網上獲取和提供新聞。在「9.11」事件後的一天內一共有157條相關的消息。而在之後網站編輯德魯.科蒂斯(Drew Curtis)發表的一個聲明更加說明了他們的矛盾心態:「首先,一半的道歉。在過去的幾天中我們遇到的問題是如何平滑地把我們從一個調侃新聞的站點轉型成一個真正的新聞站點。我們從來就沒有認為我們需要這么做,但是『9.11』事件後所有新聞站點都不幸倒下的事實,我們不得不承擔起這個『作為新聞站點的』任務。第一次我意識到我們站點已經不是一個愚蠢的搞笑站點,而是在為人們提供真正資料的新聞站點。這種嚴格的新聞真實性真的從來沒有(在這里)發生過。」

從此以後,Blog就成為了網上的熱點,特別是在美國。2001年開始,國內的相關報道就更多一些。比如《數字財富》雜志在當年第26期,發表了魏戎同志編譯自美國The Instry Standard《工業標准》雜志)的一篇由Nicholas G.&Carr撰寫的關於博客的文章,題為《可塑媒體》。但真正在國內引起廣泛的注意和重視還是在2002年的夏秋之交,自以方興東為代表的一代博客人建立「博客中國」網站並大力推廣之後,博客這個全新的概念才真正在中國這塊遼闊的土地上生根發芽,中文的博客網站也像雨後春筍般蓬勃發展起來。

❽ 最好的PHP博客源碼

O(∩_∩)O~現在比較流行的就是wordpress簡稱:wp.你在網路裡面一搜就可以了解到,他的代碼SEO優化方面還是比較可以的,在運行速度上也很快。當然網上免費的模板(下載下來安裝即可)也非常豐富,非常漂亮!操作簡單。不是廣告,只是個人和一下SEO朋友的是么認為的!

❾ 有研究android系統源碼的博客嗎

我幹了3年Android sdk開發,覺得到了瓶勁沒法更進一步,於是花了一年多點時間,大概摸到點門徑。根據前輩的經驗,Android底層完全入門需要兩年。

先說下我的入門過程:
第零步,下載源碼,我下的4.2的,框架層源碼10G,內核2G多,ctags給框架層建的標簽文件都有600M,當時讓我有點震撼,用的vim+ctags+cscope來閱讀,還算不錯,架構挺清晰的。

第一步,我找到了一本好書《Android的設計與實現 第一卷》它講了Android框架層的啟動,初始化,服務框架初始化,Binder,消息循環,PackageManagerService,ActivityManagerService。據作者說後面會出講UI子系統的第二卷,拭目以待。其實這本書看了幾十頁我就發現需要第二步的知識,否則看不下去,於是跳去第二步。

第二步,學習Linux系統編程,在看《Android的設計與實現》的時候我發現,框架層的Native部分,全是Linux編程。為了掌握這部分知識,我花了4個月學習了《Linux系統編程手冊》(TLPI)這本1000多頁的書,我以前是搞WIndows文件系統這塊的,所以C語言還比較熟,TLPI的習題很有意思,量也比較大,堅持下來還是收獲很多。

第三步,花了4個月學習了一些Linux內核的知識,看了LKD,PLKA看了一半多。越學越沒底,覺得不懂得越來越多,不過這個也正常,只有靠慢慢磨,估計以後要不斷的磨這塊。

第四步,回頭看Android源碼,這次一口氣看完了《Android的設計與實現 第一卷》,終於對框架層有了譜。同時真的數次把我看暈,前面看Linux內核源碼都沒這么暈,不斷在Java層和Native層之間跳有點磨腦漿。其中我又覺得Java的基礎沒有打太牢,回去補了一個月的《Core Java》第八版。但是這書沒有涉及UI子系統,於是又看了《Android內核剖析》

第五步,《Android內核剖析》(這本書實際上是講框架層的,作者也是個搞嵌入式的,所以他在寫框架層的時候文筆不太好,很羅嗦,不過還是有很多看點,到他後來寫做ROM,玩開發板時估計是說到了他的本行,一下子遛起來了看得出還是挺有水平的,這本書知識有點舊畢竟講的是2.3很多代碼已經過時,但是作者很多點子很有參考價值)這本書講UI子系統和按鍵/觸摸消息處理系統還是很有分量的,尤其13章View繪制那裡,結合源碼研究很有收獲。而後面他講編譯框架和ROM相關的東西都是挺寶貴的資料。

第六步,為了再補一下其他諸如電源管理模塊等子系統的知識看了,《深入理解android》系列,個人認為這個系列看起來有點不太舒服,不過作為補充印證還是比較有價值。

第七步,《Android系統源代碼情景分析》,羅升陽的源碼分析大作,比《Android的設計與實現》分析得更細致,但缺點是涉及到模塊比較少,選用的源碼也比《Android的設計與實現》更舊一點。看完書後需要去研究作者的博客,東西挺多的,一定讓你滿意。

第八步,買塊開發板自己玩。這步我還沒走到,原因是我覺得我還差點准備知識。可能要再幾個月,到時准備入塊6410或者樹莓派。

最後,由於我11年以前都是搞Windows這塊的,所以對Linux知識不是很了解,不得已看了這么些書,如果是一直做Linux的人,很多步驟估計可以省掉了。直接上源碼才是正道。

我本身做著移動GIS開發的工作,學框架層全是因為興趣,但招聘平台Android框架層開發人員還是蠻有競爭力的有不少定製ROM,智能電視的工作都處於人才難求狀態,畢竟有一定的門檻,現在各種ios培訓,讓奔著錢干開發的人紛紛湧入,而ios只能幹sdk開發的缺點就暴露出來了,一堆新手老手,菜鳥大牛全擠在SDK開發這塊,我覺得不太妙。 反觀Android這邊,雖然入門菜鳥沒有搞ios來錢,但是可持續性很好,從sdk-》框架》驅動》內核這樣幹下去。干著干著發現自己漸漸變成了Linux開發者/嵌入式開發者的人也不少,新人,老手,菜鳥大牛各居其位,層次性很好。
轉載

❿ 請問這個人的新浪BLOG怎麼跟別人的不一樣怎麼弄的啊

樓上的回答不對。他主要應用了以下兩段代碼:

【更改背景】

修改模板的時候可以靈活運用下面的代碼,有些部分可以不改,不想改哪項就把哪項的代碼刪掉就可以了。

<TABLE cellSpacing=0 cellPadding=0 align=center border=0>
<TBODY>
<TR>
<TD>
<STYLE>
body
{background:url("頁面大背景圖片地址") repeat scroll!important;}
.logo
{background:url("題圖上背景圖片地址") no repeat no scroll!mportant;}
.banner
{background:url("題圖下背景圖片地址") no repeat no scroll!mportant;}
.menu
{background:url("題圖下的菜單背景圖片地址") no-repeat center;}
.feeds .up
{background:url("正文標題欄上翻時的圖片地址") no-repeat center;}
.feeds .down
{background:url("正文標題欄下翻時的圖片地址") no-repeat center;}
.feeds .function
{background:url("正文摘要結尾處菜單的圖片地址") no-repeat right;}
.links .up
{background:url("面板標題欄上翻時的圖片地址");}
.links .down
{background:url("面板標題欄下翻時的圖片地址");}
.links .mid
{background:url("面板的背景圖片地址");}
.photo .mid
{background:url(個人形象照片處的背景圖片地址);}
.label .mid
{background:url("自定義面板的背景圖片地址");}
.calendar .mid
{background:url("日歷面板背景圖片地址");}
.callboard .up
{background:url("公告欄標題欄上翻時的圖片地址");}
.callboard .down
{background:url("公告欄標題欄下翻時的圖片地址");}
.callboard .mid
{background:url("公告欄背景圖片地址");}
.bodyBg
{background:url("正文背景圖片地址");}
.bodyBottom
{background:url("正文背景圖片地址");}
.gbook .up
{background:url("留言板標題欄上翻時的圖片地址") no-repeat;}
.gbook .down
{background:url("留言板標題欄下翻時的圖片地址") no-repeat;}
.feeds .page
{background:url("正文文章頁數圖片地址") no-repeat center;}
</STYLE>

解釋:
「頁面大背景(body)」指的是整個博客的最大背景,由於中間部分被覆蓋,所以顯示的效果只是兩邊的部分。

「題圖上背景(logo)」是指所在的橫長條的背景。

「題圖下背景(banner)」是指博客名字(如)和博客地址(如)所在的那部分的背景。

其中logo和banner寬各為770,logo高40,banner高134,單位均為像素。

「題圖下的菜單背景」是指「HOME...搜索┆幫助┆退出」等字所在的那個橫長條的背景。

「正文標題欄上翻時的圖片」指的是文章發表了之後文章標題的圖片。

「面板標題欄下翻時的圖片」指的是點擊標題後出現標題後的後面的圖片。

「面板的背景圖片」指的是左邊比如我的文章列表什麼的背景圖片。

「頁面內背景」是指整個文章文字所在的大背景!

修改模板的時候可以靈活運用上面的代碼,有些可以不要改,不想改哪項就把哪項的代碼刪掉就可以了。

假如不知道這些背景圖片的大小,就具體在哪張圖片上就點擊滑鼠右鍵,點背景另存為,把圖片存到電腦上,然後看大小就可以了。

注意:以上所用到的圖片地址都是圖片的URL地址,也就是網路地址,而不是本地地址,本地地址不能用。

這些都是CSS代碼,代碼不能添加在什麼都沒有的空白面板里,要不然會沒有效果。

在添加空白面板的時候,先按個空格鍵,接著在顯示源代碼前打勾,再把代碼放進去;或者可以把代碼放在已建的面板里的其他東西的代碼後面,比如放在你的時鍾代碼後面或者天氣預報代碼後面什麼的都可以,建議最好用此方法。

【半透明蒙紗效果】

<STYLE type=text/css>
.logo
{background:#transparent}
.banner
{background:#transparent}
.menu
{background:#transparent}
.feeds .up
{background:#transparent}
.feeds .down
{background:#transparent}
.feeds .function
{background:#transparent}
.links .up
{background:#transparent}
.links .down
{background:#transparent}
.links .mid
{background:#transparent}
.photo .mid
{background:#transparent}
.label .mid
{background:#transparent}
.calendar .mid
{background:#transparent}
.callboard .up
{background:#transparent}
.callboard .down
{background:#transparent}
.callboard .mid
{background:#transparent}
.bodyBg {background:#transparent;filter:progid:DXImageTransform.Microsoft.gradient(GradientType ='1',enabled='true',startColorstr=#AAFFFFFF, endColorstr=#AAFFFFFF);}
.bodyBottom
{background:#transparent}
.sysW770
{background:#transparent}
.gbook .up
{background:#transparent}
.gbook .down
{background:#transparent}
.feeds .page
{background:#transparent}
.links .more
{background:#transparent}
.add
{background:#transparent}
.add .ico
{background:#transparent}
</STYLE>

代碼說明:
這個代碼就是在透明背景上的文章處和一側模塊處的透明蒙紗效果.這個效果的好處是即可以看見背景圖片,又可以看清楚文字!
以上代碼為最佳效果,不用更改即可使用!使用《灰色軌跡》系統模板為最佳效果!

如果你已經使用了全部透明代碼了,還想要這個效果,最好是把你以前添加的代碼刪除,把以上代碼復制添加!

代碼中:
startColorstr=#AAFFFFFF 前面的AA是透明度,修改成FF是不透明,00是全透明,可以根據自己的需要決定透明度.
後面的 FFFFFF 是顏色,就是說在上面蒙什麼顏色的東西,可以根據 顏色代碼表上 中顏色代碼來修改顏色!

正常使用這個效果startColorstr=#AAFFFFFF和 endColorstr=#AAFFFFFF 後面的=#AAFFFFFF數值要一樣!
--------------------------------------------------------------------------------
如果想要做顏色漸變效果:
你要修改代碼中幾個數值,
startColorstr=#AAFFFFFF 修改你要的顏色和效果
endColorstr=#AAFFFFFF 再修改成另外一個顏色和效果
GradientType ='1'這個數值也要修改,修改成0是從上到下漸變 1是從左到右漸變 2是從上到下漸變
--------------------------------------------------------------------------------

<另>與透明背景上的半透明蒙紗效果相配合換背景的代碼:
一 固定背景圖片的代碼:
<style>body {background:url("頁面大背景圖片地址") repeat fixed!important;}</style>
固定背景代碼:就是你拉動滾動條的時候,圖片比動,始終固定,和我首頁一樣!

二 滾動的大背景代碼:
<style>body {background:url("頁面大背景圖片地址") repeat scroll!important;}</style>
滾動背景代碼:隨著你拉動滾動條而上下滾動,適合小圖片,什麼閃爍的星星之類的!圖片很小即可,它會自動平鋪!

能看懂么?不知道對你有沒有用處~

閱讀全文

與子比博客源碼相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:577
python員工信息登記表 瀏覽:375
高中美術pdf 瀏覽:158
java實現排列 瀏覽:511
javavector的用法 瀏覽:979
osi實現加密的三層 瀏覽:230
大眾寶來原廠中控如何安裝app 瀏覽:911
linux內核根文件系統 瀏覽:240
3d的命令面板不見了 瀏覽:523
武漢理工大學伺服器ip地址 瀏覽:146
亞馬遜雲伺服器登錄 瀏覽:521
安卓手機如何進行文件處理 瀏覽:70
mysql執行系統命令 瀏覽:928
php支持curlhttps 瀏覽:142
新預演算法責任 瀏覽:443
伺服器如何處理5萬人同時在線 瀏覽:249
哈夫曼編碼數據壓縮 瀏覽:424
鎖定伺服器是什麼意思 瀏覽:383
場景檢測演算法 瀏覽:616
解壓手機軟體觸屏 瀏覽:348