Play 2.0 中文资料--翻译附注解(持续更新中)

最近在研究 PlayFramework 2.0,主要关注在使用 Scala 来写 Play 2.0 的应用,下面是从官方文档进行的翻译,并加入了大量的自己的理解与备注( Unmi 注: 起头的蓝色文字)

  1. Play 2.0 中文资料 - 开篇
  2. Play 2.0 中文资料 - 安装 
  3. Play 2.0 中文资料 - 创建一个新的应用 
  4. Play 2.0 中文资料 - 剖析 Play 2.0 应用 
  5. Play 2.0 中文资料 - 使用 Play 2.0 控制台 
  6. Play 2.0 中文资料 - HTTP 编程 
  7. Play 2.0 中文资料 - 搭建你偏爱的 IDE 
  8. Play 2.0 中文资料 - Action, Controller 和 Result 
  9. Play 2.0 中文资料 - HTTP 路由 
  10. Play 2.0 中文资料 - 操控 Result  阅读全文 >>

Objective-C 类方法 load 和 initialize 的区别

过去两个星期里,为了完成一个工作,接触到了NSObject中非常特别的两个类方法(Class Method)。它们的特别之处,在于iOS会在运行期提前并且自动调用这两个方法,而且很多对于类方法的规则(比如继承,类别(Category))都有不同的处理。

而因为这两个方法是在程序运行一开始就被调用的方法,我们可以利用他们在类被使用前,做一些预处理工作。比如我碰到的就是让类自动将自身类名保存到一个NSDictionary中。

先来看看NSObject Class Reference里对这两个方法说明:

+(void)initialize

The runtime sends initialize to each class in a program exactly one time just before the class, or any class that inherits from it, is sent its first message from within the program. (Thus the method may never be invoked if the class is not used.) The runtime sends the initialize message to classes in a thread-safe manner. Superclasses receive this message before their subclasses.

+(void)load

The load message is sent to classes and categories that are both dynamically loaded and statically linked, but only if the newly loaded class or category implements a method that can respond.
The order of initialization is as follows: 阅读全文 >>

Scala 2.10.0 新特性之动态属性、方法

最早的介绍 Scala 语言的书都是以 Scala 的静态类型系统为傲。Scala 也算是个脚本语言,却不像其他许多脚本语言那样类型是动态的,只有执行时才确定,而 Scala 在执行前就确定了类型,比如依赖于比 Java 更强大的类型推断行为。

静态类型不光是变量类型是确定的,还有比如在使用  qual.sel 时,sel 这个属性或是方法(Scala 的访问一致性,属性和方法有时候并没有那么大的区别)必须在 qual 的类型中声明了的。

Scala 思考再三还是加入了 Dynamic Types,这个特性在 Scala 2.9 中是试验性的,必须用 -Xexperimental 进行开启,到了 Scala 2.10.0 中,只有代码中 import scala.language.dynamics 就可用了,或是编译时加 -language:dynamics 选项。

虽然 Scala 2.10.0 加进了 Dynamic Types 特性,但 Scala 仍然是静态类型的语言,因为在编译器同样会检查多出来的类型。

有了 Dynamic Types 之后,Scala 又可更 DSL 了,方法名的动态上可以让它随时包括深刻的业务含义。相比 Java 的 DSL 的能力就太逊了,我们几乎无法在 Java 面前提 DSL 这回事。 阅读全文 >>

JavaDoc 编程,书写自定义的 Taglet 支持 @unmi 等

javadoc 可为我们的 Java 项目生成 API 文档,别人的应该是看得多了,自己的可能不好意思晾出来看。那 Java 源代码里的 @author, @see, @param 等应该是司空见惯了吧。除此之外我们还可以自定义自己的 tag,并让它们的内容按照我们需要的格式生成到 javadoc 文档中,或作他用。还记得没有 Maven 的时代我们是怎样用 XDoclet 生映射文件的吗?现在的 Taglet 定制想要做的事情大抵如此。

执行一下 javadoc 命令看看,一堆的参数可以指定,又有学问在里头,且看:

-tag <name>:<locations>:<header>  Specify single argument custom tags
-taglet                           The fully qualified name of Taglet to register
-tagletpath                       The path to Taglets

-doclet <class>           Generate output via alternate doclet
-docletpath <path>        Specify where to find doclet class files

关于 doclet 部份这儿暂且不说,单讲 tag 部分的东西。

对于自定义 tag,简单的时候,用参数 -tag  都可以不写自己的 taglet 类,例如有这样一个代码: 阅读全文 >>

Play 2.0 中文资料 - 模板引擎(语法)

Unmi 注:因为是 Web 框架,所以展示层必不可少,也就是接下来两章,我们进入到 Play2.0 中的模板引擎的世界,不同与Play 1.x 让你眼花缭乱的 ${}, #{}, @{}, @@{}, &{}, %{}% 和 {} 如此众多的标签样式,而在 Play 2.0 中只有一个魔幻的 @ 符号。这就叫化繁为简,Play 1.x 的模板是基于 Groovy 的,而 Play 2.0 是基于 Scala 的,它在效率上也改善不少。

基于 Scala 的类型安全的模板引擎

Play 2.0 带来了崭新而真正强大的基于 Scala 的模板引擎. 这一新引擎的设计灵感来自于 ASP.NET 的 Razor.  具体表现在:

  • 简洁, 富有表现力, 且流畅: 它最小化了一个文件所需的字符和按键的数量, 并且开启了一个快速而流畅的代码流. 不像多数的模板语法, 你不必中断你的代码去显式的告诉你的 HTML 说这儿有一个服务端代码块. 解析器足够的聪明,能依据你的代码进行推断(Unmi 注: 推断出哪块代码应该由服务端来执行). 这使得简洁而富有表现力的语法显得更干净,  并且输入变得快速而有乐趣.
  • 易学: 源于其最小化的概念,而让你快速而富有成效的掌握它. 只需用到你现有的 Scala 语言和 HTML 知识.
  • 并非新的语言: 我们尽量选择不去创建一门新语言. 相应的,我们希望能让开发者使用它们现有的 Scala 语言技能。也就是要在选择你自己语言的情况下,提供一套模板标记语法,从而让你书写出令人敬畏的 HTML 结构流.
  • 可用任何文本编辑器: 无须特别的工具,在任何纯文本编辑器中都能保持高效. 阅读全文 >>

VMware 9 安装 Mac OS X 10.8 Mountain Lion 图文全程

本教程是在 VMware 9 下安装当前最新版的 Mac OS X Mountain Lion 苹果系统。曾在 VirtualBox/VMware 下安装过 Mac OS Lion 系统,但安装后是无法升级到 Mountain Lion 的,所以直接上最新版。以前虚拟机安装苹果系统总有点麻烦事要处理,比如 About This Mac 黑屏,分辨率修改复杂些,借助别的 ISO 文件来引导系统。下面是我在 VMware 9 中安装 Mac OS X Mountain Lion 的全过程,比以往的安装方法要简单。

首先,硬件上你要有一个支持虚拟化技术的 CPU,足够用的内存。我的软硬件环境是 i7 CPU + 8G RAM + Win7 64Bit 英文版。

安装所需软件:

1. VMware 9.0  -- 可在网络上下载并可找到注册码,VMware 8 破解后也没有 Mac OS X 10.8 的选项

2. VMware 安装 Mac OS 的补丁: unlock-all-v110  -- 它可让你在 VMware 中选择 Mac OS X 系统

3. Mac OS X Mountain Lion 下载: Mac OS X 10.8.torrent -- 下载来的文件是 InstallESD.dmg

4. 7-Zip 压缩解压缩工具,免费的,网络随处找得到,用 Winrar 都解不了 InstallESD.dmg 阅读全文 >>

Play 2.0 中文资料 - HTTP 路由

内建的 HTTP 路由器

路由器组件掌管把传入的 HTTP 请求转发到 Action.

一个HTTP 请求可被 MVC 框架看成是一个事件. 这个事主要包含两方面的信息:

  • 请求路径 (如 /clients/1542, /photos/list), 包括查询字符串
  • HTTP 方法 (像 GET, POST, …).

路由定义在 conf/routes 文件中, 它会被编译. 这表明你可以直接在浏览器上看到路由错误信息: 阅读全文 >>

Play 2.0 中文资料 - Action, Controller 和 Result

什么是 Action?

多数的请求被 Play 应用接收到,并由  Action 进行处理.

一个 play.api.mvc.Action 简单说来就是一个 (play.api.mvc.Request => play.api.mvc.Result) 函数,它处理请求并产生一个 result 发送给客户端.

Action 返回一个 play.api.mvc.Result 值, 代表着发送给 Web 客户端的 HTTP 响应. 上面的例子中 Ok 构造了一个 200 OK 的响应,它包含了 text/plain 类型的响应体.

建造一个 Action

play.api.mvc.Action 伴生对象提供有多个帮助方法用于构建 Action 值.

最简单的一个方法是以返回值为 Result 的表达式块作为参数: 阅读全文 >>

Play 2.0 中文资料 - 搭建你偏爱的 IDE

用 Play 进行工作其实很简单的. 你甚至不需要一个复杂的 IDE, 因为 Play 会在你对源文件作了修改之后自动编译和刷新, 因此你可以很轻易的使用一个简单的文本编辑器来工作.

然而, 使用一个现代的 Java 或 Scala IDE 或给予你很 Cool 生产效率, 比如即时的编译, 良好的重构和调试功能.

Eclipse

生成配置

Play 提供了一条命令简化了 Eclipse 配置. 为转换一个 Play 应用为有效的 Eclipse 项目, 使用 eclipsify 命令:

无需关联下载依赖的源文件 jars 包:

Unmi 注: 对于一个新建的项目,执行 eclipsify 之后会产生 Eclipse 必须的 .project, .classpath 和 .settings 文件,并且这个命令还会创建 test 和 target 目录。Play 1.x 的 play eclipsify 命令有些不同,它会生成一个 eclipse 目录,里面有三个分别用于运行, 调试和测试用的 launch 文件。 阅读全文 >>