EICAR Test String

 

这段代码:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

该段代码是欧洲反病毒发展研究所(EICAR)开发的一种病毒代码,其中的特征码已经包含在各种杀毒软件的病毒代码库里,所以可以用做测试病毒扫描引擎。
EICAR标准反病毒测试文件,它是反病毒软件厂商在全世界范围内提供的用来检查反病毒软件安装的一个测试标准。它一方面让你让你确认自己的电脑正在处于杀毒软件的保护中。另一方面给你一个确信的病毒“样本”。这种方法产生的文件是无害的,尽管测试。
打开“记事本”,将上面一行代码拷贝进去,然后将文件保存,文件类型选择“所有文件”,文件名为“EICAR.COM”。

下面是测试结果及你所使用的杀毒软件等级:
特等:复制完代码后便提示内存有病毒
优等:刚保存完就提示病毒(或者直接删除)
中等:保存后几秒提示病毒(或者直接删除)
下等:需自己启动病毒扫描查杀才提示病毒(或者直接删除)
劣等:无论怎么扫描都无法提示病毒(或者直接删除)

诺顿主页对这个的解释:
The Eicar Test String is not a real virus. It is a text file that is used to test antivirus software. By default, the file name is Eicar.com, but it could be renamed to any other name.
译:Eicar Test String并不是一个真正有效的病毒,它仅仅是个通常用于测试杀毒软件的测试文件,缺省状态下,该文件名字为Eicar.com,但是可以重命名为其他任何名字。
官方网站:http://www.eicar.org/anti_virus_test_file.htm


WINDOWS系统文件详解

我们每天都在使用Windows,可你对它的系统文件熟悉吗?所谓的系统文件一般指的是与Windows有密切关系的,系统正常运作所离不开的文件。这些文件绝大多数位于System32目 录下(X:\Windows\System32\) 以及系统文件备份目录DllCache下(X:\Windows\System32\Dllcache\)(“X”是你的XP系统所在的分区)他们一般是以dll文件的形式存在的,其次还有cpl(控制面版)等其他一些格式的文件。

我们所看到的Windows外观的元素(图标、位图、对话框、文字等)就储存在这些文件当中,例如资源管理器(Explorer)和IE的工具栏上面的前进、后退等按钮图案,就是以位图的形式存在与shell32.dll文件中的。

下面的文章中我们就将介绍各种Windows操作系统文件夹的作用。

A ↑
ACCESS.CHM – Windows帮助文件
ACCSTAT.EXE – 辅助状态指示器
ADVAPI32.DLL – 高级Win32应用程序接口
AHA154X.MPD – SCSI驱动程序
AM1500T.VXT – 网卡驱动程序
AM2100.DOS – 网卡驱动程序
APPSTART.ANI – 动画光标
APPS.HLP – Windows帮助文件
AUDIOCDC.HLP – “易码编码解码器”帮助文件
AWARDPR32.EXE – 增加打印机工具

B ↑
BIGMEM.DRV – BIGMEM虚拟设备
BILLADD.DLL – 动态链接库(支持MSW)
BIOS.VXD – 即插即用BIOS接口
BUSLOGIC.MPD – SCSI驱动程序

C ↑
CALC.EXE – 计算器应用程序
CANNON800.DRV – 佳能打印机驱动程序
CHOICE.COM – MSDOS命令
CHS16.FON – 字体文件(16点阵中文)
CANYON.MID – MIDI文件例子
CARDDRV.EXE – PCMCIA支持程序
CDFS.VXD – CDROM文件系统
CDPLAYER.EXE – CD播放器应用程序
CDPLAYER.HLP – CD播放器帮助文件
CHIPS.DRV – 芯片技术显示驱动程序
CHKDSK.EXE – DOS磁盘检查工具
CHOOSUSR.DLL – 网络客户
CHOKD.WAV – 声音文件例子
CIS.SCP – 脚本文件(演示如何建立与Compuserve的PPP连接)
CLAIRE~1.RMI – MINI序列
CLIP.INF – 安装信息文件(剪粘板查看器)
CLOSEWIN.AVI – 影片剪辑(AVI)(如何关闭窗口)
CMC.DLL:Mail – API1.0公共信息调用
COMBUFF.VXD – COM端虚拟设备
COMCTL32.DLL – 32位Shell组件
COMDLG32.DLL – 32位公共对话库
COMIC.TIF – TrueType字体文件(Comic Sans Ms)
COMMAND.COM – 公共对话库
COMMDLG.DLL – 16位公共对话库
COMMON.HLP – OLE帮助文件
COMPOBJ.DLL – OLE16/32互*作库
CONAGEN.EXE – 32位控制支持
CONFAPI.DLL – Microsoft网络组件
CONFIG.SYS – 配置文件
CONFIG.TXT – 自述文件(配置文件中如何使用命令)
CONTROL.EXE – “控制面板”应用程序
COOL.DLL – 统一资源定位文件
COPY.INF – 安装信息文件
CP-1250.NLS – 自然语言支持文件
CPQNDIS.DOS – 网卡驱动程序
CPQNDIS3.VXD – Compaq以太控制器NDIS驱动程序
CR3240.EXE – DOS6.22中文版CR3240打印机驱动程序
CRTDLL.DLL – Microsoft C运行时间库
CSETUP.EXE – MSDOS6.22中文设置程序
CSETUP.WIN – CSetup.exe支持文件
CSMAPPER.SYS – 系统文件(支持PCMCIA)
CSPMAN.DLL – 动态链接库(SoundBlaster 16 Driver)
CTRLPAN.EXE – MSDOS命令(系统控制台程序)
CTRLPAN.EXE – MSDOS6.22中文版控制程序

D ↑
DBLBVFF.SYS – 双缓冲驱动程序
DC21X4.SYS – NDIS3驱动程序
DCIMAN.DLL – 显示控制接口
DCIMAN32.DLL – 显示控制接口
DDEML.DLL – DDE信息库
DEBMP.DLL – 光栅显示设备
DEBUG.EXE – Debug调试工具
DECPSMW4.INF – 安装信息文件(DEC打印机安装)
DECLAN.VXD – DECLAN网卡驱动程序
DEFRAG – 打开”选定驱动器”窗口
DEL.INF – 安装信息文件
DELTEMP.COM – 初始化帮助工具
DELTREE.EXE – 删除目录工具
DEMET.DLL – 向量显示工程
DESKCP16.DLL – 16位桌面控制面板
DESKTOP.MSN – Microsoft网络组件
DESS.DLL – 表格显示工程
DEWP.DLL – 字处理显示工程
DIALER.CNT – 对话帮助
DIALER.EXE – 电话拨号程序
DIALER.HLP – 电话拨号帮助文件
DIALMON.EXE – 拨号监视程序(IE2.0)
DIBENG.DLL – 独立设备的位同工程
DICONIX.DRX – 打印机驱动
非常棒哦^__^.WAN – 声音文件例子
DIRECTCC.EXE – 直接线缆连接应用程序
DISKCOMP – 磁盘比较工具
DISKCOPY.COM – 磁盘拷贝工具
DISKDRV.INF – 安装信息
DISPLAY.TXT – 显示卡README文件
DMCOLOR.DLL – 通用打印驱动程序彩打支持库
DOSKEY.COM – DOS命令
DOSX.EXE – MSDOS配置程序
DRAGDROP.AVI – 影片剪辑(AVI)(如何使用拖拽)
DRIVER.SYS – DOS驱动程序
DRVSPACE.EXE – 磁盘压缩工具
DRVSPACE.HLP – 磁盘空间管理帮助文件

E ↑
EDIT.COM – DOS文字编辑程序
EDLIN.EXE – DOS行编辑器
EE16.VXD – 虚拟设备驱动程序
EISA.VXD – 即插即用EISA总线计数器
EK550C.ICM – 打印机简介
EMM386.EXE – 扩展内存管理程序
ENABLE.INF – 初始化信息
ENGCT.EXE – MSN支持文件
ESCP24SC.DRV – 设备驱动程序
EUDCEDIT.CNF – 帮助索引文件(造字程序)
EUDCEDIT.EXE – 造字程序
EUDCEDIT.HLP – 帮助文件(造字程序)
EUDCEDIT.INF – 安装信息文件(造字程序)
EVX16.DOS – 网卡驱动程序
EWRK3.DOS – 网卡驱动程序
EWRK3.SYS – 网卡驱动程序
EXCEL.XLS – Excel5.0文件模板
EXCEL4.XLS – Excel4.0文件模板
EXCHANGE.TXT – Inbox和Exchange的自述文件
EXCHNG.CNT – Mail/Exchange帮助文件内容
EXCHNG.HLP – Mail/Exchange组件
EXCHNG32.EXE – 对用户的交换机作初始设置
EXPLORER.AVI – 影片剪辑(AVI)(如何使用资源管理器)
EXPLORER.EXE – “资源管理器”应用程序
EXPO.HLP – 帮助文件(产品信息)
EXPOSTRT.EXE – 产品信息应用程序
EXTRACT.EXE – 解压缩工具
EXTRA.TXT – 自述文件(联机访问附加文件)

F ↑
FAQ.TXT – 疑难解答自述文件
FAXCODEC.DLL – 传真编码/译码器
FAXCOVER.EXE – 封面编辑器
FC.EXE – DOS命令,比较两个文件
FD16-700.MPD – SCSI驱动程序
FD8XX.MPD – SCSI驱动程序
FDISK.EXE – DOS命令,在硬盘上建立、删除及显示当前分区
FILESEC.VXD – 文件存取控制管理器
FILEXFER.CNT – 文件传输帮助文件内容
FILEXFER.EXE – Microsoft文件传输
FIND.AVI – 影片剪辑(如何使用查找)
FIND.EXE – 寻找指定字符串命令
FINDMVI.DLL – 媒体视觉支持
FINSTALL.DLL – 字库安装程序
FINSTALL.HLP – 字库安装帮助文件
FLSIMTD.VXD – PCMCIA支持
FLSIMTD.VXD – PCMCIA支持
FONT16.EXE – DOS6.22中文版16点阵字体驱动程序
FONTS.INF – 字体选择初始化信息
FONTVIEW.EXE – 字体浏览程序
formAT.COM – DOS磁盘格式化工具
FOUTLINE.EXE – 轮廓字体驱动程序
FRAMEBUF.DRV – SVGA显示器驱动程序
FTE.DLL – 声音浏览文件传输工程文件
FTP.EXE – 文件传输协议TCP工具
FURELI~1.RMI – MINI序列

G ↑
GBK.TXT – 中文Windows95GBK代码集字符定义表
GDI.EXE – 简版WIN3.1图形界面
GDI32.DLL – 32位GDI图形界面
GENERAL.IDF – 一般MIDI指示器
GRPCONV.EXE – Windows程序组转换器
GUIDE.EXE – 应用程序(MSN)

H ↑
HARDWARE.TXT – 硬件自述文件
HOSTS.SAM – TCP配置
HPCLRLSK.ICM – 打印简介
HPDESK.ICM – 打印机简介表
HPDSKJET.DRV – 打印机驱动程序
HPEISA.VXD – 网络适配器驱动程序
HPJAHLP.CNT – JetAdmin程序帮助文件
HPJD.DLL – HPJetAdmin支持程序
HPLAN.DOS – 网络适配器驱动程序
HPLJ300.DRV – HPLJ300DPI打印机驱动程序
HPLJ300.EXE – MSDOS命令(HP打印机驱动)
HPLJ-31.SPD – 打印机驱动程序
HPLJ600.DRV – HPLJ600DPI打印机驱动程序
HPLJP-V4.INF – 打印机安装信息
HPNETPRN.INF – HPJetAdmin支持程序
HPPJXL31.SPD – 打印机驱动程序
HPPLOT.DRV – 打印机驱动程序
HPPLOT.HLP – 打印机驱动程序帮助文件
HPPRARBK.DLL – HPJetAdmin支持程序
HPPRARRK.HLP – HPJetAdmin支持程序帮助文件
HPVCM.HPM – 打印机驱动程序
HSFLOP.PDR – HSFLOP虚拟设备
HTICONS.DLL – 终端设备动态链接库
HYPERTRM.CNT – 终端设备帮助文件
HYPERTRM.EXE – 终端设备应用程序
HYPERTRM.HLP – “超级终端”帮助
HZKBD.EXE – 常用输入方法程序
HZVIO95.EXE – 显示驱动程序

I ↑
I82593.DOS – 网络适配器驱动程序
IB401917.SPD – 打印机驱动程序
IBM20470.SPD – 打印机驱动程序
IBM20K.DOS – 网络适配器驱动程序
ICM32.DLL – 图象颜色匹配程序
ICMOI.DLL – 用户界面颜色匹配程序
ICONLIB.DLL – 图符库
IEXPLORE.CNT – 帮助索引文件(IE)
IEXPLORE.EXE – InternetExplore
IEXPLORE.HLP – 帮助文件(IE)
IFSHLP.SYS – 文件系统安装帮助文件
IFSMGR.VXD – 文件系统安装管理程序
IMAGEOIT.EXE – 图象编辑器光标程序
IMCLIENT.DLL – Microsoft网络组件
IME.CNT – 帮助索引文件(中文输入法)
IME.HLP – Windows帮助文件
IME.INF – 安装信息文件(中文输入法)
IMEGEN.CNF – 帮助索引文件(输入法生成器)
IMEGEN.EXE – 输入法生成器
IMEGEN.HLP – 帮助文件(输入法生成器)
IMEINFO.INI – 输入法初始化文件
IMM32.DLL – WIN32IMM应用程序界面
INBOX.EXC – 邮件组件
INDICDLL.DLL – 多语言组件
INET.TXT – IE自述文件
INET16.DLL – 动态链接库(支持IE2.0)
INETAB32.DLL – 动态链接库(支持Internet mail)
INETCFG.DLL – 动态链接库(支持IE2.0)
INETCPL.CPL – 控制面板文件(配置IE2.0)
INETMAIL.INF – 安装信息文件(Internet mail)
INETWIZ.EXE – Internet安装向导
INformS.WPF – 样板文件
INSTBE.BAT – Microsoft网络组件
INSTDICT.EXE – MSDOS命令(输入法安装程序)
INTB.VXD – 13号中断虚拟设备
INTL.CPL – 控制面板
INT-MAIL.CNT – 帮助索引文件(Internet mail)
IOS.INI – 设置需要安全保护的程序
IOSCLASS.DLL – CDROM安装程序
IRMATR.DOS – 网络适配器驱动程序
ISAPNP.VXD – ISA总线即插即用程序

J ↑
JOY.CPL – 游戏杆控制面板
JOYSTICK.INF – 多媒体安装信息
JP350.DRV – 打印机驱动程序
JUNGLE~1.WAV – 声音文件

K ↑
KBDBE.KBD – 比利时键盘格式
KBDBR.KBD – 巴西键盘格式
KBDCA.KBD – 法国、加拿大键盘格式
KBDOS.KBD – 美国键盘格式
KDCOLOR1.SPD – 打印机驱动程序
KERNEL32.DLL – 32位内核
KEYB.COM – 将控制键盘程序装入内存
KODAKCE.ICM – 柯达ICC配置文件
KRNL386.EXE – Core应用程序

L ↑
LABEL.EXE – DOS命令,设置磁盘名称
LFNBK.EXE – 长文件名备份文件
LFNBK.TXT – LFNBK的自述文件
LICENSE.HLP – Windows帮助文件
LMSCRIPT.EXE – LAN管理器文稿处理程序
LOGIN.EXE – Win95登录NetWare文件
LQ1600K.EXE – LQ1600K打印驱动程序

M ↑
MAILMSG.DLL – 微软网络组件
MAILOPT.INF – MAIL/MAPI设置文件
MAPI.DLL – Mail/Exchange组件
MCIAVI.DRV – 多媒体驱动程序
MCICDA.DRV – MCICD声音驱动程序
MCIOLE.DLL – MCIOLE句柄
MCIPIONR.DRV – MCI光盘驱动程序
MCISEQ.DRV – MCI定序器驱动程序
MCIVISCA.DRV – MCIVCR驱动程序
MCIWAVE.DRV – MCI Ware驱动程序
MDMNOKIA.INF – 安装信息文件(modem)
MDMNOVA.INF – 安装信息文件(modem)
MDMVV.INF – 安装信息文件(modem)
MEMMAKER.EXE – 内存管理程序
MEMMAKER.INF – 内存管理程序设置信息
MFCUIA32.DLL – OLEI公共对话动态链接库
MIDI.INF – 即插即用MIDI设备信息
MINET32.DLL – 支持Internet Mail动态链接库
MKECR5XX.MPD – SCSI驱动程序
ML3XEC16.EXE – 应用程序(MAPI)
MLSHEXT.DLL – 微软核扩展库
MMCI.DLL – 媒体类安装程序
MMDEVLDR.VXD – 即插即用设备装载程序
MMDRV.HLP – 多媒体帮助文件
MMSOUND.DRV – 多媒体驱动程序
MMSYSTEM.DLL – 多媒体系统内核
MMTASK.TSK – 多媒体背景任务交换器
MODE.COM – DOS命令
MODERN.FON – 字体文件(modem)
MORE.COM – DOS命令
MOUSE.DRV – 鼠标驱动程序
MOVEWIN.AVI – 影片剪辑(如何移动窗口)
MPLAYER.EXE – 媒体播放程序
MPR.DLL – WIN32网络接口动态链接库
MSAB32.DLL – 微软网络地址簿
MSBASE.INF – 设置信息
MSCDEX.EXE – DOS MSCDEX CDROM扩展工具
MSCDROM.INF – 类安装设置信息
MSD.EXE – 微软诊断工具
MSD.INI – 微软诊断初始化
MSDET.INF – 系统检测设置信息
MSDISP.INF – 显示设置信息
MSDLG.EXE – 数据链接控制协议
MSDOS.INF – 设置信息
MSDOSDRV.TXT – 设备驱动程序自述文件
MSFT.VRL – 统一资源定位文件
MSGSRV32.EXE – Windows32位虚拟设备信息系统
MSHDC.INF – 硬盘控制设置信息
MSJSTICK.DRV – 即插即用游戏杆驱动程序
MSMAIL.INF – Mail/MAPI初始化
MSMOUSE.INF – 鼠标设置信息
MSN.TXT – 微软网络自述文件
MSNET32.DLL – 微软32位网络API库
MSNEXCH.EXE – 微软网络设置程序
MSNPSS.HLP – 微软网络帮助文件
MSNVER.TXT – 微软网络帮助信息
MSPAINT.EXE – 画图工具
MSPCIC.DLL – PCMCIA类安装与控制工具
MSPORTS.INF – 公共设置信息
MSPP32.DLL – 微软网络打印支持程序
MSPWL32.DLL – 口令清单管理库
MSSBLST.DRV – 声霸卡驱动程序
MSSBLSI.VXD – 声霸卡驱动程序
MSSHRVI.DLL – 共享内核扩展程序
MSSNDSYS.DRV – Windows声音系统驱动程序
MSSP.VXP – Windows NT安全支持
MSTCP.DLL – TCP用户界面
MSVIEWUT.DLL – 显示设备服务数据链接库
MTMMINIP.MPD – SCSI驱动程序
MULLANG.INF – 多种语言字体支持设置信息
MVIWAVE.DRV – 声音驱动程序

N ↑
NBTSTAT.EXE – TCP工具
NDDEAPI.DLL – Workgroups DDE共享接口
NDDENB.DLL – 微软网络DDE NetBIOS接口
NDISHLP.SYS – 实模式NDIS支持驱动程序
NET.EXE – 实模式网络客户软件
NET.INF – 网络检测信息
NET.MSG – 网络客户信息
NET3COM.INF – 网络设置信息
NETAMD.INF – 网络设置信息
NETAPI.DLL – 网络应用程序接口动态链接库
NETAPI32.DLL – 32位网络API动态链接库
NETAVXT.INF – MS内部传输文件
NETBEUI.VXD – 32位NetBEUI协议
NETBIOS.DLL – NetBIOSAPI库
NETDCA.INF – 安装信息文件
NETDDE.EXE – Windows网络动态数据交换
NETDET.INI – NetWare检测文件
NETDI.DLL – 网络设备安装
NETH.MSG – 网络客户帮助信息
NETOS.DLL – NOS检测DLL
NETWATCH.EXE – 网络观测程序
NETWORK.TXT – 网络信息自述文件
NOTEPAD.EXE – 记事本应用程序
NODRIVER.INF – 即插即用设备信息
NOTEPAD.EXE – NOTEPAD文件
NSCL.VXD – NSCL虚拟设备
NW16.DLL – NetWare客户
NWAB32.DLL – 地址簿支持动态链接库
NWLSCON.EXE – 登录文稿控制台程序
NWLSPROC.EXE – NetWare登录处理器
NWNET32.DLL – NetWare客户
NWNP32.DLL – NetWare组件
NWREDIR.VXD – NetWare重定向
NWSERVER.VXD – NCP服务
NWSP.VXD – NCP服务安全提供
OEMREVA.INF – 安装信息文件
OLE2.DLL – OLE2.0动态链接库
OLE2.INF – OLE设置信息
OLE32.DLL – 32位OLE2.0组件
OLEAUT32.DLL – OLE2-32自动化
OLECL1.DLL – 对象链接与嵌入客户库
OLEDLG.DLL – Windows OLE2.0用户接口支持
OLESVR.DLL – 对象链接与嵌入服务端库
OLETHK32.DLL – OLE形实替换程序库

P ↑
PACKAGER.EXE – 对象包装程序
PARALINK.VXD – 远程网络存取并行口驱动程序
PBRVSH.EXE – “画图”应用程序
PDOS95.BAT – 进入中文DOS状态
PERF.VXD – 系统性能监视器
PIFMGR.DLL – 程序信息文件管理服务程序
PING.EXE – TCPPing工具
PMSPL.DLL – LAN管理应用程序接口
POWER.DRV – 高级电源管理驱动程序
PPPMAC.VXD – Windows虚拟PPP驱动程序
PRINT.EXE – DOS打印文件
PRINTERS.TXT – 打印信息自述文件
PROGMAN.EXE – 程序管理器
PRTVPD.INF – 打印机升级设置信息

Q ↑
QUIKVIEW.EXE – 快速查看
QUIT.EXE – 退出中文DOS状态

R ↑
README.TXT – Windows95自述文件
REGEDIT.EXE – 注册编辑器
REGSERV.EXE – 远程注册
REGWIE.EXE – 注册工具
REGSERV.INF – 远程注册
RESTORE.EXE – DOS命令
RNAAPP.EXE – 拨号网络应用程序
RNASERV.DLL – 远程网络存取服务
RNASETUP.DLL – 远程网络存取设置动态链接库
RNATHUNK.DLL – 远程网络存取转换支持动态链接库
RNAUI.DLL – 远程网络存取用户接口DLLRNDSRV32.DLL复制服务程序
ROBOTZCL.WAV – 声音文件
ROBOTZWI.WAV – 声音文件
ROMAN.FON – 字型文件
ROUTE.EXE – TCP/IP ROUTE命令
RPCLTC1.DLL – 远程调用库
RPCNS4.DLL – 远程调用库
RPCPP.DLL – 远程调用打印驱动
RPCRT4.DLL – 远程调用库
RPCSS.EXE – 远程调用结点映象
RPLBOOT.SYS – 远程程序装入
RPLIMAGE.DLL – 远程程序装入磁盘映象器
RSRC16.DLL – 资源计量器
RSRCMTR.EXE – 资源计量器
RSRCMTR.INF – 资源计量器
RUMOR.EXE – DDE测试/游戏
RUNDLL.EXE – 把DLL作为应用程序运行
RUNDLL32.EXE – 32位壳组件

S ↑
S3.DRV – S3显示驱动
S3.VXD – S3虚拟设备
SACLIEN.DLL – Microsoft网络组件
SAMPLEVIDEOS – 图象文件
SAPNSP.DLL – Winsock数据连接库
SAVE32.COM – 安装时所需的TSR文件
SB16.VXD – 16位声卡虚拟设备
SB16SND.DRV – 16位声卡驱动
SBAWE.VXD – AWE声卡虚拟设备
SBAWE32.DRV – AWE声卡驱动
SBFM.DRV – 16位声卡驱动
SCANDISK.BAT – MSDOS6.x Scandisk的替代存根模块SCANDISK.BAT磁盘诊断工具
SCANDISK.INI – 磁盘诊断工具
SCANDISK.PIF – 安装磁盘诊断工具时的PIF文件
SCANDSKW.EXE – 磁盘扫描工具
SCANPROG.EXE – 磁盘扫描工具
SCRNSAVE.SCR – 屏幕保护
SCSI.INF – SCSI安装文件文件名描述
SCSIIHLP.VXD – SCSI支持文件
SCSIPORT.PDR – SCSI虚拟设备口
SECUR32.DLL – Microsoft Win32安全服务
SECURCL.DLL – Microsoft网络组件
SEIKO24E.DRV – 打印机驱动
SEIKOSH9.DRV – 打印机驱动
SERIAL.VXD – 串口VCOMM驱动器
SERIFE.FON – 字型文件
SERVER.HLP – 服务器帮助文件
SE小乖IR.EXE – SBS文件
SETUP.BIN – 安装支持文件
SETUP.BMP – 安装Wash位图文件
SETUP.EXE – Windows95安装程序
SETUP.INF – 安装信息文件
SETUP.TXT – 安装时的README文件
SETUP4.DLL – 安装支持文件
SETUPPP.INF – 安装信息
SETUPX.DLL – 安装支持
SETVER.EXE – MSDOS版本显示,该程序可在网络上执行
SF4029.EXE – 打印机驱动
SHARE.EXE – MSDOS共享实用程序
SHELL.INF – 安装壳信息
SHELL.VXD – 虚拟壳设备
SHELL2.INF – 颜色组合
SHELL3.INF – 颜色组合
SIZE1-1.CUR – 光标
SIZE1-M.CUR – 光标
SIZE4-M.CUR – 光标
SIZENESW.ANI – 活动光标
SIZEWE.ANI- 活动光标
SKPSFA-1.SPD – 打印机驱动
SLAN.DOS – 网络适配器驱动
SLCD32.MPD – SCSI驱动器
SLENH.DLL – 高级节能选项
SMALLE.FON – 字型文件
SMALLF.FON – 字型文件
SMARTDRV.EXE – 超高速缓存程序
SMARTND.DOS – 网络适配器驱动器
SMC3000.DOS – 网络适配器驱动器
SMC9000.VXD – 网络适配器驱动器
SNAPSHOT.EXE – 抽点
SNAPSHOT.VXD – 抽点虚拟设备
SNDREC32.EXE – 录音机
SNIP.VXD – 网络适配驱动器
SOCKET.VXD – Windows虚拟Socket网卡驱动器SOCKET.VXD PCMCIA支持
SOL.CNT – 纸牌游戏
SOL.HLP – 纸牌游戏帮助文件
SORT.EXE – MSDOS分类实用程序
SOUNDREC.CNT – 录音机帮助文件内容
SOUNDREC.HLP – 录音机帮助文件
SPARROW.WPD – SCSI驱动器
SPARROWX.MPD – SCSI驱动器
SPOOL32.EXE – 打印机支持
SPOOLER.VXD – 打印机共享虚拟设备
SRAMMTD.VXD – PCMCIA支持
SSERIFE.FON – 字型文件
SSERIFF.FON – 字型文件
SSFLYWIN.SCR – 屏幕保护
SSSTARS.SCR – 屏幕保护
STAR24E.DRV – 打印机驱动
STAR9E.DRV – 打印机驱动
START.EXE – 启动程序
STATE.PBK – Microsoft网络组件
STDOLE.TLB – OLE2.0文件
STDOLE32.TLB – OLE2-32文件
STEMO409.DLL – Windows95帮助文件的DLL
STLSO4SS.SPD – 打印机驱动程序
STLS577U.SPD – 打印机驱动程序
STORAGE.DLL – OLE存储器管理库
STRN.DOS – 网络适配器驱动
SUBST.EXE – MSDOS Subst实用程序
SUEXPAND.DLL – LZ DLL安装
SUHELPER.BIN – 安装支持
SUPERVGA.DRV – 高级VGA显示驱动
SURPORT.TXT – PSS支持信息
SVCPROP.DLL – Microsoft网络组件
SVRAPI.DLL – 32位公用服务器API实用程序
SXCIEXT.DLL – Matrox显示驱动支持文件
SYMBOLE.FON – 字型文件
SYS.COM – MSDOS系统实用程序
SYSCLASS.DLL – 系统类库安装
SYSDETMG.DLL – 系统检测库
SYSEDIT.EXE – 系统编辑器
SYSLOGO.RLE – 系统标识
SYSMON.EXE – 系统监控程序
SYSMON.HLP – 系统监控帮助
SYSTEM.DRV – 最小Win3.1标准模式
SYSTHUNK.DLL – Windows系统形实替换程序库
SYSTRAY.EXE – 高级节能管理

T ↑
T128.MPD – SCSI驱动器
T160.MPD – SCSI驱动器
T20N3.VXD – 网络适配驱动器
T30ND.DOS – 网络适配驱动器
T338.MPD – SCSI驱动器
TADA.WAV – 声音文件
TAPI.DLL – API通话程序
TAPI.INF – API通话安装信息文件
TAPI32.DLL – 32位形实替换
TAPIADDR.DLL – API通话程序
TAPIEXE.EXE – API通话组件
TAPIINI.EXE – API通话组件
TASKMAM.EXE – 任务管理器
TCCARC.DOS – 网络适配驱动器
TCTOKCH.VXD – 网络适配驱动器
TELEPHON.CPL – 通话帮助
TESTPS.TXT – PostScript测试
TEXTCHAT.EXE – Microsoft网络组件
THEMIC-1.WAV – 声音文件
THINKJET.DRV – 打印机驱动
THREED.VBX – Windows95浏览
T1850.DRV – 打印机驱动
TIMEDATE.CPL – 时间/日期控制面板
TIMES.TTF – 时间字型
TIMESBD.TTF – 时间粗体字型
TIMESBI.TTF – 时间粗斜体字型
TIMESI.TTF – 时间斜体字型
TIMEZONE.INF – 安装信息
TIMLP232.SPD – 打印机驱动
TIPS.txt – 提示和技巧自述文件
TKPHZR32.SPD – 打印机驱动
TLNK.DOS – 网络适配驱动器
TLNK3.VXD – 网络适配驱动器
TMV1.MPD – SCSI驱动器
TOOLHELP.DLL – 16位开发工具帮助器
TOSHIBA.DRV – 打印机驱动
TOUR.EXE – 浏览文件
TPHAIII.ICM – 打印机简介
TRACERT.EXE – TCP/IP IRACEROUTE命令
TREE.COM – MS DOS树实用程序
TREEEDCL.DLL – Microsoft网络组件
TREENVCL.DLL – Microsoft网络组件
TRIUMPHI.SPD – 打印机驱动
TSD32.DLL – 声音压缩管理器
TSENG.DRV – ET4000W32显示驱动
TTY.DRV – 打印机驱动
TTY.HLP – TTY打印机驱动帮助
TYPELIB.DLL – OLE2.0

U ↑
U9415470.SPD – 打印机驱动
UBNEI.DOS – 网络适配器驱动
ULTRA124.MPD – SCSI驱动器
ULTRA24F.MPD – SCSI驱动器
UMDM16.DLL – 通用调制解调器驱动组件
UMDM32.DLL – 通用调制解调器驱动组件
UNIDRV.DLL – Microsoft通用打印机驱动库
UNIDRV.HLP – 通用打印机驱动帮助
UNIMODEM.VXD – 通用调制解调器驱动
USER32.DLL – 32位用户

V ↑
V86MMGR.VXD – V86MMGR虚拟设备
VCACHE.VXD – VCache虚拟设备
VCD.VXD – 虚拟COM驱动程序
VCOMM.VXD – VCOMM驱动程序
VCOND.VXD – Win32控制台
VDMAD.VXD – VDMAD虚拟设备
VER.DLL – 小型Win3.1安装程序16位版动态链接库
VER.NEW – 版本检测与文件安装库
VERSION.DLL – 32位版本动态链接库
VERX.DLL – 安装程序使用的版本动态库
VFAT.VXD – VFAT文件系统
VFD.VXD – 软盘虚拟设备
VFLATD.VXD – 虚拟平板帧缓存虚拟设备
VGA.DRV – VGA显示驱动程序
VIDCAP.INF – 即插即用VCD信息
VIDEOT.VXD – 视频虚拟设备
VIP.386 – TCP/IP虚拟IP设备
VJOYD.VXD – 游戏棒虚拟设备
VKD.VXD – 虚拟键盘设备
VLB32.DLL – Mail/Exchange组件
VMD.VXD – Win3.1虚拟鼠标驱动程序
VMM.VXD – 虚拟存储管理设备
VMM32.VXD – 虚拟存储管理设备
VMOUSE.VXD – 虚拟鼠标驱动程序
VNBT.386 – NetBIOS传输驱动程序
VNETBIOS.VXD – VNETBIOS虚拟设备
VNETSUP.VXD – 网络支持虚拟设备
VPD.VXD – 虚拟LPT驱动程序
VPICD.VXD – 虚拟可编程干扰控制器设备
VPOWERD.VXD – 高级电源管理虚拟设备
VREDIR.VXD – Microsoft网络32位客户端程序
VSAMI.DLL – AMI文件语法分析程序
VSASC8.DLL – ASCII文件语法分析程序
VSBMP.DLL – BMP文件语法分析程序
VSERVER.VXD – Microsoft网络32位服务器端程序
VSGIF.DLL – GIF文件语法分析程序
VSHARE.VXD – 32位共享虚拟设备驱动程序
VSMSW.DLL – Win写文件语法分析
VSPP.DLL – PowerPoint语法分析程序
VSRTF.DLL – RTF文件语法分析程序
VSTIFF.DLL – TIFF文件语法分析程序
VSW6.DLL – Word6文件语法分析程序
VSWORD.DLL – Word文件语法分析程序
VSWP5.DLL – WordPerfect5文件语法分析程序
VSXL5.DLL – Excel文件/图表语法分析程序
VTCP.386 – TCP/IP虚拟TCP驱动程序
VTDAPI.VXD – VTDAPI虚拟设备
VTDI.386 – 传输驱动接口支持程序
VXDLDR.VXD – 虚拟设备驱动程序装载器

W ↑
WAVE.INF – 即插即用音波设备信息
WDTOOOEX.MPD – SCSI驱动
WGPOADMN.DLL – Mail/Exchange组件
WHLP16T.DLL – 帮助动态链接库
WIN87EM.DLL – 80387数学仿真库
WINABC.HLP – 智能ABC帮助文件
WINBX.HLP – 表形码输入法帮助文件
WINCHA.HLP – 繁体仓颉输入法帮助文件
WINDOWS.CNT – Windows95帮助文件内容
WINDOWS.HLP – Windows95帮助文件
WINFILE.CNT – 文件管理器帮助文件内容
WINFILE.EXE – Windows工作组文件管理器
WINFILE.HLP – 文件管理器帮助文件
WINGB.HLP – 区位码输入法帮助文件
WINHLP23.HLP – Windows帮助文件
WINIME.HLP – *作指南帮助文件
WINNM.HLP – GBK内码输入法帮助文件
WININIT.EXE – Windows初始化文件
WINIPCFG.EXE – TCP/IP配置工具
WINNEWS.TXT – Winnews信息
WINPHO.HLP – 繁体注音输入法帮助文件
WINPOPUP.EXE – POPUP工具
WINREG.DLL – 远程注册支持
WINPY.HLP – 全拼输入法帮助文件
WINSOCK.DLL – Windows的套接API
WINSY.HLP – 双拼输入法帮助文件
WINXSP.HLP – GBK双拼输入法帮助文件
WINXZM.HLP – GBK郑码输入法帮助
WINZM.HLP – 郑码输入法帮助文件
WNASPI32.DLL – Windows DLL32位ASPI
WPSUNI.DRV – 传真驱动程序
WPSUNIRE.DLL – WPS主机资源执行程序

X ↑
XCOPY.EXE – DOS XCOPY工具
XCOPY32.EXE – 文件拷贝程序
XGA.DRV – XGA显示驱动程序

开发者版本:你属于哪个版本的程序员?

国外开发者博客中有一篇有趣的文章,将程序员按水平像软件版本号那样划分为不同的版本。相对于在招聘时分为初级,中级,高级程序员,直接表明需要某种语言N版本的程序员或许更方便直接。根据作者的观点,可将WEB开发者大致分为以下几个版本:
Alpha:阅读过一些专业书籍,大多数能用Dreamweaver或者FrontPage帮朋友制作一些Web页面。但在他们熟练掌握HTML代码以前,你大概不会雇佣他们成为职业的WEB制作人员。

Beta:已经比较擅长整合站点页面了,在HTML技巧方面也有一定造诣,但还是用Tables来制作页面,不了解CSS,在面对动态页面或数据库连接时还是底气不足。

Pre Version 1 (0.1):比Beta版的开发者水平要高。熟悉HTML,开始了解CSS是如何运作的,懂一点JavaScript,但还是基于业余水准,逐步开始关心动态站点搭建和数据库连接的知识。这个版本的WEB开发人员还远不能成为雇主眼中的香饽饽。

1.0: 能够基本把控整个站点开发,针对每个问题尽可能的找到最直接的解决办法。但对可测性,可扩展性以及在不同(层)框架下如何选择最合适的WEB设计工具尚无概念。这个版本的WEB开发者有良好的技术基础,需要有进一步的帮助和指导。

2.0:懂面向对象的编程语言,理解分层开发的必要性,关注代码分离,对问题寻找更完美的解决方法,偶然也会考虑设计模式的问题,但对此仍然概念不清。属于优秀的初级开发者,能完成较松散的代码开发(相对大型严谨的站点开发而言),在面对较复杂问题寻找解决办法时需要周边人的帮助。

3.0:开始较为深入的理解面向对象编程和设计模式,了解他们的用途,当看到好的设计模式时能看透其本质,逐步关注分层的架构解决办法和可测试性。理解不同的开发语言并能说出他们的异同(例如各自的优势)。属于优秀的中级别开发者,雇主也确信他们最终能找到问题的解决办法,这个版本的人可以给1.0和2.0的开发者以指导。但他们对架构的理解仍然不够清晰,值得一提的是,只要给予一些指导,他们能很快理解并熟记做出的决定,以及选定方案的优势所在。

4.0:
理解模式,重视用户的反馈。着手研究方法论,架构设计和软件开发的最佳入口。头脑中已经形成了超越开发语言,技术架构的整体方案,可根据需求解构程序。能从理论的角度,不同模式如何融合成最佳形态,将多种X-驱动的模式应用到不同的方案中。是精通多语言的高手,理解不同系统和方法论的细微差别,属于高级程序员。这个级别的人能够轻易的辅导2.0和3.0的程序员,将他们推向更高的级别。

5.0:从系统的角度考虑问题。对各种系统结构有深入研究,能对整个代码架构中的问题进行改进。在团队粘合性以及代码安全性方面有杰出贡献。对1.0到4.0版本的开发人员出现的问题能及时察觉,让整个团队保持积极性且保持兴奋的状态创建软件解决办法。举例来说,他们总是对新的技术和信息保持饥渴状态,试图用最简便的方案解决开发任务。在整个IT团队中获得信任,属于高级程序员和架构师。

那么,您属于哪个版本的程序员呢?

 

源文:http://geekswithblogs.net/leesblog/archive/2008/06/22/developer-versioning-which-version-are-you.aspx

JS的IE和Firefox兼容性汇总

以下以 IE 代替 Internet Explorer,以 MF 代替 Mozzila Firefox

1. document.form.item 问题
(1)现有问题:
现有代码中存在许多 document.formName.item(“itemName”) 这样的语句,不能在 MF 下运行
(2)解决方法:
改用 document.formName.elements[“elementName”]
(3)其它
参见 2

2. 集合类对象问题
(1)现有问题:
现有代码中许多集合类对象取用时使用 (),IE 能接受,MF 不能。
(2)解决方法:
改用 [] 作为下标运算。如:document.forms(“formName”) 改为 document.forms[“formName”]。
又如:document.getElementsByName(“inputName”)(1) 改为 document.getElementsByName(“inputName”)[1]
(3)其它

3. window.event
(1)现有问题:
使用 window.event 无法在 MF 上运行
(2)解决方法:
MF 的 event 只能在事件发生的现场使用,此问题暂无法解决。可以这样变通:
原代码(可在IE中运行):
<input type=”button” name=”someButton” value=”提交” onclick=””/>

<script language=”javascript”>
function gotoSubmit() {

alert(window.event);     // use window.event

}
</script>

新代码(可在IE和MF中运行):
<input type=”button” name=”someButton” value=”提交” onclick=””/>

<script language=”javascript”>
function gotoSubmit(evt) {
evt = evt ? evt : (window.event ? window.event : null);

alert(evt);              // use evt

}
</script>
此外,如果新代码中第一行不改,与老代码一样的话(即 gotoSubmit 调用没有给参数),则仍然只能在IE中运行,但不会出错。所以,这种方案 tpl 部分仍与老代码兼容。

4. HTML 对象的 id 作为对象名的问题
(1)现有问题
在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能。
(2)解决方法
用 getElementById(“idName”) 代替 idName 作为对象变量使用。

5. 用idName字符串取得对象的问题
(1)现有问题
在IE中,利用 eval(idName) 可以取得 id 为 idName 的 HTML 对象,在MF 中不能。
(2)解决方法
用 getElementById(idName) 代替 eval(idName)。

6. 变量名与某 HTML 对象 id 相同的问题
(1)现有问题
在 MF 中,因为对象 id 不作为 HTML 对象的名称,所以可以使用与 HTML 对象 id 相同的变量名,IE 中不能。
(2)解决方法
在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。
此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。
(3)其它
参见 问题4

7. event.x 与 event.y 问题
(1)现有问题
在IE 中,event 对象有 x, y 属性,MF中没有。
(2)解决方法
在MF中,与event.x 等效的是 event.pageX。但event.pageX IE中没有。
故采用 event.clientX 代替 event.x。在IE 中也有这个变量。
event.clientX 与 event.pageX 有微妙的差别(当整个页面有滚动条的时候),不过大多数时候是等效的。

如果要完全一样,可以稍麻烦些:
mX = event.x ? event.x : event.pageX;
然后用 mX 代替 event.x
(3)其它
event.layerX 在 IE 与 MF 中都有,具体意义有无差别尚未试验。

8. 关于frame
(1)现有问题
在 IE中 可以用window.testFrame取得该frame,mf中不行
(2)解决方法
在frame的使用方面mf和ie的最主要的区别是:
如果在frame标签中书写了以下属性:
<frame src=”xx.htm” id=”frameId” name=”frameName” />
那么ie可以通过id或者name访问这个frame对应的window对象
而mf只可以通过name来访问这个frame对应的window对象
例如如果上述frame标签写在最上层的window里面的htm里面,那么可以这样访问
ie: window.top.frameId或者window.top.frameName来访问这个window对象
mf: 只能这样window.top.frameName来访问这个window对象

另外,在mf和ie中都可以使用window.top.document.getElementById(“frameId”)来访问frame标签
并且可以通过window.top.document.getElementById(“testFrame”).src = ‘xx.htm’来切换frame的内容
也都可以通过window.top.frameName.location = ‘xx.htm’来切换frame的内容
关于frame和window的描述可以参见bbs的‘window与frame’文章
以及/test/js/test_frame/目录下面的测试
—-adun 2004.12.09修改

9. 在mf中,自己定义的属性必须getAttribute()取得
10.在mf中没有   parentElement parement.children   而用
parentNode parentNode.childNodes
childNodes的下标的含义在IE和MF中不同,MF使用DOM规范,childNodes中会插入空白文本节点。
一般可以通过node.getElementsByTagName()来回避这个问题。
当html中节点缺失时,IE和MF对parentNode的解释不同,例如
<form>
<table>
<input/>
</table>
</form>
MF中input.parentNode的值为form, 而IE中input.parentNode的值为空节点

MF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)

11.const 问题
(1)现有问题:
在 IE 中不能使用 const 关键字。如 const constVar = 32; 在IE中这是语法错误。
(2)解决方法:
不使用 const ,以 var 代替。

12. body 对象
MF的body在body标签没有被浏览器完全读入之前就存在,而IE则必须在body完全被读入之后才存在

13. url encoding
在js中如果书写url就直接写&不要写&例如var url = ‘xx.jsp?objectName=xx&objectEvent=xxx’;
frm.action = url那么很有可能url不会被正常显示以至于参数没有正确的传到服务器
一般会服务器报错参数没有找到
当然如果是在tpl中例外,因为tpl中符合xml规范,要求&书写为&
一般MF无法识别js中的&

14. nodeName 和 tagName 问题
(1)现有问题:
在MF中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值。在 IE 中,nodeName 的使用好象
有问题(具体情况没有测试,但我的IE已经死了好几次)。
(2)解决方法:
使用 tagName,但应检测其是否为空。

15. 元素属性
IE下 input.type属性为只读,但是MF下可以修改

16. document.getElementsByName() 和 document.all[name] 的问题
(1)现有问题:
在 IE 中,getElementsByName()、document.all[name] 均不能用来取得 div 元素(是否还有其它不能取的元素还不知道)。

1,document.getElementById替代document.all(ie适用)
2,集合[]替代()(ie适用)
3,target替代srcElement;parentNode替代parentElement(parentNode ie适用)
4,node.parentNode.removeChild(node)替代removeNode(this)(ie适用)
5,有空白文本节点
6,无outerHTML属性
7,事件局部变量e替代事件全局变量event
8,e.button键值有别于event.button,只有3个键值而无组合键值
9,无ondrag事件
10,DOMMouseScroll替代onmousewheel;-e.detail替代event.wheelDelta
11,addEventListener替代attachEvent;removeEventListener替代detachEvent
12,e.preventDefault()替代event.returnValue=false;e.stopPropagation()替代event.cancelBubble=true
13,style.top、style.left等严格检查”px”单位(加”px” ie适用)
14,style=”-moz-opacity:0.9″替代style=”filter:alpha(opacity=90)”;无其它filter
15,style.cursor=”pointer”替代style.cursor=”hand”(ie适用)
16,title替代alt(ie适用)
17,状态栏默认不可修改,需调整ff设置
18,内置绘图功能以canvas或者SVG替代vml
19,代码出错时经常不报错(想来也是ff的无奈之举吧,如果每个ie独有的表达方式换在它里面都报错的话,怕是报都报不过来吧)
20,对缓存的清理非常不好
注:标明“ie适用”者为通用性建议写法,未标明者在ie里不适用。

以下所有IE指IE6.0

验证是否是IE浏览器(来之于google js)

var agt=navigator.userAgent.toLowerCase();
var is_ie=(agt.indexOf(“msie”)!=-1 && document.all);

正式开始

事件委托方法

IE

document.body.onload = inject; //Function inject()在这之前已被实现

firefox

document.body.onload = inject();

有人说标准是:

document.body.onload=new Function(‘inject()’);

在firefox无法取得event.srcElement

通过其他方式传递对象

if(isIE)
thistable.attachEvent(“onmousedown”,OnClickChangeTdBackColor);
//thistable.onmousedown=OnClickChangeTdBackColor;
else//deal firefox
{

for(var i=0;i<thistable.rows.length;i++)
{
var rowObj = thistable.rows[i];
for( var j=0;j<rowObj.cells.length;j++)
{
var cellObj = rowObj.cells[j];
cellObj.setAttribute(“onmousedown”,”OnClickChangeTdBackColor(this)”);
}
//alert(rowObj.cells[0].tagName);
}
}

这是来之 http://blog.joycode.com/lostinet/archive/2005/02/27/44999.aspx

在FireFox下编写事件处理函数是很麻烦的事.
因为FireFox并没有 window.event . 如果要得到 event 对象,就必须要声明时间处理函数的第一个参数为event.

所以为了兼容IE与FireFox,一般的事件处理方法为:
btn.onclick=handle_btn_click;
function handle_btn_click(evt)
{
if(evt==null)evt=window.event;//IE
//处理事件.
}
对于简单的程序,这不算麻烦.

但对于一些复杂的程序,某写函数根本就不是直接与事件挂钩的.如果要把event传进该参数,那么所有的方法都要把event传来传去..这简直就是噩梦.

下面介绍一个解决这个麻烦事的方法,与原理.

JScript中,函数的调用是有一个 func.caller 这个属性的.
例如
function A()
{
B();
}
function B()
{
alert(B.caller);
}
如果B被A调用,那么B.caller就是A

另外,函数有一个arguments属性. 这个属性可以遍历函数当前执行的参数:
function myalert()
{
var arr=[];
for(var i=0;i
arr[i]=myalert.arguments[i];
alert(arr.join(“-“));
}
alert(“hello”,”world”,1,2,3)
就能显示 hello-world-1-2-3
(arguments的个数与调用方有关,而与函数的参数定义没有任何关系)

根据这两个属性,我们可以得到第一个函数的event对象:
btn.onclick=handle_click;
function handle_click()
{
showcontent();
}
function showcontent()
{
var evt=SearchEvent();
if(evt&&evt.shiftKey)//如果是基于事件的调用,并且shift被按下
window.open(global_helpurl);
else
location.href=global_helpurl;
}
function SearchEvent()
{
func=SearchEvent.caller;
while(func!=null)
{
var arg0=func.arguments[0];
if(arg0)
{
if(arg0.constructor==Event) // 如果就是event 对象
return arg0;
}
func=func.caller;
}
return null;
}
这个例子使用了SearchEvent来搜索event对象. 其中 ‘Event’ 是 FireFox 的 event.constructor .
在该例子运行时,
SearchEvent.caller就是showcontent,但是showcontent.arguments[0]是空.所以 func=func.caller 时,func变为handle_click .
handle_click 被 FireFox 调用, 虽然没有定义参数,但是被调用时,第一个参数就是event,所以handle_click.arguments[0]就是event !

针对上面的知识,我们可以结合 prototype.__defineGetter__ 来实现 window.event 在 FireFox 下的实现:

下面给出一个简单的代码.. 有兴趣的可以补充

if(window.addEventListener)
{
FixPrototypeForGecko();
}
function FixPrototypeForGecko()
{
HTMLElement.prototype.__defineGetter__(“runtimeStyle”,element_prototype_get_runtimeStyle);
window.constructor.prototype.__defineGetter__(“event”,window_prototype_get_event);
Event.prototype.__defineGetter__(“srcElement”,event_prototype_get_srcElement);
}
function element_prototype_get_runtimeStyle()
{
//return style instead…
return this.style;
}
function window_prototype_get_event()
{
return SearchEvent();
}
function event_prototype_get_srcElement()
{
return this.target;
}

function SearchEvent()
{
//IE
if(document.all)
return window.event;

func=SearchEvent.caller;
while(func!=null)
{
var arg0=func.arguments[0];
if(arg0)
{
if(arg0.constructor==Event)
return arg0;
}
func=func.caller;
}
return null;
}
</body></html>

 

 

firefox与IE(parentElement)的父元素的区别

因为firefox与IE都支持DOM,因此使用obj.parentNode是不错选择.

IE
obj.parentElement
firefox
obj.parentNode

 

asp.net中UniqueID和clientID的区别

要使用document.getElementById 方法,则使用控件的时候要这样来作

“javascript:OnSelectSubCatalog(\””+subCatalog_drp.ClientID+”\”,”+catalogIDX+”,”+catID.ToString()+”)”;

 

调用Select元素的区别

移出一个选择项


IE :sel.options.remove(sel.selectedIndex);
firefox :

增加选择项:


IE: subCatalog.add(new Option(text,value));

firefox:
var opnObj = document.createElement(“OPTION”);
//opnObj.id = optionID;
opnObj.value = value;
opnObj.text = text;
subCatalog.appendChild(opnObj);

cursor:hand VS cursor:pointer

firefox不支持hand,但ie支持pointer,所以建议统一使用pointer。

js解决各个浏览器的css不兼容问题

如果分别用IE5、IE6、IE7、firefox、google浏览器、苹果浏览器浏览同一个网页,将可能出现不一样的效果。
这是它们之间对CSS的解析选择器不一样或错误和个别bug所导致。为了解决这些浏览器的css不兼容问题。
我们不得不找到一个能平衡于它们之间的解决方法。

如png透明问题在IE5、IE6下无法显示出其效果,我们可能会使用CSS hack或者引入外部JavaScript来实现。譬如前面我提到过用pngfix的那个方法就是调用外部JavaScript来解决在IE5、IE6下png透明问题。当然还有更多的方法。

而现在有种更加完美的方法能兼容IE5、IE6、IE7、firefox、google浏览器、苹果浏览器的CSS选择器解析不一样问题。那就是: ie7 – js

ie7 – js中是一个JavaScript库(解决IE与W3C标准的冲突的JS库),使微软的Internet Explorer的行为像一个Web标准兼容的浏览器,支持更多的W3C标准,支持CSS2、CSS3选择器,使css兼容各个浏览器。它修复了许多的HTML和CSS问题,并使得透明PNG在IE5、IE6下正确显示。

目前该ie7 – js版本: 2.1 beta 4

用法:
直接引用Google Code服务器上的js文件。

IE7.js
使IE5、IE6升级至兼容IE7
注释使Internet Explorer版本号小于7的IE浏览器载入该代码。

<!--[if lt IE 8]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE8.js"></script>
<![endif]-->

 

 

IE8.js
使IE5、IE6、IE7支持更多的W3C标准(修复了许多的HTML和CSS问题)。
注释使Internet Explorer版本号小于8的IE浏览器载入该代码,而其它符合标准的浏览器则会忽略该代码,并在IE8出来后不干扰其工作。

<!--[if lt IE 7]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE7.js"></script>
<![endif]-->

PNG
此脚本仅修复了图像命名为:*-trans.png
遗憾的是,此方法透明的PNG图像不能平铺(重复)使用在背景上;也不能用在CSS “position”定位属性上 。

除了直接引用Google Code服务器上的js文件外,如果你愿意你也可以下载然后引入
下载地址页面:http://code.google.com/p/ie7-js/downloads/list

 

演示:
http://ie7-js.googlecode.com/svn/test/index.html

十年技术,不要再迷茫

前几天看到多年的兄弟又换工作了,他在QQ签名上写了一句“三十而立,网海茫茫;十年技术,一场空!哎,何处是归途”,看了以后,我回想了一下,感觉我和他也差不多,说实在的,我们计算机班46个人,现在搞软件这行的就剩5个人,转眼间,我们工作都快十年了,而我们几个人的处境其实差不多,也许是物以类聚,人以群分,没办法,我们没关系,没运气,只能靠正常的发展,一步步去做,分析了一下我们这几个人的发展阶段,做了几张图,如下:

工资是生活的根本,每个出来的人都一样,可太看重工资,也许就跟我们一样了,到现在才觉悟就有些晚了,我们做技术的,一般在提高自己的过程中,都希望成一定比例增长,可十年过后,在现在这样的生活环境里还是难以生存,社会在发展,可我们的收入发展,和社会发展太平行了,回头想来,我们都是没什么欲望的人,每天都在为别人创造利益,公司选的好,可能说大了,还是创造了社会价值,反之只是为了生存而活,一个人想成功,就得有强烈的欲望,“如果梦想是成功的方向,那么欲望则是成功的动力”,如果你还在为工资较劲,那还不如为自己定下你成功的目标,为了自己的方向去努力,工资,能让你活就行,剩下的就是为了成就事业去努力,不要看别人做成什么样了,做好自己就行。

 

在职场的发展的过程中,钱赚少了没关系,可人脉绝对不能少,就算你工作十年,人脉上不来,你也就只是个做技术的,也许你有了点小钱,想做点事,确发现身边的朋友少,业务关系少,不知道做什么,感觉自己力不从心,人脉广了,你的成长也会更快,机会更多,也许十年才能做的事,你五年就可以做到。

 

根据技术能力的发展,在公司里一般有过十年工作经验的人,差不多都经历了这些职位,职位只能证明你能力的位置,你发展到什么样,如果是找工作,你得将自己定在什么样的位置,可以参考一下,不过每个人的规划不同,如果是和我画的图差不多,那就得改变一下自己的心态了。

 

工作十年,知识是要不断提高的,这与上面职位的发展是一样的,“知识就是力量”,你有多大能力,公司会去评估,不要把一年的经验当作十年用,不然你永远也只是浪费青春,以前在招聘的时候,我遇到一个已经工作五年了人,但他只要求工资3500,可想而知,他对自己都没有信心,五年,足可以改变人的一生了,他确一成不变的在原地。

经历十年,不断的在得与失中徘徊,到现在也没什么值得骄傲的事,没什么成就感,写点心得希望能和同道的朋友多多交流。

 

摘自 http://www.cnblogs.com/nick4/archive/2010/08/19/1803393.html

php ODBC连接sqlserver

开放资料链接 (Open Database Connectivity,ODBC) 是链接数据库的共通界面。ODBC 是由微软主导的数据库链接标准,实作环境也以微软的系统最成熟。在 UNIX 系统中,通常要使用其它厂商所提供的 ODBC 界面,有些 UNIX 厂商会自己提供 ODBC 界面 (如 SUN 有为 Solaris 提供 ODBC)。
ODBC 和数据库的查询采用 SQL 语言,这和大部份的数据库查询方式一样,这使得系统可以很容易和各种数据库沟通。当然,透过 ODBC 界面,后端的数据库不一定要 DBMS 这种大型数据库系统,亦可以是资料表 (如 Microsoft Access)、或者是试算表 (如 Microsoft Excel)。

odbc_autocommit: 开关自动改动功能。
odbc_binmode: 配置二进位资料处理方式。
odbc_close: 关闭 ODBC 链接。
odbc_close_all: 关闭所有 ODBC 链接。
odbc_commit: 改动 ODBC 数据库。
odbc_connect: 链接至 ODBC 数据库。
odbc_cursor: 取得游标名。
odbc_do: 执行 SQL 指令。
odbc_exec: 执行 SQL 指令。
odbc_execute: 执行预置 SQL 指令。
odbc_fetch_into: 取得返回的指定列。
odbc_fetch_row: 取得返回一列。
odbc_field_name: 取得字段名称。
odbc_field_type: 取得字段资料类型。
odbc_field_len: 取得字段资料长度。
odbc_free_result: 释出返回资料的内存。
odbc_longreadlen: 配置返回栏的最大值。
odbc_num_fields: 取得字段数目。
odbc_pconnect: 长期链接至 ODBC 数据库。
odbc_prepare: 预置 SQL 指令。
odbc_num_rows: 取得返回列数目。
odbc_result: 取得返回资料。
odbc_result_all: 返回 HTML 表格资料。
odbc_rollback: 撤消当前交易。
odbc_setoption: 调整 ODBC 配置。

odbc_autocommit 开关自动改动功能。
语法: int odbc_autocommit(int connection_id, int [OnOff]);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来打开或关闭自动更新 (auto-commit) 功能。参数 connection_id 为 ODBC 链接的 ID 值。参数 OnOff 可省略,表打开或关闭自动改动功能,默认值为 on,欲关闭则设 off。返回值为目前的自动更新状态,若打开自动更新功能则返回 true;若关闭自动更新功能则返回 false。
参考: odbc_commit() odbc_rollback()

odbc_binmode 配置二进位资料处理方式。
语法: int odbc_binmode(int result_id, int mode);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来配置二进位资料返回时的处理方式。受到本函数影响的资料类型有 BINARY、VARBINARY 及 LONGVARBINARY。参数 result_id 为返回的 ID 值,若设为 0,则程序将配置一个新的 ID 值。

参数 mode 为配置的二进位处理方式,有下列的值

ODBC_BINMODE_PASSTHRU 返回二进位资料
ODBC_BINMODE_RETURN 转成十六进位返回
ODBC_BINMODE_CONVERT 转成字符串资料返回

注意: 若使用 odbc_fetch_into(),ODBC_BINMODE_PASSTHRU 会导至返回字符串值都是空的 (empty)。而返回资料最大治募 默认大小为 4096 位组,若要返回更多的资料需使用 odbc_longreadlen()。
参考: odbc_fetch_into() odbc_longreadlen()

odbc_close 关闭 ODBC 链接。
语法: void odbc_close(int connection_id);
返回值: 无
函数种类: 数据库功能
内容说明: 本函数用来关闭与 ODBC 数据库之间的链接。参数 connection_id 为 ODBC 链接代号 ID 值。若正在执行 transactions 则无法关闭链接。

odbc_close_all 关闭所有 ODBC 链接。
语法: void odbc_close_all(void);
返回值: 无
函数种类: 数据库功能
内容说明: 本函数用来关闭与 ODBC 数据库之间所有的链接。和 odbc_close() 一样,若正在执行 transactions 则无法关闭链接。使用本函数不需要使用任何参数。

odbc_commit 改动 ODBC 数据库。
语法: int odbc_commit(int connection_id);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来改动 (commit) ODBC 数据库。参数 connection_id 为 ODBC 链接的 ID 值。若有配置 odbc_autocommit() 成自动改动数据库时,则不需使用本函数。

odbc_connect 链接至 ODBC 数据库。
语法: int odbc_connect(string dsn, string user, string password, int [cursor_type]);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来链接到 ODBC 数据库,返回值为链接的代号 ID 值。参数 dsn 为资料来源名称 (Data Sources Name)。参数 user 及 password 分别为链接的帐号及密码。参数 cursor_type 通常省略,其值有 SQL_CUR_USE_IF_NEEDED、SQL_CUR_USE_ODBC、SQL_CUR_USE_DRIVER 及 SQL_CUR_DEFAULT 等四种。当使用复杂的资料存取时可能会有类似 Cannot open a cursor on a stored procedure that has anything other than a single select statement in it 的错误信息字符串,此时若将参数 cursor_type 的值设为 SQL_CUR_USE_ODBC 就可以避开了。
参考: odbc_pconnect()

odbc_cursor 取得游标名。
语法: string odbc_cursor(int result_id);
返回值: 字符串
函数种类: 数据库功能
内容说明: 本函数用来取得打开的 ODBC 数据库游标 (cursor)。参数 connection_id 为 ODBC 链接代号 ID 值。返回值为游标的名称字符串。

odbc_do 执行 SQL 指令。
语法: int odbc_do(int connection_id, string query);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来执行 SQL 的 query 指令。参数 connection_id 为 ODBC 链接代号 ID 值。参数 query 则为欲执行的指令。返回值为 Result ID 值。
参考: odbc_prepare() odbc_execute() odbc_exec()

odbc_exec 执行 SQL 指令。
语法: int odbc_exec(int connection_id, string query);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来执行 SQL 的 query 指令。参数connection_id 为 ODBC 链接代号 ID 值。参数 query 则为欲执行的指令。返回值为 Result ID 值。
参考: odbc_prepare() odbc_execute() odbc_do()

odbc_execute 执行预置 SQL 指令。
语法: int odbc_execute(int result_id, array [parameters_array]);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来执行预置在4.36.20 odbc_prepare() 的 query 指令。参数 result_id 为 ODBC 返回 ID 值。参数 parameters_array 通常省略。

使用范例
<?php
$conn=odbc_connect(mydb,,);
$stmt = odbc_prepare($conn, INSERT INTO mytable (jor_from, jor_to) valueS($from$to); );
if (!odbc_execute($stmt)) {
echo 错误;
}
odbc_close($conn);
?>
参考: odbc_prepare() odbc_exec() odbc_do()

odbc_fetch_into 取得返回的指定列。
语法: int odbc_fetch_into(int result_id, int [rownumber], array result_array);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来取得 Query 的返回资料列,并放入数组资料之中。参数 result_id 为 ODBC 返回 ID 值。参数 rownumber 为指定的取得列 (row)。数组参数 result_array 为取得列的资料数组,通常在前面加上 & 符号。例如 vbhunt@silverfox.com 所提供的范例 (27-Sep-1998)
$cols = odbc_fetch_into($QueryID, $RowNum, &$YourArray);

odbc_fetch_row 取得返回一列。
语法: int odbc_fetch_row(int result_id, int [row_number]);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来取得 Query 的返回资料的一列。参数 result_id 为 ODBC 返回 ID 值。参数 rownumber 可省略,为指定的取得列 (row)。

使用范例
<?php
$conn = odbc_connect(WebDB);
$query = select user, idno ;
$query .= from userinfo;
$result_id = odbc_do($conn, $query);
while(odbc_fatch_row($result_id)) {
$user = odbc_result($result_id, 1);
$idno = odbc_result($result_id, 2);
echo $user.的身份证字号为.$idno.<br>n;
}
odbc_close($conn);
?>

odbc_field_name 取得字段名称。
语法: string odbc_fieldname(int result_id, int field_number);
返回值: 字符串
函数种类: 数据库功能
内容说明: 本函数用来取得 Query 的返回资料的字段名称。参数 result_id 为 ODBC 返回 ID 值。参数 field_number 为指定的字段,起始值为 1。

odbc_field_type 取得字段资料类型。
语法: string odbc_field_type(int result_id, int field_number);
返回值: 字符串
函数种类: 数据库功能
内容说明: 本函数用来取得 Query 的返回资料的字段资料类型。参数 result_id 为 ODBC 返回 ID 值。参数 field_number 为指定的字段,起始值为 1。

odbc_field_len 取得字段资料长度。
语法: int odbc_field_len(int result_id, int field_number);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来取得 Query 的返回资料的字段资料长度。参数 result_id 为 ODBC 返回 ID 值。参数 field_number 为指定的字段,起始值为 1。

odbc_free_result 释出返回资料的内存。
语法: int odbc_free_result(int result_id);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数可用来释出返回资料所使用的内存,通常在系统内存资源不足的情形下才需要使用。参数 result_id 为 ODBC 返回 ID 值。返回值永远都是 true。

odbc_longreadlen 配置返回栏的最大值。
语法: int odbc_longreadlen(int result_id, int length);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来配置返回资料栏的最大资料值。参数 result_id 为 ODBC 返回 ID 值。参数 length 即为欲配置的长度值,本参数若设为 0,表示不限长度。

odbc_num_fields 取得字段数目。
语法: int odbc_num_fields(int result_id);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来取得返回资料的字段数目。参数 result_id 为 ODBC 返回 ID 值。若发生错误则返回 -1。

odbc_pconnect 长期链接至 ODBC 数据库。
语法: int odbc_pconnect(string dsn, string user, string password, int [cursor_type]);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来保持长期链接链接到 ODBC 数据库,即使 PHP 程序结束,链接仍然存在,返回值为链接的代号 ID 值。这对链接负责很重的系统可以加快链接的速度。参数 dsn 为资料来源名称 (Data Sources Name)。参数 user 及 password 分别为链接的帐号及密码。参数 cursor_type 通常省略。
参考: odbc_connect()

odbc_prepare 预置 SQL 指令。
语法: int odbc_prepare(int connection_id, string query_string);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来配置 SQL query 指令。参数 result_id 为 ODBC 返回 ID 值。参数 query_string 即为预设的指令。
参考: odbc_execute()

odbc_num_rows 取得返回列数目。
语法: int odbc_num_rows(int result_id);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来取得返回列的数目。参数 result_id 为 ODBC 返回 ID 值。若有错误发生则返回 -1。

odbc_result 取得返回资料。
语法: string odbc_result(int result_id, mixed field);
返回值: 字符串
函数种类: 数据库功能
内容说明: 本函数用来取得返回的资料。参数 result_id 为 ODBC 返回 ID 值。参数 field 可以是数字类型,代表指定的字段序号 (从 1 开始);亦可以是字符串类型,为指定的字段名称。

odbc_result_all 返回 HTML 表格资料。
语法: int odbc_result_all(int result_id, string [format]);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来将取得的资料转成 HTML 的表格 (table) 格式。参数 result_id 为 ODBC 返回 ID 值。参数 format 可省略,为表格的特殊配置值。返回值为资料列数。

使用范例
<?php
$conn = odbc_connect(WebDB);
$query = select item, price ;
$query .= from userinfo;
$result_id = odbc_do($conn, $query);
odbc_result_all($result_id, border=1 width=50%);
odbc_close($conn);
?>

odbc_rollback 撤消当前交易。
语法: int odbc_rollback(int connection_id);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数取消 ODBC 交易处理 (transaction) 对数据库所做的修改。若成功则返回 true,反之返回 false。

odbc_setoption 调整 ODBC 配置。
语法: int odbc_setoption(int id, int function, int option, int param);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来调整 ODBC 的配置值。参数 id 不一定指 connection_id,SQLSetConnectOption() 则为 connection_id;若为 SQLSetStmtOption() 则为 result_id。参数 function 值为 1 表 SQLSetConnectOption();若为 2 则为 SQLSetStmtOption()。参数 option 为配置的选项。参数 param 为配置值。

使用范例
<?
// 例一: 配置为 autocommit,即与 odbc_autocommit($conn, true) 相同。
// 第三个参数值 102 表 SQL_AUTOCOMMIT。
// 第四个参数值 1 表 SQL_AUTOCOMMIT_ON。
odbc_setoption ($conn, 1, 102, 1);
// 例二: 配置查询时间
// 第三个参数 0 表 SQL_QUERY_TIMEOUT
// 第四个参数为最久执行时间,本例设为 30 秒
$result = odbc_prepare ($conn, $sql);
odbc_setoption ($result, 2, 0, 30);
odbc_execute ($result);
?>

一段能瞬间秒杀所有版本IE的简单HTML代码

许多人都非常讨厌Internet Explorer,在西方万圣节即将到来之际,让我们来看一个真正吓人的东西——如何用一段简单的HTML和CSS,将任何版本的IE搞死。我们只需要简单地打开任意文本编辑器,将下面的代码复制进去,然后保存文件,例如SomeFilename.html。

<html><head>
<style type=”text/css”>
#a {
margin:0 10px 10px;
}

#b {
width:100%;
}

</style>
<title>IE Crasher</title>
</head>
<body>
<table><tr><td>
<div id=”a”>
<form id=”b”>
<input type=”text” name=”test”/>
</div>
</td><td width=”1″></td></tr></table>
</body></html>
然后用Internet Explorer打开它——哈哈!它很惨地死给你看了。

这个bug几乎存在于现在流行的所有IE版本,从IE6到刚刚发布的Internet Explorer 9的第6个平台预览版。在IE6中,该页面往往显示为空白,但是整个窗口都无法交互。在IE8中,崩溃来得很彻底。而IE9 Beta增强了坚固性,经过我的实测,这个页面又是会导致整个进程无响应,而有时IE9会提示你网页存在的问题,但是这都无法避免崩溃的现实。

事实上,很早就有人发现过这个问题了,而且还有一个专门的网站(http://crashie8.com/,请谨慎传播此链接)。除了IE以外的浏览器打开那个页面都不会有任何问题,但是IE却莫名其妙地崩溃。

当然,如果你细心的话,会发现上面的HTML代码中<form>标签没有闭合。我们需要在<input>标签后使用</form>闭合标签才能让这段代码符合规范。规范的代码就不会让IE崩溃了,这样看来似乎并不是IE的错。

但是,当其他浏览器都能有很高的容错性时,IE没有,甚至到了IE9还是没有,这就是IE的悲剧了。

写好代码的10个秘密

先给大家看一段据说是史上最强的程序:
e100 33 f6 bf 0 20 b5 10 f3 a5 8c c8 5 0 2 50 68 13 1 cb e 1f be a1 1 bf 0 1
e11b 6 57 b8 11 1 bb 21 13 89 7 4b 4b 48 79 f9 ad 86 e0 8b c8 bd ff ff e8 20
e134 0 3d 0 1 74 1a 7f 3 aa eb f3 2d ff 0 50 e8 f 0 5a f7 d8 8b d8 26 8a 1 aa
e14f 4a 75 f9 eb de cb 57 bb 21 13 8b c1 40 f7 27 f7 f5 8b fb ba 11 1 4f 4f 4a
e168 39 5 7f f9 52 8b c5 f7 25 f7 37 2b c8 95 f7 65 2 f7 37 95 2b e8 fe e fe
e181 10 79 6 c6 6 fe 10 7 46 d0 14 d1 d1 d1 e5 79 ec 5a b8 11 1 ff 7 4b 4b 48
e19b 3b d0 75 f7 5f c3 83 f7 83 a6 5d 59 82 cd b2 8 42 46 9 57 a9 c5 ca aa 1b
…………………………………………………………………..

这 段程序是1997年世界程序设计大赛的一等奖作品的部分代码(完整的代码 下载,把代 码复制粘贴到cmd的debug命令中,回车看到效果)。这个程序运行后将是一个3D的且伴随着音乐的动画。震撼吧!
是不是从事软件开发的人员都 希望成为这样的武林高手呢?然而真要是用这样的高手来设计、编写我们的产品代码,恐怕某一天,我们什么都不用干了,只能人手一本机器代码,一句一句进行翻 译了;那么对于软件产品开发而言,如何写好代码呢?一流的软件产品的代码具备哪些特征呢?

一流代码的特征

1、稳定可靠(Robustness)
代码写出来以后,一定要能够运行得非常好,非常稳定可靠。在现 今的IT行业,软件产品都是是24*7,即要保证系统一天24小时,一星期7天中都可以无间断的正常运行。比如我们百度的搜索引擎系统,比如我们的通信系 统,等等。到了产品开发后期,大部分的成本都将投入到产品稳定性的提高。

2、可维护且简洁(Maintainable and Simple Code)
在写代码时,首先要考 虑的是:写出来的代码不但要自己可以读懂,而且我们的同事、测试工程师都可能要修改这些代码,对其进行增减。如果代码很复杂,不容易读懂,如程序中的递归 一大堆、程序不知何时或从何地跳出,则会使程序的可维护性和简洁性降低。所以必要的注释、统一的编程规范等都是非常重要的。

3、高效(Fast)
在软件行业中效率是非常重要的,比如搜索引擎。有些软件的搜索效率就不高,搜索过 程特别缓慢,让人难以接受。当然这里面有一个带宽的问题,但是程序效率不高也是一个重要的原因。而实际上程序的效率提高,有时候很简单,并没有什么神秘之 处,如使用数组索引时候,可以用指针方式而不使用数组下标;数组的空间定义应该定义为2的N次幂等等。

4、简短(Small)
这方面大家的感受可能不是很深,但是我的感受是很深的。配置过PSTN程控交换 机、路由器、VoIP网关设备的人都知道,这些设备的软件都是从PC机通过网口或串口下载到这些设备的Flash上(类似PC机的BIOS)再通过设备上 的CPU启动。如果程序写的很罗嗦,随着特性不断增加,程序规模将变大的巨大,Flash空间告急、内存告急、下载升级变的不可忍受,等等,带来的就是成 本不断增加,利润不断下降。

5、共享性(Reusable)
如果做大型产品开发,程序的共享性也是非常重要的。我们产品有那么多开 发人员,如果每一个人都自己定义字符串、链表等数据结构,那么开发效率就会降低,我们的产品恐怕到今天也不能出台。我所说的“共享”不是指将别人的代码复 制到自己的代码中,而是指直接调用别人的代码,拿来即可用。这一方面可以减少代码的冗余性,另一方面可以增强代码的可维护性。如果别人的代码里有Bug, 只需修改他的代码,而调用此代码的程序不用进行任何修改就可以达到同步。这同时要求我们在设计的时候,如何考虑系统的内聚和耦合的问题。

6、可测试性(Testable)
我们的产品开发里,除了软件开发人员,还有一部分工程师负责软件测 试。软件测试人员会将开发代码拿来,一行一行地运行,看程序运行是否有错。如果软件开发人员的代码不可测试,那测试工程师就没有办法进行工作。因此可测试 性在大型软件开发里是很重要的一点。可测试性有时候与可维护性是遥相呼应的,一个具有好的可测试性和可维护性的代码,测试人员可以根据开发提供的维护手 册、debug信息手册等就可以判断出程序出错在哪个模块。

7、可移植性(Portable)
可移植性是指程序写出来以后,不仅在windows 2000里可以运行,在NT/9X下可以运行,而且在Linux甚至Macintosh等系统下都可以运行。所有这些特性都是一流代码所具备的特性。但是 其中有些特性是会有冲突的。比如高效性,程序写的效率很高,就可能变得很复杂,牺牲的就是简洁。好的代码要在这些特性中取得平衡。

写好代码的10个秘密

1、百家之长归我所有(Follow Basic Coding Style)
其实写代码的方式有很 多,每个人都有自己的风格,但是众多的风格中总有一些共性的、基本的写代码的风格,如为程序写注释、代码对齐,等等。是不是编程规范?对就是编程规范。

2、取个好名字(Use Naming Conventions)
取个好的函数名、变量名,最好按照一 定的规则起名。还是编程规范。

3、凌波微步,未必摔跤(Evil goto’s?Maybe Not…)
这里我用“凌波微步”来 形容goto语句。通常,goto语句使程序跳来跳去,不容易读,而且不能优化,但是在某种情况下,goto语句反而可以增强程序的可读性。Just go ahead,not go back。

4、先发制人,后发制于人(Practic Defensive Coding)
Defensive Coding指一些可能会出错的情况,如变量的初始化等,要考虑到出现错误情况下的处理策略。测试时要多运行几个线程。有些程序在一个线城下运行是正常 的,但是在多个线程并行运行时就会出现问题;而有些程序在一个CPU下运行几个线程是正常的,但是在多个CPU下运行时就会出现问题,因为单CPU运行线 程只是狭义的并行,多CPU一起运行程序,才是真正的并行运算。

5、见招拆招,滴水不漏(Handle The Error Cases:They Will Occur!)
这 里的Error Case(错误情况),是指那些不易重视的错误。如果不对Error Case进行处理,程序在多数情况下不会出错,但是一旦出现异常,程序就会崩溃。

6、熟习剑法刀术,所向无敌(Learn Win32 API Seriously)
用“剑法刀术”来形容一些API是因为它们都是经过了很多优秀开发人员的不断开发、测试,其效率很高,而且简洁易懂,希望大 家能掌握它,熟悉它,使用它。是不是象我们的ULIB。

7、双手互搏,无坚不摧(Test,but don’t stop there)
这里的测试不是指别人 来测试你的代码,而是指自己去测试。因为你是写代码的原作者,对代码的了解最深,别人不可能比你更了解,所以你自己在测试时,可以很好地去测试哪些边界条 件,以及一些意向不到的情况。

8、活用断言(Use,don’t abuse,assertions)
断言(assertion)是个很好的调试工具和方法,希望大家能多用断言,但是并不是所有的情况下都可以用到断言。有些情况使用断言反而不合适。

9、草木皆兵,不可大意(Avoid Assumptions)
是指在写代码时,要小心一些输入的情 况,比如输入文件、TCP的sockets、函数的参数等等,不要认为使用我们的API的用户都知道什么是正确的、什么是错的,也就是说一定要考虑到对外接口的出错处理问题。

10、最高境界、无招胜有招(Stop writing so much code)
意思就是说尽量避 免写太多的代码,写的越多,出错的机会也越多。最好能重用别人开放的接口函数或直接调用别人的api。

 

——摘自 http://www.iwanna.cn/archives/2010/12/07/6111/

精选15个国外最流行的CSS框架

CSS框架通常指的是一些CSS文件的集合,这些文件包括网页的基本布局、表单样式、网格或简单结构、以及样式重置。例如:

  • typography.css 基本排版规则
  • grid.css 基于网格的布局
  • layout.css 通常的布局
  • form.css for 表单样式
  • general.css 更多通用规则

虽然对于小的WEB开发项目来说,CSS框架并不一定适用,但是对于规模较大的团队开发项目而言,CSS框架不仅能加快设计开发速度,而且还能有效解决网站改版中带来的诸多麻烦和问题。这里推荐的15款CSS框架是现在国外最流行的CSS框架,希望能对你的开发有所帮助!

       1 . Elements CSS Frameworks

CSS Frameworks

       Elements 是一个实用的CSS框架。它是为了帮助设计师更快更高效的来写CSS而建立。Elements 已经超越了仅仅作为一个框架,它有自己的项目工作流。它拥有你完成项目所需的所有东西,这也让你和你的浏览者感到愉悦。阅读 概述 了解更多。

       2 . YUI Grids CSS

CSS Frameworks

       YUI Grids基本的YUI网格CSS提供4种预设的页宽、6种预设模板和再分为2、3、4卷的区块的功能。 这个4KB的文件可提供超过1000中页面布局组合。 更多信息

       3 . YAML CSS Framework

CSS Frameworks

Dirk Jesse的强大的(X)HTML/CSS框架为许多的简单或更复杂的网站项目提供完整的默认模板包。YAML基于网页标准并支持所有现代浏览器。所有的 Internet Explorer的主要渲染漏洞都被解决。YAML 完全支持从5.x到7.0的所有的IE版本。

       4 . Blueprint CSS

CSS Frameworks

       Blueprint 是一个CSS 框架,它的目的是减少你的css开发时间。它提供一个可靠的css基础去创建你的项目,BP由一个易用的网格、合理的布局和一个打印样式。

       5 . Schema Web Design Framework

CSS Frameworks

       Schema 是一个为了提供在重复的设计任务中必须的CSS和HTML标签而设计的表现层的网页框架设计。 与为每一个新的网站项目从零开始创建HTMl/CSS不同,Schema提供必要的基础来开始并立马让你的设计跑起来。

       6 . CleverCSS

CSS Frameworks

       CleverCSS是一个用于css的受Python启发的小型的标记语言,它可用于以整洁的和结构化的方式创建一个样式表。在很多方面它都比CSS2整洁和强大。与CSS最明显的区别是句法:它基于缩进而且不单调。虽然这显然违反了Python的规则,它依然是组织样式的很好的主意。

       7 . Tripoli CSS Framework

CSS Frameworks

       Tripoli是一个用于HTML表现的通用css规范。通过重设和重建浏览器标准,Tripoli 为你的网站项目提供了一个标准的、跨浏览器表现的基础。

       8 . ESWAT Web Project Framework

CSS Frameworks

       ESWAT正在重新整理。如果你是冲着我的网站框架来的,那么你就可以在这里下载。也许你也想看看我的其他项目gmachina、AppleSeed。

       9 . Boilerplate CSS Framework

CSS Frameworks

作为BluePrint CSS的原作者之一,我决定把我的思想重新整理到一个赤裸裸的框架,它提供最基本的要素来开始任何项目。这个框架将是较小的而且力求不使用非语义的命名习惯。你就是设计者而且你的技术很重要。

       10 . WYMstyle CSS Framework

CSS Frameworks

       WYMstyle是一组CSS文件,你可以很容易的组合这些文件来快速的创建你的网站的布局。通过提供可靠的、经过良好测试的CSS模块,WYMstyle 力求让每个网站防止枯燥的跨浏览器兼容性测试。

       11 . Content with Style Framework

CSS Frameworks

       Content with Style下一个逻辑步骤就是将这个扩展为CSS框架,允许使用写好并通过测试的组件来快速开发网站。实际上所需的是搞定一套命名习惯和一个灵活的基本模板。

       12 . Logicss Framework

CSS Frameworks

       Logicss 框架是用来减少开发符合web标准的xHTML布局的时间的一个由CSS文件和PHP程序组成的集合。通常跨浏览器表现行为(不是Meyer的reset文件或是用“*”),排版支持文本字体大小调整(使用EMs) 和垂直居中,符合可定义的灵活的布局网格利用css代码生成工具

       13 . That Standards Guy CSS Framework

CSS Frameworks

       That Standards Guy只能调用单个样式文件,主样式需要取得CSS认证(WCAG 1.0); 跨浏览器兼容性—包括Internet Explorer (IE) 5.x for Mac; IE Hacks使用独立文件; 快速创建模板;框架中提供 少量注释/实例演示,可以节省时间来理解。

       14 . 960 Grid System

CSS Frameworks

       960 Grid System是一个通过提供通常使用的尺寸简化网站开发流程的努力的结果,基于960像素的页面宽度。它有两种类型,12和16列,他们可以独立使用或是协同使用。

       15 . Emastic CSS Framework

CSS Frameworks

       Emastic 是一个CSS框架,它有连续的任务:探索陌生的新世界,寻找新生活和新的网站空间,大胆的去CSS框架尚未到达的领域。它是轻量的、在页面宽度上比较人性化,在网格中使用固定和不固定的列宽。 Elastic 用“em”布局。

——摘自 http://www.microspaze.com/?p=339

IT从业者的心理走向

导语:

进入IT行业,等于在无形之中进入了一个高压力、高需求、低满足的行业圈中。压力那么大,主观快乐却那么的少,并且主观快乐会随着从业时间的推移而不断减少。在身体健康之外,IT从业者的心理健康已经成为了关注焦点。到底IT从业者们的心理面临着怎样的挑战呢?

韩青已经第三次走进心理咨询室了,可是他仍然无法完整的表达他的痛苦,不管怎样引导他,他也只能问一句答一句,多说一点儿,他就会不知如何回答,而他反复表达的意思就只有一个:他已经快要32岁了,工作太忙,没时间恋爱,还没有结婚,事业无所谓上升与否,看不到未来,觉得生活实在无聊,无聊到活着都觉得费劲了。作为一名工作了7年的资深程序设计员,韩青面临着人生各种需求的低满足困境,而他,并不是唯一有问题的人。

对于IT企业各阶层的员工而言,压力那么多,而主观感受的快乐却那么少。满怀激情地走出校园,就被湮没在“蚁族”群中,成为挣扎底层的“蚁民”;在城市中刚刚立足,卖PC为生,成为自轻自贱的“P民”;跻身白领,在多年疲于奔命的奋斗中,成为自我迷失的公司人,也就是IT“公民”。

IT公司的“公民”已经成为高危人群——《计算机世界》的调差显示:57%的“公民”最关心的心理健康问题是“缓解工作压力”;50.6%是“调适自己的心理健康”;31.7%是调适人际关系;31.7%是解决家庭压力。超过50%的人认为自己有必要接受心理机构的辅导和治疗。

IT行业里有一种其他行业罕见的职业倦怠感,“不知道为什么,我在工作中无法找到乐趣,现在我是个老手了,压力比原来小了,可也没有了动力,像我这样的人也就只能混到这样了。我也想过跳槽、创业,但是我老了,跳不动了。”30出头的韩青显得暮气沉沉,他说他现在喜欢上了养花,摆弄那些花花草草比编代码有意思多了。

每个男人心中都有一个创业的梦想,韩青也曾经冲动过。但是,工作的枯燥磨平了他的热情,这个刚刚32岁的技术天才,甚至连槽也懒得跳。懒得跳槽、懒得拼命、懒得辞职、懒得结婚……IT公司白领中那种深深的职业倦怠感和枯竭感让我们感到震惊。

究竟是什么造成了这一切?压力?需求?

IT业是一个特征鲜明的行业,其突出特点是知识密集、人才聚集、高智商者互相撞击。在这种环境里工作,既需要脑力的付出,也需要体力的付出。从人的需求层次来说,IT人往往处于需求的高层次。但在现实生活中,他们却在所有需求层次上均遭到挑战。从最基本的生理需求到最高级的自我实现的需求,都对他们具有冲击性影响。心理学家马斯洛把人的需求分为5个层次,分别是生理需求、安全需求、社交和爱的需求、尊重的需求、自我实现需求。大量材料表明,中国IT人的五个层次的需求均存在未被满足状态,有些人则处在极端未满足状态。而不同年龄段、不同工作时间段的IT从业者面临着不同的需求,而这些需求的满足情况却是普遍低下。高压的工作环境,造成了对需求的高要求,然后IT行业却只能提供极低的需求满足,这之间的落差就造成了IT从业者的强大心理挫折感,压力于是更加肆虐,从而带来焦虑、烦躁、空洞、无聊、倦怠等等负面情绪。

30岁之前:自我实现需求最大化

对于刚刚走出校园的IT从业者们,创造力、发展力正强,精力充沛,心态积极,理想化程度高,在这个时期,爱情等情感往往只是生活的调剂品,不占主要地位,在这一阶段,尊重和自我实现的需求占据主要地位,甚至于为了这两个需求,大部分的从业者会放弃一定的生理需求和安全需求。在这个时期,获得认可、获取不可替代的重要性是最主要的事情。

然而,在这一时期,恰恰是积累经验的时期,行业可以满足从业者们的生理需求,却无法满足其他的需求,更不用说自我实现。在一定程度上,尊重的需求是可以实现的,当我们取得了成绩,获得了一定的奖励时,我们会有动力进行下一次的拼搏。但,可获得的奖励是有限制的,能够获得提升、认可,得到奖励的人,永远只是极小的一部分,大多数的从业者就不得不面临着,庞大的压力,最最基本的生理需求满足,和永远也无法满足的其他需要,并在这种追逐当中,不断地经历挫败。

当挫败积压到了一定程度,自我实现的需求就被消磨殆尽,尊重的需求也不那么重要,而安全需求则被提升到了一个迫切的地位上,如何保住自己现有的工作、收入、社会地位,会成为大部分从业者努力的目标。

从现象来看,IT人都是高薪阶层,似乎衣食无忧,前程似锦。但实际情况却并非如此。中国的IT业与世界同行相比,还不够成熟,中国IT人的生存与发展状况注定缺少安全感。IT人普遍对自身的前途堪忧。许多企业在管理上规范程度不够,与人性化管理相去甚远。正如网上的一篇文章《一个老程序员的心里话》中所说:“国外(程序员)可以在一个单位效力几十年,在国内不行。为什么?没有培训,没有晋升机会。你被压榨完后就被扔掉。哪个人甘于这样的命运?”所以,IT人的忧患意识、不安全心理要大于其优越感和安全感。加之企业之间、个人之间竞争激烈,所以IT人安全心理远远未能得到满足。这种安全心理的缺失也会直接导致IT从业者产生挫折心理。

“编写代码是极费脑筋的事,一旦思路打断就很难续上,必须得一鼓作气地干。”一个小时的咨询里,韩青抽了5支烟,尼古丁对他而言,已经无法刺激神经、提神醒脑以及安抚情绪了,“我上大学那会儿不抽烟,现在不得不抽。”

不安感是几乎所有IT从业者都会遇到的问题,因为能力的成长速度远快于薪水的成长速度,一旦能力成长到一定时候,而薪水却仍旧无法攀升,那么这份工作的吸引力必然会降低。韩青说几个月前他还在无聊与跳槽中徘徊,“难道我这辈子就这样了吗?我也经常问自己,可是转念一想,到哪里找这样的工作还房贷?还是就这样吧。”

厌烦、焦虑、百无聊赖,IT“公民”正被这样的负面情绪缠绕着。在《计算机世界》的调查中,有37.4%的人表示经常感到“厌烦、缺乏耐心”;厌烦与缺乏耐心随之带来的是焦虑与抱怨,调查中,经常抱怨自己的工作的有25.8%,46.1%的人会“偶尔”抱怨。(如图)

30岁之后:从理想走向现实

到了30岁左右,IT从业者们都开始放弃自己曾经理想化的想法,而转向了残酷的现实。现实就是,在自我实现的需求满足之前,IT从业者们极有可能先被需求折磨至疯狂。到了这一时期,工作已经基本稳定,生存不再成为一个问题,安全的需求慢慢的被满足,然而,社交与爱的需求在这一阶段极大的凸显出来。

IT从业者与电脑打交道的时间要多于与人打交道的时间。工作特性决定他们与外界交往的时间、机会相对有限。在公司内部,同事间的交往形式比较单调,情感贫乏。很多时间都是通过EMAIL相互沟通。这种交流方式缺少面对面交流的直观性与生动性。由于缺少身体语言的参与,使得人们之间思想与情感的交流大打折扣。由于经常要加班,IT人与家庭成员间的交流也大受妨碍。他们很少有机会与家人一起吃饭、逛街、聊天。因此也就无法获得正常的社会交往,因此而妨碍了正常的情感体验。

许多IT从业者,因为缺少正常的情感体验,慢慢地变成了情感匮乏者,而这一人群正是心理疾病高发群体。缺少正常的社会交往与情感体验,会让人们察觉不到内心需要,感受不到生活中的喜怒哀乐,甚至会产生严重的厌世、弃世的情绪。不能够正确表达内心,无法与人正常沟通,是抑郁症、焦虑症等神经官能症的重要致病原因。

到了这一时期,IT从业者们褪去了理想化的外衣,开始追寻现实当中可以满足自己需求,让自己快乐起来的生活,然而,IT行业却无法提供条件来满足这些需求。在这样的情况下,IT从业者们会慢慢地去选择一些极端方式带给自己快乐,从而来逃避现实中的挫败。许多IT从业者深陷网游无法自拔,还有一些人用暴走、暴食等方式来获得短暂的快乐体验,女性从业者常常会选择疯狂购物……而这些方式无一例外的都是在逃避现实中的挫败感,逃避由此而产生的种种负面情绪。

某种意义上说,这些方法帮助IT从业者们适当远离了心理疾病,然而,事实上,这些极端的行为不仅不能有效减压,反而会导致新的循环压力出现,我们甚至于可以将这些行为看成是强迫症的直观表现。在某一项关于中关村企业员工的心理调查显示,46%的被调查者存在心理健康轻度异常,58%的人承认自己有强迫症状、敌对情绪,而这种强迫症状的倾向,就是过度释压的危险信号。

也许对于IT行业的从业者来说,“中年危机”的种种现象来的有些太早,更早地了解我们所要面临的困境,或许有助于我们主动的去摆脱和解决。尽管IT行业的性质和环境是我们无法改变的,但是我们应该从我们自身寻找原因和解决的途径。任何一种心理上的问题,其实都是一种含蓄的告诫:我们身上出了问题,我们应该彻底检视自己。

——摘自 听心理学网站