正则表达式或("|")匹配优先级控制

最近在使用阿里云的日志服务,其中比较灵活的地方是支持自定义正则匹配,可以使用正则匹配字段,也可以作为多行日志的条件。公司的日志格式没有一个统一的标准,大概有几十种日志格式,还好我的正则原本玩得666,否则我们这日志部署到阿里云日志服务上可能一般人得玩累死。

匹配多行日志开始头(单行亦如此)的正则格式如下:

匹配日志内容的正则格式如下:

Continue reading "正则表达式或("|")匹配优先级控制"

JetBrains 出品的 Go 集成开发环境 GogLand 发布正式版

一直用Gogland的公测版本,从本月初发布了正式版(名字改成Goland了),使用了一下,整体功能和公测版差别不大,希望一些异常崩溃的问题得到了解决。

下载地址:

Linux:https://download.jetbrains.com/go/goland-2017.3.tar.gz 
Windows:https://download.jetbrains.com/go/goland-2017.3.exe 
macOS:https://download.jetbrains.com/go/goland-2017.3.dmg

Linsence Server:http://xidea.online

虽然有破解版,看了一下个人版本一年才89刀,支持下正版。

培训班出身的程序员为什么遭人嫌弃

这几年,由于it软件行业对人才的需求很大,很多传统行业也纷纷创办“互联网 ”项目,加上app开发热潮,微信公众平台也催生了更多的就业岗位。于是it从业人员的薪水也随之水涨船高。同时it培训班也随雨后春笋般涌出,一个个打出的口号都很响。

“0基础入学,三个月包就业”

“毕业月入不过万,不收学费”

“从前是你找工作,接下来是工作找你”

真是人有多大胆,口号就有多不要脸。

对于迫切想改变自己境遇的人来说,这些口号无疑是很具诱惑力的。在培训机构的宣传下,好像软件开发行业是一个门槛低,收入高,只要几个月的培训就可以月入过万,实现人生理想的好职业。

可现实是越来越多的企业不想招,甚至明言不招培训班出来的学生。而不少培训班也会教学生隐瞒自己的培训经历,会教学生面试的技巧,包装简历,虚报学历和工作经历,把学生包装成一个具有两年项目开发经验的软件工程师,而且开价往往都不低,动不动就8k以上...

Continue reading "培训班出身的程序员为什么遭人嫌弃"

周鸿祎谈创业:很多程序员智商都高得很,但我一看就知道他们不会创业成功

摘要:很多人都向往着有一天自己创业,程序员更是如此。如果你想创业,那么该怎样创业、需要有哪些准备、自己还有什么不足等等这些问题你考虑过吗?本文就跟大家分享周鸿祎在接受某媒体采访时给程序员上的创业课。 

Continue reading "周鸿祎谈创业:很多程序员智商都高得很,但我一看就知道他们不会创业成功"

形而上学和面向对象

如果有人问我,哲学研究什么?我会告诉他三个问题:

1、世界是什么?

2、我如何认识世界?

3、我该如何生活?

这三个问题基本概括了哲学最主要的三个分支:本体论、认知论和伦理学。

如果有人问我,计算机科学研究什么?我也会告诉他三个问题:

1、计算机能解决哪些问题?

2、计算机如何描述问题?

3、计算机如何解决问题?

分别是计算机的数学模型、计算机对物理世界的模拟和计算机的架构及实现。

Continue reading "形而上学和面向对象"

开源软件中的License

什么是License

许多混乱就始于你不知道License到底是什么,到底有什么含义。当你对你的产品使用License时,并不意味着你放弃了任何权利,你依然对其拥有原著作权。License只是授予他们于特定权利来使用你的产品。

License只是把你的作品释放到公有领域,或者给各个拷贝赋予权限。也意味着你放弃了版权收入,别人也没有义务把你列为原作者或贡献者。

开放源代码许可协议更容易为他人作出贡献,而不必寻求特别的许可。它也可以保护你作为原创者的权利,至少确认了你的贡献。它还可以保证你的工作不为别人所剽窃。

Continue reading "开源软件中的License"

产品经理如何在技术人员面前更有说服力?

作者简介:吴伟,资深产品经理,曾就职于新浪,现就职于约瑟网络,旗下产品“企业问答”,一款面对创业者的问答类社区产品。

以我7年来做PM(产品经理)的经验来看,说服他人,特别是研发、设计、前端这些研发部门的同事,最重要的不是口才、沟通能力和数据,而是专业。专业就是:第一,你要用内行的思维方式、表达方式和处理方式来思考、沟通和执行;第二,你要经常可以做出正确的决定。

一个人要先相信你能说出正确的话,才有可能认真去听你说的内容,进而才有可能认可你的话。通常人们认为只有内行才有可能说出正确的话来,而外行只能瞎指挥。所以PM要时时刻刻表现的很内行,很专业。

有些PM很苦恼:我明明说的是对的,为什么研发人员听不进去?是的,你说的可能是对的,但是由于你平时的表现让研发人员觉得你很外行,他们根本就没有认真听你在说什么。

只有尽量多、尽量深入的了解上下游相关岗位的专业知识,并且有一定的实践经验,才能让我们显得专业。在与相关岗位的沟通中,获得对方的信任感,进而采纳我们的意见。

有几个小技巧可以介绍一下,不过在看这些技巧之前,我必须重申一遍:让自己变得专业的根本办法是自己要尽量多的了解各个岗位的专业知识,小技巧只是一种手段,不要幻想着只凭借技巧就能真正的专业起来。

技巧1:尽量说术语

在我们与研发人员沟通的时候,尽量不要说大白话,而是使用术语。这样会让人家感觉我们很懂技术。例如有一次我和一个客户端工程师说:“我希望弹 出的窗口是模态的。”工程师听完后很诧异的说:“你还知道模态?”我说:“当然啦,这对交互设计很重要啊。”于是工程师立刻就把窗口改成模态的了,根本没 问我为什么。那么什么叫模态呢?用大白话说就是弹出一个窗口,窗口以外的地方都是黑的,或者不可以操作,只有这个窗口可以操作,类似于Windows里面 经常弹出来的讨厌的错误提示。但是你要是跟工程师这么描述,碰上脾气好的说不准帮你改改,碰上不好的准保反问一句:那多讨厌啊,我就讨厌Windows弹 错误提示。

技巧2:思维要周密

在说话之前要尽量把所有可能的情况及其解决方案想清楚。比如你要修改一个按钮的位置,人家自然要问你,空出来的位置怎么办,改过去之后会不会影响现有的功能,用户能不能习惯等等,如果你能胸有成竹的一一化解,别人自然会听从你的建议。

技巧3:让对方自己得出结论

人都是有自尊心的,都希望自己的决定是正确决定,如果你总是说“你这样是错的,我是对的”必然引起别人的反感。所以你可以先把遇到的问题摆出来,在提出自己的解决方案后立刻说:这方面你是专家,如果你觉得这个方案能用就用,如果有更好的方案我也没什么意见。

人嘛,通常都是比较懒的,既然你能提出一个还算说得过去的解决方案,而且又让对方觉得是他自己的选择,通常也就不会为难你了。

技巧4:看人下菜碟

不是对每个都用同样的话说服的,人和人都有所不同。以我的经验,对待工程师、设计师、老板是不同的。

对待工程师要有条理,逻辑要清晰,讲究数据。例如:方案1会造成数据服务器负荷过重,并发量在2万/秒以上,并且至少要占用10G的储存空间, 最重要的是,我们付出了这么大的代价,其实只满足了20%的用户,而且这部分用基本上都是不付费的用户。这一大套话说完,研发人员会认真想一想:也是啊, 万一服务器宕机了责任就大了,还是用方案2吧。

对待设计师要以情动人,因为设计师一般都是学美术出身的,特别感性。例如:大姐,你就给我改改吧,为了画这个原型我昨天都加了一宿班了,你今天 不改,明天指不定又插进来什么活儿呢,我这个项目得什么时候上线啊。再说也不是我想改啊,是销售那边儿一会儿说用户喜欢这个,一会儿说用户喜欢那个,我们 也拧不过他们啊。设计师一听,都是同事,谁还没个难处啊,得了,加班儿给人做了吧。

对待老板要学会画蓝图,例如:根据竞品研究的结果看,这个产品非常有前景,XX刚上线1个月,就已经有100万用户,10万同时在线,收入也差 不多有400来万。我们在技术上、渠道上、政府关系上都比他们强,我觉得只要能够在2个月内推出,各项数据肯定比他们强。更何况,我们的产品线目前缺乏的 就是用户沉淀,而这个产品正好提供了强大的社交功能,弥补了产品线的空缺。老板一听,小伙子想的挺清楚啊,成,给你两个工程师,一个设计师,1万块项目奖 金,1个月给我做出来。业绩好的话再给你发年终奖。

当然啦,还有些人江湖气很浓,他只要当你是兄弟,你怎么说他怎么做,没原因,没为什么。对于这种人平时多吃几顿饭,多送点小礼物,到时候自然帮你。

技巧5:人格魅力

做人要有幽默感,要学会缓和气氛。没必要每次需求讨论的时候都板着脸训人。说说笑话,插科打诨,给设计师倒杯水,给工程锤锤肩,送给运营的小姑 娘几块儿巧克力,给运维的同事买几瓶水。你平时这么注重积累,在你需要的时候别人自然不会为难你。能做的就做了,不能做的睁一眼闭一眼也就做了。

最后再说一遍:所有的技巧都是一种手段,真才实干才是王道

开源是种生活方式

走上开源道路

清晨六点钟,被儿子闹醒,第一件事是打开邮箱,迎面而来的是数以百计的邮件,我知道新一天的工作开始了。

这是一个典型的场景, 过去四年多的时间, 我一直在家工作,全职参与Apache旗下多个开源项目的开发。以开源社区为核心, 以maillinglistIRCJIRASVNGitMaven等为工具,参与全球化协作的开源项目。


走上Apache开源道路,要从2006年谈起,当时源于ObjectWeb社区的Celtix和源于Codehaus社区的Xfire合并,成为了Apache旗下的一个新项目CXF。我当时所服务的公司IONA是开源项目Celtix的主要推动者,也是Celtix的代码提交者(Committer), 因此成为了Apache CXFInitial Committer。 从那之后, 我一直从事开源软件开发工作,期间伴随着IONAProgress收购, 以及Progress成立独立的专门从事开源项目的子公司FuseSource。根据项目发展的需要,我从事的工作也从最初的Apache CXF扩展到了Apache旗下的多个开源项目。目前,我是Apache CXFServicemixKarafCamelFelixCommitter(在Apache开源社区中我使用Freeman Fang这个名字),并且是Apache CXFServicemixKarafPMC member(项目管理委员会成员)。


我想读者最为关心的问题是,全职从事开源软件的开发,靠什么来生活?是完全凭兴趣吗?如何保证自身的可持续性发展?

Ok,要回答这些问题, 必须先谈一种基于开源的商业模式—围绕开源社区和开源软件, 通过雇用主要的开源项目开发者, 向外提供付费的商业服务, 这种付费服务包括订阅、咨询、培训等。我的雇主就是提供类似服务的商业公司。这种开源商业模式在基础软件架构领域(如开源操作系统、开源数据库和开源基础中间件)已被证明是一种行之有效的方式,在欧美市场被广泛接受。但在国内, 这种商业模式还没有被普遍认可,很多人还认为开源就是免费,不愿意承认特定领域专家的价值,这种现象很值得深思。


在我看来,这种开源商业模式下,开源项目和开源社区因为有了商业公司的介入更加活跃,开源开发者有了稳定的收入获得了可持续发展,付费用户由于有了商业支持能更有效地使用开源软件,非付费用户也能从活跃的开源社区获得支持,构成了一个共赢的生态环境。

回到本文开头,我的日常工作是:阅读大量我所从事的Apache开源项目的邮件和公司论坛帖子,回答社区用户问题;实现新功能或者修复Bug,提交代码到Apache代码库中。同时,如果付费用户提交了问题,那么高优先级处理付费用户问题,但实现的新功能或者修复的Bug都会第一时间回馈到相关Apache项目的代码库中。



为什么从事开源项目

如果一个人能很长时间做一件事情并乐此不疲,那么只有一个解释,他很喜欢做这件事。我喜欢开源的原因很多,且听我一一道来。


原因之一:开源意味着最大程度的分享,降低了知识学习的壁垒, 给了后发者赶超的机会。

在从事开源软件开发的过程中,我经历了这样一个心理变化,从很自信到很不自信到慢慢找回自信。 由于有机会和世界上最好的一群软件工程师一起工作,我可以很清楚地看到自身的差距,但开源意味着一切都是透明的,不仅仅是代码,公开的社区讨论也能给你很大的启发。时间长了,你会看到自己的进步,慢慢找回自信的过程就是进步的过程。对于一个喜欢技术、追求技术的人, 开源是一个能提供无限可能的大平台。


原因之二:开源给了我最大程度的自由。

我不用去办公室工作,能自由安排自己的工作时间。在北京这个大都市里,不用去办公室意味着每天能节省2~3个小时的通勤时间, 我可以用这个时间来学习、健身、娱乐,甚至加班。有了孩子之后,我每天早7点之前开始工作, 通常下午4点我会将工作停下, 接管照顾孩子的任务。在晚上8点孩子睡了之后,我会最后再工作一会儿。

随着Internet等基础设施的飞速发展,伴随着大量辅助工具软件的出现,远程办公成为可能,越来越多的工作由集中式变成分散式,我们的工作模式正在改变。这种模式降低了大城市的交通压力,办公场地的压力,更加节能环保,同时也提高了工作者的生活质量。


原因之三:开源给了我成就感。

每次获得一个Apache项目的Committer权限,都是一次被认可的过程。通常意味着你要不断地提交高质量的Patch给该项目,积极参与该项目的社区讨论,之后该项目PMC才会提名和投票表决。每当收到一个项目的Committer邀请,都会带给我巨大的喜悦和强烈的成就感。此外,参与社区讨论,回答别人的问题,也是一件非常愉快的事情,这真的是可以上瘾的。 

从事开源,就有机会和最好的工程师一起工作,做领先的技术和项目,这些项目不仅能直接服务最终用户,还能成为其他项目的重要组成部分。例如,Apache Geronimo选择基于Apache Karaf来实现OSGi容器;还例如Apache CXF作为但不限于JAX-WS协议的一个实现,得到了很广泛的应用。 多个JEE服务器如Apache GeronimoJBossJOnASPramati选择CXF作为自己的JAX-WS实现(从JEE5开始则要通过TCK认证且需要有JAX-WS的支持)。


原因之四:开源让我更好地了解世界。

从事开源项目的开发人员,来自世界各地,具备不同的文化背景、教育背景和思维方式。通过和他们交流, 我更好地了解了他们的技术水平以及引发了我思考人家为什么会达到这样的技术水平。

举个例子,西方的工程师从事开源软件只有一个理由—兴趣。英文里有一个单词是Geek, 翻译成中文是极客,代指狂热于技术、思维异于常人的人群。用Geek来形容开源开发者再合适不过了,他们对技术的追求无止境,他们喜欢创造新的东西,他们渴望改变和引导技术发展的进程。对比国内研发工程师经常忧虑一些现实的困境,他们从来不考虑30或者35岁之后老了没有竞争力的问题, 他们很少考虑转型做管理者。他们通常年龄在35岁或者更大一些,10余年的行业技术积累让他们知识的深度和广度都很好。由于社会文化真正认可技术的价值,他们只凭做工程师就能生活得非常好(真的是非常好),他们要考虑的内容相对单纯一些, 就是从兴趣出发,完全以技术为导向。当一个人真正对自己从事的工作有极大兴趣、引以为豪且有多年的经验积累之后, 其创造力和生产力是惊人的。


技术专家的产生需要土壤,需要社会价值观作为导向,让有天赋的研发人员愿意长期从事技术积累且无后顾之忧,并能获取相应的回报是产生群体性技术专家的基本前提。如果我们的技术人员都在考虑找机会转型, 那么恐怕永远只能做低水平的简单重复,离诞生伟大的软件公司这个目标会越来越远,与和世界一流的软件水平之间的差距会越来越大。


原因之五:开源已经、正在和将继续改变软件业的发展以及我们的生活。

基于成本优势;代码可见,可深度定制;系统高度自由,无需绑定到特定厂商;更敏捷等原因, 越来越多的公司采用开源软件和开源架构,这种趋势也使更多的商业公司开源自己的产品, 以适应市场的发展。

且不说国外开源应用风起云涌, 国内也有很多公司重视开源技术,采用开源架构,例如国内某著名电商互联网公司。该公司重视技术积累,有自己的给力技术团队,有能力对开源解决方案深度定制,快速满足自身需求。该公司的系统每天都在承受超大规模的并发请求但依然很稳定。我一直认为在大压力复杂应用环境中,只有自己是自己的上帝,开源给了你主宰自己命运的机会。这个例子说明真正重视技术积累,有给力技术团队对企业自身的应用是多么的重要。



为什么国人参与开源力度不够大

参与Apache开源项目以来,有一个现象非常困扰我,就是很少有同胞在相关项目邮件列表/论坛问问题,是国人很少使用这些开源项目吗?显然不是,以Apache CXF为例子,如果我们使用Google Trend来查看关键字CXFGoogle被搜索的统计,我们可以看到最多的搜索请求来自中国,搜索者使用的语言排在第一位的是中文;同时,我可以在互联网上搜索到大量的关于使用Apache CXF的中文技术博客。以上都能证明, Apache CXF在国内被大量使用,但我为什么在Apache CXF的邮件列表中很少看到中国人问问题, 更不要说参与讨论、解答问题甚至打Patch了。我在这里想尝试分析一下为何同胞很少参与讨论,并帮您打消顾虑。


我认为最主要的原因是文化上的差异,它首先表现为语言上面的障碍。开源社区的参与人员来自世界各地,为了保证大家的交流,采用的语言是英语,毕竟英语目前是国际上最为通用的语言。在线下交流中,我了解到,很多人因为要用英语问问题而迟疑,甚至放弃问问题。其实大可不必,因为Apache社区很多参与讨论的人员的母语都不是英语,这并不妨碍大家用英语讨论技术问题;再者,我和欧美同行交流过语言方面的问题,他们(尤其是英语是母语的同行)认为很多中国人过于低估自己的英语交流水平。实际把自己的问题用英语描述清楚并没有那么难,别担心,没有人会像针对我们的英语考试中短文改错那样对待你的邮件/帖子。毕竟, 我们掌握英语的程度远远超过西方人掌握中文的程度。另外,多参与讨论, 对实用英语的挺高也很有帮助。


文化上第二个差异体现在不同的学习方式上,我们擅长的学习方式是有系统的教材,有标准的大纲, 最好再有大量的练习题来强化知识点。我们习惯于这种学习方式,我们对规划好的知识点可以掌握得非常好,具体的体现是我们很擅长考试,但我们很少主动问问题。大多数人在考完试之后, 马上就会忘掉之前死记硬背的东西。西方人要学习一个东西,习惯自己找材料,找问题,讨论问题,因此,讨论问题本身就是他们所习惯的学习方式的一部分。而通过这种方式获得的知识更让人记忆深刻。我认为他们更善于学习新东西,尤其是需要自己主动学习时,他们的学习方式让他们更有优势。我们害怕没有面子,害怕问出不靠谱的问题,回避交流。不要这样,要更开放一些,善于利用Apache社区这个很好的资源,和技术专家讨论问题。况且,英语有一句俗语,“No question is stupid”,就是在鼓励大家问问题。