一种基于Web资源的代码范例搜索工具
- 格式:doc
- 大小:32.00 KB
- 文档页数:9
{中是译者评论,程序除外}大表:结构化数据的分布式存储系统Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C。
Hsieh, Deborah A。
Wallach Mike Burrows, Tushar Chandra, Andrew Fikes, Robert E。
Gruberffay,jeff,sanjay,wilsonh,kerr,m3b,tushar, kes,gruberg@google。
comGoogle, Inc。
摘要Bigtable是设计用来分布存储大规模结构化数据的分布式存储系统,从设计上它可以扩展到上2^50字节,分布存储在几千个普通服务器上。
Google的很多项目使用Bigtable来存储数据,包括网页查询,google earth和google金融。
这些应用程序对Bigtable的要求大不相同:数据大小(从URL到网页到卫星图象)不同,反应速度不同(从后端的大批处理到实时数据服务)。
对于不同的要求,Bigtable都成功的提供了灵活高效的服务。
在本文中,我们将描述Bigtable的数据模型。
这个数据模型让用户动态地控制数据的分布和结构,我们还将描述Bigtable的设计和实现。
1、介绍在过去两年半里,我们设计,实现并部署了一个称为Bigtable结构化数据的分布式存储系统。
Bigtable的设计使它能够管理2^50 bytes(petabytes)数据,并可以部署到上千台机器上。
Bigtable 完成了以下目标:应用广泛、可扩展、高性能和高可用性。
包括google analytics, google finance, orkut{Orkut是Google公司推出的社会性网络服务。
通过这一服务,用户可以在互联网上建立一个虚拟社会关系网},personalized search,writely和google earth在内的60多个产品都使用Bigtable。
三大WEB服务器对比分析(apache ,lighttpd,nginx)一.软件介绍(apache lighttpd nginx)1. lighttpdLighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。
lighttpd 是众多OpenSource轻量级的web server中较为优秀的一个。
支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能。
Lighttpd使用fastcgi方式运行php,它会使用很少的PHP进程响应很大的并发量。
Fastcgi的优点在于:·从稳定性上看, fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑.·从安全性上看, fastcgi和宿主的server完全独立, fastcgi怎么down也不会把server搞垮,·从性能上看, fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态IO处理完全不需要逻辑程序的参与(注1)·从扩展性上讲, fastcgi是一个中立的技术标准, 完全可以支持任何语言写的处理程序(php,java,python...)2.apacheapache是世界排名第一的web服务器, 根据netcraft()所作的调查,世界上百分之五十以上的web服务器在使用apache.1995年4月, 最早的apache(0.6.2版)由apache group公布发行. apache group 是一个完全通过internet进行运作的非盈利机构, 由它来决定apache web服务器的标准发行版中应该包含哪些内容. 准许任何人修改隐错, 提供新的特征和将它移植到新的平台上, 以及其它的工作. 当新的代码被提交给apache group时, 该团体审核它的具体内容, 进行测试, 如果认为满意, 该代码就会被集成到apache的主要发行版中.apache 的特性:1) 几乎可以运行在所有的计算机平台上.2) 支持最新的http/1.1协议3) 简单而且强有力的基于文件的配置(httpd.conf).4) 支持通用网关接口(cgi)5) 支持虚拟主机.6) 支持http认证.7) 集成perl.8) 集成的代理服务器9) 可以通过web浏览器监视服务器的状态, 可以自定义日志.10) 支持服务器端包含命令(ssi).11) 支持安全socket层(ssl).12) 具有用户会话过程的跟踪能力.13) 支持fastcgi(只在apache1.3时支持,apache2以后的版本不再支持了)14) 支持java servlets15) 不支持epoll(这年头,epoll几乎是性能的必备,这也是为什么apache的并发性能比其他两款web软件差的主要原因吧)16) 非常好用的proxy和proxy_ajp(很多人用它作为tomcat的前端)3.nginxNginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯人Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发.Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。
VB是一种非常流行的编程语言,它被广泛应用于各种领域,包括Web开发、桌面应用程序、游戏开发等等。
对于那些想要学习VB的人来说,掌握一些有效的学习方法是非常重要的。
本文将介绍一些VB的学习方法,帮助读者更加高效地学习VB。
一、学习VB的基础知识在学习VB之前,我们需要了解一些基础知识。
我们需要了解VB的开发环境。
VB 的开发环境包括VB IDE、VB运行时库和VB编译器。
VB IDE提供了一个集成的开发环境,包括代码编辑器、调试器和图形用户界面设计器等工具。
VB运行时库包括一组预定义的对象和函数,可以帮助我们编写更加高效的代码。
VB编译器将我们编写的代码转换成可执行的程序。
我们需要了解VB的语法和语义。
VB是一种基于对象的编程语言,它支持面向对象编程的概念,如类、对象、继承、多态等。
VB的语法和语义与其他编程语言有些不同,需要我们花费一些时间去学习。
我们需要了解VB的编程范例。
VB的编程范例包括控制流、函数、数组、文件操作等等,这些范例是我们编写VB程序的基础。
二、学习VB的实践方法学习VB的最好方法是通过实践。
以下是一些学习VB的实践方法:1.编写简单的程序在学习VB的过程中,我们应该从编写简单的程序开始。
例如,我们可以编写一个简单的计算器程序或者一个简单的文本编辑器程序。
这些简单的程序可以帮助我们了解VB 的基本语法和语义,同时也可以帮助我们熟悉VB的开发环境。
2.阅读VB的源代码阅读VB的源代码是学习VB的另一种方法。
VB的源代码包括VB IDE、VB运行时库和VB编译器等组件的源代码。
通过阅读VB的源代码,我们可以了解VB的内部实现,从而更好地理解VB的语法和语义。
3.参加VB编程社区参加VB编程社区是学习VB的另一种方法。
VB编程社区是一个由VB程序员组成的社区,他们分享他们的经验和技巧,帮助其他人解决问题。
通过参加VB编程社区,我们可以学习其他人的经验和技巧,同时也可以与其他VB程序员交流。
NiFi文档1.初识NiFi1.1.概述NiFi 最早是美国国家安全局内部使用的工具,用来投递海量的传感器数据.后来由apache 基金会开源。
NiFi基本设计理念:Flow Based Programming ,1.2.核心概念•FlowFileFlowFile表示在系统中移动的每个对象,FlowFile由两部分组成:o content 内容,即数据本身o attributes 属性,每条数据带上的属性信息.以键值对的形式.•FlowFile Processoro FlowFile处理器,由它完成对数据的实际处理工作.包括但不限于对数据内容和属性的加载,路由,转换,输出等.o处理器最灵活之处在于处理器可以读写FlowFile的属性信息,并且用自带的领域特定语言(DS L)对属性进行编程.•Connectiono由Connections把各个处理器链接起来,从而形成数据处理流程的有向无环图(DAG图).也称数据流, NiFi 中的Flow.o Connection 同时充当处理器间的队列,并且队列的属性高度可配置.o这些队列可以配置优先级,可以在设置阈值,可以实现反压。
•Flow Controllero流控制器对用户不可见的.它充当维护处理器如何连接和管理所有处理器所使用的线程及其分配的重要角色。
o Flow Controller充当促进处理器之间FlowFiles交换的代理。
•Process Groupo为了方便管理,把一组特定的处理器及其连接组成的Flow 放到一个处理组中去,可以通过输入端口接收数据并通过输出端口发送数据。
o以这种方式,处理组可以通过组合其他组来创建全新组,形成更加复杂的DAG图( Flow 流)。
1.3.关键特性•Flow 流高度可管理•保证交付NiFi的一个核心理念是即使在非常高的规模下,保证交付也是必须的。
这是通过有效使用专门的持久化的预写日志(WAL)和内容存储库来实现的。
一、判断题1、软件重用是指重复使用已有的软件产品用于开发新的软件系统,以达到提高软件系统的开发质量与效率,降低开发成本的目的。
答案:√2、可重用技术对构件库组织方法要求不仅要支持精确匹配,还要支持相似构件的查找。
答案:√3、软件体系结构充当一个理解系统构件和它们之间关系的框架,特别是那些始终跨越时间和实现的属性。
答案:√5、构件可以由其他复合构建和原子构件通过连接而成. ()答案:√6、体系的核心模型由5种元素组成:构建、连接体、配置、端口和角色()答案:√7、软件体系结构的核心由5种元素组成:构件、连接件、配置端口和角色。
其中,构件、连接件和配置是最基本的元素()答案:√8、开发视图主要支持系统的功能需求,即系统提供给最终用户的服务()答案:X9、构件、连接件以及配置是体系结构的核心模型最基本的元素()答案:√10、HMB风格不支持系统系统自顶向下的层次化分解,因为它的构件比较简单。
答案:×11、正交软件体系结构由组织层和线索的构件构成.答案:√13、线索是子系统的特例,它由完成不同层次功能的构建组成,每一条线索完成整个系统中相对独立的一部分功能。
()答案:√14、层次系统中支持抽象程度递增的系统设计是设计师可以把一个复杂系统按照递增的步骤进行分解,同时支持功能增强,但是不支持重用.答案:×16、在软件设计中占据着主导地位的软件体系结构描述方法是图形表达工具.答案:√18、体系结构设计是整个软件生命周期中关键的一环,一般在需求分析之后,软件设计之前进行.答案:√19、基于软构件的系统描述语言是较好的一种以构件为单位的软件系统描述语言.答案:√21、基于构件的动态系统结构模型分为三层,风别是应用层、中间层、和体系结构层。
答案:√23、基于构件的动态系统结构模型分为应用层,中间层和体系结构层。
答案:√29、一般的说,一个模式有一下4个基本成分,1.模式名称,2.问题,3.解决方案,4.效果,这句话是对的()答案:√30、设计模式的概念最早是由美国的一位计算机专家提出的.答案:X31、利用设计模式可以方便地重用成功的设计和结构。
一种基于Web资源的代码范例搜索工具摘要:本文从开发人员角度探讨了代码范例搜索工具的可用性以及常规Web资源的价值,并据此提出CSCS工具,再用两个典型用例说明了CSCS工具的功能。
然后从自动化程度和准确度两个方面进行评估。
最后总结了CSCS工具需满足的特征和值得进一步研究的方向。
关键词:代码范例搜索工具Web资源IDE1 引言在现代软件开发过程中,开发人员需要经常参考Web上的代码范例来帮助学习新技术或者辅助完成开发任务。
通常情况下,开发人员需要从IDE切换至浏览器,在某个网站上进行搜索,搜索会出现许多结果链接,开发人员不得不逐个打开链接,查看结果是否满足需求,满足的话将内容复制粘贴回IDE,如果发现还要进一步搜索,再从IDE切换出去,如此反复,十分不便。
对于这样一种软件开发过程中的标准活动,软件工具理应可以帮助提高自动化程度以及提升搜索目标的速度和准确度,而在目前的IDE环境中却缺乏这样的标准工具的支持。
因此,本文提出一种与IDE环境整合的、基于常规Web 资源的、用户可自定义搜索源的代码范例搜索工具,即CSCS(Custom Search for Code Sample,代码范例的自定义搜索)。
2 现状2.1 工具的可用性工具的可用性应当是指使得Web搜索代码范例这一过程自动化、提高其效率,而不是改变开发人员对搜索Web代码范例的本质需求。
而已有的一些研究成果中的工具则是自创形式,例如:Parseweb[1]要求用户以方法的参数类型和返回类型为输入,工具给出匹配的结果,然而,在用户对API不熟悉时,无法输入准确的参数类型和返回类型。
Code Conjurer[2]具有多种搜索Web方式,其中的测试驱动的搜索,要求用户先写一个Test Case,然后工具帮助查找匹配的代码结果,然而直到今日,测试驱动开发仍未成为主流的开发模式,因此无法帮助到不使用测试驱动开发的开发人员。
除此之外,这些研究为了实现工具的功能,几乎无一例外地需要预先使用爬虫技术下载庞大的代码库,并进行预处理,不得不带上很重的硬盘负载,由于要进行预处理,这些工具只支持有限语言。
这些因素的叠加导致用户基本上无法自主选择搜索来源,只能在有限的资源中搜寻结果。
开发人员使用Web搜索代码范例实际上是一种成熟的软件活动,工具的可用性应该以满足对结果的预期为第一要务。
实际上,重构这一软件活动就是这样的,重构的工具只是加快了重构的速度以及保证了正确性,而不是对软件活动的重新发明和创造。
要使IDE中的Web 搜索成为重构那样的实践,用户可自定义搜索源的、与IDE结合的、轻量级的工具才可能做到。
2.2 常规Web资源的价值当下,互联网上开放源代码资源日渐丰富,出现了如Google Code Search, Koders, Krugle等网络代码搜索引擎。
为了使开发人员更好地利用开放代码仓库,研究人员开发了基于静态代码分析、信息检索或程序理解等技术的工具,分别从不同方面解决了直接搜索代码仓库或代码搜索引擎时返回无效结果太多的问题。
然而,基于代码仓库或代码搜索引擎的搜索有个不可回避缺陷,即代码本身除了包含类名、方法名以及必要的注释外,缺乏详细的上下文信息可供搜索。
而常规的Web资源(如论坛、博客、教程等)的代码往往包含着更好的注释及更详细的说明,代码本身也更通用[3]。
事实上,大多数开发人员仍旧选择常规Web搜索作为他们单一的搜索来源,这表明Web搜索提供的代码范例是大多数开发人员所认可的。
3 概览CSCS旨在遵循开发人员搜索习惯的前提下,为开发人员提供一种在搜索常规Web资源中代码范例时简化其中重复过程的工具。
下面通过两个典型用例,说明CSCS工具的作用。
3.1 用例1开发人员A在学习SWT的开发,他想知道如何设置Widget大小,于是他登录常用的网站(有很多Java示例的网站),找到了一个有关Widget示例的页面,其中有10多个示例页面,依次打开去找十分费时,于是他想到使用CSCS帮助搜索。
(图1)在Eclipse环境中,使用Ctrl+H打开CSCS搜索界面,在Start Page 中填入搜索开始的第一个页面的URL,然后在Target Pages中填入目标页面(即实际的示例页面的URL的正则表达式),最后在Containing Text中输入想要查找的关键字,点击Search进行搜索。
(图2)点击搜索后,满足Target Pages的页面结果不断地加入Search页面中,双击任何一个结果项,即可打开对应的代码片段Editor和页面Browser,方便直接编辑和查看。
Code Matches和Total Matches两栏分别显示代码段中的匹配以及在所有文本信息中的匹配,点击Code Matches或Total Matches列头,即可在搜索进行时,动态地按匹配结果程度进行排序,帮助开发人员更快地找到匹配的结果。
3.2 用例2开发人员查找代码范例往往不是漫无目的地寻找,而是在自己信任的网站上寻找,例如。
该类网站的URL都具有良好的URL格式,适合使用CSCS辅助搜索。
使用CSCS搜索中标签为Java和Xml的内容。
(图3)只要网站URL的结构是稳定的,这样的搜索需求就可以复用。
例如,下一次开发人员想搜索标签为Java和Hadoop的内容,将Start Page和Link Pages中Xml改为Hadoop即可。
这种情况下,开发人员若有相似的搜索需求就无需从IDE中切换出去,只要改变搜索关键字即可。
另外,CSCS记录了最近的搜索,在Start Page下拉框选择不同的选项后,Link Pages和Target Pages即可自动填充。
4 评估从自动化程度和准确度两个方面评估CSCS。
4.1 自动化程度4.1.1 描述搜索需求的方式使用浏览器搜索常规Web资源上的代码范例,初步定位到结果可能存在的页面后,只能机械地将目标页面逐个打开,目测或使用浏览器的文本查找功能对结果进行筛选。
再点下一页,再将一目标页面逐次打开,再人工筛选结果,如此往复。
CSCS将以上需求用Start Page,Link Pages,Target Pages以及Containing Text进行描述,从而实现了将Web搜索代码范例的过程自动化。
4.1.2 复制有效示例的方式使用浏览器查看、复制有用的代码段,开发人员不得不在IDE 和浏览器中来回切换。
CSCS直接在IDE中的搜索结果页面打开结果项:在Editor中显示代码段,可以直接编辑;在浏览器控件中显示网页,方便用户查看。
打开新的结果时,旧的结果会自动关闭。
4.1.3 复用搜索的方式使用浏览器复用搜索时,通常的做法是存为书签,下次使用的时候仍然需从IDE工作环境切换到浏览器。
CSCS通过搜索界面,可以直接复用之前的搜索,而不需要切换至浏览器。
4.2 准确度4.2.1 匹配速度在得到目标页面的时候,CSCS即计算出Code Match和Total Match的数值,得到匹配程度的预判,而无需开发人员人工去判断。
4.2.2 表达准确度CSCS可以使用正则表达式描述想要搜索的代码段或文本,从而提高了定位能力。
5 特征CSCS提出的不仅仅是一种工具的原型。
更重要的是,提出了一种开发人员利用Web资源查找代码范例的新方式。
这种方式可以有多种实现,下面总结了CSCS类型的工具必须具备的特征。
5.1 精简的需求描述要提高描述搜索需求的能力,首先必须使搜索需求描述尽量精简。
在工具原型中,搜索需求用Start Page,Link Pages,Target Pages 以及Containing Text进行描述。
其中后3个字段都可以使用正则表达式来描述。
这显示了开发人员和普通用户的最大不同,即一个合格的开发人员自然熟悉HTML以及正则表达式,所以能够以更为形式化的输入来描述自己的需求。
原型中,对HTML中代码节点的匹配默认选择了<code>…</code>标签中的信息,而实际情况下,代码可能存在于其他类型的标签下,如何更为有效地描述代码存在的节点,值得进一步探索。
5.2 有限的爬取在CSCS中,爬虫是重要的组成部分之一。
与常规的网页爬虫相比,CSCS的爬虫应该对深度有所控制,因为爬虫的作用只是模仿了人点击浏览器链接的行为。
(图4)5.3 与IDE的深度结合与IDE结合可以使得Web搜索有更好的本地体验。
在工具原型中复用了Eclipse的Search框架,使得开发人员可以在想搜索时自然地按下Ctrl+H找到CSCS对话框,搜索结果也很自然地显示在Search 结果视图中。
其次,CSCS管理了浏览结果,打开新的结果项时,自动关闭了原先的结果项。
另外,CSCS通过对用户历史搜索需求的记录实现了搜索的复用。
与IDE结合的方式值得CSCS式的工具进一步探索。
参考文献[1] Suresh Thummalapenta, Tao Xie. Parseweb: aprogrammer assistant for reusing open source code on theweb. Proc. ASE’07,2007: 204-213.[2] O. Hummel, W. Janjic, C. Atkinson. Code conjurer: Pulling reusable software out of thin air. IEEE Software,2008,25(5):45-52.[3] J.Brandt,M. Dontcheva, M.Weskamp, S. R. Klemmer.Example-Centric Programming: Integrating Web Search into the Development Environment. Proc. CHI ’10,2010:513-522.。