2009年11月27日星期五

Quote: Embodiment 6

情感是认知中不可分割而又必不可少的一部分。我们所做、所想的一切都伴随着情感,大部分情况我们都意识不到这一点。另一方面,情感影响着我们的想法,不断引导我们感受一切(and serve as constant guides to appreciate behavior),引导我们走出困苦,迈向美好。

然而,我们在谈论产品可用性的时候,是不能把美学和感知从行为中分离出来。更重要的是,行为不仅是我们做什么,更是让我们感知什么——在交往和产品中直接展现情感。

后一段的原文在这里,感觉翻译得还是不太畅顺:However, the products we talk about usability, aesthetics and perception can't be detached from the acting. Most importantly, the action not just we do, but we make how we feel and know - the expression of emotions bearing on human communication and products directly.

在这一点,苹果领先太多了。

一个 ed2k 的 wrapper

不知道有多少人和我一样,专门有一个机器用于下载和储存;装的是 Ubuntu,通过 ssh 登录后使用 ed2k 来下载 VeryCD.com 上的资源。不过有一个问题,ed2k 只能一个一个链接地添加,复制-粘贴从来就是一个体力活,而且传递给 ed2k 的参数必须以引号包围,如 ed2k 'ed2k://some_link' 才能完成添加下载任务的工作。

为此我写了一个脚本,给 ed2k 加一个 wrapper,传递一个无需引号引用、 VeryCD.com 上任意页面的网址,然后就自动把该页面上所有的 ed2k links 添加到 amuled 的下载列表中。这个脚本用的是 Python,其中使用到了 BeautifulSoup 解析 HTML。后来发现 BeautifulSoup 并不好使,会出现莫名其妙的错误,就改用了 libxml2dom,事实上这个东西比 BeautifulSoup 更好使。

这个脚本也有一个问题,就是不能选择性地下载页面中的某些文件。为了解决这个问题,这天我给这个脚本修改了一下,也可以接受一个文件名作为参数;而可以通过建立一个临时的文本文件,每一行就是一个 ed2k link,保存后把文件名当作参数传递给这个脚本则可。

脚本比较简单,45行代码也不多,可以再缩减几行,不过为了可读性,就没有这般干。在使用这个脚本之前,需要确保为你的 python 装上 libxml2dom。

libxml2dom 的下载地址:http://www.boddie.org.uk/python/libxml2dom.html
脚本保存在 pastein.com 上:http://pastebin.com/f7e4b1cde

标签: , ,

页面脚本中的 HTML Entities 转化问题

这篇东西 说了 Twitter 上存在的一个 XSS 漏洞,而这个漏洞是由于没能对嵌入页面中的、动态生成的 JavaScript 代码进行有效的 HTML entities 过滤而引起的。对于动态页面中那些用户输入的字符串,仅是把 '"<>\ 转换为 html entities 还是不够的;例如 <a href="some_uri" onclick="custom_function('[user_input]')">some text</a> 这般的代码,假设 [user_input] 是 ');alert(1),', 而仅是把 ' 转换为 html entities —— &apos; 是不够的,因为在嵌入页面的 JavaScript 中,转换为 html entities 的字符仍是有效脚本中的一部分,脚本仍然是可以运行的。

针对这个问题,暂时我想到的解决办法有两种,但都基于同一个原理:经转换后的数据不在生成页面时嵌入 JavaScript 代码中去,而仅是嵌入到一个指定的元素中去;在页面载入后,通过 DOM 读取该元素中的数据,然后再进行其他操作。

我写的样例代码见这里:http://pastebin.com/f333cc832

标签: , , ,

2009年11月20日星期五

三个安全相关的小笔记

1. DNS Rebinding 的防范有三种方法(来自 wikipedia):
- 将 IP 地址固定于首个 DNS 解析请求。
- 在内网 DNS 服务器中,避免将外网地址解析到内网 IP。
- 对来源请求的 Host 字段进行验证。
其中最后一种是程序中要实现的。重新提起 DNS Rebinding 的原因是,ha.ckers.org 最近提及了通过 DNS Rebinding 实现 Session Fixation。怎么说这一层简单的验证,做了比没有做要好。

2. sla.ckers.org 上面则是有一篇东西,使用 XSS 去绕过 CSRF 的保护。思路很简单,假设 CSRF 的防护是通过 token 实现,而请求模式是 GET,那么通过 XSS —— iframe 读入页面,然后 JS 找出 token 再伪做链接。防御 CSRF 的最好办法,还是将请求模式从 GET 改为 POST 并且做双重验证,当然需要耗费的资源相对增加了,这里只是说明了,简单加一个 token 只是权宜之计。

3. Clickjacking Protection。owasp.org 上列出了两个方案:x-frame-options 响应头和一段用于自动跳出的 iframe 的 JS。前者由 MSIE 引入,有 allow,deny,sameorigin 三种值。这里权作笔记和回忆。
--
Twitter: http://www.twitter.com/leechael

标签: , , , ,

2009年11月14日星期六

然后怎样?



狠心地把 Instapaper 中的好些链接删掉,最后还是剩下好些文章。Gmail 中还存这 68 篇标记为 "ToRead" 的文章,收藏夹中有十数个起 index 作用的链接,另一个 Firefox 窗口中还打开着近 20 个窗口,书柜里应该还有近 60 本经由他人推荐的好书还没有看。然而我已经很克制地不去下载电子书,因为可以找到下载的好书实在太多。

尽管如此,我还是感觉被无尽的信息掩埋了。

昨晚重新阅读钱钟书先生的《围城》,8点左右开始看,11点左右睡觉,中间洗澡大概用30分钟,只是看了近一半。也就 200 页左右。我是不是该感概自己的阅读速度又慢了?或者根本没有可比性?当时两天左右看完《鹿鼎记》,现在的我还可以吗?

我狠狠地退订了一些 Google Reader 中跟踪的博客。我还会继续退订。

我又一次地说着要改变,CHANGE,什么时候又变成口号了?

这几年我看过的技术类信息,我怀疑是否都能完全消化。或者我没有消化掉?我总是浮躁地追逐着下一条信息,然后期待能赶上,却没有时时停下来,想想自己是否应该去追逐那东西。



前一次这般分章节写东西是什么时候了?

我多久没有写过这么长的东西了?

过去的时间在记忆中似乎越拉越长,才过去了的时间在记忆中似乎是那么遥不可及。上个星期还在实习,而现今却在电脑前面打字。当时的人或事,似乎就在隔壁,却无法触摸。这让人想起电影《Lake House》。

实习期间的生活,我出乎意料地适应;这倒是在我意料之外。我以为我只追求我期许的,老师这份职业不会出现在我的选项里面;而事实上,只是我不选择。我并不排斥。你看,方鸿渐那般的人也能成为大学讲师呢,还是副教授。所以,我为什么做不来老师呢?

只是我不选择而已。



还是好好想想接下来怎么样好了。

恰如我实习时的主题班会题目,然后怎样?


--
Twitter: http://www.twitter.com/leechael

标签:

2009年11月12日星期四

Quotes: review of What The Dog Saw

香港曾是一個充滿活力、容許失敗、鼓勵「馬死落地行」的城市,但從什麼時候起,我們的社會開始害怕轉軌、不再包容主流以外的選擇、人們拒絕冒險?這可會是香港失去動力的原因?

--
Twitter: http://www.twitter.com/leechael

标签:

Quotes: 钱学森的最后一次系统谈话 谈科技创新人才的培养

有人说:"卡门教授,你把这么好的思想都讲出来了,就不怕别人超过你?"卡门说:"我不怕,等他赶上我这个想法,我又跑到前面老远去了。"

不随大流,敢于想别人不敢想的,做别人不敢做的。

不同的学派、不同的学术观点都可以充分发表。

为什么能出现传新呢?对异见的包容是很重要的一点。而这一天,在《全球通史》中的文字也向我们描述这个道理。民主的另一个要素是,对异见有足够的包容。这点是我自认为需要好好去学习和处理的。包容之余,还包括辩论,但不包括打压和人身攻击。

科学上的创新光靠严密的逻辑思维不行,创新的思想往往开始于形象思维,从大跨度的联想中得到启迪,然后再用严密的逻辑加以验证。

不予以对钱学森的评价;我认为我并不了解他。但我对这讲话肃然起敬。

--
Twitter: http://www.twitter.com/leechael

标签:

对于 Twitter 的数点思考

看完《谁在经营 Twitter?》,一些或许有些意思的想法。

1. Motions 可以算是一个嗅探用户需求然后迅速作出反应的一个经典案例,hash tag 或许也是,retweets 似乎有不尽人意。Twitter 在这里只是再次证明,产品的开发需要根据用户需要进行调整,而且越快越好。

2. 文中提及 Twitter 团队的建设理念:精兵,保持激昂的士气。以"熵"的概念来解释,团队人数增多只会增加混乱,管理的复杂维度也随之增大。这里让人想起了《孙子兵法》。

3. 简洁主义的另一层意义:简单,并且有让用户发挥想象力进行扩展的空间。

4. 作者与跟随者(Follower)之间的不平衡关系,是现实社会关系中在 Twitter 中的一种影响:在现实中,你把 A 当作好朋友,而 A 可能只当你的泛泛之交。

5. 开放 API。这里有一个隐含的小前提——简洁主义。如果有让用户发挥想象力的空间,开放 API 的效果可能是指数级的。

--
Twitter: http://www.twitter.com/leechael

标签: