2014年总结

一年一篇

又到了一年一篇时间了,今年真的有很多话想要说,也经历了很多很多很多,这些事是我在2013年完全想不到的。

但是没想到,我还是做了!

Netty 长连接服务

推送服务

还记得一年半前,做的一个项目需要用到 Android 推送服务。和 iOS 不同,Android 生态中没有统一的推送服务。Google 虽然有 Google Cloud Messaging ,但是连国外都没统一,更别说国内了,直接被墙。

所以之前在 Android 上做推送大部分只能靠轮询。而我们之前在技术调研的时候,搜到了 jPush 的博客,上面介绍了一些他们的技术特点,他们主要做的其实就是移动网络下的长连接服务。单机 50W-100W 的连接的确是吓我一跳!后来我们也采用了他们的免费方案,因为是一个受众面很小的产品,所以他们的免费版够我们用了。一年多下来,运作稳定,非常不错!

时隔两年,换了部门后,竟然接到了一项任务,优化公司自己的长连接服务端。

责任链模式

Chain of Responsibility

在 面向对象程式设计里, 责任链模式是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。

传送门:责任链模式

Java 中见到最多的对责任链模式的应用就是在Servlets Filters中了:

public class LogFilter implements Filter  {
   @Override
   public void  init(FilterConfig config) 
                         throws ServletException{ }

   @Override                      
   public void  doFilter(ServletRequest request, 
                 ServletResponse response,
                 FilterChain chain) 
                 throws java.io.IOException, ServletException {

      // do something
      
      chain.doFilter(request,response);
   }
}

利用 WeakReference 关闭守护线程

不要让 this 在构造期间逸出

《Java 并发编程实战》中有这么一段:

不要让this在构造期间逸出。

原因很简单,因为如果在构造期间创建了一个新线程并把this传递给新线程,this还没有准备完毕,新线程如果提前使用调用一些数据的话可能会有未知的错误。具体的错误和JVM的实现有关,可能大部分情况下没问题,但是一旦有了问题,你恐怕找都找不到。

参考:

小米手环评测

坑爹的咕咚手环

自从买了咕咚手环后一直对其他手环念念不忘…

因为咕咚的太难用了!罪证如下:

  • 待机时间只有4天
  • 固件从来不更新
  • 软件基本没更新过
  • 只支持iOS,Android手机明明也有蓝也4.0,可以连接但是同步失败
  • 材质感不好,略丑,搭扣很容易松
  • 不防水,不能带着洗澡

可惜别的手环太贵,直到小米手环到了…

Mac OS 中使用QQ域名邮箱

Google 被墙之后

Google 被彻底墙掉之后,最不方便的就是手机端的邮件、联系人和日历的同步了。

电脑上可以翻墙,手机上没买 VPN,也不想手机一直开着 VPN 啊…

寻思了一番后,发现国内目前做得比较好的也就只有QQ邮箱了,对应的功能全部有。

WordPress 迁移 Github Page + Jekyll

关于这次迁移

为什么迁移

博客写了5年,最烦的就是维护 WordPress 了。WordPress 的写作体验实在是太糟糕了,而且后台非常卡!

近几年 git 兴起,也衍生出了 Markdown 这样最适合程序员的写作方式。另外自己在一年内从 Windows 脑残粉变成了 *nux 脑残粉,更喜欢在 Bash 下干各种事情了。

所以趁阿里云过期之际,顺便把迁移这事做了。

恩,Github Page 是免费的!每个月立省 70!

为什么不迁移

Github Page + Jekyll 的方案很早就有了,我为什么到现在才迁移呢?

其实之前也考虑过,但是主要是遇到了如下难题:

  • 之前的文章是以 html 的形式存在数据库的,怎么做迁移?
  • 分类和标签怎么迁移?
  • 之前的静态资源怎么办?
  • 博客的 URL 会变吗?
  • 评论怎么办!

只是很久之前遇到的问题,今天回头看看发现,各个难点都有了很好的解决方案了。

所以这里给大家介绍一下~

Netgear3700v4 PK 小米路由器 mini

入手小米路由器 mini

小米路由器 699 版开放购买好久了,但是家里已经有了主路由,NAS 什么的也都搭建好了,没有必要再买一个。

这次 mini 版开售,终于买了一个,主要是想看看传说中的高性价神器到底怎么样!

 

参数对比

型号 价格 CPU 内存 无线 有线
Netgear 3700V4 499 Atheros AR9344 560 MHz 128MB 2.4GHz/5GHz 11a/b/g/n 1000M * 4
小米路由器 mini 129 MT7620A 580MHz 128MB 2.4GHz/5GHz 11a/b/g/n/ac 100M * 2

 

表格一列,一目了然。

论性价比,小米无敌,但是 mini 版的有线是硬伤!无线那么强大,有线竟然才 100M,应该还是处于成本的考虑吧。

但是实测下来怎么样呢?人家 TP 的参数也是很高的哦,实测才是硬道理!

电信光纤猫 HG8245C 破解

HG8245C

搬家后最痛苦的一件事就是,电信新版的光纤猫不能破解!所以不能从 NAT 改桥接让路由器直接拨号。

我也时常去网上搜搜破解教程,最近终于在淘宝找到了!最终花了60元找人远程搞定。

卖家人不错,我也帮忙推荐一下:http://item.taobao.com/item.htm?id=38921723002

git reset 在持续集成系统中的问题

持续集成

公司用上持续集成后开发效率大大提升,提交代码以后就会自动打包部署,分分钟见效!

所以自己在做东西的时候,也搭建了一套类似的环境。但最近却遇到了一个深坑。

 

reset and revert

git 中的resetrevert是两个非常有用的命令,它们的细节不是本文的重点,简单的总结一下:

  • reset可以让commit回退,就像从来没发生过一样。
  • revert可以自动生成一次完全相反的commit,以撤销之前的操作。

这次遇到的坑来自于reset,因为reset看似是一个时光机,但是有些情况下是无法抹去了。