为什么你不应该使用Lombok
Comments
tags:技术, Java
先科普下Lombok,一个第三方的Java字节修改库,用来帮助你自动生成一些“冗余”代码的工具。(在此请允许我吐槽下这个官方网站浓浓的山寨VB程序页面) Java,作为流行的编程语言。最受人诟病的一个缺点,就是“罗嗦”。相比动态语言,变量要先定义,类型要先定义,每个类要写很多的get/set/toString/hashCode等等方法。为了避免写这些“罗嗦”的方法,好多程序员一直在到处寻找一个能够使他们摆脱这些烦的事情的工具,比如今天我要谈论的这个Lombok,就被认为是一个处理这方面的好工具。 然而我却并不这么认为。 先来了解下Lombok的工作原理吧。由于Java的官方版本没有提供这种“便利”的工具。而类似Lombok的工具都是使用了从Java 6和JSR 269的Annotation Processing技术。 但是这个新特性的本意是只能用来根据Annotation生成新的代码(或者文档),而不是用来修改现有的代码的。Lombok是怎么做的呢?根据官方的文档: 使用非公开的API,在知道在javac编译代码时,annotation processor的实例一定是JavacAnnotationProcessor(接口AnnotationProcessor的内部实现),直接使用强制类型转换cast。再从JavacAnnotationProcessor的方法里面拿到抽象语法树(AST)做修改。 接着看看大家认为的最大好处: 省代码,省很多的代码…
Reactive Programming介绍(2)
Comments
tags:技术
从旧博客上转移文章: 目录: 什么是响应式编程(1) 使用响应式编程思考的例子(2) 使用RP思考,例子 让我们做些实际的事情,用一个真实世界的例子(而不是半成品的概念),一步一步指导你如何响应式的思考。在这个教程的最后,我们会构建一个真实可运行的代码,同时彻底了解这些代码背后的思想。 我选择了JavaScript和RxJS库来作为这个例子的语言和工具,原因是JS是我当前手上正在使用的语言,而Rx*家族的库在很多语言上都有(.net, Java, Scala, ...),无论你是用那个具体语言的库,你都能从这个教程里收益。 开发“Who to follow”推荐模块 在Twitter里你会看到如下的推荐关注人的小模块: 我们接下来将关注实现它的核心功能: 初始化时,通过API读取账户数据,并显示3个作为推荐列表 点“刷新”时,读取3个新的账户显示在推荐列表中 当点击某个账户的右上角‘x’时,只清除这个账户,然后显示一个新的 每行显示用户的头像和链接 我们可以忽略界面上的其他所有按钮和链接。并且,由于twitter最近关闭了他的用户数据API,我们的UI将基于Github的用户信息。接口定义在这里。 教程的完整代码在这里,…
Reactive Programming介绍(1)
Comments
tags:技术
从旧博客上转移文章: 一篇不错的理解响应式编程的入门文章。个人把它分成2部分,慢慢翻译。 目录: 什么是响应式编程(1) 使用响应式编程思考的例子(2) 你不能错过的响应式编程(Reactive Programming)介绍 你可能对学习响应式编程这种新兴事物感兴趣,尤其当它的变种包括了Rx,Bacon.js,RAC等听说过的库。 学习它非常困难,尤其当没有好的入门材料的时候。当我开始的时候,我曾尝试寻找入门教程。我发现只有屈指可数的实际指导资料,而且大部都分只是抓痒,从没有解决如果围绕响应式编程创建完整架构的挑战。相关类库的文档经常毫无意义当你试图理解某些功能的时候。我是指,诚实的说,像下面这个文档: Rx.Observable.prototype.flatMapLatest(selector, [thisArg]) Projects each element of an observable sequence into a new sequence of observable sequences by…
Angular2的NGINX配置
Comments
tags:技术
现代的浏览器已经支持HTML5的history.pushState,一种支持改变浏览器地址栏和历史而不发送实际服务器请求的技术。 记得以前的SPA(Single Page Application)应用是怎么做的么?在angular1里面,你会看到类似下面的地址: http://localhost:8000/home/#/login 这里用了标记#来告诉浏览器,我这个不是真实的地址,不要试图去服务器上查这个请求。 现在我们不需要这么做了,使用HTML5支持的浏览器,直接地址栏里面看到的结果就是: http://localhost:8000/home/login 是不是很赞?so far so good,直到你在你的nodejs服务器前面加了nginx。。。 一开始,看起来所有的东西都work,你的nginx配置可能如下: server { listen 80 default_server; server_name your.server.com; root /root/www; error_…
每个软件都应该专心做好自己的本职工作
Comments
tags:随笔
事情的起因是这样的:最近这几天,收到了几条如下短信: XXX添加你的XXX@XXX为支付宝好友 对于一个已经弃用支付宝3年多的人来说,还真是一件奇怪的事情。 (android版应用要的权限太多,如果选择不给权限就自己狗带) 是我人品太好,春节大家都要给我发红包么?Navie... 稍微了解了下,原来支付宝做社交之心未死,春节之前,搞了个“集五福”游戏。每个人发三个“福”,要问朋友要2个福,才能凑齐龙珠召唤神龙平分2亿红包。 这么看来,阿里还是一个很执着的公司,以前“来往”的惨败,并没有阻挡它执着的往社交的道路上一(pin)往(ming)直(si)前(ke)。 然并卵 不管是支付宝还是淘宝,所有人的第一印象都是做交易的。交易才是这些软件的基本属性,不专注于交易的方便、安全等自己这个圈子的功能,拼命要挤进社交的圈子,实在是不知所谓! 你能想象么?一个人把自己的朋友关系维护在支付宝里面,没事拿出支付宝和朋友聊天?即使这一幕成真了,也只不过是支付宝变成了微信而已。支付宝本来立足的交易呢? 智能手机上做每个领域都有几枝独秀的应用,…