Visual Studio Code – Better than Atom

之前推荐过Github的Atom,但之后它的表现不太让人满意,真的非常非常的慢!!

再之后就开始使用Visual Studio Code,非常惊艳的Microsoft产品,运行很快,各种插件也很全,还能跨平台。现在已经全面用它来替代Atom和Notepad++,大家也快去试试吧!😬

好用的Spacemacs!

作为Emacs粉,以前最麻烦的莫过于安装各种package和设置各种配置,常常把各种文件拷来拷去的。偶然的机会看到了Spacemacs这个项目,试用之后,感觉真是非常方便。

  • 安装简便,基本就是用git clone得到最新的版本,还可以简单的升级。
  • 默认的配置非常好用,反正比我之前的好,我在配置包丢在网盘上了。😁
  • 安装package非常简单,基本就是几条命令,再不用网上找各种包了。
  • 强大的个人定置,可以分Layer。但其实对我没什么用,基本的已经很好了。

Emacs粉应该果断试试,不会让你失望的!戳这!😋

 

Emacs Keybinding in Windows Everywhere!

Keybinding之争从来就没有消停过,有人爱VIM,有人喜Emacs,没有对错,只是习惯。我属后者。

如果一个IDE或Editor没有Emacs的Keybinding,会被我无情的唾弃,所以喜欢Eclipse (with Emacs+),所有Jetbrain的IDE(IDEA,Pycharm)。

最近发现一个强大的小软件XKeymacs(惭愧,才发现,-_-!!),可以让所有Windows Application使用Emacs Keybinding。

本人亲测,在Visual Studio里,基本的键位表现完美。戳这下载

 

Maven搭配Ant,使构建过程更灵活

Maven使构建变得规范、简便,但在某些时候还是感觉Ant更容易控制,把两者结合起来使构建变得更加灵活。Maven所定义的构建模型,再加上一些Plugin的帮助,让我们每容易的实现两者的结合。下面看个例子。

一个例子

项目中遇到这样一个问题,程序要检查某种License,License的版本号在另外的配置文件中定义。基于安全考虑,最好把版本号在编译期就写到某个常量中,而不在运行期读取某配置文件。假设我们要把版本号写入到某个enum类型的常量里,之前我们可以准备它模块文件。所以基本的构建流程如下:

  • 准备源文件
    • 读取License版本号
    • 读取Java模版文件
    • 版本号替换
    • 生成Java源文件包含最新的版本号
  • 编译源文件
  • 测试
  • 打包

实现

先看如下的代码目录结构(所用代码都在Github上)。

Selection_003

  • ant_replace_license_version.xml是Maven将要调用的Ant脚本
  • ant-contrib-1.0b3.jar包含了很多ant的扩展,有很多非常Powerful的工具。在这个例子中我会使用loadfile, propertyregex等功能。
  • License.template是License.java的模板文件
  • pom.xml是maven脚本
  • version.h是一个C/C++的头文件,里面定义了VERSION

构建过程就是要把version.h里版本号取出,替换模板文件里的占位符,然后生成真正的License类,并放到包com.innoli.sample中,由App调用。

具体文件内容

version.h

License.template

ant_replace_license_version.xml

使用了ant-contrib的扩展,完成了读取、查找、替换、生成新的类文件等工作。

pom.xml

使用了exec-maven-plugin来调用ant脚本,也可以使用Apache Maven AntRun Plugin, 但它MS使用了很旧的ant。在process-resources阶段,生成License类。

 

编译

一切就是这么简单!

Set of P4 Command Alias

VirtualBox果然还是不及VMware, 越用越慢,让人崩溃啊。现在公司又不让自己装软件了(正版也不行),只好另辟蹊径。好在Java可以跨平台,于是便在Window 7里新搭了开发环境,在Window下写代码和Unit Test,去Linux下编译验证,代码通过P4 Shelve传递。几次下来,发现P4 Command挺方便,总结几个Alias和大家分享。 :lol:

 

Print more logging messages during debugging

Sometimes, in debug mode,  more logging messages could be very helpful. We can change code to add more logs. But it’s not efficient as the code need to be re-compiled and later some log message may need to be removed after debugging.

Java debugger provides very powerful way to achieve this, which allows to print more messages and even more.

Take Eclipse for example, here I have a simple HelloWorld to calculate the sum from 0 to 99. In debugging, I want to see how sum changed in the loop but I don’t want to stop application and click “Continue” every time.

12-12-2014 5-31-25 PM

So first, I added a break point on line 8. Next, I edited the “Breakpoint Properties”. In the conditional text input, you can print some message first and make the return of expression as false.

12-12-2014 5-35-40 PM

To return false will make debugger not stop at line 8, but just print the log messages I want.

12-12-2014 5-37-57 PM

You can see it’s totally non-intrusive. Actually, you can put more complicated statements there and also you can control when to return true or false. It’s very flexible. In other IDEs, such as JetBrains IDEA and Netbeans, there are similar functions.

Add watchpoint for variables in Eclipse

Sometimes, in debugging, we want program stopped when some variables are accessed or modified. To set traditional breakpoints for this case, you have to spend a lot of time to find all places to access or modify variables. It’s even harder when variables are passed to other object or the derivation hierarchy is complicated. In this case, watchpoint is a good helper.

In Eclipse, it’s quite easy to set watchpoint. In “Outline” view, you can right click on the variable you want to want and select “Toggle Watchpoint“. 2014-11-06_13-21-43

Then you can find a new watchpoint in “Breakpoints” view. You can see the icons of breakpoint and watchpoint are different.

2014-11-06_13-24-02

By default, watchpoint will be hit when accessing or modifying the watched variable. To change it, we can simply right-click the watchpoing and select “Breakpoint Properties…“.2014-11-06_13-27-11

 

 

Eclipse插件之EHEP

开发过程中偶然需要到查看Tar文件的格式,发现在Emacs里对Tar文件做了特别的处理,不能显然文件的原貌。网上搜索之后,发现Eclipse里有个很给力的插件。它就是EHEP。

安然很简单,用下面的Update Link,

http://ehep.sourceforge.net/update

当打开二进制文件时,在Editor中选择“Hex Editor“,

2014-11-04_12-01-52

然后就可以看到可爱的二进制文件了。

2014-11-04_12-03-40

 

Eclipse必必装插件之Mylyn

以前早听过Mylyn的大名,但因为公司没有配套的软件,一直无缘尝试体验。前段时间,公司把Perforce,JIRA都做了升级,让我终于可以一睹Mylyn的真容。当真是极好的!必装,必装,必装装啊!

Mylyn的好处真不是一句两句可以说清的,它可以和各种开发辅助软件相连,如代码仓库(Perforce,SVN等),代码Review工具(如Gerrit, ReviewBoard等),持续集成工具(如Hudson/Jenkins),问题追踪工具(如JIRA,Bugzilla)。比如你在Eclipse里可以查看/更新JIRA Ticket的状态;直接在Eclipse里Review别人的Code Change并Comment;在Eclipse里查看Jenkins的出错报告并重新集成一下。

我这里只想说说它的另一大好处——Task-focused的IDE工作环境。

先设想一下没有Mylyn的工作环境…

昨天打算要某JIRA Bug,突然QA又发了两个严重的Bug,都急着要修,昨天跟了很晚,没什么头绪。今天看着Eclipse,打开了50+ Java Editor,有意无意地迁出了30个P4上的文件,都在Default ChangeList里。简直一团糟!Java Editor不知该不该关,忘了打开Editor的原因,P4上迁出的文件一会还要分到不同的Checklist里。啊,简直要崩溃了!

也许你要说工作应该更有条理一些。可程序员都知道,活儿真多的时候,没人慢条丝理的在各种工具之间换来换去,至少我不会。:)

当我们有了Mylyn…

有什么工具来帮你把繁乱的工作变得条理清楚吗?Mylyn可以!它可以帮你把不同的工作分类管理好,让你方便的在不同任务间切换,而你只需要记得轻点几下。下面简要说说。

和JIRA连起来

选择JIRA的Connector,

2014-06-24_13-41-39

设置JIRA的登录账户(注意,JIRA服务器的Remote API要先Enable,不然没有办法连接上。)

2014-06-24_13-39-56

连接之后,要做一个所谓Query,其实就是在JIRA里寻找关注的Ticket,可以直接选择某个JIRA里的Filter,Connector也提供一些简单的Filter,比如“Assigned to me”.

2014-06-24_13-43-03

设置完成Query之后,就可以得到一个Task的列表。

2014-06-24_14-08-04

Make your environment Task-Focused

让整个Eclipse IDE进入Task-Focused状态非常容易,选中某个Task,在Context Menu里选择”Activate“。

2014-06-24_14-09-11

随后整个IDE就围绕这个Task进行调整。

  • 对于没有历史的Task,Eclipse Editor Area会被清空;对之前Activated过的Task,打开过的文件会被Restore在Editor Area中。新打开的文件也会加到Task的环境中。
  • Perforce Eclipse Plugin会把当前Task的Pending ChangeList设为Active ChangeList。如果之前Task没有Changelist,Perforce会新建一个。新的迁出都会放到Active CL里By Default。
  • 此外,所有有”Focus on Activated Task”图标的View,都会调整各自的内容,只把浏览过的文件/方法放到View中。2014-06-24_15-02-31包括Package Explorer,Outline,Task,Problems,新的Mylyn还支持Breakpoint等等。

退出Task-Focused状态,只需简单的Deactivate Task即可。切换到另一Task,只需Activate另一个Task即可,同时只能有一个被激活的Task。

总结

有了Mylyn这个好伙伴,开发人员可以轻松在多的Task之间切换,为不同Task打开不同文件,浏览不同的方法/函数都会被Mylyn很好的维护和重建,工作会更加有条理,效率也会大大提高。

我已经离不开它了! :grin: