阅读更多
禅道是一款优秀的国产开源项目管理软件,它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程。

禅道项目在 2013年度中国优秀开源项目评选 ”中获得较高票数,并被专家评审团评为“2013年度中国优秀开源项目”。

本期我们采访了禅道项目创始人王春生,请他来详细介绍禅道项目的由来、发展等方面的情况。

先做个自我介绍吧! Top

大家好,我叫王春生,2001年毕业于北京师范大学。我的主修专业是汉语言文学,听了一学期课之后感觉特别无聊,正好学校开设计算机课程,就迷上了计算机,然后就自学,玩各种软件。那时候非常有幸认识了几位非常有黑客精神的老师,在他们的指引下接触了Linux、开源,并开始玩各种各样的开源软件。我毕业后在很多家公司工作过,所从事的基本上都是互联网行业。做过老本行的编辑,兼职做过销售,后来转向开发,并开始带项目。我于2006年加入阿里巴巴,并先后在雅虎中国、阿里妈妈和淘宝工作过,主要负责后端引擎自动化测试工作。

我个人的成长受开源思想和软件影响颇深,所以也先后做了几款开源软件。2004年到2007年,我作为主要开发者开发维护了 BugFree;2006年作为项目leader主持开发了ECShop1.0版本;2009年初启动禅道项目;2010年正式开始创业,全职从事禅道开源软件的开发。

禅道是一个什么样的项目?提供了哪些功能? Top

禅道(www.zentao.net)是一款项目管理软件,它可以有效地把研发项目过程中涉及的方方面面元素、流程有效地跟踪管理起来。软件研发项目有自己的特殊性,有产品、研发和测试三种角色的互动,涉及的基本元素有需求、任务和缺陷。禅道软件可以把这三种角色、三种基本元素之间的过程跟踪和流转有效地跟踪管理起来。



禅道从功能上来讲,可以分为三个大部分:产品、项目和测试。其中产品层面是给产品经理使用的,涉及需求的管理、计划的制定,版本的发布和路线图等功能。项目层面是给研发团队使用的,涉及项目的计划、任务、版本等功能。测试是给测试团队使用的,主要涉及测试用例、测试计划和和缺陷跟踪管理。

和其他的软件相比,禅道是一个过程的协同跟踪管理软件,或者简单说,其他很多软件是给领导做计划用的,禅道是给干活的研发团队用的。

当初为什么会想到做一个开源的项目管理软件?为什么取名为“禅道”? Top

我在阿里巴巴工作的三年里面,因为职位的特殊性,需要同时参与多个项目。三年下来,感觉做得很累,压力很大,很多项目最终也不了了之。然后我就思考,找原因。原因有很多,有高层的战略问题,有研发团队的问题,等等。然后我就想自己可以提供什么样的解决方案,想来想去,我觉得自己可以在工具的支撑方面提供帮助。

当时,我们的项目管理最开始时是用Sharepoint + Excel(一个共享文件,大家来编辑),后来用Sharepoint + BugFree + XPlanner。产品经理需求整理到Sharepoint中,然后项目计划用XPlanner,测试跟踪用BugFree。不胜其烦,信息需要在各个系统中手工同步更新关联,非常糟糕。当时我曾经提出到过程改进部门工作,来做内部的支撑工具。但由于种种原因,未能如愿。后来就带着这个想法,开始了禅道这个开源的项目管理软件的开发。

禅道这个名字是我在读《编程之道》和《编程之禅》这两本书时受到的启发,然后就老实不客气地把中国文化中最难解释的两个字当成了我们软件的名字。从深层次讲,也是有我们的一些诉求,其实项目管理也很简单,只要我们抓住本质的东西就可以了。我们往往太多关注表面的东西了,忽略了真正的管理之道、管理之禅!

禅道项目有哪些创新点? Top

禅道的主要创新点在于集成的项目管理,在一个软件里面把研发项目的完整过程做到有效跟踪和覆盖。开源的项目管理软件有很多,比如Dotproject、Redmine、Trac,还有其他很多的缺陷跟踪软件,比如Mantis、Testlink、BugFree等等。这些软件功能都太单一,更多的是基于事务管理的:一个issue打上feature、task或者bug的标签,缺少严谨的管理思想和过程的跟踪。



禅道的扩展机制也是一个很重要的特点,我们自己写了一套框架,然后在这套框架基础上实现了完整彻底的扩展机制。大家知道有很多的开源软件都有扩展机制,但这些往往都是基于事件或者钩子机制,只能在原来的基础上做局部的改动。禅道软件的扩展机制借助于PHP语言动态解释执行的特点,通过面向对象的继承和覆盖,实现了完整彻底的扩展机制。这样来说会更容易理解,通过扩展机制,可以把禅道改成与它本身完全不一样的东西。

讲讲禅道从立项到发布首个版本之间的故事吧。有什么让你印象深刻的事情? Top

禅道项目正式启动是2009年初,春节过后。当时花了很久的时间在做整体功能、技术架构和商务模式方面的设计,当时整理了一个脑图文件(现在基本上还在按照这个脑图文件在走)。印象比较深刻的是我的一个朋友说要做禅道软件的第一个用户,然后我们就用最短的时间发布了0.01 alpha版本。但是那个朋友也从来没有用过,哈哈。得到的启示就是,国人太忙,朋友的承诺不要太当真,靠人不如靠己。

介绍一下禅道项目的架构。它的设计理念是什么? Top

禅道项目是公司内部的管理软件,对性能、并发要求并不是很高。所以我们在做技术架构的时候,更多考虑的是代码的可维护性以及用户扩展的方便性。因此我们在发布禅道软件之前,先花了半年的时间做了我们自己的zentaophp框架。这个框架也是典型的MVC结构,它主要的特点就是简单、合理。大家有兴趣可以关注下:devel.zentao.net

就像前面所讲,我们开发这个框架,一方面是为了控制自己项目的进度(不可能依赖于第三方的框架,受制于人),另外一方面就是扩展机制。禅道的扩展机制都是靠这个框架来实现的,禅道软件的商务模式也是基于这套扩展机制的。

禅道使用了哪些技术来实现?选择这些技术的理由是什么? Top

禅道软件使用的开发语言是PHP,数据库是MySQL,WebServer没有特定要求,Apache、nginx、IIS都可以使用。

选择PHP,是因为一直在用PHP,它简单、开发效率高、跨平台、解释执行、功能丰富、表现力强。选择Apache和MySQL,也主要是因为它们是跨平台的,安装维护都非常的简单(Apache和MySQL运行环境可以精简为只需要几个核心文件)

前端的我们采用了jQuery作为JS框架,还有很多第三方的前端扩展,比如自动提示、树状列表之类的。

开发项目管理系统的难点是什么?开发过程中,你们遇到了哪些困难?是如何解决的? Top

开发项目管理系统的难点在于跨界,你需要知道项目管理的各个流程,懂得项目管理的方法和理论,同时还需要你把它提炼成通用的需求,然后用技术合理的实现出来。

这中间涉及到太多的取舍和平衡。比如权限的控制,太松和太严都不好;比如各种涉及流程控制的字段,多了,使用麻烦,少了,跟踪和管理就弱了。所以更多的是在这些方面纠结,找到比较合适的解决方案。

开发过程中难点不多,技术层面的问题都是可以解决的,解决不了还可以绕。

禅道项目已经诞生4年了,讲讲这期间的发展情况吧。 Top

2009年是起步期,这段时间我是业余时间在做,主要完善框架,完成了核心的功能。

2010年正式创业,成立公司,专职来做这件事情。版本发布到1.x,核心功能已经基本完备,有了自己的小团队,用户群初步形成。

2011年是比较关键的一年,这一年里面我们得到了朋友的帮助,加速了发展,核心团队也初步形成,产品功能进一步完善。

2012年我们正式推出专业版本,开始尝试商业路线,并取得了预想中的结果,2012年下半年开始有盈利。

2013年产品已经发布到了5.0版本,团队也进一步壮大,收入一直比较稳定。

禅道开发团队目前有多少人?你们是如何分工和协作的? Top

我们团队现在有12个人。我主要负责产品方面的工作,还有3位同事负责研发,1位同事负责前端交互(最近刚刚加盟),1位做技术支持,1位做商务销售,1位做运营策划,1位做财务,还有1位帮我们做设计工作。

还有2位同事,在做我们的新产品——蝉知企业门户系统(www.chanzhi.org),这也是个开源软件,主要帮助企业快速搭建企业营销门户。

据你所知,禅道目前有多少用户? Top

我们得不到确切的用户数字,初步估计应该有几万家公司或者团队在使用禅道做项目跟踪。这其中有很小的创业团队,也有很大的集团公司,有软件公司,也有知名的互联网企业。有游戏公司,也有软硬结合的公司。还有很多军队和学校的单位也都在使用禅道做项目管理。

禅道目前有开源版本,也有专业版,在特性选择上,哪些特性会进入专业版,哪些会进入开源版,你们的标准是什么? Top

主要的标准是看功能的通用性,如果是每个企业都可能会用到的功能,我们会优先考虑放在开源版本中。专业版本更多的提供的一些增强的功能,比如更多的统计、更多的任务查看方式等等。

我们之前专业版本有批量添加、编辑的功能,后来我们觉得这个大家都需要,我们就把批量操作功能模块放到了开源版本中。我们不会为了推销我们的收费版本而故意在开源版本中做很多的功能限制,那样是不道德的。

其实开源版本的功能已经足够丰富和完善了,以至于我们销售最大的对手就是我们自己,哈哈。很多用户试用了开源版和专业版,说开源版足够了。

禅道目前的盈利模式是什么?在开源项目商业化上,你们有哪些经验可以分享? Top

其实所有的盈利模式核心都是用户数。没有用户,再好的模式也没有用。简单来说就是通过为用户提供开源的、免费的、专业的项目管理软件,并为他们提供及时有效的支持,获得大量的用户,然后再通过增值的功能或者服务来收费。这就是禅道的模式。禅道的收入有专业版本的授权、培训、在线托管、定制开发、插件销售等多种渠道。

开源项目商业化不容易,有一些体会和开源的同行分享:

  • 产品的选型很重要。国内开源的朋友大部分做的都是框架之类的东西,但其实你想想,框架的使用者是开发者,而赚开发者的钱太难了。企业也不会为了一个框架的技术支持或者培训买单,很难。应用类的开源软件就比较好,因为用户可以实实在在地感受到你的软件给他带来的价值。
  • 最好是专职来做。兼职来做,更多的是兴趣,想来做商业化,确实还是需要成立公司,专职来做。别的不说,人家买你东西,要开发票,你兼职来做,怎么办呢?成立公司,人家也会觉得你的产品有保障,可以持续下去。
  • 做开源软件很不容易,不是单单把软件开源出来就可以了。要整理文档,回答问题,要做宣传推广,要坚持更新版本。我们自己的体会,这些工作差不多占到了一半左右的时间。也就是我们一半时间开发软件,一半时间在做周边的这些支持工作。
  • 考虑问题的角度很重要。搞开源的,都是技术的高手,考虑问题更多从技术层面考虑。但真正做产品,需要我们转变考虑问题的角度,更多地站在用户的角度来考虑。比如我们最开始配置发信功能,是通过配置文件来设置的。后来发现大家对smtp端口、发信账户这些都搞不懂。就逼着我们简化配置,最后我们就简化为只需要用户输入一个邮箱地址,各种参数就可以自动计算出来。用户使用也方便,也减少了我们大量的支持工作。

禅道还推出了一个开放平台,这个开放平台的目的是什么? Top

开放平台和禅道的插件机制是有直接关系的。禅道的用户可以按照禅道的扩展机制对禅道的功能进行修改或者定制以满足个性化的需要。当某个用户做完了某个功能,发现这个功能其他人也可能需要,他可以把插件代码打包成一个zip文件,发布到我们的开放平台上面了,这样其他用户就可以在禅道软件的插件管理中心中浏览到这个插件,然后可以在线自动安装、禁用、卸载或者升级,非常方便。

做这个开放平台,也是受Wordpress和Drupal的启发。它们的社区有成千上万的插件功能,形成了一个生机勃勃的生态体系,也奠定了它们在这个领域的领先地位。我们做这个开放平台,除了方便大家分享交流插件之外,也是想吸引第三方的朋友来分享插件,可以是开源的,也可以是收费的。

简单介绍一下开放平台目前的情况。如何实现与开发者共赢? Top

开放平台目前有四十多个插件,来自第三方的插件大概能占到1/3。

和开发者利益分享这块我们是这样处理的——开发者可以把他开发的插件发布上来,然后标价出售,如果有用户购买的话,他可以获得70%的分成,平台占30%。

但开放平台也存在一些问题,主要是有时间且有能力开发禅道插件又可以和大家分享的开发者太少了。很多插件也没有及时随禅道最新版本升级。这是中国的开发者现状吧,没有办法,只能慢慢来。

禅道项目今后的发展规划是什么? Top

禅道计划有两条线,一个是前面和大家介绍的我们新的项目蝉知企业门户,这个主要是解决企业对外营销的问题。另外就是对禅道的交互做进一步的优化和加强。专业版本的功能进一步完善和丰富。我们的愿景:管公司,用禅道;做营销,用蝉知!
  • 大小: 140.7 KB
  • 大小: 33.2 KB
  • 大小: 15.3 KB
  • 大小: 7.2 KB


评论 共 16 条
16 楼 fanhuirui66 2017-07-21 09:44
wwccss4sb网友的评论,应该也不是恶意毁谤竞争对手,个人觉得禅道官方不应该针对他发表这么犀利的评论,有失风度,你们公司这么大这么强,不应该这么小家子气。
15 楼 wwccss 2015-03-03 07:56
wwccss4sb 写道
禅道号称自己是开源,实际上稍微有用点的功能就是加密收费的(还不便宜,比如做项目基本的版本控制功能,国外人家开源的redmine(他自己上面的问答里也提到了)都是直接集成的,他们那个插件居然恬不知耻的卖大几百!),哪有这样的开源?

而且由于其精力有限,这几年靠这个程序可能也忽悠了一些企业交钱,所以这个人非常狂妄没有耐心,我都买了你的产品了,我使用的过程中发现了BUG告诉你,你就算不想改也好歹应付一下吧,他们的回答竟然是:“任何产品都会有BUG! 天!这个“公司”真是牛气冲天啊,想必微软出了BUG都不敢这样应对用户吧!!!总之使用禅道和跟他们打交道的过程中,真的是让我大开眼界了。

我就很好奇,百度了一番才发现禅道这个公司就是个皮包公司,没有什么实力的,他们的服务和技术根本无法跟上企业的要求,大家可以看看,基本上就是这个叫王春生自己在开发在宣传在维护,不论是其官方网站上的帖子,还是这种宣传贴,还是这下面的回复,或者其官方群里的日常管理,基本上就他自己一个人自编自导自演!

而且最最奇葩的是,其官网上居然有一篇教训用户专用的什么什么提问的智慧,意思是用户还不能问傻问题,问得不合他胃口,他还要发脾气!太奇葩了,你要是个什么巨头,店大欺客也就算了,禅道在企业管理软件市场里才几斤几两,真是把自己太当回事了。

最后,喷了这么多,我不得不很佩服这个人,真的是个“人才”啊!大家勿怪,有兴趣的可自行百度搜索或者用他们的产品或者跟他们打交道验证我有半点冤枉他们没有。



1. 你可以比较我们开源版本有而redmine没有的功能。保证完爆你所说的redmine。
2. 不知道你所说的bug具体是什么?这样空泛的说,没有什么意义。管理软件有很多是流程和方法方面的区别,我们有自己的设计思路。不会因为你掏了钱,就一定按照你说的修改。你不喜欢,不接受,退钱给你就是。

3. 我们是皮包公司,我们是靠忽悠,那我给说下我们忽悠的成果吧:

   我们是皮包公司,国内已经有几万家公司,每天几十万工程师使用禅道。
   我们是皮包公司,国内一线互联网公司几乎都有部门在使用禅道
   我们是皮包公司,国内有多家银行公司采购我们的软件和服务。  
   我们是皮包公司,国内多家安全行业的巨头采购我们的软件。
   我们是皮包公司,国内多家制造行业的巨头采购我们的软件。  

  你这种自己yy的高潮的人,继续高潮吧。

4. 我们群里面有专职的客服和技术支持,呵呵,你只是眼瞎出了问题,看不到而已。
   文档性的东西都是我整理的,这有什么问题?

5. 提问的智慧其实就是写给你这种人看的。粗俗,没有礼貌,技术又烂,人品又极其龌龊。

中国总是不缺少这种垃圾。
14 楼 wwccss4sb 2015-01-24 22:34
禅道号称自己是开源,实际上稍微有用点的功能就是加密收费的(还不便宜,比如做项目基本的版本控制功能,国外人家开源的redmine(他自己上面的问答里也提到了)都是直接集成的,他们那个插件居然恬不知耻的卖大几百!),哪有这样的开源?

而且由于其精力有限,这几年靠这个程序可能也忽悠了一些企业交钱,所以这个人非常狂妄没有耐心,我都买了你的产品了,我使用的过程中发现了BUG告诉你,你就算不想改也好歹应付一下吧,他们的回答竟然是:“任何产品都会有BUG! 天!这个“公司”真是牛气冲天啊,想必微软出了BUG都不敢这样应对用户吧!!!总之使用禅道和跟他们打交道的过程中,真的是让我大开眼界了。

我就很好奇,百度了一番才发现禅道这个公司就是个皮包公司,没有什么实力的,他们的服务和技术根本无法跟上企业的要求,大家可以看看,基本上就是这个叫王春生自己在开发在宣传在维护,不论是其官方网站上的帖子,还是这种宣传贴,还是这下面的回复,或者其官方群里的日常管理,基本上就他自己一个人自编自导自演!

而且最最奇葩的是,其官网上居然有一篇教训用户专用的什么什么提问的智慧,意思是用户还不能问傻问题,问得不合他胃口,他还要发脾气!太奇葩了,你要是个什么巨头,店大欺客也就算了,禅道在企业管理软件市场里才几斤几两,真是把自己太当回事了。

最后,喷了这么多,我不得不很佩服这个人,真的是个“人才”啊!大家勿怪,有兴趣的可自行百度搜索或者用他们的产品或者跟他们打交道验证我有半点冤枉他们没有。
13 楼 lrg30067 2014-09-29 22:33
mark一下
12 楼 aslijiasheng 2014-02-07 10:48
如果有使用教程的话,那就更好一些了
11 楼 wwccss 2013-12-25 17:28
xuanye 写道
其他还好 ,就是数据量一大 太慢

你可以改下zentao/config/my.php,把里面的localhost改成127.0.0.1试试。
现在windows的新版本都默认不提供localhost的解析了。链接数据库的时候,mysql会有一个机器名的反向解析,会有一个延迟。
10 楼 xuanye 2013-12-25 10:35
其他还好 ,就是数据量一大 太慢
9 楼 技术改变世界 2013-12-05 14:08
使用过禅道,适合敏捷开发,非常感谢王老师以及他的开源团队的分享,个人感觉要整个团队每个角色都要使用才能发挥这个系统的作用,开始使用感觉是麻烦不如EXCEL方便,但是随着迭代的不断增加,越来越发现还是禅道给力!
8 楼 pythoncnok 2013-11-05 14:14
没有用过,以后用用!
7 楼 TimePower 2013-10-22 18:54
以前春生老师来过我们学校~也跟春生老师交流过~很好的一个人~~
6 楼 camaelye 2013-10-03 21:29
禅道还有很多需要改,用了一段时间,还是转到其它的了。
5 楼 ray_linn 2013-09-16 12:43
感觉楼主Share Point没用透。
4 楼 simonhoo 2013-09-15 21:21
非常不错的一款项目管理工具,我都用了三年了。
3 楼 xmarsx 2013-09-13 16:44
有跟eclipse的mylyn的集成的功能吗?
2 楼 babay 2013-09-13 16:13
学法律的女朋友一样一样的,只能开关机
1 楼 cywhoyi 2013-09-13 15:54
我女朋友中文系的,跟你是一脉相连,苦逼的是让她重装系统都不会

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 解决Mac下 docker 无法 ping 通宿主机的问题

    解决方案 抛弃docker for mac自带的linux虚拟机(尽管轻量,但其与OSX通信采用socket文件的方式),使用docker-machine 安装virtualbox。virtualbox创建后,会添加一个虚拟网卡,可以通过ifconfig命令查看。我们实现的方式,就是利用这个虚拟网卡。 使用docker-machine创建默认linux虚拟机,命令docker-machine create 切换docker环境,使用eval $(docker-machine env)命令 查看创建的虚拟机的ip地址:docker-machine ip default或者直接docker-mac

  • list对象转map stream /去重( 根据属性转Map或者分组)

    list对象转map stream /去重,根据属性转Map或者分组

  • 【快速实现List转Map,stream去重、过滤、筛选、拼接方法的使用】

    List转Map,去重,筛选,拼接等多种List操作实践技巧,帮助你快速上手

  • Kotlin协程详解——协程基础

    你通常会看到 runBlocking 在应用程序的最顶层被这样使用,而在真正的代码中却很少见到它的身影,因为线程是宝贵的资源,阻塞它们是低效的,而且通常是不被期望的。协程遵循结构化并发的原则,这意味着新的协程只能在特定的 CoroutineScope 内启动,该作用域限定了协程的生命周期。这些情况导致的问题是代码间的嵌套层级太深,导致逻辑嵌套复杂,后续的维护成本也要提高,这不是我们所要看到的。协程可以被视为轻量级的线程,但它们之间存在一些重要的区别,这使得它们在实际使用中与线程有很大的不同。

  • Java8新特性Stream流之List、Map互转、去重、过滤

    一、Streams(流)? java.util.Stream 表示能应用在一组元素上一次执行的操作序列。Stream 操作分为中间操作或者最终操作两种,最终操作返回一特定类型的计算结果,而中间操作返回Stream本身,这样你就可以将多个操作依次串起来。Stream 的创建需要指定一个数据源,比如 java.util.Collection 的子类,List 或者 Set, Map 不支持。Stream 的操作可以串行执行或者并行执行。 二、具体使用 1.Filter(过滤) 过滤通过一个predicate接口

  • mybatis配置失效,如mybatis.configuration.map-underscore-to-camel-case失效问题记录

    在项目里加了mybatis的配置, 如下: mybatis.configuration.map-underscore-to-camel-case=false mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl 发现没有生效。 排查了一下,发现原因,是因为使用了多数据源的原因。 多数据需要自己配置config到SqlSessionFactoryBean中 解决方法如下: 创建MybatisConfig配置类:

  • Oracle数据库的版本发展

    Oracle发展史

  • java中list与map的互转与去重

    Person person = personList.stream().filter(s -> s.getName().equals("张三")).findFirst().orElse(null);List<Person> person = personList.stream().filter(s -> s.getName().equals("张三")).collect(1、将List转换为Map,以name作为key,age作为value。8、将list中的age组成新的list。

  • Appium+Python+Genymotion ------环境配置

    前言 之前总是在找方向,也研究了很多的工具,终于找到了适合自己的一套,打算把学习的过程做一个记录,给自己加深印象,也希望能给其他人一些帮助。 一、工具准备 1、Appium // http://appium.io/ 2、Genymotion+Oracel VM Virtual // http://www.genymotion.net/ 3、Python //https:/...

  • kdump内核崩溃转储服务的使用

    内核崩溃转储服务的使用 在linux生涯中虽说内核崩溃出现的几率不大,但还是有的 简单的叙述一下kdump这个服务的工作原理和作用(摘自网络) dump 是一种的新的crash dump捕获机制,用来捕获kernel crash时候产生的crash dump。Kdump需要配置两个不同目的的kernel,其中一个我们在这里称作standard(production) kernel;另

  • http网络请求框架

    一.开发初衷:最近项目中需要用到版本升级这一块,需要用到一些基本的数据请求与文件下载功能。之前做项目都是用别人的网络框架,类似retrofit 、 okhttp、 fresco等框架,用的多了,发现这几个网络请求框架,无非都是 按解决以下几个问题为导向的: 1.怎么发请求? 2.Cookie的问题。 3.如何停止请求(好像上面提到的几个框架没有停止请求的概念,因为停止请...

  • windows宿主机ping不通Docker容器的解决办法

    在win7中,docker容器是运行在docker虚拟机中的,宿主机上没有通往docker容器的路由。需要在宿主机上添加前往docker容器的路由。

  • 复旦FM1702SL开发板所有资料(包括原理图,PCB,程序,说明书)

    复旦FM1702SL开发板所有资料(包括原理图,PCB,程序,说明书)

  • 调整java单行格式化时注释不换行

    调整java单行格式化时注释不换行: Window Preferences Java Code Style Formatter New(自已新建一个格式) Edit Comments Maximum line width for comments:xxx(拉到最底下,调整右边框内数字)

  • 《Android网络请求篇》MyHttpUtils一个非常好用的异步网络请求框架

    《Android网络请求篇》MyHttpUtils一个非常好用的异步网络请求框架一、能做什么 你只需要传url,JavaBean就可以在回调方法里面得到想要的结果,你会发现你的代码里面没有了子线程、没有了handle,链式的变成使得代码更加清晰。 1.1 功能 支持get、post请求; 支持http和https的协议; 支持设置连接、读取超时时间(可选); 支持json格式的请求结果(无论js

  • Android去掉自动焦点

    在EditText的父级控件中找一个,设置成 代码如下: android:focusable="true" android:focusableInTouchMode="true" 转载于:https://www.cnblogs.com/HelloGuang/p/3699379.html...

  • spring整合mybatis读取不了properties属性,占位符不生效

    配置项目过程中,习惯性的先把框架跑起来,后面在把修改的参数放到配置中。发现替换不成功,报错无效${username} 。 1.配置 &amp;lt;!-- 读入配置属性文件 --&amp;gt; &amp;lt;!-- 引入方式1:读数据库连接配置文件db.properties,如果需要配置多个则应使用locations属性,多个值用逗分隔 --&amp;gt; &amp;lt;bean class=&quot;org.spr...

  • js 常用数字计算表达式

    关住 公 纵 号 “  阿蒙课程分享    ”  获得学习资料及趣味分享 1.丢弃小数部分,保留整数部分js:parseInt(7/2)2.向上取整,有小数就整数部分加1js:Math.ceil(7/2)3,四舍五入.js:Math.round(7/2)4,向下取整js:Math.floor(7/2)...

  • epoll和input子系统实现input事件分发

    前言在嵌入式开发中,按键和触摸板等输入系统很常见,其驱动文件位于/dev/input下,以event开头,后接数字。epoll是2.6内核引入的I/O多路复用的新的高效的接口,我在以前的博客中,使用其实现了一个聊天室服务器程序。这里我们使用其来监控input子系统事件。 在嵌入式软件开发中,小的程序,我们可以直接使用I/O接口来获得外部的时间输入,而如果对于一个大型的嵌入式软件系统,其会被很多地方

  • Docker网桥模式ping不通宿主机

    问题描述:   Docker网络模式分为四种,一般我们不设置时默认为bridge单桥模式,容器使用独立的network Namespace,并连接到docker0虚拟网卡中。通过docker0网桥以及Iptables nat表配置与宿主机通信。   此时在堡垒机上进行测试,利用busybox进行测试: # 拉取镜像 docker pull busybox # 运行容器 docker run -itd --name busy_bridge busybox   指令docker network inspect

Global site tag (gtag.js) - Google Analytics