2010年11月26日星期五

Java社区和微软对用户意见的态度

场景

张总要调试一段Java代码,他想测试前三句的正确性,不运行后续多余的代码了。如下:

    public static void main(String[] s) throws IOException

    {

        String path = ExtractDec.class.getResource("/").getFile();

        path = URLDecoder.decode(path, "UTF-8");

        System.out.println(path);

        return;

        extract(path + "input.txt", path + "output.txt");

        System.out.println("完成了");

    }

但Eclipse提示后两句为不可到达代码,不能编译。

向Java社区询问

张总:“我在做……,能不能让eclipse不要管我不可到达代码?”

Java社区:“禁止不可到达代码有很多好处,1、……2、……3、……”

张总:“我是在调试!你加个开关好不好,让我选择是否检测不可到达代码。”

Java社区:“实在不行你可以在return前加个if语句……然后……万一还是不行就……”

向微软社区询问

张总:“我在做……,能不能让Visual Studio不要管我不可到达代码?”

微软客服:“您好,我们尊重并重视每一位客户的意见和建议。您的要求已加入讨论日程。”

……

张总:“新版本的VS的更新计划里貌似没有让用户选择是否检测不可到达代码的开关,你们到底准不准备实现啊?不然我的公司不用VS了!”

VS开发部加了几句代码瞬间实现了。

2010年11月8日星期一

我给数据库课程的建议以及任课老师的回复——无语了

老师好

Database design(COMP211)讲得太抽象了。它讲的大概是数据库原理吧,但我们连实际的数据库都还没见过。
其中介绍的很多概念、优点、缺点都是从最抽象的角度解释的,(作者)力图概括所有数据库系统的特征,而不涉及它们的具体实现。老师当然是理解那些抽象概念背后的东西的,讲解起来自然轻松,但我们却是不知道的。这就像你知道个位数加法,于是会算123+789=912,而我不知道背后的加法法则,看得一头雾水,以致同学们听课的兴致不高。
学了快2个月的数据库,我们很多同学连电脑上实际的数据库文件、数据库管理系统都没见过;更别说书写SQL语句,上机调试了。
最近老师又教了我们数据库的规范化。我觉得这就好比一句java代码都没学过,老师就教我(面向对象)设计模式了,工厂方法动机是什么、怎么实现、什么优点、什么坏处……我们根本无法动手实验、调试,无法感受老师讲的东西;测验前只能死记硬背,这恐怕并不是学校希望的吧!
我觉得应该将“动手做”提前,理论知识延后。让我们先感受一个具体的数据库和数据库管
理系统(如MSSQL和SQL Server Management Studio),学会操作它,懂得用sql查询、更改、新建;然后老师再教导理论知识,从抽象的角度概括,同时可再辅以其他的数据库(如Oracle)的特点。同学们有了之前MSSQL的基础,理解那些内容应该轻松多了。

老师的回复

谢谢你对我的教学的建议。一个扎实的数据库基础(特别是数据库的关系模型)和理论知识对一个学生之后的学习很重要,这是上机操作的前提。如果一个学生不懂得主键、参照完整性、一对多关系等等,他怎么能在ACCESS中设计出良好的数据库呢?我们下周就要上机操作了,另外我给你看看你们将来关于数据库的学习课程。
第二年:数据库管理系统
第三年:数据仓库
第四年:数据库管理和数据库编程
你们有机会深入地学习Oracle数据库。

原文

Thank you for your suggestions to my teaching in the Database Design course. It is very important for students to have a solid understanding of the database fundamentals (especially the relational data model) and the design theory prior to any lab sessions. If a student does not know what are meant by the term primary key, referential integrity, one-to-many relationship etc, how can s/he create a "good" database in MS Access? There is a roadmap that we have to follow and the lab sessions will be available next week.
In addition, there are 3 more database-related courses in our program and you will have the opportunities to have a deeper understanding of the Oracle DBMS:
Second year:  DBMS
Third year: Data warehousing and Data Mining Fourth year: Database administration and programming.

评价

冥顽不化。老师采用的一种古典的、学院式的教学方法,在很多情况下这并不是一种优秀的教学方法。“不闻不如闻之,闻之不如见之,见之不如知之,知之不如行之,学至于行之则止矣。行之,则明——荀子”
数据库并不是一门玄学,它是一门实践课,和程序设计一样。看网上的众多程序设计教程,有多少不是先给你一个Hello word,尽管你可能不理解为什么能输出hello word。哪一份入门教程先教你该语言的进化史了?哪一份入门教程先教你数据结构了?哪一份入门教程先教你编译原理了?哪一份入门教程先教你上下文无关文法的重要性了?哪一份入门教程先教你面向对象设计模式了?哪一份入门教程先教你全套关键字了?全都没有!
我目前发现的理想切入点是实体关系图,由此展开关系键、关联映射。然后立即在数据库操作系统平台上操作,我准备的是SQL Server,立即实践关系键——主要是主键和外键。可以先讲解构建数据库,也可以先讲解查询数据库——通过SQL语句。之后可以讲视图、储存过程等等。一切都是环环相扣,水到渠成。
老师还说必须先学完理论才能设计出良好的数据库。没有人能第一次设计就达成完美设计!他必须经过困惑和失败。我们现在没有为哪个公司设计数据库。设计值得失败!失败了才能知道哪里导致失败,如何避免失败。经过了几次失败,摸索出了一些模模糊糊的规律,这时教导范式,就有理清思路、总结提升的作用。……
我计划圣诞节或寒假写一份数据库学习教程。

2010年11月5日星期五

回复《QQ开发人员:我们愿意为您的QQ帐户安全做的更多》

一个好友看到360的弹窗,于是在QQ上问我,QQ到底有没有盗取用户数据,有没有监控竞争对手?的确,这些天来,他不是第一个问我这个问题的人了。在这里,我可以斩钉截铁的说:“QQ绝没有进行任何用户隐私数据的扫描、监控,更绝对没有盗取。产品出自我手,没有人比我更清楚QQ的安全特性和逻辑。”

    在360与QQ大战硝烟弥漫的此时,作为QQ产品的开发者,我们依然在会议室里谈论着用户需求,评审着用户体验,关注着用户反馈的使用问题。我们深知无论何时,本着以用户价值为导向的产品理念,是正确无疑的方向。正如我加入QQ团队以来,与其他成员一起为了保护QQ用户帐号和电脑环境安全所做的努力。今天,我想既然我一一说给我的朋友听,不如将它写给我们亲爱的QQ用户们。

安全检查模块的诞生——QQ为什么要进行安全扫描?
2007年,我加入公司2年的时候,QQ的盗号问题日益显著,每天有过百万的QQ用户帐号被盗号者偷窃,或卖号码获取钱财,或在用户登录期间伺机发送广告牟利。正是在这年,QQ团队成立了专门的安全小组,负责保护用户的帐号安全。我有幸成为其中一员,开始从事QQ帐号的安全保卫战。
针对恶化的木马盗号现象,传统防病毒软件主要只针对病毒,对于专门盗取QQ号码的盗号木马,病毒库往往更新不够及时,因此防盗号的效果不好。在此状况下,我们推出了专门针对盗号木马的登录前安全检查功能。用户根据设置,选择每周、每天在登录前检查木马病毒。程序在每次QQ登录时拉取最新的盗号木马病毒库,在下次启动QQ时,按照用户的设置进行用户内存和文件的本地木马检测。

图片

安全检查模块的机制——有没有偷窥用户隐私?

    安全检查模块从08年起不断优化,一直沿用至今,它有效的防止用户的QQ密码泄漏。对于用户产生误解的是否该检查偷窥和盗取了用户的隐私数据,我想有必要再做强调。“偷窥”的前提是,1、阅读用户私人资料;2、将用户私人资料上传到服务器。我们两件事都没有做。

1. 我们没有阅读用户私人资料:QQ安全模块的扫描对象是可执行文件(往往是盗号木马的藏身之处)。可执行文件都是公开的程序文件,不是用户的文档、密码等私人资料。模块一旦扫描到非可执行文件,则不会进一步阅读,所以绝对没有阅读用户的私人资料。

2. 我们没有将用户的私人资料上传到服务器:安全模块检查可执行文件的逻辑是在用户电脑本地进行的,绝对没有把文件上报的行为。

安全检查模块的优化——为什么采用无体验的方式进行检测?

    当时有不少用户不知道盗号木马的危害,由于急于登录,经常忽略此特性,或中途取消查杀。为了让更多的用户使用上安全检查特性,我们将安全检查放在登录后,并采用无界面提示的方式执行,以便不骚扰用户。一旦安全检查发现盗号木马,就会弹出窗口,提示用户发现了木马并提供清除功能。

图片

                  图 检测到盗号木马时的弹出窗口

  今天来想当初的这个设计,用户无感知本是我们尽量不打扰用户,还能让用户最大可能得受到安全程序保护的设计初衷。但正是由于这个体验,被360歪曲为QQ偷偷扫描用户硬盘,偷窥用户隐私。没想到这么一个UI设计上的疏忽,却带给恶意中伤者一个歪曲的理由,从而带给QQ用户的困扰,对此我多少感到歉疚。对可能造成用户误解的地方,我们开始进行着持续优化,相信一定能够找到既不干扰用户正常上网体验,又能让用户了解更多查杀细节并提供更多查杀选择的优秀方案。对此,我们在2010正式版SP2.2中,主面板界面上增加了提示,显示安全检查的整个过程,让用户可以点击查看检测细节,并对CPU的占用心中有数。
图片
图 QQ2010正式版SP2.2中安全检查功能

本地应用软件更新的提醒功能的诞生——为什么要做这个功能?

    随着我们对木马程序的有效查杀,发现一些缺少系统和应用程序补丁的计算机,会反复被盗号木马入侵,清除了木马,但隔几天又会中毒。木马病毒还会利用应用软件的漏洞入侵计算机。这时,保持本地应用软件最新就显得至关重要。然而,普罗大众的用户,不一定会及时升级应用软件。于是在2009年, QQ与软件管理器结合,推出了提示用户软件更新的功能。软件管理器是一款提供主流应用软件下载和升级管理的软件。我们期望通过这个功能,帮助用户保持本地的应用软件最新,避免受到木马攻击。

本地应用软件更新提醒的工作机制——有没有监控竞争对手?

    这个提醒机制在用户的本地执行,完全没有数据上报,所以“监控对手”这一说完全是无稽之谈。QQ客户端在登录后,程序会向服务器询问软件管理器的下载服务是否可以提供,如果确认可以正常提供,便会启用软件管理器打包在QQ中的组件,该组件会从服务器拉取一个可供下载和升级的应用软件列表以及对应的最新版本信息回来。这时,程序根据这个列表,与本地的应用软件进行本地对比。一旦发现用户本地的软件版本不是最新,就在面板下方软件管理器图标上面叠加一个红星星,提示用户可以调用独立的软件管理器去选择更新。所有检查的过程和出现红星星的过程,均为本地逻辑。 这个特性即是被360大肆渲染的所谓“超级黑名单”,歪曲QQ利用这个名单,对用户硬盘进行扫描,监控竞争对手。其实该特性只是在本地做了软件的版本检查及对比,生成一颗升级提示的星星,不上报任何数据。为了避免用户误会,我们已经把这个模块的服务暂时停止。在后续的版本,我们将加上用户可操作的设置,由用户选择是否进行这个本地应用软件更新提醒。相信优化后的功能将更加易懂易用。
图片

图 QQ与软件管理器结合的提示本地应用软件更新的功能

    除此之外,多年来我们还为用户打造了许多保护帐号安全和上网安全的功能,比如,密码框软键盘输入工具、QQ锁、安全贴士提醒、一站式安全服务窗口等。在为保护用户帐号和上网环境安全方面的努力我们从未停止,也永不会停止。

    能成为QQ安全团队中的一员,我感到无比骄傲,以前如此,今天依旧。我们的工作,使用户的网上生活更加安全,我们通过自己的创新,研发并提供了优秀的安全特性及产品。任何一个关于产品的建议和意见我们都认真听取并改进着。对于我们的功能被恶意中伤者利用,并肆意歪曲事实,引发QQ用户对我们个别功能的误解,作为产品的开发者,对当初我们在产品设计上的考虑不周感到歉疚。但也感谢这段经历,它让我们更加坚定,以用户价值为目标的产品设计理念将永不会被中伤者所动摇。

    十二年来,有用户与我们相伴成长,才鼓励我们在产品进步的道路上不断前行。我们将不断努力,陪伴用户走得更远。

  1. 既然没有扫描,腾讯怎么知道用户的电脑上装了360?
  2. QQ帐号不被盗取是一种安全,QQ用户的所有信息不被获取也是一种安全。请问QQ软件能否保证用户的聊天内容不被除聊天双方以外的任何个人或组织(包括腾讯公司和中国政府在内)获取?请问腾讯公司能否保证存储在腾讯数据库里的QQ用户资料不被其他个人或组织获取(包括中国政府在内)?
  3. 必须广泛通知并允许用户停止任何扫描行为,即QQ安全模块和软件更新,即使是对用户有益的。
  4. 必须运行用户手动或通过卸载工具卸载QQ当中不属于聊天功能的模块,包括但不限于安全模块、软件更新、QQ秀、弹窗和广告,而不影响qq的正常使用。由此引发的自然盗号风险和用户体验的降低由用户负责,但腾讯公司执行的qq号回收和故意降低用户体验不属此范畴。