存档

作者存档

[转]创业公司CEO每天应该做的13件事

2011年10月5日 wenhui 没有评论

来源:http://www.36kr.com/p/20382.html

Mr. Jamie说,一般人大概很难想像创业公司 CEO 的工作有多难,你的公司在烧钱,说不定只剩下 6 个月的粮草,你怎么可能不担心?偏偏在团队面前你又必须装作若无其事,一切都在你的掌控之中。

Jason Goldberg 整理了一个列表,列出创业公司CEO每天应该做的13件事,以下是36氪编译版本:

  1. 记住你的“一件事”:你的创业公司在一段时间内只能把一件事做好,明确你的“一件事”,写在墙上,每天重复出现在自己眼中,将“一件事”作为公司例会最高级别的事情,不要让任何事情让你和你的团队分心。
  2. 记住,只有当你的团队优秀时,你才一起优秀:花时间培养你的团队,招聘那些在他们工作上比你曾经做得更棒的人,激励他们,让他们完成他们从来没想过他们能做到的事情,在引导他们去做“一件事”的同时给他们自由,像对待家人那样对待你的同事,创业不容易,让你的团队愿意成为公司一员是能够成功的重要因素,创业公司并不只是一个工作的地方,更是一种生活的方式,作为CEO,你的工作不是把每个人的工作都做了,你的工作是帮助他们把工作做得更好,确保定期给你的主管们反馈,告诉他们你的期望,需要他们改进哪些地方。
  3. 设定风格:每个人 – 你的同事,客户,合作伙伴,投资者,你的Twitter和Facebook关注者 – 都会从你身上得到暗示。从你公司的增值速度,数据,创新,客户服务直到公司文化都会反映出你作为一个CEO的职能,所以,不要做一个粗鲁的混蛋,付出行动,如果你希望人们想到你公司时是按照你想让他们想的那样,你需要付出行动并从个人做起。如果你自己无精打采,你的公司也会,如果你忘记微笑,你的公司也会,如果你缺乏耐心,你的公司也会,如果你不说请和谢谢,你的公司也会,公司高于每个人,但公司是由每个人和每个人的工作风格反映出来的,而你是领导者。
  4. 花至少75%的个人时间在你的产品上:只有当你的产品优秀的时候,你的公司才能优秀,亲自参与管理功能和用户利益,我的观点是CEO必须是首席产品官,作为CEO你必须为屏幕上每一个像素负责,我知道这听起来有点过了但是你的产品是你们所有努力工作对用户的输出,所以它的每个功能都应该反映出你们的目标和目的。
  5. 审视数字:我不是在谈论预算和现金流,而是一些关键指标,每周发一封邮件给你的团队,提炼出那些影响公司业务的关键数据,亲自写这封邮件,写邮件会强迫你自己去挖掘和分析你的数据,真正拥有那些数据,让你的工作能够确保公司的每个人都能专注在那些能给公司带来业务的数字上。
  6. 锻炼:我实在忍不住要强调这一点,让自己每周去至少4次健身房,最好是5-6次,锻炼能给你能力和耐心去解决复杂的问题,作为CEO对身体是很大的挑战,让健身房作为一个使自己头脑清醒和保持快活的一种方式,如果你还没有这么做,我保证去了之后你会震惊的,当你有规律的出去锻炼你会发现生活是多么的容易!离开你的键盘,去健身!
  7. 要求反馈:你猜怎样?你并不像你认为的那样聪明,你会犯错误,去问你的雇员,你的客户,你的合作伙伴等,确保你的管理团队中有一个人敢直言不讳,确保你有一个董事会之外的成员或朋友能够给在公司发展上给你提供建议(例如在融资上,董事会管理上)。
  8. 离开办公室:人们太容易生活躲在键盘后面,生活在收件箱里,离开办公室,去和你真正的客户,合作伙伴,供应商,博主们讨论
  9. 写博客,写微博,阅读,参与CEO论坛:写类似于这篇的文章,分享你学到的经验教训,和你工作的技巧等,不要担心没人看,从网络中获得反馈,阅读Hacker News,看其他创业者和科技极客们在分享什么,利用投资者的网络从其他CEO那里获得建议。
  10. 管理现金:现金是你的生命线,你必须一直清楚你还剩多少现金,能够你维持你多久,什么样的决定会影响你的现金状况,不要等到需要钱的时候才去融资。
  11. 像投资者一样去做:在每周结束的时候,问问你自己下面的问题:我们这周所做的提升了我们的价值么?过去的一周你对时间的投资回报率是多少?如果你连续2周或者一个月内有2周没有一个积极的投资回报率,你可能就在做错误的事情了。
  12. 享受乐趣:这很难,需要很大的精力,确保每一天都是愉快的一天,即使很糟糕的一天也需要一下乐趣,如果你觉得不快乐,你可能在作错误的事情,我最喜欢的一句格言:成熟,但不要长大。
  13. 爱:爱你的公司,爱你的同事,爱你的投资者,爱你的合作伙伴,爱你的供应商,但最重要的是,爱呆在家里等你的人 – 那些支持你让你能够日复一日战斗在最前线的人!

这是我的版本,欢迎提出你的!

来源:图片英文原文,译文有参考Mr. Jamie的文章

 

分类: 经营|运维 标签:

[转]如何提高客户的购买能力

2011年7月19日 wenhui 没有评论

原文:http://www.hieoem.cn/goumainengli/

我所需要的就是你帮我找到我在寻找的东西,并且将我从A点(产品页)带到B点(结账页)。如果你给我指了条明路,我会愿意乖乖的把我的钱给你。因此我的购物之旅到底是容易的还是困难的都是由你决定的。需要一些建议吗?下面有一些想法是可以考虑的:

1、在结账的过程中别强迫我注册。如果我点了结账,这通常表示我做了一个要购买的决定。在我改变主意之前请别挡我的道儿,这样你就能尽快拿到我的钱了。别给我介绍不必要的注册步骤或者是其他会减慢我支付的无用信息。如果你想给我一个注册的选项,请在结账以后吧,这样相信我还是会考虑一下的。
2、记住,谷歌不是你的目标客户–我才是。别为了一味地取悦谷歌,把你的产品描述或者其他内容写得包含一大堆SEO关键词。当然你需要重视SEO,但是产品描述首先要以客户为先的。最终,你也许会在谷歌上得到一个很好的排名,但是顾客无法理解你网站上的内容,你所做的也是没有什么意义的。
3、别在我把某商品加入购物车以后才告诉我它脱销了。如果你早就知道这件东西脱销了,请你在产品页的最前面告诉我好吗?这样我们都不会浪费彼此的时间。
4、你是否有哪个分类栏里是没有任何商品的?能请你关了这些分类栏吗?这样我就不会点到这些分类栏,然后显示给我的只有“没有找到任何商品”的信息。
5、就算在你网站上有很多促销活动和产品,你也没必要把它们全都罗列到你的主页上啊!!请保持你主页干净,把注意力放在一些关键的促销或者商品信息上,这样才能让人信服。如果你主页上有100条以上的链接,你真是太“牛逼”了
6、如果我能知道我什么时候收到货而不只是你什么时候发货,这样就太好不过了。你知道我的邮政编码,你知道UPS和FedEx的送货时间,你知道你们的处理时间,那么你能给我一个明确的日期,让我能够在那天看到它出现在我的门口,而不是我自己在那猜。(以国内的物流来说,有点困难,哈哈哈)
7、如果我把某件商品加入了购物车,在给我看其他我可能感兴趣的建议商品前请先给我看看购物车啊。别给我看什么10个推荐商品之类,这样会减慢了我到达购物车页的速度。我注意力有限,如果我看了太多无用的信息,我可能会离开。
8、如果你在我结账后获得了我的Email地址,请好好利用它!比如,你在我结账后的几天跟进向我询问商品是否顺利抵达,询问我是否有兴趣写一个商品评论,这些都是挺好的。我不介意写一个诚实的评论–你只需询问和提醒我就行了!那对下一点来说就是个很好的继续。
9、如果我写了一个消极的产品评论,请别用一个积极的评论取代了我的评论的那个位置来“缓和”评论。请记住客户写评论本是“没有偏见的”。你这边任何隐藏或者压制消极评论的尝试都是会丢失你忠诚用户的信任的。
10、别等到结账的最后一步才显示我的最终价格包括折扣优惠,税费以及运费。我希望能够在购物车页就得到这些信息,这样在最后的步骤就不会游任何“惊讶”。如果你在购物车页需要我的邮政编码去计算运费,请告知我,我会很乐意提供信息给你的。这就把我带到了下一点–
11、如果我已经告诉了你我的信息如邮政编码,请记住它。别让我在结账的时候重新输入信息。一般来说我都是不会更改这些信息的,但还是给我一个能更改它们的选项以备不时之需。
12、请别因为想把客户服务电话数量降低到最少而去尝试隐藏你的联系信息。如果你有个800号码藏在你网站的某处,请显著的标明它。如果顾客的订单出了问题,他们需要一个简单的方式去联系你。
13、当我在提供我信用卡信息的时候,你真的不需要问我我用的是那种信用卡,因为你可以从我的信用卡号码上得知的。你只需让我确认是不是这个类型的信用卡,我会让你知道是否有问题
14、当你在考虑结账的用户体验时,你能做一些关于验证码的吗?我很高兴知道你是关心我们的安全并想确认我是一个人类。但是为了人类着想,请别让我去识别1有0个元素验证码图像。如果可能的话,尽量保持简单就行了。
15、如果你在你的零售商店里展示了任何AdSense广告,请你能把他们关掉吗?那会给作为顾客的我一个混淆信息。如果你是一个真正的网络零售商,你应该专注在销售产品上,而不是从顾客那里赚一些偶然点击广告的小钱。
以上的几点似乎看起来很明显,但是这看起是十分惊人的甚至是对那些建立了复杂的结账过程的大型网络零售商们也是如此。纵观上面的一些观点,他们之所以惊讶,就是因为他们有一个“复杂的”生意。如果你从用户的观点考虑,他们真的一点也不关心商业体上的复杂性–他们追求的是一个简单而直观的购物体验。

在redis中对不同集合类型进行sort操作的性能粗测

2011年1月21日 wenhui 没有评论

由于考虑到网站运行后期的数据量比较大,使用redis的sort指令来获取查询结果的性能问题(见文章尾部题设1),在系统设计之初就得确定好哪一种集合类型的数据进行sort操作的速度最快.

以下测试均在虚拟机中完成,虚拟机ram为384M

在这里测试的数据类型:list/set/sorted set
测试方法: 对list键lpush 100w条数据 (1~1024*1024的整数)
对set键sadd 100w条数据(1~1024*1024的整数)
对sorted set键zadd 100w条数据(value为1~1024*1024的整数,score与value相同)

使用 sort {$keyname} limit 0 10 来测试sort的大致时间
采用python脚本粗测执行时间的结果为(多次测试的结果求平均值)

list                1.52050209045
set                1.97175097466
sorted set       2.02180504799

对于结果我表示纠结,sorted set反而最慢,预计对于所有的元素都重新进行了sort操作,而没有直接采用已经排好的结果
另:在这个测试之前做了个对1000w条数据的排序,虚拟机中的redis-server直接被block不给我响应了(内存太小)..

题设1:
我们所采用的开发环境为PHP+Redis,采用phpredis扩展作为php连redis的driver
假设我们的数据如下
用一个set(或list或sorted set)储存所有的照片的id(key定位photo:set),然后想提取特定数量的照片的基本信息(采用hash数据类型,假定内容为array(‘name’=>{$photoname},’addtime’=>{$nowtime}),key定为photo:{$photoid})
假设要求获取最新100张照片的名字
如果是set或sorted set,只有一种方式
$r->sort(“photo:set”,array(‘get’=>’name’,'sort’=>’desc’,'limit’=>array(0,10)));
如果是list那就有两种方式
1)$r->sort(“photo:set”,array(‘get’=>’photo:*->name’,'sort’=>’desc’,'limit’=>array(0,10)));
2)$photos = $r->lGetRange(“photo:set”,array(‘limit’=>array(0,100))); //这条速度块
forearch($photos as $photo){ //这里就不快了,这里的pipeline批量执行未测
$r->hGet(“photo:{$}”,”name”);
}
显然list的第二种方式的处理速度比较慢,它有100次请求(第一种只有一次请求),redis的内部处理速度显然快于外部的请求速度.
在这种情况下我们要做的就是对 list的sort方式及set的sort方式进行速度对比.

分类: redis 标签: , , , ,

redis fulltext search egine cn,在github上开项目了

2011年1月12日 wenhui 没有评论

项目地址:https://github.com/frozendeath/redis-fulltext-search-cn

项目目的,用php+scws+redis实现一个中文的全文搜索引擎,替代mysql的fulltext来提高搜索精度和速度

当前实现的功能:
1.搜索结果按时间排序

分类: 开发, 项目 标签:

很具价值的关于创业/投资方向的网站[持续更新]

2011年1月10日 wenhui 没有评论
分类: 资本 标签:

用redis+swcs实现的简单搜索引擎

2011年1月10日 wenhui 没有评论

在上一篇文章:搜索引擎的多重分词算法及分词词典更新时对索引的重新生成的简单想法 中,我用十分纠结的语言描述了一种基于redis+swcs实现简单搜索引擎的思路,今天就做了一个简单的demo,测试了下搜索的可行性.
悲剧,下面的代码被wordpress过滤的很严重,大家先将就着看,我研究研究

首先是分词及索引:

//以下代码的使用前提是已经安装了scws的php扩展和phpredis扩展
//scws init
$nowtime =time(); //获取当前的系统时间,搜索引擎已内容的发表时间作为搜索结果的排序权重
$cws = scws_new();
$cws->set_charset('utf8'); //注意!!!!redis良好支持utf8!!!!!!gbk编码未测!!!!
$multi = 8;
$cws->set_duality(false); //是否开启二元分词
$cws->set_ignore(true); //是否忽略标点
$cws->set_multi($multi); //设置多元分词模式,8表示将句子拆成单字,返回的分词结果为"正常分词"+"所有单字"
//假设"魔兽争霸"的正常分词结果为"魔兽"和"争霸",它的单字为"魔","兽","争","霸"
//那么将multi设为8的时候的结果就是"魔兽","争霸","魔","兽","争","霸"
//更详细的内容参加scws的文档
//end
$r = Redis();
$r->connect('127.0.0.1');
$r->select(15);//用redis第15号数据库作为测试数据库
$postid = $r->incr("global:nextPostId"); //获取当前数据的id,很redis的写法
$post = $_POST['content'];
$r->set("post:{$postid}",$post); //$post中保存为获取到的内容

//word split and index
$cws->send_text($post);      //将$post中的内容发往scws分词程序
while ($res = $cws->get_result()){    //scws的结果并非一次性返回,而是分多次,若取到的结果为空则表示分词完毕
    foreach ($res as $tmp)
    {
        if ($tmp['len'] == 1 && $tmp['word'] == "\r"){
            continue;
        }elseif ($tmp['len'] == 1 && $tmp['word'] == "\n"){
            continue;
        }else{
            $r->zAdd("index:time:{$tmp['word']}",$nowtime,$postid);  //将分好的词作为索引的key,时间作为权重,$postid作为zset的内容
//在这里我采用zset(sorted sets)来保存索引的内容,方便对搜索结果进行排行
        }
    }
}
$cws->close();
//end

然后是搜索部分:

$r = Redis();  //初始化redis
$r->connect('127.0.0.1');
$r->select(15);

$keyword = $_GET['k'];  //获取搜索的关键字

// scws init
$nowtime = time();
$cws = scws_new();
$cws->set_charset('utf8');
$cws->set_duality(false);
$cws->set_ignore(true);
$cws->set_multi(0);   //这里的0表示,只返回正常的分词结果
//end

//word split and search
$cws->send_text($keyword);   //对关键字进行分词
$keyarray = array();        //用于保存用于查询的key的数组,这么做的原因是phpredis扩展在使用zinter来判断zset的相同内容时所传递的参数为key的数组
while ($res = $cws->get_result()){
    foreach ($res as $tmp)
    {
        if ($tmp['len'] == 1 && $tmp['word'] == "\r"){
            continue;
        }elseif ($tmp['len'] == 1 && $tmp['word'] == "\n"){
            continue;
        }else{
            $keyarray[] = "index:time:{$tmp['word']}";  //将需要查询的key放入数组
        }
    }
}
$cws->close();
$tmpkeyname = "tmpkey:{$nowtime}";  //用于保存zinter命令产生的临时搜索结果列表
//redis的另一个好处就是,你可以很方便的给搜索结果做缓存
$r->zInter($tmpkeyname ,$keyarray);  //获取搜索结果
//这里我们还是以"魔兽争霸"做例子,"魔兽争霸"被分词为"魔兽"和"争霸"
//那么在$keyarray中保存的内容就应该是 array("index:time:魔兽","index:time:争霸")
//zInter所返回的结果,就是post内容中既包含"魔兽",又包含"争霸"的$postid号,继续看下面
$data = $r->sort($tmpkeyname,array('get'=>"post:*"));//通过sort指令对$tmpkeyname中的$postid数据按score(这里是时间)排序
//并根据排序结果get到post的内容 参见redis 的sort指令
foreach($data as $d){   //输出结果
  echo "{$d}";
}

$r->delete($tmpkeyname );   //删除临时搜索结果,此例子没有用到缓存
//end

此代码仅仅实现了一个很简单的索引,和搜索功能,不过值得惊叹的是,就这么几十行代码就能实现一个简单的搜索引擎.
文章写的不是很清楚,各位看官有什么不清楚的地方可以跟我留言交流.谢谢:-)

搜索引擎的多重分词算法及分词词典更新时对索引的重新生成的简单想法

2011年1月9日 wenhui 没有评论

由于最近的项目中需要用到搜索引擎,由于之前采用的是mysql数据库,而且在对索引没什么要求的情况下,就直接采用的mysql的fulltext索引.

不过最近开始考虑到尝试新技术和对系统性能的担心,在系统中引入redis(一个性能及功能都十分强劲的NoSQL数据库),来承担一部分比较适合NoSQL数据库做的工作,如排行榜/关注列表等.

恰恰不小心看到redis的一个做搜索引擎的非常简单的思路(英文索引,参考:http://playnice.ly/blog/2010/05/05/a-fast-fuzzy-full-text-index-using-redis/),便留意起了在redis上实现一套简单的中文搜索引擎.

说道做搜索引擎就不得不提到两点十分关键的内容:一是分词,就是将一个句子拆成不同的词和字;二是索引(及排行),用于快速的定位到需要的内容.

在这里主要讲下我对分词和简单索引建立的一点思路:

分词方面
分词有现成的工具可以用 scws,一个中文分词系统,可以作为php扩展,自带的词库就有28W词量,准确率高达95%.
不过分词有一个很大的不确定性,比如说”魔兽争霸”这个词,它可以作为一个单独的词表示一款游戏,但是很多人把它直接简称为”魔兽”,这就导致了在分词的时候,必须将”魔兽争霸”分为不同的单词组合如(“魔兽争霸”)和(“魔兽”,”争霸”)这两种可能,而这这就意味着必须进行两次分词,来保证搜索结果的准确性.感谢scws的作者hightman,他已经实现了不同级别的分词算法,我们用起来就简单很多了.

索引重新建立方面
比如我之前不知道有”魔兽争霸”这么个词,然后很利索地把它给拆成了”魔兽”和”争霸”,于是乎我搜”魔兽争霸”的结果很有可能是”魔兽们平时都以争霸为乐趣”,这显然有点不靠谱.因此当我知道一个新的词的时候,需要对原有的索引进行一次重构,将原先即包含”魔兽”也包含”争霸”的句子提取出来,判断是否包含词组”魔兽争霸”,然后丢到索引”魔兽争霸”里面.

代码见这里:用redis+swcs实现的简单搜索引擎

推荐一本关于Nginx的书

2011年1月9日 wenhui 没有评论

作者是:Kevin(kevin.zwf#gmail.com) & Mark(kissingwolf@gmail.com)
地址:http://wenku.baidu.com/view/e9763a23482fb4daa58d4b29.html

有比较详细的介绍,以及实例~

分类: nginx, 挨踢 标签:

ie下用location.href切换页面后获取不到来源页HTTP_REFERER的解决方法

2010年12月26日 wenhui 没有评论

ie问题多多,大家懂得

解决方法为,用js生成一个链接,然后触发这个链接的点击事件
下面代码中的参数 “u” 即为需要跳转的url

function go(u){
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){
        var referLink = document.createElement('a');
        referLink.href = u;
        document.body.appendChild(referLink);
        referLink.click();
    } else {
        location.href = u;
    }
}
分类: 脚本 标签:

[原创]redis将slave server转换为master server

2010年12月23日 wenhui 没有评论

假设当前有一台master server(配置较低)和一台slave server(配置较高),当你需要垂直扩容将原有的硬件配置较低的master server替换掉,而且要求不能停止服务.
可以这样干,在slave server上执行”SLAVEOF NO ONE”,将slave server转换为master server.
再将master server停掉,用一台配置较高的新server作为新的slave server~

分类: redis, 挨踢 标签: