• 移动互联网产品设计的原则

    1、 绝不考虑Web形态,一切考虑都基于APP。

    2、 产品优先级:

    (1)有趣高于功能。产品必须有趣,必须Cool,才可能形成传播和口碑。

    (2)功能高于交互。明确的功能满足明确的需求,用户不会在意炫酷交互效果。

    (3)交互高于UI。便捷、快速的交互设计为先,围绕具体功能实现UI,而非有优质UI方案为此专门设立一个功能。

    3、 聚焦:一个APP只做一件事情,一个大而全的APP意味着全面的平庸。

    4、 永远一维化:让用户在一个维度里解决具体的问题,Twitter的Timeline就是一个好的范例。而类似Facebook、Path那样的滑出式菜单则是一个灾难,因为这使得产品拥有两个维度,加大了用户理解的困难。

    5、 保持主干清晰,枝干适度。产品的主要功能架构是产品的骨骼,它应该尽量保持简单、明了,不可以轻易变更,让用户无所适从。次要功能丰富主干,不可以喧宾夺主,尽量隐藏起来,而不要放在一级页面。

    6、 不要让用户选择。同一个页面之内,有多个入口;同一个功能,有多个实现方式;同一个界面,有多个展示方式。这对于用户来说是一种痛苦而非享受,因为他们只会因此而感觉到困惑和恐惧。用户宁可采取重复操作漫长而固定的操作路径,也不愿意使用多变的快捷方式。

    7、 隐藏技术,永远展现简单的、人性化的、符合人类直觉的界面。开发不可以为了炫技而展示功能,产品不可以为了炫耀而功能堆砌。

    8、 拒绝个性化。除了依靠设计特色而立身的APP,换肤一类的个性化设计,除了让产品经理幻觉自己做了许多工作而自我满足之外,没有任何价值。它只能证明产品经理对自己的产品不自信,因为自信的产品经理凭借默认皮肤就可以满足用户。延伸开去,一个好的产品,其功能应该满足全球用户需求,无需为地区做特别定制化。

    9、 产品一定程度上是为了满足人性中的贪嗔痴,这是用户的痛点。能把握住之后,产品经理应该超越其上,用产品帮助人们得以解脱。

    10、想清楚自己究竟要做什么,不去迎合上司,不去讨好用户,不去取悦自己。

    11、分类!分类!分类!这是产品经理在确定产品主要功能构架之后,唯一应该为用户做的事情。分类无助于降低产品使用的难度,但是可以帮助用户认知产品和周边的世界。

    12、永远围绕功能而做设计,永远不要倒过来做这件事情。

    13、一个产品的基本功能不受用户认可,做加法也无济于事。

    14、想不清楚一个功能点之前,宁可不做。

    15、千万不要让用户在产品里“管理”什么。

  • 使用nginx作图片服务器的访问权限控制

    说到访问权限控制,很多看了nginx相关文章的朋友都会自然联想到X-Accel-Redirect这个头。这个头有个缺陷,就是所有的访问都会先经过一个fastcgi来判断权限。在下载系统上,用这个方法是非常合适的,但是在访问量非常大的图片服务器,单单用这个方法会使大量无需权限判定的图片也经过一个fastcgi处理,多此一举并且无端耗费大量的资源。虽然X-Accel-Redirect是一个新的方案,但是并不代表它能很好的解决所有问题,同时也不妨碍继续思考解决问题的其它办法。

    图片服务器加上权限判断主要用于博客和相册这样的系统。在网上稍微观察,可以看到目前大部分的博客相册等系统并没有针对图片本身加入权限判断,而仅仅是将网页部分的权限控制住。这样的话很多网友将其图片加锁,实际上此图片在外部仍有办法打开。我估计此原因有其一是实现起来有性能问题,其二是诸多网站将图片放置到CDN上,而CDN并没有对此有相应的方案的缘故。走了一圈发现只有QQ空间在用带权限的图片,而它看上去是直接用fastcgi实现的,性能居然还不错,佩服一下。

    下文单纯解决性能问题,其思路是在访问图片附近放置一个控制文件,通过nginx判断决定是否要到fastcgi认证,其原理类似apache的.htaccess。有用到CDN的,因为CDN多数是squid,要加入清理squid缓存的机制。

    1、针对单一图片的控制

    如果图片按照哈希结构放置,那么用户的图片加锁后要把每一张图片都加上控制文件,如果该用户图片较多,写入时稍嫌多些。

    比如有一张图:

    /data/image/a/z/asdfqerqwegasd.jpg

    写上一个空文件:

    /data/image/a/z/asdfqerqwegasd.jpg.lock

    然后在nginx配置判断:

    location / {
    root /data/image/;
    if ( -f “${request_filename}.lock” )
    {
    #rewrite ^(.*)$ http://www.sudone.com/access.jsp?url=$1 last;
    return 403;#test
    }
    }

    这样,只要在图片旁边有一个.lock文件,就会访问到403 Forbidden;使用rewrite会将图片链接和cookie定位到后端,由后端返回判定结果X-Accel-Redirect头或者重定向到另外一个jsp去填密码。

    2、针对目录的控制

    如果图片是按照目录放置,那么配置会稍微复杂一些。

    location / {
    root /data/image/;
    if ( $request_filename ~ ^(.*)/[^/]*$ ){
    set $dir $1;
    }
    if ( -f “${dir}/lock” )
    {
    #rewrite ^(.*)$ http://www.sudone.com/access.jsp?url=$1 last;
    return 403;#test
    }
    }

    首先用正则表达式取出图片路径的目录,然后带上控制文件名判断此文件是否存在,这样只要在图片的目录中放置一个名叫lock的空文件就能控制完整个目录:

    /data/image/a/z/lock

    测试一下,效果不错,只要控制文件存在,访问立刻403;删去控制文件,访问正常。