本站首页 返回顶部 关于博主

人机交互中错误信息的显示

中午去招行取钱。插卡,输密码,输金额,然后出来一张凭条,却没有出钱。凭条上写着响应码:55,TxCode:01。屏幕上没有任何错误信息。

我的疑问来了,钱没取到,那钱扣了吗?由于ATM机上无法查询交易记录,我只好通过手机银行查询了交易记录。查到今天没有取钱操作,这时我才放心,取钱失败,钱没有扣掉。

事后,在网络的帮助下,我查到响应码来自银联,55意味着交易被拒绝,原因是“Incorrect personal identification number”。

假设一下,如果没有手机银行,当时我会怎么做呢?打95555,告诉客服事情的经过,然后客服会根据凭条上的响应码告诉我原因和结果。这样,问题也能得到解决。

事情能变得简单一些吗?本质上,这是人机交互中一个易用性的问题,如果交易失败,触摸屏上弹出“交易失败”对话框,与此同时打印凭条。凭条上“响应码”改成“交易结果”,并在备注栏中附上失败的原因,至此,事情得到完结局。这样我的担心就没有必要了,既不必通过手机银行查询交易记录,也不必打95555。方便客户的同时,也减轻客服的工作量。

要实现这样的功能并不难。在原有的系统中,有个变量reponseCode,用来存储响应码的值。现在,我们需要添加2个变量:一个reponseMsg变量,用来存储信息;一个map,用来存储所有reponseCode和reponseMsg的映射关系。其中map的key是reponseCode,value是reponseMsg。所有的responseCode和它对应的reponseMsg是已知的,可以在使用前初始化。当用户进行某些操作后,后端返回reponseCode,可以通过map获取相应的reponseMsg,显示给用户看。reponseCode用来处理逻辑,reponseMsg显示给用户看。至此,我们的方案完全实现。

当然,对于原来的行为,设计者可以宣称:“我们就是这样设计的,它是期望中的行为。如果你不懂响应码的意思,那是因为你对我们的系统还不够熟悉。”设计者这么想也说得过去,但人机交互界面是给用户使用的。站在用户的角度,如果花很少的时间就能熟悉系统,出现问题不需要外界帮助就能解决;站在开发者的角度,实现这样的功能所需要的工作量几乎可以忽略不计。那么我们有什么理由不这么做呢?

在设计人机交互界面时,有条基本准则:错误信息应该以人能够都懂的方式显示出来,最好能让用户知道错误的原因,如何解决。

很简单的道理,但这种问题也很常见。即便是以易用性见长的微软,这种问题也偶有出现。前不久买了台Surface,到手后系统更新,提示错误,告诉我一个错误代码,我google,最终在微软的官方网站上查到错误原因是“系统升级之前应该同步时间”。如果在告诉我错误代码的同时,告知错误原因,哪怕是给个URL,链接到官网上错误原因的网页,也比一个光秃秃的错误代码有用吧。

做了多年的GUI开发,有些感慨,GUI是人机交互的纽带,用户对产品的第一印象往往取决于看得见的GUI。一方面,GUI开发有很多需要改善的地方,另一方面对GUI却不重视。对此,身在其中往往却很无力。

写这篇文章的目的,并非想贬损什么。权当相互探讨吧,欢迎拍砖。

怎样把HTC G7的内存扩展到2GB

介绍
HTC G7的内部存储只有148M,两年前买它的时候,android应用大多比较小巧,148M已经足够用了。随着android版本的不断升级,应用变得越来越臃肿,G7也变得越来越吃力。就我个人而言,手机上装个招行网银、WPS移动版、金山快盘之后,再想装个微信就会提示内部存储空间不够。于是,从网上找了些资料扩展内存的资料,测试,发现的确可以把内存扩展到2GB,运行速度和扩展之前几乎没有差别。在此,做个笔记,对己对人都有用。
 
原理
此方法扩展的原理是:在TF卡上申请部分空间,把这部分空间代替手机原有的的内部存储。空间是扩展了,但也存在缺点:由于TF卡是外部存储,其速度往往比内部存储慢很多,如果TF卡的速度太慢,将会导致手机的响应时间可能慢到难以容忍的程度,完全没有使用的价值。

准备
  • 假设HTC G7已经获得Root权限,并且已经安装了Recovery
  • 准备一个TF(MicroSD)卡,至少4GB(个人推荐Class10, 8GTF卡)。
    以前,我使用了class4的TF卡,响应速度太慢,点击任何一个应用,基本上要等3秒以上才会有反应。这次,我用class10(官方标注的速度为>=30MB/S)的TF卡重新试了一次,成功。与扩展前相比,速度上没有明显的变慢。
  • Data2SDData2SDInstallerv1.3_GB.zip
    这个文件的作用是把android的系统文件从手机的内部存储移到SD卡上某个分区,并把这部分空间替代手机的内部存储。
  • GParted:Linux上的分区工具,用来给手机的TF卡分区。 
 
步骤
步骤的核心有2步,先把SD卡分区,分别是FAT32和Ext4两个区,然后通过Recovery运行Data2SD应用,把android系统中的数据从内存移到Ext4分区上,并把Ext4分区作为内部存储。具体步骤如下:
  1. 备份android系统。
    其实这一步并不是必须的。在执行步骤“ 4. 运行Data2SD应用。” 时如果失败,很有可能导致系统无法开机,此时就可以使用此步骤中备份的系统进行恢复。为保万全,建议不要略过这个步骤。
    1) 关机,按电源音量减键,进入Recovery模式。
    2) 找到 Backup and Restore, 选择Restore。
    3) Restore完成后,开机。
     
  2. 备份TF卡数据。
    1)把手机连接到电脑上,打开USB数据连接。
    2)把TF卡中的所有数据复制到电脑中某个文件夹。
     
  3. 使用GParted对TF卡分区。
    1)把手机连接到Linux系统上,打开USB数据连接。
    2)使用GParted对其分区,第一个分区为FAT32格式(大小为整个TF卡的大小减去2047MB),后面留2047MB格式为Ext4格式。
     
  4. 运行Data2SD应用。
    1)把Data2SD应用(Data2SDInstallerv1.3_GB.zip)复制到TF卡的FAT32分区上。
    2)关机, 按电源音量减键,进入Recovery模式。 
    3)选择Install Application from zip file,找到 Data2SDInstallerv1.3_GB.zip,确定。 
    4)完成后,重启手机。
    备注:如果重启后,发现手机无法开机,这时可以使用步骤一中的备份进行恢复。当然,这是小概率事件。
     
  5. 把第2步中的备份数据拷贝会TF卡的FAT32分区。
    1)把手机连接到电脑上,打开USB数据连接。 (连接电脑后,发现TF卡容量变小了,那是因为用户看到的是FAT32格式的分区,而Ext4分区是不可见的)
    2)把步骤2中备份的数据复制到手机中来。
结论
至此,一切完毕。查看手机的内部存储空间,1.97GB,呵呵。
 
参考资料

一个网络质量相关的无聊问题

      前不久,成都的同事给我演示了一个bug:点击“Upload License”按钮,会弹出Upload License对话框。奇怪的是,如果第二次打开Upload License对话框,从弹出对话框到整个对话框加载完毕,竟然要花费近20秒的时间。
      这是一个部署地为美国的Web应用,我们通过浏览器来访问网页。事实上,这个对话框很简单,基本上在1秒内就应该加载完毕,耗费这么长的时间,的确很意外。
       我尝试着重现这个bug,发现不能稳定地重现。大多数情况,对话框在1秒之内就能加载完毕。重现几率大约10%。据我所知,这个对话框仅需要加载html网页和Javascript代码,和后台之间不存在任何其他的交互。
       排除了与后台交互,等待response的时间过长的可能性之后,我怀疑问题的根源在于Web服务器。于是,尝试着把系统部署在本地的服务器上,发现加载速度相当快。因此,更加确认了我的想法:对方的Web服务器有问题。
       之后,转发给后台的同事进一步调查。同事反馈说,尝试了不下几十次,一直都无法重现。我通过自己的美国虚拟机来访问这个网页,的确,无论如何都重现不了。
       好吧,我只能得出结论,这很有可能是网络问题,排除公司网络防火墙的可能之后,只能是伟大的GFW了。