上周六在杭州参加了D2交流会,由于回程时间是周日下午,所以趁着周日早上有时间就去了逛西湖。
先是打车到了雷峰塔,在外面观摩了一番。
接着就往西湖的方向走,途中到了一处有很多船的地方,其中最大的是一艘“龙船”。
上周六在杭州参加了D2交流会,由于回程时间是周日下午,所以趁着周日早上有时间就去了逛西湖。
先是打车到了雷峰塔,在外面观摩了一番。
接着就往西湖的方向走,途中到了一处有很多船的地方,其中最大的是一艘“龙船”。
本届D2在阿里巴巴一个报告厅内举行,该报告厅内有3个投影屏,确保各个位置的观众都可以看到演示内容。悲剧的是,报告厅内的空调(暖气)坏了,所以室内温度也很低,一天下来膝盖以下都是冷的。
九点多,会议正式开始,老男致开幕词。同时,前方左侧的小屏幕上也开始直播人间网上的D2讨论。这对我来说是一种很新鲜的讨论方式,好比上面在开大会,下面在开小会,但是小会并没有影响会进行,反而使大会的气氛更加活跃。
var a = parseInt("09"), b = Number("09");
很多人会认为a和b的值都是数字9,但实际上不是。
parseInt的主要作用是把字符串转换为整数,或者把小数转换为整数。一般情况下,我们只用到它的第一个参数。但实际上,它有两个参数:
parseInt(string, radix)
parseInt会根据radix指定的进制进行转换,比如:
alert(parseInt("10", 2)); // outputs '2'
在没有指定radix或者radix为0的情况下,parseInt会按十进制进行转换。然而,这在某些情况下有点特殊:
说回开头的代码,由于"09"是以“0”开头,所以parseInt会按八进制进行转换,但是“9”不是合法的八进制值(八进制只有0-7八个数字),所以转换结果是0。
要避免这个陷进,可以强制指定radix:
alert(parseInt("09", 10)); // outputs '9'
在事件监听处理方面,IE提供了attachEvent和detachEvent两个接口,而Firefox提供的是addEventListener和removeEventListener。最简单的兼容性处理就是封装这两套接口:
function addEvent(elem, eventName, handler) {
if (elem.attachEvent) {
elem.attachEvent("on" + eventName, handler);
} else if (elem.addEventListener) {
elem.addEventListener(eventName, handler, false);
}
}
function removeEvent(elem, eventName, handler) {
if (elem.detachEvent) {
elem.detachEvent("on" + eventName, handler);
} else if (elem.removeEventListener) {
elem.removeEventListener(eventName, handler, false);
}
}
最近打算换主IDE,主要原因是现在用的Dreamweaver太慢太占资源,特别是打开大文件的时候。而代替者就是EditPlus。下面简单记录一下如何把EditPlus配置成一个编程IDE。
无论是什么软件,一般都要先改全局设置,也就是首选项。
自从有了FastCGI,IIS支持PHP变得非常简单。
先到官网下载PHP 5.6,可以发现有4个版本:
官网已经注明,x64版本是实验性质的,所以还是用x86版吧。至于Thead Safe(线程安全)/Non Thead Safe(非线程安全),官网并没有说明各自用途何在。Google了一番以后,我找到了答案:FastCGI是单线程执行的,因而不需要线程安全版本,去掉线程安全的防护后可以提高执行效率;而ISAPI方式则是多线程模式,所以需要采用线程安全版本。综上所述,我们应下载 VC11 x86 Non Thread Safe 这个版本。
注意,这四个版本都是通过Visual Studio 2012编译器编译的,所以要先安装Visual C++ Redistributable for Visual Studio 2012,否则无法运行。此外,由于我们选用的是x86的php,所以Visual C++ Redistributable for Visual Studio 2012也要对应地安装x86版,千万不要因为系统是64位的就装了x64版。
上周一,我从广州新白云机场出发,开始了北京之旅。这次去北京的出差的主要任务是给那边的同事培训Javascript。
这是我第一次坐飞机。飞机启动后,先是滑行到跑道的起点处,接着高速前进,一会儿就飞起来了。起飞后,飞机逐渐攀升到云层之上,才进入平稳行驶阶段。
这时候正值北京的秋天,昼夜温差较大。白天温度高,有20多度,但是清晨和晚上就只有10多度,深夜的时候估计在10度以下了。一般我是早上穿着3件衣服出门,回到公司就脱了两件,晚上离开公司前再穿回去。干燥也是北京的气候特征,我去了10天就没下过一次雨,北京的很多同事也都天天盼着下雨。
此外,北京的环境还是不大好。我的笔记本用一天后,屏幕上就铺满了灰尘。一旦刮起大风,更是灰尘满天飞。
前几天公司有一个页面在IE下一打开就弹出这样的错误:
Stack overflow at line: 0
一般来说,这是Javascript出现循环调用时报的错。由于页面上的代码比较多,无法一下子判断出是哪里的问题,我只好一段一段地删。然而,即使我把所有的<script>标签都删了,这个错误仍然存在。我又怀疑这是嵌入的外部文件导致的问题,于是又把所有的<iframe>标签给删了,但问题依旧。
难道HTML也会导致循环调用吗?其实我算漏了一个地方,就是HTML元素的事件,可以通过标签的“onEventName”属性指定,比如“onclick”、“onmouseover”等。这下终于让我找到了线索:页面上的一张图片设置了“onerror”事件。代码大概如下:
<img src="a.jpg" onerror="this.src='b.jpg'" />
onerror事件用得比较少,但它本身并不会造成什么问题。然而,这里的“a.jpg”和“b.jpg”都是不可访问的。访问“a.jpg”的时候出错触发了onerror事件,把图片的地址设为“b.jpg”,问题就在于“b.jpg”也不可访问,又触发了onerror事件,再次设为“b.jpg”,这自然也是不可访问,继续触发onerror事件,如此往复。
今天在cnBeta上看到一则消息说Sony软驱停产了,想起以往用软驱和软盘的日子,真是感慨万分。
曾几何时,3.5寸软盘是最常用的移动存储介质。虽然它的容量只有1.44M,但是在那个年代,硬盘也就几G,作为移动存储介质的软盘,容量也不算小了。它的价格也不高,即使文件比较多,多买几张就可以装下。我上初中的时候家里还不能上网,偶尔到亲戚家下载资料,也就靠着几张软盘把资料拷回家。那时用的是56K Modem的拨号上网,实际速度也就5kb/s左右,1个小时也下载不了多少东西,所以用软盘可以装得完。此外,一些软件也使用软盘作为存储介质,比如高中时候买的一套瑞星2003版,是必须插入附带的软盘才能安装的。
随着硬件技术的进步,软盘容量小、传输慢的缺点已经越来越突出。到高中的时候,我基本上没有用软盘了,取而代之的是光盘(CDR、CDRW)和换下来的一个3.2G的台式机硬盘(当作移动硬盘用,接线的时候要拆机箱)。后来,大容量硬盘、光盘、U盘的面世终于把软盘赶上了绝路。从那时起,电脑城的装机配件单里面就没有软驱这一项了。
上大学以后,我终于把所有软盘丢了,新装的电脑也没有配软驱。瑞星也早已升级,不需要软盘了。从此,软驱和软盘彻底退出了我的生活。
JScript下有一个Enumerator对象可以遍历集合。根据它的文档写了以下程序,可以遍历整个Request.QueryString集合:
var params = new Enumerator(Request.QueryString);
while (!params.atEnd()) {
Response.Write(params.item() + ":" + Request.QueryString(params.item()) + "<br />");
params.moveNext();
}
美中不足的是,Request对象本身不是集合,所以不能对Request对象进行遍历,下面这行代码会报错:
var params = new Enumerator(Request);