C语言的科学和艺术
星期六, 07月 29th, 2006

这本书是国内外几个著名大学的C语言课本,除了C语言的基本语法外,着重引导读者开始使用一个语言编写程序的过程。
不过如果你已经有了较多开发经验,那还是不要看这本书吧,呵呵。
优点
- 深入浅出,易学好懂;
- 着重引导了程序开发的基本规范和思路,对初学者非常重要;
- 通过作者自己写的库隐藏了部分C语言比较烦琐难懂的语法细节,使初学者更容易上手;
缺点
- 不少代码不使用C标准库;
- 比较罗嗦一点;
- 缺乏部分语法细节;
优点和缺点其实只是对不同的人而言,书本身是很好的。这本书非常适合没有语言开发经验或者自学缺乏良好开发基础的人学习使用,如果是这样的读者,就不要犹豫了,很值!
Try Ruby!
星期二, 07月 25th, 2006
一个有趣的应用,在web界面上提供了一个类似shell的东东,让你可以使用ruby语言进行简单交互。并且还提供了一个基础的ruby指南教程,通过简单的描述和互动操作,让你在很短的时间内熟悉ruby语言的基本功能。
大约一共有9个教程,页面上说的是需要15分钟,不过我花了1个多小时完成,15分钟稍微夸张了一点。
整个应用是采用ajax构建,界面操作非常友好,还带有较强动感切换效果,以至于我开始以为是flash构建的。看来现在flex跟着ajax屁股后面,为RIA摇旗呐喊,也是不无道理的。



ruby确实是一个很有意思的语言,代码简洁优美,效率很高。不过有些地方语法感觉过于简略了点,容易导致理解上的障碍,不知道是不是习惯问题。
有机会还可以看看ROR啊,呵呵。
CSS World Awards Winners 2006
星期一, 07月 17th, 2006
cssmania.com搞了一个CSS World Awards,选出了几些采用css构建的web网站精品,很不错的网站。
Site Of Year
更多内容可见http://awards.cssmania.com/2006/07/07/css-world-awards-winners-2006.php
SQL Server 2005 中的分区表和索引
星期三, 07月 5th, 2006
mount – linux下如何访问fat分区
星期一, 06月 19th, 2006
我google了一下如何在linux上访问fat分区,找到了如下文字。
mount使用指南
在Linux中,如果你要使用储存设备(Mo、硬盘、光驱等),就得先将它挂上(Mount),而当储存设备挂上了之后,就可以把它当成一个目录来进行访问。挂上一个设备使用mount命令。
在使用mount这个指令时,至少要先知道下列三种信息:
- 要Mount对象的文件系统类型?(Filesystemtype)
- 要Mount对象的设备名称?(/dev/????)
- 要将设备Mount到哪个目录去?
一、获得系统支持的文件系统类型
就第一点来说,用户可以执行
cat/proc/filesystems
来获得机器上支持的文件系统类型。如果系统并不支持你要挂接设备的文件系统类型,那你可能需要重新编译内核以使其增加对该种文件类型支持。关于如何编译内核请参照LinuxAid在线培训栏目中的相关文章。
常用的文件系统有:
- Win95/98常用的FAT32文件系统:vfat
- WinNT用的文件系统:ntfs
- OS2用的文件系统:hpfs
- Linux用的文件系统:ext2
- 光盘片用的文件系统:iso9660
其中虽然vfat是指FAT32系统,但事实上它也兼容FAT16的文件系统类型。
二、确定设备的名称
在Linux中,设备名称通常都在/dev里。这些设备名称的命名都是有规则的,我们可以用”推理”的方式把设备名称找出来。
譬如说/dev/hda1这个IDE设备。hd是HardDisk(硬盘)的意思,sd是SCSIDevice,fd是FloppyDevice(或是FloppyDisk?)。a则是代表第一个设备,通常IDE接口可以接上四个IDE设备(例如四块硬盘)。所以要识别IDE硬盘的方法分别就是:hda、hdb、hdc、hdd。此外,hda1中的”1″代表hda的第一个硬盘分区(partition),hda2代表hda的第二个分割区,依此类推。
此外,你可以直接检查/var/log/messages这个文件,在该文件中可以找到计算机开机后,系统已辨认出来的设备代号。
三、查找挂接点
最后我们要决定将设备挂接到哪里,先查看一下你的计算机是不是有个/mnt的空目录?该目录就是专门用来当作挂载点(MountPoint)的目录。建议您在/mnt里多建这几个目录:/mnt/cdrom、/mnt/floppy、/mnt/mo等来当作目录的专用挂载点。
举例而言,如要挂载下列五个设备的话,其执行指令可能是(假设都是Linux的ext2系统,如果是WinXX的话,请将ext2改成vfat):
- 软盘>> mount -t ext2/ dev/fd0 /mnt/floppy
- MO>> mount -t ext2 /dev/sda /mnt/mo
- cdrom>> mount -t ext2 /dev/hdc /mnt/cdrom
- SCSIcdrom>> mount -t iso9660 /dev/sdb /mnt/scdrom
- SCSIcdr>> mount -t iso9660 /dev/sdc /mnt/scdr
这是假设,如果你的设备的名称跟这个不同的话请自行修改。
最后需要注意的是:
1.执行mount动作时先打一下pwd看看现在的目录是不是在挂载点,如果现在目录在挂载点的话,mount(或umount)不会成功(会显示devicebusy)。
2.想卸载某设备的语法是umount目录名,例如umount/mnt/cdrom等。
linux! go go go !
星期一, 06月 19th, 2006
想搞linux很久了,但是进度一直缓慢,基本上前一次看书掌握的内容已经快忘完了,所以基本上也可以说没有进度。
我觉得人在很多时候表现不自爱…你要好好的计划按步骤实施,到最后总是没有结果,非得要外部有很大的压力以后,才会屁颠屁颠的向前跑…
没办法,昨天一狠心…把windows2003格了,装上了FC5。
感觉界面上貌似pp了很多,和前几版相比,至少登陆界面改观较大。但是骨子里,linux仍然不是一个服务于最终用户的桌面操作系统,软件的操作总的来说两个字-“难用”…甚至一些软件压根用不了,例如“Add/Remove Soft”,软件的信息到15%左右就加载失败了,重复了n次。如果这是发生在windows上面,估计早就被骂死了…
倒是yum命令行工具用的蛮爽,但是对一般用户来讲,这是不可能接收的…
基于我以前和昨天的经验,总的来说,linux还是一个适用于开发人员的操作系统,要走向桌面还有很长的路……
Dive Into Python
星期四, 05月 18th, 2006
Dive Into Python 是为有经验的程序员编写的一本 Python 书。
构造当前页面完成的URL
星期三, 03月 9th, 2005
简单的技巧,以前没有这么用过。
可以这样构造当前页面完成的URL:
“http://” & Request.ServerVariables(“HTTP_HOST”) & Request.ServerVariables(“PATH_INFO”) &”?” & Request.ServerVariables(“QUERY_STRING”)
取得了这个字符串后,我们在写有关“主/明细表”程序的时候,当在明细表页面经过了多次操作后,最后仍然可以回到主表中,查询参数和页码都保留了。当然如果明细表操作在新开窗口中进行,那就不用我在这儿叽里咕噜了。
具体怎么实现呢?例如我们有学生列表,通过班级或者年龄等条件查询出来,并且翻到了中间页码。我们可以在页面顶端加上:
Response.Cookies(“MySite”)(“URL”)=”http://” & Request.ServerVariables(“HTTP_HOST”) & Request.ServerVariables(“PATH_INFO”) &”?” & Request.ServerVariables(“QUERY_STRING”)
把当前页面的URL写入Cookies中,在点击姓名到明细表,并且经过了编辑更新或者删除等等操作后,通过语句:
Response.Redirect(Request.Cookies(“MySite”)(“URL”))
SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY
星期五, 01月 21st, 2005
SQL Server 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值。
1) IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。它不受作用域和会话的限制,而受限于指定的表。
2) @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
3) SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值
SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。
例如,有两个表 T1 和 T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。
假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。
@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。
SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。
而IDENT_CURRENT(‘T1′) 和 IDENT_CURRENT(‘T2′) 返回的值分别是这两个表最后自增的值。
可靠的 OnPropertyChange
星期三, 01月 5th, 2005
我们经常需要判断一个表单状态或者属性,例如当在一个文本框中输入字符时,使提交按钮可用,这是我们通常会用onkeypress。
但是如果用户把表单清空呢?或者按后退键清除输入,那么在这时候如何触发事件?
答案是onPropertyChange ,更改文本框的任何属性(包括从键盘、鼠标或脚本向文本框输入的内容)时,该事件都会激发。
原文:http://www.microsoft.com/china/MSDN/library/WebServices/WebServices/nacwebteam11042002.mspx


