主页

锤子的坚果R1,终归还是来了,但是...

坚果R1,终于还是来了

可能是对它的期待过高,第一眼看到它的时候,没有给我震撼的感觉。摄像头在上面最中间的位置,这是意料之中的事情,可是,为什么还留着下巴?留着下巴,就证明它仅仅只是一个当前时代的产物,远没有达到次世代产品的标准。

回头再想想,作为一家创业期的企业,产品销售走量是非常重要的,留着下巴,也是一定程度上的妥协。最大的问题就是,在发布会之前,老罗给众人的期待实在太高了,难免有点失落的感觉。

当然,老罗所指的次世代产品,关键是TNT。在发布会上,花了大部分的时间在介绍TNT,坚果R1倒是成了绿叶。作为一个创新性产品,甚至如老罗所讲的「革命性产品」,发布之初,被人质疑是在所难免的,正如iPhone发布之初。当然,TNT产品是否能取得iPhone般的成功,还需市场的检验。我也没有能力更是没有必要,去做那盲目的崇拜或是批评,只想做一个「心态正直」的普通消费者就好。随便说一句:TNT产品的宣传视频还是比较拉风的。视频链接

对比近期旗舰机

虽然我对于锤子产品的好感度是挺高的,但是作为一个普通正常(非粉非黑)的消费者,我还是想从产品本身,以及自身因素,来决定我的购买选择。前面一篇文章提到我对于近期手机的一个粗略分析。这里就选3款手机进行详细对比分析:小米Mix 2s、坚果 R1、OnePlus 6。为什么选择这三款?只是我的主观意向。下面列举的指标也只是我比较关注的点。

对照表格,解释如下:

  • 外观方面,萝卜白菜各有所爱,有的人就是觉得美人尖比刘海屏还难看,也有的人就是喜欢三边无框,所以这个全凭主观判断,对于我来说,其实都不好看,但是没办法,当前技术所限。
  • 系统方面,这个也算比较主观的一个因素,有的人就是喜欢更多的附加服务,而有的人更喜欢纯净的系统。对于我来说,喜欢干净简洁,讨厌自作聪明、乱七八糟且强制安装不能卸载的内置服务,对MIUI不太感冒,对smartisan OS比较满意,对氢OS比较期待。
  • 屏幕材质,我认为这是最容易被人忽略的关键参数,而多数厂家更是创造各种名词来达到营销目的,让消费者眼花缭乱、不明觉厉。什么阳光屏,夜光屏,高清屏,In-Cell,On-Cell,全贴合屏等等,有的名词只是基本功能,有的名词只是基本工艺,但却让消费者莫名其妙。这里我只关注一点:是否OLED屏?OLED是未来趋势,较之LCD屏更薄更省电,所以这里我认为OnePlus 6的屏幕更好。
  • 下巴宽度,为什么我要对比下巴宽度,因为我在乎。三者均出于成本考虑,未能达到iPhone X的水准,也没有办法,既然是商业产品,成功的标准还是要先卖得出去才行。根据网上的对比图(也有可能不准)发现,OnePlus 6最窄,小米 Mix2s 最宽。
  • 价格方面,既然是普通的消费者,这个必须要考虑,好在三者差异不大,都能接受。由于个人因素,只考虑最低配置,因为使用习惯问题,大容量对于我完全没有必要。
  • 特殊硬件指的是一些额外的个性化硬件。例如压感屏,三者只有坚果R1支持,只有一加6还保留传统耳机接口,但也只有它不支持无线充电。其他基本一致,例如快充,NFC等。

还有一些因素,比较重要但没有列出来的,例如:

  • 配置方面,对于旗舰机产品基本不会差,比跑分没有意义,况且都是高通845处理器。
  • 摄像方面,对于我来说,这不是重要的衡量指标,当前手机的摄像功能已经非常专业了,而拍出来的照片是否好看,更多取决于拍照的那个人。好的摄影师,拿着千元机,拍出来的照片比你拿iPhone X拍出来还要好看。何况这三款手机均是旗舰机,拍摄功能已然很强大了,再去纠结像素大小、AI不AI等因素纯属浪费时间,有这时间,还不如去学学摄影。
  • 用户体验,更多指的是系统层面,由于很久不用MIUI,没有用过氢OS,也不好过多评论。目前对于smartisan OS的体验还是比较满意的,特别是HandShaker同步软件,它与Mac电脑的同步功能,让我有点不能割弃了。同时,也特别想体验氢OS,号称最接近原生体验的安卓系统。
  • 电池容量,电池因素只是表面,大家更关注的是续航能力,续航能力差异的因素就比较多了,系统的优化、屏幕的材质、用户的习惯等等。这个不好对比,只能说三者差异应该不会太大。
  • 其他,还有一个我比较关心的因素——抗磨能力,我使用习惯是不贴膜不带套,在这一点上,OnePlus 6的第五代康宁大猩猩玻璃可能更好点。当然,习惯贴膜带套的用户可以忽略这点。

总结分析

外观及系统体验,萝卜白菜各有所爱;但从屏幕材质来看,显然是OnePlus 6胜出,但是针对实在没办法接受刘海屏的人,肯定也不会选择它。对于价格敏感的人,可能更中意OnePlus 6,而对无线充电比较在意的人,肯定不会选择它;对压感屏特殊爱好的人,会选坚果R1;手握重金购买传统接口耳机的人,可能对OnePlus 6 有一定的倾向。

以上分析,只是给普通正常的消费者一个参考,某粉或者某黑请自行绕道。整体的对比分析就到这里了,写完自己心里也有了明确的选择,我的分析,自认为还比较客观,希望对你有所帮助。随便问一句:你猜到我的选择了吗?

阅读更多

人人都是管理者,如何「卓有成效」是关键

这个周末读完了《卓有成效的管理者》一书,在读之前,就了解到,这是现代管理类书籍的开山祖师,是管理学必读的一本书籍。作者德鲁克是现代管理学之父,它一生写了50多本书,传播至全世界130多个国家。为什么说他是现代管理学之父,因为很多现代管理的一些名词,都是源于他写的书籍,例如:知识工作者、组织、战略、时间管理、要事第一、目标管理、绩效管理等等,在现在看来,这些字眼可能再熟悉不过了。

这本书是在1966年写的,当时的社会还普遍处于体力工作的大环境中,体力工作者的管理更多的注重效率,干得多,挣得就多。流水线上就数你一天钉了多少鞋子,就能衡量你是否有效,是否优秀。而在知识工作者的组织中,就无法这样来衡量工作的有效性了,因为知识工作者本身并不会生产实质性的物品,他们更多的在于思考,从而产生知识,作出有效的决策。那么,这样就给传统管理带来巨大的挑战,怎么样才能衡量一个知识工作者的工作是否有效呢?一些拙劣的管理者,依然在使用传统的管理方式去衡量,统计你一周加了多少班?看你是否每天有乖乖的坐在那里?实则可笑。

而对于这个问题,《卓有成效的管理者》一书就给了我一些思考。书中针对如何变得卓有成效,给出了答案:1. 记录并分析时间的使用情况;2. 把眼光集中在贡献上;3. 充分发挥人的长处;4. 要事优先;5. 有效决策;这5点也是书中最主要的5个章节。在作者给出的答案中,给我印象最深的观点是「贡献」。

在谈贡献之前,首先要说的是,《卓有成效的管理者》重点在卓有成效,而非管理。作者指出「每一位知识工作者都是一位管理者,不能以他有没有下属而定」,这个观点给我耳目一新的感觉,我相信很多人在读管理类书籍之前,都抱着一种困惑或者心态,那就是我如何能管好下属,带好团队。而这本书给你的答案是:“如何变得卓有成效,而非如何做一个管理者”。其实,并没有冲突,如果你是一位卓有成效的知识工作者,必然是一位优秀的管理者;反之,就算你是一个位高权重的管理者,未必卓有成效。

好了,回到正题,怎么样衡量一个知识工作者的工作是否有效?其中一个答案是「贡献」,把眼光集中在贡献上。书中在最开头,指出管理者缺乏有效性的其中两个现实因素:「一个是,管理者本身处于一个组织之中;另一个是,他身处于一个组织的内部,受到组织的局限」

如何理解?相信很多人比较疑惑,管理者处于一个组织内部,受到组织局限,这不是理所当然的嘛,跟是否有效有啥关系呢?作者要表达的是,管理者处于一个组织之中,只有当别人能够利用管理者的贡献时,管理者才算有效。在一个组织中,一个知识工作者工作最难的地方就是彼此之间的协作。

对于管理者的有效性而言,最重要的人物,往往并不是管理者直接控制的下属,而是其他部门的人,或是管理者本人的上司。一个管理者如果不能与这些人主动接触,不能使这些人利用他的贡献,他本身就没有有效性可言。

好好理解作者的这句话,这是影响管理者有效性的一个现实因素 —— 管理者处于一个组织之中。第二点,如何理解管理者处于组织的内部,受到组织的局限?很多管理者只是着眼于组织内部,甚至着眼于自己的那片小区域中,总认为自己的这块区域的事务才是自己最关心的事,即使关心外部世界,也是通过资料报告,这种高度抽象,主观加工的方式来了解外部世界,这种方式已将组织的相关标准强加给了外部客观事实。而组织本身又是一个虚构的抽象事务,所以作者指出:

在组织内部,不会有成果出现,一切成果都存在于组织之外。而组织存在的唯一理由,就是为外部提供良好的服务。

所以,不能意识到这点的管理者,更谈不上什么有效性了。有这样的一个标准,卓有成效的管理者确是很少,但是作者一直在强调,卓有成效是可以学会的。可是,最担心并不是能否学会的问题,而是在一个大的环境下,有些管理者无法跳出思维的禁锢,或者说本身就不愿去学,这才是最可怕的。

说完管理者面对的两个现实挑战,相信你对贡献一词有了一些认识,有效的管理者需要把精力放在对外界的贡献上,这也是为什么当前很多公司的绩效考核中,都把企业的营业额指标列为最重要的KPI,即使你并不是销售部门。

对于文章之前提到的问题,如何衡量一个知识工作者的工作是否有效呢?给我最大的思考的就是,这个知识工作者是否在为成果而工作,什么才是成果?并不是一味的迎合自己的上司,取得上司的欢心,而是,去思考我的工作对外部世界带来的贡献是什么?首先要自问「别人期望我做出什么成果?」

如何成为一个卓有成效的管理者?给我最大的启发在「贡献」这里,问题的答案并非只有这一点。作者在书中给了更加全面的解答,推荐给你读一读,书中文字简单朴实,读完一遍其实没有多么强烈的感觉,在写这篇文章之前,我又简单的翻了一遍,发现书中在很多简单道理以及事例的背后,藏有许多令人发省的观点。好的书籍就是这样,每读一遍的认知都不一样,历经40多年而不衰也是有道理的。

后记

跳出理想,回到现实。其实在很多的企业里,好多管理者并非不知道这些道理,但是对组织的作用却微乎其微。就好比一个卓有成效的管理者在一堆以个人利益为主的管理者中间,他的力量真的是微不足道。虽然谈不上改变,但是却能给你提供了一个标准,什么样的管理者是卓有成效的,什么样的不是,有了这个标准,在遇到人或事,处理问题的时候会有一个自己判断的准则,指引我们不断往正确的方向前行,许多困惑并不一定能在书中找到答案,但是,这个正确的方向,就是最大的收获。

阅读更多

就算mini版iPhone X发布,我还是要等到5月15号

作为一个资深的数码设备迷,换手机纠结肯定是避免不的了。大部分人基本上是两年更换一个手机,而一款新的手机在我的手里,新鲜度往往不到一个月就过去了,iPhone 8 我仅仅玩了两周就不想用了,找个借口就给老婆换上了,还美其名曰:我先给你试试好不好用,其实是给你买的。

再喜欢的数码产品,新鲜度也随着时间的推移不断下降。手机的新鲜度对于我来说,头两个月还行,后面4个月凑合使用,最后半年强忍着在用。中间穿插着使用了两周iPhone 8 后,再换回来可能也新鲜了那么一个月。而最近实在是忍无可忍了,于是开始纠结,陪伴我下一个1年的手机又是哪款呢?

1. 锤子手机

目前我在使用的是去年5月份买的坚果Pro,当时这款手机是我下单最迅速的一次,不到2000的价位,独特的工业设计,好用的smartisan OS,让我毫不犹豫就下单购买了。手机整体上没有让我失望,对内,系统用的较舒心,没有附庸的乱七八糟服务和通知骚扰;对外,回头率也相当的高,都询问什么手机(不过有可能是锤子知名度还不是很高的缘故吧,哈)。

从坚果Pro的使用体验上来讲,对锤子的手机一直期待比较高,正如我对老罗的关注。很早就听老罗说,5月15将要发布一款颠覆世界的产品,顿时勾起了我的兴趣。怎么着,再没有看到老罗这款颠覆世界的产品之前,我是不会决定下单买任何一款手机的。也许这正是中了老罗的套路,正当还在思考老罗的套路时,突然就来了一场发布会,4月9号,锤子科技发布了坚果3手机。

这款手机定位中低端产品线,同样出色的工业设计,类似小米Mix手机全面屏的设计 - 上,左,右,三边无边框。会让你感觉花了1299元就能大概体验小米Mix全面屏设计的错觉,而美中不足的是,它搭载了一款入门级处理器 - 高通625,当然产品定位以及成本限制是能理解的。

没有使用过锤子手机的用户,这款手机绝对是最佳的入门手机,绝对不会让你失望的一款almost全面屏手机。而对我来说,已经手握坚果pro,在看到这款手机发布的时候,完全没有当时坚果pro发布时给我带来的冲击感。

期待5月15号新品发布。

2. 华为手机

按我之前购买手机,对品牌的理解和定位,我是从来不会把华为手机列为购买清单的,在我的心目中,华为的手机一直都是「土」和「贵」的代名词。「土」表现在外观土,系统界面土,甚至这个手机品牌在我心里也是比较「土」的。这个可能仅仅是我的偏见。

然而经过华为这几年的努力,手机的品牌及其影响力越来越受到大家的关注。而且手机的外观也是越来越时尚。今年4月12号发布的P20手机,更是让我瞬间摒弃了对华为偏见。这是一款令人惊喜的产品,惊艳的背面工艺确实让我看到它的那个瞬间为之倾倒。除了工艺,主打的AI,3摄都没有让人们失望。

这个产品瞬间逆转了我对华为之前的种种观念,但是,让我真正拥有它还是有一些纠结的,首先全面屏的设计只能是基本满足需求,而并不能达到完美的地步,甚至跟iPhone X还是有一定的距离,毕竟iPhone X底部是无边框设计的。当然华为这块可能同样是要考虑成本问题,屏幕封装技术要达到iPhone X那个水准,成本不小,所以也是iPhone X卖到将近1万元的主要原因。其次是就系统因素了,我实际体验过华为Mate 10手机,我发现国产手机这些安卓系统,EMUI也好,MIUI也好,还有Flyme,都有一个通病,那就是自带服务一大堆,满屏的垃圾通知,真的是很无语,而且无法卸载。锤子的Smartisan OS,真是国产安卓UI的一股清流,这也是我使用锤子OS比较舒心的一个主要原因。

3. 小米手机

小米可以说是安卓届的老鸟了,最初接触这个品牌是MIUI,当时拿着HTC一代机皇G7首次尝试刷了MIUI,当时的激动心情,不亚于换了一个新手机。

小米从最初成立就一直走的是超高性价比的路线,然而给大家带来价格优势之外,随之给人们带来的品牌定位就是低廉。小米的手机给我的印象一直都是高性能,低设计,可以说毫无设计,第一代小米手机发布时,我在现场,雷军还美其名曰:「没有设计是最好的设计」。也许在那个时候,小米的高性价比优势,确实能让人们忽略了没有设计这一点。但是随着时间的推移,人们的审美是在不断提高的。真正让小米走上高端路线的产品,在我看来,是Mix系列,这款手机重新定义了小米这个手机品牌,除了高性价比,也是有设计的。

上周去「小米之家」转了一圈,给我的感受很明显,跟苹果Apple Store相比,小米之家就是一个「廉价版本」,当然我不能拿「小米之家」直接跟零售届最高设计水平的Apple Store相比。倒不是「小米之家」的整体设计有什么问题,相反「小米之家」的整体设计布局还是挺不错的,毕竟这种布局以及商品的摆放都是可以借鉴前辈的。而问题的关键就是在手机产品上,除去小米Mix系列手机,其他手机(尤其是红米系列)摆在中央展桌上,感觉就是拉低了整体的美观。建议中央展桌只摆放具有设计感的产品,如Mix系列手机,红米系列就不要放在中间了,放在墙边就好。

当然去「小米之家」,我主要是奔着3月27号最新发布的Mix 2s去的,拿在手上的感觉就是,这是极少的一款实物比照片好看的产品。三面无边框的全面屏,以及陶瓷背面的设计,可以堪称惊艳。难怪这是小米一直引以自豪的产品,确实如此。当时有那么一个瞬间想要拥有的冲动,但是忍住了,仿佛老罗的声音在耳边想起「5月15号,颠覆世界的产品」

4. 魅族手机

本来不想再谈魅族的,在坚果Pro之前,我使用的正是魅族当时新发布的pro 6,这款手机被我评价为我所购买的电子设备里最失败的一个,当时推出,它所谓pro系列的尊享服务就是垃圾,其中的经历就不想再谈了。

既然这么厌恶,为什么说呢,其实在魅族的历史里有那么一款产品让我至今魂牵梦萦,那是一款MP3 M3。

只是不知道最近几年的魅族到底是怎么了,产品混乱到让人不知所措,产品服务也让人为了嘘叹。话说魅族创始人黄章的回归将带来一款革命性产品,当然不是4月22日发布的魅族15了,最新发布的魅族15连黄章自己都声称只是回归后的一个小尝试,感觉整体上像是回归了稳重,然而远远达不到惊艳的程度,况且这个售价还是算了吧,如果能降到坚果3的价位……

5. iPhone

谈到手机,就避不开iPhone,iPhone基本上就是手机行业的标杆,它siri,大家就都做语音助手;它指纹识别,大家就都指纹识别;它刘海了,大家都刘海了;它摄像头竖起来了,大家就都竖起来了。它的影响力毋庸置疑。

但是,在我看来,乔布斯后时代的iPhone,也就是iPhone5s以后,没有一款手机让我惊艳的,iPhone 6&6s丑陋的天线设计,真是醉了;iPhone 7的亮黑色虽然一定程度遮掩了丑陋的天线,但是我觉得这不是一款苹果手机应该有的态度。iPhone 8采用双面玻璃设计,终于解决了天线外观问题,但是在这个全民都是almost全面屏的时代,iPhone 8 的外观并没有多大的亮点。反倒是iPhone X的设计,倒是让人眼前亮了一下,可是那个宽刘海,着实又让许多人抓狂了好久。所以,乔布斯后时代的iPhone手机单单从外观上就让人提不起兴趣。

iPhone 最让人无法割弃的并不是它的手机设计,而是它的iOS生态系统以及与Mac OS的相辅相成,iOS系统仍然世界上最领先的操作系统。大量优秀的软件只有在iOS平台上才能体验到,这种优势真是安卓无法比拟的,同时,它与Mac OS的这种紧密相连,也是让Mac用户无法割弃iPhone的原因之一。这也是目前想要购买iPhone的唯一动力了。

最近各路小道新闻貌似预示着iPhone要出新品手机了,更多爆料都指出是iPhone SE2,到底是什么新品,还是挺让人期待的。

6. OPPO&VIVO

OPPO和VIVO手机的崛起真可算是异类,其他品牌的手机基本上都带有强烈的创始人标签,例如上面提到的锤子的老罗,华为的任正非,魅族的黄章以及小米的雷军,可是OPPO和VIVO貌似没有这样的标签,也可能是他们的创始人比较低调,也可能是我本身对其关注度不高。

既然关注度不是特别高,我也不好多说评论,反正最让我感到惊讶的是它们的营销手段以及营销渠道。放假回媳妇老家,一个三四线城市的小县城,只要是有手机卖场的地方,绝对能看到OPPO和VIVO的身影。媳妇舅舅的一个朋友,年纪挺大了,拿着一个刚买的手机让我帮忙给设置一个铃声,我随口问了句什么手机?他操着一口方言说出:「哦破」,我反应半天才知道原来是OPPO,惊叹于他们的营销渠道如此厉害,年近60+的老人都能叫出他们手机的品牌。

VIVO最新发布的X21搭载屏幕指纹识别技术确实赚足了眼球,美中不足的是没有把底边框完全收掉,当然还是屏幕封装成本的限制。

敬佩是敬佩,但是OPPO和VIVO这个手机品牌始终不符合我的品味,女生可能更能被它打动,对于我这种科技范的直男还是算了吧。最近看到一个朋友圈指出,消费力排行榜:1少女,2少妇,3小孩,4老人,5狗,6男人。隐隐中觉得有一丝丝的道理。

7. 一加手机

一加手机我关注得相对较晚,之前并没有太多的了解,在我心里,对它只有一个基本的认识,那就是绝对的旗舰。每一款手机的硬件配置都做到了极致,大家都2G内存的时候,它整4G,大家都4G的时候,它整6G;这次5月17号要发布的新品OnePlus 6,内存至少得整8G,处理器怎么着也得是高通845吧,储存256G是跑不了的。正如它官网所说:「一加手机 - 不将就」。

其实一加最吸引我的地方还是系统方面,大家都评价为最接近原生安卓系统体验的定制UI,我还是比较有冲动想体验一把的,毕竟除了一款手机外观设计带来的新鲜度之外,系统体验的新鲜度也是非常重要的。

期待5月17号新品发布。

总结

每年的这个时候,新机层不不穷,正写着这篇文章,小米又发布了一个6X,简单看了下介绍,又是一款一主打自拍的手机。哎,果然把消费群体全部集中在了「少女少妇」身上。

其实,我心目中也是有个概念机的,跟着我的描述脑补一下哈。正面一整块屏,把iPhone X的刘海去掉就行了,在顶部开个洞,只是一个摄像头大小的洞(这个对屏幕工艺应该挺高吧),实在不行,去掉前置摄像头也行,在我这基本没用(估计妄想,毕竟我是属于消费力最低的物种)。然后屏幕指纹是少不了的,手机背面嘛没有太高的要求,使用玻璃材质(避免各种丑陋的天线设计),摄像头来个两三个就差不多了。

嗯差不多就是这个样子。好了,还是期待5月15日老罗能给我带来惊喜吧。

阅读更多

前台加密,后台解密(3) - Node开发

第一篇文章,我简单介绍了一下我的实际需求,为什么想要加密url中的一个参数值;第二篇文章,我详细讲述了在Node如何实现「前台加密,后台解密」的功能,来满足我这个小需求,同时,还写了一个测试页面测试一下「前台加密,后台解密」的效果。

我相信你读完,应该可以直接上手了,将前台页面加密过的参数传到后台,然后后台进行解密,从而响应对应的请求。可是这个过程有个大坑,假设前台页面有个链接:

http://localhost:3000/test?userid=c7ZhfhZXOskDwaQRv+G1Tw==

后台获取参数userid的值理应是c7ZhfhZXOskDwaQRv+G1Tw==,没错吧,可是实际情况并非如此,后台得到的确是c7ZhfhZXOskDwaQRv,那么这样解密出来的结果显然就不对了。为什么会这样,我们来还是先来个示例。

1. 找到问题

还是那个test的页面,我们添加一些内容来测试,

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1><%= title %></h1>
    <form action="">
      <input type="text" placeholder="test" name='test'>
      <button type="submit">提交</button>
      <p>code(前台加密): <span id="value"></span></p>
      <p>code(后台解密): <span id="returnValue"></span></p>
    </form>
    <br/>
    <div>
      <p>生成测试URL:</p>
      <ul id="testurl">
      </ul>
    </div>
  </body>
  <script src="/jquery/dist/jquery.min.js"></script>
  <script src="/crypto-js/crypto-js.js"></script>
  <script src="/javascripts/crypto-aes.js"></script>
  <script>
    $(function(){
      $('button').click(function(e){
        e.preventDefault();
        var value = $('input[name=test]').val(); 
        var code = getAes(value);
        var $url1 = $('<li><a href="/test/url?userid=' + code + '">/test/url?userid=' + code + '</a></li>');
        $url1.appendTo('#testurl');
        $('#value').text(code);
        $.ajax({
          url: '/test',
          method: 'POST',
          data: {
            value: value,
            code: code
          },
          success: function(r){
            $('#returnValue').text(r);
          }
        });
      });
    })
  </script>
</html>

在页面中添加了一些内容,将生成的密文附到链接中,模拟实际访问的效果。如下图:

后台添加一个路由/test/url,然后获取userid的参数值,后台路由代码如下:

router.get('/url',function(req,res,next){
	var userid = req.query.userid;
	console.log('+++++++++++++++++++++:' +  userid);
	res.send('后台得到的参数:' + userid);
});

最后你会发现前台加密后的值,传到后台不一样了,+号变成了空格,为什么会出现这样的情况?

2. 问题原因

3. 解决办法


参考文献:

阅读更多

前台加密,后台解密(2) - Node开发

上篇文章主要就是一个引子,是为了介绍我为什么要想去做前台加密,后台解密的这个功能,也可以说是需求吧。这篇文章开始进入主题。

1. Node加密模块

首先要说明的是,这里是使用Node开发,第一步我们可能要考虑的是找个加密模块套用一下就行了。这步其实可以更简单,你都根本不用去找,因为Node原生就集成了crypto 加密模块

由于我们的需求是加密完后还要解密的,所以这里我选择了对称加密算法AES,简单封装成函数如下,便于使用。

// 代码摘自 https://www.liaoxuefeng.com
const crypto = require('crypto');

function aesEncrypt(data, key) {
    const cipher = crypto.createCipher('aes192', key);
    var crypted = cipher.update(data, 'utf8', 'hex');
    crypted += cipher.final('hex');
    return crypted;
}

function aesDecrypt(encrypted, key) {
    const decipher = crypto.createDecipher('aes192', key);
    var decrypted = decipher.update(encrypted, 'hex', 'utf8');
    decrypted += decipher.final('utf8');
    return decrypted;
}

var data = 'Hello, this is a secret message!';
var key = 'Password!';
var encrypted = aesEncrypt(data, key);
var decrypted = aesDecrypt(encrypted, key);

console.log('Plain text: ' + data);
console.log('Encrypted text: ' + encrypted);
console.log('Decrypted text: ' + decrypted);

这里主要使用了3类API:

  1. 创建cipher对象,createCipher()createDecipher();
  2. 更新密码,update(),该方法后两个参数指定输入输出编码;
  3. 输出,final()

2. 前后台加密一致性

问题又来了,Node是自带了crypto加密模块,前台超链接中如果想要使用密文,必须通过后台加密后传参过去,这样不免有些麻烦,也不够灵活。

如果有这么个加密模块,前台后台的API都是一致的,那就更加方便了,别说,还真有,js的世界里只有你想不到的,没有找不到的。crypto-js就是这样一个模块,前台后台可以调用相同的API使用。

安装方法很简单:

npm install crypto-js --save

具体使用方法还是自行查看官方README,上面有分别介绍前台和后台的使用方法。这里我贴一个AES加密算法的示例供参考。

// 在后台新建crypto-aes.js工具模块
var CryptoJS = require('crypto-js');

// var key  = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';  // 32位密钥
// var iv   = '1234567812345678';  // 16位

var key  = CryptoJS.enc.Utf8.parse('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
var iv   = CryptoJS.enc.Utf8.parse('1234567812345678');

function getAes(data){ //加密
    var encrypted =CryptoJS.AES.encrypt(data,key,
        {
            iv:iv,
            mode:CryptoJS.mode.CBC,
            padding:CryptoJS.pad.Pkcs7
        });
    return encrypted.toString();    //返回的是base64格式的密文
}

function getDAes(data){//解密
    var decrypted =CryptoJS.AES.decrypt(encrypted,key,
        {
            iv:iv,
            mode:CryptoJS.mode.CBC,
            padding:CryptoJS.pad.Pkcs7
        });
    return decrypted.toString(CryptoJS.enc.Utf8);    
}

var encrypted = getAes('lupeng');
console.log('加密后:' + encrypted);

var data = getDAes(encrypted);
console.log('解密后:' + data);

exports.getAes = getAes;
exports.getDAes = getDAes;

通过引入我们封装好加密模块crypto-aes.js,在后台中引用就能方便使用getAes以及getDAes方法了。

前台页面中引入crypto-js以及咱们封装好的crypto-aes.js,就可以使用这两个function了。

  <script src="/crypto-js.js"></script>
  <script src="/javascripts/crypto-aes.js"></script>

3. 写个简单的示例

前台测试页面如下:

<!DOCTYPE html>
<html>
  <head>
    <title>test</title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1>test</h1>
    <form action="">
      <input type="text" placeholder="test" name='test'>
      <button type="submit">提交</button>
      <p>code(前台加密): <span id="value"></span></p>
      <p>code(后台解密): <span id="returnValue"></span></p>
    </form>
  </body>
  <script src="/jquery/dist/jquery.js"></script>
  <script src="/crypto-js.js"></script>
  <script src="/javascripts/crypto-aes.js"></script>
  <script>
    $(function(){
      $('button').click(function(e){
        e.preventDefault();
        var value = $('input[name=test]').val(); 
        var code = getAes(value);
        $('#value').text(code);
        $.ajax({
          url: '/test',
          method: 'POST',
          data: {
            value: value,
            code: code
          },
          success: function(r){
            // alert(r);
            $('#returnValue').text(r);
          }
        });
      });
    })
  </script>
</html>

页面很简单不多解释,一个表单提交后异步获取后台解密后的结果,显示到页面上。后台Node代码如下:

// express 框架的路由
var express = require('express');
var router = express.Router();

var getAes = require('../libs/util/crypto-aes.js').getAes;
var getDAes = require('../libs/util/crypto-aes.js').getDAes;

// page: index
router.get('/', function(req,res,next){
  res.render('test', {
    title: 'test page'
  });
});
// action: crypto-aes
router.post('/', function(req,res,next){
  var value = req.body.value;
  var code = req.body.code.toString();
  console.log('----------------------: '+code);
  var value2 = getDAes(code);
  res.send(value2);
});

module.exports = router;

一个Get路由,显示前台页面如下:

页面一个表单,通过异步请求访问后台Post路由,原值为value,前台加密后Code,将这code参数传到后台,后台解密code为value2,传到前台。一个简单测试程序就完成了,Perfect!

好了,Node的「前台加密,后台解密」就写到这里了。

【好景不长,填完一个坑,另一坑又来了】

阅读更多

前台加密,后台解密(1) - Node开发

最近在使用Node开发一个简单的组织内人员管理的项目,人员按照部门的维度来管理,每个部门管理员只能操作自己部门的员工,权限这块的控制我做得比较简单,通过检查是否登陆的中间件来控制路由访问的权限。

// 权限控制,每个访问该路由的请求,都需要先经过checkLogin
router.use(checkLogin);
// checkLogin
module.exports = {
  checkLogin: function (req, res, next) {
    if (!req.session.user) {
      req.flash('error', '未登录');
      return res.redirect('/login');
    }
    next();
  }
};

checkLogin中间件里规定,当session里不存在user,那么对不起,返回登陆页面/loginreq.flash()是什么?点击这里查看,这里不重复介绍了。

好了,回到正题,权限我是通过这种方式实现的,在session里我保存了该部门对应的id,然后我通过该id从后台获取该部门下的员工号。具体实现不多介绍,这样就可以实现登陆指定的用户显示指定部门的人员,显示页面如下:

这样貌似满足了部门管理员只能操作自己部门的人员,而不能查看其他部门人员信息的需求。但是,当我接着做人员详情显示页面时,发现了一个问题,如下图:

这一页是通过点击列表中人名超链接过来的,链接地址:http://http://localhost:3000/user/fom/show?userid=118123,咋一看并没有什么问题,可是回头一想,不对啊,假如另外一个部门的管理员登录后,输入这个链接,同样是可以显示出来的呀,针对这个人员信息页面,只要是登陆用户,数据完全是公开的,并且只要你知道别人的员工号,就可以随时查看信息。因为后台路由是一致的,权限只是控制了是否登陆,并没有检查用户是否属于自己部门的人员。

这个问题的解决有两个方法:

  • 一种比较彻底,就是在显示人员信息的页面加上一个检查中间件:检查显示的用户是否属于登陆管理员的部门人员,只要不是属于自己部门的人员,就跳转显示其他页面。
  • 另一种方法相对比较保守,我把链接复制给你,你才可以查看该人员的信息,而不允许你随便输入员工号来查看。这种方法听起来比较拗口,其实就是要加密urluserid参数值,你想自己输入,对不起输入不了,因为userid参数值是密文,就算你胡乱输入了一个值,也没有用,照样查不到此人信息。

例如显示人员信息的页面url是这样的:http://http://localhost:3000/user/fom/show?userid=18JcpD9C/ngZRSv/fS2t2g==,我看你咋编员工号。

我选择了第二种方法,之前没有接触过加密这块内容,正好借此机会学习一下Node开发的加密功能。好了,具体怎么实现这个功能,下次详解~

阅读更多

想做一个线上待办清单引发的思考 - Node开发

启动服务 打开VS 久违的动作 幸好自己还没有忘记

领导有个习惯,每次都会把部门的待办事项用excel列出来,然后邮件发送给下属并抄送给上级,便于跟进工作事项,任务列表一更改然后再发送一遍邮件,这种管理方式没什么问题,但是这种操作方式实在是低效。

我决定做一个简单的线上待办清单,领导添加待办事项,下属可以更改状态,还有一个最关键的功能就是发送邮件功能,一键发送待办清单给下属并抄送上级领导,在传统企业里邮件真是必不可少的。

1. 数据库准备

动手开发前先把数据库创建了,由于上次学习了ORM模块,不用再在数据库里操作SQL语句了,直接上代码写上数据表的结构以及一些初始数据的导入代码。

2. 前端页面折腾

数据库结构搞定之后,开始折腾前端页面的设计,也不想重新写页面了,直接copy之前项目的代码,短短半个小时,前端页面就搞定了,如下图:「PS. 结果后面又调了两天,醉了」

前端表格使用的bootstrap table制作,与后台数据库的交互直接使用Ajax异步处理,现在先编写获取数据的API,简单如下:

// find: 获取table的数据
router.get('/bootstrapTable', function (req, res, next) {
  todolist.findAll({
    order: [['id', 'desc']]
  }).then(function (r) {
    res.send(r);
  });
});

一并写完增删改查,前台页面就可以简单的调用API就能实现一些功能了,例如添加列表功能,更改列表以及删除列表。

3. 清单编辑功能

最近几次开发都是使用Bootstrap Table来展现列表,这块也是最折腾时间的地方,每次写这个表格,总是有一堆奇奇怪怪的想法想要去实现,没有一个整体的规划,功能来回调整,于是在这上面浪费很多时间。这次主要折腾了字段编辑功能,以及更改列表功能。

更改表单的功能有两种方式:一是使用modal弹出表单的方式;另一种是行内编辑的方式;modal弹出表单的方式会添加大量的js脚本,后期管理起来非常的不方便。而行内编辑的方式,虽然不用写大量的代码,但是功能上就比较单一了。

总体来说,两种方式都不是挺理想,我觉得我应该学习一些新的技术了,例如Vue。后来还是选择了modal弹出编辑的方式,功能做了一半,我突然就想,为什么要有更改功能呢?,总是用开发者的思维去做产品肯定不行,开发者认为增删改查是最基本的功能点,而用户在用产品的时候,其实并不一样,用户关心的是功能点,我做这个产品,面对的用户是谁?我得好好想想再动手……

4. 邮件功能

起初想着,在每条列表的后面加上一个操作功能-发邮件,使用简单的mailto:lupeng@xxx.com链接,来触发系统默认邮件客户端来发送邮件。

后来仔细考虑了一下实际使用场景,放弃了这种方式,平常使用的时候,基本上都是表格所有的内容一并发送,来达到提醒的作用,而非督促完成每一条任务清单。另外,发送邮件最好能真正意义上的一键发送,需要省掉中间弹出邮件客户端的环节。

想明白实际的使用场景后,那么邮件的功能就需要更深入一点,需要引入邮件模块,取代使用客户端的作用。

开发过程中的一些想法,作参考,希望能给你一些启示,项目地址:https://github.com/pengloo53/info

阅读更多

每天1个俯卧撑,这样也行?《微习惯》的力量

[1]

我一直都比较喜欢给自己定计划,坚持一些我觉得应该坚持的事情,比如跑步,比如读书,比如coding,还比如练英文。然而理想一直比较丰满,现实总是很残酷,每次通过突然的「头脑发热」制定出来的坚持计划,总是在经历1周,2周,3周后,就因为某天的某个原因突然就停止了。

这个突然的「头脑发热」被作者称作为「动力」,由于某天的某个原因没有坚持下去,是因为「动力是不可靠的」。我们不能总是去依靠动力达成一项目标。「激发动力」的策略教我们依赖这些东西:励志视频、文章、给自己打气的话。作者认为这种方式非常不可取,每个人都会有不在状态的时候,生病了根本不想coding,外边下雨了,没法外出跑步了。如果一周都不在状态,那么依靠动力的方式显然就不尽如人意,最终会使你的习惯早早流产。

动力不可靠,我们不能依靠它充当建立习惯的策略。

[2]

我们在制定习惯的时候,总是按照心中理想的标准去制定,例如:我要每天学习英语1小时,每天读书1小时。因为人们都希望能更快的看到成果,所以我们的目标一般制定得都比较高,前两天由于动力驱使可能能够完成既定目标,可是越到后面越难以维持目标的达成,渐渐没了信心,最后干脆放任自流而放弃了。

在作者看来,每天依靠自己的意志力跟自己对抗,这是一个自我损耗的过程。作者指出意志力损耗的五大因素为:努力程度、感知难度、消极情绪、主观疲劳和血糖水平。举个简单的例子,一个把目标制定为每天1个俯卧撑,一个给自己制定每天锻炼半小时。假设两人意志力一样,那么后者坚持的时间将会更短,因为它损耗的意志力更多。当意志力耗尽的时候,也就是你放弃之时。

意志力虽然可靠,但它的资源是有限的。

[3]

作者提出使用微习惯+意志力的最佳组合。微习惯关键体现在「微」字上,正因为它的目标小,根本不需要多大的努力就能达成目标,损耗的意志力基本为0,一旦你开始了,最后你会惊叹自己竟然超出目标完成任务,而给予自己更大的鼓励和信心。

万事开头难,而恰巧微习惯的策略就是让你的开头不那么难。可能这时你会疑惑,假设我每天只做一个俯卧撑,那么给我带来的锻炼微乎其微,又有什么用呢?不要质疑这点,因为它所产生的作用正是微习惯最大的魅力,我被这种魅力感染到了。

我是一个缺乏动力,而且意志力也不够强的人。人生坚持最最长的事情就是曾经坚持跑步了3个月(中间并非连续),当时一直是某个动力撑着我,最后也因为动力消失,意志力耗尽而终止了。自从选择了微习惯策略后,发现坚持一件事情真的没有那么困难了,微习惯的作用就是让你在坚持某件事情的时候,没有那么多抵触的情绪(意志力损耗),比如,像每天吃饭睡觉一样去坚持锻炼。

这是我坚持keep4周的截图,一天也没有断过,而我给自己设置的目标,并非是上面写的每天10分钟。那我的目标是?我说出来你可能都不会相信,我给自己设置的目标是「饭后下楼去操场」,也就是说每天我只要下楼到了操场,我的目标就达成了,而正如你看到的,我几乎每天都超额完成了我的目标,因为我发现,我都已经到操场了,看到那么多人在运动,我何不待会再走。就这样,如你所见,我每天至少坚持了10分钟的运动,如果我将目标设置为每天运动10分钟,我相信不会有这样的成果。我之前设置过每天20个俯卧撑的目标,还是在某天动力不足,状态不佳的时候断送了,再拾起时,心里就开始破罐破摔了。

而「每天下楼去操场」几乎是不可能失败的目标,如果你觉得这个都很难达到,可以尝试把目标定得更小,「每天铺上瑜伽垫」「每天到家后再下楼」等等,只要铺上瑜伽垫,目标就算达成了。不用担心这么小的目标有什么意义,能有什么成果,这不是自欺欺人嘛。我想说的是,只要你有一颗上进的心,试试就知道了,会产生意想不到的成果,由于我每天下楼去操场,我不仅运动远远超过10分钟,甚至在这段时间,将我之前在「得到app」以及其他平台上买的一些课程都听完了,想想却是不可思议。

有时我再想,现在我每天的运动量,远远比我之前设置的每天20个俯卧撑要多得多,而后者竟然没有坚持下去,前者竟然一天没落下坚持了1个月。正是因为「每天饭后去操场」这个目标实在是微小得你不可能失败。

作者在书中也花了大量的篇幅介绍大脑的工作原理,以及动力、意志力和习惯的一些理论和实验,这些观念让我耳目一新,推荐大家读一读。

阅读更多

原来卡耐基是一名被作家耽误了的伟大推销员

【1】 人性本能就是懒惰的,思想更是如此,在某个岗位待得越久就越不想动弹,得过且过,听到太多的人抱怨着自己的工作,每天干着自己不想做的事情。其实很多时候并不是他们不能换其他工作,而是人的本能驱使不愿意去尝试改变罢了。

总是找诸多借口:万一换了个工作,换了个岗位,依旧不是自己喜欢的呢,万一还不如这个了呢?可是,你连尝试都没有去做,又如何知道适合不适合,喜欢不喜欢呢。想想好麻烦,我到底想要做什么?还是先这么待着吧。

【2】 今天翻开卡耐基《语言的突破》这本书,习惯性的从头开始看,看到卡耐基的简介。卡耐基被誉为20世纪最伟大的人生导师,相信不少人都看过他的代表作《人性的优点》《人性的弱点》。他生于1888年,出生在贫苦农民家庭,从小也就是在农村帮父母打杂干农活,一年的辛勤劳作可能只是因为自然灾害,所有的成果就会付诸东流。他发誓自己绝不要这样的生活。

高中毕业后就读一所师范学院,由于家境过于贫穷,他不得不出去打工以赚取生活学习等费用,他非常自卑,他想寻求出人头地的捷径。当时在学校里最具名望的,一类是运动员,一类是辩论演讲获胜的人。他选择了辩论演讲,一次又一次的失败使他更加的灰心和绝望。

毕业后本可回家乡当老师,但是他却选择前往学校总部为该校做推销员,尽了最大的努力,但是并不是太成功,于是又改推销肉类产品。渐渐推销成绩越来越好,从区域25名跃升为第1名,但他却拒绝了晋升经理的岗位,跑到纽约当了一名演员,干了一年后,他断定演员这行没有前途,于是他又改回推销本行,在一家汽车公司推销汽车。

他知道,推销员并不是他的理想。他很纠结,如果放弃现在的工作,能有什么能力养活自己呢?一边是现实,一边是理想。其实我们很多人都存在于这种状态「我不喜欢我现在的工作,可是我能去哪呢」。

在推销汽车的某天,遇到一个老者,他和老者的一些对话,让他在某个晚上坚定了自己想成为一个作家的理想。于是他放弃了推销工作,去应聘成为了一名讲授商务技巧的老师,从教授学员中渐渐找到,对于如何帮助学员克服恐惧的独特方法,对于人性的一些理解……

【3】 看完卡耐基的简介,是不是觉得他最开始的人生经历,其实和我们大部分人都很类似,很多时候我们同样是在现实和理想中纠结,我们纠结过后,不敢或是不愿去做出改变,我们总是选择放弃理想 ,接受现实。但是他却勇于去尝试,参加辩论演讲,去推销,当演员,做老师,最后成为了一名伟大的作家。回头想想,我觉得挺戏剧的,再怎么看「推销员」「演员」这些工作都跟「作家」扯不上关系啊。

很多时候,你并不知道你到底想要什么,只能去不停的尝试,也许在某个岗位上受某个人的影响,你突然就发现了自己到底想要的是什么。所以问题的关键还是你的接触面太窄了。

很多事情,不要停止尝试,不去尝试怎么知道你喜不喜欢呢

阅读更多

《苹果三剑客》之我见

2018年读完了第一册书籍《苹果三剑客》,共三本:《乔布斯传》《沃兹传》《乔纳森传》。

1.《乔布斯传》

《乔布斯传》之前读过一遍,这次重新拾起来也是为了再次领略一次他的风采,他是苹果的创始人兼灵魂人物,初次了解的时候,我被他过于优秀的战绩冲昏头脑,满心的崇拜,沉醉于他所谓的现实扭曲力场中。这回再次阅读《乔布斯传》后,我却感到有一丝丝的悲哀。

出生就被亲生父母抛弃,天生缺乏人情冷暖的感知,与亲生女儿lisa的情感纠结,饮食习惯的怪异,对产品设计的痴迷(得癌症躺在病床上,就因为医疗设施设计得太难看了而拒绝使用),近乎变态的为人处事风格,或是说现实扭曲能力,不仅扭曲了他人,还扭曲了自己,使自己相信能够战胜癌症,而不用治疗。

如果剥离他的成就,这样的人在我们看来,简直就是神经病,完全不能当作一个正常的人去相处。再次读完《乔布斯传》的时候,整个人的心情都是凝重的,他的经历确实传奇,而我们只能当成是一种传奇,无法效仿。

或许他们是别人眼中的疯子,但他们却是我们眼中的天才。因为只有那些疯狂到以为自己能改变世界的人,才能真正改变世界。

2.《沃兹传》

读《沃兹传》时的心情,跟读《乔布斯传》完全不一样,这本书是沃兹本人撰写的自传,读起来如其人一般,轻松快乐有趣。沃兹是苹果公司的头号人物,与乔布斯一同创建的苹果公司,苹果公司的主要产品-苹果电脑,它的始祖Apple IApple II是沃兹一人一手打造的,他可以称作是苹果电脑之父。

沃兹的天才在我们周围的生活中其实比较常见的,每个领域都会出现这样的天才,他精通于电子,正好是PC时代所必需的。他生性羞涩,与很多发明家一般,精通于那个领域,活在自己的世界里。他相信最好的产品都是出自某一个人的手中,独立产生的。他不擅长与人沟通交际,他也从不相信好的发明能够出自某个团体或是某个委员会的群体决策中,现实也确实如此,某个领域伟大产品的出现均是出自某一两个人,比如计算机语言C,Java等的诞生。当然这个需要你足够优秀才行得通,他就是那个时代足够优秀的人。

如果是奔着了解苹果公司而去看这本书,那么可能会让你失望了,因为沃兹在苹果公司的时间并不长,在苹果公司上市后不久就因为一场事故部分失忆而离开了苹果公司,他并没有经历苹果公司的堕落,也没有经历乔布斯的回归,更没有经历苹果公司的崛起一举成为市值最高的科技公司。但是,他却因为苹果公司而一举成为亿万富翁。对于他离开苹果后的工作生活,我只能用四个字来评价他:「有钱任性」。斥巨资办音乐会,赔的一塌糊涂,无所谓,用他的话说就是:「是否赚到钱的确很重要,但是举办一场好的演唱会更重要」。

相信大部分工程师都期望能有这样的经历,凭借自己的本事,一举成名,从此笑傲江湖,富成一个「废物」。

3.《乔纳森传》

乔纳森是苹果公司的首席设计师,目前在苹果公司上拥有无上权利,虽然职位上比CEO库克要低,但乔布斯在世的时候公开表达过,除了他自己,乔纳森可以不用听任何人的指挥。

乔纳森来自英国,从小就表现出天才般的设计天赋,其实我并不相信什么天才理论,他和沃兹一样从小就受家庭因素的影响,有一位给他们指引人生的好父亲,父亲对他设计方面的培养贯穿了他的整个童年。当然这所有的功劳,一定离不开他本人对设计的热爱和痴迷,对设计的这份执着和坚持才能使他功成名就。

在学校就已经出名的他,首先就被韦弗集团的董事长看上,接受了韦弗集团的资助完成学业,毕业后,才华横溢的他拒绝了许多优秀公司抛出的「橄榄枝」,遵守了他对韦弗集团的诺言,入职了韦弗集团,担任一名设计师,结果也不出意外,很快一有机会就离开了韦弗集团,天才更加需要的是能挖掘天分的伯乐。后来朋友邀请他加入新创立的小设计公司 -「橘子设计」,因为这个公司,他最终接触到了苹果的项目,进而对工业设计产生了浓厚的兴趣,他初到苹果公司时,正是苹果没落的时候,再优秀的人才,也忍受不了拙劣的企业文化,没来多久他就开始渐渐厌倦,直到乔布斯(他的伯乐)的回归。

后面的事情大家就比较清楚了,乔纳森包揽了苹果所有的产品的设计,iMac,iPhone,iPad,Macbook,开启了苹果卓越的工业设计,使苹果成为一家以设计主导的公司,乔布斯走后,苹果公司一次内部调整,乔纳森除了产品的工业设计外,同时还负责了软件界面的设计工作,从iOS 7开始摒弃了拟物设计,这次他开创了全民扁平化设计时代。

乔纳森在苹果公司能有如今这样的成就,可以说是乔布斯一手促成的。正如他自己在乔布斯追悼会上所说的:

在许多其他的公司里,伟大的想法和设计往往在创作过程中就迷失了。如果不是乔布斯一直支持着我们,跟我们一起工作,冲破层层阻力让我们的想法变成产品,那么我和整个团队的想法就完全没有意义,也没有用武之地。

4. 读书之我见

看完《苹果三剑客》,给我印象最深的人还是乔布斯。乔布斯本人的人生经历就是一个传奇,很难再找到如他一般的人物,沃兹和乔纳森再优秀,如果没有乔布斯这样的伯乐,远远不能达到如今这般的名气。这仅仅是我个人的观点。

我一直认为,是乔布斯成就了苹果公司,而苹果公司成就了沃兹和乔纳森。好多人认为在苹果创立之初,沃兹负责产品技术,而乔布斯负责营销,两个人相辅相成,成就了苹果公司,谁也不能离开了谁。我并不认同这样的观点,在我看来,乔布斯离开了沃兹,日后照样能取得耀眼的成就,而沃兹离开了乔布斯,就不一定能有如今的成就,乔纳森也如此一般。当然我并没有否定沃兹和乔纳森的才华,只是天才是需要被挖掘的,而乔布斯就是那个挖掘天才的人。

阅读更多