忙了半天,才明白COOKIE失效是因为没有urlencode

rek.me已经做好几天了,使用起来感觉还不错。随便看到哪个网站好的,直接在地址栏http前面加上rek.me/就可以生成一个微缩过的地址,非常方便,以致于我都有点不想做工具栏按钮了。
今天准备为rek.me加入owner信息,这样网址微缩就可以变成网络书签了。考虑到操作简便性的要求,就直接在第一次使用的时候生成一个md5的uuid,然后setcookie一年,这样甭管多会上来都不用登录。而以后加入OpenID支持也就把OpenID URL和uuid对应一下完事。哪知道coding完毕之后,根本就用不了,随便换个网址,uuid就被重设。用Firebug又可以看到response header中正确的cookie设置,怪哉~~
于是慢慢排查,发现rek一个网址之后不关标签,只改个把字符再发请求,cookie就会发回给服务器。但是如果新开一个网站,然后再rek它,cookie就会被重设了。起初我以为是Firefox的问题,可换了Google Chrome也还是这样,完全搞不懂为什么——浏览器应该会跨页面传递COOKIE的啊。
之后偶然发现,不同网站的址在同一标签中也会导致cookie重设,于是恍然大悟。因为rek.me创建微缩网址的方式是使用http://rek.me/http://guangxin.name这样的地址,会导致浏览器认为请求的域名是guangxin.name,与rek.me是不同的域,所以rek.me下的cookie不予发送。
一个解决方法是urlencode,如果请求是http://rek.me/http%3A%2F%2Fguangxin.name这样的地址,浏览器就会认为后面的http…是URL的一部分,域名还是rek.me,cookie就能正确发送了。不过很难要求用户自己手动完成urlencode操作,看来直接在地址栏rek.me/的方法不好用了,还是得单独用Javascript做一个Short&Bookmark的按钮。
Continue Reading

Rek.me网址缩短服务

一直在想做点什么有意思的东西好,于是加入网址缩短服务的大潮,难得自己有个把够短的域名。现在基本服务已经完成,可惜还是基于MySQL的,等把TokyoCabinet研究清楚了,再升级好了。现在已经支持Ajax创建接口,不过还不支持历史追踪。
目前使用的算法能把网址缩短到域名后六个字节,核心部分使用到md5和base64技术。基本来说就是这样两句:

$key = substr(base64_encode(md5($url, true)), 0, 6);
$key = str_replace(array(‘+’,’/’,’=’), array(‘-‘,’_’,”), $key);

第二句是为了把URL中需要被再次编码的+和/替换成-和_,而=一般只会出现在末尾,去掉它。
最后,配置好服务器的rewrite就OK了。
用http://rek.me/<YOUR URL>创建一个短网址,比如http://rek.me/http://guangxin.name,创建出来的shorten就像这样:http://rek.me/PFqVsv
Continue Reading

改用WordPress

后来我才知道,Wordpress不一定要用专业的托管服务,可以下载源码包自己设置。于是花了一天时间配置好了新的Blog,从现在开始,已经不再使用Blogger.com的FTP发布服务了。不过原来的文件依旧保留,以便链接可以访问到。
接下来的事情自然就是测试留言功能,然后还要把Google分析的Javascript加上。计数器停用了,反正Google分析可以给出详尽的访问报告。
各项测试已经完成,访问正常。地址没有改,还是http://guangxin.name/。RSS源改了,向校内的同步已经更新。
Continue Reading

Blogger将要停止FTP发布服务

今天收到电子邮件,说FTP发布服务已经成为Blogger.com发展的障碍,很多新的功能无法惠及FTP发布的用户,而且用FTP发布的用户只占0.6%。新版本的blogger平台将不再向FTP发布技术兼容。今年三月二十六日,FTP发布将从blogger.com移除。建议持有自己域名的用户改用自定义域的方式发布。
我只能表示悲哀,Blogger.com的决定是没错的,因为在全世界大多数国家,没有使用FTP发布的必要。但是在中国这样一个有墙国家,通过FTP发布成为让普通网民可以访问的唯一途径。
下一步该怎么转换我的Blog还没有想好,不少朋友推荐Wordpress。不过我觉得这个东西实在不保险,天知道哪天被墙。另外也在考虑自己开发一个Blog发布系统,不过工作量似乎挺大,意义却不大。
Continue Reading

x64 Linux下NetBeans移动设备模拟器启动失败解决方案

原文链接(wordpress.com上的文章,自己翻墙)
在x64版的Linux下用NetBeans作J2ME开发时,无法启动模拟器,提示java.lang.UnsatisfiedLinkError: /home/myuser/WTK2.5.1/bin/sublime.so: /home/myuser/WTK2.5.1/bin/sublime.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
这是由64位JVM引起的,解决方案是安装并使用32位的JVM启动模拟器。
我在Ubuntu平台下,如是操作:
安装32位的JVM

$ sudo apt-get install ia32-sun-java6-bin

修改netbeans_home/mobility8/WTK2.5.2/bin/emulator脚本,使用32位JVM

javapathtowtk=/usr/lib/jvm/ia32-java-6-sun/bin/

现在移动设备模拟器可以工作了。
Continue Reading