易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
关于产品的设计

关于产品的设计

一个好的产品,必然是有灵魂的.
一个好的产品,即使是没有内容,也是能够被人喜欢的.
一个好的产品,就算没有内容,它本身也是内容

上面是我的乱谈,当然第一句话,我想,绝对没有说错:好的产品,是灌注着灵魂的.

下面的内容来自于:http://www.huxiu.com/article/9778/1.html
我这里只是摘要,如果你要看详细的,还是去看原文吧:

关于人性指导产品的一些看法——从神经系统到肉体反应
下面我再简单介绍下我对互联网产品设计的一些看法。
记 得以前看过有人介绍过2012年诺贝尔生物学奖,G蛋白偶联受体啥的。大概的意思是,人体细胞的表面到内核串联着一种蛋白胶G蛋白偶联受体。G蛋白偶联受 体可以接受人体分泌的类似荷尔蒙、肾上腺素等物质,产生反应后使得细胞收缩,产生肉体反应,然后再告知神经系统。神经系统通过之前的经验和环境的认知,来 做肉体反应做出喜怒哀乐的判断。
这个道理告诉我们,通过五官接触的声音、味道、图片、动画等,经过肉体的反应,远快于直接进入头脑的。前者相当于条件反射,这就让我们很好的理解为什么人的感性会大于理性了。而人的体验本质上,只有三个需求:性的需求,温饱的需求和安全的需求。
这个思想很有利于我们对体验设计的理解。当我们确定了产品满足的目标需求后,如何做出最符合人体条件反射的体验设计。比如:
一个按钮:如果只有一个按钮,人的条件反射就是要按它。即使是婴儿,也会非常自然的去按一个凸起或者凹进的按钮。
显著的反馈:每一次被理解的反馈(可用动画和声音模拟唤起用户记忆从而更加快速的理解)都是对条件发射的认可和强化。对比小孩,按钮以后有反馈,就会开心的笑。
节奏感:人体对节奏感会有本能的愉悦感。柔和的女声和沉着的男声,象征着性感。闪烁的特效,会让人引起安全警觉,从而努力去消除或者感受紧张。
安全感需求里面,衍生出一个需求:解决问题的需求。产品必须让用户第一时间理解他要解决的问题,并且用最直白的方法,告诉用户通过他自己的努力解决了这个问题。我们日常工作中的成就感,本质上是因为自己释放了对生存恐惧的压力而产生的。
下面讨论一个最复杂的问题:可选择过程中满足的解决问题,即安全需求。我们有很多产品,由于功能的需要不得不让用户有很多选择的操作。在这种情况下,就必须要引入教学机制,或者在刚需及无竞争情况下的让用户自学。
总结下来,要做一个好的产品思路,可以分下面三个步骤:
1. 解决什么需求,最好能一句话说清楚;
2. 解决需求的路径设计,最好能单线完成,过程中有反馈设计;
3. 选择指导:通过特效、亮点提醒和选择操作中的反馈,来完成用户对选择的理解。
思路明确以后,才是做产品的运营性功能设计,比如积分,信用体系等。
------EOF------
所以,在设计产品的时候,其实还是有很多地方需要想想的...
redis:Error: read error on connection

redis:Error: read error on connection

在使用redis的时候,出现了Error: read error on connection.
找了一下相关资料,在官方也有很多人提出这个问题
phpredis的作者的意思是,是因为default_socket_timeout的问题,将它设为0就好了.
但很多人都说设为0,在60秒后还是会挂 ,只有设为-1才OK
于是,在命令行下subscribe的时候,先init_set('default_socket_timeout',-1);
问题解决 .

如何禁用flash

如何禁用flash

本来是不想禁用的,但发现机器的风扇就一直没停过,CPU消耗的最大的就是firefox下的flash插件 .没辙了.我还是禁用它吧.
嗯flashblock即可,但其实我是想从软件的底层就直接禁用它.可惜没有好的办法....只能用插件了.网上类似的教程还有很多,比如这个:

内容来源:http://orzl.com/weblog/disable-the-flash-on-mac

在Mac下禁用Flash的原因众所周知,这次实在是忍无可忍了。

  1. Firefox禁用Flash
    可以使用插件如 - Flashblock:
    下载地址: https://addons.mozilla.org/en-US/firefox/addon/flashblock/
    安装之后网页所有的Flash位置都会显示一个"Play"的占位图标,只有点击图标才会播放对应的资源。
    另:除了Flash以外,它也可以阻止Silverlight,且支持域名白名单。
    Flashblock的官方网站: http://flashblock.mozdev.org/ 。
  2. Chrome禁用Flash:
    方法一: 使用和Flashblock一样的插件:https://chrome.google.com/webstore/detail/flashblock/gofhjkjmkpinhpoiabj...
    方法二:还有一种办法是针对Dev版本启用自带的插件:"Click to Play"。
    "Preferences" - "Privacy" - "Content settings" - "Plugin-in" - "Click to Play"。
    支持域名白名单。
  3. Safari禁用Flash:
    方法一:修改浏览器代理:
    修改浏览器代理为iPad,访问支持HTML5的网站如优酷土豆等会切换到HTML5版本。
    Step 1: 在菜单栏中显示"Develop"选项: "Preferences" - "Advanced" - "Show Develop menu in menu bar"
    Step 2: 在菜单中选择"Develop"选项,进入"User Agent",选择:“Sarafi iOS 5.1 - iPad” 。

    方法二:使用Safari插件:ClickToPlugin & ClickToFlash Safari extensions
    http://hoyois.github.com/safariextensions/clicktoplugin/

    推荐的这个插件分两个版本,一种仅针对Flash,另外一种支持屏蔽的插件包括:Flash、Java、Silverlight、Quicktime、Shockwave等。

    且均支持白名单。

于是乎,世界清静了.嗯,我没有那么急的需求要看flash....而且开了之后,耗电量也大增,何必呢.

heredoc 的新用法?

heredoc 的新用法?

事情的起因是这样的,神仙在群里贴了段代码:
.....
$lang = new Lang();
$code = <<<'EOF'
....
这是其中的两句,于是我对 <<<EOF上为什么加单引号感了兴趣,理论上,这是错误的用法。
神仙说,这是5.3的新用法,防止 定界符 中的变量被解析。

于是看了下手册,果然,<<<有了新的说法
<<<后面的字符串

  1. 如果是双引号:在PHP 5.3.0中还在Heredoc结构中用双引号来声明标志符【功能与原来一致】
  2. 如果是单引号:其实已经换了新名字,nowdoc,

    就象heredoc结构类似于双引号字符串,Nowdoc结构是类似于单引号字符串的。Nowdoc结构很象heredoc结构,但是 nowdoc不进行解析操作 。 这种结构很适合用在不需要进行转义的PHP代码和其它大段文本。与SGML的 <![CDATA[ ]]> 结构是用来声明大段的不用解析的文本类似,nowdoc结构也有相同的特征。

    一个nowdoc结构也用和heredocs结构一样的标记 <<<, 但是跟在后面的标志符要用 单引号括起来,就像<<<'EOT'这样。heredocs结构的所有规则也同样适用于nowdoc结 构,尤其是结束标志符的规则。
    不象 heredocs结构,nowdocs结构可以用在任意的静态数据环境中,最典型的示例是用来初始化类的属性或常量。

官方解释:http://www.php.net/manual/zh/language.types.string.php

如果你觉得翻译的不好,还是看英文版 吧:http://www.php.net/manual/en/language.types.string.php

被QQ exmail的文档坑了下

被QQ exmail的文档坑了下

尝试用qq的企业邮箱发一些邮件的时候,发现被文档坑了一小把(不是QQ的错,是我的错)

文档中说smtp发送的时候,得用SSL方式,同时端口为465或者587,于是我在phpmailer里设定了port = 465,于是直接发送。发现报错。老是说邮件地址有问题

1、检查phpmailer,发现。如果设置port为465,这时候其实是要设定SMTPSecure=ssl的
当设置了SMTPSecure='ssl'后,发送成功

2、其实,也可以不用SSL的,只要仍然使用 25端口发送就OK了,并非一定得用SSL来发送。。。

所以,通过QQ企业邮箱的smtp发送邮件就有两个方法 ,ssl和标准的smtp。
Over

杂记

杂记

心里有话想说,心里的痛你懂。

其实我是想表达第一句话的含义,有些话不吐不快

1、带小朋友看电影,在影院里工作人员对那些小孩说请按号入座。于是有个小朋友就说了,是别人抢了我们的座位,我们没有办法啊。说着说着,突然就站起来,大叫,就是TMD那些婊子养的,坐了我们的座位。一时间举座皆惊,这小朋友9~10岁左右,居然说出这些话。。。如今 的家长和老师是怎么教育孩子的?

2、小朋友吃着爆米花,看着电影。老婆说,你爽的很嘛 。小朋友得意的说,是啊,吃爆米花看电影,就是爽

3、年夜饭就是年夜饭

4、职业道德真的很重要,回顾自己工作这么多年,虽然离职的时候代码里会有BUG,但好歹没有窃取过公司信息,也没有散布过公司的信息。。这点我很欣慰,虽然我从来没有什么成绩。

Parallels Desktop 8 pd8 破解 无限试用

Parallels Desktop 8 pd8 破解 无限试用

说实话,在MAC上面最好的虚拟机,绝对是parallels desktop,没有之一。
试用过几款虚拟机,但效果真的不能让人满意,vmware/vbox都响应没有pd快。而且更重要的是vmware的无缝集成的性能远远不如PD。。。

PD6,我买了,升到了PD7,但在PD7下面retina的分辨率无法调整。
所以想升级到PD8,但因为win用的少,所以现在还在忍着。如果你不想忍,这里有个办法:

说实话,macx.cn上代理的PD只有180左右,如果你真的需要,买一个吧。。。当然,如果你觉得你的时间很多,无所谓每个月折腾这么一次,也完全可以象上面那样一次次的折腾的。

phpstorm 中对filetemplate的优化

phpstorm 中对filetemplate的优化

在使用phpstorm创建文件的时候,如果是在filetemplate中出现过的。都会调用默认的模版,这时候,可以在其中调整自己的信息,还是比较方便的,比如我现在就是这样设置的:

<?php
/**
* ${FILE_NAME}
*
* @category
* @package
* @author gouki <gouki.xiao@gmail.com>
* @version $Id$
* @created ${DATE} ${TIME}
*/
Yii::import("application.controllers.${DIR_NAME}.*");
class ${NAME} extends Controller{
public function actions(){
return array(
'index'=>'IndexAction',
);
}
}

嗯,上面的这是标准的代码,不过,如果有命名空间的话。那怎么办呢?因为在官方的模版里,并没有提到这个。。它只提到了这些:

This is a built-in template. It contains a code fragment that can be included into file templates (Templates tab) with the help of the #parse directive. The template is editable. Along with the static text, code and comments, you can also use the predefined variables that will be then expanded like macros into the corresponding values.
Predefined variables will take the following values:
${FILE_NAME}

current file name
${USER}

current user system login name
${DATE}

current system date
${TIME}

current system time
${YEAR}

current year
${MONTH}

current month
${DAY}

current day of the month
${HOUR}

current hour
${MINUTE}

current minute
${PRODUCT_NAME}

current IDE name

怎么办呢?于是我就想啊想,最后变成了这样:

<?php
/**
*
*
* PHP version 5.3.x
*
* @category
* @package
* @author gouki <gouki.xiao@gmail.com>
*/
#if (${NAMESPACE})
namespace ${NAMESPACE};
#end

/**
* ${FILE_NAME}
*
* @category
* @package
* @author gouki <gouki.xiao@gmail.com>
* @version $Id$
* @created ${DATE} ${TIME}
*/
class ${NAME} {

}

如果定义了namespace,那么就在上面写上namespace ${NAMESPACE};
世界清静了好多。关键代码也少写了很多。
当然,其实很多人都是在程序完成后,统一用脚本加上这些注释的。这样倒也是不错。
只是现在这样的方式,在生成API文档的时候会比较方便一点。黑黑

yii with的排序

yii with的排序

Yii在自己的AR中实现了relations,于是我们可以利用relations实现一些left join或者其他join能做的事情,常见的大家都懂,什么 belongs_to,has_one,has_many,many_to_many之类的
但用的最多的,一般都是has_one,has_many,毕竟查关联数据这个最方便了。

于是我们就会Table::model()->with('a','b')->findAll($cdbcriteria);
这个时候,如果需要用到a或b的排序,就有点痛苦,直接在$cdbcriteria中写的话,往往会报字段不存在,因此可以尝试这样
1、直接在relations中,在写成a时,直接加入'order'=>'id DESC'之类的内容
2、在with()中写: with(array('a'=>array('order'=>'id DESC'),'b'))

这样是不是就很方便了呢?
当然上面的代码是通过:

public function with()
{
if(func_num_args()>0)
{
$with=func_get_args();
if(is_array($with[0])) // the parameter is given as an array
$with=$with[0];
if(!empty($with))
$this->getDbCriteria()->mergeWith(array('with'=>$with));
}
return $this;
}

看了这段代码就基本上了解用法了,手册里也说了:
Specifies which related objects should be eagerly loaded. This method takes variable number of parameters. Each parameter specifies the name of a relation or child-relation. For example,

// find all posts together with their author and comments
Post::model()->with('author','comments')->findAll();
// find all posts together with their author and the author's profile
Post::model()->with('author','author.profile')->findAll();
The relations should be declared in relations().

By default, the options specified in relations() will be used to do relational query. In order to customize the options on the fly, we should pass an array parameter to the with() method. The array keys are relation names, and the array values are the corresponding query options. For example,
Post::model()->with(array(
'author'=>array('select'=>'id, name'),
'comments'=>array('condition'=>'approved=1', 'order'=>'create_time'),
))->findAll();
所以,有时候看看手册还是很重要的。

关于github的DNS被污染的临时解决方法

关于github的DNS被污染的临时解决方法

这两天校长发标了,所以github就不能看了。
好吧,我只是在上面开了两个小项目:yii_extensions和yii_rest_test。
我自己的项目没有人访问没关系,象astaxie就要哭了。
当然,其实我也在哭,我用的phpredis就无法下载了。所幸,大家都是很牛叉的,比如下面这几行:

207.97.227.239 github.com
65.74.177.129 www.github.com
207.97.227.252 nodeload.github.com
207.97.227.243 raw.github.com
204.232.175.78 documentcloud.github.com
204.232.175.78 pages.github.com

至于是什么 意思,怎么改,我就不说了。如果你连这也不会,那也不用多说了。

从python官网,到sf.net到code.google.com再到github.com,我没有为他做过什么,当然我也没有资格说什么,我这样的小人物只能忍忍了。
我没能力呼吁,对了,我呼吁了也没啥用,你嚼得呢?