jimmy's profileJDlogPhotosBlogLists Tools Help
    June 12

    MSNSpace有段时间总是不稳定

    加上忙,就没顾上同步日志。
     
    今儿把以前发的传一份过来。
     
     
    ~~呵呵~~

    世界杯24H

    世界杯24H

    jimmy | 10 六月, 2006 16:15

    6月9日 14:30 直播系统初步准备完毕,试运转

    ——————————————————

    6月9日 17:45 发现异常症状

    6月9日 20:05 距离世界杯开幕式还有1小时25分,紧急启动第二方案

    6月9日 21:10 第二方案上线

    6月9日 21:30 直播开始,2万人在线

    6月10日 0:00 揭幕战开始,6万在线

    6月10日 0:17 不到20分钟进3球。张大亮,唐劲维紧张手工维护简陋的第二方案

    6月10日 1:50 去趟洗手间,继续调试IRCD

    6月10日 3:00 第二场直播开始

    6月10日 5:00 直播结束。马上继续IRCD调试

    6月10日 6:00 体育内容全面上线,调试显示中的BUG

    6月10日 7:20 整理调试的各种信息,疑难点仍未解决,安排解决方案。

    6月10日 9:40 混到一个体育租的房间,抓紧时间睡了一会儿

    6月10日 10:10 薛延超赶到

    6月10日 10:30 联系到喻俊,远程调试

    6月10日 11:00 曹刚赶到

    6月10日 11:05 吴涛赶到

    6月10日 11:40 曹刚在chat1上发现PRIVMSG信息。

    6月10日 12:20 喻俊提出研究重点放在#define MSG_SPORTS方向上

    6月10日 12:40 简陋的工作餐

    6月10日 13:30 吴涛从程序中跟踪到需使用X模式

    6月10日 14:15 在一个直播室中解决问题

    6月10日 15:02 全部问题解决

    6月10日 15:30 重新部署前端方案,进行压力测试

    6月10日 16:40 测试完毕,一切正常

    6月10日 17:30 对后备方案再次进行部署,确保无误。

    晚上的直播见真章。

    ~~呵呵~~

    技术点滴:Ramdisk

    技术点滴:Ramdisk

    jimmy | 31 五月, 2006 11:04

    mount -t ext2 /dev/ram0 /www/cache

    如果出现:

    mount: wrong fs type, bad option, bad superblock on /dev/ram0,
    or too many mounted file systems

    1,可能已经Mount了。mount -l

    2,没有格式化

    mke2fs -O none /dev/ram0

    默认为8M。调整大小:

    1,模块化:

    修改/etc/conf.modules : options rd rd_size=10000
    或命令行:rmmod rd
    insmod rd rd_size=20000
    mke2fs /dev/ram0
    mount /dev/ram0 /tmp/ramdisk0

    2,LILO:

    /etc/lilo.conf
    boot=/dev/hda
    map=/boot/map
    install=/boot/boot.b
    prompt
    timeout=50
    image=/boot/vmlinuz
    label=linux
    root=/dev/hda2
    read-only
    ramdisk_size=10000

    3,GRUB

    # grub.conf -
    default=0
    timeout=10
    splashimage=(hd0,0)/grub/splash.xpm.gz
    title Redice Linux
    root (hd0,0)
    kernel /vmlinuz ro root=LABEL=/ hdc=ide-scsi ramdisk_size=16384
    initrd /initrd

    附:

    1,如何查看是否为LiloORGRUB

    dd if=/dev/hda of=cc bs=512 count=1
    查看cc里面有没有GRUB字样

    2,有的系统(RH AS),会将/dev/shm映射在内存中。如果内存盘需要用来存储的是Cache类信息,一个省力的办法就是直接把Cache目录指向/tmp。【感谢曹刚提供】

    3,参考: http://dev.csdn.net/article/82/82332.shtm

    为世界杯战斗: 第一个山头拿下了

    为世界杯战斗: 第一个山头拿下了

    jimmy | 31 五月, 2006 09:47

    http://worldcup.sports.sohu.com

    http://worldcup.club.sohu.com

    转文:正确理解Linux下的文件属性

    转文:正确理解Linux下的文件属性

    jimmy | 15 五月, 2006 15:38

    From chinalinxpub

      linux是一个安全的操作系统,她是以文件为基础而设计的,其文件权限是比较复杂的,可以用stat命令以及lsattr命令来显示某个文件的详细信息:

       $ stat file1
      file: `file1'
      size: 11904 blocks: 24 io block: 4096 regular file
      device: 301h/769d inode: 355982 links: 1
      access: (0755/-rwxr-xr-x) uid: ( 503/ jack) gid: ( 503/ general)
      access: 2003-10-19 09:14:12.000000000 +0800
      modify: 2003-10-14 20:41:21.000000000 +0800
      change: 2003-10-19 18:56:25.000000000 +0800
      
       $ lsattr file
      ----i--a----- file

      可以看到,文件权限的含义是比较广的,先来看-rwxr-xr-x,第一位是文件的类型,它定义了用户只能某种方式来操作文件,后面九位是文件的存取控制信息,linux的文件许可机制将用户分为三类:文件属主u(user)、文件属组g(group)和其它用户o(other)。三类不同的用户可以对文件拥有三种不同级别的权限:读r(read)、写w(write)和运行x(execute)。于是形成了九位的权限信息,分为三组,分别对应u,g, o。除此之外,用户还可以设置setuid与setgid位来改变程序的执行身份。用lsattr命令则可以看到文件的属性,控制位包括 asacddiijsttu,这些也是能控制文件的存取的。

      由于篇幅有限,不可能就这些一一进行分析,本文着力分析文件权限中w(write)的真正含义,挖出其背后隐藏的细节,力图使读者能正确用好这个关键的权限位,不至于在系统管理中出现差漏。

      为了能更直观的说明问题,本文采用实验操作的方式,一步一步的进行分析。为了简化操作,我们用o(other)这组权限来做实验。实验中用到的权限位均属于o(other), 进行操作的用户均非root用户,属于o(other)。

      在实验之前,必须澄清一个概念,目录也是一种文件,它主要包括了两方面的信息,该目录下文件的文件名称与文件inode编号,它们之间有一一对应的关系。不过目录文件比较特殊,不能用常规的方法进行读写,必须用系统的专用命令来操作。命令ls其实是对目录文件进行读操作,命令mv,rm则是对目录文件进行写操作。

      好了,该说说w(write)的真正含义了,一句话,linux文件权限中的w是对该文件的*内容*进行限定。下面的实验可以验证。
      
      实验1, 目录文件: /test(rwx), 普通文件: /test/file(r--). 当前目录:/test
      
       $ echo "abc" >file
      bash: file: permission denied
      试图对file的内容进行改写, 但file的权限是只读,很显然,操作失败。
      
       $ cat file
      hello world!
      没有问题, 可以读出file的内容。
      
       $ mv file file2
       $ ls
      file2

      这是怎么回事呢, file的权限明明是只读啊, 请注意, 前面提到了, 文件中的rw权限只是针对当前文件的内容进行限定, 文件名不属于当前文件的内容, 它是保存在上一级的目录文件的内容中。而mv命令表面上是针对file的,其实是对/test的内容进行改写,再看看/test的权限, 是可写的(rwx)。许多用户为了保护文件,将其权限设成只读就不管了,这是非常危险的,诚然,可以达到保护文件内容的目的(其实也未必,补充内容中有论述),但你却不能保证文件是否会被更名或被删除,保险的方法是将文件父目录的权限也设为只读。当然,也有其他的方法,比如用chattr +i命令或将文件系统用ro方式挂载等等,但这些不在本文论述范围。
      
       $ rm -f file2
       $ ls
       $

      同样的原因, 我们可以删除file2, 与上一次操作不同的是,我们不是改写/test的一条纪录,而是在删除/test的一条纪录。

      实验2, 目录文件: /test(r-x), 普通文件: /test/file(rw-), 当前目录:/test
      
       $ echo "abc" >file
       $ cat file
      abc

      /test的权限虽然是只读,但我们改写的是file的内容, 它的权限是可写,当然没有问题。
      
       $ mv file file2
      mv: cannot move 'file' to 'file2': permission denied
       $ rm -f file
      rm: cannot remove 'file': permission denied

      我们已经知道, 这两条指令其实与file的权限无关, 而是在改写/test的内容, 当然操作失败。通过前面几个操作,我们应该要分清楚指令真正的操作对象是谁,这样才能对文件权限作出正确的设定。
      
      实验3, 目录文件: /test(rwx), 普通文件: /test/file(r--), 目录文件: /test/dir(r-x), 普通文件: /test/dir/file(rw-), 当前目录:/test
      
       $ mv file file2
       $ mv dir dir2
       $ ls
      dir2 file2

      很顺利, 因为/test/file与/test/dir的父目录/test的权限给的太宽松了,是rwx。
      
       $ rm -f file2
       $ rm -rf dir2
      rm: cannot remove 'dir2/file': permission denied
       $ ls -r
      .:
      dir2
      
      ./dir2:
      file

      到这里, 我们已经丝毫不奇怪普通文件/test/file2被删除, 但具有同等地位的目录文件/test/dir2却安然无恙。当执行rm -rf dir2时, 由于存在普通文件/test/dir2/file, 系统便尝试先删除它, 也就相当于修改目录文件/test/dir2的内容, 但它的权限是只读, 不能进行修改,也就相当于不能删除/test/dir2/file, 又由于/test/dir2与/test/dir2/file有依存关系, /test/dir2也就自然会被保留下来。

      回顾上一个操作(mv dir dir2),为什么目录文件/test/dir却可以被更名呢?由于更名操作并不涉及到自身的内容被修改,修改的只是父目录的内容,而进行删除操作时,父目录的内容固然要被修改,但也同时也要修改自身的内容(因为要删除该目录下的文件),这就不被允许了。如果/test/dir2的权限是可写, 或者目录下没有子文件, 那么它的下场就和/test/file2一样, 被删除。

      通过前面的几个操作,可以看到,文件有这么几个关键状态:被读、被改写、被改名、被删除、被执行。然而系统只区分三种权限,即读、写、执行(rwx)。那么改名与删除这两个操作是否系统就置之不理了呢?不是的,系统将这两个操作归入被操作文件的上一级目录来管理。那么又是以何种方式来管理的呢?答案是目录将其下的所有文件看作是它的内容。这样,当用户更名或删除某个文件时,执行的是对上一级目录的写操作,属于rwx三种权限之一的w操作,并没有逃出系统的管理范围。

      我们的大脑总是活跃的, 能想象出各种各样的事情, 能把许多简单的东西组合成很复杂东西, 上面几个实验不正是这样吗, 象这样的实验我们还可以设计出许多, 但做的越多, 脑子似乎越乱(我已经有一点了), 你能记的住这么多吗? ok, 我们也许能将它想的简单一些, 只需注意两个方面, 一是要清楚目录的内容是什么;二是要明白文件权限中的w(write)的真正含义。仔细想想, 不是吗?
      
      补充:

      在实验1中, 如果用vim对file进行编辑, 并且强制保存(w!), 是可以成功的。这并不是说vim就可以绕开系统的安全机制,而是vim耍了一个小小的把戏,它是先删除这个文件,而后又生成一个同名的新文件。但有一个情况例外,就是当这个文件有另外一个硬链接文件存在时,vim会拒绝强制保存,仔细想想,当进行删除操作后,文件还存在,并没有被真正删除,而这时再新建一个文件,虽然同名,但已经不是原来的那个文件了!笔者曾对此事也颇为疑惑,为了求证,仔细阅读了vim6.2的源代码,才找到答案。有兴趣的读者也可看一看,具体内容在src/fileio.c中。

    身份证号码效验的Script

    身份证号码效验的Script

    jimmy | 15 五月, 2006 10:48

    function CheckIDCard(idcard){
    var Errors=new Array(
    "验证通过!",
    "身份证号码位数不对!",
    "身份证号码出生日期超出范围或含有非法字符!",
    "身份证号码校验错误!",
    "身份证地区非法!" ,
    "身份证号码不能为空"
    );

    if (idcard == "") return Errors[5];

    var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
    var idcard,Y,JYM;
    var S,M;
    var idcard_array = new Array();
    idcard_array = idcard.split("");
    //地区检验
    if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4];
    //身份号码位数及格式检验
    switch(idcard.length){
    case 15:
    if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){
    ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性
    } else {
    ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性
    }
    if(ereg.test(idcard)) return Errors[0];
    else return Errors[2];
    break;
    case 18:
    //18位身份号码检测
    //出生日期的合法性检查
    //闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
    //平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
    if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){
    ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式
    } else {
    ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式
    }
    if(ereg.test(idcard)){//测试出生日期的合法性
    //计算校验位
    S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
    + (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
    + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
    + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
    + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
    + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
    + (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
    + parseInt(idcard_array[7]) * 1
    + parseInt(idcard_array[8]) * 6
    + parseInt(idcard_array[9]) * 3 ;
    Y = S % 11;
    M = "F";
    JYM = "10X98765432";
    M = JYM.substr(Y,1);//判断校验位
    if(M == idcard_array[17]) return Errors[0]; //检测ID的校验位
    else return Errors[3];
    }
    else return Errors[2];
    break;
    default:
    return Errors[1];
    break;
    }

    }


    Web2.0谁买单

    Web2.0谁买单

    jimmy | 12 五月, 2006 11:05

    网络社区只是被称为Web2.0现象的一部分,Web2.0是第二波互联网浪潮,对年轻人有着巨大的吸引力。它拥有创新技术,可以让用户控制网络空间里的资料,而不是被动接受传统媒体集团发布的内容。

    传统媒体集团对此的回应是高价收购新的数字和媒体平台,英国广播公司(BBC)本周宣布,它打算加入新浪潮,以避免脱离下一代人。但还不清楚传统媒体能否驾驭这种现象,因为这种现象天生就是自下而上而非自上而下的,而持续的创新则会迅速让昨天的产品成为明日黄花。

    老牌传媒集团对Web2.0的兴趣可以理解。领先网络社区MySpace.com现在拥有超过7000万用户,鲁珀特•默多克(Rupert Murdoch)的新闻集团(News Corp)9个月前以5.8亿美元收购其母公司时,它的用户还不到2500万。

    YouTube.com是另一家因视频共享而报告爆炸性增长的网站,该网站推出还不到一年时间。每天被人观看的视频片断已从10月份的300万个,上升到了1月的2500万个,现在达到了4000万个。该网站在美国和英国都位居前30名。

    最新的热门网络社区是Facebook.com,它连接了2100所大专院校和2.2万所中学的超过700万学生,其影响已越过大西洋,在英国新增了10万成员,其中三分之二的人每天都上这个网站。有传闻说,几家准备收购它的买主甚至将会给出比默多克收购MySpace更多的钱。美国媒体集团维亚康姆(Viacom)也一直是活跃的买家,本周它花费1.02亿美元收购了Xfire,该公司的400万注册用户能够互相联络并玩在线游戏。去年,维亚康姆以1.6亿美元收购了另一个游戏网站Neopets,还用5000万美元收购了视频点播网站iFilm。

    现在BBC正在进军该领域,还拿出了一个六年重组计划,该公共服务广播机构称之为“按需世界”。其“创造未来”(Creative Future)战略的部分内容,不过是对不断变化的观看与收听模式的回应,也就是把巨大的节目库放到网上让人收看收听。

    今日上班路:1小时39分钟

    今日上班路:1小时39分钟

    jimmy | 10 五月, 2006 09:57

    漫漫五一黄金周,孕育了多少拥塞。昨日上班,1小时50分。

    一个小时,还到不了五棵松,实在无法忍受。以前为了省时间,从二环绕三环、三环绕四环。明儿回三环去算了。

    一共在家就睡了5个小时。什么时候路上的时间比回家睡觉时间还长,就干脆不回在车里睡算了。

    ~~呵呵~~

     

    后记: 5月11日上班用了2小时5分。

    小技巧点滴:页面灰度化

    小技巧点滴:页面灰度化

    jimmy | 07 五月, 2006 11:10

    <table id="allmenu" border="0" cellpadding="0" cellspacing="0">
    <tr><td align=center>
    <p>asfdf</p>
    <p><span style="background-color: #0000FF">adsfasdfasdf</span></p>
    <p><span style="background-color: #0000FF">asdfasdfsadf</span></p>
    <p><font color="#FF0000" size="6">asdfasdfsadf</font></p>
    <p><font color="#FF0000" size="6">asdfsd</font></p>
    </td></tr></table>
    <style>
    .alpha{filter: Alpha(Opacity=40) gray();}
    </style>

    <script>
    var obj1 = document.getElementById("allmenu");
    obj1.className = "alpha";
    </script>

    ————

    引入外部CSS:

    <style type="text/css" media="screen">
    @import url("https://xxx.xxx.xxx/xxx.css");
    </style>