Web.py Cookbook 简体中文版 - 交替风格

justjavac 发表于 2012-04-19

问题:

你想通过数据集合动态的生成交替背景色的列表.

方法:

Give templetor access to the int built-in and use modulo to test.

code.py

web.template.Template.globals['int'] = int

template.html

<ul> $var i: 0 $for track in tracks: $var i: ${int(self.i) + 1} <li class=" $if...

Web.py Cookbook 简体中文版

justjavac 发表于 2012-04-19

欢迎来到web.py 0.3的Cookbook。提醒您注意:某些特性在之前的版本中并不可用。当前开发版本是0.3。

格式

  1. 在编排内容时,请尽量使用cookbook格式…如:

    ###问题:如何访问数据库中的数据?

    ###解法:使用如下代码…

  2. 请注意,网址中不必含有”web”。如”/cookbook/select”,而非”/cookbook/web.select”。

  3. 该手册适用于0.3版本,所以您在添加代码时,请确认代码能在新版本中工作。


基本应用:

高级应用

...

javascript 是一门令人愉悦的语言

justjavac 发表于 2012-04-19

作为一名前端工程师,我承认我可能是有偏见的,但是我真的非常享受编写 javascript 程序。

javascript 代码可以 非常的优雅,也可以让人 崩溃。在很长一段时间内 js 在开发者社区中都是一个笑话。

但是现在 js 是一门聚光灯下的明星语言,越来越多的开发者加入到这个阵营。

这篇文章例举了几个我喜欢 js 的理由。

速度

Google 的 V8 js 引擎让我们可以在客户端和服务端更好的执行 js 代码,这就给复杂的 js 程序提供了基础。

我们现在可以发送几百KB的压缩后的 js 代码到客户端,并且可以预期客户端可以流畅的执行这些代码。

除此以外,js 也是非常容易编写和测试的。编写-保存-刷新,简单三个步骤就可以看到效果,这比任何其他开发环境都要快速。

我们现在也有 webkit 控制台和调试器,可以帮助我们方便的调试代码。

我最近也在尝试使用 Jasmine 来做单元测试。

离开Java,寻找更佳语言的10大理由

justjavac 发表于 2012-04-18

别误解,其实在我的职业生涯中,我已经编写了无数的Java代码;而且,我仍然认为Java一门伟大的(程序)语言。 相对于C++和Smalltack,Java已经有了很大的改进;但现在,即使是Java,也已经开始感觉到了其15年的积重。

事实上,在我的经历中,我总是不得不面对Java的设计和规范上的一些错误、缺陷和不足,这些东西,让我的Java程序员生活少有乐趣可言。

现在全世界的Java程序员有数百万之众,Java写就的代码更达数亿行,要是我说Java在不久的将来死去,这还有些远。不管怎样,随着一些兼容JVM的语言出现(我最钟意Scala)后,这些问题变得越发不能容忍了,我开始想,是时候慢慢离开Java了(但并不脱离JVM)。

具体说来,我认为Java语言的10大问题是:

1、缺少闭包(closure):

我想这个不需要解释了。函数式编程已经存在几十年了,但最近几年,它们获得了越来越多的关注,最主要的原因,是它可以自然地编写并行程序。

我部分的同意Joshua Bloch强调在Java中引入闭包的问题需要再想一想(BGGA提议的方式真的很糟),至少闭包的缺失,使得在Java中做任何真正的函数式编程都是不可能的。

2、缺少一等函数:

这个问题与前一个有些关联,但我认为它更糟糕。

在Java里,要达到类似效果的唯一方式,是使用著名的、丑陋悲惨的单方法匿名内部类,但这看上去的确是一个拙劣的方法。甚至在C#中,也通过代理机制,提供了一个更好的实现。

3、原生类型(Primitive types):

如果在Java中一切皆对象,那是多么完美啊,但他们偏偏不这样设计。因而,这一点导致了一些问题,比如,不能把一个int放到集合(Collection)里,这个在Java5中通过自动装箱特性得到了解决(下面会提到)。

它也造成了传值与传引用上的困扰,原生类型数据是通过值传给方法的(复制一份拷贝,然后传给函数),而真正的对象是通过传递(译注:其实是复制对象地址再传递,因此应该也是传值方式,只是由于函数内部可通过这个对象地址访问对象,因此效果上类似传引用)。

4、自动装箱(Autoboxing)和自动拆箱(autounboxing):

这个特性是为了解决因原生类型的存在所导致的问题,在Java5引入的。它允许静默地转换原生类型到相应的对象,但这常常导致其它的问题。

比如Integer可以为null,但int不能,因此这时JVM只能抛出一个难以调试的空指针异常(NullPointerException)。

此外,它还可能导致其它奇怪的行为,就像下面的例子,我们就很难理解,变量test为什么是false:

Intger a = new Integer(1024); Intger b = new Integer(1024); boolean test = a < b...

Java编程中“为了性能”尽量要做到的一些地方

justjavac 发表于 2012-04-18

最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了。

下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方。

1. 尽量在合适的场合使用单例

使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:

  1. 控制资源的使用,通过线程同步来控制资源的并发访问;
  2. 控制实例的产生,以达到节约资源的目的;
  3. 控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。

2. 尽量避免随意使用静态变量

要知道,当某个对象被定义为stataic变量所引用,那么gc通常是不会回收这个对象所占有的内存,如

public class A{ static B b = new B(); } 

此时静态变量b的生命周期与A类同步,如果A类不会卸载,那么b对象会常驻内存,直到程序终止。

3. 尽量避免过多过常的创建Java对象

尽量避免在经常调用的方法,循环中new对象,由于系统不仅要花费时间来创建对象,而且还要花时间对这些对象进行垃圾回收和处理,在我们可以控制的范围内,最大限度的重用对象,最好能用基本的数据类型或数组来替代对象。

4. 尽量使用final修饰符

带有final修饰符的类是不可派生的。

在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了使用者覆盖length()方法。

另外,如果一个类是final的,则该类所有方法都是final的。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。

5. 尽量使用局部变量

...