27岁

今天下班前记了一下日历,日历提示我,明天就过生日了。好快啊,很开心,不幸的一年这么快就要过去了。 去年生日过后,不幸一直缠绕着我,很多事情都不顺利,在国外出车祸,笔记本坏了接着耳机坏,飞机延误,或者没赶上,牙齿坏掉,很严重的家里变故、工作变动还影响了我整整一年。年中过后开始做很多事情没动力,没有方向,几个大叔伸手帮忙,把我从不幸中拉了出来,帮我指了好几条路。9月初我投简历到Google旗下的个人财富管理Startup,10月初onsite拿到Offer之后,所有的运气都来了,接连拿了好几个Offer。运气还是实力,我觉得运气占比更大一些。 幸运慢慢多了,工作量却没少。基本上每次过生日我都非常忙,临近年末都是最繁忙的时候,上了3周班,加班却加了80+小时。上周末降温,没穿多少跑去加班,办公室里敲代码敲得手疼。下午跑去见大叔,大叔心疼地说怎么刚去上班这段时间就加了那么多班,还加到凌晨3点多,把我吓一跳,你不去上班这天也不会塌下来。我说你不知道我要做的事情有多少有多紧急,我一来就做了好几周开发和测试,现在保证稳定之后,下周我还要去做运维。 做运维的事情,还是一个同事过来跟我说明了一下整个系统架构的情况,说目前要做的事情有阻碍,让我接受和理解一下。…

重构日记

一个老项目,大家往上面堆代码,堆到现在有100+个模块,就是上次减肥的那个项目。 最近几个跑来写后端的同事问我,刚clone下来的项目里面一些模块是用来做什么的,为什么叫这些名字。我对项目的小模块不是很喜欢,但是为了让这几位同事对现在要接手的工作有点信心,想了个听起来很合理的理由跟他解释了一下,他们似懂非懂,说出一个“哦”字都能听出勉强,心里很难受。回过头,另一个老员工问我,这个项目里的某个模块为什么叫这个名字,有什么深意。当时的感觉:〃ωo啲吢ぬ痛ぐ 直到最近有同事升级了Gradle版本到4.0.1,也就是昨天,出现了build break,一个同事说是Gradle的Bug,瞅了一眼当时就喷了,之前写Gradle文件的同事到StackOverflow上找了个通用解决办法,为了代码看上去不是复制粘贴,手打了一份不等于抄,搞了一个配置用到现在。Gradle开发团队总是堆feature往前赶不做向前兼容,搞得Gradle plugin社区怨声载道,这次升级我也天天被同事粘着缠着,非要我讲Gradle的故事。面对这次危机,我决定站出来~~成为偶像~~做点升级的事情。 后来看项目100+模块真是昏古七了,想重构,于是今早跑去跟项目负责人撒娇软磨硬泡了一上午,可以动手做,但是要把过程记录下来,于是就写个重构日记吧。…

工作,满5年

5年前的今天,我在上海张江签下自己第一份工作合同。 那天早上下着小雨,我穿着新买的衬衫、西裤和皮鞋,从一家老旧的照相馆里拿到自己的照片,没有伞,站在马路边发呆,心境和现在一样,没有现实感。 写点东西吧。 工作责任 从刚工作到现在,职称一直是软件开发工程师,负责软件开发,偶尔负责数据库、运维、网站稳定性方面一些工作,有点辛苦有点忙。 工作第2年,从业务开发转为基础架构,职责和工作量多了很多,需要每天不断学习来应付工作中的难题。负责大量的开发工作同时,也负责少量的运维工作,那时国内还没兴起DevOps和MicroService这些概念,在国内流行开来之后,才悟到当时做的很多都是这领域里的东西。这段经历很宝贵,第一次被迫去见证某个领域的实践变成理论落地,各类工具的高速发展。 工作第4年,转去做了DevOps,工作范围正好和之前的基础架构重合,只是视野转为鸟瞰了。目前的工作岗位需要负责人比其他人更加稳重和成熟,思考问题也要更全面。在这方面上下了很多功夫,运气很好,没捅过娄子,出现紧急情况或快完蛋的时候总有奇迹出现,有惊无险又过一天。 职业目标 在校的时候看过一篇文章,大意是说毕业5年之内不要和别人比较,只和自己比。那时临近毕业,拿着这篇文章给同学看,说自己也打算这样。后来发现这个想法很危险。…

Spring Boot应用优化与升级

前言 厂里有个21W行Java代码的项目,通过Gradle管理,子项目有104个,编译之后产生3个可启动的应用,初次编译时间要95秒,产生的关键应用的大小在90M左右。上传到生产服务器运行,启动完成需要137秒。整个过程比较漫长,一次Hotfix会耗掉Ops近10分钟时间。 上周三一同事回家试验升级Spring Boot 1.4.0和Gradle 3.0,说好像还不错,这个项目还在使用1.2.7版本,可以找时间的时候升级上去。 周四下午有了点时间,就着手开始动手做,三个目标,有优先级地开始进行: 加速应用的编译和启动速度 将Spring Boot升级到1.4.0版本 将Spring Boot相关依赖升级到合适的版本 加速应用的编译和启动速度 Spring Boot应用是一个fat jar,启动的时候会将fat jar中的jar(jar in jar)一个个扫描,将里面的jar扫描之后通过链接方式重新链入classpath中。应用越大,这个工作就越繁重,耗时越长。…

折腾Hackintosh

最近安装了很多台Hackintosh机器,觉得有必要写点东西 缘由 家里用的NUC是Brix BXi5-4570R,于2015年4月初在Amazon上以200美元购入,CPU是以R为后缀的i5 Haswell系处理器,让机器在非常小巧的同时,性能极为彪悍,装上一张mSATA SSD和16G的内存之后,这个小机器就一直运行到了现在;但年初购入了个Dell P2715Q Display,分辨率上来显卡性能一下就吃紧了,后来把系统从Windows 10换到了Ubuntu Gnome,发现Linux下的驱动好像不是很好,在浏览网页页面稍微多一点(200个Tab左右)的时候,Firefox经常假死 等新款的Mac,无论是Mac Mini也好,是MacBook Pro也好,性能想稍微过得去一些,但是今年年初做了点小升级,推了个玫瑰金的MacBook,想想两年前越来越难更换硬盘、使用后缀带U的CPU的Mac Mini,扫了一眼现在的Mac机器,比Brix的CPU还要强的机器也就只有高配的iMac和全系Mac Pro,还是装OSX系统比较实在一些 这台机器出了也有好长时间,在tonymacx86上是比较流行的机器,同梯的还有一台Brix BXi7-4770R,安装OSX的成功例子很多,从Mavericks到Yosemite到El Capitan都有相当多人踩过坑、积攒过经验,而有个完美的安装帖子出来了:[Guide]…

又一次,你好,世界

之前在孱弱的机器上面跑Blog,512MB内存跑个Ghost内存爆炸连Swap都吃满了;正好最近搞Docker、Azure、AWS,手头上有两台机器,想把博客从孱弱的机器上搬过来,于是就开搞了 HTTPS/SSL 搞了COMODO证书,网站终于有了HTTPS/SSL支持,所有走80端口的全部强制rewrite走443 有了SSL,又想开HTTP2。检查了Nginx的版本,nginx -V详细看了一下,确保支持HTTP2,但是打开HTTP2之后Chrome、Firefox都无法访问,Android机器上的Chrome也无法访问,奇怪的是iPhone、iPad、Edge一点问题都没…想想HTTP1.1现在也暂时够用,有时间再折腾 感谢Nginx,让整个世界支持HTTP2的网站开始多了起来 Ghost 博客用的Ghost,装Docker里面以Production模式跑 刚开始访问管理界面的时候总跳到 https://my-ghost-blog/ghost 这个网站,不知道为啥;后来发现在配置中的url不能加https,只能设置为http,改回来了就正常了 设置Blog域名的时候,发现证书只能在Domain下使用,不能应用到Subdomain,只能往下开Subfolder。目前暂时没有其他的路径,索性也将域名直接rewrite过来到/blog下…

要什么

中午12点的飞机,现在是凌晨0点。要带的东西都列清楚了,早上起来再收拾。到阳台摸了摸晾着的衣物,还没完全干,楼下停着的车顶上积了一层雪。回到床上睡不着,起来写点东西好了。 转职 半年前,一个前端的小伙跟我说,我可以负责现在的部署,现在缺运维,我正好可以做这份工作。当时我支支吾吾,在技术上比较虚,没有直接答应下来。后来不知道为啥就成了运维…当时想法是“必须要有个人做这件事,但是大家都好忙,只好我来吧”,就转职运维了,到今天正好一个月。 转职运维,意味着之前很多擅长的技能都无法派上用场,新领域需要学习和积累,一些短期目标和任务无法完成的时候,我就会感受到巨大的压力。后来定好路线图,按部就班,稳扎稳打,压力减轻多了。 不过想了想,还是自己这个月开了小差,工作时间之外的大量时间用来准备其他的事情了,这个后文再谈。 总之,现在的工作还算能应付得来,没到得心应手的程度。 高低 和朋友聊天的时候,聊到我转职做运维这件事,他们都送来了惊讶的神情,还反复跟我确认是不是真的。我当时说,做运维没有什么不好哇,可以有持续的学习和积累,见到不断增加的业务规模,…