导航:首页 > 源码编译 > 子比博客源码

子比博客源码

发布时间: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的命令面板不见了 浏览:524
武汉理工大学服务器ip地址 浏览:146
亚马逊云服务器登录 浏览:522
安卓手机如何进行文件处理 浏览:70
mysql执行系统命令 浏览:928
php支持curlhttps 浏览:142
新预算法责任 浏览:443
服务器如何处理5万人同时在线 浏览:249
哈夫曼编码数据压缩 浏览:424
锁定服务器是什么意思 浏览:383
场景检测算法 浏览:616
解压手机软件触屏 浏览:348