2009年5月20日星期三

关于社区中的 SPAM

SPAM 是社区的顽疾,一般来说都用人肉的方法处理。虽说给了有权限的用户一定
的"特权",多了且每天重复和不同的人肉斗争还是会让人觉得烦恼的。可否有其
他方式减轻 SPAM 的危害呢?

先从 SPAM 的来源说起。一般来说 SPAM 是被用作 SEO 堆砌链接的,而更隐蔽的
是做票证、销售、中介等只留关键信息的 SPAM 。

应对策略:

不提示需要审核,给 SPAM 发布者以发布成功的假象。
防止自动表单提交,注册和头几次发文(某特定用户组)均使用校验码。
需要对用户提交的链接加上"rel=nofollow"标记。
建立链接目标网站黑白名单,为用户提交内容加上 <a> 标签。可根据引用次数进
行人工审核。
特权用户举报,可以随机抽取参与度高的用户。
对被报告为 SPAM 的内容进行学习(贝叶斯、SVM等算法),并对新用户提交的内
容进行过滤。
考虑到部分功能仅对高级用户有意义,可以随等级提升开放签名和头像等功能,并
允许<a>标签。

可以使用评分表对内容进行量化评定,参考用户的注册时间、同IP注册账号数量、
发文间隔时间、用户积分等。考虑到人肉 SPAMMER 的特点是低投入,低产出的劳
动密集型产业,稍微增大发表的成本会限制 SPAM 的数量。

进一步可以强化积分的作用,将用户的付出和回报相联系。如发帖需要扣分而非加
分的积分规则,这在也有助于提高回帖的质量。


人工是不可或缺的环节,但是可以用技术手段减轻人工压力。判别成本降低了,相
对可以减小 SPAM 的停留时间,在和人肉 SPAMMER 斗争中获得优势。

2009年3月28日星期六

我想要一个怎样的拼音输入法?

我是一名使用中文的 Mac 用户,Mac 上的简体中文拼音输入法,还停留在智能 ABC 时代(Tiger 的时候),实在是难用(Leopard 的时候有了不错的改善)。后来有了 QIMFITSunPinyin 等优秀的输入法,但是总是还不那么顺手。在输入法上,除了引擎的效能提升外,对用户来说更重要的是体验上的优化,一般用户并不能直接比较出输入法给出的候选的“智能”程度,所以当前输入法的竞争也就体现在词库以及附带功能上。这里就说说自己对输入法产品设计的理解。

拼音输入法

首先看看拼音输入法。拼音输入法是使用基于语音的汉语拼音方案,在受到限制的英文字母键盘上输入复杂多样形意文字的一种辅助软件。这里用户真正的目的是需要输入中文,而输入法本身是一个工具,工具应当是接近“透明”的,用户在正常使用的时候可以不被输入法所打扰。拼音输入法的特点是拼音重码比较高,而输入法必须适应快速输入的需求,拼音输入法上就采用词组输入、词频调整,以及“整句输入”等智能化的方式,让用户可以使用词语甚至句子代替单字作为输入的单元,而词组的重码就大大降低了,结合了统计和分词的整句输入,进一步降低了词组的重码率。但是,在涉及到一些非标准词组输入时候,就会遇到必须单字输入并选择,当前的输入法都可以做到把用户的输入作为用户词库保存下来,这是用户可以理解的“输入法学习”过程,但是也有一些输入法采用了大词库的方式(比如黑马神拼、智能狂拼等输入法,采用了相当巨大的语料库),或者是自动下载新词库(比如搜狗拼音、谷歌拼音),来对词库进行修正。这两种方式各有千秋,大词库的方式比较适合专业用户输入较生僻的词语,在涉及到大量专业文章录入的时候,结合了整句识别的大词库可以尽量减少用户的选词,但是在日常使用的时候,会遇到重码增多的负面影响。而自动更新词库的方式适合一般用户使用,因为其词库更新来源是来自互联网,更新快但是依然无法通过这种方式覆盖到生僻词汇,只能对流行的新词有较好的覆盖。还有专业词库下载的方式,针对不同用途提供不同方向的词库,这适合词语输入为主的输入法,整句输入上对词库进行调整应该来说不太容易(这个不确定,请有经验的人指正)

“经典风格”和“即时转换”风格

这个说法来源于 SunPinyin,“即时转换”风格是相对与“经典风格”的在输入后使用空格来确认输入上屏的方式。在用户键入拼音串后将用户输入的内容即时转换成中文,并显示在 pre-edit 中,当用户键入上屏键或标点符号并继续输入的时候确认并上屏之前转换的内容。采用即时转换风格的输入法典型如微软拼音等整句输入法,采用经典风格主要是以词语为输入单位的紫光、搜狗等输入法。即时转换和经典风格的主要差异在于上屏方式导致的确认/修改候选方式的差异。

在“经典风格”中,用户可以一边输入一边确认候选,但是当使用经典风格进行整句输入的时候,如果是最后的几个词组转换结果错误,用户需要根据词组逐一确认当前的输入直到最后进行更改。此处需要确认的词组个数是不明确的,万一用户在确认过程中出错,选错了候选,也不方便修改。

在“即时转换”风格中,应当是用户键入词组的音节,在用户输入第三个词组的时候,对第一个词组进行转换(当前 SunPinyin 的处理方式是直接转换前一个音节,不太妥当)。当词库中不存在需要转换的音节对应的词组的时候,判定词组切分,将用户输入的音节转换为第一个候选。由于整句输入法的输入原理,可能会对之前已经转换的词组进行修改,因此用户会发现本应该确认的词组被替换成了不希望的词组,需要回头修改。但是在即时转换模式下,之前的输入是已经确认的,修改最后出现错误的内容比较方便,但是确认修改之前输入内容颇为不便。

从这里可以看出,除去用户的使用习惯的差异,用户需要的是可以方便对转换正确的结果进行确认,对错误的转换结果进行纠正,对键入错误进行方便纠正。当前的输入法对这里处理的都不是太理想。

快捷键的键位设置

输入法是需要使用当前的键盘来完成输入的。因此也必须考虑用户使用时候的击键方便,不和操作系统/软件使用的快捷键冲突。比如一个典型的例子是 Leopard 中的智能 ABC 输入法,使用光标键来进行候选词翻页。基本在所有键盘布局上,光标键都不是正常打字时方便使用手指接触到的按键,因此只能使用光标键来翻页的拼音输入法会让用户的右手频繁在光标键和 JKL; 上频繁移动,影响效率。还有许多下的输入法,使用 shift 作为一键切换中英文输入的快捷键,但是 shift 又是一个输入标点符号的常用按键,很容易误操作。因此,在考虑功能键位的时候,需要照顾到不同操作系统的环境,以及用户的具体输入习惯。

状态提示

输入法通常情况在界面上会有一个当前状态的提示,用以告知用户当前所处在的输入状态。在使用用户设置的输入状态时,是不需要对用户进行提示的,因为用户已经知道当前所处于的状态,只需要在输入状态发生改变的时候,提醒用户当前不处于用户默认的输入状态即可,这比直接显示当前输入状态对用户的影响更小,体现了输入法的工具性原则。比如用户在设置中选择了半角输入/中文标点 作为默认的状态,则当输入法处于全角输入或英文标点状态下的时候,可以在屏幕上告知用户,对用户来说不需要识别两个状态,只需要看特定的状态有或没有。

以词定字
在输入一些重码比较多的单字的时候,一个比较高效的输入方式就是输入一个以这个字开始的词组,然后删去多输入的字。通常情况使用这个方式是在确定一些不组词的单字时,比如人名的输入。以词定字是在确认的时候使用特殊的按键来确认第一个或者第二个单字,而用户使用的时候往往是直接输入词组并向前删除一个字。只是在需要输入的字在后面的时候比较麻烦。因此,以词定字功能主要需要提供用户一个只上屏当前词组第二个字的功能。这个功能用的不多,就不详细说了。

英文输入
输入法的输入状态提示往往不显眼(也不应当显眼),因此会存在用户希望输入英文的时候实际上正处在中文输入状态,但是用户已经输入了一部分内容,需要将输入的内容转用英文输出的这个需求。在许多输入法中,是使用 enter 键来直接输入英文内容的。最早应该是紫光拼音使用了这个方式,希望可以避免用户在早期 Windows 提供的智能 ABC 在中文状态下误输入英文时的挫败感。这里也体现了不丢失用户输入内容这一原则。同时还应当对用户常见的输入进行判定,如用户输入 www/blog 之类的字母组合,则将用户的输入判定为英文输入,后续的输入直接上屏而不进行转换。典型的场景是在浏览器中输入中文提交后,转到地址栏输入网址。

模糊拼音
针对有南方口音的(来一句“化肥会挥发”),模糊拼音是一个拼音输入的容错方案。典型的规则有 ng和 n ,l 和 n,h 和 f 这几对。模糊拼音对不同用户是不一样的,因此应当是一个可以详细开关的设置,用户可以根据自己的实际输入情况来选择合适的模糊拼音方案。

完整拼音和简拼/双拼
在拼音输入法中,主要的停顿来自于出现重码的选择,对拼音错误的纠正,而非用户输入的速度。因此,简拼/双拼考虑更多的是“用户习惯”而不应当是输入效率。为了提高键入的速度,用户会对一些常用词组采用只输入声母的方式进行输入,在整句输入法的智能判定做的比较好的情况下可以比较显著降低输入的键数。而在词组输入的时候使用简拼会增加重码,进而降低输入的速度。使用简拼输入的词语不适宜考虑用户词库,否则重码的大量增加会导致输入效率的下降。

双拼输入可以提高键入速度,并不增加重码。双拼方案存在多种,需要针对不同双拼方案进行兼容性选择。

键入错误和中英文混合输入

在用户键入拼音的时候,难免会出现输入拼音错误。在出现不符合拼音方案的键入的时候,应当允许用户继续键入,并根据用户的偏好判定是将这些部分作为简拼,还是进行纠错,或者输出英文。纠错可以将一些常见的键入错误,比如把 ng 输入成 gn ,或者是 zheng 输入成 zehng 这样的“键入顺序错误”进行纠正,将原文输出和纠正的结果均作为备选让用户确认。在用户忘记输入音节切分的时候,比如用户键入“xian”的时候可能希望输入的是“西安”,但是西安的音节应该是“xi'an”,这里应该将“西安”和“先”放在一起提供候选。如果用户键入了 tign,其本意应该是输入 ting,因此应当将 “ting” 的候选和 “ti g n” 的候选同时提供给用户。在用户关闭了简拼输入的情况下,可以提供 “ting” 的候选和 tign 的英文同时提供候选。

中英文混合输入必须是在打开了完整拼音的输入的情况下才可以使用。当判别出用户输入的拼音是非完整拼音时,将用户的非完整拼音当作英文字串输出。应此当用户键入“weiruanwindows”的时候,微软被转换成中文,而windows按照原样输出。特别的是如果用户在输入的时候键入了大写的字母,则将之后的内容都按照原样输出,直到空格/回车作为结束判定。这里不应当根据用户的输入自动转换输入状态,而应当将这个功能作为用户在中文文章中临时插入英文单词的输入方式。如果采用空格作为结束,则应当将空格作为上屏键,不需要在用户输入的英文后添加空格。在 Mac 下,可以使用系统内置的拼写检查/提示功能(可以使用 cmd+; : 以及 option + esc)完成英文的键入提示,因此不需要额外提供英文词典。但是在 Windows 下,有许多输入法提供单词补全等功能,是颇实用的。

如果我不知道这个字怎么念...
有许多字接触的比较少,因此看到字不会念,因此不知道怎么输入的情况是很常见的。在拼音输入法中还可以加入一些笔形输入,比如根据笔划,或者结构拼音“拆白”。笔划输入就不详细说了。结构拼音是可以将输入的词看作是字的结构性拼音,将每个拼音视作字根。因为复杂的中文字很多是有结构的,通过上-下、左-右的常见顺序,是可以比较方便地输入一些字的。

以上是对拼音输入法的功能点的描述,之后再写一个具体的拼音输入法交互描述。

2009年2月27日星期五

说说盗版问题

这里说的盗版,主要针对可复制的数字内容(以下简称内容)。简单说一下个人看法。

  1. 内容具有非排他性(技术上做到完全排他是成本很高的),非竞争性,是典型的公共品。
  2. 内容本身就应当是以接近免费的方式来提供。
  3. 很多数字作品的作者,主要是指艺人和唱片公司,并不配拥有那么高的收入。
  4. 价格,甚至总体拥有成本,都不是正版盗版的决定性因素。
  5. 买正版,是对艺人的认可和支持,是一种个人态度的表达。
关于内容的公共品性质,不用多阐述了。主要是非排他性上,目前一般使用 DRM 技术来为内容增加排他性保护,但是 DRM 技术给用户增添了过多的限制和烦恼,容易招致用户的不满。突出的例子是在游戏中使用的 StarForce 防盗版系统。

既然内容是公共品,那么就应当不能够让最终用户为其直接买单,因为无法区分谁是最终用户。因此,一个做法是让所有人共同买单,比如收取“音乐税”,但是这个带来了分配和合理性的问题。还有一个做法就是运用免费带来的其他收益获利,比如修地铁可以提升地价,因此将地铁站附近的黄金地块低价出让给地铁公司,用以弥补地铁建设支出。

对于盗版率,无论是否有 DRM,盗版率都在 90% 左右。这个是有一个 World of Goo 的游戏作者的试验证明的。可以获取到 CD,并可以转换成压缩过可下载的数字格式,就会出现盗版,这些都不应当由 DRM 来进行限制。

正版就如慈善,大家认可艺人,就愿意为艺人多付出。应当对愿意付钱的人提供付钱的途径,单纯的卖卖所谓正版下载,是没有任何前途的。应该开发艺人的周边产品,比如签名照等实物,并采用 VIP 会员制,限量发行等手段来最大限度满足愿意掏钱的用户的需求。这样,优秀艺人自然会被市场所认可。这样,就算你价格降得更低,不愿意花钱的用户还是不会花钱,反而会影响总收入。而决定让不愿意花钱的用户花钱的,只有一条:杜绝盗版,增大盗版的获取成本,但是为了达到这一条,*可能会*消耗掉更多的社会资源,很可能对社会整体福利无益。

最后一个观点不阐述了。盗版问题,是那些在现实社会中过的不那么如意的,没有获得利益的人的牢骚。

当然,必须承认,降低价格对于正版率还是有正面影响的。价格降低了,肯定会有更多的人购买正版,尤其是在对收入对价格比较敏感的群体中(比如中国)。但是,销量*价格,不一定会最大化。因此,降价并不一定对内容生产者有好处。

还应当承认,如果让使用盗版成为理所应当的事情,而内容提供者又没有足够的号召力,那么盗版事业是会必然蓬勃发展的。本来,娱乐产业就应当和社会经济水平同步发展。有什么样的经济水平,才可以支撑起什么样的文化产品生产。

我支持那些值得我掏钱的正版购买。

2009年1月21日星期三

在线社区交互环节中的贴心改进

作为一个在线社区,诚然所有的内容(至少大部分)都应当是由社区中的用户所贡献,因而,对活跃的参与型用户的功能/产品设计才是在线社区的重中之重。之后会找一个机会说说针对浏览型用户的产品设计。

参与型用户需要的是交互,交互的对象不是网站,而是其他的参与型用户。因此,在线社区的交互设计应当从增进交互的广度和频率两个方面下手。增进交互的广度应当(1)让活跃的参与型用户彼此发现,并(2)创建多种维度的交互方式。增加交互频率的最好方式就是—提高响应速度。看贴,发帖如果速度都很慢,那么将浇灭用户的热情(可以设想一个发了消息需要等半秒钟才可以看到的QQ群)。其次是对熟练用户提供更快速的交互方式,如键盘导航(可以设想一个不支持快捷键发送,只有一个大发送按钮的IM软件)。

交互广度方面暂且按下不表,下面先说说交互频率方面的改进。
首先是运用 AJAX 的方式来提供交互。这样用户所发表的内容可以以较快的速度直接显示,而不需要等待整个页面的刷新。但是带来的负面也很明显,响应的速度太快,用户比较难一下子接受。这样就需要给用户以反馈,可以采取的措施有:
以鲜亮的背景色填充刚发表的内容背景,并渐变至标准的背景色。
翻页使用平移动画对项目进行滚动,或者干脆不使用翻页而使用滚动条自动加载。
发送消息时可以有动态效果表示消息发送给了某人。

这些措施并不是为了单纯呈现很酷的动态效果,而是给用户一个较短的暂停时间,并通过过渡动画来协助用户构建心智模型。要注意,动态效果过犹不及。

其次是键盘导航,键盘是快于鼠标的一种操作方式。可以使用通用的 j/k 按键或者光标键来在列表中上下移动,并使用r进行回复,或者enter进入查看。在查看并返回版面选择列表后,应当自动将光标停留在包含未读项目的版面上,方便选择。查看上一篇/下一篇等浏览跳转操作均可以有方便的快捷键可以实现。

下面说说交互广度。对参与型用户而言,在首页、版面、主题、文章等页面之间要可以(1)看到其他参与用户,并(2)获知这些用户的在线状态得知是否可以进行即时交互,还要(3)跟踪自从上次查看以来的新变化。这些需求,可以通过在线用户和未读标记来提升满意度。

在线用户指的是可以在首页、版面列出当前用户的在线状态(Color Code)。当前的“在线状态”往往只是一个小图标,并且只在查看文章/用户页面的时候显示,这应当更广泛应用在全社区,只要有用户名出现的地方就应该有在线状态的表示,因此,考虑使用 Color Code ,利用颜色来区分状态,是比较合适的做法。

未读标记指的是保存用户对某篇文章/主题的阅读状态,以便(1)下次访问的时候可以快速继续,并且(2)可以迅速发现其他用户更新的内容。未读标记同样也可以使用 Color Code,或者使用一个未读指示图标也可。

结合之前所说的线性模式,目的是可以给参与型用户一个更好的交互体验。

2009年1月20日星期二

Discuz 7 的翻页功能设计



个人认为是一个亮点,将翻页功能和向上一级以及历史浏览记录的功能结合在了一起。不过依然有可以改进的空间。

返回的按钮做得和下一页太类似,应该是分离的两个功能,而不应当在一个翻页的模块中统一表现;

可以结合面包屑的功能,将翻页和面包屑导航结合来表示当前所在的位置。同时,页数也应该是面包屑导航的一部分。

总结了一下,做了下面这个草图,将翻页和面包屑导航这两个相近的功能放在了一行上,同时在视觉上做了一些区分。浏览历史同样通过将鼠标放置在当前板块的位置上可以切换,浏览历史也带有层级关系。

缺点是这样的翻页功能,会不会太重了。

帖子排列:主题布局 vs 线性布局

主题布局


典型的 Discuz 的帖子排列方式是主题布局,也就是将所有的回复依照发表时间顺序排列在若干“主题”下,并以主题最后的时间倒序排列。
回复之间没有体现紧密相关的关系,体现的是回复和主题之间的回复关系。
主题布局的优缺点

优点

可看到最新的回复主题并进行参与,方便了在线用户交流
将讨论话题集中在主题范畴内,新讨论的内容以新开主题的方式进行
缺点

帖子顺序因回复而改变,难以直接定位到之前参与过的某个主题
众多用户在同时参与若干话题时跳转回复不便
需求分析

首先,主题布局的目的应该是鼓励用户回帖讨论,以及进入版面的时候给用户提供新的内容,并不是为了要给用户显示出最热门的内容(这样就应该按照点击/回复数量来排序)。鼓励回帖讨论的做法是将最新的回复列在最上,直接可以点击最后发表的时间来查看刚发布的回复,并加以回应。
其次,对用户来说区分为浏览型用户,以及参与型用户。浏览型用户的需求是查看有价值的信息(看主题),偶尔发表一下看法。参与型的用户需求的是和其他用户进行交互(看回复)。对浏览型用户来说,使用主题方式组织,可以较好的满足他们对有价值信息的追求,但依照最新回复进行排序,则不容易满足用户查看新鲜主题的需求。
因此,有必要将看主题的浏览型用户,和看回复的参与型用户分别用不同的产品形态予以满足。由此,带来了“线性布局”的补充方式。

新增线性布局的解决方案


解决办法是将所有主题默认按照最新发表时间进行排序(可选按最新回复时间),新增一个线性布局方式
线性布局是将用户的最新回复内容直接显示,提示当前所选择文章所属的主题,选择文章后可以进行回复,回复时保留引用内容和回复关系。这是一个比较依赖于 AJAX 的一种互动应用。
线性布局的起源

之前的天地人大是基本依照线性布局的方式,但是在 Web 下存在如下几个问题:无法直接呈现回复的内容,用户的浏览路径是点击一个回复,查看完内容并回复,返回查看下一个回复,需要多次点击刷新页面。而其默认使用的是“普通模式”也就是线性浏览模式,忽略了绝大多数用户都是查看主题的浏览型用户的需求,切换的查看模式也不能保留。但是,因为参与性用户对最新回复的需求可以在 telnet 方式下得到满足,所以这个糟糕的 Web 只是增加了对浏览型用户带来的困扰。之后改版成为 wforum 的方式,确实在一定程度上提升了用户的体验。
线性布局的优势

在线性模式下,可以“只看回复”(当然主题也应该要呈现出来),让参与型的用户可以紧密跟踪众人最新的回复内容。需要使用 AJAX 允许用户使用键盘来进行操作,因为对于参与型的用户来说,键盘操作是比鼠标要来的快的。同时需要搭配有“未读标记”功能,标记用户对于每一篇文章的阅读状态,在用户切换版面的时候可以迅速回到之前离开的位置继续阅读。因为文章的顺序都是固定的,因此可以给用户以一个较流畅的体验方式。
线性布局的缺点

线性布局是偏向于单个回复和交互的查看布局,显著提升了需要一览话题讨论内容的成本(需要多次点击所有回复)因此并不适合对于对特定主题有需求的浏览型用户,因此这种布局方式将成为一种补充方案而非替代方案。当然,如果一个社区所需要营造的氛围就是以讨论和交互为主,看淡主题的话题作用,则可以将线性布局方式看作是多个 Web 下的 QQ 群/聊天室一样来使用。

总结


总之:我只是尝试将 telnet 下的操作方式移植到 web 上来,用以增进 web 下的在线社区用户体验,提升核心用户的参与度,依靠核心用户的迅速响应和参与来增进浏览用户的黏性。
抛砖引玉之文,希望猛烈回复。

2008年10月24日星期五

QQ 群是很好,可是群号是个很傻的设计

QQ 群的核心在于关系,在于给人打标签。QQ 的 SNS 功能就是从这里开始的。

但是,当你的 QQ 号和某个群号相同时,你会遇到无尽的烦恼。。。
 
Creative Commons License
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。