1.如何精读或泛读别人编写的求知程序源代码?
2.叶子树简介
3.什么是WEB2.0
如何精读或泛读别人编写的程序源代码?
读代码这事,先要分是网源精读还是泛读。从学习的码求目的来看,一定要精读一定量的知网资源经典代码。而精读是求知指每行都读懂,不看代码脑子里就能勾画出程序的网源linux shell命令源码基本结构。这里有个很形象的码求状态,精读代码时会满脑子都是知网资源代码,放不下,求知甚至睡觉前脑子里也是网源代码。但这一篇里主要不是码求关注如何精读代码的,而是知网资源关于如何在工作中掌握既有代码的,等价于泛读。求知现存的网源很多系统往往很大,几十万行的码求可能也只算普通。这时候一旦加入了这样一个项目,那么如何去读代码?下面说点个人体会。读这类代码前,先得把规格大致弄清楚,而不能上来就读,比如:对于应用型程序,你要先大致整清楚它的使用方法。如果其中有涉及到领域知识,比如:流程、财会等,那也最好预先有些认识。这类东西从代码里反推回来是不太可能的。我个人感觉这对读程序是个很大的障碍,你不知道编码规则,却去读编码的程序,总是会云里雾里,这时候反倒不是因为程序难,而是因为不知道程序中所包含的专业知识。在这一步里,最好能抽取出来几个典型的应用场景,这在后面有用。一旦开始接触代码,那要先弄清楚代码的基本静态结构。如:包构成、类构成等。这里涉及一个层次问题。一下子把层次探的太深,就容易盯在细节上出不来。有设计文档的项目,大致上可以通过包来界定这个层次。没设计文档的就可怕了,只能靠自己划分,最好不要超过个,超过了真记不住。在静态结构这步,要弄清楚每个部分的核心职责,可以简单,最好能记住。接下来就要用到上面的典型场景了。要在典型场景下考察上面的静态结构是如何发挥作用的。典型场景下用到的接口往往就是关键的接口,要整清楚,他们的定义和作用。也要整清楚,典型场景下数据流的变迁。这步骤算是弄清楚代码的时序。很像UML里的Sequence图。但牵涉到数据的时候,一般需要对数据的规格有所了解。接下来要关注进程、c语言语法分析器源码线程的结构。比如:都是什么时候开始、什么时候结束的,在上述典型场景下都负责干什么。上述四步(规格、静态结构、典型场景、进程线程)完成后,对程序的第一次泛读完成。检验标准很简单,这时应该能够单靠纸笔描述出程序典型场景的Sequence图。干这事儿的时候,要抑制自己的求知欲,因为总是很想在调试器里通过call stack把一个功能的实现细节整清楚,但至少在第一个层次里,可以先不要这样。第一次泛读后,就要进入深掘的过程,针对的对象应该是自己会负责的部分。这部分功能往往会隐藏在某个接口之下。这时候一般来讲可以放过功能型的模块,比如:XML解析的模块等。其他部分可以认为是需要把之前所说的四个步骤再重复一下。但这时候要关注细节和调用堆栈了。不管是在那个读代码的层次,有两个基本技巧总是需要的,一个是要掌握具体程序里内嵌的Log机制,要能看Log,必要时可能还得加Log;一个是基本调试方法。调试很难展开,《软件调试》一书写了多页。但只停留在设个断点等他停下来这个层次上还是会有点欠缺的。条件断点、多线程调试、多进程时的调试还是要知道一点的。程序类型太多,因此估计读程序的方法也很多。上面只是个人的一点经验,欢迎补充。
叶子树简介
叶子树是一个专注于PHP框架和基础编程的在线平台,致力于为PHP开发者提供详尽的资源和学习支持。在这里,您能找到丰富的PHP技术内容,如源码分享和问题解答,使您能够深入理解并提升PHP开发技能。
叶子树不仅是一个学习的网站,它还构建了一个专业的社区,为开发者们提供一个交流和分享知识的环境。无论是初学者还是经验丰富的开发者,都能在这里找到适合自己的学习资料和解决方案。
对于热衷于广告程序的朋友们,叶子树同样开放和欢迎,我们理解广告对于推广和互动的重要性,同时也致力于提供一个专业、纯粹的学习空间。无论您是寻找广告相关资源,还是寻求技术上的帮助,叶子树都将是您的理想之选。
总之,叶子树是一个全方位服务于PHP开发者的网站,无论是新手求知,还是资深开发者提升,都能在这里找到价值。欢迎您的微信小游戏猜谜语源码光临,让我们一起在PHP的世界里探索和成长。
什么是WEB2.0
什么是Web2.0
Web2.0是以Flickr、Things.com等网站为代表,以Blog、TAG、SNS、RSS、wiki等社会软件的应用为核心,依据六度分隔、xml、ajax等新理论和技术实现的互联网新一代模式。”
Blog——博客/网志:Blog的全名应该是Web log,后来缩写为Blog。Blog是一个易于使用的网站,您可以在其中迅速发布想法、与他人交流以及从事其他活动。所有这一切都是免费的。
RSS——站点摘要:RSS是站点用来和其他站点之间共享内容的一种简易方式(也叫聚合内容)的技术。最初源自浏览器“新闻频道”的技术,现在通常被用于新闻和其他按顺序排列的网站,例如Blog。
WIKI——百科全书:Wiki--一种多人协作的写作工具。Wiki站点可以有多人(甚至任何访问者)维护,每个人都可以发表自己的意见,或者对共同的主题进行扩展或者探讨。
Wiki指一种超文本系统。这种超文本系统支持面向社群的协作式写作,同时也包括一组支持这种写作的辅助工具。
网摘:“网摘”又名“网页书签”,起源于一家叫做Del.icio.us的美国网站自年开始提供的一项叫做“社会化书签”(Social Bookmarks)的网络服务,网友们称之为“美味书签”(Delicious在英文中的意思就是“美味的;有趣的”)。
SNS——社会网络:Social Network Sofwaret,社会性网络软件,依据六度理论,以认识朋友的朋友为基础,扩展自己的人脉。
P2P——对等联网:P2P是peer-to-peer的缩写,peer在英语里有“(地位、能力等)同等者”、“同事”和“伙伴”等意义。这样一来,P2P也就可以理解为“伙伴对伙伴”、“点对点”的意思,或称为对等联网。目前人们认为其在加强网络上人的交流、文件交换、分布计算等方面大有前途。
IM——即时通讯:即时通讯(Instant Messenger,简称IM)软件可以说是目前我国上网用户使用率最高的软件。聊天一直是网民们上网的主要活动之一,网上聊天的主要工具已经从初期的聊天室、论坛变为以MSN、QQ为代表的即时通讯软件。
RSS为Really Simple Syndication(简易供稿)的缩写,是某一站点用来和其它站点之间共享内容的一种简易方式,也叫聚合内容。网络用户可以在客户端借助于支持RSS的新闻聚合工具软件(例如SharpReader NewzCrawler、FeedDemon RSSReader),在不打开网站内容页面的情况下阅读支持RSS输出的网站内容。可见,网站提供RSS输出,有利于让用户发现网站内容的更新。在高速高质高效成为主流呼声的互联网时代,RSS无疑推动了网上信息的在线音乐网站源码自动采集传播,提出了另一种看世界的方式。
RSS,原意是把网站内容如标题、链接、部分内文甚至全文转换为可延伸标示语言(XML:eXtensible Markup Language)的格式,以向其它网站供稿,使用者可以用一般的浏览器观看,也可以用特殊的“阅读器”软件来阅读。
-----------------------------------------------------------------------------------------------
历史很重要。对一个技术的学习也应当从历史出发,通过其在时间形成历史的流变,得以知晓现状,甚至能够预知未来。
那Web1.0是什么呢?
他们说,记得静态HTML的WWW时代么?
(那个时代的WWW应用、人们的Web体验、对社会的影响如何?)
那么动态HTML和静态HTML下的Web相比,是多少版本?1.5?对了,他们是真这么叫的。
(在效果和影响上,与1.0相比,扩展和加深多少?)
要呈现的数据存储在数据库中,通过Web服务端的程序,应用户的请求,取出数据,加上事先设计的模板,动态的生成Html代码,发送到用户的浏览器那里。
他是1.0系列,应为用户在浏览器中所见和Web1.0一样,它有0.5的升级,因为数据不是事先制作并发布,而是动态生成,和用户的需要交互生成。
那好,再加0.5,到Web2.0,变化是在哪里呢?
(看到了正在崛起的和改变的,会继续朝着什么方向改变互联网和社会呢?)
更新:关于各个版本的差别,看看亚马逊的例子。
事情没有那么幸运,Web2.0并不是一个具体的事物,而是一个阶段,是促成这个阶段的各种技术和相关的产品服务的一个称呼。所以,我们无法说,Web2.0是什么,但是可以说,那些是Web2.0。
WikiPedia的Web2.0条目下列出了这些条件:
*CSS和语义相关的XHTML标记
*AJAX技术
*SyndicationofdatainRSS/ATOM
*AggregationofRSS/ATOMdata
*简洁而有意义的URLs
*支持发布为weblog
*RESTian(preferred)或者XMLWebserviceAPIs
*一些社会性网络元素
必须具备的要素有:
*网站应该能够让用户把数据在网站系统内外倒腾。
*用户在网站系统内拥有自己的数据
*完全基于Web,所有的功能都能透过浏览器完成。
(以上内容引用自英文版维基百科)
虽然这只是一家之言,不过,对于其中谈到的几个要素,大家还是公认的。
-基于RSS/ATOM/RDF/FOAF等XML数据的同步、聚合和迁移。
数据不再和页面和网站混粘在一起,它独立了,它跟着用户走。这是Web2.0的很重要特征。这也是为什么Blog是Web2.0的代表的原因。在网志上,制作二维码api接口源码常主角的是相互独立的一则则的网志。
独立,然后有物理表现。现在,就能让他们活跃起来。透过对XML数据的处理,这些内容能被自由的组合,被各种应用程序,不论是Web程序还是桌面程序等呈现和处理。
当然,最重要的是背后的人。
-社会性因素。
内容跟着人走,内容又能够被用户自由的组合,也就是说,用户能够自由的借助内容媒介,创建起一个个的社群,发生各种社会性的(网络)行为。
此外还有标签以及建立在开放标签系统之上的Folksonomy。
-第三个公认的因素是开放API,
这个技术性稍强些,得另花时间研习,可以先看看例子:amazon、flickr、googlemap等。
从Web应用的产品/服务生产者角度来说,该如何创建Web2.0的产品呢?
重要的是要抓住这么几点,一个是微内容(这里有定义),一个是用户个体。除了这两个最基本的之外,还可以考虑社群内的分享以及提供API。
(cnbruce收藏的一些API内容:bruce.com/blog/showlog.asp?cat_id=&log_id= )
微内容:英文是microcontent。用户所生产的任何数据都算是微内容,比如一则网志,评论,,收藏的书签,喜好的音乐列表、想要做的事情,想要去的地方、新的朋友等等。这些微内容,充斥着我们的生活、工作和学习,它的数量、重要性,还有我们对它的依赖,并不亚于那些道貌岸然、西装革履的正统文章、论文、书籍。
对微内容的重新发现和利用,是互联网所开创的平等、民主、自由风气的自然衍生,也是互联网相关技术消减信息管理成本之后的一个成果。
我们每天都生产众多的微内容,也消费着同样多的微内容。对于Web2.0来说,如何帮助用户管理、维护、存储、分享、转移微内容,就成了关键。
用户个体。对于Web1.0的典型产品/服务来说,用户没有具体的面貌、个性,它只是一个模糊的群体的代名词而已。但是对于Web2.0的产品和服务来说,用户是个实实在在的人。Web2.0所服务的,是具体的人,而不是一个如同幽灵般的概念。并且,这个人的具体性,会因为服务本身而不断地充实起来。
如何为这个具体的个体服务,是Web2.0设计的起点。
因此,一类可以被称作Web2.0的产品/服务将是这样:
服务于用户个体的微内容的收集、创建、发布、管理、分享、合作、维护等的平台。
其他的呢?恐怕就设计到好些人提到的,微内容的XML表现;微内容的聚合;微内容的迁移;社会性关系的维护;界面的易用性等等。
以及是否就是开源、参与、个人价值、草根、合作等等?
Web2.0是许多方面起头并进又相互牵连的一个新的阶段的到来。因此,不同的人,有着不同的看法。那么,对于Web开发人员来说,Web2.0意味着什么呢?
他们说Web2.0阶段,Web是一个平台,或者说,Web正在变得可编程,可以执行的Web应用。野心家们设想这个它的终极目标是WebOS。
Web1.0时候,Web只是一个针对人的阅读的发布平台,Web由一个个的超文本链接而成。现在的趋势发生了变化,Web不仅仅是Html文档的天下,它成了交互的场所。
Web2.0Conference网站的横幅引用JeffBezos的话说“Web1.0ismakingtheinternetforpeople,web2.0ismakingtheinternetbetterforcomputers”。
具体来讲,他们说Web成为一个开发环境,借助Web服务提供的编程接口,网站成了软件构件。
这些,就是WebService的目标吧,信息孤岛通过这些WebService的对话,能够被自由构建成适合不同应用的建筑来。
一些例子:del.icio.us、flickr、a9、amazon、yahoo、google、msn等提供的编程接口衍生出的各种应用。
为什么要开放APIs,这涉及到集市中的商业方面的技术策略。当然,还有更深层的原因,那是什么呢?
这种交互不仅体现在不同的网站服务之间,同时还体现在用户和Web之间在浏览器上的交互。这也是为什么在美味书签的收藏中Web2.0和AJAX如此相关的一个原因。
在Web页面上使用桌面程序有的那些便利,真的是很享受的事情。这恐怕也是Web可编程的一个方面,Web页面不再是标记和内容混合那样的简单,它就是一个可以编程的地方(是这样理解吧?)
有人反对说,AJAX的使用对搜索引擎不友好,只有Web1.0的站长才关心这个事情吧,在Web2.0时候,站长应该关心的是用户参与的便利、用户的自由度,至于搜索,有RSS/ATOM/RDF等,更本用不着操心,Google不是已经顺应这个趋势,让大家主动提交了么?
可编程的第三个方面,是否在于Web应用和桌面应用之间的无缝连接趋势的出现?类似这里说的“从工具上,是由互联网浏览器向各类浏览器、rss阅读器等内容发展”
编程的一个重要目的是对数据的操作,因此,对于网站来说,除了WebService接口之外,最近为简便方式就是将内容以RSS/RDF/ATOM格式,或者有意义的XHTML格式输出,同时实现内容和表现的分离。
[Web2.0是个历史学的概念,而非是个技术性的概念,它是对Web发展历史断代的成果。对这个概念的梳理,能帮助我更好的把握互联网正在发生的技术与文化。]
---------------------------------------------------------------
中文网志圈谈论的Web2.0内容摘要:
-“Web2.0是用来研究现象、发现规律的东西,不是用来招商引资、搭台唱戏的东西。当越来越多的互联网应用采取与用户互动的方式,越来越多的内容是由用户产生,越来越多的用户参与到互联网创造的过程中的时候,其实它代表了一种新的思潮。在这种思潮之下,一些新的技术开始出现,一些古老技术重新焕发了生机。随便你怎么表述这样一种现象,但现象本身是实实在在存在的,不管是叫它Web2.0,还是社会化互联网。”[Keso:老冒给Web2.0浇了一桶冷水]
-“我觉得最有价值的一个是,web应用的数据格式开始逐渐出现了交换“标准”...这些标准...更加容易被机器自动化处理...能帮助人更好地过滤和定制化信息。其次,更多的服务将以webservice的形式来提供,...这使得web服务可以被互相集成,从而诞生更多新的服务...人的重要性被提高了。过去web更多注重在信息提供,而现在的越来越多的应用更加关注人,也就是所谓“社会性”。此外web的可用性改进正在被越来越重视...”[老冒:朝web2.0泼点冷水]
-“我认为Webx.x是人们为了区别不同时代Web的发展而使用的,而这些概念也是经过归纳出来的结果。抓住对方向,如Wikipedia中所提到的朝向互动及社会网络的方向发展,不论应用何种技术,只要能达到目的都是很好的。甚至作为一般的使用者,都可以不去理会Webx.x的讨论,因为我们都已经在使用这些技术或网站了。”[图书馆观点:Web2.0]
-“RSS逐渐成为在线内容提供服务的标准发行平台。Blog以及user-generated内容的兴起。MyYahoo提供的RSS整合型服务。同时提出了值得密切关注的一些发展中领域,其中包括搜索技术,个性化,User-Generated内容(包括blog,评论,图像和声音),音乐,短视频和Accessibility(易访问性)”[Owen:MaryMeeker新作-关于DigitalWorld的发展报告的摘取]
-“我们谈论的Web2.0带给我们的是一种可读写的网络,这种可读写的网络表现于用户是一种双通道的交流模式,也就是说网页与用户之间的互动关系由传统的“Push”模式演变成双向交流的“Two-WayCommunication”的模式。而对于Web服务的开发者来说,Web2.0带来的理念是服务的亲和力,可操作性,用户体验以及可用性。”[Owen:BaCKpACK-体验可读写的Web服务]
-“web2.0是一种可以被分发的信息概述,web文档被格式化成了web数据。我们不会再看到不同旧地信息,现在我们所注意到是一种聚合、再混合内容的工具。”[songzhen:也说Web2.0的翻译]
-“从这些应用中可以看到:如果基于传统的HTML,同样的功能实现将变得非常复杂和不稳定,数据的再生产和交换成本是很高的。所以:RSS这个标准最终要的贡献就是使得互联网的大部分网站变得可编程:类似的例子还有Blog中的:TrackBackPing等机制,这些机制都是依赖XML/RPC实现的。当初为Lucene设计一个RSS/XML的接口也是为了这个初衷,它使得全文检索服务可以轻松的嵌入到各种应用中,通过关键词将各种内容之间实现更丰富的关联(WellReferenced)。”[车东:RSS,简单协议使得互联网可编程]
-“聚合的可能性以及如何更好地聚合(通常来说,更好的聚合应该基于个人知识管理和人际关系管理)很显然应该成为新一代或者说web2.0架构的核心之一。还有,你会重新发现,恰好是分散带动了聚合,聚合促进了分散,通过聚合的思维,互联网的网络状变得越来越丰富和密集,web2.0就变得越来越有趣味,它将web1.0时代的硕大节点即门户网站不断消解,去努力创造一个更加和谐的自然网络图谱。”[Horse:rss,聚合的无数可能]
-“新的web2.0网站都依赖于用户参与、用户主导、用户建设”。[Horse:Web2.0这个词]
-Keso:Web1.0与Web2.0的区别
-“表面上看,Bloglines取代了门户,成为一个新的中心,但这里有一个重大的区别。门户是只读的,它带有某种锁定的性质。你可以离开门户,但你无法带走门户的内容。Bloglines则完全不同,你觉得它好用,就会继续使用,有一天你不再喜欢Bloglines,你完全可以导出你的OPML,到另一个RSS订阅网站,或者干脆用客户端软件浏览同样的内容。所以,像Bloglines这样的网站,是可写的,你可以导入,也可以导出。就像你对信息拥有选择权,对服务提供商也同样拥有选择权,没有人可以锁定你,主动权在你自己手上。”[Keso:再说信息选择权]
-“Flickr、del.icio.us、Bloglines等Web2.0服务,通过开放API获得了很多有趣、有用的想法,并借助外部的力量,让用户获得了更好的体验。更多大公司也加入到开放API的潮流中,Google、Yahoo!、Amazon、Skype。Google桌面搜索今年3月才开放API,很快就产生了大量的创造,大大扩充了可搜索的文件格式。”[Keso:开放API]
-“归纳:web1.0天天谈门户,web2.0谈个人化;web1.0谈内容,web2.0谈应用;web1.0商业模式,web2.0谈服务;web1.0谈密闭、大而全,web2.0大家谈开放、谈联合;web1.0网站中心化,web2.0谈个人中心化;web1.0一对一,web2.0谈社会性网络;web1.0不知道你是狗,web2.0你去年夏天干了什么我一清二楚甚至想要干什么呢。。。”[van_wuchanghua:发现了N.HOOLYWOOD,我还知道你今年夏天要干什么]
-“我认为Web2.0有下面几个方面的特性:个性化的传播方式.读与写并存的表达方式.社会化的联合方式.标准化的创作方式.便捷化的体验方式.高密度的媒体方式.”[飞戈:Web2.0与未来的网络]
-“用RAILS写的网站带有典型的读写网络的特征:RAILS创建的三个架构中的ACTIVERECORD这个模块中,如果你读读它最重要的基类ActiveRecord::Base,你会发现有CREAT,EDIT,SAVE,DESTROY这些方法已经天然包含在内了,这让实现一个数据库的CRUDS行为变得如此简单。由于这些类的方法直接和网页的名称映射到一起,这使得网页本身就像一个可以编缉的数据库的数据项。”[Blogdriver:RUBYONRAILS,wEB2.0世界新生的创造力]
-“Greasemonkey一定名列前茅。这个通过UserScript就能修改任何网页输出效果的插件极大的提高了用户阅读的自主性,一推出就引起了轰动,同时也引来了不少争议。”[Webleon:platypus,完全可写的互联网]
-“Web1.0到Web2.0的转变,具体的说,从模式上是单纯的“读”向“写”、“共同建设”发展;从基本构成单元上,是由“网页”向“发表/记录的信息”发展;从工具上,是由互联网浏览器向各类浏览器、rss阅读器等内容发展;运行机制上,由“ClientServer”向“WebServices”转变;作者由程序员等专业人士向全部普通用户发展;应用上由初级的“滑稽”的应用向全面大量应用发展。”[Don:Web2.0概念阐释]
Web2.0阶段的一个重要特征是开放,和Web初期的开放有很大不同,有以下几种突出的表现:
内容方面。
-内容的创作共用授权。它的广谱和可选择性,让它具有了足够的生命力。CC先是在网志圈中广泛采用,后来许多商业公司也纷纷采用CC方式(比如BBC);先是文本世界采用,后来逐渐推广到了多媒体世界,比如音频、视频、Flash动画等等。一场自由的文化(freeculture)运动在各个方面悄然铺开。
-内容来源方面的开放。和早期的Web阶段相比,由于使用相关设备的成本降低,利用相关技术的门槛减低,人们可以自由生产并发布各种内容,比如文本信息,比如语音记录,比如视频录制等。信息的生产和传播不再仅仅是商业资本或者技术精英的特权。在Web的新阶段,原来在商业、技术与大众之间的信息生产和传播的落差被削平。消除信息垄断和去中心化已经成为可能。不仅如此,信息的生产和消费的模式也发生了变化,从原来的生产/消费的对立,变成了参与式的信息集市。
Web主体方面。
-商业网站也渐渐采取了开放的、参与的模式。除了内容上的CC授权出现之外。原来并不外露的内容,也随着blog、podcasting等的兴盛而对外开放。一些网站还在技术层面开放,比如开放源代码,比如开放APIs(编程接口),让自己成为一个平台,让用户可以参与衍生产品的创造,用户本身也是产品的生产者。不仅是内容、技术层面,在鼓励用户的参与上,也有相应的开放出现,比如一些新闻网站的RSS源的输出、引用通告(trackback)功能的采纳、blogthis便利的提供,无一不是让用户参与到内容生产、传播的各个环节。
-个人信息层面的开放。有开放,才有交流,才有社会行为和形态产生。个人内容的开放是与一类Web2.0服务的兴起有关。它涵盖了内容(文本、声音、影像、视频)、关系、行为等等。