跳至主要内容

博文

Trailing Comma in JSON String

“遵循标准和实现自有的特性,这二者之间是存在一个平衡点的。在我看来,user-friendly可以作为这一平衡点的参考标准之一。” Javascript中使用JSON字符串来描述object的时候,name/value pair之间是以逗号来分割的,例如: { name: 'jlazy', city: 'shanghai', zipcode:'200001' } 这个语法与C、C++、Java和C#中定义数组的语法类似,但是有一个很大的区别,就是最后一个name/value pair后面不应该有逗号。而C家族的数组定义中,是允许存在trailing comma的,例如: int dim[] = { 32, 44, 60, }; 在程序中如果需要动态生成这种结构性的字符串,显然后者是较为容易的,for循环中每次在遍历项的最后添加一个‘,’符号即可。而对于JSON字符串,需要添加一个判断条件语句: var strJson = '{'; for (int i = 0; i < array.length; ++i) { if (i) strJson += ','; strJson += array[i]; } 不同的浏览器实现针对这个特点有不同的实现,例如,Firefox中,默许trailing comma的存在,这对程序开发者是较为友好的。而IE7对于这个trailing comma则是非常挑剔的,算得上是有点finicky。不过既然这是标准,IE7选择了严格的语法检查,也是无可厚非的。 刚好遇到了一个bug是由于这个原因导致的,特地还安装了Visual Studio 2008来attach to process来debug dynamic scripts。因此特别记录一下。 References: 1) Introducing JSON [ ^ ] 2) Can you use a trailing comma in a JSON object? 3) Dojo ComboBox Widget (Take 2) 4) Trailing Comma Within JSON's Array

Living in Hardy Heron (6)

在Ubuntu 8.04 LTS Server上运行Apache2+MySQL+Tomcat5.5,由于之前的测试服务器上使用Sun-JDK-5.0,时常发生一些莫名的JVM crash 事件,于是决定在新的Amazon Instance上尝试使用IBM-JDK-5.0。IBM是免费提供Linux、AIX上头的JDK的,口碑很好很强大。 具体的方法如下: 1) Install IBM JDK 先解压 ibm-jdk-5.0 的文件夹到Ubuntu的 /usr/lib/jvm 目录,这里放了所有的 java virtual machine…… $ tar zxf ibm-java2-sdk-5.0-8.0-linux-i386.tgz $ sudo mv -t /usr/lib/jvm/ ibm-java2-i386-50/ 为目录创建 soft link,采用一个简洁的名字。 $ cd /usr/lib/jvm/ $ sudo ln -s ibm-java2-i386-50 jdk-ibm-5.0 使用 update-alternatives 工具安装该jvm,并设置为系统默认的JVM。 $ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-ibm-5.0/bin/java 500 $ sudo update-alternatives --config java 2) 修改 Tomcat 5.5 的启动脚本 首先,如果系统的 Tomcat 5.5 是通过 apt-get install tomcat5.5 获得的,默认会使用一个名为 jsvc 的工具来启动 Catalina 的服务线程 (而且一般都是启动三个进程)。如果要使用 IBM JDK,必须修改 /etc/init.d/tomcat5.5 脚本,将 DAEMON 改回 catalina.sh。 其次,Tomcat默认的shutdown方法不够“敏捷”。因为它需要使用startup的所有设置重新启动一个JVM来通知之前的进程关闭。众所周知,Tomcat会监听 8005 端口等待接收指令。因此,可以充分发挥Linux上众多的工具优势,直接访问该端口发出 shutdown 指令。 echo SHUTDOWN | nc loc...

Living in Hardy Heron (5)

新大陆 神说,天下的水要聚在一处,使旱地露出来。事就这样成了。 神称旱地为地,称水的聚处为海。神看是好的。 神说,地要发生青草,和结种子的菜蔬,并结果子的树木,各从其类,果子都包着核。事就这样成了。 于是地发生了青草,和结种子的菜蔬,各从其类,并结果子的树木,各从其类,果子都包着核。神看着是好的。 有晚上,有早晨,是第三日。 Eclipse开发平台对于绝大多数Java程序员来说是必不可少的(华丽的忽视JBuilder的拥蹙…… :P)。对于已经安装好了Sun-JDK或是IBM-JDK的筒子而言,这个安装过程简单的可以——下载、解压缩、创建桌面链接(即对应于Windows下的快捷方式)。创建快捷方式只要先在GNOME的目录中新建一个eclipse.desktop文件,然后输入如下内容(这里懒人J的eclipse是解压缩在/opt/eclipse目录中): [Desktop Entry] Encoding=UTF-8 Name=Eclipse 3.4 Comment=Eclipse IDE V3.4 Exec=eclipse Icon=/opt/eclipse/icon.xpm Terminal=false Type=Application Categories=GNOME;Application;Development; StartupNotify=true 可惜,对于偶的系统(Ubuntu 8.04 AMD64bit)来说,eclipse有一个致命的问题——在运行时会突然莫名地crash!!查了不少帖子之后终于找到了解决方法,貌似是Eclipse在AMD64位平台上必须屏蔽掉一处JDK对于编译器的优化。我dump了crash的log(一般出现在$HOME目录中,名字是类似于hs_err_pidXXXXX.log,这里XXXXX就是刚刚crash掉的eclipse的进程标识数),其中可以找到这样的蛛丝马迹—— Current CompileTask: C2:2717      org.eclipse.core.internal.dtree.DataTreeNode.forwardDeltaWith([Lorg/eclipse/core/internal/dtree/AbstractDataTreeNode;[Lorg/eclips...

Living in Hardy Heron (4)

美丽苍穹 神说:诸水之间要有空气,将水分为上下。 神造了苍穹,把苍穹之下的水和苍穹以上的水分开了。 神称苍穹为天。 有晚上,有早晨,这是第二日。 刚安装好的Ubuntu的界面是以橘黄色作为基调的,8.04里的默认壁纸是一只抽象的鹭(对,就是代码名字Hardy Heron里说的爱吃青蛙的Heron,一开始我还以为是鹤,不过Crane一般都是白色的……)默认的简体中文字体是文泉驿。老实说,整体看来界面还是有不小的改进空间的。不过不要紧,已经有很多老鸟为我们指明了方向——使用更为漂亮的商业字体(当然少不了从盖茨大叔留下的那家大公司里面“搬”出来的),还有更绚的3D引擎来美化工作空间。毕竟如果要以Ubuntu作为日常使用的操作系统的话,将整个UI做个养眼的美容还是很有必要的。 字体方面,可以下载微软雅黑和苹果的LiHeiPro字体文件。二者都是TTF字体,使用方法如下: # Goto the system folder where the fonts are stored cd /usr/share/fonts # Make dirs for the new fonts cd ./truetypes sudo mkdir ttf-msyh/ ttf-liheipro/ # Copy the fonts into the new folder and make sure they have proper permissions cd ttf-msyh/ sudo cp ~/downloads/msyh*.ttf . sudo chown root:root *.ttf sudo chmod 644 *.ttf # And generate the scales and dirs configuration sudo mkfontscale sudo mkfontdir # Finally, after both fonts are done, we fresh the system cache of fonts # the command fc-cache is called, with options to force refresh, and # write verbose output to console. sudo fc-cache -fv 安装完字体文件之后,具体...

Living in Hardy Heron (3)

创世纪 神说,要有光,于是就有了光。 神看光是好的,于是就把光暗分开了。 神称光为昼,称暗为夜。有晚上,有早晨,这是头一日。 在Ubuntu Live DVD安装完毕之后,马不停蹄地继续安装必备的系统软件。众所周知,在Linux系统下,即便有了Debian一族的dpkg、apt-get,或是Fedora/Redhat所打造的rpm、yum,软件还是有无法安装的可能。开放源代码的好处就是source code compilation,这才是王道~ 默认的情况下,基本的内核源代码和编译工具是不被安装的。所以必须使用apt-get直接安装: sudo apt-get install build-essential automake linux-headers-`uname -r` 这里linux-header-`uname -r`的uname -r是获取系统的内核版本号。虽然并不经常用到,不过在这个时候``命令还是非常很有用的。 有了基于C/C++构建的编译系统,当然也不能缺少跨平台的Java。由于版权原因,linux下默认提供的java实现并不是Sun的java实现,而是OpenJDK。安装Sun的JDK需要自行到”升阳“的站点去下载bin文件。而我一直偏爱IBM的JDK,以前在Windows下作class obfuscation的时候就发现Sun出品的JDK的性能的确要稍逊IBM一筹。同样的,如果要使用IBM的JDK,也需要自行下载。下载的地址就不多写了,google一下就有了,重要的是看清32bit还是64bit再下载。 chmod +x sun-java-1.6.0r6.bin . sun-java-1.6.0r6.bin 安装后实际上就是解压缩一个目录出来,需要移动到系统的jvm目录中。 sudo mv -t /usr/lib/jvm/ ~/java-6-sun-1.6.0.06/ sudo mv -t /usr/lib/jvm/ ~/ibm-java-x86_64-60 sudo update-alternatives --config java 最后的这个命令是用于设定默认的JDK。当然,手动修改文件/etc/jvm也是可以的。 参考资料 APT/YUM Server 出自鸟哥的私房菜 OpenJDK Project in java.net

Living in Hardy Heron (2)

混沌初开 ia32 shared libraries for use on AMD64 and ia64 systems. This package contains runtime libraries for the ia32/i386 architecture, configured for use on an amd64 or ia64 Debian system running a 64-bit kernel. 本本(Acer 4520G 551G16M)的硬件配置大体如下: CPU: AMD Turion 64x2 Mobile TL-62 HD: 160GB RAM: 2048MB DDR2 Bluetooth: 2.0+EDR Graphics: NVIDIA Geforce 8400M G 802.11b/g Wireless 安装的时候一切都挺不错,分区用了ext-3格式,其结构如下: /boot: 为了提高启动的效率,该分区单独分配180MB。 /home: 个人目录,分配了40GB。 /: 根分区分配了106GB,没有对/usr, /var等作细分。 登录之后check了一下,以太网卡工作正常,可以直接使用“网络”工具来配置IP、子网掩码、网关和DNS等;蓝牙可识别且LED灯工作正常;无线网卡无法正常工作且LED灯完全不亮;大部分特殊键都可以正确工作,例如WEB键、音量控制键、屏幕开关键和鼠标触摸板开关键等;声卡正常工作且音量可控,但是内置麦克风无法识别。 为了开始安装软件,将大量使用apt-get而非“新立得软件管理工具”。ia32-libs是比不可少的。因为有不少的软件缺少在AMD64平台的编译版本,要通过 apt-get install --force-architecture 来安装32位的版本并通过ia32库来确保运行时环境。

Living in Hardy Heron (1)

序幕 Hardy Heron is the code name for Ubuntu 8.04 LTS, released on 2008-04-24. 我的一台老PC上装的是Ubuntu 7.10,因为硬盘上有点坏道,Windows XP一直没法正常工作,自从交给Linux打理之后,使用地很顺利,没有遇到过太多的麻烦。这次Ubuntu 8.04刚发布没多久,还是个LTS版本,我就想在笔记本上体验一下。 没想到由于分区的错误(强烈建议要装双系统的朋友现在Windows下面将空余的分区做好再用LiveCD来安装Ubuntu,血淋淋的前车之鉴阿……),导致原有的Vista系统的分区表被破坏了……反正我的主要开发环境是Java的,IDE用的是强大且跨平台的Eclipse,Editor一直是原生于Linux的VIM。于是决定一不做二不休,将整个本本交给Ubuntu来控制。 这个决定,带来了随后几周的崭新体验——于是,就有了这个《Diving in Hardy Heron》系列。