Posts Tagged ‘ IT

Rooted View In Windows

Windows 的资源管理器(Explorer)有个特别的功能:Rooted View.

就是将某个文件夹作为根结点呈现, 该文件夹以外的目录都不会显示.

可以在运行里输入: explorer /e,/root,C:\Documents and Settings\Administrator\UserData\A片 即可呈现该模式.

当然, 比较好的做法是将常用的工作目录等写在bat文件里面放着桌面上当快捷方式. 比如我就习惯将Eclipse的几个工作空间以这种方式建立起bat快捷方式. 一键打开,心无旁骛.

题外话: 最近公司也开始提供茶包了, 可是我总是无缘无故的想到"两只蚊子"的笑话, 影响我使用茶包的欲望.

永远不要在Java中使用String(至少也尽量少用:-)

永远不要使用(未封装)的String或long,int. 为什么呢? 因为这些基础类型(Primitive)没有语义(Semantic meaning). 它们很难被理解,维护和扩展.

空口无凭,举例为证: 假设有个例子是订阅电影票的服务.

试着比较:

public void bookTicket( String name, String firstName, String film, int count, String cinema);

与:(当然实际使用时,用一个Order对象会更好:-)

public void bookTicket( Name name, FirstName firstName, Film film, Count count, Cinema cinema);

很明显,第二个要容易阅读的多. 尤其是当在IDE中使用自动补全的时候,bookTicket(String arg0, String arg1, String arg2, int arg3, String arg4)bookTicket(Name arg0, FirstName arg1, Film arg2, Count arg3, Cinema arg4)差的太明显了.当某个接口被置于一个不带源码的jar包内时,这种情况很常见.

再尝试比较:

void book(String orderId);

与:

void book(OrderId order);

第一种情况下,开发人员看到这行代码会考虑:a.)怎样获得一个orderId 和b.)orderId到底是什么玩意, "1212", "ABC-123" or "12-34-45-SCHWEINEBACKE". 第二种情况,他可以去查看OrderId类的Javadoc或者使用手册获取它的正确用法. 或许觉得, 这不过是个orderId罢了. 但在遗留系统中,名称和语义是经常不一致的. 我曾经见过一个系统里面把order ID命名为"orderId", "auftragsId", "id"以及其他什么东西,而且居然指的是同一个东西: order ID!

多使用类替代基本类型不光有语义上的优势. 扩展上也更佳: 比如你可以更轻松的将OrderId类里的int替换成long, 增加校验和id生成逻辑. 相比而言,最初若使用String类型要做这些就困难的多.

使用fluent interface实现

fluent interface可以使代码更短,编写更容易. Google Collections的MapMaker是个不错的例子:

ConcurrentMap graphs = new MapMaker()
    .concurrencyLevel(32)
    .softKeys()
    .weakValues()
    .expiration(30, TimeUnit.MINUTES)
    .makeComputingMap(
        new Function() {
            public Graph apply(Key key) {
                return createExpensiveGraph(key);
            }
        });

使用fluent interface实现的如下所示,像简单的领域类(Domain classes)或者像不可变值的对象. 仅仅是封装了String并增加了一些语义的信息给String.

public class Name {
   public Name(String name) {
      ...
   }
   public static Name name(String name) {
     return new Name(name);
   }
}

有人或许觉得这种方式太过繁杂(noisy)了. 比如:

new Customer(new FirstName("Stephan"), new Name("Schmidt"));

要比如下的直接使用String参数的方式繁杂.

new Customer("Stephan", "Schmidt");

但,不可否认,第一个要更加容易理解, 若使用静态方法,第一个方法也可以变为:

new Customer(firstName("Stephan"), name("Schmidt"));

这样也较好的解决了参数较多时让人糊涂的问题.

[文章翻译自:http://codemonkeyism.com/never-never-never-use-string-in-java-or-at-least-less-often/ 请任意转载

春哥开始占领IT行业

如果你看过<关于春哥的100个最棒的事实>, 并且至今还津津乐道回味无穷的话, 那么春哥可没有停下脚步. 而是继续势如破竹的占领IT行业, 现在他/她在IT行业又再呼风唤雨:

  1. 春哥的键盘没有退格键,因为春哥从来没有输错的时候。
  2. 春哥只要瞥一眼你的桌面就知道你最近上过哪些成人网站。
  3. 春哥从来不用vim/emacs,因为cat对他来说就是一个相当够用的编辑器了。
  4. 春哥编程序从来不需要编译器,因为春哥用的是机器语言,写出来保存后可以直接运行,而且从来不用调试。
  5. 春哥可以从你的/dev/null中发现并破解你的root密码,所以任何Unix系统对春哥来说毫无安全可言。
  6. 春哥的计算机从来不需要重启,因为春哥的系统(Chun Ge OS)不会出任何问题,而这个系统据说是春哥用抽一支烟的功夫用机器语言写成的。
  7. 自从有了春哥,软件工程彻底完蛋了。
  8. 世界上最准确的电子时钟也不如春哥心中的时钟准确,所以NTP其实最终都是到春哥那里去同步的。
  9. 春哥都是一个比特一个比特地来完成网络数据传输的,但即便如此,世界上最快的计算机也仍然跟不上春哥的传送速度。
  10. IBM深蓝计算机和春哥下国际象棋,在春哥让了它128步的情况下它仍然输了,哦,对了,春哥只有一个“国王”。

春哥的的十万马力七大神力等待你的继续发掘.

[注: 部分关于春哥的神话参见Chuck Norris]

挨踢人士

Funny_Photos_2_3

这就是程序员 %>_<% 我泪如雨下