WordPress 终于又迎来一次次版本号的升级,带来几个便捷之处,如直接拖拽图片进编辑器中,随意缩放旋转。同时把 TinyMCE 从 4.0.21.1 版,这直接造成了我之前的那个添加代码的自定义工具按钮歇菜了,弹不出选项来。见 语法加亮插件 SyntaxHighlighter 的好伴侣,轻便的 TinyMCE 工具按钮 中描述的那个自定义插件。所以要把该插件升级下,使之兼容 TinyMCE 4,TinyMCE 从 3 到 4 的改变还真不小,界面上看到多了行菜单条,它的 API 变得大了去。
本文参考了:
1. http://www.tinymce.com/wiki.php/API3:method.tinymce.Plugin.createControl
2. http://www.tinymce.com/wiki.php/api4:class.tinymce.Plugin
3. http://www.tinymce.com/tryit/menubutton.php
现在改成了一个带三角的 MenuButton,如图: Read More- 最早是用 HTML 来自定义标签,现在觉得 HTML 写有关逻辑的代码就有点不伦不类了,HTML 里着重是显示代码。前有一篇 PlayFramework 1 模板应用 -- Java 对象扩展 学习了对 Java 对象扩展的方式,如果不是基于已有对象类型进行方法扩展来进行调用,就可以自定义 FastTags 的方式。
Java 对象扩展的使用是 ${obj.abc()}, FastTags 标签是 #{abc}...${/abc}。
FastTags 标签类继承自play.templates.FastTags,标签对应方法的原型是public static void _tagName(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine)
这些都是得益约定优于配置,下面来几个例子,分别说明默认参数,命名参数,及多参数,标签体的处理。 Read More - 涉及到页面显示的问题,用自定义标签总能够能事不少,即使是最原始的自定义 JSP 标签也有人乐此不疲,进化到 Play 中的自定义标签数得上很轻量级的实现,简单的只需要一小页文档 The template engine 就足矣。
概括起来 Play1 支持三种方式自定义标签:HTML 文件方式,自定义 FastTags,Java 对象扩展方法. 前二者为面向过程的方式,第三种方式为面向对象的方式,是在往某种数据类型追加一个方法。
确切的说针对 Java 对象的方法的扩展并不能称之为自定义标签。
一个这样的场景,股票价格变化值要显示在页面上,根据正,负,零,再加上不同的区域四种条件分别显示为不同的颜色,比如美国分别为绿色,红色和黑色(注: 美国股市显示的颜色正好与中国相反)。假设 priceChange 是 Integer 类型,我们就可以定义对 Integer 对象的扩展,所在类必须继承自 JavaExtensions 类: Read More
自动化构建工具真是缭乱纷呈,最早的 make, nmake, 到 Ant, NAnt, 进化到面向对象的 Maven, Gradle,由 Scala 而起的 SBT, SBuild,再就是今天要说的由 node.js 建立起的生态 Grunt。 Grunt 可以做什么呢,理论上只要有相应的插件支持,它可以应对任何构建任务,但它更为有力的表现是在前端方面。
Grunt 是运行在 node.js 环境,由 npm 来安装,所以首先要安装 node.js, npm, 它们俩的安装不多说,我这里的版本分别是:unmi@localhost ~> node --version
运行 Grunt 还要安装 grunt-cli, 使用命令 npm install -g grunt-cli,安装后我机器上 Grunt 的版本是 Read More
v0.10.24
unmi@localhost ~> npm --version
1.3.21- 我们在 Tomcat 中可以开启 SSL,用 HTTPS 来访问,见前一篇 快速启用 Tomcat 的 HTTPS 协议访问, 不过更接近实际的应用是 Tomcat 只担当 Servlet 容器,HTTPS 协议部份,甚至是静态页面是交给 Apache 的处理,Apache 与 Tomcat 之间有一个通道。 当然前端用 F5 那类负载均衡设备就另当别论了。
这里实践一下怎么开启 Apache 的 HTTPS,并与 Tomcat 进行整合的操作。平台是 Mac OS X, Apache2, Tomat8,其他平台或不同版本的应用软件配置类似。
第一步: 生成自签署证书
安全加密的东西都得证书,我们需要用到 openssl,没有就先安装它,命令是:openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key
上面命令可以指定生成 server.crt 和 server.key 文件的目录,默认产生在当前目录下,假设这两个文件生成在/etc/apache2目录下。 Read More - 记录下这个其实没有多大的意义,新入手 Play 框架的应该直接就是用版本 2 了,只因我们还要系统工作在 Play1 下,所以记下来,估计在 Play2 中已无借鉴作用了。
我们在 Play1 中访问外部 WebService 资源都是用WS.url(url),然后调用它的 get(), post(), delete() 等相对应的 HTTP 请求方法。我们可以系统中所有通过 WS.url() 访问的 URL, 需找到切面,Play 是在哪里为访问的 URL 创建请求的。
看 WS 类的实现,它是一个 PlayPlugin 插件,其中定义了private static WSImpl wsImpl = null;
来看 Play 是如何获得 WSImple 实现的,WS 插件的初始化方法中: Read More - 有时候安全考虑会要开启 Tomcat 的 https 协议访问,最快速的配置,两步
1. 创建 keystore 文件
执行 JDK 带的命令keytool -genkey -alias tomcat -keyalg RSA
按命令提示各个信息即可,最后在用户主目录下创建了一个 .keystore 文件
2. 配置 Tomcat 使用 keystore 文件
打开 server.xml 找到下面被注释的这段Read More1<!-- 2<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" 3 maxThreads="150" SSLEnabled="true" scheme="https" secure="true" 4 clientAuth="false" sslProtocol="TLS" /> 5--> - 有了前面的 SAM,Lambda 表达式,以及默认接口方法作铺垫后,我们可以去很好的去理解 Java8 用 Lambda 表达式操作集合的基本原理了。此篇我们想要化解的示例代码如下:
1package cc.unmi; 2 3import java.util.Arrays; 4import java.util.Collection; 5import java.util.List; 6import java.util.stream.Collectors; 7 8/** 9 * @author Unmi 10 */ 11public class TestJava8Collection { 12 public static void main(String[] args) { 13 Collection collection = Arrays.asList("abc", "cde", "efg"); 14 List list = collection.stream().filter(x -> x.contains("c")).collect(Collectors.toList()); 15 list.forEach(x->System.out.println(x)); 16 } 17}
如果对其他支持闭包的语言,如 JavaScript, Groovy, Ruby, Scala 等有所了解的话,很容易看出前面的代码输出为abc
cde Read More 进入 Java8 之后我们会发现接口可以有方法实现了,这与我们一直看待 Java 接口的观念产生了冲突,不过也别急,接口中的方法实现必须是一个默认方法,即像
本文旨在探讨 Java8 的默认接口方法存在的合理性,Java8 在这点上如何保持与前面版本的兼容性。1interface Shape { 2 default boolean isShape() { 3 return true; 4 } 5}
Lambda 和方法引用使得 Java 语言更具表现力。说到 Lambda 和方法引用的关系,Lambda 表达式的目的就是让你更为便捷的去绕过对象直接引用方法。
接口应该是相对稳固的,我们应该有这样的经验,类中使用了接口中定义的常量,如果在接口中改变了该常量值,单纯的替换接口对应的 class 文件是不奏效的,因为编译类时其实是把接口中的常量直接固化在类中了。如果类中要体现出最新常量值,那么使用接口的类也要重新编译。即使在接口中添加或改变了方法定义,也不能强制使用到它的类重新编译,早先的类完全可以自由的运行,因为接口中定义的常量和方法的所有内容都在自身,类一旦编译后便可脱离所实现的接口而运转。 Read More- 用 Java 在控制台下输出用
System.out.print()这样的方法,那么要在同一行输出象 FTP 传文件那样的进度指示怎么做呢,它需要在同一行相同的位置上擦除并输出新百分数。比如前一行打印了 1%, 下一次就把 1% 擦除掉,同一位置上打印 2%,就形成了走进度的效果。如下:
我们要用到的办法是System.out.print("\b")就会在控制台下往回删掉一个字符,如果你想回删多个字符就打印多个 "\b" 吧,只回删除到当前行首,也就是不回影响到上一行的输出。怎么删除当前行全部输出或指定的字符数呢,两个办法:
输出足够多的 "\b",会删除到行首为止,这样做其实也不保险,谁知道上一行会多少字符呢
精确控制回删多少个字符,有时候也需要保留前面一些内容 Read More