Web应用的评测清单

有人说,只需24小时你就可以完成一个网站,并且开始做生意。建立Web站点已经变得像搭积木一样简单:在WordPress、Discuz、UCenter Home、ShopEx等常用建站程序选择一个(或者多个),能让你在3分钟之内创建一个可以运行的Web站点;然后,你可以用剩下的23小时57分钟安装插件、修改模板、发布内容,实现更丰富的功能。

不过,这些“积木”并不一定能满足你的目的。很多情况下,你需要自己(或者请人)开发一块新的“积木”——编写网站程序。至少,你也得对某些“积木”进行一定的修改和扩充,来满足你网站的特殊需求。

当你的网站并不完全由常用建站程序组成时,Web站点的质量就是一个必须关注的问题了。

Web站点的质量包括哪些方面?

我认为,制作一个网站,必须关注的质量问题,至少包括下面这些:

我的Web开发学习之路

最近有人问我,如何开始学习Web开发?在此,我想对自己学习Web开发的历程作一个回顾。

网页制作 vs Web开发

实际上,很多人提出的问题并不是“如何开始学习Web开发”,而是:

  • 怎么做网站?
  • 网页制作的方法
  • 建立网页的流程
  • 我会PHP和Dreamweaver,还要学什么?
  • 寻网页制作程序编程高手

现在,我坚持使用Web开发这个词,而不是网页制作网站建设这些说法。我认为,“网站”只是Web开发的一部分;学习了这么多开发技能,仅仅用于制作“网站”或“网页”,就是大大的浪费。

GAppProxy架构及协议分析

GAppProxy是一款基于Google App Engine的HTTP代理服务器,GAppProxy的作者是dugang。

GAppProxy是用Python语言编写的,包含客户端、fetch服务器、负载平衡器三个模块。

精巧型代理服务器hProxyN的20090223版本加入了GAppProxy插件。 GAppProxy插件使hProxyN可以通过GAppProxy协议转发请求。

GAppProxy模块组成

客户端

不写错别字是一种态度

阳光男孩倡议:

在文字交流中(包括文章、作业、帖子、邮件、短信),请使用规范语言,避免错别字、病句

发送含有错别字的文字内容,是不负责任的做法,是对收件人的不尊重。

用yate2实现软VoIP语音通话(SIP协议)

2009年1月7日,工业与信息化部发放了三张3G牌照,标志着中国进入了通信技术的新时代。3G的重要特性之一是高速数据链路,移动上网速度大大提高。同时,中国移动也大幅下调了2G网络GPRS上网的资费。可是,语音通话费用仍然按兵不动。作为永远处于弱势的用户,我们却可以通过VoIP网络电话自己实现免费语音通话。

网络电话是下一代网络(NGN)的重要应用之一。“下一代网络”是指10年以后的网络,全部基于软交换(Softswitch)技术。但是,拨打VoIP免费网络电话,并不需要再等待10年。基于现有的TCP/IP网络,我们已经可以使用开源的VoIP软件,实现PC-to-PC的免费语音通话。(注:这里的“免费”,是指不需要支付传统语音通话费用,ADSL/FTTB/3G等上网接入仍然是需要费用的)

下面,我将介绍如何用yate2软件搭建VoIP服务器,并用SIP协议完成语音通话。在我的实例中,使用了局域网内的3台PC,Windows操作系统,接在同一个集线器上,并不是广域网或3G接入。

yate2建立VoIP服务器

Yate = Yet Another Telephony Engine,是一款开源的VoIP网络电话软件。它可以作为服务器、也可以作为客户端使用。yate2可以在Linux下运行、也可以在Windows下运行。yate2下载地址

无闪烁、SEO友好的完美图像替换(pFIR_improved)

图像替换是网站前端设计中经常使用的技巧之一。本文在pFIR图像替换技术的基础上,提出了一个改进版本。

什么是图像替换(FIR)?

考虑这样一种情况:<h4>Image Replacement</h4>,效果:

Image Replacement

现在希望用一张图片替换掉文字内容,使得网页更加丰富多彩(很多情况下是为了表现出特殊字体效果)。做到这种效果:

用JavaScript检测浏览器是否打开图像显示

JavaScript能不能检测浏览器是否打开图像显示?看似一个非常简单的问题,但是网上却很难查到相关资料。大部分用户不会关闭图像显示,但是仍有少数非宽带用户关掉了图像。为了使网站变得更加人性化、具有更好的可用性,Web前端工程师有时需要通过JavaScript检测“显示图像”功能是否打开。

方法一:图像尺寸法

未指定width、height属性的<img>标签,在图片成功下载的情况下能从width、height属性中取得图片的真实尺寸,而图片功能未开启时则是一个固定的、比较小的尺寸(相当于那个“红叉”)。为此,可以插入一张尺寸较大的图片,然后读取width属性,如果尺寸与原图不符说明图片显示没有开启。

<!-- 插入Google的logo,图片宽度应为168px -->
<img id="__ImageSupport" src="https://www.google.com/images/nav_logo4.png"
  style="position:absolute;visibility:hidden;z-index:-1;" alt=""/>
<script type="text/javascript">//<![CDATA[
function ImageSupport() {
  var m=document.getElementById('__ImageSupport');
  if (m && m.width > 100) return true;
  else return false;
}
//]]></script>

演示:图像尺寸法 检测浏览器是否打开图像显示

How to specify server IP in HttpWebRequest

I was writing an HTTP proxy during last weeks. I need to address the origin server with a custom IP address, but I should keep the "Host" header.

I googled about "HttpWebRequest set server IP", "WebRequest modify Host", etc. I read through several posts, and realized:

  • When HttpWebRequest is created, the "Host" header is automatically set to the "host:port" portion of the Uri.
  • Attempt to modify HttpWebRequest.Headers["Host"] will throw an exception.
  • The server IP address of the HTTP Request is determined by the host portion of the Uri, and is automatically resolved against the DNS server.
  • When HttpWebRequest.Proxy is set to use a proxy, the server IP address is determined by resolving the host of Proxy property. I can set the origin server as the proxy, this is called "Proxy hack".
  • When using a proxy, the HTTP Request-Line looks like "GET http://host/ HTTP/1.1" rather than "GET / HTTP/1.1". Every HTTP/1.1 compliant origin server should accept this, but firewalls may think it's a "proxy request" and block it, and some non-compliant servers does not accept it.

SOLUTION

My purpose is: make HttpWebRequest send its request to a custom IP address, but leave the Request-Line as "GET / HTTP/1.1".

实验:自定义Windows帐号的RID值

Windows帐号的SID由“S”、SID版本号、颁发机构、子颁发机构、RID组成,本文讨论的是最后一段RID的自定义。

Windows安全原理与技术老师给我推荐了一篇文章:《EFS加密的一线生机-加密帐户被删的补救方法》,文中介绍了在Windows中创建指定RID值帐号的方法。10月14日,我对文中的方法作了验证。现在我将发给老师的电子邮件整理成这篇文章。

实验环境:Windows Server 2003 SP2 en-us @ VMware Server

RID的自定义

《EFS加密的一线生机》提到的修改RID方法是:在Windows中,下一个新建帐户所分配的RID是由HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account注册表项的F键值所确定的。F键值是二进制类型的数据,在偏移量0048处的四个字节,定义下一个帐户的RID。

批处理下载全校毕业照

从Windows 95开始,Windows操作系统正式脱离了DOS。在图形界面以外,“MS-DOS方式”和“命令提示符”仍然是Windows用户常用的工具。命令行下的批处理,则是Windows系统中最方便的编程工具。

早在Windows之前,DOS中就已经有了“批处理”这个概念,批处理文件的扩展名为bat。从Windows XP开始,command.com变成了cmd.exe,命令行解释器更是增加了大量新功能,使批处理的功能更为强大;许多外部命令(需要独立exe或com程序)变成了内部命令,使批处理的性能有所提高;批处理文件的扩展名是bat或cmd。

下面,我将介绍如何用一个批处理文件下载全校的毕业照。

考察情况

上海交通大学F05级毕业生的毕业照由上海瀚源数码科技有限公司负责拍摄。拍摄后3天,学生可以登录瀚源数码网站,查询与校对本人的图像信息。查询过程中,需要输入学号和身份证号码,两者匹配才能看到照片。