Author: qingbo

  • Google的圆角生成器

    有一次想在页面中做圆角矩形效果,无意中搜索到了这样一篇文章:Googles Rounded Corner Generator

    代码<img src=”http://groups-beta.google.com/groups/roundedcorners?c=E8EEF7&bc=white&w=50&h=50&a=tr” alt=”google round corner” />的效果就是这样一个图片:

    google round corner

    参数说明:

    • c(color): 前景色
    • bc(background-color): 背景色(默认为透明)
    • h(height): 高度(默认8 px)
    • w(width): 宽度(默认8 px)
    • a(angle?): 要产生哪个角。有四个值:tl(top left), tr(top right), bl(bottom left), br(bottom right)

    太方便了,太方便了

  • Google如何纠正错别字?

    刚刚看新浪一个搞笑新闻日本媒体称官兵缺爱易陷中国桃色陷阱(组图),里面有一段的标题中写了个“攻城掠地”。我记得就应该是“攻城略地”,可是上网一搜,“攻城掠地”也到处都是。

    后来看到有一些网页是出找错别字的题目的,才看出“攻城掠地”确实是写错了。

    而我在Google拼音中输入gongchengluedi的时候,竟然出来两个成语,一个“攻城略地”,还有一个“攻城掠地”。这样对于文化的传播真的有很坏的影响。。

    Google输入法的词库据说有来源是网民搜索关键字,造成这种错误也不足为怪了。但用Google搜索英文的时候它都会提示拼写错误,什么时候可以对汉字检查拼写错误呢?就算现在没有能力检查,在生成词库的时候为什么不把这样的错误除掉呢?

  • 如何安装Subversion,及通过Apache提供HTTP服务

    服务器上httpd,Subversion都是自己编译的。

    最初安装Subversion时,配置Apache,HTTP访问不了。查Apache的Log发现有segmentation fault. 曾经也在网上找过合适的mod_dav_svn.so恰好能用,但这只是投机取巧,自己也不放心,还是找到根本的解决办法比较好。

    问题的原因在于Apache和Subversion都使用了APR库,然而用的不是一个版本。我不知道Subversion为什么带着apr 0.97发布(该版本似乎不支持大文件),apr的最新版本已经是1.2.8了。Apache里的版本是比较新的,我用Apache的APR替换Subversion的来编译,这样它们用的就是同一版本了,不再有segmentation fault,使用过程中也没有发现其它问题。

    下面是安装的过程。安装swig-py是为了能够将svn与trac结合,你当然可以不安装它。

    1. 将subversion-1.4.3, subversion-deps-1.4.3在同一目录解压,然后把subversion-1.4.3目录中的apr和apr-util两个目录删除,将apache源代码中的两个目录复制过来。
    2. 先安装neon

      # ./configure -with-zlib –enable-shared –enable-static –with-libs=/usr/local
      # make && make install
      将neon目录改名:
      # mv neon neon-back

    3. 安装subversion/swig-py

      # make clean
      # make clean-swig-py
      # ./configure –prefix=/etc/subversion –with-apxs=/etc/httpd/bin/apxs –with-swig –with-neon=/usr/local
      # make && make swig-py
      # make install && make install-swig-py

    安装过程中假设Apache的安装目录是/etc/httpd/,make会自动把mod_dav_svn.so安装到/etc/httpd/modules目录,在httpd.conf中load,就可以配置Subversion的HTTP访问了。

  • 收到sohu寄来的耳机

    昨天突然有陌生号码打电话给我,说有快递送给我。因为不在住址,我就告诉他我在的地方,等他送来。心里想,哪个好朋友给我送东西来了呢?

    听到快递进了门我赶紧迎接过去,生怕是什么见不得人的东西。不过收到的却是一个耳机,而且是Sohu送来的。我和Sohu向来没有什么瓜葛啊。

    过了一会看到快递单子上有个电话号码,打过去问,说是我参加了Nokia的一个活动,中奖了。

    冥思苦想。仿佛曾经有一天打开MSN,弹出广告,不小心点了一下,填了个表。早知道,忘了用这点人品去买彩票了。

    耳机是买N7x系列送的那种,Cosonic CD-850V,值几十块钱,冬天可以给耳朵保暧。

  • 如何为Yourkit配置以jsvc方式运行的Tomcat

    我们一般在Linux服务器上用jsvc(Java Service)来运行Tomcat 5.5。Tomcat的源代码中带了jsvc,在bin目录中。jsvc工具是属于commons-daemon项目的,Tomcat中带的是最新的稳定版本1.0.1。

    用Yourkit来profile一个J2EE Web应用,首先需要在Tomcat启动时加上profile agent的参数,-agentlib:yjpagent. 然而,1.0.1版本的jsvc并不支持Java 1.5的参数”-agentlib”。当然,你可以在catalina.sh中加参数,用startup.sh启动Tomcat,但应该还是有许多人希望用jsvc运行。

    我最初Google的结果来自Yourkit的服务论坛。2005年的问题,到现在还没有解决,甚至yourkit的人都不知道jsvc是什么东西。

    终于在Apache的bugzilla里看到有人提出了jsvc不支持Java 5的新参数的问题,而下面有开发人员回复说在trunk里已经修正。又搜到这样一个网页,可以看到parse函数中处理了agentlib这个参数。

    但jsvc在Apache SVN的什么地方呢?坚持找了好久,终于找到了这个地址

    好,从这里co一份代码替换原来的jsvc,编译。编辑/etc/init.d/tomcat,加上agentlib参数。如果按照Yourkit的文档做好了准备工作的话,启动Tomcat,在%TOMCAT_HOME%/logs/catalina.out中就可以看到Yourkit的agent已经工作了,且可以知道它在哪个端口上工作。

    打开Yourkit的图形界面,连接到这台服务器,就可以监视上面的J2EE应用了。

    不知道新版本的commons-daemon什么时候发布,或者新的jsvc代码什么时候被打包进Tomcat. 但如果你需要JVM 1.5的新参数,就应该使用最新的SVN代码。

  • 今天来上班的时候路过一家理发店,几个店员看着一只猫,猫嘴里有一只鸽子。我开始以为是死的,他们告诉我是这只猫刚抓的。他们都惊讶猫能抓住鸽子真厉害,可是鸽子那么
    笨,猫抓它其实很容易。可怜那只鸽子。去年春节回家,我一个邻居家说他家的猫经常去山上抓野兔回来。我二奶奶家的猫会抓麻雀,这难度比抓鸽子可大多了。

    会抓鸟的猫不一定会抓老鼠。并且那个抓鸽子的猫不一定愿意抓老鼠。我姥姥家有一只猫,长得很漂亮,其实是邻居家的。当时它快死了,我姥姥把它养活,它就不走了。但它留
    下来不是报恩抓老鼠,而是去抓鸡吃。于是只好把它拴起来。

    我姥姥家还有另外两只猫,应该是同一胎的。去年我见到的时候它们还小,有一只想爬上一个很矮的箱子。轻轻一跳就上去了,它没有。它把前爪搭到箱子边上,后腿蹬啊蹬,蹬
    了好久也上不去,放弃了。我无话可说了,懒到这种程度!今年去,它们还是一样的懒,白天睡,晚上也睡。据姥姥说,它们在地上玩,老鼠在高处害人。下面是其中一只睡觉的
    照片,真惬意:

    懒猫

    就这样,我姥姥家的老鼠和猫过着和谐的生活。

  • 事情太多了

    我连去寄个信的时间都没有,宿舍的电脑上已经落了一层灰。

    Ubuntu 7.04发布了,我是没时间去尝试了,另外对Gnome这个笨重的家伙也越来越不感冒,在它基础上也做不出什么用着舒服的东西来。开源是好,但说实话,反应速度和界面的可用性上,Gnome跟Window$没法比。你可以说,界面还是Mac为尊,但作为抄袭者,显然还是微软更专业一点。可惜了那么酷的beryl.

    现在所做的工作和所处的境地也逼着我,得装Windows了。

    快5.1了,回家好好休息休息。嗯,回到家,跟这里就是两种人生观,就想去弄块地,盖个小房子,鸡,鸭,羊,牛,。。。

  • 祸兮,福之所倚

    一周前,我的校友信箱被发垃圾邮件的盯上了,发得那个疯狂,过了一天,系统就发出警告信,说容量超过警戒线了。毕竟校友信箱不是Gmail。

    我一直是将其中的信件自动转发到Gmail中的,已经好久没登录过了。这一警告,赶紧去邮箱里删信,删完了发现还有许多空间被使用,就到发件箱去看。意外收获,大三时图像处理的作业乖乖地躺在那里呢!其时我正在被一门选修课的作业所困扰。把它放到Linux里,touch一下再拿回来,写个报告交上去,完事了。

    多么宝贵的人生经验,平凡的生活中蕴含着这么深奥的哲理。

    Update: 发现里面还有详尽的文档,但遗憾的是当时不知道为什么转成了PDF还加了密。。。不过省得动脑筋了,打字还是很快的。

  • IE float元素的一个恶心Bug

    这种问题不好Google,也许已经有许多人知道怎么解决了,不过我没有搜索到,为解决这问题,加起来花了应该有半天时间。我大致知道了一个重现的过程。

    在一个比较窄的元素中,我想把几个词排成两列。用如下的代码(容器宽度是在外面的元素限制的):


    <div style="width:250px">
    <div style="border:1px solid #0066CC;padding:10px;font-size:14px;text-align:left;">
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="clear:both"></div>
    </div>
    </div>

    但效果是这样:

    Test
    Test
    Test
    Test
    Test
    Test
    Test
    Test

    显然我想边框把这几个条目全部包起来(而且行间距也不应该那么大!)。最初的时候这几个词是相等字数即等宽的,于是我把”Test”的float属性去掉,加上display:inline。这时,宽度就无效了,但因为字符串等长,我就给它加了固定的margin,可以实现两列了,而且IE的border也把它们都包起来了。

    不过最近需求变了,这几个词的长度不等了,用display:inline再加margin的办法不行了。该面对的问题还是要面对,尽管IE很垃圾,用它的人还是太多。仔细看上面代码显示的效果,IE似乎是认为那个框里只有三行(在我的应用里,它是认为只有一行),显然是处理float的高度有问题。知道这点后,我就在那些float元素的前面加了一个空的div,NND,这就没事了。

    代码:


    <div style="width:250px">
    <div style="border:1px solid #0066CC;padding:10px;font-size:14px;text-align:left;">
    <div></div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="margin-left:10px;float:left;width:100px">Test</div>
    <div style="clear:both"></div>
    </div>
    </div>

    效果:

    Test
    Test
    Test
    Test
    Test
    Test
    Test
    Test

  • request.getParameter返回null

    用GET方法传递过去的参数,在某些情况下用request.getParameter只能取得null,而apache确实得到了完整的URL,且Debug时URL也是完整的,就是取不出来。

    参数是一大段文字,其中可能有中文,我在客户端是用Javascript编码过的,为了避免URL过长,截断过,在以前的PHP里用得很好,就是偶尔会把一个中文字的编码给切断,造成末尾乱码,但影响不大。这次出了这个问题,我一直怀疑是不是Tomcat不能接受这么长的URL,或者是struts/JSP. 结果找到最后,发现就是编码不完整的问题。

    在request.getParameter这个调用里,会对percent encode过的参数值进行解码,但解码时遇到不正确的码就会返回null. 这不正确的码就是我截断的。

    以前编码是把所有的文字编码,组成URL后截断长度到6000。于是改了一下编码的策略,每100个字符作为一个块编码一次,直到字符串结束或剩下的空间不能容纳一个块为止。目前看来,这是一个好办法。