豪翔天下

Change My World by Program

0%

当我搬新家的时候我看了《怦然心动的人生整理魔法》,当我寂寞孤独的时候遇到了《岛上书店》,当我开始决定学习投资的时候又来了《富爸爸,穷爸爸》,不知道是我选择了书,还是书选择了我,缘,妙不可言。

此书是以主人公的视角来教育我们重新审视金钱的,看到最后,故事已经很模糊了,我基本记不清,但是故事的转折点,以及富爸爸穷爸爸的教育对比却是那么的让人印象深刻。罗伯特无疑是非常幸运的,有一位不直接给钱而是直接教他怎么挣钱的爸爸。我不一样,或者说我们这个国度,我们这一代人,都不一样,我们的社会还没发展到那种程度。我们从小接受的教育就如穷爸爸那样,好好读书,找一份好工作,勤俭节约,好好存钱,最终就能过上幸福的生活。这种说法有错吗?当然没错。即使是在发达国家,这种观念也是没错的。我虽然喜欢平平淡淡的生活,但是我并不喜欢千篇一律的生活。生活总得来点刺激,不是吗?

阅读全文 »

目前项目中遇到一个需求,需要私有云在单独机房下的实例数量。需求本身很简单,最简单的做法就是给每个机房添加一个单独的字段表示最大配额。但是在和团队一起碰撞下,一致认为这个需求的背后可能会有无数个奇葩的需求。想象一下,今天想要限制机房下的实例数量,明天想要限制某种实例的数量,后天又想限制某个机房某个环境的实例数量……这一个需求能够衍生出无数的类似的需求,所以我们决定做一个相对通用的方案。经过两天的思维碰撞,我把这个想法总结了一下。

其实可以把这个配额管理的场景在抽象一下,主要的难点就是需要在有多个不同限制条件(不同的字段)的情况下,随机组合条件进行搜索。想了那么久,现在记录下来的时候,却突然感觉那么简单了。基本的数据结构如下:

1
2
3
4
5
6
7
8
target_id: 目标主体的id
target_type: 目标主体的类型
pattern: 多个条件的组合
pattern_type: 被限制目标的属性的类型
privority: 优先级
min: 最小值
max: 最大值
remain: 剩余值

这里的target_type是指我们要限制的目标的类型,而pattern_type是指我们要限制目标的属性的类型。比如我要限制总共有几个机房,那么target_type就是指机房ROOM,而pattern_type就是指数量MOUNT,再比如要限制机房的实例的数量,那么target_type就是指机房ROOM,而pattern_type就是指实例INSTANCE

最大值最小值剩余值都不用解释。如果业务简单,最大最小值可以仅仅用一个limit字段来表示,remain也可以直接在需要的时候直接查询数据库count一下。

最重要的是pattern字段,我最先的设想是每个限制条件都被表示为数据库的一个字段,如果没有该值则为空,查询的时候直接用SQL的OR来进行筛选。但是我同事有更好的想法。仅仅用一个字段来表示条件,多个不同的条件用分隔符分开。pattern_type为实例的时候,条件可能为磁盘类型、系统类型和环境类型,那么这三个条件组成一个序列:disk:system:env,如果仅仅限制disk那么可以存储成disk:ALL:ALL,这里用ALL代表该条件不对该条件进行限制;如果限制diskenv,那么可以存储成disk:ALL:env。最后在实际搜索时使用正则匹配一下即可。这种实现方式相当于用target_typepattern_type来唯一确定pattern的样式,这样不同type的条件可以放在一个字段中,也就规避了不同配额类型限制条件不同造成的增加表或者增加表字段的局面。

这只是目前的一个初步构想与实践,满足我们当前的需求当然是绰绰有余了,不过是否能入我们预期的那样满足今后的一些变态需求,就要看时间的考验了。

基于AngularJS进行的封装,性能中等。

ionic开发环境部署

ionicapp主要使用命令行进行构建并使用Cordova用来构建和打包。首先安装NodeJs,然后在ionic官网注册一个账号

1
2
3
4
5
6
npm install -g inoic cordova	# 安装命令行工具
ionic start test # 创建一个测试项目,期间会提示你登录你的账号
ionic start test tutorial # 最后一个参数可以新建默认的模板项目,例如tabs表示3个tab的layout(默认选项),sidemenu、blank、super、tutorial
cd test
git push ionic master # 初始化项目完成后按照提示进行push操作,push到ionic的控制台里面去
ionic serve # 自动打开网页,第一个项目能跑起来了

此时可以去ionic的控制台查看该项目的信息以及设置一些自动构建相关配置了。但是目前只能在web端访问,如果想要生成ios或者android平台的项目还需要安装单独的工具:

for ios

1
2
3
xcode-select --install	# 安装xcode命令行工具
npm install -g ios-deploy # 安装ios部署工具
ionic cordova run ios # 即可自动打开模拟器

ionic ios

Ionic常用项目结构

基本配置

可以自己创建一个全局的配置文件,类似koa2

1
2
3
4
5
6
7
8
# vim config/index.ts
export default {
"option1" : "option1 value"
};

# 使用方法
import Config from '../../../config';
console.log(Config.options1);

API

Controller可以直接在page的构造函数中自动注入,例如

1
2
3
4
5
6
7
8
import { ModalController } from "ionic-angular";

constructor(public modalCtrl: ModalController) {}

createModal() {
let searchPageModal = self.modalCtrl.create(myPage, {origin: self.origin});
searchPageModal.present();
}

ModalController

模态框,弹出层。

1
2
3
4
5
6
7
8
9
const profileModal = this.modalCtrl.create(Profile, { userId: 8675309 });
profileModal.present(); // 展示出来,一般从下方往上滑动

@Component(...)
class Profile {
constructor(params: NavParams) { // page之间传递参数
console.log('UserId', params.get('usreId')); // 获取参数
}
}

主要负责导航的controller。包含有如下一些属性

1
2
3
# 生命周期函数(肯定是在page的constructor之后才会触发这些的)
ionViewWillEnter: 进入整个页面将要激活的时候触发
ionViewDidEnter: 当整个页面都载入完成过后并且激活后触发

ViewChild

可以使用@ViewChild获取Nav组件的一个实例。例如

1
2
// html中有<div #container class="post_container"></div>,定义了一个container,可以在ts中这样获取,定义该元素为ElementRef元素。
@ViewChild('container') postContainer: ElementRef; // ElementRef是Angular的知识,主要用于封装不同平台下视图层中的native元素。ElementRef.nativeElement就可以获取元素本身,之后就可以进行操作了,例如postContainer.naiveElement.style.backgroundColor。可以拿来当做jQuery中的$(this)了

ViewController

视图控制器。可以控制当前页面的显示。

1
this.viewCtrl.dismiss();	// 关闭当前page

UI组件

Button

按钮组件。

Content

ion-content

最基本的内容组件。

SearchBar

搜索框。

1
2
3
4
5
6
<ion-searchbar (ionInput)="getItems($event)"></ion-searchbar>
<ion-list>
<ion-item *ngFor="let item of items">
{{ item }}
</ion-item>
</ion-list>

SearchBar

搜索框。

Tab/Tabs

标签页,一般是位于页面底部,Tabs内部的元素就是Tab。需要注意的是,只有在控制器里面定义了ion-tab的root页面,页面才会显示,否则不会显示tabs。默认的tab的[root]属性至少填写一个,不然会空白或者全黑

如果每一页都有底部的tab,最好让app的rootPage直接设置为BasicPage

AngularJS组件

HttpClient网络请求

要发起网络请求,首先去要添加对应的module,在app.module.ts里添加

1
2
3
4
5
6
7
8
9
10
11
import { HttpClientModule } from "@angular/common/http";
@NgModule({
declarations: [
MyApp,
],
imports: [
BrowserModule,
HttpClientModule, // 这里添加该Module
IonicModule.forRoot(MyApp)
],
})

常用插件推荐

TroubleShooting

  • ion-tabs 不显示,显示空白或者黑色,或者ion-tabs empty blank:默认的ion-tab[root]属性必须填写,而且不能设置为null

  • SearchBar无法自动设置setFocus(),setFocus() not working临时解决方案:

    1
    2
    3
    setTimeout(()=>{
    self.searchBar.setFocus();
    },100);
  • Cannot find module ‘@awesome-cordova-plugins/core’ or its corresponding type declarations: 很多ionic的插件会包装一层awesome,此时需要将该包给撞上npm install @awesome-cordova-plugins/core --save

  • No installed build tools found. Install the Android build tools version 19.1.0 or higher.: 尝试export ANDROID_HOME=~/Library/Android/sdk && export PATH=${PATH}:${ANDROID_HOME}/tools && export PATH=${PATH}:${ANDROID_HOME}/platform-tools && export ANDROID_SDK_ROOT=~/Library/Android/sdk,但是我遇到了另外一个奇怪的问题,无论我怎么设置环境变量,代码里面得到的ANDROID_HOME都是/opt/homebrew/Caskroom/android-platform-tools下的,所以我直接在cordova.gradle文件里面的getAndroidSdkDir写死了envVar的值

  • FATL ERROR: Ineffective mark-compacts neara heap limit Allocation failed - JavaScript heap out of memory: 尝试执行 export NODE_OPTIONS="--max-old-space-size=8192"

you-get,强大的视频网站下载工具。与aria2相比,其功能主要用于音视频网站内容的获取,通过音视频网页的url链接直接下载媒体内容,几乎支持所有国内外的主流视频网站(例如: youtube、优酷、Bilibili、爱奇艺等)。这里的视频链接不是指真正视频的链接,而是视频网站的url即可,即使视频网站使用了各种方式混淆也能进行快速下载。使用它无论下载什么网站的视频都能达到满速下载,下载youtube也能几十兆每秒的速度(当然得有能慢速的代理)。

需要注意的是,you-get也可以用于其官方没有列出的网站的视频下载,但是无法保证速度和下载稳定性,建议对于其他的网站,使用aria2工具进行下载

安装you-get

1
2
3
4
pip install you-get

# 最好安装ffmpeg依赖,否则很多网站视频是获取不了,目前最新稳定版是3.3.4
sudo apt-get install ffmpeg

you-get命令用法

1
2
3
4
you-get '视频链接'		# 最简单的下载
you-get -i '视频链接' # 列出视频信息,可以看到该网页提供的视频的信息,一般默认的就好,但有时候也有更高清的可供选择,通过这种方式可以获取其itag,然后用下面的方式进行下载
you-get --itag=127 '视频链接' # 下载指定质量的视频,国内网站一般默认就是最高清的,但是国外的还有更高清的
you-get -x 127.0.0.1:8118 '视频链接' # 设置http代理

###you-get代码用法

和众多其他命令行工具一样,you-get同样支持在代码中直接使用

1
2
from you_get.extractors import *	# 可以获取到各个网站的下载器
download_urls([url], title, 'mp4', 0, './videos')

这是一本在去年非常火的一本书,朋友圈都在晒,仿佛一夜之间大家又变成了喜欢读书的人,或者,朋友们也都如我一样,在这世间,孤独寂寞地走着。
这本书的翻译水平感觉有点儿不尽人意呀,不过也说得过去,毕竟,这本来就是一本讲书店的书,书中每个章节的开始也都是引用一本书的内容,里面自然有很多难以翻译的“书中书”了。不过,此书原名The Storied Life of A. J. Fikry,把它翻译成岛上书店,这一个翻译是非常值得表扬的,如果只是直译过来,我想,这本书在国内并不会收到那么多关注。故事情节可以给到8分以上,非常不错,环环相扣,并不如评论里所说那样看到前面就能立马才到后面,此书是到全书的后半段,才慢慢解释来龙去脉,最后结局也是非常精彩的,大家都走出了自己那困惑的人生。虽然主人公最后死去了,但是岛上书店的故事却会一直持续下去。这本书的前面四分之一算是比较无聊的叙事,也没有什么波澜,所以如果你在只看了一点点的时候千万不要放弃,相信我,这本书的后半段会让你爱不释手的。
我们每个普通人的一生都会有或多或少的低谷,我们总是沉浸在其中无法自拔。人到中年,当觉得自己并不能拯救这个世界,第一次发现自己只是一个普通人的时候,我们都曾痛苦过。但是请再坚持一下,不要像AJ的前两年那样用酒精麻醉自己,我们需要的是希望,这世界上总会有人给你带来希望,不是每个人都能像AJ那样有玛雅相伴,但是我们每个人都不是孤独的。我们有朋友、有家人、有恋人,我们痛苦的时候他们也会痛苦,不如勇敢一点,爱得更用力一点,别像那种生活低头,生活总会慢慢好起来的嘛。

最近年轻气盛、心血来潮、突发奇想地决定去分析一下特定类型电影的数据,我的爬虫技术自我感觉还算不错,但是爬取数据来具体该如何分析,我只能算是个新手。

练手的具体网站就不说了,总共有36956.avi条数据,总共发送约4000个请求,切换了上百个代理,不得不说,在同类型网站里面,该网站的的反爬策略算是中规中矩的。以下是我对本次爬取数据的基本描述与简单分析:

基本数据
statistics
总数量 36956
总大小(G,我可不会下载) 940
总时长(hour) 9688.56
总观看量 2,418,738,994
排行数据

观看量排名前十的影片:

观看量排名前十的影片

观看量排名后十的影片:

好评率排名前十的影片(这个指标基本上不能代表什么,该网站没人评分少的基本上都能很高,评分算法有问题):

时长排名前十的影片(强撸灰飞烟灭,应该没人看完):

词云

最后来一个词云(分析就不言而喻了,重口味,绝对的重口味)

总结
  1. 此次爬虫所使用的技术比较简单,Python3.6做主要的程序语言,requests做curl请求,jieba中文分词做标题分词提取,skydark/nstools的繁简转换,amueller/word_cloud做词云图片。
  2. 有些东西确实看得越多,越重口
  3. 我终于知道网上这类网站的分析为什么那么少了,我得去补补了。

“懂得很多道理,却仍然过不好这一生”,这是我唯一一次独自去看的电影《平凡之路》的经典台词,这句话从那时起就一直激励着我去思考: 为什么很多人懂得很多道理,却仍然过不好这一生呢。当然,这句话本身也算是一个道理吧。

我们这一辈子,直接听来的道理最多的肯定是来自父母。从小到大,他们孜孜不倦地给我们讲着那么多道理。小时候觉得他们很聪明、很伟大,懂得好多好多,日子也过得很不错;现在我依然觉得他们很伟大,但是,并不聪明,他们所说的那些道理,在劝慰别人的时候,我也可以信手拈来,毕竟我也是一个“饱读诗书”的大学生。爸每次喝醉酒都会和我聊很多很多,我喜欢听他聊国家大事,喜欢他聊过去的事情,但是最不喜欢他聊那些大道理。在他心里,自己一直是一个失败者,这一辈子没挣到什么大钱,二十几岁结婚开始就一直贷款过日子,三十几岁才把家里房子修好,四十几岁才买车,无论是吃饭还是喝酒都比不过自己的朋友。随着年龄的增长,有了自己的价值观,我和他也总是在很多问题上争吵。不过,即使是我现在独自生活了,在我眼里也还是有好多好多的问题,只有他才是我最好的导师。比如前几天,在买车的这个问题上,我肯定是要先问问他这位三十几年的老司机啦。我执意要买一辆合资的二手车,他却说二手车完全不值那个钱,还说了一大堆的道理。当然和以前一样,每次我以理科生的思维跟他讲道理就会跟他吵起来,因为他总会平白无故地说我什么都不懂。我问他他到底知道多少买这种车被坑的,能不能举例说说各种可能的情况,当然,我只得到一阵谩骂,每次一他这么骂我,我就知道他其实并不懂了。他们这一代人,喜欢用经验从事,并且喜欢用理所当然的经验办事。和他吵并不是因为叛逆,只是想,难道,所谓的人生经验不应该是亲身经历过才会有的吗,“连世界都没观过,哪儿来的世界观”呢。我没经历过,我最亲近的人你也没经历过,为什么你就觉得这些道理是对的呢?

道理这些东西,谁都懂,但并不是谁都能去做,去做的也并不是谁都能做到,很多人只当它们是废话,但是却总是爱拿这些废话去教育别人。这就是人性的弱点。知道得很多,但是知而不行,知行不一,不也相当于完全不懂吗。用现在的说法,就是懒,执行力差,看到一个道理,等几天就忘了;有一个梦想,却一直拖到忘记。真实的世界,没过好这一生的人才会有很多道理。王健林的道理很简单,先有一个小目标;马云的道理很简单,想做就做,永不放弃;比尔盖茨的道理很简单,有梦想,就用一辈子去实现。但是,每个胖子都有很多减肥方法,每个体弱多病的人都有很多方法健身,每个loser都有一万种成功的方法。我自己的人生我还是想要自己去走,更多的道理我也想走过才能理解得深刻,请放心!

很多次,我都不知道该怎么写这么一篇文章,到底该怎么写才不至于把自己搞成一个不懂事儿的孩子。其实,上大学以后就开始怀念以前老爸老妈吵我的样子,现在我们几乎不吵架、很和谐,但是再也回不去了。偶尔和爸妈吵一下,其实蛮开心的,虽然可能会让他们血压升高,但是他们平淡的后半生,没准也想回味回味从前骂我的样子呢。

相比于强大的wireshark来说,Charles的功能算是十分局限了,因为Charles只能用于http/https的抓包。但是术业有专攻,Charles的体验比wiresharek好了好多倍。之所以最近要用到Charles,是因为wireshark的https抓包比较鸡肋,设置复杂,不同的电脑可能抓取不到想要的结果。所以我选择了Charles,当然是试用版啦,能试用30天,试用期以后能正常使用,不过每次试用不超过半小时,超过后不保存就退出了,有点儿恶心。WireShark的原理是监听网卡,而Charles的原理则是非常简单的设置代理。其主要的特点有:

  • 抓取https和http,外观展示类似postman,十分详细并且结构化
  • 能改变请求的内容
  • 能改变响应的内容
  • 能模拟弱网环境
  • 能做压力测试

Charles的基本设置

  1. 点击菜单Proxy -> Proxy Setting,设置Http代理
    Http代理设置
  2. 系统代理设置
  3. 安装Charles的证书: Help -> SSL Proxying -> Install Charles Root Certificate,安装证书,并完全信任该证书
    Mac 钥匙串管理
  4. 虽然设置了ssl证书,但是默认并没有对每个请求开启https的抓取,还需要针对单独的请求进行选择,在请求上面右键选择SSL Proxy: Enabled, 注意这里我不知道为什么,我在mac上右键的时候必须把键盘按下去才行

Charles抓取移动端设备iPhone过程

  1. Mac上开启Wifi热点,或者连接到统一局域网

  2. 手机连接Mac的Wifi,在wifi详情的最下面设置http代理,代理地址即使路由地址,也即mac的地址

  3. 选择Help -> SSL Proxying -> Instanll Charles Root Certificate on a Mobile Device or Remote Browse。在移动端上面安装,下载后需要再设置APP里面搜索描述文件就能找到已下载的描述文件了然后点击安装即可

  4. 这样和mac端一样进行抓取。抓取示例:

TroubleShooting
  • Charles的网络出现不可描述的问题: 关闭系统的其他代理,例如vpn和ss。
  • 想要解开所有的HTTP/HTTPS请求?不可能的。:移动端不像web端,能够看到所有的源码。如果对post的data进行加密,即使是HTTP也不能解开。当然移动端也有apk包反编译的工具,但并不是每次都能成功,所以和web端爬虫更相似的一种万能方法是模拟真机操作。我的想法是使用安卓模拟器,然后在上面进行点击操作,这一点我正在试验。
相关文章

Charles 从入门到精通

推荐一个动漫网站JA日本动漫交流平台,没有这个网站,我也不会想着去找这个好用的工具(看动漫看电影还是支持正版,不过由于某些众所周知的原因,我们有时候没有选择)。该网站是通过google drive进行传播,你可以将文件保存到自己的google drive里面去,然后使用rclone工具进行下载,在没有使用代理的情况下,速度也还是客观的,各方面压制垃圾百度云。百度云上几百G的文件我同步下来花了两周,还是用的aria2,不用aria2的话,基本没有速度。

rclone支持Google Drive, Amazon Drive, S3, Dropbox, Backblaze B2, One Drive, Swift, Hubic, Cloudfiles, Google Cloud Storage, Yandex Files,不仅支持主流的几个云盘,而且支持几个主流的对象存储平台。软件本身支持跨平台的安装使用。

rclone安装

直接参考官方文档,包括了Linux,MacOS以及源码安装方式

rclone配置

通过rclone config命令可以进行交互式的配置,参见官方文档

代理设置

只需要设置环境变量HTTP_PROXY或者HTTPS_PROXY或者NO_PROXY即可,例如export HTTP_PROXY=127.0.0.1:8118

rclone使用

假设上一步添加配置时候取的名字叫googlegoogle drive里面有目录叫test

1
2
3
4
5
6
7
8
9
10
# 通用参数
-P 打印进度

rclone ls google:test # 列出远程目录下的所有文件,斜杠/表示列出所有文件
rclone lsd google:/ # 列出远端所有文件夹
rclone copy -P google:Google相册 相册 将远程目录下的所有文件同步到本地
rclone size google:Google相册
rclone sync -v google:test ./ # 将远程目录下的所有文件同步到本地
rclone mount google:test /path/本地目录 # 将远程目录直接挂载到本地,这一步就和很多的同步盘差不多了。我有个猜想是这个能拿来备份timemachine。远程的文件会显示在挂载的目录里面,但是不会下载,只有使用的时候才会下载,使用起来方便,并且节约本地资源。需要注意的是,这还只是个实验功能,可能会不稳定。我使用起来唯一的不爽是不能选择下载下来。
rcloen copy google: google1 # 直接两个网盘之间对拷文件,并且不会经过本地,真的是太方便了。

万万没想到,数据在这个世界中的地位从很早很早以前就那么重要了。作者所说的“用理工科的思维理解世界”,主要就是在讲数据。真实世界中有很多的规律或者是定律,在人类发现他们的时候,其实早就存在,只是科学家们用大量的数据来总结与归纳出来的。

说到弱联系,这也是第一次在书中见到的一个概念,不过和以前的二度人脉,三度人脉相似。但是以前只知道这种关系在社会上办事情可能会对自己有很多的帮助,从没想过对自己的提高也会有那么大的影响。这就像微博和微信的区别,在微信里面基本都是认识的朋友,人生观价值观以及所处的环境都比较接近,然而弱联系给我们的帮助则更大,认识不同的人,接触不同的社交圈子,向不同的人学习,经常修正自己的观点,弱联系比强联系更有用。我发现我总是迈不出去那一步,只和自己熟悉的人联系,和不熟悉的人实在不知道怎么开始,如果我能在与人交流上刻意练习一万小时呢。

另外,本书是我今年第三次看的有提到“一万小时天才理论”的书籍,并且同样地,提出了一个观点,一万小时并不是瞎忙乎一万小时,而是真的刻意地去练习才能有所收获。如果不是可以联系,写百万行代码也拯救不了一个砌砖的程序员。

语录

人做判断的时候有两种机制:一种是“科学家机制”,先有证据再下结论;一种是“律师机制”,先有了结论再去找证据。

给观众想要的东西,比给观众事实更能赚钱。观众想要什么呢?娱乐和确认。观众需要你的新闻能用娱乐的方式确认他们已有的观念。

要主动刻意地消费,吸收有可能修正我们观念的新信息,而不是吸收对我们现有观念的肯定(Consume deliberately. Take in information over affirmation.)。

问题的关键是随机分布不等于均匀分布。人们往往认为,如果是随机的,那就应该是均匀的,殊不知这一点仅在样本总数非常大的时候才有效。

你可以在所有的时间里欺骗一部分人,也可以在一段时间内欺骗所有的人,但你不可能在所有的时间欺骗所有的人。”

凡事都有目的,是普通人思维区别于科学思维的根本之一。

你要敢于做一些社会上通常认为不应该做的事。你不是去适应这个社会,而是让这个社会去适应你。他们追求取胜,他们根本不追求别人的喜欢。

真正提升我们水平的不是文化,不是艺术,不是哲学,不是制度,不是自虐,而是刻意练习。

真正的练习不是为了完成运动量,练习的精髓是要持续地做自己做不好的事。

心理学家把人的知识和技能分为层层嵌套的三个圆形区域:最内一层是“舒适区”,是我们已经熟练掌握的各种技能;最外一层是“恐慌区”,是我们暂时无法学会的技能,二者中间则是“学习区”。

在舒适区做事,叫生活;在学习区做事,才叫练习。

如果你的一切思维都围绕着“这么做是对的”进行,就不会再去从别的角度看这个项目。

所以,一个人爱好什么,喜欢干什么,能死心塌地地在什么方向上刻意练习,基本上是天生的。

找不到,未必是这个人不行,更大的可能性是整个环境都不行。

想象力和知识是天敌.人在获得知识的过程中,想象力会消失。因为知识符合逻辑,而想象力无章可循。

从读书的角度看,世界上有两种人。 一种人读书是为了掌握技能,通过各类考试,或者纯粹是为了娱乐。另一种人读书却是为了提升自己的内力。这两种人最初的“智力”水平未必有多大差别,但是假以时日,他们的“智慧”水平将会有天壤之别。只有后一种人,才配被称为“读书人”。

谚语说,If it works, don’t fix it! 只有落后者,光脚不怕穿鞋的,反而可以冒这个险。冒险至少还有赢的机会,不冒险就输定了。 这就是为什么本文不说创新是落后者的“权利”,而说,创新是落后者的“特权”

人生面临着一个风险悖论。如果你一辈子谨慎小心,干什么事情都谋定而后动,你的生活再差也差不到哪去;而如果你勇于承担风险、大胆尝试,你可能会特别失败,但也可能特别成功。那么平均而言,我们到底应该更冒险一点好,还是更谨慎一点好呢? 根据2011年发表在《自然》上的一篇论文[4],答案是冒险更好。生活中有自信和不自信的人,还有一种过度自信的人,他们过高估计了自己的能力,尝试去干一些比他们水平高的人都不敢干的事情,而这种人却往往能够侥幸成功。而且平均而言,他们比能正确评估自己能力的人更成功。

结果发现越是成功的企业家,其无名指相对食指就越长,那些最成功企业家的无名指要比食指长10%,甚至20%!

所以,决定一个人喜不喜欢竞争的重要因素之一,是睾酮水平。

研究者认为生理因素大约只能解释40%到60%的竞争力,后天教育和文化传统仍然有作用。

哪怕这个问题是全新的,在大多数情况下我们也能用旧的知识解决它。掌握科学知识的人有凭借理论推导就能破解世界的力量。

我非常钦佩研究者们做这个研究的勇气。他们既没有受到“主流科学”的影响,也没有受到宗教的影响,他们既不相信有神论也不相信无神论,他们只看证据。

所以这个研究的一个重大意义就是告诉人们:哪怕你关心的是“灵魂转世”这样的问题,你唯一正确的判断办法仍然是科学方法。

科学家不从绝学出发,而选择从证据出发的根本原因不仅仅是科学尚未达到找到绝学的程度(物理学家仍未找到统一理论),更是因为就算有绝学也无法解决所有问题。

科学放弃了从一套最基本的哲学出发推导所有结论的尝试,改为在每一个领域内就事论事地搜集事实。

好的科学除了能证明因果关系之外,还必须有一个机制,得能解释为什么会有这种现象。

但探索未知最基本的科学方法是证据,然后谋求建立因果关系,然后是提出机制。

谨以此文标题纪念王小波。他曾经在这个标题下讲述过类似的道理。可惜大多数人只记住了他文章的结论和价值取向,而没有学会他使用的方法。

你不能说“我看到这个现象,而你们解释的不对,所以它一定是个新东西”。全世界的实验室中可能每天都会产生一些看上去不太对的实验结果,它们中的大多数是……不对的。

科学是成年人玩的东西。我认为抱着谦卑的情绪去“仰望科学”是个错误的态度,正确的视角应该像下棋一样,是俯视。