资讯动态 资讯动态

资讯动态

04
2026-02
关于WordPress的静态化方法
前几天介绍“自定义的WordPress数据库错误”的时候,有个读者留言询问WordPress完全静态化的插件,我今天就推荐一个插件,可以将WordPress实现部分静态,包括最主要的首页和文章页面,目录页目前还没有静态化。这个插件的名字叫cos-html-cache,安装这个插件需要虚拟主机支持mod_rewrite功能(Linux+Apache架构),先通过修改永久链接格式将WordPress的链接结构修改为“伪HTML”格式,然后启用这个插件可以将文章页生成完全的静态HTML文章。这个插件还不能支持全静态化,但是文章页和首页的访问是最大的,这种静态化也可以极大的提高系统的效率,减少对数据库的访问量。启用这个全静态插件后,对于某些需要访问数据库的WordPress插件,可能会使其无法运行,例如原始版本的WP-PostViews插件,可以参考我对于WP-PostViews的修改方法,将插件修改为JavaScript模式即可。WordPress的cos-html-cache插件为我们系统的静态化提供了非常好的解决方案,目前的版本是2.7.3。它可以将我们首页及文章(Post)进行静态化,使得访问速度大大提高,减少了服务器端的压力。不过对于页面、标签和分类,却不起作用。为了能够实现WordPress的标签和分类的静态化,需要修改一下这个插件的代码,修改方法是:找到下面这一行:if( substr_count($_SERVER['REQUEST_URI'], '.htm') || ( SCRIPT_URI == CosSiteHome) ){将其修改为:if( substr_count($_SERVER['REQUEST_URI'], 'page') || substr_count($_SERVER['REQUEST_URI'], 'tag') || substr_count($_SERVER['REQUEST_URI'], 'category') || substr_count($_SERVER['REQUEST_URI'], '.htm') || ( SCRIPT_URI == CosSiteHome) ){在下面这一行:if( substr_count($_SERVER['REQUEST_URI'], '../')) $is_buffer = false;的后面增加一行:if( substr_count($_SERVER['REQUEST_URI'], 'comment')) $is_buffer = false;找到下面这一行:add_action('get_footer', 'CosSafeTag');用//将其注释。总的来说,这个插件的工作效率比WP-Cache要高,对于系统的性能有很大的提高,建议大访问量的WordPress博客尝试安装一下这个静态化插件。cos-html-cache的下载地址是: http://wordpress.org/extend/plugins/cos-html-cache/
03
2026-02
WordPress MU编辑主题功能
WordPress有一个很有用的功能,就是在线编辑主题功能,在多人博客WordPress MU中,这一功能因为安全性问题而被禁用,这里有一个方法,可以变相开通这一功能,而又不至于影响整个系统的安全性。具体的方法是,在最新的WordPress MU 2.8.4版本中,打开wp-admin\include\mu.php文件,搜索unset( $submenu['themes.php'][10] );一行,将其注释掉。接着,搜索if ( strpos( $_SERVER['PHP_SELF'], $page ) ) {一行,将这一行代码修改为if ( strpos( $_SERVER['PHP_SELF'], $page ) && !is_site_admin() ) {,保存退出。经过这样的修改,WordPress MU就可以使用在线编辑主题功能了,并且只有WPMU的管理员可以使用,其他普通用户没有权限使用,他们打开theme-editor.php时会提示“页面已被管理员禁用”,从而保证了整个系统的安全性。
02
2026-02
IIS的ASP程序不能浏览的解决方法
IIS5的HTTP 500内部服务器错误是我们经常碰到的错误之一,它的主要错误表现就是ASP程序不能浏览但HTM静态网页不受影响。另外当错误发生时,系统事件日志和安全事件日志都会有相应的记录。一、发生缘由:由用户方面报告故障,说是该站点上所有的ASP页面均不能访问。本地运行asp文件,IE提示:HTTP 500 - 内部服务器错误Server Application ErrorThe server has encountered an error while loading an application during the processing of your request. Please refer to the event log for more detail information. Please contact the server administrator for assistance.查看日志文件:系统日志具体描述如下:DCOM 错误 无 10010 NT AUTHORITY\SYSTEM Myserver 服务器 {3D14228D-FBE1-11D0-995D-00C04FD919C1} 没有在限定的时间内用 DCOM 注册。二、原因分析曾经删除过SA,SAM文件是保存用户密码的数据库文件,删除后,所有的用户信息就会丢失,而相应的组信息也会随之丢失,虽然重新登录过系统,系统已经重新建立了SAM文件,也重新安装了IIS,IWAM帐号也已经重新建立,但是,原用户组中的特殊信息却没有被恢复。检查“开始”->“设置”->“控制面板”->“管理工具”->“组件服务”中,“控制台根目录”->“组件服务”->“计算机”->“我的电脑”->“COM+应用程序”中,有一个IIS Out-Of-Process Pooled Applications该应用程序的ID号即为{3D14228D-FBE1-11D0-995D-00C04FD919C1},很多系统报错找不到应用程序{3D14228D-FBE1-11D0-995D-00C04FD919C1}之类的错误,就是因为该应用程序未能启动,打开该应用程序的属性,检查标识却为IWAM用户,右键启动,报错。把IWAM加入本地Users组中,也可正常启动。确定是因为IWAM用户无权访问该应用程序所致。三、解决办法1、修改IWAM_Myserver帐号密码,在“开始”->“设置”->“控制面板”->“管理工具”->“计算机管理”中,“系统工具”->“本地用户和组”->“用户”里面,一个IWAM_Myserver(Myserver为本地计算机名)的帐号内,右键更改密码,更改为一个自定义的密码即可,假设为“1234”;2、修改IIS内部IWAM_Myserver帐号密码,在c:\inetpub\adminscripts\目录下(IIS安装默认目录),输入:c:\inetpub\adminscripts>adsutil.vbs set w3svc/wamuserpass "1234" .修改成功后,系统有如下提示wamuserpass: (string) "******"3、在“开始”->“设置”->“控制面板”->“管理工具”->“计算机管理”中,“系统工具”->“本地用户和组”->“用户”里面,确认IWAM_My server用户只在GUEST组内,再在“本地用户和组”->“组”里面,右键点击Users组属性,添加进NT AUTHORITY\Authenticated Users和NT AUTHORITY\Interactive两个用户成员,确定。4、在IIS安装默认目录下输入:c:\inetpub\adminscripts>synciwam.vbs -v将COM+程序的用户改回为IWAM用户,重新启动IIS Out-Of-Process Pooled Applications应用程序,没有再报错了,再重启IIS,检查所有WEB站点服务,故障现象解除!至此,故障现象全部排除!通过此次故障的排查,得出几点需要注意的:1、事件日志的空间设置稍微放大一些,默认才512K,根据硬盘空间,适当放大一些,避免出现日志文件已满的情况;2、不要随便轻易清空事件日志中的事件记录,很多故障现象需要从这个里面下手找原因;3、所有返回的系统提示信息一定要注意仔细查看;4、IIS中的应用程序保护应为中或高,如为低,则所有ASP页面均以本地系统权限运行,安全性存在问题。5、COM+程序的用户权限和用户启动权限很重要,应注意检查。6、系统默认组有时有重要作用,不能轻易删除或修改。7、系统重要文件(如SAM)不可轻易删除,应尽可能采取妥善的解决方法。如使用外部程序修改注册表或SAM表信息以获得管理员权限。而不要删除该文件。
30
2026-01
UCenter密码算法规则和生成方法
康盛的系列产品,包括Discuz、UCHome、Supesite都集成了同一个用户系统——UCenter,用户登录的密码也保存在UCenter中,对于其他系统集成或导出数据到UCenter系统,通常会遇到密码生成的问题,这里就讨论一下UCenter的用户密码算法规则和生成方法。密码通常使用MD5对用户密码HASH后保存在数据库中的方法,如果黑客拿到了这个HASH数值,那么可以采用字典的方式暴力破解,如果这个字典数据库足够大,并且字典比较符合人们的设置习惯的话,那很容易就能破解常见的密码,因此UCenter采用了salt来防止这种暴力破解,salt是一随机字符串,它与口令连接在一起,再用单向函数对其运算,然后将salt值各单向函数运算的结果存入数据库中。如果可能的salt值的数目足够大的话,它实际上就消除了对常用口令采用的字典式攻击,因为黑客不可能在数据库中存储那么多salt和用户密码组合后的HASH值。UCenter的创始人密码是保存在文件中的,打开uc下面/data/config.inc.php文件,里面的UC_FOUNDERPW保存的就是密码,而UC_FOUNDERSALT保存的是SALT数值,创始人密码的创建规则是:UC_FOUNDERPW=md5(md5(PASSWORD).UC_FOUNDERSALT),就是先将密码MD5,然后添加salt,然后再次MD5,产生的HASH数值保存在config.inc.php文件中,因此修改UC_FOUNDERPW里面的数值就可以修改UCenter的创始人密码。UCenter的用户信息是保存在uc_members表中,在这个表中,每个用户都有一个不同的随机salt字段,表中的password字段为计算后的密码,密码计算规则是$password=md5(md5($password).$salt),也就是将用户的密码MD5后,添加salt,然后再MD5,保存在password字段中。因此,如果进行不同系统的数据转换,可以根据这个原理,将其他系统的用户名和密码计算后,导入UCenter的uc_members表中,实现用户的迁移。例如,如果原有系统使用的是md5(password)这样的算法保存密码,那就通过程序随机生成salt,然后计算两者累加后的md5,这样就很容易计算出这个用户在UCenter中的用户密码HASH值,从而实现用户的无缝迁移。不过,如果原有系统使用的是md5(password+salt)的方式保存的密码,那就无法实现密码的平滑迁移UCenter了,即使迁移,也只能人为将其UCenter的password增加一个salt才能使用,因此,我们在平时设计系统用户密码的时候,应该尽量采用md5(md5(password)+salt)的方式保存密码,这样才能方便的实现和UCenter的接口,并且保证了安全性,通常对于英文用户名来说,自建系统使用username来做salt是个简便的方法。
29
2026-01
防止SSL劫持的终极方法
众所周知,我们正处在一个存在着各种诈骗、劫持的网络年代,我们的各种帐号密码很多时候都能很容易地被黑客窃取。由此很多网站使用HTTPS来保护用户的信息不被窃取。而HTTPS本身所使用的SSL协议也并不是完美无缺,即使能确保本机安全,也还存在着各种SSL劫持了,令人防不胜防。曾经发生过并被大众知晓的SSL劫持有:Comodo CA被黑客入侵用于伪造SSL证书、DigiNotar CA被黑客入侵用于伪造SSL证书、法国政府伪造CA证书用于劫持Gmail等。当然,还有广为流传的CNNIC,虽然并没有被发现进行过SSL劫持,不过鉴于其之前的所作所为,很多人还是很担心某天会针对自己进行劫持,而针对单人的劫持比较难以发现。所以很多人为了安全起见,将CNNIC的SSL证书标记为不信任,但由此带来了一些问题,比如中国区的战网使用了CNNIC颁发的证书导致无法连接,中国区的Windows Azure也使用了CNNIC颁发的证书导致无法连接等问题。而除了CNNIC,很多人还担心很多中级CA机构会以更隐蔽的方式进行劫持。鉴于存在着这些问题,那么就需要有相应的解决方法。笔者在这里介绍一个用于预防SSL劫持的开源工具,使用中不存在删除证书的各种问题,也不存在担心中级CA机构的问题。此工具的项目地址为: https://github.com/lehui99/scphcp ,依赖于python,安装python后根据项目主页中的问于答进行操作即可使用。此项目刚开发完成,使用中或许会存在一些问题,如发现问题则欢迎在项目中提Issue,我会尽快进行修复。使用此工具后只能防止SSL劫持,并不能防止HTTP劫持,比如《电信级的RSA加密后的密码的破解方法》中使用的HTTP劫持无法预防。所以访问重要的网站时需要确保使用的是HTTPS进行访问。目前使用此工具需要一定的电脑知识,需要会安装python并设置环境变量并编辑配置文件。笔者会在后续开发中制作一个简易使用的exe版给大家,只需持续关注项目主页即可知道何时发布exe版。
28
2026-01
利用U盘进行软件加密的方法
一般的U盘不具备加密的功能,虽然U盘和加密狗外形有一些相似,但是内部完全不一样的,U盘只是一个存储器芯片和简单的附属电路,而现在的智能卡加密狗都具有一个单独的CPU或者加密芯片,可以执行相当复杂的加密算法。有的软件开发商有这样一种需求,就是使用U盘发布软件的同时,想要节约成本,防止U盘中的软件被复制,但又不想再购买昂贵的加密狗,因此想要把软件绑定在U盘上执行,当U盘拔下来的时候,软件就不能正常运行,和我先前介绍的绑定硬件指纹相似,使用绑定U盘的方式加密软件。在对软件安全不是特别在意的情况下,可以在软件中采用绑定U盘内部ID的方式来实现这种加密,先使用程序将U盘的ID读出来,然后根据这个ID生成License文件,当解密者将U盘内的文件复制到其他电脑的时候,软件执行过程中读取U盘ID失败,因此就无法校验License。通常情况下两个U盘的ID是不相同的,因此即使将软件复制到另外一个U盘,软件执行的时候,根据U盘ID验证License,也会出现不匹配的现象,这样就实现了软件绑定U盘的加密方式。需要指出的是,这种U盘加密并不算安全,大多数U盘厂商有内部量产工具,可以修改U盘的内部ID号码,这就存在了复制U盘的可能性,但对于普通用户来说,通常没有修改U盘内部ID的能力,因此也具有一定的加密性。这个加密方法中,读取U盘ID号的函数的VB源代码如下所示: Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * From Win32_USBHub") For Each objItem In colItems a = objItem.DeviceID If InStr(a, "VID") Then b = Split(a, "\") USB_ID = b(UBound(b)) Next
21
2026-01
Windows2000蓝屏死机故障处理
从理论上讲,纯32位的Windows 2000是不会出现死机的,但是这仅仅是理论上。病毒或硬件和硬件驱动程序不匹配等原因将造成Windows 2000的崩溃,当Windows 2000出现死机时,显示器屏幕将变为蓝色,然后出现STOP故障提示信息。下面我们分别介绍通用的STOP故障处理方法和特殊的STOP故障排除。通用STOP故障处理1.首先使用新版杀毒软件检查计算机上是否有病毒。2.如果Windows 2000可以启动,请检查“事件查看器”中的信息,以确定导致故障的设备或驱动程序。启动“事件查看器”的方法是:“开始”“设置”“控制面板”“管理工具”“事件查看器”“系统日志”。3.如果不能启动计算机,试着用“安全模式”或“最后一次正确的配置”启动计算机,然后删除或禁用新安装的附加程序或驱动程序。如果用“安全模式”启动不了计算机,可使用修复控制台。修复控制台可以禁用一些服务、重新命名设备驱动程序、检修引导扇区或主引导记录。4.拆下新安装的硬件设备(RAM、适配卡、硬盘、调制解调器等等)。5.确保已经更新了硬件设备的驱动程序,以及系统有最新的BIOS。6.运行由计算机制造商提供的系统诊断工具,尤其是内存检查。7.检查Microsoft兼容硬件列表(HCL),确保所有的硬件和驱动程序都与Windows 2000兼容。Hcl.txt在Windows 2000 CD-ROM的Support文件夹中。8.在BIOS中禁用内存缓存功能。9.重新启动计算机,在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。(注:使用“最后一次正确的配置”的方式启动计算机,计算机的所有设置被重置为最后一次成功启动时的配置。)10.如果能够访问Web,请进入http://www.microsoft.com/ntserver/,单击“Support”/“Search Knowledge Base”,在“Type your keywords here”处,输入“stop”和相应的号码(如出现STOP消息“stop:0x0000000A”,可在此输入“stop0x0000000A”),按Enter键,就可以找出所出现的STOP问题的解决方法。特殊排除STOP消息 0x0000000A故障(设备已经安装)通常原因 驱动程序使用了不正常的内存地址。1.如果Windows 2000还可以启动,检查“事件查看器”中显示的信息,确定引起问题的设备或驱动程序。2.关掉或禁用一些新安装的驱动程序,并删除新安装的附加程序。3.拆下一些新安装的硬件(RAM、适配器、硬盘、调制解调器等等)。4.确保已经更新了硬件设备的驱动程序,以及系统有最新的BIOS。5.运行由计算机制造商提供的系统诊断工具,尤其是内存检查。6.检查Microsoft兼容硬件列表(HCL),确保所有的硬件和驱动程序都与Windows 2000兼容。7.在BIOS中禁用内存缓存功能。8.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。STOP消息 0x0000000A故障(刚加入新设备时)通常原因 驱动程序使用了不正常的内存地址。1.在安装过程中,屏幕上提示“安装程序正在检查计算机硬件配置”时,按F5,根据提示选择合适的计算机类型。例如,如果计算机是单处理器,请选择“标准PC”。2.在BIOS中禁用内存缓存功能。3.拆下所有适配卡,并断开所有不是启动计算机所必需的硬件设备,再重新安装Windows 2000。4.如果系统配有SCSI适配卡,请向适配卡销售商索取最新的Windows 2000驱动程序,禁用同步协商功能,检查终结头和设备的SCSI ID号。5.如果系统配有IDE设备,设IDE端口为Primary。检查IDE设备的Master/Slave/Only设置。除了硬盘,拆下其它所有的IDE设备。6.运行由计算机制造商提供的系统诊断工具,尤其是内存检查。7.检查Microsoft兼容硬件列表(HCL),确保所有的硬件和驱动程序都与Windows 2000兼容。8.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。STOP消息 0x0000001E故障1.检查是否有充分的磁盘空间,尤其是新安装。2.禁用STOP消息中显示的驱动程序和所有新安装的驱动程序。3.如果所使用的视频驱动程序不是Microsoft提供的,试着切换到标准VGA驱动程序或者由Windows 2000支持的合适的驱动程序。4.确保系统有最新的BIOS。5.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。STOP消息 0x00000023和0x00000024故障通常原因 严重的驱动器碎片、超载的文件I/O、第三方的驱动器镜像软件或者一些防病毒软件出错。1.禁用一些防病毒软件或者备份程序,禁用所有碎片整理应用程序。2.运行CHKDSK /f 检修硬盘驱动器,然后重新启动计算机。3.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。STOP消息 0x0000002E故障通常原因 系统内存中的奇偶校验错误。1.运行由计算机制造商提供的系统诊断工具,尤其是内存检查。2.在BIOS中禁用内存缓存功能。3.试着用“安全模式”启动。如果“安全模式”可启动计算机,试着更改为标准VGA驱动程序。如果这不能解决问题,可能须要用另外的视频适配卡。“兼容硬件列表”中列出了兼容的视频适配卡。4.确保已经更新了硬件设备的驱动程序,以及系统有最新的BIOS。5.拆下一些新安装的硬件(RAM、适配器、硬盘、调制解调器等等)。6.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。STOP消息 0x0000003F故障通常原因 驱动程序没有被完全清除。1.删除一些新安装的软件,包括备份工具或磁盘工具,例如碎片整理和防病毒软件。STOP消息 0x00000058故障通常原因 在容错集的主驱动器中发生错误。1.用Windows 2000引导软盘,从镜像(第二个)系统驱动器启动计算机。2.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。 STOP消息 0x0000007B故障通常原因 在I/O系统的初始化过程中出现问题(通常是引导驱动器或文件系统)。1.检查计算机上是否有病毒。这个STOP消息通常在引导扇区有病毒时出现。2.使用“修复控制台”来修复驱动器。3.拆下新安装的硬盘驱动器或控制卡。4.如果系统配有SCSI适配卡,请向适配卡销售商索取最新的Windows 2000驱动程序,禁用同步协商功能,检查终结头和设备的SCSI ID号。5.如果系统配有IDE设备,设IDE端口为Primary。检查IDE设备的Master/Slave/Only设置。除了硬盘,拆下其它所有的IDE设备。6.运行CHKDSK。如果Windows 2000不能启动CHKDSK,则必须把硬盘拆下并连接到另一个Windows 2000系统上,然后用CHKDSK命令检查该硬盘。7.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。 STOP消息 0x0000007F故障通常原因 硬件或软件问题;常见的原因是硬件失效。1.运行由计算机制造商提供的系统诊断工具,尤其是内存检查。这个STOP消息经常出现在错误或误配内存的情况下。2.在BIOS中禁用内存缓存功能。3.试着拆下或替换硬件:RAM、控制器、适配器、调制解调器和其它外围设备。4.检查Microsoft兼容硬件列表(HCL),确保所有的硬件和驱动程序都与Windows 2000兼容。这个问题可能是由于不兼容的主板引起的。5.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。
20
2026-01
Web应用程序的开发步骤
如今已进入了web2.0高速发展的互联网时代,各种互联网的Web应用程序如雨后春笋般出现。那么作为一名Web开发人员,怎样去开发一款优秀的Web应用程序呢?这个问题没有一个简单的答案,甚至那些教育机构都未必能清楚的知道。所以,像大多数在这个领域里的web开发人员一样,我们只是通过去做,去实验才学会了这些。没有人告诉我们如何去做,我们从给自己做点什么东西开始,学会如何开发web应用程序是在这个过程中的一个副产品。这是学习任何语言的一个非常有效的方法。Web应用程序与网站之间的区别首先,我要说明,开发一个web应用程序跟开发一个网站是不一样的。虽然在总体上有很大相似之处,但开发它们所需要的时间有巨大的差别。那究竟web应用程序和网站有什么不同呢?通常,维基百科能帮助我们解释这个问题,让我们来看看维基百科是如何定义应用软件的:应用软件,通常也被称作应用,指的是专门为帮助用户去执行一个或多个相关特定任务而设计的计算机软件。企业软件,会计软件,办公套件,绘图软件,媒体播放器等都属于这种软件。跟应用软件相对照的是系统软件和中间件,它们管理计算机效能,管理如何跟计算机集成,但通常这些工作并不会直接反映到使用户受益的任务执行上。举个例子,一个不是很恰当的实体类比,应用软件跟系统软件之间的关系就好比一个电灯泡和一个发电厂之间的关系,发电厂(系统软件)只是产生电能,它自己没有任何真正的用途,除非利用一个电灯泡这样的应用工具才能为用户提供服务。Web应用程序的开发过程现在特征已经弄清楚了,我们就可以开始定义开发一个web应用程序的整个过程了。当然,这依赖于工程的大小,过程中的某些步骤可能很小,在你的脑海里就能完成这种工作,但把事情整个的了解一下总是有好处的。同时还有一点很重要的你要明白,这篇文章并不会对每个步骤进行深层次的描述。步骤一:分析开发一个web应用的第一步是分析你的需求。你此时应该定义出一个尽量周全的你的应用应该提供的功能清单。如果是你为一个客户做这些工作,你需要明白他们想要什么(要确保你们对方都知道对方在说些什么)。从你们的讨论中,你能总结出需求和软件规格。你即使是为自己开发,我也建议你把希望这个web应用能够做的功能写下来。步骤二:设计一旦你弄清楚了这个web应用需要做哪些事情,你就可以开始设计了。这个步骤通常会反反复复进行很多次,每一次都把设计细化一些。你第一要做的是画出页面流程图(画在纸上,或使用软件工具,凭各自所好吧。我喜欢用纸,这样我可以做更快速的改变)。页面流程图通常是很抽象的黑白绘画,画出你将要实现的web应用的样子(你可以加一些色彩,但尽量保持简单)。这个步骤能够让你知道你的应用最终会是个什么样子。跟37signals倡导的相反,我建议使用一些词语描述,适度细化。当我想到一个很好的想法时,或想到事情该如何做时,我会把它标注到纸上(例如,当点击这个按钮时应该使另外一个元素改变或隐藏,我会把这写在流程图上)。当你对做出的草图满意后,你可以开始制作实体模型了。实体模型仍然是些图案,但有色彩和细节。最终的实体模型看起来应该像你将要实现的web应用的一个截屏图。如果你为一个客户开发,他会看看这些东西,并给你他的认可。然而,很多人都喜欢跳过这一步(大多数都是非设计人员),他们喜欢直接奔向网页原型。原型是用HTML开发出来,使用CSS渲染(有时也是有Javascript)。页面布局要做出来,链接能够点,颜色,字体,字体大小要设定好(如果你做了实体模型,这个会很容易)。这一步非常的重要,因为这里所有的东西都能用于你最终的应用中。如果允许的话,在你的原型上做一些可用性测试,从长期的效果来看,这能使你避免大量的失误。在这个步骤的最后,你基本上就知道了你的web应用是如何组织到一起的了。登录页面有些什么,用户如何从主页转向到各个页面。步骤三:实现 选择一个框架现在我们已经知道了要去开发什么东西,那就要把它做出来。这一部分的工作很多,你大部分的时间都要花在这个上面。你第一个要做的决定是如何着手,采用什么样的技术,什么框架。你有很多选择的余地,你需要选出一个适合你的。下面是一个最常用的框架的列表:ASP.NETPHP 上的任何一个流程的框架Python with DjangoRuby on Rails没有一个明确的标准说哪个框架最好。它们都各有不同,每个都有自己的长处。最重要的是你要知道它们任何一个都能让你开发出好用的web应用。一旦你知道了如何去开发,那就要甩开臂膀开干了。这个开发工作可以看作有很多块,但说到底,这都是标准的编程活动了。在后台,你要创建类,对象,服务,过程,以及持久层来把这些对象保存到数据库中。后台是整个应用的核心,对任何应用来说,它跟普通的编程没有什么区别。接着是前台的开发,你现在编写的代码才是真正给用户使用的操作界面。你把后台的程序和原型界面集成到一起,把系统各部分集成到一起。你还可以把你在开发过程中想到的一些很炫的小功能用JavaScript实现。再说一次,有很多种途径可以实现后台程序。建议你去读一读跟你选择的框架相关的资料,弄清楚如何实现这一部分的工作。通常,这些知识会跟面向对象编程有关,但有些框架正在慢慢的向领域驱动设计发展。步骤四:打磨抛光现在应用程序已经开发出来,各个独立的模块也集成到了一起。你需要通过测试来确保你在步骤一中定义的需求和软件规格是否被实现(这个问题在你开发的整个过程中都要记在脑中)。你要确保那些愚蠢的用户不能通过试图做一些你还没有实现的操作而把你的应用弄坏(参考白盒和黑盒测试)。你同时还要确保你的程序能够在各种浏览器里(希望不是IE6)都能正确的运行。现在也是你做一些小的调整,改进你的应用程序给人的感觉的时候,让它趋于完美。步骤五:发布和后续工作这最后一步(但不是就此完结)是发布你的应用,让用户能够真正使用它(如果这个应用是个公众开发的应用,别忘了做新闻宣传)。如果你愿意,先发布一个Beta版,这样只有一小部分用户能够发现你的应用里的大问题(因为你的程序里肯定会有bug),他们会帮助你改进程序的质量。不要忙着增加功能,要专注于把你目前的程序变的稳固。当经过了beta阶段,你的程序已经变得十分的稳固,听取用户反馈的意见,自己试用一下自己的应用,你可以开始思考如何使应用变的更好。找出不和谐的地方,消除掉。以后每次的迭代都要经过上面所说的五个步骤,但就像我最初说的,你现在已经有了一个可以运行的应用程序,你很容易直接在心里完成这些步骤,直接奔向在代码里测试你的功能。恭喜,你已经自豪的成为一个web应用程序的作者了。
19
2026-01
构建移动Web应用程序的技术堆栈
编写web应用程序时,有很多的技术决策。笔者最近回来编写现代Web应用程序,并希望总结一些曾经在开发周期过程中做了记录零散的想法。这篇文章是关于一套对笔者最近开发的项目有帮助的框架。笔者重温了一些最重要的框架类型,其中每一个可以展开来写一篇文章。这并不是一个广泛的现有产品相比,只是一个笔者最近使用的部分技术。虽然笔者的重点是移动优先, 笔者认为,这套技术可以应用在一般的web应用程序。 笔者的决定和数据支持考虑了几个要求:基于JavaScript(CoffeeScript,Dart,绝对值得认真看看,但我想避免引起激进选择)必须在现代浏览器工作良好(IOS 5,Android 4)挑选一个MVC框架在本地UI的应用程序开发中模型视图控制器模式已经使用了几十年。其基本思路是分开表示层(用户界面,动画,输入)和数据层(存储,通讯,数据)。有其他类似的模式,如MVVM的(模型视图的ViewModel),但主要的想法是在展现和数据层之间有定义良好的分离,为了更干净的代码和长期的维护:有许多JavaScript模型视图控制器框架的产品。有一些如Backbone.js和Spine.js是用纯代码编写的,而其他像Knockout.js和Angular依靠DOM数据属性绑定。那些依赖HTML5数据DOM属性的分离视图和数据的MVC系统被认为是不对的。这不包括Knockout.js和Angular框架。 spine.js比 CoffeeScript更容易,根据我最初的要求排除了CoffeeScript。backbone.js比大多数框架更受欢迎(也许除JavaScriptMVC外,似乎像一个死的项目),还设有一个成长的开源社区。对于笔者的应用程序栈,笔者选择了Backbone.js。欲了解更多有关挑选一个MVC的信息,检出TodoMVC,它使用不同的MVC框架实现相同的Todo应用程序。还可以看到这个MVC框架的比较,它强烈赞成Ember.js,一个出现相对较晚的框架。笔者尚未有机会使用它,但它在我的清单上。选择一个模板引擎要在网络上建立一个严谨的应用程序,你不可避免地要建立大型的DOM树。如果使用JavaScript API来操作DOM,不如使用基于字符串的模板编写html来得更简单高效。JS模板已经逐步形成一个奇怪的约定,嵌入模板的内容到脚本标记内:。使用所有的模板引擎的基本做法是作为一个字符串来加载模板,构建模板参数,然后通过模板引擎模板和参数运行。backbone.js依赖于Underscore.js,它有一个有些局限的有详细语法的模板引擎。有其他可供选择,包括jQuery模板,Handlebars.js,Mustache.js和许多其他的。 jQuery模板已经被jQuery团队准备废弃了,所以我没有考虑这个选项。Mustache是一个跨语言的模板系统,具有简单和成熟的决定,以支持尽可能少的逻辑。事实上,在Mustache最复杂的构造是遍历一个对象数组的方式。 handlebars.js建于Mustache之上,加入一些不错的功能,如预编译模板和模板表达式。对于笔者而言,并不需要这些额外的功能,然后选择了笔者的模板平台Mustache.js在一般情况下,笔者的印象是,现有的模板框架可比较的功能是很少的,因此决定在很大程度上是个人喜好的问题。选择一个CSS框架CSS框架是必不可少的工具,用来扩展CSS如变量等方便的功能集,创建分层的CSS选择器的方式,以及一些更先进的功能。这实质上是创建了一个新的语言:CSS的增强版本(姑且称之为它的CSS++)。为便于开发,一些框架在浏览器中实现了一个JavaScript的CSS+ +解释器,而一些其他框架让你监控一个CSS+ +文件,并每当有更改就编译它。所有的CSS框架应提供命令行工具来编译CSS++成CSS给开发。像模板语言一样,也有很多选择。笔者的选择是出于个人的语法偏好,笔者更喜欢SCSS,因为它避免了像@怪异的语法。 SCSS的一个缺点是,它并没有附带一个JavaScript解释器(有一个非官方的,笔者还没有试过),但可用命令行监视器。还有其他类似的CSS框架,包括LESS和Stylus。如何布局视图ViewsHTML5提供了多种方式来布局内容,MVC框架对这些布局技术的使用无要求,留给开发者你一点困难。一般来说,对documents相对位置是合适的,但对apps除外。应避免绝对定位,像tables。许多Web开发人员已经转向使用float属性对准元素的,但是这只是第二理想的构建应用程序的观点,因为它没有类似应用程序的布局,导致许多奇怪的问题和臭名昭著的clearfix hacks。经过多年来的布局与各种网络技术的实验,笔者认为一个固定的定位和flex box的模型相结合是移动互联网应用的理想选择。笔者使用的是将屏幕上的界面元素(页眉,侧边栏,页脚等)固定定位。flex box 模型对在页面上布局堆叠视图(Stacked views)是很棒的(水平或垂直的)。只有CSS盒模型明显地对界面设计进行了优化,非常类似Android的LinearLayout 管理器。对于有关flex box模型的更多信息,请阅读保罗的文章,并注意该规范正在由一个新的,非向后兼容的版本取代。自适应Web应用程序最后一节,在这个问题上:笔者大力提倡创建设备特定的用户界面。这意味着为不同的形式屏幕重新编写视图代码部分。幸运的是,MVC模式,使得它比较容易为多个视图(如平板电脑和手机)重用业务逻辑model。iOS Flipboard演示了这个想法很好,它为平板电脑和手机用户提供了为每个设备外形高度定制的体验。手机用户界面特别为垂直点击进行了优化,允许单手使用。平板的UI让两手反面持有设备工作良好。输入的考虑移动用户与您的应用程序进行交互的主要方式是通过用手指触摸屏幕。这与基于鼠标的互动相当不同,因为有额外9点在跟踪屏幕,这意味着开发人员编写移动应用程序时,需要抛弃移动鼠标事件。此外,在移动鼠标事件有300ms延迟点击的问题(有一个著名的触摸式的解决方法)。在移动浏览器使用这些事件的详细信息,请参阅我的触摸事件的文章。只有S /mousedown/ touchstart/所有的事件处理程序是不够的。有 一套全新的用户期待的触摸设备手势,如点击、通过浏览图像列表导航。虽然苹果公司有一个鲜为人知的手势API,但没有在网页上做手势检测的开放规范。我们真的需要一个JavaScript手势检测库,去处理一些较常见的手势。如何使其离线工作对于一个应用程序脱机工作,你需要确保两件事情真实:Assets资产可用(通过AppCache,文件系统API等)数据是可用的(通过LocalStorage,WebSQL,IndexedDB等)实践中,在网络上建立离线应用是一个棘手的问题。一般来说脱机功能应从一开始就加入你的应用程序。让现有Web应用程序没有显着的重写代码运行在离线状态下是特别困难的。此外,脱机技术还有各种未知的存储限制,而且未知超出限制时会发生什么不确定的行为。最后,在离线的技术堆栈还有一些技术问题,最显着的是AppCache,正如我在以前的文章提到。写真正的离线功能的应用程序是一个非常有趣的方法是“离线优先”。换句话说,如果没有互联网连接全部写入本地,当存在互联网连接,实现同步数据同步层。在Backbone.js MVC模型,这可以很好地适应自定义Backbone.sync适配器。单元测试单元测试您的UI是有困难的。然而,因为你使用MVC的模型,它是完全隔离的UI和数据结果,因此,可方便测试。QUnit是一个相当不错的选择,特别是因为它允许使用它的start()和stop()方法单元测试异步代码。总结总之,笔者使用Backbone.js 作为 MVC 框架,Mustache.js做为模板,SCSS作为CSS框架,CSS的Flex box展现界面views,自定义触摸事件和QUnit单元测试工具,来写笔者的移动Web应用程序。脱机支持,笔者仍然尝试用各种技术,并希望未来继续写篇文章。虽然笔者强烈相信有必要在这里列出每种工具(如MVC),笔者也相信,笔者在这里描述的许多具体的技术是可以互换的(如Handlebars 和 Mustache)。
15
2026-01
关于正版和盗版软件的博弈
中国现在的计算机软件发展是一个畸形的发展,在北美,软件的销量早已经超过了硬件并且两者差距越来越大,而在中国却正好相反,硬件不论从发展速度还是销量都大于软件。现象的背后,我们看到的本质是什么呢?是中国很不成熟的软件市场。特别是家用(个人)软件市场,这个市场是否存在呢?我想中国绝大多数个人软件的消费者都乐于使用盗版软件。中文WIN98的价格是1998元, 比日文版和英文版的都要贵,为什么BILL GATES要在中国这个并不富裕的国家把软件价格定那么高呢?我想可能是因为他知道即使价格定低了也没有人买正版,或者他根本不重视中国的家用软件市场。他把眼光放到了中国的企业身上。微软在中国打的那些官司,也多是对企业而不是对个人的。微软的目标可能是让没一家中国的打企业都使用上正版的Windows。如果中国企业使用盗版的Windows而被微软知晓, 那么要么向微软购买几十上百套Windows,要么就送你上法庭。一般的中国企业都是购买Windows了事。比如深圳华为。在中国,企业一般不会象个人那样肆无忌惮地使用盗版软件,企业一般也有能力购买软件。一个很有趣的现象是,在国内盗版国产企业软件的似乎并不多,即使有,真正使用的却不多,特别是财务软件,一般企业都无法认同盗版产品,因为做帐的时候使用盗版软件总是不放心。而且,企业软件一般加密性能比较好,其软件狗加密并不是很轻松就能解开的。而且使用解密又会面临法律上的制裁。中国的软件业可以说是步履蹒跚,绝大多数中国的软件企业日子都不好过,个体手工作坊式的软件开发方式比比皆是,这是中国国情决定的,这样的运做方式肯定不能和美国软件巨人们相竞争。所以,中国的软件企业需要将有限而宝贵的人力财力资源投入到真正有市场的企业软件中。家用软件至少在可以预料的未来中是没有市场的。对于中国那些狂热的盗版用户来说,他们会发现盗版光盘中中文的软件会越来越少,不过这也好,可以锻炼他们的英文水平了。
14
2026-01
高端网站建设效果不佳的原因分析与对策
当你在精心打造了一套高端网站,却发现未能达到预期效果,是否会陷入困惑?高端网站建设的成败,其实暗藏诸多关键因素,以下几方面值得深入探究。一、领导重视程度不足影响高端网站建设成效在这个竞争激烈的商业环境中,高端网站建设是企业拓展市场的关键一步。但部分企业领导对网站的重视程度却堪忧,甚至记不住自家网站地址,这种态度无疑会向下传递,导致网站管理人员也缺乏积极性。高端网站建设的目标多样,从提升品牌形象到开展电子商务等,无论企业规模大小,都应先在思想上给予充分重视,依据自身情况明确建站目标,投入相应资源进行建设与运营,如此方能收获理想效果。二、网站管理人员配置不合理制约高端网站建设发展高端网站建设需要专业团队精心运维。现实中,不少企业随意安排人员管理网站,致使管理缺乏延续性。从网络营销角度看,网站管理员应具备多方面能力,如一定写作能力、对行业见解以及网络营销知识等,还应熟悉互联网基础、办公软件和图像处理软件等。高端网站建设的优质内容至关重要,它关乎吸引访问者、提升搜索引擎排名等。企业领导应高度重视网站管理团队的组建,根据公司规模合理配置人员,或寻求第三方专业公司代运维,保持团队稳定,助力网站良好发展。三、缺乏明确建站目标导致高端网站建设迷失方向高端网站建设绝非一时头脑发热之举,明确的建站与营销目标才是成功基石。企业应深入思考建站目的,是提升品牌、推广产品,还是提供服务等,依此确定网站版块、布局与功能。同时,要结合企业实际情况,如人员构成、市场现状、目标人群和资金实力等进行预判,避免盲目照搬他人网站。高端网站建设中,目标明确才能精准选择方法与手段,在网络营销道路上稳健前行。四、合作伙伴选择不当影响高端网站建设质量高端网站建设中,企业多依赖专业网络公司。然而,面对市场上报价悬殊、服务质量参差不齐的状况,企业往往难以抉择。部分企业频繁更换合作伙伴,还可能出现域名过期、转移纠纷等问题。企业应慎重挑选建站公司,除了考虑价格,更要关注其老客户服务年限、网站效果等。高端网站建设关乎企业形象与营销成果,选择信誉良好、实力雄厚的合作伙伴。总之,高端网站建设要想取得良好效果,企业需在领导重视、人员配置、目标明确以及合作伙伴选择等方面下足功夫。希望各企业主能够重视建站、运维与推广工作,让网站真正成为推动企业发展的有力工具。
13
2026-01
谷歌推出全新Android开发框架Sky让App更流畅
据arstechnica报道,谷歌推出全新Android开发框架Sky,主要目的包括提高运行速度和响应速度,在大部分设备上,应用流畅的标准都是实现60FPS的帧率,Sky希望实现高达120FPS的帧率,用户界面将保持流畅的响应速度。目前为止,除游戏之外的Android应用通常使用Java语言来开发编写,其运行效率和速度并不理想,而谷歌内部的一个团队正在探索全新的应用开发方式。他们利用了谷歌自主的网页开发语言Dart来开发Android应用。这帮助他们专注于速度,并可以与网页进行深度整合。Dart由Chrome V8引擎的团队成员发明。该团队近期举行了Dart开发者峰会,展示了在Android项目中使用的Dart。在Android项目中使用的Dart并未被称作“Dart on Android”,而是有了一个新名字“Sky”。目前,Sky只是一次开源的尝试。但相对于传统的Android应用开发方式,Sky有着多方面优势。Sky的最主要目的包括提高运行速度和响应速度。在大部分设备上,应用流畅的标准都是实现60FPS的帧率。不过,Dart团队希望实现高达120FPS的帧率。目前在Android平台上,许多应用连标准的60FPS帧率都难以达到,更不用说120FPS。60FPS的帧率要求每16毫秒绘制一帧,当画面绘制速度达不到这一水平时,应用就会出现卡顿。Dart团队展示了一款演示应用,每帧的绘制速度仅为1.2毫秒。尽管这只是一次简单的展示,但这意味着,对于开发流畅而复杂的应用来说,Sky有着很大的空间,这也使120FPS的帧率成为了可能。该团队表示,Sky的应用程序接口(API)不会影响界面的主线程,这意味着即使应用运行速度变慢,用户界面仍将保持流畅的响应速度。Sky并不依赖于平台,其代码可以运行在Android、iOS,以及任何集成了Dart虚拟机的平台上。这类应用的运行类似于网站。应用的很大一部分基于HTTP,这意味着开发者可以进行持续的开发,并确保所有用户一直使用最新版本。这款演示应用的弱点在于无法离线运行,而启动应用则需要1到2秒钟时间,因为应用需要下载数据。不过,这两方面的问题可以通过缓存机制来解决。基于HTTP的模式使开发变得很简单。开发者不必编辑代码、编译并打包,这些代码可以在HTTP服务器上编辑。而用户只需关闭并重新打开应用,即可完成应用的“升级”。这就像是一款网页浏览器。Android开发者可以使用Sky Framework,这提供了一整套Material Design小工具,帮助开发者方便地增加操作栏、触控效果、导航面板,以及Android应用中所需的一切元素。与普通应用类似,Sky应用可以获得Android的全部权限和API,但结合来自网页服务器的自动升级功能,这将带来信息安全问题。不过目前,Sky仅仅只是一个试验项目。在Sky成为一种主流的Android应用解决方案之前,Sky团队需要解决这些问题。该团队的GitHub页面显示:“我们仍在对Sky进行频繁地迭代,这意味着框架和底层引擎有可能以不兼容的方式出现改变。”
08
2026-01
产品的What究竟由谁产生
无论是在公司工作还是自己创业,我对产品的理解都是「用户、场景、需求&解决方案」,也就是我们常说的「Why、What、How」。我以为这个产品的「What」应该由最理解它的人来定义。但是在新的公司,我的这一理解受到了一定程度的冲击,出于对同事的尊重我就不详细说明是如何冲击我的了。我只是想把我的理解分享出来,当然我的理解也不一定正确,我也接受任何人的 PK。为什么要做?初创团队是不存在这个问题的。这里主要是要说一下在大公司里面我们为什么要做一个新What?我的总结:开会时候老板随口一说、有的人就去 Kiss ass 了公司需要做些新的尝试、老板会指派人去做有人需要找点儿存在感、会找些事情来做当然也真的是有人会因为真的想做而做其它我列举不出来的这里我不想多说,私以为从大公司出来的人都曾面对过这些问题,但是因为自己势单力薄只能被 rape 去执行。多问一些为什么,花费足够的时间在这个问题的思考上,找到其本源,想清楚了再做决定。当然如果你懒得想,我有一个建议,那就是Paul Graham的三点原则帮你衡量这个为什么:是创始人自己要、自己能做出来、别人不认为值得去做的东西。该由谁来做?要做一个新的What了,第一步是要找一个Owner,初创团队肯定不存在这个问题,因为如果连 Founder 都搞不定这个问题,那还是趁早洗洗睡了。我以为在大公司能定义What的人,应该具备三个特征:1、热爱热爱其实算是理想状态了,基本条件应该是对确定的某个事物具备很深程度的理解和长时间的思考。例如你想做「陌生人社交」,你自己都不具备在外面搭讪美女并且她聊的很 High 的能力,我是不相信你能做好一个陌生人社交产品的。我曾经跟投资人聊,他为了测试我,当场在咖啡厅指定了一个女性让我去聊至少15分钟,结果我聊了半个小时。我认为乔布斯最成功的产品其实是 iTunes,因为他对音乐的挚爱是我们一般人无法达到的。他的 iPod 里面有12张 The Beatles 的专辑、5张 Bob Dylan 的专辑。因为对 Bob Dylan 的热爱,甚至还与 Bob Dylan 的前女友 Joan Baez 热恋。自己是 Hippie 的缘故+对音乐的挚爱,所以才能将听音乐这件事情,做到了这样的极致。2、自驱Paul Graham 的三点原则第一条是创始人自己要。如果 Owner 对于想要的东西都不能通过强大的 Self-Driven 持续将这件事情做好,那么这件事情也许从一开始就是错误的。反观我们自己在公司打工时候的各种现象:要么就是为了做而做、要么就是纯粹的应付了事、要么更有甚者连事情都做不好。3、努力这里只送给大家一句话:以大多数人的努力程度之低,根本轮不到拼天赋!最后还是忍不住吐槽:新的产品方向真的不是靠非产品人看看机构报告,做办公室意淫出来的。没有去过富士康就不要跟我说厂妹!
07
2026-01
ASP脚本生成GUID的实现
全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装。在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用 GUID。GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值。世界上的任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。在 Windows 平台上,GUID 应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。ASP生成GUDI的实现<%Dim objTypeLibSet objTypeLib = CreateObject("Scriptlet.TypeLib")Response.Write objTypeLib.Guid%>在本机及网络主机均测试通过。
05
2026-01
HTML5未来发展的六大趋势
HTML 5从根本上改变了开发商开发Web应用的方式,从桌面浏览器到移动应用,这种语言和标准都正在影响并将继续影响着各种操作平台。在移动领域,大家争论不休的一个问题就是开发Web应用还是原生应用?而随着HTML 5标准的发展,两者之间的差异已经逐渐变得模糊,今天各大媒体都争相报道与HTML 5有关的东西,那么,HTML 5未来的发展趋势到底是什么?1) 移动优先前天,appMobi获选ReadWriterWeb2012最具前途的的公司,作为一家初创公司,这个奖公司首先专注于在移动平台上如何实现HTML 5的简单易用和无处不在。从如今层出不穷的移动应用就知道,在这个智能手机和将平板电脑大爆炸的时代,移动优先已成趋势,不管是开发什么,都以移动为主。如上文所说,此前一直困扰移动领域的问题就是开发Web应用还是原生应用。而如今,我们看见一些大型企业如《金融时报》在冲着HTM L5进军移动市场过程中,从App Store撤掉iPad原生应用而开发Web应用,同样表现出色。许多游戏开发商也将在移动Web应用中扮演中重要角色,移动Web应用优先的趋势将会持续到移动设备统治信息处理领域。其实用户根本不在乎你用什么工具开发了什么应用,不管是Web应用还是原生应用,只要好用就可以了。2) 游戏开发者领衔“主演”其实移动游戏开发商是从HTML5获益最多的一方,他们可利用这个平台逃脱付费游戏须向苹果支付的30%提成。在某种程度上,游戏就是移动平台销量最好的应用,也是吸引人们购买移动设备的一个重要因素。许多游戏开发商都被Facebook或者Zynga推动着发展,而未来的Facebook应用生态系统是基于HTML5的,尽管在HTML 5平台开发出游戏非常困难,但游戏开发商却都愿意那么做。通过PhoneGap及appmobi的XDK将Web应用游戏打包整合到原生应用中也是一种方式,Facebook差不多就这么干的——基于Web应用及浏览器,但却将之打包整合进原生应用。3) 响应式设计&自动变化的屏幕尺寸在HTML 5真的改变移动开发平台之前,必须要迈出重要一步,那就是“响应式设计”,也就是屏幕可以根据内容而自动调整大小。响应式设计最好的一个例子就是今年上线的BostonGlobe.com(观看视频),其屏幕能够根据任何内容而调整尺寸大小,在访问过其开发商Filament Group后才了解到,响应式设计也并非易事,一些基本概念设计必须从头开始,比如处理媒体库的RespondJS,而且处理来自第三方的图片和广告也是恼人的问题。要想做好响应式设计,就必须洞悉内容与屏幕之间的反馈关系,一家来自硅谷的响应式设计公司ZURB称,其实在过去的16年中,开发商就意识到响应式设计就要完全离开“流”,转而注重内容是如何在网页和移动设备中被处理的,这一过程还在继续,HTML 5会让它最终成为可能。4 )设备访问消除Web应用与原生应用界限的最大障碍就是浏览器访问移动设备基本特性的能力,比如照相机,通讯录,日历,加速器等,利用HTML5实现此能力方面,上文中提到的appMobi算是行业翘楚,在感恩节后开源了所有API。Mozilla也一直在努力通过移动浏览器Fennec来将强设备访问能力。对许多移动开发商来说,提高设备访问能力是HTML5最令人激动的革新,这意味着Web应用能够登陆移动设备而无需做任何PhoneGap式打包,游戏开发商当然最开心,因为某些特性对他们来说是封锁的,比如能整合到游戏中的加速器。这就开启了另一个可能的世界,比如能与云更好地整合(这有利于应用内购买,消息推送等)并提高游戏可玩性,有了HTML5这个平台,开发商可以不再依赖于Java语言,CSS3,HTML及其它程序语言。5) 离线缓存这个概念相当新潮,离线情况下,app也能照常运作,算是HTML 5充满魔力的一面,今年最好的离线缓存例子就是亚马逊Kindle的云阅读器,可以通过Firefox6以上版本,Chrome11以上版本,Safari5以上版本及iOS4以上版本浏览器将内容同步到所有Kindle系列设备,并能记忆用户在kindle图书馆的一切。亚马逊就这么实现了离线使用Web应用,许多专家人声称原生应用的末日即将到来,因为Web应用的使用变得简单,无摩擦,适用于任何一个平台或者无需平台。当然Mozilla的触角也伸到了这里,实际上,Mozilla想涉足任何一个HTML 5能渗透的领域,从Mozilla的移动蓝图,可以了解更多。6) 开发工具的成熟在今年八月份,Brian Fling曾写过一篇博文叫HTML5 Web应用开发剖析,提出了几点建议供从事HTML 5应用的开发者参考:要耐心,HTML5项目可能比开发其他任何项目好是都要长做好预算,这不像建网站那么简单,可能会耗费你大量资金找对开发者,你要记住,这对许多经验丰富的专家来说都非常难的事,那么你的团队也会觉得困难,所以一定要找对人,找到正确的方向要自食其力,你要知道,开发HTML 5项目,许多工具都要自制,不是现成的在技术界,按部就班的教条风格在这里行不通,会花掉许多不必要的资金,在移动领域,没有对与错,只有是否适合,一切以用户体验为重。在工具方面,除了appMobi提供的工具以外,还有Sencha及Appcelerator提供的框架及IDE供应用开发商们使用,虽然这些工具现在算不上成熟,也不如Android和iOS上的开发商框架及工具那般简单强大,但至少它们在演进,将会变得越来越好用。总结HTML 5的其它功能,如表单和新标准还在快速演进,而随着标准化工作的进行,HTML 5有可能变回HTML。HTML 5开发领域的领军人物包括Sencha,Adobe,Appcelerator,appMobi及Facebook,亚马逊,Google三大巨头。不管你是想开发出新型视频应用的开发商如Brightcover还是想开发新型音频应用的开发商如Soundcloud,不论是桌面应用还是移动应用,HTML 5都是创新的主旋律。
02
2026-01
开发者应对iOS 5限制本地存储的非官方指南
众所周知,由于 iOS 5 新增的机制,在设备容量空间不足的情况下系统会自动清除高速缓存文件或临时目录的内容,迫使开发者将应用存储的数据最小化。在 iOS 5 系统中,那些涉及到离线工作、需要用到本地存储的应用都会有相同的问题。很多的果迷热衷于使用这一类应用,尤其是在那些没有 Wi-Fi 网络的地方(地铁、飞机)。如果某一天你安装了一些很大的应用或者同步了大量的图书、音乐,这时候系统的自动清除机制被激活,随之而来的问题就是,你在地铁里、飞机上想要打发时间的时候突然发现找不到之前下载好的一些离线数据了。(如果对此还不清楚,可以看看这篇文章。)苹果设计这个机制的初衷是为了保护好的用户体验,但是现在看来,苹果设计师还没有考虑得万分周全(或者是用户和开发者暂时还不能接受这种“激进”做法)。作为开发者,现在要让苹果提供另外一个可以存储离线下载数据的文件夹已经不可能了,但是假如有足够的开发者向苹果表明他们确实需要这样一个文件夹来存储一些数据,我想在将来的版本当中,这种欠妥当情况也许会出现改善。开发者应该怎么做?如果 APP 目前是把文件存储在 Documents 文件夹现在它在 iOS 5 中运行是不会有任何问题出现的,只是用户可能会抱怨 iCloud 备份了太多数据,浪费时间和存储空间。但是当你的应用下次更新时,很可能会被苹果应用审核团队以在 Documents 文件夹存储太多数据为由拒绝,这绝对会是让你头疼的事情。如果 APP 目前已经(或打算)把文件存储在 Caches 目录请确保你的应用能漂亮的处理任何存储在 Caches 目录里的文件(被)消失的情况,一种解决这个问题的办法是创建一份应用存储在 Caches 目录里的文件的 URL(统一资源定位符) 列表。显然开发者要把这个列表文件存储在一个更持久的不同地方。可以在应用启动时检查一下列表中的文件是否还呆在那里。如果发现有任何文件丢失,可以弹出提示框告知用户这个情况,然后询问是否重新下载。当然如果设备是离线状态,你的任何道歉和解释都将被认为是白痴行为。要考虑到实际情况可能更复杂,比如有时候只有部分数据仍然有效,你需要决定怎么和多少提示需要显示。迁移现有的数据如果你打算更新应用,把数据存储在 Caches 目录里,以适应苹果 iOS 5/iCloud 的新规则,那么你可能会需要把原来存储在 Documents 目录里面的文件迁移到 Caches 目录。可以肯定,Apple 的应用审核团队不会对此进行测试,因为他们不会有你旧版本存储有数据的应用,所以,选择迁移数据可能是个正确的选择。记住不要在应用启动时在主线程里面做大量数据迁移的工作,因为这可能会引起“启动时间看门狗”的注意,并被它终结掉。提早警告用户当应用运行时,你可以经过用户设备存储空间不足,这种警告并不会改变文件被清除的命运,但至少可以让更多的人知道这个问题的存在,从而引起苹果的注意。让苹果知道这是个大问题向苹果相关人员提交漏洞报告,或者疯狂的在Twitter、微博、博客里面抱怨,或者像中国的网店主一样到淘宝公司门口举牌抗议,更可以学习华尔街事件的做法(不建议)。用户应该怎么做?知道现在,存储了大量数据的应用在备份时都是个大麻烦,因为 iTunes 备份进程不得不运行很长一段时间,特别是我们确实有那么多有用的数据需要备份的时候。在 iCloud 备份过程中,用户可能不愿意使用免费的 5 GB 标配空间来备份他们认为不重要的数据(当然更不愿意付费购买额外空间),这是用户可以设置关闭某个应用的 iCloud 备份。设置的具体路径在:iCloud > Storage & Backup > Manage Storage > Backups根据上面的路径进入设置界面,可以选择 开启/关闭 每个应用的 iCloud 备份,并不是每一个用户都会知道有这么个设置功能,所以可以在程序帮助文档、支持邮件中说明,或者,还是用老办法,弹出一个漂亮的提示框,告知用户这一切。当然,这好像是苹果应该做的事情。最后,想说的是,苹果推出了新机制,大部分总是以用户体验更好为初衷的,但是限制本地存储的新机制或许对部分用户和开发者都存在欠妥的地方,本文只是应对 iOS 5 限制本地存储的非官方指南,希望文中没有提供有害的建议,仅供参考。
微信
微信客服二维码
微信客服
53kf
返回顶部
在线咨询