在这个信息爆炸的时代,有效地管理您的在线活动已经变得至关重要。作为全球最受欢迎的浏览器之一,Chrome的功能可以通过一系列强大的插件来扩展。今天,我将向您介绍几个精选的Chrome插件,这些插件将帮助您打造一个更快、更智能、更个性化的上网体验。
当您浏览网页时,Adblock 插件可以帮助您屏蔽一切网页和视频广告。这不仅能为您提供一个更加清洁、无打扰的阅读环境,而且还能减少数据的消耗,加快页面加载速度。想象一下,在没有广告打断的情况下观看您最爱的视频或阅读文章,Adblock让这一切变为可能。
对于需要保存网页信息的用户来说,GoFullPage - Full Page Screen Capture 插件是一个必备工具。它可以自动翻页并截取整个网页内容,保存为单一的图片文件。无论是整个网页的长篇文章还是丰富的教程内容,这个插件都可以帮您一键截图保存,简化您的工作流程。
在遇到外语网页时,有了Google 翻译 插件,您可以即刻将网页翻译成您熟悉的语言。它不仅提供了便捷的页面翻译功能,还允许您对选定的文本进行即时翻译,这无疑是探索全球内容的最佳工具。
Proxy SwitchyOmega 插件是一种灵活的网络代理工具,它支持HTTP和SOCKS代理。它让您可以根据需要快速切换代理,不仅方便访问地区限制内容,也为您的网络安全提供了一层额外的保护。
当您在阅读外语网页或学习新单词时,沙拉查词-聚合词典划词翻译插件能够迅速提供单词释义和用例。这是一个非常实用的工具,特别是对于语言学习者和多语种阅读者,它提供了一个即刻的查词和学习体验。
遇到限制右键菜单或者限制复制拷贝的网站时,启用右键 - 允许复制和选择 插件能帮助您解锁这一限制。这对于研究人员和学生来说非常有用,甚至可以在如飞书文档这样的平台上,轻松地选择和复制需要的文本。
篡改猴 插件允许用户通过脚本自定义网站的功能和外观,它甚至能支持解除包括爱奇艺、哔哩哔哩、腾讯视频、优酷等在内的视频网站VIP限制。这是一个为高级用户提供极大自由度的工具,通过脚本可以实现网站的个性化修改。
对于市场研究人员和网站运营者,Similarweb - 流量排名和网站分析 插件提供了丰富的网站分析数据。它展示网站排名、网站流量、来源和地理位置等关键指标,帮助您更好地理解竞争格局和用户行为。
这些Chrome插件将极大地提高您的工作效率和网络体验。他们是您数字工具箱中的宝贵资产,无论您是在研究、学习、工作还是娱乐,都会发现他们的巨大价值。立即尝试这些插件,让您的浏览体验更上一层楼!
]]>Given a string containing just the characters ‘(‘ and ‘)’, find the length of the longest valid (well-formed) parentheses substring.
Example 1:
1 | Input: "(()" |
Example 2:
1 | Input: ")()())" |
1 | def longestValidParentheses(self, s): |
1 | def longestValidParentheses(self, s): |
or
1 | # dp[i+1]表示前i+1个索引最长括号对 |
angularjs项目中引入打包工具gzipper:
将打包命令写入package.json,参考如下:
1 | ng build --prod && gzipper --verbose --level 9 ./dist/my-app //level表示压缩级别:1-9(压缩率依次变高) |
nginx配置支持gzip压缩:
1 | # 在nginx配置http/server/location中加入如下配置: |
打包配置上线验证:
响应header中包含这个说明压缩成功:Content-Encoding:gzip
下图是对比
Angular Build貌似还可以用其他的压缩方式
1 | ''' |
1 | ''' |
1 | import time |
##安装
1 | brew install privoxy |
##配置
1 | vim /usr/local/Cellar/privoxy/3.0.26/sbin/config |
##使用
1 | mac下必须先cd /usr/local/Cellar/privoxy/3.0.26/sbin |
##终端配置代理
1 | vim ~/.bash_profile |
后面终端就可以使用http代理了
###python websocket server实现
- 跨浏览器、跨平台,多种连接方式自动切换
- 功能完善,心跳检测,断线自动重连
- 使用方便,支持room和namespace;
- server和client必须配套使用,不能直接用原生WebSocket
- 回掉方式,在异步化之后,并发处理能力应该不错,
- 因为是原生支持websocket而不像flask需要寻找第三方插件,所以可能更值得信赖
没有用过, github上star 100多,比较少
1 | from flask import Flask, request, jsonify |
目前kong版本 1.3, 使用kong-dashboard v2;
增加api转发 注意upstream_url填ip, 否则可能报502;
增加cors插件,origins=* , Credentials=true;
1 | <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script> |
1 | select * from test group by category_id order by `date` |
结果如下
明显。这不是我想要的数据,原因是msyql已经的执行顺序是
引用
写的顺序:select … from… where…. group by… having… order by..
执行顺序:from… where…group by… having…. select … order by…
所以在order by拿到的结果里已经是分组的完的最后结果。
由from到where的结果如下的内容。
到group by时就得到了根据category_id分出来的多个小组
到了select的时候,只从上面的每个组里取第一条信息结果会如下
即使order by也只是从上面的结果里进行排序。并不是每个分类的最新信息。
回到我的目的上 --分类中最新的信息
根据上面的分析,group by到select时只取到分组里的第一条信息。有两个解决方法
1,where+group by(对小组进行排序)
2,从form返回的数据下手脚(即用子查询)
由where+group by的解决方法
对group by里的小组进行排序的函数我只查到group_concat()可以进行排序,但group_concat的作用是将小组里的字段里的值进行串联起来。
1 | select group_concat(id order by `date` desc) from `test` group by category_id |
再改进一下
1 | select * from `test` where id in(select SUBSTRING_INDEX(group_concat(id order by `date` desc),',',1) from `test` group by category_id ) order by `date` desc |
子查询解决方案
1 | select * from (select * from `test` order by `date` desc) `temp` group by category_id order by `date` desc |
自己例子
复制代码 代码如下:
1 | SELECT * FROM (SELECT * FROM `ecm_copy_goods_change` ORDER BY `cid` DESC) `ecm_copy_goods_change` GROUP BY goods_id ORDER BY `cid` DESC |
1 | pip install grpc grpcio grpcio-tools |
下载第三方proto文件到你本地proto目录,最好把路径都改到一级目录,省去很多不必要的麻烦
生成.pb2.py和.pb2_grpc.py文件:
1 | python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. http.proto |
如果使用目标pb2文件过程中依赖第三方的pb2文件,可以再次执行上面 python -m 生成第三方的pb2文件。
查阅了网上所有的资料都没有看到定制headers的方法,最终在grpc python example代码中发现了一种使用拦截器的方法,有点麻烦,不过能解决问题,如果你发现更方便的方法,麻烦告知我一下,万分感谢,拦截器方法如下:
1 | import grpc |
具体使用过程中可以把header_adder_interceptor抽象出来变成个服务
还有个请求地址的问题,记住https证书只针对域名,不会针对ip,所以地址必须写成域名,本地测试可以把域名到ip的映射写到hosts文件中
1、Java工程师 http://www.imooc.com/course/programdetail/pid/31
2、Web前端工程师 http://www.imooc.com/course/programdetail/pid/32
3、PHP工程师 http://www.imooc.com/course/programdetail/pid/34
4、Android工程师 http://www.imooc.com/course/programdetail/pid/33
5、Linux运维工程师 http://www.imooc.com/course/programdetail/pid/45
GraphQL是API的查询语言和运行时,用于使用现有数据完成这些查询。 GraphQL提供了API中数据的完整且易于理解的描述,使客户能够准确地询问他们需要什么,仅此而已,使API随着时间的推移更容易发展,并支持强大的开发人员工具。
而具体到某个前端页面,可能只需要其中一小部分数据,这样就会增加网络传输量,前端获取了大量不必要的数据。
但随着需求的演进,产品可能会希望加上作者信息(昵称、头像等),这时前端又需要在获取文章详情后,根据其中的作者id字段继续获取作者相关的信息,/user/:uid
然后,需求又变化了,产品希望在加上这篇文章的评论,这时前端需要继续调用/comment/:aid来拉取评论列表
对于Web前端而言,由于ajax技术的存在,这种的请求数据方式,也就开发上稍微麻烦些,并不会造成太大的问题;但对于App来说,渲染的方式不同,必须要拉取的全部的数据之后,才能绘制界面,就会导致这个界面必须要等到所有3个RESTful接口的返回数据都拿到,才能进行绘制。
GraphQL的一些优点
1 | { |
返回:
1 | { |
1 | { |
即使数据结构是独立的,也可以在查询语句中指定上下文,只需要一次网络请求,就能获得资源和子资源的数据(例如,上文中书和作者信息)
1 | { |
代码即文档
GraphQL会把schema定义和相关的注释生成可视化的文档,从而使得代码的变更,直接就反映到最新的文档上,避免RESTful中手工维护可能会造成代码、文档不一致的问题。
参数类型强校验
RESTful方案本身没有对参数的类型做规定,往往都需要自行实现参数的校验机制,以确保安全。
但GraphQL提供了强类型的schema机制,从而天然确保了参数类型的合法性。
看了上面的 query 的例子,你肯定很好奇,graphql 这种看上去好像只为查询而存在的语言,是不是有办法做到修改数据呢?
答案是:能。
仅仅为了使得 GraphQL 这个 data platform 变得更加完整,GraphQL 标准中加入了一种操作符,名为 mutation。因为我觉得这种设计确实比较一般,此处就不举例了,详情见:http://graphql.org/learn/queries/#mutations
如何在浏览器中接受服务端的推送信息是个老生常谈的问题。从最初的轮询,到后来的 WebSocket。如今 GraphQL 也计划引入除了 query, mutation 以外的第三种操作符 subscription,以便于直接接受服务器推送数据。在 2015 年底 GraphQL 官方发布了一篇博文:Subscriptions in GraphQL and Relay 来介绍 subscription 在他们的 iOS 和 Android App 中的应用。可惜的是相关的代码仍未开源,目前开源社区能找到的解决方案目前只有 Apollo 社区为 Node.js 写的 graphql-subscriptions。
针对一对一的关系(比如我上面举例中提到的这个 User 与 UserScore 的关系),在从数据库里抓取数据时,就将所需数据 join 到一张表里。别等着 ORM 框架替你懒加载那些你需要的数据。
针对多对一或者多对多的关系,你就要用到一个叫做 DataLoader 的工具库了。其中,Facebook 为 Node.js 社区提供了 DataLoader 的实现。DataLoader 的主要功能是 batching & caching,可以将多次数据库查询的请求合并为一个,同时已经加载过的数据可以直接从 DataLoader 的缓存空间中获取到。这个话题要是展开说也得写一篇新的文章了,此处不多赘述。
GraphiQL / live demo
使用 GraphiQL 可以很容易地让人感受到“代码即文档”的快乐。
扩展阅读: https://graphql.org/ https://www.howtographql.com/graphql-python/0-introduction/
]]>原始需要识别图片转换成tif字体文件,linux有个convert命令可以转换:
1 | convert test.png num.font.exp0.tif |
1 | tesseract num.font.exp2.tif num.font.exp2 batch.nochop makebox -psm 7 digits |
1 | font 0 0 0 0 0 # 【语法】:<fontname> <italic> <bold> <fixed> <serif> <fraktur> |
tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train
1 | unicharset_extractor *.box |
然后就可以使用shouxie语言库了
tesseract ../shouji1.png stdout -l shouxie
训练语言库可以两种语言混合,有点类似基因结合,另外还可以用一些图片降噪手段来增加图片的清晰度来提高准确率;tesseract很强大,能做很多事情,期待后面能够找到更多的应用场景;
tesseract是一个图像识别库,底层是用C++写的,tesseract支持unicode编码,能够识别100多种语言;
Tesseract支持各种输出格式:纯文本,特殊(html),pdf,tsv,仅隐形文本pdf
1 | mac brew install |
安装成功以后执行tesseract如下图
-psm: 参数是指定文本模式,如果是单行文本可以指定为6,
-l: 参数指定识别使用的语言库,如eng,
查看当前可用语言库:
1 | ➜ ocr git:(develop) tesseract --list-langs |
识别英文例子:
![例子图片]](/uploads/tesseract/tesseract-sample.png)
识别以后:
![识别后]](/uploads/tesseract/tesseract-recognize.png)
识别中文:
![例子图片]](/uploads/tesseract/tesseract-ch.png)
![例子图片]](/uploads/tesseract/tesseract-ch-r.png)
安装:
1 | pip3 install requests-html |
使用:
1 | from requests_html import HTMLSession |
WSGI:只是一种规范,描述web server如何与web application通信的规范,运行在WSGI协议之上的框架有Bottle, Flask, Django ;
uwsgi:是uWSGI服务器的独有通信协议,据说该协议是fcgi协议的10倍快;
uWSGI:是一个web服务器,实现了WSGI协议、uwsgi协议、http协议等;
WSGI 其实是定义了一种server与application解耦的规范;
WSGI server: uWSGI、gunicorn ;
WSGI app:bottle、flask、django、tornado
启动: uwsgi -i uwsgi.ini
重启:uwsgi –reload uwsgi.pid
停止:uwsgi –stop uwsgi.pid
更多:uwsgi –help
1 | from PIL import Image |
1 | java -jar selenium-server-standalone-2.53.1.jar -Dphantomjs.binary.path=/usr/local/bin/phantomjs |
A Conservative
Published
November 19, 2016
in JavaScript
爬虫的终极形态:nightmare
nightmare 是一个基于 electron 的自动化库(意思是说它自带浏览器),用于实现爬虫或自动化测试。相较于传统的爬虫框架(scrapy/pyspider),或者dom操作库(cheerio/jsdom),或者基于浏览器的自动化框架(selenium/phantomjs),他的优势在于提供了一个简洁有效 的编程模型。
###安装
1 | npm install init -y |
###获取cookie
1 | option = { |
gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
###gRPC 是什么?
在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。
1 | pip install grpc |
####编写数据data.proto
1 | syntax = "proto3"; |
####生成客户端和服务器端代码
1 | python -m grpc_tools.protoc -I. –python_out=. –grpc_python_out=. data.proto |
###客户端:
1 | #! /usr/bin/env python |
###服务器:
1 | #! /usr/bin/env python |
有一则段子是这么描述程序员的职业发展:
某编程语言入门 -> 某编程语言进阶 -> 某编程语言最佳实践 -> 架构的艺术 -> 颈椎病康复指南.
每次看到这个段子,我都只是一笑而过,还偶尔给别人讲起逗逗乐。可如今它不仅是一个段子,更像是一则不那么古老的寓言应验了!或许你会说:腰肌劳损、腰椎盘突出、颈椎弯曲这些在程序员圈子司空见惯了。
真相又是什么呢?因为我身边的例子为数不多,我仍然跟之前一样保持疑问的态度。
可不管真相如何,这封邮件却触动了我,让我想写点东西,来分享我平时在做且自认为很有意义的事情。
古人所说知行合一,强调的是认知和行为一致,人们在做一件事情之前首先是要形成一定的认知。比如,我为什么要持续学习?我为什么要花时间去健身?而只有当我的认知中,认识到学习是具备价值,认识到健身是能给我带来益处的时候,我才会自我驱动地去做这些事情,在行动的过程中达到知行合一。
我曾经给一些朋友讲健康饮食、规律作息和运动健身的好处,讲它们对一个人工作生活有多么重要的影响,当他们若有所感地回应我的时候,我会接着告诉他们一些健康的食物、一些规律的作息时间、一些健身的软件和圈子。到最后,我才发现,他们几乎没有改变。一方面,因为他们没有切身体会到这些好处,另一方面,他们目前的生活并没有无法容忍的痛点,偶尔抱怨一下也只是过过嘴瘾。
根本原因在于认知!
最快改变一个人的认知的方式是残酷地摧毁这个人先前的认知。举个真实极端点的例子:某某因为工作长期无节制的饮食和无规律的作息查出胃癌晚期的时候,即便用所有的钱去换回健康也为时过晚,我相信此时ta比任何人都知道健康的重要性,如果可以再来,他一定会摒弃之前所有的不良习惯,好好生活。
另外一种改变认知的方式就是形成一定的基础认知,然后通过身体力行,循序渐进地付出努力去强化自己的认知,最终达到知行合一。
我将从健康饮食、规律作息和健身运动方面去分享一些小知识。一旦形成了这种认知,我们就可以通过养成一些小习惯来不断强化提升,而作为一枚程序员的我也一直在通过这种方式不断地改善自己的工作效率,提升生活质量。
让行为成为习惯
《不抱怨的世界》中介绍了一个21天不抱怨手环,旨在坚持连续21天不抱怨,一旦说出了抱怨的话就将手环从一只手移动到另一只手,并且重新计数。如果你也跟我一样这么想:
不就是21天嘛,小case,看我是如何做到的!
你就大错特错了。因为我一开始也是这么想的,结果…! 至于为什么是21天呢,相信大家耳熟能详了。
看似不长的21一天,连续坚持下来却是一个大大的考验。有了21天培养一个习惯的指导方针,我们应该大胆相信自己能将饮食、作息、运动相关的良好行为培养成习惯,从而决定我们身体的命运(习惯决定性格,性格决定命运)
《黄帝内经》中素问上第一章 上古天真论中提到 “食饮有节,起居有常,不妄作劳,故能形与神俱,而尽终其天年,度百岁乃去”。下面我们就来探讨一下食饮有节,起居有常,不妄作劳的奥秘。
饮食应该持有节制,切勿暴饮暴食或不吃不喝。
不可否认,很多疾病是吃出来的。暴饮暴食和绝食都属于极端的行为。而相比于长期因为营养不足引发营养不良,长期暴饮暴食导致体内毒素积累过度带来的危害更为严重。有人说:我要减肥,必须控制饮食,从而控制体重。
没错,控制饮食是控制体重的最好的方式(另外配合运动更加健康)。也就是经常饿一饿,但饿也是有讲究的,先来看看一些极为不健康的饿法:
日出而作,日落而息描述了淳朴农名的作息规律。记得小时候,父母9点就睡觉了,早上5点多就起床了。
而深居都市的大多数白领,喧嚣的夜生活,睡不起的懒觉,颠倒了自然法则的作息习惯。已经很少有人会去睡子午觉了。何为子午觉:
子时:23:00 ~ 01:00;午时:11:00 ~ 13:00;
夜半子时为阴阳大会,水火交泰之际,称为“合阴”,它是一天中阴气最重的时候,也是睡眠的最佳时机,子时之前入睡有利于养阴;日间午时也是阴阳交会的时候,阳气最盛,称为“合阳”,此时午睡有利于养阳。
子午觉的原则是子时大睡,午时小憩,即晚上在子时之前(23:00之前)最好入睡,对于不得不从事熬夜工作的人,与其一直熬到凌晨3、4点,不如在子时这段时间睡上一会儿,因为这段时间的睡眠效率远远超过其他时间段,夸张点说一分钟等于一小时。午觉则只需在午时(11时~13时)休息30分钟左右即可,因为此时阳气盛,工作效率最好,午睡时间过长,不仅浪费宝贵的时间,而且会扰乱人体生物钟,影响晚上睡眠。但是午睡一定要睡,即便睡不着,也要闭目养神,这样有利于人体阴阳之气的正常交接。
在作息中,子午觉对健康极为重要,它还是一种不花钱的养生方法,睡好子午觉,你的身体多了一层保障了。
不妄作劳,结合新时代有不一样的解读,不要忘记劳作,即要保持运动,也不要过于劳作,即不要运动过量。
回到我们文章一开始说的那封离职邮件,因为程序员的工作性质,绝大部分程序员是长时间对着电脑工作的,加上某些公司存在加班文化,久坐的时间就更加延长了。所以导致了很多诸如腰椎盘突出、颈椎病、肩周炎、腰肌劳损、圆肩驼背等职业病。
那么如何缓解这些问题?除了坐姿端正,注意休息,更要加强运动锻炼。因为运动一方面能够加强肌肉的力量和耐力,另一方面能够活动身体的各个关节,能够有效缓解一个长时间保持一个动作导致局部肌肉过劳。
我平日里听到最多的是我要减肥,将身体的脂肪减掉。好,我就说一个绝对有效且简单的减脂秘方:每天45分钟动感单车。是不是很简单,只用跟着教练跑上45分钟,体脂一定能够降下来。但是有多少人能够坚持去做好这45分钟呢?所以当有人夸赞我是教练的时候,我会告诉他我如果教学员,秘诀只在于两字:
坚持!
问:花钱办健身卡会不会因为不常去导致浪费?
答:已经有很多徒手的运动,比如跑步、HIIT、Tabata、瑜伽、徒手胸肌训练,徒手腹肌、空手拳击、腰背拉伸等;
问:缺乏专业教练的指导会不会练不好?
答:已经有很多软件提供了免费且科学的指导,比如 移动健身教练:Keep、私人瑜伽教练:Wake。
问:有自虐倾向,担心练过火了,身体吃不消?
答:运动健身不宜过度,要以自身身体感觉为依据,不能影响正常的食欲、工作和睡眠。
运动健身无处不在,如果你也有以上三个疑问,不妨利用瑜伽垫 + 4平米 + Keep就可以在家里开创一片健身的空间。当然健身卡能提供更丰富的选择,而能否坚持完全取决于我们自己。坚持两字则包含了深不见底的学问。
食饮有节,起居有常,不妄作劳 ==> 故能形与神俱,而尽终其天年,度百岁乃去。
饮食、作息、运动三者息息相关,相辅相成。三分练,七分吃,充足睡眠不丢失。如果到这里,你已经对它们的认知更进一步了,接下来我么来枚举一下围绕着这三个方面的10个小习惯:
LinkedIn的经历让他了解了职场万象,按他的说法,渐进式的职业规划和冒险创业是可以两全的。他发明了一套独有的职业规划理论,叫做“A-B-Z 职业规划”法则。这虽然也是在做职业规划,但是却强调试验、鼓励不确定性。而且它也不仅仅适合年轻人,对于三四十岁的“职场老人”来说一样适用。所谓的A、B、和Z分别都是什么意思呢?
原文:In Startups And Life, You Need Plan A, B, And Z
A-B-Z 职业规划
A指的是你现在正在做的事情,或者叫主业。比如说它可能是你的专业,是你优势比较集中的领域,你是喜欢它也好不喜欢它也好,现在都得靠它吃饭。用不断的、小小的进步把主业做好当然是属于“敬业”的范畴,不过,当你逐渐的发现你可能需要一个更大的改变的时候,那就是转变到B计划上的时候了。这种转变绝对不是随机的瞎选,而是根据你已经有的经验和知识去看一条新的路径,并且等待这条新的路径逐渐变得清晰。当然,一旦你变完之后,这个B计划就成为新的A计划了。
这个从A到B的过程是最微妙的地方。为了保持决策的合理性,让自己停留在一个安全的轨道上,但同时又不束缚手脚,值得鼓励的方法是去有选择的“赌”一些后果可以收回的小事。既然咱们已经决定要给自己做出些改变了,那走些小弯路是肯定的。不过最好别让他们带来比较永久的损伤。同时我们要想方设法让自己的A计划和B计划逐渐靠拢,让B计划可以帮助到主业上,别变成完全的“不务正业”。
A指的是主业,B自然就是一个潜在的可以去达到自己理想中的目标的另外路径。假如A不管用了,你可以尝试在B上面投入更多的时间。B可以是一个和A同类别的事情,这样的你的技能是可以转移的。也可以是一个新发现的、不同领域的机会。那你怎么知道什么时候应该换什么时候不应该换呢?有些改变比较小,比如说换个部门,但有些改变就比较大了,比如说换工作,甚至完全改变一个行业。说实在,在做出改变之前谁也不知道自己变得对不对。不过,起码在科技领域,一个基本的一般规律是在大潮到来之前行动要比在大潮到来之后行动好。这说明,如果你想去抓住某些机会,就必须得冒你自己很努力的去做,但是结果这个浪头没有来的风险。具体到每件事情的话,该不该跳,什么时候跳都是个人洞察力、直觉、运气等等的融合。
最后,Z是一个保底选项。也就说,假如你的冒险全部都失败了,最差能怎么样?这个问题要想好,因为对于不同年龄不同处境的人保底选项是不一样的。这就是为什么人越年轻他冒险的成本越低。毕竟,我们平常说的所有关于创业的东西,恐怕都是说起来容易做起来难,那是因为他们会带来真正的不确定性,不确定性是最让人害怕的。所以想要解决这一点的方法就是在底下垫一个非常确定的计划。那就是计划Z,计划Z会确保你就算所有其他东西都搞砸了也还不至于露宿街头。它存在的最大意义是让我们对自己能承受多大的失败有个谱,虽然说不管什么样的失败肯定都是让人痛苦的,但是没有计划Z的话可能我们根本就不敢去冒险。
从失败的婚恋网站,到PayPal,再到LinkedIn ,看看 Reid Hoffman这些年
直接启发Reid Hoffman开发出这个ABZ法则的是他自己的职业生涯。值得注意的是,Hoffman和许多硅谷的传奇人物相比恐怕是要“普通”多了。他既没有大学辍学、也不是电脑天才,但是由于他总能敏锐观察自己的职业轨迹,善于辗转腾挪,依然取得了今天的成就。
他在离开学界之后首先创立了个婚恋网站叫socialnet.com。他的朋友Peter Thiel和Max Levchin当时创办了PayPal。出于对好朋友的支持,Hoffman决定把自己的空闲时间都贡献出来,每天在自己的公司工作到半夜,然后给另外俩人打电话去处理PayPal的事情。这种同时做两个创业公司的高强度生活持续了一两年,很快,他的A计划快不行了,网站关门在即,当时他的面前有两个B计划:要不找一份比较安稳的其他的技术工作,要不在第一次创业已经失败的情况下再赌一把,加入PayPal。Hoffman想了想,选了第二个。
PayPal迅速崛起后,后来的故事咱就都知道了。值得注意的是,这个故事还影响到了Reid Hoffman人生的第二次重大决策。2002年PayPal以15亿美元被收购,员工们在发了大财之后都跑去度假了。而他估计是还没从这几年来过山车中的经历中缓过劲来,在澳大利亚的海滩上躺着晒太阳时,突然一拍大腿,发现:“不对!我这些年这么多起起落落而最终不死,就是因为我总是在寻找新机会,并能够灵活的调整方向。现在PayPal刚刚发了大财,但同时也意味着它就完事儿了,现在应该趁着这股劲,利用手上的资源,赶紧再开始一个B计划。”当天晚上他就飞回了硅谷,开始创办LinkedIn。有意思的是,PayPal的好多其他元老们在全世界旅游了一年回来以后,正闲的发慌,结果发现LinkedIn已经在蒸蒸日上了,不禁吃了一惊,后悔他们错过了这一班车…
以下是一些小Tip,让我们在探索自己的航线时尽量提高效率、降低风险:
开始一个兼职小项目(side project)。除非你需要立刻做出一个决定,否则的话一个非常好的开始B计划的方法是给自己一份空闲时间干的事情。比如说,利用晚上和周末的时间来学一个技能,做一份兼职的实习,开一个兼职的咨询服务,等等。我们讲的这个兼职计划和业余爱好等这种完全陶冶情操的活动不一样,它指的是一个有着成为全职工作潜力的事情,只要在时机成熟,你就可以做出转变。就跟Google和3M这样的公司让员工每周花一天的时间在自己觉得有意思的项目上一样,我们完全可以自己个自己也制定一个这样的计划。
人一辈子不管在哪个阶段,都应该把学习作为是对自己最重要的事情。一般来说,世界上大部分人的教育在从学校出来以后就基本上停止了。可能逐渐的他们看电视剧的时间会远远超过充实自己的头脑的时间,人们会投资股票,不会去投资自己。在这个问题上大家可能有不同看法,毕竟人们还是要生活的,钱财也是需要管理的。不过Reid Hoffman建议大家在不管什么时候,应该永远优先选择那些能提高自己能力的活动。(我插一句,这个确实反映了从富兰克林时代就开始的那种美国式的、完全实用主义的勤学价值观)
给自己两个身份,一个人拥有双重身份能带来哪些好处?我见过很多人在做自己的全职商业工作的同时还做一份非营利组织的工作,这两件事情经常能够相互促进。比如说你在一家创业公司工作,然后在空闲时间再组织一个行业协会,协会里遇到的人经常可以给自己的全职工作也带来发展,这是直接第一点比较“有用”的好处。另外,我们也知道这种跨领域的经历是创造力最容易迸发的地方。
还有一个做法,就是试图把完全的“被工作定义的自己”和自己区分开。也就是说,不要用一个工作简历上的描述把自己给定死。比如说,在自己的LinkedIn主页上,大标题一栏可以不要写一个具体的公司的工作,而写自己的职业总体方向和追求。这是因为,如果你只关注某个人现在在做什么工作,那你可能会漏过很多这个人身上其他的价值。比如说某人是大公司高管,但他同时也很有可能是一个天使投资人。自然,我们在对外展示自己的时候也应该努力展示多个方面,因为人们会用同样的方式来看我们。
]]>