@ZEAL Blog·厉
WWW Zeal Blog
We stand alone,
TOGETHER.
+ 0 - 0 | §小路考记

  做梦也没想到自己的小路考会如此戏剧化。

  首先是排队。一大早过去等到中午,吃完中饭回去还没轮到。明明给每个人发了一张号卡,却只叫名字不报号数,以至于完全不知道叫到了几号。后来听说两百多号的都已经有人进去了,只要你把自己的号卡递给工作人员就行。于是大家都不干了,纷纷挤到窗口前交卡。

  经过一阵混乱之后,终于可以进到考场里面等车子。到我的那号车回来的时候,随车师傅又让我稍等,原因是前面一位考生过百米加减档的时候操作过快,把系统给弄死了。南京多伦卖过来的这套红外电子小路考系统明显还在beta阶段,却已经开始迫不及待的收钱了。

  技术人员一番操作,终于可以上车考试了。前面一切顺利,就在我过完侧方和单边桥,以为都十拿九稳的时候,却看到坡道桥上停了辆考试车,死活不见动弹的。即便放慢了车速趟过去也无济于事,只好停下来等。不得不再次提到这套电子系统,居然这样的停车等待一样算我自己的考试时间。旁边的师傅跟我说:你要是最后没过的话,一定要投诉去,不然太亏了。等到前面车子终于开掉,我的时间也已经差不多了。急急忙上坡,结果两次离合抬得太快熄火, Game Over。

  于是开回起点进行第二次考试。这次总算没有意外状况发生,一路顺畅。百米冲刺完毕,我满心以为Pass了,却听到该死的电脑语音说:考试结束,你的成绩不合格。旁边师傅说:可能是你的档位没进到吧。 NND,死也死得不明不白!

  故事本来到此结束。但基于第一圈的时候随车师傅给我的建议,我想有必要争取一下自己的权利。尤其是当我把自己的经过讲给教练和周围其他的人听之后,大家的反应基本上比我自己还要激烈,纷纷谴责这套杀人不眨眼刚启用的电子考试系统(估计那些师傅也被关了不少的徒弟在这上面了)。你说这百分之五六十的通过率跟抛硬币有什么区别?于是我开始到管理大厅找负责人进行交涉(当然跟我一起学车的老婆大人担当了大部分辩护律师的角色)。交涉过程中发生的一个小插曲无疑起了决定性的作用:带我考试的那位师傅跑进来找到技术人员说那辆车的百米加减档好像坏掉了,从我开始上那车的就没一个人过百米的。然后那辆破车便被确认存在设备问题给拖出了考场。

  既然第一次是外界因素(也是软件设计缺陷)导致我的时间不够,第二次是车子的加减档红外设备有问题,他们也就找不到理由不让我重新考一次了。虽然我更希望他们直接算我通过得了,但退而求其次,能有一次当场重考的机会总好过等半个月再交一百块大洋来补考。

  于是我第三次上了起跑线。虽然心情极端的复杂,好在发挥还算稳定,直接拿了满分一次过了。

  走出考试车的时候,只见考试出口的地方无数围观者向我挥手,几乎有种英雄归来的感觉。

标签 ( 懒人散记 ) :
+ 1 - 0 | §[z]SHMMAX and SHMALL

On Linux, the default shared memory limit (both SHMMAX and SHMALL) is 32 MB in 2.2 kernels, but it can be changed in the proc file system (without reboot). For example, to allow 128 MB run these commands:

$ echo 134217728 >/proc/sys/kernel/shmall
$ echo 134217728 >/proc/sys/kernel/shmmax


These commands could also be put into a script to run at boot-time.

Alternatively, sysctl can be used, if available, to control these parameters. Look for a file called /etc/sysctl.conf and add the following lines to it:

kernel.shmall = 134217728
kernel.shmmax = 134217728


The sysctl.conf file is usually processed at system boot-up, but sysctl can also be called explicitly.

标签 ( 开发/理论 ) :
+ 0 - 0 | §MySQL启动失败的另类原因

  毫无预兆的, MySQL 罢工了。 用 mysql.server 启动脚本启动之后,没有任何提示信息就结束,mysqld进程自然是没有起来。

  把 mysql.server 里面 $bindir/mysqld_safe --datadir=$datadir --pid-file=$server_pid_file >/dev/null 2>&1 这句的输出重定向去掉后运行,结果发现报错: File size limit exceedednohup ... ...

  这样看来自然是有文件太大了。但查看了 mysql 数据目录下相关的数据库文件和日志文件,最大的也就几百兆。 ulimit -a 查看也没有对文件大小做任何限制。

  经过 N 分钟的郁闷之后,决定用 find / -size +2048000k 查找整个硬盘上面的可疑文件。结果是: /var/log/pacct 这个2G多的大文件冒了出来。很显然,这是 SA 激活了 accton 之后产生的日志文件,没给做回滚。二话不说,清空 /var/log/pacct 再启动一次 MySQL ,一切恢复正常!

  搞不懂的是为什么 mysql 的启动脚本会受这样一个无关痛痒的进程统计日志的影响而导致 mysqld 进程完全无法启动。估计还是 mysql.server / mysqld_safe 脚本逻辑的问题。。

标签 ( 开发/理论 ) :
+ 0 - 0 | §url rewrite 的善后工作

RewriteEngine On
RewriteRule ^entry/([0-9]+)$ blog/entry.php?id=$1&avoidrepeat=1 [L]
RewriteCond %{QUERY_STRING} ^id=([^&]+)$
RewriteRule ^blog/entry\.php$ /entry/%1? [R=301,N]

  由于一开始的时候主机并不支持 mod_rewrite ,所以日志的 url 都是带 ? 参数的动态 url 。这次决定把该 SEO 的都给 SEO 起来,于是在根目录下加了这个 .htaccess 文件。

  但想要让原来已经被 Search Engine 收录的动态 url 自动转到新的静态化的 url 上来却颇费功夫。本来以为直接加一条 R=301 的 RewriteRule 就行了,可实际上 RewriteEngine 对于 rewrite 之后的最终url与初始url完全一样的逻辑会直接给 Ignore 掉,所以必须加上一个无意义的 &avoidrepeat=1 参数来让 RewriteEngine 认为这是两个不同的请求。另外对于 ? 后面的参数字符串必须在 RewriteCond 里面来匹配而不是直接在 RewriteRule 匹配。

  经过这样的处理之后,无论是通过老式的 entry.php?id=XXX 方式还是经过静态化的 /entry/XXX 方式来访问,最终都会定位到 /entry/XXX 这个静态化的 url 上,对于 Search Engine 来说应该可以更快的根据 R=301 的状态码来更新它的索引库。

标签 ( WebDev ) :
+ 2 - 0 | §非人的超人

  当看到超人归来之后把整座水晶岛连根拔起,推向外太空的时候,我不禁想喊:

  娘子,跟牛魔王出来看上帝...

  superman,spiderman,batman,虽然都叫man,蜘蛛侠基本上可以算是被巨型蜘蛛附体的小男孩,蝙蝠侠则完全是化装舞会爱好者加上DIY高手,只有超人是真正与生俱来拥有超能力的外星生物,和“人”完全不答边。如果把这三个man摆在一块pk,我百分百确定蜘蛛和蝙蝠会死的很惨 -- 除非他们带了克星的放射性元素。

  对于超人来说,要么就是刀枪不入所向披靡,要么就是在绿石头的前面萎到极点。

  也正因为超人实在太牛,所以超人电影注定无法像其他漫画英雄影片那样去展现激烈惊险的正邪大对决的动作场面来。导演也就只好让超人顶完飞机抓汽车,抓完汽车挡子弹,挡完子弹捞沉船,海陆空一个也不能少。全方位展示过超人作为劳模上帝的日常生活之后,疯狂的石头作为唯一能打败超人的道具不得不再次以超人杀手的身份出现,让超人象征性地接受挫折考验并克服之。

  末了,居然搞出个小超人来。可能导演也希望在下一集里面安排父子俩单挑,好让正邪实力更加均衡一点。要是那块绿石头再跑出来,超人性子再好也要给郁闷死了。

  对于这样一部缺乏矛盾冲突的影片能够拍到两个多小时的长度我表示由衷的赞叹;另一方面,对于庸俗到极点的我来说,这是一部绝对从头爽到尾的视觉音效盛宴,就算导演把片子拉到三个小时我也是愿意看的。

  所以,如果你是唯剧情论者,趁早别看为好 -- 尤其是枪版的那种垃圾碟还摆到电脑里面来放就等于是自虐;否则就请一定要买票到影院去享受 -- 还要是音响够震撼、屏幕够大、观众够多的那种。

标签 ( 数码影像 ) :
+ 0 - 1 | §Apache mod_rewrite 之目录冲突

  现象:在 VirtualHost 配置块中启用 RewriteEngine ,进行 url rewrite ,结果发现重写到某一个目录下的url总是报错,说是 url 不存在。但通过实际的动态url去访问一切正常。

  httpd-vhost.cnf相关配置如下:

<VirtualHost *:80>
    ServerAdmin noname@gmail.com
    DocumentRoot /www/html/scripts
    ServerName scripts.zeali.net
    ErrorLog /logs/scripts.zeali.net-error_log
    CustomLog /logs/scripts.zeali.net-access_log common
<IfModule rewrite_module>
RewriteEngine On
RewriteRule /entry/([0-9]+)\.html /live/entry.php?id=$1
</IfModule>
</VirtualHost>

  反复测试,发现如果把 /www/html/scripts 下的 live 目录重命名成其他的名字, url rewrite 就完全正常。难道说 live 是 mod_rewrite 的关键字?不太可能。继续检查,发现在操作系统的根目录下存在一个同名的 live 目录。把这个目录删除之后, rewrite 恢复正常。

  结论: mod_rewrite 在执行 RewriteRule 的时候首先寻找的是操作系统的目录层次,而不是 DocumentRoot 下的相对目录层次;因此如果不幸在 DocumentRoot 目录下存在与操作系统根目录下一样的目录, mod_rewrite 将不会正确的找到 rewrite 的目标 url 。Updated 2006-07-18 14:40 -- 如果使用 .htaccess 文件设置 RewriteRule 的话,因为使用的是相对目录形式,就不会存在这个问题。

  目前暂时找不到明确的文档来印证这个问题,或者说我对 mod_rewrite 的理解太浅。希望能看到更准确的说法来诠释这个现象。在此之前,只能认为这是 mod_rewrite 设计上的问题,注意不要让需要加入 RewriteRule 的文档地址与操作系统的目录结构发生冲突。

标签 ( WebDev ) :
+ 0 - 0 | §获得jar包存放路径的方法

  在 java 中, System.getProperty("user.dir") 得到的是当前工作路径(对应命令行命令就是 linux 下的 pwd 、 windows 下的 cd ),而 System.getProperty("user.home") 得到的是当前用户主目录(对应于 linux 下的 ~ 目录、 windows 下的 document and settings\username );但如果你想得到所运行的 java 程序所在的路径,似乎并没有什么简单的方法。

  比如说,有一个 pathTest.jar 包放在 D:\zeal\webdev 下,这个 jar 执行的时候需要在当前目录下读写一个 test.log 文件。如果不采用绝对路径来读写 test.log 的话,不同的 jar 运行方式会带来不同的结果:

cd D:\zeal\webdev
java -jar pathTest.jar

           ( test.log 将生成在 D:\zeal\webdev 目录下 )

cd E:\sun\jre\bin
java -jar D:\zeal\webdev\pathTest.jar

           ( test.lgo 将生成在 E:\sun\jre\bin 目录下 )

  这势必造成潜在的运行错误。解决的方法是必须在程序中指定 test.log 文件的绝对路径。从本意上来讲,这里我们希望 test.log 与 pathTest.jar 位于相同的路径之下。但显然无论是 "user.dir" 还是 "user.home" 都不会返回正确的结果。

  幸好, java 允许我们定位某个 class 的 CodeSource , 通过 CodeSource 提供的 Location 信息就能够找到相关的文件路径。假设 pathTest.jar 的 main class 是 pathTest ,通过

new pathTest().getClass().getProtectionDomain().getCodeSource().getLocation();

  就可以得到 pathTest.jar 的完整路径( file:/D:/zeal/webdev/pathTest.jar ),接下来怎么做就简单了。当然,实际应用中一般我们会选择把所有与jar相关的资源文件一起打包进去,或者使用 "user.home" 这样的固定位置来存放;除非在特殊情况下才会需要通过这个迂回的方式来获取相关的路径信息。

注: CodeSource 得到的是类所在域信息,对于 jar 包返回的就是该 jar 包的完整路径文件名;如果是没有打包的 classpath 下的类,返回的则是该 classpath 的根路径。

标签 ( JAVA/C++ ) :
+ 0 - 0 | §We are the champion!

还是格罗索,踢进了决定胜负的一球。意大利的点球魔咒终于在这一刻得到了解除!

唯一射失点球的特雷泽盖,六年前刺杀了意大利,六年后刺杀了法兰西;是否在以这种冥冥的天意来报复了多梅内克的顽固?

齐达内以一张红牌结束了自己的谢幕演出,或许是布冯扑出他的那个势在必进的头球让他失去了理智。

无论如何,意大利算是报了六年前的一箭之仇,幸运女神这一次不再让他们失望!

标签 ( 体育 ) :
+ 0 - 0 | §世界上最远的距离

垃圾邮件告诉我

世界上最远的距离

不是 从中国到美国

而是 从电信到网通

我笑了

我跟IE说

世界上最远的距离

不是 历史造就的万里长城

而是 造就历史的GFW

IE白屏了

标签 ( 懒人散记 ) :
+ 1 - 0 | §伟大的意大利左边后卫!

  皮尔洛,格罗索,射门!射门!格罗索立功了!不给德国人任何的机会。

  伟大的意大利的左后卫!

  球进了!比赛结束了!意大利队获得了胜利,淘汰了德国队。他们像阿根廷那样倒在德国人的粗壮身躯前,伟大的意大利的左后卫!意大利万岁!

  这个胜利属于意大利,属于皮埃罗,属于卡纳瓦罗,属于布冯,属于所有热爱意大利足球的人!

  德国队也许会后悔的,克林斯曼的几次换人没有起到任何的效果,在后半段他们体能占优的情况下打得太粗糙、太简单了,他失去了自己在之前比赛的那种运气,面对意大利优雅的控球,他失去了他在之前比赛中那种赖以生存的气势,他终于自食其果。德国队该回家了,他们不用回家,因为他们就在这里生活!

  如果黄同学选择这个时候突然发狂,或许会被更多的人所理解:)

  在技术流球队一支接一支的倒下之后,意大利居然扯起这面大旗,用传切进攻击倒了十根巨木。还有什么能比这更让我兴奋到顶!

  是时候在决赛中重逢法兰西了。

标签 ( 体育 ) :
+ 0 - 0 | §Links 2006-07-03: EasyEclipse
  • EasyEclipse
    Eclipse之所以势头如此强劲,甚至于搞到 Borland 都心灰意冷宣布出售整个 IDE 产品线 (虽然没有明显证据可以表明两者之间的因果关系),其开放性大概占了主导因素。
    抛开开源免费的特性不谈,作为一个 SDK 而不是单纯的 IDE 面目出现,使得 Eclipse 具有了强大的生命力。只要是跟开发相关的功能需求,都可以作为扩展插件集成到这个统一的平台中去,最大限度的吸引了使用各种不同语言开发者的注意力( Firefox 打的也正是这一手牌)。
    但在带来无比自由的同时,往往也会让初用者感到迷茫。如果你不知道该为你的 Eclipse 配些什么兵器的话,不妨到 EasyEclipse 逛逛。
  • Google Answers: Understanding ulimit output
标签 ( WebDev ) :
+ 0 - 0 | §Java API 在线搜索

javaref.com 提供了一个集成化的 Java 类库文档搜索系统。看上去还不错,至少可以不用每次为翻找本机上的 JavaDoc 而费神了。但似乎访问速度不是特别理想,一些基本的类的说明也并不完整。同时非注册用户只能查找有限的几个类库 (Apache Harmony (JDK 1.5)  , Apache Log4j 1.2.13 , Hibernate 3.1.3 , Spring 1.2.8 ),如果想获得个性化的完全访问权限就要注册一个账号了。不管怎么说,这样一个想法不错,希望能不断在功能和速度上得到改进。

Since 2005.04.27  梦想 就像鸡蛋 要么孵化 要么臭掉RSS Feed (Entries) | About me | Back To Home | @ZEAL | zbird.com | 沪ICP备05024379号