分类
技术

如何集成Jira和Github企业版

Github企业版包含了基本的issue和看板管理,对一般的团队已经足够。但是有的团队仍旧需要把自己习惯使用的Jira和Github企业版集成。这样,团队可以在Jira内看到他们的分支,提交信息,pull requests等等,可以让Github的代码提交记录和Jira的任务管理系统集成在一起,获得便利。

分类
技术

Python使用Flake8做代码静态检查的时候如何忽略一些比较长的语句[E501]

最近开始在Visul Studio Code里面用Flake8做我的Python项目的代码静态检查,感觉不错,确实可以提升可读性。

但是在我的测试样例里面,我发现有时候我要引入一些比较长的JSON字符串,作为测试的样本,格式化然后多行太占地方,而且比较麻烦,而且里面涉及到一些长文本,折行就更麻烦了。

分类
MacOS

我遇到的MacOS Catalina Beta bug一例

我有两台常用的Mac,Mac OS Catalina在我的RMBP上面工作的相当正常,没发生太大的问题,但是在我的Mac pro垃圾桶上面问题很多。最近时不时的就打不开任何新应用了,chrome也打不开新的网页,但是老的网页却正常。

这么一说,有点像是进程数的问题。在终端执行任何命令也会发生错误zsh: fork failed: resource temporarily unavailable。

现在问题已经解决。

原来是我之前有一个cron设置一分钟启动一次,当前系统有个bug这些cron任务执行完了不会自动释放,结果刚才我发现系统内有1000多个cron进程,如果几天不关机当然会累计更多,我把那个cron设置取消,把这些cron进程都干掉,现在系统的进程数量就比较健康了。

我再观察几天,估计这个问题不会再出现。

分类
MacOS 技术

IntelliJ IDEA可能会在MacOS 10.15 Catalina下崩溃

最近我频繁遇到在安装了MacOS 10.15 Catalina的机器上IntelliJ IDEA会崩溃的问题,最后这篇文章解决了我的问题

我之前试着用Visual Studio Code来开放我的Java代码,一开始还好,后来不知道做了什么动作,就不对了,找不到类名,执行错误。我折腾来折腾去也没搞好。暂时认为VSC可以用来做我的Java开发,但是配置太麻烦,暂时也不支持导入IntelliJ IDEA的项目,所以暂时放弃了用VSC开发Java的打算,不过用VSC写Go,等,我目前体验不错,Flutter还没来得及用。

分类
MacOS

Zsh如何设置终端提示(Mac OS新版)

我已经在其中一台Mac玩新版Beta的Mac OS 10.15也就是Catalina。这个版本苹果把默认的终端shell换成了Zsh,不出大问题的以后这就是上亿Mac用户的默认选择了。

换了新的shell你以前在shell设置的一些环境变量,终端提示可能就失效了,所以是时候学习新的技巧了。

分类
技术

那些年我赶过的时髦技术趋势

题图是我大学时代最爱玩的一个游戏,法老王-埃及艳后,这是一个以古代文明为背景的城市建设游戏。最近又捡起来玩了玩,还是那个味儿,倍爽。

上次有人说,听说tinyfool看到AlphaGo火了,马上去赶时髦学机器学习,把我弄的哭笑不得。我给大家介绍下,我从业10多年是怎么赶时髦的吧。

怎么赶上搜索技术的时髦

98年,第一次上网,也是第一次看到Google,那时候简直觉得Google就是天下第一的好东西。互联网是个无穷无尽的宝库。但是没有Google这把钥匙,你什么也不知道。

那时候,我就对搜索技术很感兴趣。一直在看各种技术文章,但是因为基础的问题,对各种文章的描述也不是很懂。01年,我根据一些自己的理解,写过一个原理性的单字倒排搜索引擎,那时候,我连怎么做好中文分词都不了解。05年,看文章知道了Lucene,但是一直没有机会用,也没上过手。

08年做技术咨询的时候,客户想上一套搜索,方案公司的报价是20万。客户询问我们有没有解决方案,我当时觉得是个千载难逢的好机会,我就跟霍炬商量好,我们试试看客户满意的话,未来还可以卖给别人。但是我们两个当时的技术路线思路不同,我看好Lucene,基于Java开发简便社区成熟,文档全面,刚刚还出了本Lucene in action,他看好Tokyo Cabinet作者用C++写的一个搜索内核。春节放假回家,我们各自写一套,因为大家技术路线不同,所以越好不吵不闹,看产品见真章。春节7天假后,我的更成熟一点,所以他的就放弃了。

马上交付客户,客户很满意,搜索流量暴增且每天都在持续增长,一个月不到,客户的竞争对手打电话要求买一套。

这套系统曾用于饭统、点评、六间房、FtChinese,等公司。单一服务器最大日搜索量2000万次。

怎么赶上移动互联网的时髦

01-02年,J2ME刚刚推出来的时候,我就很有热忱想在手机上写程序,但是受限于当时J2ME的设计思想,以及当时手机的机能,玩了玩,我觉得这不是我要的可以编程的手机。

其后到iOS之前,所有流行过的手机操作系统和开发环境我都碰过。我研究过J2ME在Nokia s40上的开发,研究过Symbian,研究过Android 1.0 SDK,那时候还没Android手机呢。

到了07年乔布斯宣布iPhone的时候,我觉得这就是我梦想的手机。但是那时候没有原生SDK,只有一个Web SDK,我第一时间就开始玩,后来失望的放弃了。过了1年以后,乔布斯发布了当时还叫iPhoneOS SDK的iOS SDK第一版。当天,我就发邮件给在美国读博士的朋友徐宥,请他用他的信用卡帮我买了一个开发者账号。

有了开发者账号后,我自己开发的第一个App是运行在我在朋友公司年会抽奖,运气好,得到的iPod touch上的一个记账软件。这个软件大概开发了2个星期以后,网易有道的人辗转找到我,请我帮我开发有道词典iOS版。

后来,有道词典iOS版是我上线App Store的第一个App。

最近为什么在赶机器学习的时髦

08-09年,我们做搜索创业的时候,我就开始自学机器学习。那时候,机器学习的理念还不是很流行,更多的说法还是人工智能。还是徐宥博士,他读完回国探亲的时候,因为他是相关专业的博士,所以他给我做了最早的启蒙。当时人工智能行业的现状,为什么从规则开始往概率转变。为什么现在流行的概念是机器学习,什么是监督学习和非监督学习,等等。

那时候开始对机器学习感兴趣的主因是,我们做搜索的时候,大量的看跟Google有关系的东西,当Google有了大量数据积累后,大量的使用机器学习去改善自己的搜索结果,寻找更好的组织信息的方式,等等。

我是国内当时最早翻译Google GFS、Mapreduce、Bigtable论文的人之一。Google公布这三篇论文后不久,Lucene的创造者Doug Cutting就领导创建了Hadoop社区,后来还创建了Mahout,这个当然后来不够火。但是我们的研究和对市场的分析都认可,我们的搜索服务未来和机器学习服务是非常相配的,所以,我当时花了很大精力在学习机器学习和研究怎么把他们搞成服务。我们可能也是做搜索服务的公司,最早给用户提供搜索数据分析服务,关键词提醒服务等等,这些都是从搜索服务延展到数据服务的例子。

后来,美国次贷危机造成我们A轮融资失败以后,我们被经济形势吓到了,公司关门了。后来,我们几个先后去了盛大。而当时盛大对iOS方面的人也很缺乏,所以,我暂时就放下了机器学习。

那个时候,深度学习还没有兴起。大概是12年的一次imagenet的比赛上,深度学习的结果夺冠,然后各种比赛和论文都表现出深度学习的效果和便利性以后,才大行其道起来。

自学机器学习暂时放下以后,在我自己的网站,还让我当时的下属,在我的指导下,搭了一个贝叶斯的文章分类器做自动抓取,自动分类,放了很多年。最近,关了上一家公司,才又有时间和心思专心学了一段时间机器学习和深度学习。当然,有动力去好好学,也是跟深度学习最近有了非常多可惜的进展有关。

不得不告诉大家的是,AlphaGo真的不算里面多重要的一个。当然AlphaGo有其非常大的价值,因为它是外界最容易理解的,也是最容易被误解的。就跟当年的深蓝一样,其实深蓝本身对这个世界的价值不大,但是深蓝引发了大家对机器智能的兴趣,激起很多相关的讨论和研究,这是它的价值。

结论

本来写这篇文章也是一时好玩,算是解释解释为什么看上去你们总觉得我在赶时髦,而我其实没有。只是我之前很有兴趣的很多事情,慢慢的走到了历史的前台,成为了当时的时髦技术而已。

其实我觉得如果你有心去赶时髦的话,往往可能会错过风口,因为这个世界的风口一直在变。如果你坚持做一些你喜欢的东西,有时候,风口会自己撞过来。

分类
IT行业 技术

创业公司如何确定技术路线

首先要说的是,我认为创业公司的技术路线选择并不是一个技术问题。如果是一个纯粹的技术问题,那么很可能会一直争论不休,最后的结果就像某个笑话里面说的,某公司一直到倒闭技术路线还没统一。因此,本文不会向你推荐任何一个具体的技术方案。

分类
iOS开发 IT行业

iPad革命:开发者的机遇和挑战

iPad采用了和iPhone一样的底层系统,开放方式基本相同。同时性能大幅提升,屏幕尺寸大幅度提升,以前在iPhone上无法实现,或者难以实现的一些应用的机会来了。所以,现在对每个有志于iPad开发的人来说,唯一的挑战是你的想象力和你的执行能力。

分类
MacOS

为什么我认为每个程序员都应该用Mac OS X?

查尔斯·狄更斯老师的《双城记》里有句非常著名的话,我每次看到都心潮澎湃,所以看了无数次《双城记》总是在那两句话前后打转。心说,开头就这么好,正文无论如何也无法让你觉得精彩了吧?

原文是,

It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness, it was the spring of hope, it was the winter of despair, we had everything before us, we had nothing before us, we were all going direct to Heaven, we were all going direct the other way–in short, the period was so far like the present period, that some of its noisiest authorities insisted on its being received, for good or for evil, in the superlative degree of comparison only. 

译做:

那是最美好的时代,那是最糟糕的时代;那是智慧的年头,那是愚昧的年头;那是信仰的时期,那是怀疑的时期;那是光明的季节,那是黑暗的季节;那是希望的春天,那是失望的冬天;我们拥有一切,我们一无所有;我们全都在直奔天堂,我们全都在直奔相反的方向–简而言之,那时跟现在非常相象,某些最喧嚣的权威坚持要用形容词的最高级来形容它。说它好,是最高级的;说它不好,也是最高级的。

我认为对于程序员来说,我们正在经历最美好的时代,当然也是最糟糕的时代。

美好的原因在于,这是一个充满机会的年代,近十年每次我们以为世界一切尘埃落定的时候,就会出现新的惊喜。如youtube、facebook、twitter等等,甚至包括了iPhone以及即将上市的iPad。世界上无数聪明和勤奋的人们正在努力,告诉我们一切还早,我们还活在一个迅速发展着的世界。只要世界还在迅速发展,谁知道你会不会就是下一个twitter、下一个iPhone的发明者?甚至是下一个马化腾,虽然现在腾讯如日中天,但是如果时间倒流到99年,甚至01年,大多数心中可能还是会觉得那只是个玩物吧?

然而,糟糕其实也正在于此,前面的机会多,陷阱就多。人们天生就是风险躲避者(某个名人或者是名著里面说的,可惜记不清了,无法拿来掉书袋了),这也许就是独裁百试百灵的原因。人们总害怕错误的选择,所以变得犹豫起来。现在这样的时代,你就有无数可以犹豫的事情,因为很多事情还在发展中,不知道谁会笑到最后。最近仍在胶着的战斗很多,如,Wifi和3G(我认为赌局还没开场),微软和Google,微软和苹果,苹果和Google,苹果和Nokia等等等等。

这些战斗的结果,对普通用户来说,只是买什么产品,用什么产品的问题。对开发者来说则是抱谁的的大腿,跟谁混的大事儿。

所以我们这些久经沙场而没有发达的家伙,总是对面前的选择感到胆战心惊,甚至养成了父母问你吃什么都会大发雷霆,大喊“不知道”的选择恐惧症(我的症状非常严重,出去吃,绝不点菜,在家里一律随便。但也有可能是看Monk看多了的)。

之前我和赵姐夫(@Jeffz_cn)霍炬(@virushuo)方块(@KrzyCube)还有很多人在twitter上面大侃过一次这个问题,有兴趣的可以看看Cat Chen的评论
、以及赵姐夫的整理、和方块的整理(我们的讨论很长,但还算有趣吧)。

现在,我已经远离了Windows阵营,做Web开发用Php,做客户端只做Mac客户端软件,还做一些iPhone开发。我认为每个程序员都应该至少用一用Mac OS X。

原因如下:

1、操作系统的竞争到了一个新的阶段

Windows虽然仍旧是实质上的老大,但是操作系统的战争早已不是10年前的样子。随着Web应用的大行其道,很多人的电脑,都已经成了名符其实的上网本或者上网机。

Window / Mac OS X / Linux / Unix 几大主流平台上都有了流行的Web浏览器,只要你不是一个执着的IE粉丝,那么如果你的主要任务是Web浏览,现在几大操作系统
的体验已经非常接近了。其他的基于互联网的流行软件,一般也都有比较好的跨平台支持。例如,聊天工具,Gtalk全平台覆盖,Msn全平台覆盖,现在甚至连一向被人看作很封闭的QQ,实际上也有Linux版本(虽然口碑很大,但是还有lumaQQ这样的替代产品),Mac版本(口碑不错),iPhone版本了(最近刚更新过,很不错)。

我们甚至看到了上网本这一硬件类别的产生。互联网成了计算机的中心,这很大程度上降低了微软的垄断优势。

3-4年前,我切换到Mac OS X的时候,除了招商银行等少数应用以外,我没有觉得任何的痛苦。那时候,我主要开发服务器端程序,程序的运行环境是Linux,在Mac OS X这个Unix上面开发,其实很方便。

程序员可以在不同平台切换并不重要,重要的是,我们这些程序员的衣食父母已经可以自由的在各种平台上切换了。这就给了我们去尝试Windows以外平台的可能性。

很多人在比较Windows和Mac OS X的时候,有一个误区。因为他们自己是长期的Windows用户,对很多Mac OS X的细节很不喜欢(右键、按钮位置等等)。但是作为一个开发者,你要注意的是用户。我希望你们设想一个场景,一个从来没有用过电脑的人,他们学习Windows和Mac OS X,他们会更喜欢什么。我想更多人会喜欢Mac OS X,如果我的设想是对的,那么未来是属于Mac OS X的。

2、iPhone以及未来的iPad

iPhone是近10年来,我看到的最革命性的硬件产品。虽然他的功能,除了多点触摸、加速度传感器以外,大多数我们都在Nokia和其他竞争者的产品中见到过。我用过Nokia2002年的产品7650,iPhone的所有功能它几乎都有(没有wifi,但是有gprs),但是用起来跟iPhone就是不一样。

那么区别在哪里呢?05年我买iPod Nano的时候,看到盒子的时候,我吃了一惊,因为盒子最显眼的地方写的不是“容量:4G”,而是“可以容纳1000首歌,xxx张照片”。这家卖水果的公司突然让我明白,用户其实关心的是那个叫mp3的东西可以容纳多少歌,而不是从比特的角度,从存储的角度他的容量是多少G。多少G多少M的容量,是实现“容纳多少多少歌”这个目的的一种手段。我们总是太过care手段,忘了我们的目的是什么。

做产品的时候,很多人也是这样。如果你是第一次看电视购物卖手机,也许你就会想把手里面的iPhone扔掉,去买那些垃圾。因为你听介绍的时候,你会觉得全世界最好的手机就在那电视里,叫做“XX全能王”。从功能列表来看,它们简直是世界上最好的产品,但是如果你真的拿到手,你也许会发现那东西3分钟死机,也许什么操作都很慢,也许摔了一下就坏了。那个时候,我估计你会领悟到,功能多当然好。但是功能列表不会包括“不会3分钟死机”,“操作不会很慢”,“摔一下不会坏”。手机,或者任何产品对你最重要的不是功能多,而是好用。

iPhone让我发现原来手机上也可以有这么好用的浏览器。这是个纯技术问题么?不是,要知道Nokia很多手机用的浏览器内核和iPhone毫无二致,都是Webkit。但是操作起来看看,大家知道iPhone出来没有多久,所有网站手机流量最大的就是iPhone了,这不是靠运气啊。我有个NokiaE61i欧版手机,可以用wifi,但是用它的浏览器,实在是不方便,每次都要重新选择wifi,打开网站也很慢,打开了以后,放大缩小也很不方便。

好的体验仅是其一。更重要的是水果公司在iPhone这个产品上开发了AppStore,这是近10年来,我认为在软件行业最重要的一个东西。1976年2月3日比尔盖茨发表了著名的《An Open Letter to hobbyists》(给爱好者们的一封信),事实上开启了商业软件的道路。然而,商业软件从诞生起,就受到盗版的诅咒。从全球看,表面上微软是盗版的最大受害者。没错,从金额上看,是这样的。但是实际上所有的第三方开发者,才是盗版的最大受害者,他们中的很多人因为盗版而丧失了成长为微软这样企业的机会。

AppStore不能完全杜绝盗版,但是它从发行和支付渠道出发(跟iTune Store如出一辙),很大程度降低了盗版对第三方开发者成长带来的风险。很多单枪匹马的第三方开发者,凭借做iPhone软件发家(当然一个市场是有容量的,你不能指望它超越自己的机极限)。很多开发Mac软件多年的人,没因为开发Mac软件发家,但是因为移植了一个简单版本到iPhone发了家。据说,因为开发iPhone只能用Mac OS X,这成了近两年对Mac电脑销售最大的拉动。很多人为了开发iPhone程序而购买Mac电脑。

就在这时iPad来了。价格在2000-3000之间的上网本,应该是最近和未来,电脑市场一个很重要的增长点。这个价位可以吸引很多买不起电脑(可能更多是不舍得买电脑)的人。另外,关注上网这个概念简化操作,也可以让很多觉得电脑太难用的人们,来购买电脑。可惜,基于Windows的上网本在用户体验上实在是乏善可陈,往往仅仅是一个屏幕更小的Windows而已。

Windows在PC上面的优势本来有机会拓展到其他平台。在WinCE和Palm,微软实际上获胜了。但是之后就固步自封了,现在iPhone出来了,WinCE实际上已经没有什么大机会了。上网本和触摸设备,本来也是Windows有巨大优势的,但是微软实在缺乏在用户体验方面的努力(你去看看各种基于Windows的触摸查询设备吧,居然需要点一下然后鼠标光标蹦过来,然后才能点!!!!!!!)。

iPad的发布会,并不让人多么惊喜。这是因为iPad和iPhone战略在水果公司是紧密结合的,iPad包含了iPhone的所有革命性,然后把尺寸放大。发布会开到结尾,说到电池时间和价格的时候,我才开始兴奋。

iPad意味着什么?意味着一台便宜的上网本;有电脑的用户也不介意购买一个,买不起或者不舍得买电脑的人可能会买;因为便宜,所以医院和餐馆等可能会购买作为内部管理系统(医院信息系统,点餐系统);学校可以买做教育用途(电子书包)。意味着,我们可以在电脑上面写文档累了的时候,躺在床上抱着它听歌,看看书,玩个游戏。

这个产品如果操作的好的话,可以造就一个比iPhone更大更好的软件市场。

3、Mac OS X是Unix

对于大多数做服务器端开发的开发者,服务器端开发也许就意味着Linux下的C/C++和Java。Mac OS X是真正的Unix(符合标准,有授权,合法的可以用Unix商标)。大多数这类开发,你可以在Mac OS X下做,在Linux下执行。少数涉及到Linux和BSD内核不同的应用,稍微麻烦一点。但是如果你做到这个级别的话,我想你也不在乎了。

大多数基于Linux的开源软件,大多数为Unix架构设计的程序,都可以在Mac OS
X下正常工作。虽然有很多软件编译起来,会遇到很多稀奇古怪的问题,但是放心,你在不同的Linux版本间编译的时候遇到的会更多。虽然Mac OS X下面的自动软件安装工具也会有各种各样的问题,但是放心,Linux下的也是。

Unix文化最经典的管道和脚本,Mac OS X也支持的很好。

Mac OS X是一个非常好的平衡,Unix式的命令行、脚本能力它全部具备,而且带有一个非常好用高效的GUI。所以不管你是CLI(命令行界面)控,还是GUI控,你都应该可以玩的很好。

有人问我Mac OS X是不是一个很好的学习Linux的途径。我不得不说,你要是真的玩转了Mac OSX(CLI+GUI)的话,你真的无需去学习Linux,用就是了。尤其是,学习Linux是为了学习服务器管理的人们,真玩转了Mac OS X,Linux有什么区别?

4、开拓你的视野

一段时间以来,我研究自己发展的过程中的瓶颈的时候,发现一切瓶颈都不来自能力,都来自视野,来自于给自己设置的愚蠢的极限。这么说,是因为我发现,我想做一辈子的程序员,而我也乐意学习新的知识,我也确实擅长不停的学习新的知识。

只是每经一个阶段,一旦我发现自己长期没有什么进步的时候,就会发现原因就是我已经不知道前面的路在哪里了。在.net出现之前,我已经是一个微软几乎所有产品的专家,我可以不借助ATL自己写Com组件,我写过IE和Outlook插件,等等。但是到了.net时代,我的心疲惫了,我决心不再跟随微软的脚步。

这两年,尤其是09年,做了一些iPhone开发,Cocoa开发,做了些服务器端开发,我又开始像刚开始接触电脑那样的激情澎湃了。

对大多数纯Windows程序员,Mac OS X的GUI和基于Unix的CLI都是新的天地,哪怕你不真的从事这两方面的开发。在这些领域看到的东西对你的开发都是有利的。

腾讯是一个大家印象中很不注重用户体验的公司(老程序员视角)吧?但是现在QQ已经有了Mac版,iPhone版,而且iPhone版本已经多次打磨,已经是一个相当好用的iPhone应用了。年前我去了趟深圳,见了他们的iPhone开发team,他们很重视用户体验,也做了很多的尝试。而腾讯更多其他平台开发的工程师,也开始更加关注用户体验了。

对绝大多数Windows程序员,关注用户体验的经验和意识都不足,使用Mac OS X有利于提高这些方面的素养。

最近我在参与翻译《Cocoa® Programming Developer’s Handbook》,从中知道,我最崇拜的Tim Berners-Lee爵士,就是在Mac OS X的前身,NeXTSTEP操作系统(NeXT公司产品,乔布斯创建的公司,后来被买回水果公司,这个操作系统和原有MacOS一起,成了Mac OS X的前身)下开发的人类第一个浏览器WorldWideWeb 的,打开了人类的Web时代的。