CAT | IT
如果希望使用半透明背景色,又觉得用24-bit PNG 太笨重,RGBA 这个时候就可以帮到你了。这个来自于 CSS3 的好东西。
应用它还有个最大的好处是,不用担心设置半透明背景会一刀切影响到子元素的透明度。
实现方案与兼容性见这篇 blog
就是应用起来,不是那么的方便,涉及到一些数值换算,比如通常我用十六进制的颜色值,小数表示的 alpha 值,而十进制的 RGB 颜色值和十六进制的 alpha 值就显得很特别,每次都进行换算比较不符合懒人的做法。
于是就有了这个小工具页。
还有就是实现细节上和上面的 blog 介绍的有点区别。
欢迎使用。Enjoy!
location 对象,一个不太起眼的对象。
对于这个 URL “http://localhost:8000/lab/index.html?key=1#fly”,它包含了下面的属性。
hash: #fly host: localhost:8000 hostname: localhost href: http://localhost:8000/lab/index.html?key=1#fly pathname: /lab/index.html port: 8000 protocol: http: search: ?key=1
这篇文档里面有相关属性的说明。不过还有一点不太起眼的地方,hash 和 search 的先后顺序。
作为对比,有“http://localhost:8000/lab/index.html#fly?key=1”
hash: #fly?key=1 search:
各个浏览器上表现都是一样的,hash 先出现的话会吃掉 search 的,这让我有点费解,这个顺序还真那么重要吗?
当我们点击一个锚点的时候浏览器会在整个 URL 之后加上 hash的,这样似乎也挺好理解的。
只是如果需要手工拼接 URL,那就需要注意一下这个顺序了。
开发中经常用到 maven jetty:run,特别是它支持 多个 webapp 资源目录 的特性,在开发环境中相当有用。比如,src/main/webapp 是 prod 的资源,而有些开发或者测试时用到的资源可以安心的放在 src/test/webapp。可以 参考这里 详细了解怎么使用。
但是,迁移了环境之后,发现它总是报错:
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to configure plugin parameters for: org.mortbay.jetty:maven-jetty-plugin:6.1.22
(found static expression: 'src/main/webapp,src/test/webapp' which may act as a default value).
Cause: Cannot assign configuration entry 'resources' to 'class [Lorg.mortbay.resource.Resource;' from 'src/main/webapp,src/test/webapp', which is of type class java.lang.String
但是奇怪就在于,在 eclipse 的 maven 插件里面报错,但在命令行执行却没有问题。基于懒人原则,只要有路可走,不深究这个问题。可是当我再一次迁移至 linux 环境下时,命令行报错了。无路可逃的我只好 向 google 求救。
经过一番扫描,发现有先行者了,评论将矛头指向 JAVA 的版本以及操作系统,还有提供了一个可以尝试的修改:
<baseResource implementation="org.mortbay.resource.ResourceCollection">
<resourcesAsCSV>src/main/webapp,src/test/webapp</resourcesAsCSV>
</baseResource>
试之,可行。这是传说中的 maven overloading bug。文中还提到了和 contextPath 的设置有关,敬请留意。

分析新的需求,确实需要增强 jscombiner 了。之前写了一半,时间不够,大家急着看效果。今天把另外一半补上。再修补一下,可以升级到 0.4-SNAPSHOT 了。工具,好用是最实在的。
这次主要是增强了 classpath 的概念。原先使用时不需要设置根类路径,根据文件中的 @class 声明来反向定义根类路径。相应地,入口调整为 buildHierarchy(String className)。外表看来变动很小,而且实现着一样的效果,但是里面整个寻址方式都变了。
代码本身没什么值得深究的。不过结构变了。几番修改,有些共通点:
- 重要的功能需要规划
- 实现的进度是看需求的
- 不到最后不得不修改结构,不会乱动
- 测试用例需要有一定的抽象
- 重构很重要
- 结构发生变化,重写比重构快
java · javascript · jscombiner · tools

乱贴图:没呼也来,挥之不去的大雾,笼罩着一切,让我看不清到底通向什么地方
如往常一样,一周到了某个时候,就会打开下载站点,寻觅是否有感兴趣的新资源下载,通常是美剧。与之相对,我亲爱的同事们都流行直接在线看,只要网速足够。另外花时间下载,要关心下载进度,还要关心资源下载好之后的存放等一个一个事情,虽小,但是与在线观看相比,还是显得那么的多余。
呼之即来,挥之则去的感觉是挺爽的。
我也一直在思考那么一种构建方式,Web 应用程序由模块组成,页面上运行的脚本可以按需加载所需要的模块,不过暂时只是在某个程度上实现,还未达到所想要的效果。想要呼之则来,还是没那么容易的,更别谈挥之则去了,幸好目前还没有那样的需求。
可以想象,如果可以稳定地实现按需加载(不仅仅是脚本,所有页面上需要用到的资源),很多有趣的功能都变得有可能了。看来要好好地做做研究,看看现在到底在处理这方面问题时有什么样的方案,什么样的技术来支持。
什么时候才能达到想要的效果呢?或许还需要浏览器进一步进化,增强脚本的功能。
想吧,想吧,继续想吧。
最近老切换机器,但像Eclipse这样的工具还是必须用到,但是每次新建一个java文件,文件头自动生成带有 @author 的注释。
不过问题是那个 @author 是按照系统用户来的。虽然SVN提交代码的时候有准确的用户名,但是文件里面那个不是每次都记得要修改。
以前是通过修改新建的文件模板来达到效果的。
模板里面是 @author ${user},里面 ${user} 是一个系统变量,可以通过下面的语句拿到。
System.getProperty("user.name")
修改这个值可以通过
/path/to/eclipse -vmargs -Duser.name="My Name"
或者
修改eclipse.ini
...... -vmargs -Dosgi.requiredJavaVersion=1.5 -Duser.name=leegorous ......
重新启动 Eclipse 就起效了。
http://opensource.adobe.com/wiki/display/flexsdk/Downloads
一开始看总有点茫然的,怎么有三个下载链接?
Free Adobe Flex x SDK | Open Source Flex SDK | Adobe Add-ons for Open Source Flex SDK
到底是哪个跟哪个?
页面上方有几段文字,是被我skip掉了,里面有写三者之间的关系
基本就是 license 的区别。
Adobe Flex SDK 是包含开源和闭源的组件。
Open Source Flex SDK 是仅包含开源组件
Add-ons 则是闭源组件
可以简单的理解为
Adobe Flex SDK = Open Source Flex SDK + Adobe Add-ons for Open Source Flex SDK
可以根据自己的版权需求和应用需求的情况去选择
adobe · flex · opensource
这个任务是要求每秒触发一次。
一开始我尝试用 Timer 的 scheduleAtFixedRate,通过简单的测试,发现它会慢慢地累积形成时间差。
虽然这里不要求非常的精确,但是如果只是在某点附近徘徊,不会发生累积的,听起来是不是会好一点呢?
于是就诞生了下面的代码。
while (true) {
try {
long i = 1000 - System.currentTimeMillis() % 1000;
if (i > 100) {
Thread.sleep(i);
} else {
Thread.sleep(1000 + i);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(System.currentTimeMillis());
}
这里定的那个参照点就是每秒的零毫秒,先获取当前毫秒数,计算出到下一秒之间的毫秒数。
接下来的比较很重要,如果希望每秒只执行一次的话,这个是必须的,因为 java 的 sleep 真的不太可靠(这也是为什么需要和100毫秒做比较),实际执行时那是一个震荡状态,把 else 去掉之后会出现意想不到的现象。
通过打印结果,可以看出基本符合我的要求了,行啦。
问题是如果想要更加精确一点,要怎么做呢?
Maven 的 jetty-plugin 很好用,我是蛮喜欢,一直在用,现在做开发做测试基本离不开了,一条命令 mvn jetty:run 下去,感觉一个新世界被打开了一样。
不过在 window 上的 eclipse 里,它并不是很乖,主要是停不下来,传说这个是 window 平台上的一个硬伤,幸好解决方法还是有的,采取调试,Remote Java Application 的调试里有个选项 Allow termination of remote VM,可以在一定程度上解决这个问题,有点曲线,不过也方便,随时可以调试。我主要还是在 linux 环境下使用,因此这个问题基本对我不影响。
除了平台的问题,还遇到了一个 Form too large xxxxxx>200000 的问题,一开始没看清楚报错,使劲在 struts2 的范围里面找解决方法,以为是某个设置影响它约束了接受的 form 的大小。还好在无敌的 google 引导下,终于清楚了这是 jetty 在报错,它的默认参数里面有个限制。问题清楚了,解决方法却有点扑朔迷离,最初找到一个 maven.jetty.maxformcontentsize,看起来很接近,实际上只是用于特定软件内,扩大范围至 maxFormContentSize 再找,终于找到了一样的情况了,恼火的是一点进去立马撞墙,这时真的是为了接近真相,不得不继续深入虎穴(需翻墙)
下面配置的片段,想设多大就多大。
org.mortbay.jetty maven-jetty-plugin 6.1.12 org.mortbay.jetty.Request.maxFormContentSize 100000000 10
不过,问题是为什么 jetty 会有这样一个默认参数存在呢?
设置成非常大之后的确可以解决问题,但是会不会对性能之类的造成影响呢?

Linux's VISA
如果大陆那家发卡单位发行这类版本的信用卡,必将受到开源社区的大力关注,哪里聚集的正是饱含生产力,而且乐于奉献的消费群体喔。
Linux 对于我,从当初的为了装酷开始玩起,到逐步熟悉使用环境,再到将之作为全功能的开发平台。习惯的难以改变是可怕的,习惯的改变却是充满启发和鼓舞人心的。

