无闪烁、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天,学生可以登录瀚源数码网站,查询与校对本人的图像信息。查询过程中,需要输入学号和身份证号码,两者匹配才能看到照片。

守株待兔骗过UAC

User Account Control (UAC)Windows Vista操作系统引入的一项安全基础架构技术。 应用程序只拥有标准帐户权限,除非管理员明确授予其更高的权限。 这样,只有用户信任的程序才能获得高权限,而恶意软件则没有对系统造成破坏所需的权限。

为什么需要UAC?

在2003年之前,我一直使用着Windows 98。 Windows 98有一个“用户帐户”设置,设置后会在开机时出现密码输入框。 可是我惊奇的发现,在密码输入框中简单的点击“取消”按钮,就可以进入系统,并且所有操作并不会受到限制。 Windows 98的多个用户帐户,仅仅是桌面自定义的区分,并没有对操作权限作任何限制。 如果想删除一个帐户,只需到C:\WINDOWS删掉用户名.pwl文件就可以了。

2003年我开始使用Windows XP Professional。 第一次打开新电脑,没有要求输入密码的提示,就直接进入了桌面。 在安装完毕日常使用的软件后,我为Administrator帐户设置了密码,并且创建了一个Users组的帐户来进行日常操作。

很快我发现,《写作之星WDS》软件无法正常启动了。 作为正版用户,我给翰林汇公司打了电话;客服人员告诉我,1.0版本是为Windows 98设计的,在Windows XP中则必须使用管理员帐户才能启动。 经过多次尝试,我发现只需把我的帐户加入Power Users组,就可以正常启动《写作之星WDS》,但是仍然无法打开和保存文件、只好复制、粘贴。

用Lua语言编写Wireshark dissector插件

Wireshark是一款著名的网络协议分析工具,基于GPLv2协议开源,支持Linux、Windows、MacOS等多个操作系统。

Wireshark is the world's foremost network protocol analyzer, and is the de facto (and often de jure) standard across many industries and educational institutions.

Wireshark development thrives thanks to the contributions of networking experts across the globe. It is the continuation of a project that started in 1998.

Wireshark已经支持数千种协议,对新协议的支持还在不断增加。**今天,你发明了一个新的网络协议,也想让Wireshark识别,你该怎么办呢?**你有两个选择:

  1. 发布你的网络协议,等到有1,000,000人每天使用你的协议时,Wireshark就会支持你的协议
  2. 编写一个Wireshark插件,自己动手、丰衣足食

如果你选择了前者,请按下CTRL+D,然后在你改变主意的时候再回来。

用TinyGet投票

前几天,有人托我在东方网的某个评选活动中帮他投票,票数多多益善——也就是所谓的“刷票”。

投票活动页面

打开投票页面,先手工投几票,发现这个活动的投票不需要登录,对于IP地址、投票频率都没有任何限制。

用Fiddler2截取投票HTTP报文

Fiddler is a Web Debugging Proxy which logs all HTTP(S) traffic between your computer and the Internet. Fiddler allows you to inspect all HTTP(S) traffic, set breakpoints, and "fiddle" with incoming or outgoing data. Fiddler includes a powerful event-based scripting subsystem, and can be extended using any .NET language.

Fiddler is freeware and can debug traffic from virtually any application, including Internet Explorer, Mozilla Firefox, Opera, and thousands more.

《后天》影评:生命、信仰、承诺

《后天》主要讲述的是全球变暖、气候问题。 同时,我还看到了另外一些美国人的价值观——

生命:美国人把生命放在相当重要的位置。影片中,每个人都以他自己认为正确的方式,尽可能延长、保存自己与别人的生命。可是,"正确的方式"是有争议的,很多人由于错误的判断,而丧失了生命。

信仰:人活着是要有一定的信仰的。在图书馆中,人们不得不燃烧图书来产生热量、防止被冻僵。即便如此,《圣经》是不可以烧掉的——《圣经》是美国人的信仰。

承诺:Jack答应过儿子"I will come for you",在汽车故障的情况下,他不顾生命危险,步行前往图书馆寻找儿子。那位医生,也一直照料着Peter,一直等待着救护车的到来。

这部影片还是相当精彩的,在此向各位推荐。 建议观看英文原声、无字幕版本,还是能够听懂的。

信息系统计算模型:从C/S、B/S到云计算

随着计算机软件的不断发展,计算机软件的科学计算、信息处理两大用途中,信息处理应用变得越来越广泛。信息处理软件自始就是多用户的:UNIX上的mail是最早的信息处理软件之一,它的作用是在同一台UNIX机器的不同用户间传递文本信件。计算机网络出现后,多用户的信息处理软件得到进一步发展,演变成“信息系统”。一个基于计算机的信息系统,是以计算机软件、硬件、存储和电信等技术为核心的人机系统。

回到过去——单机时代

最早的信息处理软件mail是多用户的,但是它只能在同一台机器的不同用户间传递信息,而不能实现跨机器的传递。uucp可以实现跨主机的信息传递,但是主机间的网络连接不是持续的,信息到达的时间无法保证。那时,计算机信息处理仍然是以单机为主,通过软盘或非持续的网络连接在主机间交换数据。

在中文市场,求伯君开发的WPS字处理软件取得了很大的市场份额。WPS最早的版本基于彩色文本界面,通过控制字符决定文字、段落的格式。WPS处理的对象是中文文档,信息处理的主要目的是根据需要的格式打印文档——信息在计算机上的处理是次要的,文档的主要形式是打印稿。

FoxBase等单机版数据库管理系统也迅速发展。开发者在此类数据库基础上,开发了单机版本的图书馆、工资等各类管理信息系统