查看Docker daemon日志

Ubuntu (old using upstart )
/var/log/upstart/docker.log

Ubuntu (new using systemd )
journalctl -u docker.service

Boot2Docker
/var/log/docker.log

Debian GNU/Linux
/var/log/daemon.log

CentOS
/var/log/daemon.log | grep docker

CoreOS
journalctl -u docker.service

Fedora
journalctl -u docker.service

Red Hat Enterprise Linux Server
/var/log/messages | grep docker

OpenSuSE
journalctl -u docker.service

OSX
~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/log/d‌​ocker.log

Windows
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5) | Sort-Object Time, as mentioned here.

Minikube搭建Kubernetes环境02_MacOS

MacOS搭建方法其实为:

minikube(vm-driver=xhyve)

1、首先要安装docker客户端及xhyve

#安装Docker客户端
curl -Lo docker.tgz https://download.docker.com/mac/static/stable/x86_64/docker-17.09.0-ce.tgz
#解压docker.tgz得到docker(我直接用了一个GUI工具解压的)
chmod +x docker
sudo mv docker/usr/local/bin/

#安装xhyve
#https://brew.sh/
brew install docker-machine-driver-xhyve

2、下载minikube及kubectl

curl -Lo minikube https://storage.googleapis.com/minikube/releases/v1.8.4/minikube-darwin-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/

curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.8.4/bin/darwin/amd64/kubectl
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

3、启动minikube

minikube version

#直连方式
minikube start --vm-driver=xhyve

#代理方式
minikube start --vm-driver=xhyve --docker-env HTTP_PROXY=http://ip:port --docker-env HTTPS_PROXY=http://ip:port

2、准备一个自己的docker虚拟机
Dockerfile

FROM node:6.12.0
EXPOSE 8080
COPY myserver.js .
CMD node myserver.js

myserver.js

var http = require('http');

var handleRequest = function(request, response) {
console.log('Received request for URL: ' + request.url);
response.writeHead(200);
response.end('Hello World!');
};

var www = http.createServer(handleRequest);

www.listen(8080);

创建镜像

#设置minikube的docker环境
eval $(minikube docker-env)

#构建image,镜像会构建到minikube开启的虚拟机中
docker build -t myserver:1.0.0 .

#在minikube开启的虚拟机中运行container
sudo docker run -itd --name=myserver -p8080:8080 myserver:1.0.0

#测试
wget ip:8080

5、用kubectl部署服务

#切换context
kubectl config use-context minikube

#进行一个部署
kubectl run hikub01 --image=myserver:1.0.0 --port=8080

#查看pods
kubectl get pods

#查看部署
kubectl get deployments

#暴露服务
kubectl expose deployment hikub01 --type=LoadBalancer

#查看服务
kubectl get services

#查看服务信息
minikube service hikub01

#可以根据输出,在浏览器或wget访问服务

6、查看管理界面

minikube dashboard

7、清理

#退出minikube的docker环境
eval $(minikube docker-env -u)

#删除服务
kubectl delete service hikub01

#删除部署
kubectl delete deployment hikub01

#停掉minikube
minikube stop

#清理全部下载的信息
minikube delete

常见问题:
1、如果一直无法创建pod,那就是无法从google下载需要的镜像,需要配置docker的代理

#查看pod状况
kubectl get pods

#测试是否可以联通
curl --proxy "" https://cloud.google.com/container-registry/

2、有两种方法来解决

2.1、用代理的方法来解决

#测试代理是否可以联通
curl --proxy "http://ip:port" https://cloud.google.com/container-registry/

#如果代理可以联通,启动minkube时,就要指定代理了
minikube start --vm-driver=xhyve --docker-env HTTP_PROXY=http://ip:port --docker-env HTTPS_PROXY=http://ip:port

2.2、用国内镜像来解决

sudo docker pull registry.aliyuncs.com/archon/pause-amd64:3.0

Minikube搭建Kubernetes环境01_Ubuntu

由于我的Ubuntu是在VirtualBox虚拟机中搭建的,所以这种搭建方法其实为:

minikube(vm-driver=none) + docker

1、首先要安装docker

apt update
apt upgrade
apt-get install docker

2、准备一个自己的docker虚拟机
Dockerfile

FROM node:6.12.0
EXPOSE 8080
COPY myserver.js .
CMD node myserver.js

myserver.js

var http = require('http');

var handleRequest = function(request, response) {
  console.log('Received request for URL: ' + request.url);
  response.writeHead(200);
  response.end('Hello World!');
};

var www = http.createServer(handleRequest);

www.listen(8080);

创建镜像

#测试myserver.js
nodejs myserver.js

#构建image
sudo docker build -t myserver:1.0.0 .

#运行container
sudo docker run -itd --name=myserver -p8080:8080 myserver:1.0.0

#测试
wget localhost:8080

3、下载minikube及kubectl

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/

curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.8.4/bin/linux/amd64/kubectl
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

4、启动minikube

minikube version
minikube --vm-driver=none start

5、用kubectl部署服务

#切换context
kubectl config use-context minikube

#进行一个部署
kubectl run hikub01 --image=myserver:1.0.0 --port=8080

#查看pods
kubectl get pods

#查看部署
kubectl get deployments

#暴露服务
kubectl expose deployment hikub01 --type=LoadBalancer

#查看服务
kubectl get services

#查看服务信息
minikube service hikub01

#可以根据输出,在浏览器或wget访问服务

6、管理界面

kubectl proxy --address='172.16.172.71'  --accept-hosts='.*' --accept-paths='.*'

浏览器访问:
http://172.16.172.71:8001/
http://172.16.172.71:8001/ui

7、清理

#删除服务
kubectl delete service hikub01

#删除部署
kubectl delete deployment hikub01

#停掉minikube 
minikube stop

#清理全部下载的信息
minikube delete

常见问题:
1、如果一直无法创建pod,那就是无法从google下载需要的镜像,需要配置docker的代理

#查看pod状况
kubectl get pods

#查看docker日志
journalctl -u docker.service

#测试是否可以联通
curl --proxy "" https://cloud.google.com/container-registry/

有两种方法来解决

1.1、用代理的方法来解决

#测试代理是否可以联通
curl --proxy "http://ip:port" https://cloud.google.com/container-registry/

#如果代理可以联通,就要配置docker守护进程使用代理了
sudo vim /etc/default/docker
#在文件中增加以下两行
http_proxy="ip:port"
https_proxy="ip:port"

#重启docker守护进程
sudo service docker restart

1.2、用国内镜像来解决

sudo docker pull registry.aliyuncs.com/archon/pause-amd64:3.0

2、未安装auplink

Couldn't run auplink before unmount: exec: "auplink": executable file not found in $PATH 
sudo apt-get install cgroup-lite
sudo apt-get install aufs-tools

呆伯特法则


呆伯特法则
By 斯科特·亚当斯

呆伯特法则:意指1990年代一个讽刺意味的观察,认为公司倾向有于把工作能力最差的员工提升到管理层,以把他们能对公司造成的损害减至最低。“呆伯特法则”是彼得法则的变化。彼得法则指在阶层式组织或企业中,人会因其工作出色,而被擢升到他往往不能胜任的高级职位,相反变成组织的障碍物(冗员)及负资产。


职场百态
By 斯科特·亚当斯

一些事没人做,
一些人没事做。
没事的人盯着做事的人,
议论做事的人做的事,
使做事的人做不成事、做不好事。

于是,
老板夸奖没事的人,
因为他看到事做不成。

于是,
老板训诫做事的人,
因为他做不成事。

一些没事的人总是没事做,
一些做事的人总有做不完的事。
一些没事的人滋事闹事,
使做事的人不得不做更多的事。

结果,
好事变坏事,
小事变大事,
简单的事变复杂的事。

然后公司开始出事,
为了解决这些事,
老板开始要求不做事的人做些事,

这些人才做一点点事,
就到处说他做了全天下最难的事,
也有人啥事也不做,
只会说这是一件不可能成功的事。

最后,
做事的人还是不得不接下这些没人做的事,
公司得救了,
不做事的人就说:
那还不是他们在开头做了许多事,
公司完蛋了,
他们也会说:
我早说过那是不可能成功的事。

最后全公司的人都不做事,
反正不做事也不会出事,
多做事反而会惹事。

阿拉伯谚语:
“你若不想做一件事,可以找到一万种借口。
你若想做一件事情,终会找到一个方法。”

好API的6个特质


好API的6个特质

API之于程序员就如同图形界面之于普通用户(end-user)。API中的『P』实际上指的是『程序员』(Programmer),而不是『程序』(Program),强调的是API是给程序员使用的这一事实。

在第13期Qt季刊,Matthias 的关于API设计的文章中提出了观点:API应该极简(minimal)且完备(complete)、语义清晰简单(have clear and simple semantics)、符合直觉(be intuitive)、易于记忆(be easy to memorize)和引导API使用者写出可读代码(lead to readable code)。

1 极简
极简的API是指每个class的public成员尽可能少,public的class也尽可能少。这样的API更易理解、记忆、调试和变更。

2 完备
完备的API是指期望有的功能都包含了。这点会和保持API极简有些冲突。如果一个成员函数放在错误的类中,那么这个函数的潜在用户就会找不到,这也是违反完备性的。

3 语义清晰简单
就像其他的设计一样,我们应该遵守最少意外原则(the principle of least surprise)。好的API应该可以让常见的事完成的更简单,并有可以完成不常见的事的可能性,但是却不会关注于那些不常见的事。解决的是具体问题;当没有需求时不要过度通用化解决方案。

4 符合直觉
就像计算机里的其他事物一样,API应该符合直觉。对于什么是符合直觉的什么不符合,不同经验和背景的人会有不同的看法。API符合直觉的测试方法:经验不很丰富的用户不用阅读API文档就能搞懂API,而且程序员不用了解API就能看明白使用API的代码。

5 易于记忆
为使API易于记忆,API的命名约定应该具有一致性和精确性。使用易于识别的模式和概念,并且避免用缩写。

6 引导API使用者写出可读代码
代码只写一次,却要多次的阅读(还有调试和修改)。写出可读性好的代码有时候要花费更多的时间,但对于产品的整个生命周期来说是节省了时间的。

最后,要记住的是,不同的用户会使用API的不同部分。尽管简单使用单个Qt类的实例应该符合直觉,但如果是要继承一个类,让用户事先看好文档是个合理的要求。

转载自coolshell

张小龙讲微信

演讲背景:
在广州举行的微信公开课PRO版活动上,腾讯公司高级执行副总裁、微信事业群总裁张小龙于上午意外现身。

在微信公开课PRO版正式开幕的前夜,一则有关微信公开课策划的谣言在朋友圈意外传播开来,给微信团队带来了不小的麻烦。

张小龙在演讲开始提到了这起意外时间,他透露昨晚有几百万人因为这一谣言解绑了银行卡,这更加说明“微信作为一个平台,有很多规则、很多平台的接口或者系统方面严格的重要性,因为有一点小小的疏漏可能就会在这个平台里面被放大很多很多次,并且这个量级是很可怕的。”

作为微信的掌门人,张小龙从微信功能的加减法、用户体验、保护原创几个方面,对外分享了有关微信的几大思考。

演讲正文:
大家早上好!我是微信的张小龙!

从昨晚的传播事件说起,为什么微信在很多的规则、平台接口或者系统方面很严格?

可能会有一些朋友觉得比较突然,我也是比较突然进来参加这样一个会议,很高兴在这里跟大家碰面。平时我很少参加会议,可能很多人都搞不懂,其实我们同事都知道,我一直有一个观点:在一个移动互联网非常发达的时代,参加会议是挺浪费时间的。所以一般我也跟我们同事说尽可能的少去参加一些会议,但我不是说大家来参加这个会议浪费时间,我觉得这个时间还是挺宝贵的。

其实会议本身不会浪费时间,但对于微信来说,我们会同时面对几亿用户,我们会觉得应该把更多的时间聚焦在用户身上。以微信的体量来说,我们直接面对的可能是上亿用户的一些事情的发生,比如说一些传播。

我们刚刚经历了一次特别大的传播事件。昨天晚上,可能在座的很多人都在朋友圈里晒出了自己的第一个好友,发了多少红包这样一个数据,这个数据其实在昨天晚上把我们给忙坏了,我们说它是一次蝴蝶效应,一个非常典型的传播事件。可能大家没有想到,只是晒一下朋友圈这样一个“微信公开课”活动,却导致了一连串事情的发生。

我们昨晚看到这样一个活动页面被人在朋友圈里晒出来,这个活动其实它的意图只是说在活动现场大家来签一下到,现场的人可以访问这样一个数据,去晒到朋友圈。昨天这个链接就被泄漏了,被更多的人去点,然后就去传,这样就带来了第一个问题:这个链接访问太高,几乎是挂掉了。几乎挂掉以后就会带来第二个问题:就有人开始造谣了,打开这个链接就会把你支付宝的钱给偷了。很多人就信了,为什么呢?因为很多人再点进去发现打不开了。这个时候又发生了再后面的一件事情:甚至有人开始解绑自己的银行卡。

那是不是真的被盗了?然后我们内部就很着急,就来处理这样一个事情。以前我们都知道有一个效应叫“蝴蝶效应”,说一只蝴蝶在一个地方煽动翅膀,可能在纽约引起一场风暴。以前我们觉得很难在身边发生的一个事情,昨天晚上大概短短一两个小时它就真的发生了,并且出乎我们做这个活动同事的预料。所以刚刚我们跟公关部门的同事在讨论说,他们是不是开完这个会就解散了,我说,不用那么快。因为蝴蝶效应本身来说是很难遇到的,但是在微信这样一个平台上面,它真的是瞬间就会发生。

我用这个作为开头,其实是想跟大家说明一个事情,微信作为一个平台,为什么我们在很多的规则,很多的平台接口或者系统方面会很严格,是因为其实有一点小小的疏漏可能就会在这个平台里面被放大很多很多次,这个量级是很可怕的。

后来我们会有很多同事介绍微信平台各个方面的事情,我今天过来其实有一个想法是觉得,包括在座的各位都是有非常多的疑问,这些疑问其实我们很难一一去解答,而且我们的平台规则也在不断的演化。很多人会说,为什么你们的平台会变来变去?你们的规则为什么总是不清晰?为什么不能明确一点给我们写出来?很抱歉,我们确实给不出一个特别明确的东西,因为我们自己也是在变化,我特别想借这个机会跟大家分享的是,我们最底层的一个思考,就是我们对待我们的产品和平台,我们的自己价值观是什么样的?

我们知道做一个事情有很多很多方法去做到,做一个产品也是这样子,但是大家会做出不同的结果,除了大家用的方法不一样以外,其实有一个最底层的东西,就是你看待这个事情,你看待你产品的价值观来决定的,你是一个什么样的价值观决定了你会做一个什么样的东西出来。我今天想跟大家分享的是,微信对于产品和我们的平台的价值观,如果大家能理解我们的价值观,那我相信你在做微信相关事情的时候,你会知道你做的事情会不会被我们拦截或者是我们鼓励的。

四个方面的价值观
在这块,我想分享四个方面的价值观:

第一点,我说出来,在座可能腾讯的同事都首先熟悉这句话,这是腾讯公司里面一直在强调的价值观,就是一切以用户价值为依归,用户价值是第一位的,这句话看起来像老生常谈或者很普通,但是我要说的是,其实这句话让一个好的产品和一个坏的产品拉开了差距,大家都明白用户很重要,但真正把用户价值第一做到产品里面去的不多,大部分只是把这个作为一句口头禅在说,但是在微信和微信的平台里面,我们把这个作为第一要事,作为最重要的一个因素。很多人是没有真正明白这一句话的,比如说给大家一个机会,说微信这里有一些特别的接口或者特别的权限给各位,都一定会很开心。

很多公司内部或者外部找我们合作,为了合作大部分都是一个交换说我有什么资源,你有什么资源,我们来交换一下,这就是合作,但是所有的合作里面都会把用户价值放在最末端,因为你首先考虑的是一个资源的交换,所以我们不会跟任何的,包括外部的、内部的去做这种资源的交换取代用户价值的情况,当我们面对一个合作的时候,我们首先会考虑的是这样一个合作对于用户是不是有价值的,是不是用户所需要的,如果我们这样作为一个最基础的考量点,我们自然就会有很多的合作,很多的决策,做出一些判断,我们就会直接打掉很多没有必要的行为,对微信和微信平台来说,我们现在更多的挑战不是在于说我们再多做多少事情,而是我们能够挡掉多少事情。

从平台的角度来说,我们更希望的是我们平台会提供无限种可能性给第三方去开发,而不是说我们一单一单的去谈很多的合作回来,甚至这个合作对用户是毫无价值的。各位用微信的应该会体现这一点,会感受到其实微信一直在很小心翼翼保护你用微信的体验,你不会在微信里面看到突然有一个什么样的群发过来,突然有一些系统上的消息过来,你觉得这是很习以为常的,但是从我们看过来,其实是需要做很多事情才能让微信里面的内容非常干净,从一个业务推广的角度来说,我们公司内部也会有非常多的业务,在微信里面群发一条就可以帮助什么,但是微信里面不会有这样的结果。

对外部来说,其实我们更希望的是平台有一些公平、公正的一些规则来对待用户,所以基本上大家都会看到,微信这里会提供出一些特权出来,例如说很多朋友会跟我们说,我能不能让自己的好友数超过5000人,我说这个没有可能,因为系统里面就没有超过5000人的号,我的观点是白名单是一个系统的瑕疵。

有一些朋友也会跟我们提需求说,能不能给我们开一个白名单,把微信红包的金额提高一下,因为我是一个土豪,我想给别人发800块的红包,开一个白名单对我们来说是举手之劳,对我们的客人来说会觉得这是与众不同的权限,可以炫耀一把,我们确实开过这样的白名单,但是前不久我们把它关闭了,因为我们发现如果开一个白名单出去,我们只会在用户里面造成一种攀比,造成一种不均衡,而这样的现象不是我们倡导的微信文化。

系统要做这个事情只有两个方法:一是没有特权的白名单;二是如果这个需求普遍,就是有很多人有很强的需求,那么系统应该有一个规则来释放这个需求,而不是通过找关系或者是白名单这样的方式来满足少数人的需求,这不在我们产品鼓励的方向中。
这是关于用户的价值,这里可以举很多例子,又比如说很多的公众号可能把拉粉作为他最大的一个诉求,但你会看到其实微信里面几乎没有地方可以提供你可以很轻易的获取粉丝。这里要考虑一点,你吸引到了非常多的粉丝,这些粉丝真的是愿意被你吸引才过来的,这个区分很重要,如果是被你用各种手段牵过来的粉丝,这是没有意义的,也违背了我们以用户第一为价值观点的考量。假设一个公众号有1000万粉丝,可是这是在用户不太知情的情况底下获得的,可能很危险。

为什么很危险?举一个例子,我们有一些号有很多粉丝,他不敢发消息,因为他一发消息就掉粉。大家可以再想象一下,假设用户对这样的号不喜欢,不断骚扰他的意见越来越大。微信里可能会出一个功能,其实对用户说以下这个号3个月没有访问了,是不是可以退订了,那就可以退订了,这样的话对更大的号反而是一个更大的损失,但是从用户层面,这是真正的用户价值。所以在微信里面我们一直说绝不允许骚扰用户,绝不允许把用户不需要的东西推给用户。

这是我今天分享的第一点,如果大家在做微信相关的项目,你会有很多的选择时,不妨也从这个角度来思考一下它是不是符合微信价值的价值观。

关于用户价值,我有一天分享过亚马逊CEO的一个文章,他的文章标题叫做《善良比聪明更重要》。我相信在座的人都是很聪明的人,因为大家会想到很多很多的方法去欺骗用户,欺骗用户是最容易做的事情,因为只需要聪明就可以了,这是不对的,因为欺骗用户虽然很容易获得流量,可以获得用户的点击,但是最终会把用户给赶跑了。所以这篇文章写的非常好,善良比聪明更重要,怎么样对用户是好的——这个会聪明会更重要一些。

我今天想分享的第二点,关于微信平台的价值观是让创造发挥价值。

什么是让创造发挥价值?围绕公众平台来说的话,公众平台从它的诞生到现在,大家一直觉得这是一个开放平台,我们利用这个平台可以获得粉丝,可以做营销,可以做推广,但是可能很少会想什么是公众平台的价值观。

公众平台到底想要变成什么?公众平台从它诞生的第一天起,公众平台的目标是要让真正有价值的东西发挥出它的价值。什么是有价值的东西?在非互联网的时代,有价值的人或者是一个团队,即使做了一个很有价值的事情,也很难去触达用户。

但是这样的情况不应该出现在目前这个时代。所以大家有一个很强的愿望,既然有非常多的用户,我们就应该提供一个平台,让所有有才能的人都能利用这个平台去触达他的用户。这个有才能的人不是说只是互联网行业的人,而应该是各行各业的人,所以我们经常用一个比方来说:要让一个盲人在一个楼里给人按摩,他也能获得一个稳定的客户群,这是信息不发达的时候,对于地域,对于传统一些物理条件限制的突破所带来的好处。

所以从公众平台秉持的目标来说,我们是希望让这个平台里面涌现出更多的有创造力的事情出来,而不是说这个平台就是一个做流量的地方、大家可以在这个地方导流量,不是这样子的。这里我们是希望所有围绕微信开发的第三方都能想一个问题,你到底是想要用这个平台来做什么,是想要给你的用户提供一些有价值的服务,还是只是想利用它做一个流量的导流?如果只是做一个流量的导流,那不是平台所愿意看到的。不管平台的规则怎么样变化,只有有创造性的东西、有价值的东西才是微信所倡导的,不管平台有什么变化,大家都不用担心我做的事情会不会被平台封杀。

我们去年花了很多时间去扶持原创。原创是一个非常好的事情,但是在过去一段时间,从BBS到博客时代,很多文章写的特别好的人在互联网上其实是很难得到价值回报,如果是这样的话,这个市场环境就会恶劣,劣币驱逐良币。所以我们花了很多时间把原创作为一个非常认真的事情去做,关于版权的保护、内容的保护,使得在过去一年里面原创得到了非常大的发展。现在一个好的作者,他的一篇文章写出来可能会吸引上万的一个赞赏的回报,当然这只是非常小的一个回报。

我们认为原创的文章更符合我们需要的价值,也更符合用户的价值,所以,为了扶持原创,对于原创文章里面的广告条,对广告分成也特别优惠,因为原创的流量不会特别大。平台里面我们发现这样一点,流量大的未必是好的,比如像昨天那种谣言传播的流量就非常大,所以真正有价值的东西未必能获得巨大的流量,所以从平台角度我们会去扶持它。

所以关于要创造几项价值,刚才说到我们原创号这里,可能在座还会有很多的人会说,我不是写文章的,我可能写不出好的文章,我其实只是想提供服务,后面我会讲到会有一个新的东西,在后面再跟大家分享一下。

第三个,我想跟大家分享微信的一个基本价值观,我们认为一个好的产品是一个用完即走的,就是用完了我就走了,可能大家不是第一次听到这个词。一个好的产品不是黏住用户,而是尽量让这个用户离开你的产品,大家同意吗?说同意的都是没有认真思考的,因为我相信每个人做的工作都是围绕一点,怎么样黏住用户,怎么样让用户尽可能待在我的产品里头,不要离开产品。

事实上我们认为任何产品都只是一个工具,对工具来说,好的工具就是应该最高效率的完成用户的目的,然后尽快的离开。如果一个用户要沉浸在里面,离不开,就像你买一辆汽车,你开完了,你到了目的地,你说汽车里面的空调特别好,所以要待在里面,那不是它应该做的事情。所以业界很羡慕微信是用户的时间杀手,但是我们要考虑的则是怎么样更高效率帮助用户完成任务,而不是让用户在微信里面永远都有处理不完的事情,所以大家会看到微信的朋友圈会限制很严,各种营销在朋友圈里面我们都会很严格的对待。

我们刚开始看朋友圈里面都是一些朋友的动态,可是慢慢发现朋友圈里面有很多心灵鸡汤,被各种各样地诱导上来发了一些内容,如果这样的信息多了其实最终的结果未必好,最终的结果可能是用户觉得朋友圈里面的信息太水了、太杂了,慢慢他再看朋友圈的意愿越来越低,这会变得非常可怕。因为朋友圈的进入次数特别多,平均一个用户每天大概有30、40次进入朋友圈,这是一个反复的过程,我们希望每次进来用户都不是很快的刷屏,而是看到的都是他愿意看到的内容。

对于微信里面其他的功能其实也是如此。我们希望用户在用微信的时候,最高效率把必须要做的在微信里面做完,把时间留出来去做很多别的事情。在座的各位,基于微信来做一些项目的时候不妨也多从这个角度思考一下,你做的事情是在帮助用户节约他的时间,提高他的效率,还是说只是想让他在这里不断地消磨时间。如果你想要让他消磨时间,你可以写一篇文章再写一篇文章,用户永远都出不去,但是用户可能下一次就不敢再进来了。

在这一方面做的好的例子,我觉得是谷歌(微博),谷歌在很多年前就提出来让用户搜完就走。在这点上,我们会希望微信里面的信息尽可能的少,少到只能满足你最基本的需求,这样你就明白微信为什么会有这样一些规则。

举个例子来说,如果是很早期的微信用户就会发现,微信其实一直不鼓励你加太多好友,所有的加好友都要经过你的验证通过才会加进来,其实如果微信作为一个产品要让好友变得很多的话很简单,只要把QQ好友、手机通讯录导进来默认变成你的好友就好了。但是我们一直非常谨慎,一直希望用户的好友不要太多,所以每次加好友都提示用户是不是确定要添加他,从来没有说批量导入过,我们业界经常说少即是多,但其实这也会变成一句口头禅,因为没有人真正明白,更少的信息意味着用户可以更高效的处理,意味着他可以腾出更多的时间,意味着这个产品的未来会变得更大。

大家也会看到,我们对于下发消息也非常严格,很多人不理解为什么一天只能发一次,为什么不是一天两次,每次还要限定那么几条。从微信的产品角度来看,这是一个很基本的体验性的东西,但是在外界看过来,这是难以理解的,包括特别多的媒体人会说,一天一次真的是不太够,我们就希望发更多的内容给用户。那是因为更多的人都是从自己的角度说我发的越多越好,但是从来没有想过发得多是不是意味着用户更愿意看。所以大家也会看到,为什么我们会对一些诱导分享有拦截,因为所谓诱导分享就是你分享出去了、你获得了好处,但你的朋友并没有获得好处,你的朋友要忍受你发来的一个东西,这也是我们的一个基本原则。

第四个想要跟大家分享的观点是,我们应该尽可能让商业化存在于无形之中。
为什么要让商业化于无形?我们发现很多人比我们更着急微信的商业化,也不知道为什么。但是我们确实认为一个好的产品它的商业化和用户的价值、用户的体验并不矛盾。好的商业化应该是不骚扰用户,并且是只触达他需要触达的那一部分用户。可能有一些人不玩游戏,但是并不妨碍另一部分人去玩游戏,玩游戏从系统来说是一个很好的商业化的过程。同样大家也会看到微信朋友圈的广告,我们也很高兴的看到朋友圈广告经过了一年的时间,很多的用户还在期待能看到一个朋友圈广告,因为平常他很少看得到,当用户有这样的心理,我们会觉得这个事情是对的,因为用户不反感它,甚至有时候会比较期待。
我昨天还看到一个视频广告,觉得挺好的,但是当时我在底下评论了一句,有点开玩笑说“货不对版”,因为朋友圈广告的内容和真正的尝试有点不太接得上,但这是一个广告创意的事情。所以从微信来说,我们希望微信能做很好的商业化,但是它不是基于骚扰的、基于流量变现的商业化。所以你现在看不到的启动页弹一个广告出来,因为我们觉得这是一个比较低级的商业化的手段。

而关于这一点,待会会有一个卡券系统的一个广告。在去年的时候,我们发了很多很多的优惠券下去,然后我们发现优惠券实际被使用率非常低,可能有超过90%都废掉了、没有被使用出来,这和现实里面其实是一样的。现实里面可能我们也会拿到很多优惠券,但是大部分都不会去用它,我们会认为这不是一种很好的解决方案。

可能有极少数的用户已经在微信里面用到了我们现在一种新的优惠券,这种优惠券来自于一个小故事,有一个朋友去丽江玩,他住了一个客栈,然后客栈的老板就跟他说,如果你介绍一个朋友再来住这个客栈,你的朋友会获得一个优惠,并且你自己也会获得一个小红包,这是一个很明显的基于社交关系来做的一个传递的工作,它特别生动,特别有说服力。

这个故事让我们很有启发,我们会尝试一种基于社交关系的优惠券,我们看之前很多做优惠券的都很难做出来,当一个优惠券本身太容易获得就没有价值了,因为你随时可以拿到。但是对微信来说,这个优惠券是一种基于朋友背书的优惠券,也就是说只有你的朋友去那里消费才能拿到那个券,他分享出来,你可以使用,这和刚才那个故事是完全对应的。我们把这样一个新的系统上线以后,发现核销率迅速就上去了,而商家也很高兴,因为这个真正帮他带来了新的用户。朋友也很高兴,因为他的优惠券没有被浪费掉,这是一个对几方都共赢的一个事情。

这里的重点其实是,它也是一个商业化的产品,但是它在对用户非常有价值的基础上来做,不是作为一个广告塞到这里的,是你的好友获得一个券分享给你的,这是很不一样的。

最后跟大家分享一下我们正在构思的一些东西。刚刚公众平台说到原创,其实很多人会觉得有一点郁闷,因为公众平台现在看起来确实更像是一个媒体化的平台,是对于自媒体、一些写作的或者一些传播内容的人特别有效。但是我们的公众平台,我们出发点不是仅仅针对媒体的,我自己也是很多年的程序员,我们觉得2016年我们应该做一些事情,面向开发的团体。

这个需求来自于哪里呢?我们自己也观察到发现越来越多的创业公司它做的第一个产品就是基于微信的公众号来做的,而不是去开发一个APP,因为一个APP的推广成本实在是太高了。相比来说,公众号能够实现大致同样的事情,并且也能获得它的用户,并且用户可以在微信里面获得的成本或者传播的速度会更好一些。

但是我们的本意并不是要做成一个只是传播内容的平台,我们一直说我们是要做一个提供服务的平台,所以后面我们甚至专门拆分出一个服务号出来,但是服务号还是没有达到我们的要求,说服务号可以在里面提供服务为主,所有的服务号还是基于一个诉求,这不是我们想看到的。现在我们将开发一个新的形态,叫做应用号。

我们现在每换一部手机,手机里面的APP就要重新装,我相信大部分用户也是这样的。现在APP重复的安装率已经越来越低,但是有的时候你要找一个功能,你还得重新再安装一下这个APP。现在很多用户会在微信钱包里面买火车票,因为对一些不是很高频度的需求来说不需要再按一个安装,可是从公众号里面去装一个功能其实也不容易,我们希望存在一种新的公众号形态,这种形态下面用户关注了一个公众号,就像安装了一个APP一样。他要找这个公众号的时候就像找一个APP,在平时这个号不会向用户发东西的,所以APP就会很安静的存在那里,等用户需要的时候找到它就好了,这样的话我们可以尝试做到让更多的APP有一种更轻量的形态,但是又更好使用的一种形态来存在,这是我们在探讨的一种新的公众号形态,叫应用号,这里只是提前剧透一点点东西。

今天真的非常感谢大家能在这个现场参加这个会议,也非常抱歉,确实我个人不太喜欢参加会,我认为将来的会议是五年以后大家戴一个眼镜,坐在家里看跟在现场看是一样的效果,我很期待那一天。非常感谢大家,我今天的分享就到这里。

Scrum及Kanban敏捷开发方法最精简版本


Scrum及Kanban敏捷开发方法最精简版本
NEOHOPE

声明
无论是Scrum还是Kanban,都只是指导大家进行开发的一种方法论。每个团队,都应该按自己的实际情况,对这些方法进行调整,最终达到适合自己的目的。这里描述的开发方法,其实是综合了Scrum和Kanban,并针对我们的SOP进行了删减,最后得到的版本。

人员职责
产品经理:管理产品需求,解答全部业务问题。告诉团队,我们要做什么。管理计划任务以及计划任务的优先级。按需将优先级最高的任务,移动到“待选任务”。

Scrum Master:开发组织者,提高团队效率,进行培训。将产品经理的每个任务,进行再次拆分,拆分为2人天以内的任务。时刻关注产品开发遇到的障碍,并积极推动去解决这些问题。

团队成员:根据Scrum Master拆解后的任务,自行领取任务,并反馈完成结果。遇到业务问题,咨询产品经理。推进有困难,咨询Scrum Master。

开发流程
1. 产品经理将场景(Story)讲解给开发人员听,资深开发人员协助产品经理进行初步的任务分解,并由产品经理将初步分解后的任务,添加到“计划任务”列表中
2. 产品经理将需要尽早完成的任务,从“计划任务”,添加到“待选任务”,从而控制任务的先后顺序
3. 资深开发人员,将“待选任务”进行再次分解,分解为一个人两个工作日可以完成的子任务,并评估完成日期
4. 团队成员,可以自由选择,完成哪个已经分解后的任务。如果在“待选任务”中,则将整个任务移动到“正在进行”,并标记自己的名字,写上预计完成时间。如果在“正在进行”中,则将对应的子任务,标记自己的名字,写上完成时间
5. 团队成员,完成子任务后,点击勾选按钮
6. 每个任务的最后一个子任务完成后,改开发人员将整个任务,从“正在进行”,移动到“开发完毕”
7. 产品经理协调测试人员,对改任务进行验收,验收通过后,任务完成

特殊规定
1. 团队规模,不应该超过9人。大的项目,应该首先进行拆解。
2. 每个子任务,至多对应一个人员,最多用两个工作日可以完成。而且,任务分解以前,不可以认领任务!
3. 产品经理,不允许调整“正在进行”中的任务
4. 其他人员,不允许调整“计划任务”中的任务
5. 每个人,只允许有一个任务在“正在进行”中
6. 每天,在固定时间,开15分钟的站立会议,沟通任务内容,但不允许讨论技术细节
7. 每周,在固定时间,由开发人员,把完成的内容,演示给整个Team
8. 每周,产品经理,将项目进度,汇报给研发总监
9. 需求变更后,重新走开发流程

关于会议
Scrum每日例会:每天,在同一时间举行,站立开会,不允许超过15分钟。作用为,沟通开发进行,沟通遇到的障碍,进行进度协调,帮助团队进行自组织。

Sprint每周进度例会:每周,在同一时间,进行评审会议,不允许超过30分钟。作用为,演示本周的结果,总结遇到的障碍,沟通产品的需求变化。

其他会议,和研发SOP会议一致。

善良比聪明更难,选择比天赋更重要


善良比聪明更难,选择比天赋更重要
贝索斯

善良比聪明更难

  在我还是一个孩子的时候,我的夏天总是在德州祖父母的农场中度过。我帮忙修理风车,为牛接种疫苗,也做其它家务。每天下午,我们都会看肥皂剧,尤其是《我们的岁月》。我的祖父母参加了一个房车俱乐部,那是一群驾驶Airstream拖挂型房车的人们,他们结伴遍游美国和加拿大。每隔几个夏天,我也会加入他们。我们把房车挂在祖父的小汽车后面,然后加入300余名Airstream探险者们组成的浩荡队伍。

  我爱我的祖父母,我崇敬他们,也真心期盼这些旅程。那是一次我大概十岁时的旅行,我照例坐在后座的长椅上,祖父开着车,祖母坐在他旁边,吸着烟。我讨厌烟味。

  在那样的年纪,我会找任何借口作些估测或者小算术。我会计算油耗还有杂货花销等鸡毛蒜皮的小事。我听过一个有关吸烟的广告。我记不得细节了,但是广告大意是说,每吸一口香烟会减少几分钟的寿命,大概是两分钟。无论如何,我决定为祖母做个算术。我估测了祖母每天要吸几支香烟,每支香烟要吸几口等等,然后心满意足地得出了一个合理的数字。接着,我捅了捅坐在前面的祖母的头,又拍了拍她的肩膀,然后骄傲地宣称,“每吸两分钟的烟,你就少活九年!”

  我清晰地记得接下来发生了什么,而那是我意料之外的。我本期待着小聪明和算术技巧能赢得掌声,但那并没有发生。相反,我的祖母哭泣起来。我的祖父之前一直在默默开车,把车停在了路边,走下车来,打开了我的车门,等着我跟他下车。我惹麻烦了吗?我的祖父是一个智慧而安静的人。他从来没有对我说过严厉的话,难道这会是第一次?还是他会让我回到车上跟祖母道歉?我以前从未遇到过这种状况,因而也无从知晓会有什么后果发生。我们在房车旁停下来。祖父注视着我,沉默片刻,然后轻轻地、平静地说:“杰夫,有一天你会明白,善良比聪明更难。”

选择比天赋更重要

  今天我想对你们说的是,天赋和选择不同。聪明是一种天赋,而善良是一种选择。天赋得来很容易——毕竟它们与生俱来。而选择则颇为不易。如果一不小心,你可能被天赋所诱惑,这可能会损害到你做出的选择。

  在座各位都拥有许多天赋。我确信你们的天赋之一就是拥有精明能干的头脑。之所以如此确信,是因为入学竞争十分激烈,如果你们不能表现出聪明智慧,便没有资格进入这所学校。

  你们的聪明才智必定会派上用场,因为你们将在一片充满奇迹的土地上行进。我们人类,尽管跬步前行,却终将令自己大吃一惊。我们能够想方设法制造清洁能源,也能够一个原子一个原子地组装微型机械,使之穿过细胞壁,然后修复细胞。这个月,有一个异常而不可避免的事情发生了——人类终于合成了生命。在未来几年,我们不仅会合成生命,还会按说明书驱动它们。我相信你们甚至会看到我们理解人类的大脑,儒勒·凡尔纳,马克·吐温,伽利略,牛顿——所有那些充满好奇之心的人都希望能够活到现在。作为文明人,我们会拥有如此之多的天赋,就像是坐在我面前的你们,每一个生命个体都拥有许多独特的天赋。

  你们要如何运用这些天赋呢?你们会为自己的天赋感到骄傲,还是会为自己的选择感到骄傲?

追随自己内心的热情!

  16年前,我萌生了创办亚马逊的想法。彼时我面对的现实是互联网使用量以每年2300%的速度增长,我从未看到或听说过任何增长如此快速的东西。创建涵盖几百万种书籍的网上书店的想法令我兴奋异常,因为这个东西在物理世界里根本无法存在。那时我刚刚30岁,结婚才一年。

  我告诉我的妻子MacKenzie我想辞去工作,然后去做这件疯狂的事情,很可能会失败,因为大部分创业公司都是如此,而且我不确定那之后会发生什么。MacKenzie告诉我,我应该放手一搏。在我还是一个男孩儿的时候,我是车库发明家。我曾用水泥填充的轮胎、雨伞和锡箔制作的不太好用的太阳灶和用来对付兄弟姐妹的烤盘报警器制作了一个自动关门器。我一直想做一个发明家,而她想让我追随内心的热情。

我当时在纽约一家金融公司工作,同事是一群非常聪明的人,我的老板也很有智慧,我很羡慕他。我告诉我的老板我想开办一家在网上卖书的公司。他带我在中央公园漫步良久,认真地听我讲完,最后说:“听起来真是一个很好的主意,但是对那些目前没有谋到一份好工作的人来说,这个主意会更好。”

这一逻辑对我而言颇有道理,他说服我在最终作出决定之前再考虑48小时。那样想来,这个决定确实很艰难,但是最终,我决定拼一次。我认为自己不会为尝试过后的失败而遗憾,倒是有所决定但完全不付诸行动会一直煎熬着我。在深思熟虑之后,我选择了那条不安全的道路,去追随我内心的热情。我为那个决定感到骄傲。

明天,非常现实地说,你们从零塑造自己人生的时代即将开启。

你们会如何运用自己的天赋?你们又会作出怎样的抉择?

你们是被惯性所引导,还是追随自己内心的热情?

你们会墨守陈规,还是勇于创新?

你们会选择安逸的生活,还是选择一个奉献与冒险的人生?

你们会屈从于批评,还是会坚守信念?

你们会掩饰错误,还是会坦诚道歉?

你们会因害怕拒绝而掩饰内心,还是会在面对爱情时勇往直前?

你们想要波澜不惊,还是想要搏击风浪?

你们会在严峻的现实之下选择放弃,还是会义无反顾地前行?

你们要做愤世嫉俗者,还是踏实的建设者?

你们要不计一切代价地展示聪明,还是选择善良?

我要做一个预测:在你们80岁时某个追忆往昔的时刻,只有你一个人静静对内心诉说着你的人生故事,其中最为充实、最有意义的那段讲述,会被你们作出的一系列决定所填满。最后,是选择塑造了我们的人生。为你自己塑造一个伟大的人生故事。

谢谢,祝你们好运!