betterWeibo – 新浪微博Chrome插件

better Weibo – Chrome插件,主要功能:保持按时间排序、移除新浪微博广告、移除新浪微博无聊的元素,调整UI、将视觉和交互重点放在微博阅读上…等等
整体思路是减少微博界面对信息阅读和发布的干扰。

大爱韩寒 – 韩寒Android移动客户端

花了不少时间做了一个关于韩寒博文的网站和韩寒博文的Android客户端,功能其实很简单:整理收集了韩寒2005年开博以来的所有博文,可以随时浏览,不被新浪和谐。

关于Phonegap的一些看法

呃,phonegap今年发展不错啊,至少“跨平台”一个词就是多少人无法拒绝的一个诱惑,而且使用HTML+CSS+JS开发,可灰常有吸引力。网易轻博LOFTER就是用phonegap开发的,但是目前只有iOS版本,Android版本似乎还在开发中。
正好之前我也用phoengap做过demo,说一下我的感觉吧,只针对Android。

屏蔽电信广告

如果电信修改首次网络访问页面为自己广告页面、劫持错误域名到自己广告页面,这都是习以为常的明骚的话,那这种在正常网页中植入JS脚本然后不停弹窗的行为真是让人发指的暗骚。我对中国电信这种下三滥的、变着法子的、无耻流氓的行为真的是找不到形容词来表达我对其的愤怒。我tmd的每个月给你电信交的网费是给你干嘛的啊???!!!

Chrome插件:114adblocker,屏蔽电信广告

这个插件借鉴了Adblock Plus的源码,专门针对电信的两种流氓行为进行屏蔽:
每天的第一个网页自动跳过电信广告,到目标页面。
在错误域名的情况下,屏蔽电信的广告页面。

杯具啊,原来是.htaccess多了一行deny from all

若干日之前,我杯具的发现自己的blog突然上不去了,显示“403 Forbidden”,“Access Denied”。因为是找的免费空间,之前虽然一直挺稳定,但是在我什么都没有改的情况下突然出现无法访问的问题,我怀疑是免费空间的问题。靠,在折腾了一个多星期以后,我终于发现问题的根结原来是.htaccess最后莫名其妙的多了一行“ deny from all”,

程序员的生活是这样的… – Stupid Bug

作为一个程序员,最痛苦的事情是:调代码…
作为一个程序员,最快乐的事情是:改掉Bug成功的瞬间…
如果你恨他,那就让他一直调代码…
如果你爱他,那就让他去看着别人一直调代码…

I have no face

Tomcat与Java 5的编译问题

今天应用迁移,以前写的那个系统要迁到另一个服务器上,本来以为很简单的,结果装完Tomcat以后程序居然报错,说什么“&&”是不能用于boolean、Boolean,感觉很莫名其妙,&&可是基本操作符啊,怎么会出这个错误,以前从来没遇到过。不过象这种层面问题,肯定是和编译有关。初步猜测和Tomcat版本有关,因为我以前装的什么版本已经忘了,刚装的是一个5.0.30。换了一个5.0.28(Apache上5.x的版本最老的就是这个了),覆盖安装,还是不行。后来我试了很多乱七八糟的方法,换了好几个版本,挣扎了2、3个小时,终于把这个狗屎问题解决了,得到以下提示: 不知道从什么版本开始,Tomcat不能自动编译Java 5(1.5)的JSP文件,——错误提示我javac的时候使用“-source -1.5”而不是“source -1.3”,个人认为它后台使用1.3 compatible的方式进行编译。而1.5的什么泛型、autoboxing就全部被枪毙,无法通过编译。错误从这里产生。 解决方法是修改/conf/web.xml 文件:找到名为“jsp”的servlet并修改如下内容,增加 compilerSourceVM 和 compilerTargetVM 两个设置: <servlet>    <servlet-name>jsp</servlet-name>    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>    <init-param>        <param-name>fork</param-name>        <param-value>false</param-value>    </init-param>    <init-param>        <param-name>xpoweredBy</param-name>        <param-value>false</param-value>    </init-param>    <init-param>        <param-name>compilerSourceVM</param-name>        <param-value>1.5</param-value>    </init-param>    <init-param>        <param-name>compilerTargetVM</param-name>        <param-value>1.5</param-value>    </init-param>    <load-on-startup>3</load-on-startup></servlet> 我看网上有人说还要拷贝tools.jar以及ant-1.6.x.jar到common/libs下面,并删除common/lib/jasper-compiler-jdt.jar,不过好像5.0.30版本并没有这种问题。5.5版本以上我确定Tomcat会安装common/lib/jasper-compiler-jdt.jar文件。 Tomcat版本直接切忌不要覆盖安装,我花了很长时间发现覆盖安装以后版本的文件恨混乱,我覆盖装了5.0.28,结果Tomcat Monitor还是显示5.0.30………。 不要设置“CATALINA_HOME”环境变量,否则你可能无法使用2个Tomcat。记得很早以前是要手工设置这个变量的,但是现在千万不要设置这个环境变量。今天装JIRA的时候发现JIRA无论如何启动不起来,发现其老是去找8080端口,而我已经在server.xml文件中把它端口改到8081去了,很奇怪。后来想起来可能是“CATALINA_HOME”影响了JIRA的启动过程,去掉这个变量,啊,整个世界清净了………

I have no face

解决ValueList自动排序的乱码问题

一年多没整过技术文章了吧………今天下午调整了一下原来的代码,解决了ValueList自动排序的乱码问题。 其实如果你页面上全部都用UTF-8,是不会出现ValueList自动排序的乱码的,因为ValueList默认是使用UTF-8进行编码。但是我原来写的那个应用太小,而且也不会有i18n的需求,没心情全部把汉字写到resource文件中,那样比较繁琐,——我可是又当程序员又当美工的。所以当时是全部页面都用了GBK编码。 另外先提一下另一个需要特别注意的地方:如果使用GBK编码,那么请一起把Tomcat的server.xml文件一起改掉,在“connector”element后面加一个attribute:“URIEncoding=’GBK’”,否则默认会是UTF-8。这里不把编码改掉的话,那么你所有的GET查询都可能出现乱码。 好了,现在说ValueList这里容易出现乱码的问题。ValueList一个比较方便的功能就是允许对属性进行自动排序,而这个排序是通过GET方式完成的。然后我发现我原来写的那个东西,查中文字很正常,不会有乱码,但是查了中文字以后再进行自动排序就不行了,表单上显示属性由中文字变为乱码,很明显,页面和GET编码都是GBK,那么只有可能是ValueList的自动排序的URL的编码有问题。 相信有经验的程序员不会花太多时间,问题很快定位在LinkEncoder,不过这是一个接口,默认实现是DefaultLinkEncoder,里面有一行代码:private String encoding = “UTF-8″,以及getter和setter,一看到这个地球人就都知道了,Spring配置一下“encoding”属性为“GBK”就行了。 打开ValueList配置文件,先用Spring把DefaultLinkEncoder这个bean的“encoding”属性写为“GBK”,再在什么“classicLook”、“simpleLook”、“microsoftLook”啊,反正是xxxLook这些bean下面都加一行,然后就OK了。记住在所有的xxxLook下面都加这一行,我开始就是只在“classicLook”下面加了,结果我页面上实际使用的是“simpleLook”,搞得我还以为哪里还有bug呢。

I have no face

Programmming in the memory

Yesterday, some fellow asked a favor for Tomcat, and then I came to realize that there had been quite a long time since the last time I developed as a damn programmer. The last version of Tomcat I could recognized was 5.5.xx, but now the major version has already been upgraded to 6.xx. The world that I used to be familiar […]

I have no face

最近在看.NET

感觉C#的.NET确实很多地方和Java很像,包括语法,甚至一些API。但是边看边说吧: 1. 虽然一个文件里支持多个namespace和class。但是个人觉得这个功能不是太必要,Java中一个文件一个public class可以让人一眼明了这个文件的功能,强制开发人员组织自己的class。特别是namespace,.NET要求namespace前后加括号来区分一个文件中不同的namespace,觉得完全没必要啊,反而namespace多加的括号在比较长的文件里会影响阅读——因为它多加了一列缩进。 2. namespace可以有alias。感觉这个更没用。用了那么久Java,感觉碰到名字冲突的情况实在少之又少。.NET的这个功能估计在98%的情况下都只会增加程序阅读的难度和混乱。 3. .NET中方法名是习惯大写开头。不是太习惯,个人觉得有点影响阅读——不是一眼就能区分出类和方法。其它的也是一样,比如常量,Java里的常量一般都是大写加下划线的,但是.NET里怎么没看出各种变量之间的区别。感觉.NET好像没有象Java一样强调编码规范,比如Java中对各个地方的命名都有官方的推荐。 4. 看的是传说中的Jeffrey Richter大牛的《Applied Miscrosoft .NET Framework Programming》,感觉到处都有在强调性能,象primitive的autoboxing的性能,inline初始化字段和构造函数对性能的影响;这个和Java的书不太一样,Java的书大多强调标准、规范和Pattern之类的东西,很少有象这书那样细节的强调性能。所以我现在有点理解微软阵营的人对Java的性能的怀疑。但是我认为现在的Enterprise Application第一强调的不会是性能,可维护性、稳定性、可扩展性、标准可能是更重要的。现在很明显的就是Java阵营的人对模式、设计等东西的讨论氛围要比微软阵营的人要好。 觉得微软为了性能在设计C#的时候做了很多妥协,比如struct的概念。很难说这是C#的好处还是短处,struct的引入使人会用过程的思想来考虑问题,而且struct和类还是有很多不同的地方,用的不好反而影响性能。相对来说,struct在实际中又能够带来的性能提升?在多少应用中它是必须的?

I have no face

ruby连接mysql

  发现ruby连接数据库的时候还是很诡异的。自己一个人乱弄的话估计n年也连不上。感觉很不方便。   首先先安装ruby,gem。使用“gem install mysql”命令远程安装mysql的ruby驱动,但是可惜的是,不要以为大功告成了,这样的情况下你依然很有可能连不上mysql的。测试一下,用“rails test”新建一个app,然后输入“rake db:migrate”(注意,必须在test这个目录下执行该命令,——前面使用“rails test”建立的是名字为“test”的app),成功的话不会报错。我的环境是:Windows XP sp2, ruby 1.8.4, mysql 5.0.24, rake 0.7.1, 报错找不到“libmysql.dll”。靠,晕死,没办法,google+baidu吧。很快找到“把mysql安装目录下的libmysql.dll”拷贝到环境变量下,比如windows/system32,ruby的bin目录。我是把这个文件拷贝到了ruby的bin目录,以为大功告成拉?!!哈哈,对不起,还是有可能出错,原因是mysql目录下有2个“libmysql.dll”文件。一个在“\MySQL Server 5.0\bin\”下,一个在“\MySQL Tools for 5.0\”下,使用server下面的那个dll会报错“undefined method `each’ for #<Mysql:0x3874b20> ”。   必须使用“MySQL Tools”下面的“libmysql.dll”。