Nov 19

[注:几个星期后发现一个很简单的方法,set PWD=%cd%,然后PWD就存下当前目录了!!!]

最近想把一些项目放在U盘上,编个批处理命令设置环境变量。但是DOS批处理命令非常弱,如果想获得当前目录还得一些小技巧:

首先编辑一个文本文件seed.txt,内容只有一行:
SET PWD=

然后在环境变量设置的脚本中写:
copy seed.txt seed.bat
cd >>seed.bat
call seed.bat
echo on
echo %PWD%

在运行call命令后,就已经获得了当前目录,在后面使用%PWD%就能访问到。

解决方案一共用了3个文件,使用更少文件的解决方法是:在脚本中,临时生成seed.bat,可以用echo命令解决,在获得当前目录以后,再删除seed.bat。

Jul 21

现在计划换服务器主机了,大约等到8月底,将来的计划是买个这样的主机:

  1. 便宜的
  2. 独立IP地址
  3. 支持Python
  4. 支持Php
  5. 支持Java
  6. 教育网能访问的

初步意向是godaddy的主机,外加买独立IP地址和SSL证书。水木SocialSoftware网友推荐了免费IP地址查询,用来挑选godaddy的IP,挺好的先呗在这里:

http://www.nic.edu.cn/cgi-bin/reg/Qfreeip

Jan 13

背着笔记本,行走于宿舍和实验室之间,每次都要修改ip,一个要设成静态ip,另外一个是动态ip,小小研究了一下,写了两个脚本来做,以后不用点鼠标了,^_^

脚本lab.bat
netsh interface ip set address “LAN” dhcp
netsh interface ip set dns “LAN” dhcp

脚本lab.bat
netsh interface ip set address “LAN” static 59.66.96.123 255.255.254.0 59.66.96.1 1
netsh interface ip set dns “LAN” static 166.111.8.28 primary
netsh interface ip add dns name=”LAN” addr=166.111.8.29 index=2

其中LAN是我的局域网连接的名称。更详细的解释,参考netsh命令的帮助,或者查看“如何在命令行更改ip地址”。

如果对用Python完成这个工作感兴趣,请看“用Python干实事: 自动修改Windows的IP、网关和DNS设置”,呵呵。

Jan 06

1. 包含getopt.h
2. 定义短选项,比如,ho:v
3. 定义长选项结构,注意最后一项全部设为0
4. 未定义的选项,解析时会返回’?’
5. 含有参数的选项,参数存于全局变量optarg中
6. 非参数选项的起始索引,存于全局变量optind中

示例程序如下:

#include <stdlib.h></stdlib.h>
#include <stdio.h></stdio.h>
#include <getopt.h></getopt.h>

const char* program_name;

void print_usage(FILE* stream, int exit_code){
        fprintf(stream, "Usage: %s options [ inputfile ...]n", program_name);
        fprintf(stream, "    -h   –help        Display this uage information.n"
                        "    -v   –verbose     Print verbose message.n"
                        "    -o   –output filename    Write output to file.n");
        exit(exit_code);
}

int main(int argc, char* argv[]){
        int next_option;
        const char* short_options = "ho:v";
        const struct option long_options[] = {
                {"help", 0, NULL, ‘h’},
                {"output", 1, NULL, ‘o’},
                {"verbose", 0, NULL, ‘v’},
                {NULL, 0, NULL, 0}
                };
        const char* output_filename = NULL;
        int verbose = 0;
        program_name = argv[0];
        do{
                next_option = getopt_long(argc, argv, short_options, long_options, NULL);
                switch(next_option){
                        case ‘h’:
                                print_usage(stdout, 0);
                        case ‘o’:
                                //the global var optarg contains the specified argument
                                output_filename = optarg;
                                break;
                        case ‘v’:
                                verbose = 1;
                                break;
                        case ‘?’: //if the arg list contains invalid options
                                print_usage(stderr, 1);
                        case -1:
                                break;
                        default:
                                abort();
                }
        }while(next_option != -1);
        printf("[option] verbose: %dn", verbose);
        printf("[option] output: %sn", output_filename);
        if(verbose){
                int i;
                //the global var optind contains the index of the first nonoption argument
                for(i = optind; i<argc;></argc;>                        printf("Argument: %sn", argv[i]);
                }
        }
        return 0;
}

相应的Makefile:

CC=g++
CFLAGS=-Wall -g

all: getopt

getopt: getopt.o
        $(CC) $(CFLAGS) -o $@ $@.o

%.o: %.c
        $(CC) $(CFLAGS) -c $+

clean:
        rm -f *.o
        rm -f getopt

Dec 19

风传中国移动开始推128MB的SIM卡,最大可以达到2GB,号称内置一个卡上操作系统。只是不知道这个系统,是不是开放的,能有多少花样,^_^

相关视频演示:

Dec 12

发信人: thinkpadfan (人,都是逼出来的…), 信区: NoteBook
标? 题: 关于笔记本4G内存的讨论(转载)
发信站: 水木社区 (Mon Nov 12 18:36:13 2007), 站内

关于4GB内存的讨论
在计算机上使用4GB(或者更多)内存一直以来有很多争议,这两天趁着养病仔细研究了一
下这个问题,也与大家分享一下结论。

首先在微软的网站上关于4GB内存限制问题有一篇技术文档:
http://support.microsoft.com/kb/929605/en-us

另外在一个论坛上也对此问题有比较深入的讨论:
http://www.brianmadden.com/content/article/The-4GB-Windows-Memory-Limit-What-doe
s-it-really-mean-

总结一下,大致可以归纳为以下几点:

1. 要在PC中使用超过4GB的内存,需要同时满足以下若干条件
(1)主板配置有支持至少8GB内存寻址的芯片组(例如Intel P965/P975)
(2)CPU支持X64指令集(例如Intel Core2处理器)
(3)BIOS支持memory remapping
(4)使用64bit的操作系统(或支持物理内存扩展技术的32bit操作系统)

2. Intel 945芯片组或更早期的芯片组,受到32bit的限制,最大只能寻址到4GB,也就是说
只能访问4GB以内的地址。但是这4GB地址并不是完全留给内存使用的,与此同时,各种接口
、IO设备都还需要分配大量的寻址空间(例如显卡通常就要占用数百MB),所以最后留给系
统物理内存这一硬件的寻址空间,就只剩下3GB多一些。而操作系统也只能识别到这么多的
物理内存。因此,如果PC系统的硬件达不到以上第一点中的(1)(2)(3)条时,即使在系统中
安装超过4GB的内存,能够被识别的物理内存也只有4GB,而留给操作系统使用的只有3GB多
一些。

3. 操作系统对识别的内存数也有影响。32bit的操作系统只具备4GB的寻址能力,即使硬件
满足上述使用4GB内存的条件,限于操作系统的寻址空间限制,必须要保留数百MB的寻址空
间给各种接口和IO设备,因此操作系统仍然最多只可以用到3GB多一些的物理内存。而
64bit的操作系统下,因为把各种接口和IO设备所占用的地址空间移到更靠后的地址段,因
此4GB物理内存可以完全寻址,也就是完全识别使用。再延伸一下,同理可以推断,假设某
64bit操作系统的最大寻址能力是8GB,而系统安装了8GB的物理内存,那么操作系统可以识
别并使用的内存也就是7GB多一些。

4. 我自己找了一台ThinkCentre M55(Intel 965芯片组)并安装了4GB内存,然后分别安装
了Vista 32bit、Vista 64bit、Ubuntu Linux 32bit和Ubuntu Linux 64bit进行测试,从结
果来看验证了上述观点。

补充:根据黑友“bobww”提供的信息,再补充两点如下:

以下两点均要求硬件满足以上第一点中的(1)(2)(3)。
5. 部分支持PAE技术的32bit操作系统(主要是服务器类系统),例如:
? Microsoft Windows 2000 Advanced Server
? Microsoft Windows 2000 Datacenter Server
? Microsoft Windows Server 2003 Enterprise Edition
? Microsoft Windows Server 2003 Datacenter Edition
可以通过启用PAE功能来支持4GB或者更多内存。参见微软知识库:
http://support.microsoft.com/kb/283037/zh-cn
而32bit的Linux通过在内核中配置支持Large Memory Support,也可以支持4GB内存。
(关于这一点,我还没有测试证实,如果有时间会试试看。)
关于微软操作系统支持内存的上限,可以参见我之前发布的文档:
http://thinklenovo.spaces.live.com/blog/cns!277BF25C1053199D!1289.entry

6. 至于32bit的Windows XP,在升级到SP2之前可以使用PAE技术使用到4GB内存,但是升级
到SP2之后,由于微软限制,即使开启PAE,系统也只能显示3GB左右的内存容量。参见微软
知识库:
http://support.microsoft.com/?scid=kb%3Ben-us%3B888137&x=15&y=12
(关于XP SP2之前版本的情况,我也还没有测试证实,如果有时间也会试试看。)
另外我在32bit的Vista上测试了强制启用PAE的情况,结果和不启用PAE没有差别,与XP
SP2的表现相同。

from: http://thinklenovo.spaces .live.com/PersonalSpace.aspx

Dec 11

最近已经很多次听朋友讲起Google的Android,晚上花了些时间观看介绍视频、博客文章和下载SDK运行了一下,仍然停留在表面,不过貌似挺有意思的。以前曾经写手机程序完,那是几年以前的事情了,如果不是几天前聊天忽然提到J2ME,恐怕自己都忘记了,呵呵。

收工睡觉,哪天有时间再继续看Android,^___^

Nov 29

在虚拟机上安装了一个linux使用,缺省安装,启动起来就进入x-window。很多情况下,只是通过SSH连过去操作,并不需要图形界面。记一下,修改方法:

使用vi修改文件/etc/inittab

将里面默认runlevel从5修改到3即可。

不要设置为0或6。每个runlevel,在/etc/inittab都有详细注释。

Nov 10

花了大半天时间翻完了《Don’t Make Me Think》第2版,当然是中文版。

这本书去年秋天Allen就推荐过,今年再次推荐,正好图书馆里面有的借。如果你喜欢或从事Web设计、开发,那么我也向你推荐。

内容不是很长,最快号称2.5小时就能看完,而我慢慢阅读下来,也就大半天时间吧。内容也有点像太极拳,看完以后,就全忘记了,但当你看到一个网站,却自觉地开始分析,窥测和思考改进。这本书也不是专业研究文献,而是适合所有人的阅读口味,大量的彩色插图和示例,轻快易懂,让我不由得写几句。Okay,over!

Nov 10

虚拟机上装了一个Linux,很久不用,又忘记密码了,记一下恢复步骤吧:

我们可以使用单用户Linux 模式来登录,然后设置一个新的root口令。要进入单用户模式,重新引导计算机。如果我们使用的是默认的引导装载程序GRUB ,可以执行下列步骤来进入单用户模式:

1. 在引导装载程序菜单上,键入 e 来进入编辑模式。

2. 我们会面对一个引导项目列表。查找其中类似以下输出的那一行:

?kernel /vmlinuz-2.4.18-0.4 ro root=/dev/hda2

3. 按箭头键直到这一行被突出显示,然后按 e

4. 按一下空格键来添加一个空格,然后添加 single 来通知GRUB 引导单用户Linux 模式。按 Enter ?键来使编辑结果生效。

5. 我们会被带回编辑模式屏幕,从这里,按? b ,GRUB 就会引导单用户 Linux 模式。载入结束后,会看到一个类似以下的 shell 提示:

?sh-3.0#

现在,可以设置root密码了,键入:

?sh-2.05# passwd root

屏幕会提示重新键入口令来校验。结束后,口令就会被改变,我们就可以在提示下键入 reboot 来重新引导;然后,象平常一样登录为根用户。Voila! Done!