热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

选择一个开源项目

3.选择一个开源项目3.1.到哪里寻找开源项目开源基金会大部分开源项目都来自于开源社区,而大部分开源社区背后都有基金会在运作,比较知名的有Apache基
3. 选择一个开源项目

3.1. 到哪里寻找开源项目

开源基金会

大部分开源项目都来自于开源社区,而大部分开源社区背后都有基金会在运作,比较知名的有Apache基金会(专注于Java技术的开源软 件),Linux基金会(专注于Linux系统的开源软件),Eclipse基金会(专注于基于Eclipse IDE的开源软件),Jboss基金会(专注于JAVA EE方面的开源项目)等。每个基金会都会有目前该基金会正在进行的项目列表,我们可以从其中寻找自己感兴趣的项目。
Apache:http://projects.apache.org/indexes/quick.html
Linux:http://www.linuxfoundation.org/programs
Eclipse:http://www.eclipse.org/projects/listofprojects.php
Jboss:http://www.jboss.org/projects

开源项目托管网站

另外,每个开源项目都需要有自己的管理平台,各大基金会的开源项目也不例外,因此,各个开源项目的托管网站是也是一个寻找开源软件的好去处。
目前在业界比较知名的项目托管网站主要有SourceForge,Google Code,GitHub,当然还有我们当前项目正在使用的TeamHost等等。
微博上的@OpenERP_Jeff 补充说: launchpad 是一个很重要的开源hosting网站,著名的开源项目有ubuntu、mysql和zope。项目计划、蓝图、代码库、bug管理、翻译都很完整。

服务提供商SVNGitMercurial介绍
Google Code 支持支持支持Google Code属于“富二代”,其在速度上,使用体验上都优于其他几个托管网站,尤其是其丰富的帮助文档,其中有很多还有对应的中文版。因此,对于初学者来说, 比较容易上手,也可以获得一个很好的学习机会。当然,因为都是google.com的域名,所以时不时的会访问不了管理界面,原因大家懂的。另外,因为使 用简单方便,相应的其在功能上就相对较弱一点。但是应付一般的项目还是绰绰有余。
Sourceforge 支持支持支持SourceForge可以算是开源界的托管始祖,很多古老的,知名的开源项目都托管在它上面,其对开源界的贡献估计可以和Apache对 Java界的贡献相提并论了。因此,其在功能上经过了长时间的考验,大家想要的功能都能找到。不过,因为强大,其上手难度也相对较高,而且全英文界面,对 于英文较弱的同学来说也是一件很痛苦的事。
Github 不支持支持不支持GitHub属于托管界的新贵,伴随着Git的蓬勃发展而发展。越来越多的开源软件使用Github托管。最近因Rails漏洞被Hacker黑了也让其处于媒体的风口浪尖。这个事件从一个侧面反映了其在业界的影响力。
CodePlexYesYesYes微软的开源项目基地
BitBucketNoYesYesPython的项目在上面比较多

维基百科有一个词条,列出了非常非常多的开源托管服务的比较:
Comparison of open source software hosting facilities
自由软件主机服务比较

技术社区

像ITeye,infoQ,OSChina,CSDN等国内知名的技术社区都非常关心开源软件的发展,在社区新闻,月刊等载体上都有最新的,流行的开源软件介绍。同时在社区,还有一个很大的好处,你会找到很多志同道合的朋友,这可是学习过程中的一大乐事。

各大科技公司的研究院

Google的BigTable论文,Amazon的Dynamo论文开启了目前火热的云计算时代,各大科技公司对技术领域的引领能力毋庸置疑, 同时,很多公司也是开源运动的忠实支持者,像国外的Google,Facebook,Yahoo,国内的淘宝,百度,盛大,豆瓣等,连曾经的坚决反对者 Microsoft也开始通过赞助Apache基金会扭转自己在开源界的形象。关注各大科技公司的研究院最新的开源软件可以了解目前整个业界的技术趋势, 而且他们开源的软件的未来发展前景都比较看好,因此,是一个寻找开源软件的有效途径。

谷歌编程之夏(Google Summer of Code)

我个人觉得GSoC是一个寻找开源项目的好地方。原因有以下几点:
1.GSoC有一个历年来的参与者列表0,这个列表中的有各种各样的开源组织可以让想参与的人挑选(今年的列表上有180个组织)。
2.参与者列表上的组织是经过一定的审核才选出来的,选拨出来的组织一般质量比较好,社区活跃度也很高。
3.列表上的组织为了吸引参加人员,一般在项目的主页上会有专门的wiki为参加人员导航(比如这个DragonFlyBSD项目1),很适合新手快速了解这个项目。
我想即使无法参加GSoC本身,通过GSoC的预热也是一个很不错的机会,可以让想要参与开源项目的人有一个很好的入口。

链接:
[0]http://www.google-melange.com/gsoc/accepted_orgs/google/gsoc2012
[1]http://www.dragonflybsd.org/docs/developer/gsoc2012student/

注:本小节来自于Ashi的邮件,在此表示感谢!

搜索引擎

如果您对某类技术特别感兴趣,或者遇到某个技术难题想找业界成熟的解决方案,搜索引擎(Google,Baidu,Bing)都是一个不错的工具,其在我们寻找开源软件的过程中也起同样的作用。通过一些关键词的罗列就能帮助我们找到感兴趣的开源项目。

博客和微博

关注各个领域大牛们的博客和微博,他们会紧跟技术节奏给我们推荐他们领域最新的开源软件,甚至会为我们讲解这些开源软件的底层实现原理,带领我们入门,这是多么高尚的行为啊。
关注各大科技公司的博客和微博,他们也会经常透露自己的开源计划,以及分析业界的一些开源软件在自己公司内部的应用,这对我们深入了解一个开源软件的技术价值有很大的帮助。

技术问答网站

这是最直接的一个方式,在知乎,StackOverflow,Quora等问答网站直接请人推荐几款开源软件,工程师的热情会让你受宠若惊的,很有可能向你推荐某个开源软件的就是这个开源软件的创始人。

维基百科

在维基百科上,有很多辛勤的人们,在整理着各种相关的资料,例如:
http://en.wikipedia.org/wiki/Open-source_software
http://en.wikipedia.org/wiki/List_of_open_source_software_packages
http://en.wikipedia.org/wiki/Comparison_of_open_source_software_hosting_facilities
等等,在其中搜索相关的词条,还能发现很多的宝藏。

3.2. 什么样的开源项目适合初学者

缘起

说实话,在当初列这个提纲的时候,我并没有想好如何写这一节。但是,开放地做事情,就常常会有奇妙的事情发生,佛家称之为“助缘”,各种对这件事情有帮助的缘分,都会在不经意间出现。
一位叫李军的朋友,给我发来邮件,信中写道:“我想是否我们能够通过沟通,然后你在对我有些了解,给我指出点建议,并且是详细的建议,我看学apache开源框架应该不错的 ,不知道我是否适合,谢谢。期待你的回复。”
在与他的往来邮件中,我也真的将这一节渐渐的想清楚了。另外,在与李军的讨论中,我还发现,需要开辟一个专门的章节,讨论:“学习开源项目,能够提升软件开发中的哪些能力。”
在此,我想对李军表示感谢,更希望有越来越多的朋友,参与到这个文档的讨论中来,相信它会变得越来越完善。

明确自己的目的

选择一个开源软件,首先要明确的,是自己的动力何在。是出于兴趣?还是出于工作需要?比如,有人对于搜索引擎特别感兴趣,想了解搜索引擎是怎么做 出来的?那么首先可以考虑先寻找一些专业的书籍,来了解一些关键的知识点。如果对于某一领域的知识点,缺乏必要的了解,可能完全无法理解一个项目里的代 码。在掌握初步的知识以后,自然可以去找Lucene、Sphinx来学习。
也可能是出于工作需要,比如平时是用PHP开发Web应用,已经在用某一个常见的PHP框架了,希望能够对这个框架有一个深入的学习了解,甚至希望横向的比较多个不同的PHP Web框架,这些都是非常清晰的目的。自然在学习的过程中,不太会迷失方向。
比 较危险的一种,是听说某某项目很有名气,甚至是为了将来找工作比较容易,就贸然一头扎进某个项目中去了。这种学习目的,往往会选择到那种很庞大,也很成熟 的项目,打开文件夹一看,成百上千的源文件,根本无法看完,一下子就蒙了,再就是颓了。心想自己大概不是学软件开发的料吧~~

优先选择能够独立运行的项目

开源的项目有很多种类,能够独立运行的项目,当然很多。但是也有不少项目,是其他开源项目的插件,类库,扩展包之类的东西,这些在一开始接触开源 的时候,最好不要涉猎,因为理解他们,可能会需要理解他们背后的那个庞然大物,往往会遭遇很多难解的细节,一不小心,就进行不下去了。
当然,还有一类项目,他们虽然是独立运行,但是想要让他们独立运行成功,还得安装、配置很多其他的依赖项目,这个往往会让初学者特别绝望,搞了一个礼拜,居然这个项目都还没有运行起来。。。
所以,小的,能够独立运行的,不依赖于太多其他项目的开源项目,可以优先选择。

选择活跃的项目

项目的活跃程度,包括两个部分,一个是开发者提交新代码的频繁程度。另一个是在社区中对于这个项目的讨论热烈程度。提交代码越是活跃,提交的人越 多,越能证明这个项目是很有价值的,也证明这个项目是值得你花精力去学习的。而项目在社区讨论的热烈程度,则能够确保当你遇到问题的时候,能够搜索到别人 的答案,或者你自己提问以后,能够有人热心回答你。
当然,活跃程度都是相对的,如果你真的对一个项目感兴趣,可以直接试着给这个项目的作者发邮件,提问题。大多数开发者都会很高兴有人关注他的项目,也会通常会热心的回答你的问题的。

判断代码质量

并非所有的开源项目,都是高手写的,都值得你去学习。事实上,有很多垃圾开源项目,代码仔细一看,写得真是一塌糊涂。所以,试着阅读一下这个项目的代码。至于如何判断一个项目的代码质量,之前我在知乎回答过一个类似的问题《如何让自己写的代码易维护? 》。推荐各位朋友参考一下。

当然,更加推荐的,是阅读《Clean Code》一书,非常好的一本介绍如何提交代码质量的书。附一篇书评,可以一读:《写代码犹如写文章 》

选择合适的版本

最后,面对已经发展了多年的开源项目,最好不要选择最新的版本。如果你是在工作中要想使用这个项目,当然应该选择最新的稳定版,甚至测试版、 beta版。但是如果是出于学习的目的,为了减少复杂度,快速的理解这个项目的核心结构与开发思想,选择第一个稳定版,是一个比较妥当的办法。
然后,在初步理解了第一个版本的代码之后,再不断的通过阅读changelogs,追踪最新的版本中的代码变更,体会作者修改代码的目的、手法与技巧。这样应该会有很大的收获。

3.3. 值得推荐给大家的开源项目

项目名称语言(平台)所属领域推荐理由
Petshop4.0 NET企业开发1.微软官方用来展示.Net企业开发实力的项目,架构优雅;2.涉及中小型企业开发常用技术;3.网络资源较多
HaozesfxNETWinform,SIP协议1.基于飞信实现的开源项目,实用性强,方便二次开发;2.结构清晰,设计成熟;3.实现了SIP协议
ThinkPHP PHPWeb框架1.应用较为广泛的Web开发框架,成熟稳定;2.集成多项先进的设计思想;3.活跃的社区 支持和完善的中文文档(帮助手册,Demo,代码注释)
其他:memcached c语言 Free & open source, high-performance, distributed memory object caching system。by Jun Guo
转:http://sbbs.me/view_article/5061af1108158e116a00000b

转:https://www.cnblogs.com/stephen-init/archive/2012/11/10/2763713.html



推荐阅读
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 本文介绍了安全性要求高的真正密码随机数生成器的概念和原理。首先解释了统计学意义上的伪随机数和真随机数的区别,以及伪随机数在密码学安全中的应用。然后讨论了真随机数的定义和产生方法,并指出了实际情况下真随机数的不可预测性和复杂性。最后介绍了随机数生成器的概念和方法。 ... [详细]
author-avatar
佩政哲维99
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有