/images/avatar.jpeg
写过点代码读过点书

理解国际冲突

最近读了《理解国际冲突》这本书,教科书式的书写风格。王二太年轻,资历尚浅,所以有些章节读的昏昏欲睡,但是这本书仍然带着很多好货,特别是思考国际问题的通用框架-三个层次分析法,写的相当精髓,以下做一个简单的阅读分享: 一、安全困境 在无政府状态下,一个国家追求安全的独立行为可能导致所有的国家更不安全。正如伯罗奔尼撒战争的根源,乃是雅典力量的增长及其引起的斯巴达的恐惧。(这里的无政府状态指主权国家之上没有更高一级的权威) 二、思考国际问题的框架——三个层次分析法 三层次分析法由肯尼斯·沃尔兹(Kenneth N.Waltz)教授在《个人、国家和战争》(Man, the State, and War)一书中首先提出。这三个层次分别为:个人、国家和国际体系。个人层面指决策者的个人性格倾向,国家层面指国家的国内政治情况,国际体系指当时的国际社会的政治体系。 三、第一次世界大战的起源 用三个层次分析法来分析: (1)、在机构层次上:德国的崛起和同盟体系的僵化。 原因: 民族主义的兴起 人们对和平产生了自满情绪 德国的政策是含糊不清的 (2)、在国内社会和内部政治的层次上:一个正在衰落的奥匈帝国和奥斯曼帝国的内部危及,另一个是德国的国内政治形势。 (3)、在个人层次上: 奥匈皇帝是一个疲惫的老人,受康拉将军以及表里不一的外交大臣左右 俄国沙皇尼古拉二世是一个与世隔绝的贵族,深受其多病且神经质妻子影响 德国皇帝是一个有很强自卑感、脾气暴躁的人,特别情感用事 王二认为,民族主义不是坏事,但是不要让民族主义裹挟着政府行事。和平来之不易,国家虽然强大了,导弹精度提高了,五对负重轮也变六对了,我们的腰板也挺直了不少,但也不要想随便弄你弄他的。 四、因果联系的复杂性 由于因果具有复杂的特性,所以人们容易在考虑不清因果联系的情况下,把两件看似有关但实则无关联的事情画上连接符号,做出不明智的选择。比如“汉堡包论调”,认为自己在学校餐厅少吃肉就能一定程度上缓解世界粮食短缺的问题,其实不吃汉堡包生下来的粮食并不能到达孟加拉饥民的受众,反而会引起美国市场的商品过剩,更可能引起国内市场价格下跌、农民减少产量等一系列影响。所以,没能看到因果联系的复杂性,可能会使处于良好意愿的行动与其结果向背离。 就像之前砸日系车、堵在肯德基门口不让别人进去吃饭,我们的同胞的出发点是好的,但是实现方式上出现了偏差。不是我们这边一砸,日本就经济危机了,不是我们不吃肯德基,美国就发不出军费了。好好工作,努力创作税收,要比上面的方法强多了。 五、相互关联的误导性 相互关联的现象并不一定包含真实的因果关系。例如活在和救火车的出现显然是相互关联的,但是我们不能认为救火车引起了火灾。认为民主国家之间不会发生战争也是这样的思维模式在作怪,因为这个现象之所以会产生的原因也可能在于,民主国家一般是富裕国家,而富裕国家倾向于从事贸易,而根据贸易自由主义理论,富裕国家不太可能交战。即不能简单地有现象引到一个结论,现象有可能与和他最近接的结论并不一致,而是拐了很多的弯,从而和其他结论相连接。 举个例子: 六、什么是民族主义,什么是民族? 构建主义者指出,民族的概念是不确定的。按照字典的解释,民族就是声称具有一样认同和有权建立国家的一个群体。但是,它包括哪些群体呢?一样的认同之根源又是什么呢?一种观点认为,民族指在族群上相似的群体,可是美国人尽管在族群上是多样化的,他们仍然属于一个民族。另一种观点认为,民族是有共同语言的的群体,可是瑞士人尽管在语言上是多样化的,但他们仍然同属一个民族。还有人认为,宗教是民族的基础,某些国家,比如以色列和巴基斯坦,是建立在宗教认同的基础之上的。 关键问题是,虽然一个具有一样的认同的群体称自己为一个民族,但是这种认同的根源并不是单一的,而是多样的。法国思想家欧内思特·里纳指出:“民族的核心因素在于,其成员有着很多共同的东西,但同时他们也一定忘却了很多东西。”民族有时候也会被称为“想象的共同体”,因为名族的成员太多,大家相互之间大都不认识,想象起了很大的作用。 民族主义概念很难被界定,因为民族主义既是一个描述性的词,也是一个规范性的词。如果一个词既具描述性,又具规范性,那么它就会成为政治词汇,被应用于权力斗争之中。事实上,民族主义已经成为当代世界中国家合法性的重要源泉。 七、不同群体对政治词汇的使用动机 对于一个政治词汇,例如“民族主义”、“帝国主义”或者“全球化”之类的,他们实际上都是含义不清的,人们对他的理解往往也是五花八门、相互矛盾的。政治家和分析家使用政治词汇的动机不一样。政治家希望自己的追随者越多越好,所以他们倾向于使用模糊的语言,并且极力造成一种体现大家共同利益的印象:“我们都在一条船上,大家必须相互合作,都要听我的。”在另一方面,分析家则关注相互间的区别,以便更地理解世界。他们强调,好与坏的问题有程度大小之分。分析家指出,我们所乘坐的那条船可能只是朝着一个人的目的地行驶,或者说一个人划船,另一个人掌舵或免费搭乘。 八、新闻记者、史学家、纪录片编剧会有选择的叙述事实 新闻记者、史学家、纪录片编剧大部分时候不会说假话,他们会用事实来陈述正在发生的问题,但他们不会告诉我们在选择事实的时候所遵循和隐藏的原则。 九、1973 年石油危机期间,美国为什么没有像伊拉克战争一样在中东使用武力? 文中提到了一个有趣的问题:在 1973 年石油危机期间,为什么世界上最强大的国家竟然允许大量的美元流向弱国,而不使用武力呢?如果它发生在 19 世纪,那么富国就会使用其占优势的地位和军事权力,把制造麻烦的地区变成自己的殖民地,并且根据自己的意愿解决问题。到 1973 年的时候,世界发生了哪些变化呢? 其中一个原因在于:事情远没有消费国希望油价较低,生产国希望油价较高这么简单,现实的政治要比这复杂得多。 具体来讲,消费国里头的生产商希望石油价格较高,那些较小的得克萨斯石油生产商们很高兴看到石油输出国组织提高油价,因为他们与阿拉伯人有着相同的利益。核能生产商看到石油涨价也很高兴,因为这可能促使核能成为一种更具竞争力的能源。欧洲日益衰弱的煤炭行业的经营者以及失业的煤矿工人们看见石油上涨也很高兴。生态保护者认为石油价格上升并不是一件坏事,因为有助于减少消费和污染。 因此,在消费国内部,人们对于油价有不同的利益考虑,如果我们揭开国家利益的面纱,那么就会发现,政治是错综复杂的。消费国内部的一些重要的政治行为体认为,能源价格高涨是值得欢迎的,这些欢迎石油上涨的人事实上结成了一个跨国联盟,他们无形中也加大了国会发动战争的难度。 十、战争会终结吗? 康德预言说:从长远来看,人类将由于以下三个原因而超越战争:战争毁灭性的增大,经济相互依存的发展,以及超越主权国家的共和政,府或者我们今天所说的自由民主国家的出现。 王二认为,未来如果人类的足迹只限制在地球上,那么确实会像康德所预言的那样,不会有打的战争发生。但是未来如果人类的脚步迈向星空,那么恐怕又会是另外一幅场景。

动物农场

上个礼拜读了一遍乔冶・奥威尔的《动物农场》,今天又读了另一个翻译版本,感触良多。 《动物农场》是一则入木三分的反乌托的政治讽喻寓言。农场的一群动物成功地进行了一场“革命”,将压榨他们的人类东家赶出农场,建立起一个平等的动物社会。然而,动物领袖,那些聪明的猪们最终却篡夺了革命的果实,成为比人类东家更加独裁和极权的统治者。“多一个人看奥威尔,就多了一分自由的保障,”有论家如是说。 这本书似乎有一种魔力,让王二情不自禁的以当代视角带入进去,而且没有什么突兀感,仿佛王二就置身于动物农场之中。 或许正如豆瓣评论里所说:这是一本先知书。 这里王二摘抄一些豆瓣上关于《动物农场》的书评,作为引子: 一、 革命的都是无产阶级,所以一开始不想平等都难。一穷二白的时候最容易产生共识,所以能够行动一致。但是对社会理论(也就是老猪少校那一套论述)的理解和发展,并不是每个动物都能做到。从动物们后来对“七诫”的掌握来看,智力水平的参差不齐明白摆在那里。有的连字母表都背不齐,所以不要指望他们把老少校的教导发展成系统的思想体系。 二、 如果领导只有拿破仑一个了,而且它又掌握了武装力量。它是不是就可以建立阶级统治了?不,经验告诉它如果其他动物感受到专制独裁的话,会再次革命的。所以它需要找到可以为自己可能引起其它动物反抗的做法辩解的方法: (1)、少出现。它出现的次数越多,时间越长,和其他动物接触越多,就越有可能暴露自己的弱点。而这些弱点肯定存在,也肯定跟他英明形象背道而驰。而他出现的少,每次才珍贵。 (2)、找到一个更高的舌头。这个自然是嘎吱的角色。自己亲自说的话会让人不信服。至于说辞,更多的就是永远告诉群众他们有多蠢,领导者想的比他们复杂。比他们深刻,领导者是对的。 (3)、一群傻瓜和一个傻瓜。需要找一匹马,用它的淳朴和忠诚来作正面的、明确的宣传,从而把 independent thoughts 各个击破。需要找一群羊,来唱些简单而上口的歌,用打太极的方式调和不和谐因素,从而把浑噩浑浊的其他同志们搅和成没有立场的,就更容易改造成正果。 (4)、树立一个敌人。在任何情况下,凝聚力的产生都是在对外的时候。只有树立一个敌人(不管它存在不存在),把大家的仇恨转移到敌人的身上,把所有的苦难都归于敌人的错。才能使人们万众一心,不会怀疑你的领导,而只会默默接受你的领导。 三、 极权不是在我们与资本主义决裂的时候被同时抛弃了, 而是任何制度都会产生的一种东西。作为不能影响政治的人,在你吃不饱、穿不暖、自由受到限制的时候,要相信自己的感官,而不是官方的宣传。并确信,出现这种状况绝对是不正常的。这个时候,极权很可能已经形成了。 四、 你一再批判的所谓的社会不公平,只是因为你没有站在天平翘起的那一端。当我们总是在批判现在制度的腐败时,我们也在为自己认识位高权重的人并为此得利而沾沾自喜。“我上边有人”,并非只是调侃的笑话。每个人在面对利益取舍时都成了不许他人点灯,只许自己放火的独裁者。 中国的历史是能最好地诠释人性潜力的含义的,而《动物农场》在当时则相当精确地预言了中国的未来。这本书虽然不是为了中国而写,却是活生生地在中国铺展开。 如果以上的评价能勾起读者你的兴趣,王二推荐读一下原著,六十多页,不算长,两个小时就能读完,你会得到很多感悟、脑子里会蹦出很多想法。 不过,读完不要乱讲话,老大哥在看着你。

304 状态码

先上一张 HTTP 请求流程图: 一、详细讨论 1、是否禁止缓存 禁止缓存指的是缓存中不得存储任何关于客户端请求和服务端响应的内容。每次由客户端发起的请求都会下载完整的响应内容。 在请求头中,Cache-Control: no-store与Pragma: no-cache都可以禁止缓存, 但两者也有区别,Pragma: no-cache可以兼容http 1.0 ,而Cache-Control: no-store是http 1.1提供的。因此,Pragma: no-cache可以应用到http 1.0和http 1.1,而Cache-Control: no-store只能应用于http 1.1。 2、是否检查本地副本是否过期 是否检查本地版本是否过期主要由Cache-Control 的 no-cache和must-revalidate这两个可选值控制,其中: no-cache: 告诉浏览器、缓存服务器,不管本地副本是否过期,使用资源副本前,一定要到源服务器进行副本有效性校验。 must-revalidate:告诉浏览器、缓存服务器,本地副本过期前,可以使用本地副本;本地副本一旦过期,必须去源服务器进行有效性校验。 3、本地副本是否过期 想要知道本地副本是否过期,我们就需要了解缓存的过期机制: (1)、过期机制中,最重要的指令是 max-age=<seconds>,它表示资源能够被缓的最大时间;它通常会和must-revalidate一起使用,使用起来就像下面这样: 1 Cache-Control: max-age=60, must-revalidate (2)、如果不含有max-age属性,则会去查看是否包含Expires属性,通过比较Expires的值和头里面Date属性的值来判断是否缓存还有效。 (3)、如果 max-age 和 expires 属性都没有,找找头里的 Last-Modified 信息。如果有,缓存的寿命就等于头里面 Date的值减去Last-Modified的值除以 10(注:根据 rfc2626 其实也就是乘以 10%)。 4、如果本地副本没有过期 如果本地副本没有过期,则会直接重缓存中读取资源,并返回 200 状态码。 5、如果本地副本过期 如果本地副本过期,则会进行到源服务器进行有效性校验的前期准备。 首先,会在请求头里寻找If-None-Match字段,其值为服务器上次返回的ETag响应头的值: 如果请求头里没有If-None-Match字段,则会在请求头中寻找If-Modified-Since字段,其值为服务器上次返回的Last-Modified响应头中的日期值: 如果If-None-Match与If-Modified-Since都没有,则会直接向服务器请求数据。 6、到源服务器进行有效性校验 如果请求头中带有If-None-Match或If-Modified-Since,则会到源服务器进行有效性校验,如果源服务器资源没有变化,则会返回 304;如果有变化,则返回 200; 7、上述的一些流程还可以用下图来表示 二、补充 私有缓存和公共缓存 在Cache-Control还有两个值:private与public,其中: public 指令表示该响应可以被任何中间人(比如中间代理、CDN 等)缓存。若指定了 public ,则一些通常不被中间人缓存的页面(因为默认是 private)(比如 带有 HTTP 验证信息(帐号密码)的页面 或 某些特定影响状态码的页面),将会被其缓存。

CSS 踩坑小结

一、iOS 上的 Safari 没有滑动惯性 在开发 iphone 微信端的时候,如果给一个div设置样式为滑动,样式如下: 1 2 3 div { overflow-y: scroll; } 会发现 Safari 的滑动很僵硬,这时候可以用以下样式来解决: 1 2 3 div { -webkit-overflow-scrolling: touch; } 二、去除 iphone 中点击按钮会出现一个半透明的灰色背景的问题 在开发 iphone 微信端的时候,同样发现,如果点击一个按钮,按钮会出现一个半透明的灰色背景,这时候可以用以下样式来解决: 1 2 3 4 5 6 7 8 a, img, button, input, textarea, div { -webkit-tap-highlight-color: rgba(255, 255, 255, 0); } 三、div 中保留文本的空格、换行以及 tab 字符的处理 在后台用textarea标签写入文本放入前端显示的时候,发现之前在textarea中的文本都被格式化了(浏览器默认把文本中的空格、换行以及 tab 字符都处理掉了),如果想保留文本的格式,可以用以下样式来解决: 1 2 3 div { white-space: pre-wrap; } 需要特别注意的是,white-space有五种值可以选择,normal、pre 、nowrap 、pre-wrap、pre-wrap,每一种值都有不同的表现形式,其中:

信息过剩与极简主义

由于信息爆炸,很多人都有有限精力和信息过剩之间的矛盾,这时候需要确定自己真正想要什么,闭源开流,只接受对自己有益的信息,做一个极简主义者。 不知道什么时候,王二养成了不少坏习惯。周末假期,王二会漫无目的地刷知乎、微博、朋友圈刷一下午,晚饭过后,什么也记不得了;有时候,也会一口气下载了几百本电子书,却重来没有阅读过;微博、知乎上有大量的收藏但再没翻开过;手机上很多 APP,但经常用的却没几个;有时候甚至会在头条、知乎、微博的按钮之间迷茫,实在不知道该点开哪一个。王二知道,自己出问题了。 我想,这不单单是王二才有的问题,生在这个时代,我们多多少少会有上面的毛病。信息爆炸是互联网赋予给这个时代的特征,表面上的选择是非常多了,但是我们往往却不知所错,获取信息的手段实在是太低廉了,点开一个按钮,就能了解到世界上发生了什么,何况还有那么多按钮。你甚至不用主动获取,这些 APP 就会自动推送消息给你。 小些时候包个 5 元钱 30 兆流量,手机上只有个浏览器,逛逛论坛水水贴吧,流量还要省着花,快乐感也要比现在强不少。 理论上,如果两个人都能连上互联网,那么在接受信息方面,他们是平等的,都有能力获得相同的信息。那么,互联网弥平了信息的差距了吗?没有。 举个例子,同样是使用微信,有些大叔会把它当做赌博工具;同样是微信公众号,有些大妈却更偏爱于风水养生;还有美剧,有些人把它当做练习英语口语来看,还有人当做言情故事来看;再拿知乎的打开方式来说,自己主动到知乎检索问题和被动地接收知乎算法的推荐所得到的收获,那差距堪比法拉利之与永久,清华学霸之于我。 由于信息筛选能力以及方向的差异,接受信息的差距非但没有缩小,反而扩大了。 于是出现了一个有趣现象,很多人刷了那么多微博,还是讲不出段子,刷了那么多知乎,还是写不出好的故事,看了那么多美剧,英语口语却一直没有长进。每天早上一觉醒来,又能记得多少昨天看了什么。 事实上,很多人都面临着一个矛盾,即个人有限精力和信息过剩之间的矛盾。 拿王二来说,在过去一段时间里,为了做好自己的时间管理,王二下载了大量关于 APP。它们各有特色,有的可以设置自己的每日必做、每周必做清单,还有提醒功能;有些可以记录过去一天做了哪些事情,还可以插入图片,高级版的还可以插入语音;有些还可以生成漂亮的时间线的,记录去年同期你正在干什么事情;有些可以记录下过去时间里对你产生重大影响的时刻,而且 UI 做的非常漂亮;有些还允许你像手记那样随心记录,不拘泥于格式;有些 app 便签还可以分成很多类,工作上的、生活上的、社交上的;有些做的很激进的,打开这个 app 后就不能用其他的 app 了;更有厉害的会让你记录此时此刻你正在什么地方干了些什么,而且会生成很多图表帮你分析时间用到哪里了,有哪些需要改进的地方。 王二开始非常兴奋,有这些管理工具,自己的生活一定会井井有条。然而事与愿违,生活再一次失控。实不相瞒,很多 app 打开一次后便再也没有打开第二次。 王二了解自己的焦虑——这么牛逼的功能不用会不会降低我生活的效率,就像平时刷知乎、微博,生怕一天不刷就是错过了什么大事。我们都希望抓住对自己一切有用的东西,但是往往事与愿违,精力有限。不要高估自己,误以为自己有足够的精力可以妥善处理好自己关注的所有事物。 我们需要花一段时间了解自己的目标是什么,自己想要成为什么样的人。是自媒体时代的弄潮儿?IT 行业的技术专家?证券市场上叱咤风云的操盘手?还是泡满一百个姑娘的情场浪子?确定好以后,闭源开流,贯彻极简主义精神,只接受有利于达成目标的信息,处理过去的冗余信息。 就像是在一片肥沃的黑土地上,漫无目的的接受信息就像是随手抓起一把种子撒向这片土地,最终也会因为营养不良长出一片矮小的灌木丛。我们只需要少量几颗种子,定期为他们除草施肥,细心栽培,陪伴他们慢慢长大。但是要注意,时间有限,我们除草施肥的时间不多,如果树木太多而我们都又兼顾的话,那么可能他们长的都不会太好。如果是这样,就砍掉一些树吧,虽然有时候不忍心,但是必须要做出这样的抉择。单个树木也是,如果让他的枝叶肆意生长,终究长不太高,我需要定期修建,虽然有时候会不太舍得,但也是为了树木更好的成长。 我们还需要维护好自己的时间线,关掉不感兴趣的 APP 推送,或者直接删掉这些 APP;取关已经累积数十条没看的公众号;退出不感兴趣的的群聊;删掉微信里也不知道是什么时候加的好友;屏蔽微商的朋友圈;删除自己一年不联系的联系人;少打游戏;给自己一些限制,只关注 10 个公众号,手机第一页只放 10 个常用的 APP,我们需要的真的不是很多。 像王二这样自控力不强,有时候自己不能控制自己的,可以整理一份自己的“无聊时就做”清单,“无聊时就做”清单有三个原则:1、不要太多(不超过 10 条),适时更新;2、对自己的目标有益;3、促进思维发散,需要集中思考的不要放在清单里。 当自己打算做玩游戏、刷盆友圈、刷知乎这些“坏事情”时,请先过目一下自己的“无聊时就做”清单,它就像计算机语言中的“过滤器”,如果“无聊时就做”清单里的事情都提不起你的兴趣,那好吧,“过滤器”放行,你就去做这些“坏事情”吧。需要注意的的,自己“无聊时就做”清单并不意味着里面就不能有刷盆友圈,刷知乎,看美剧的选项,但是目标一定要具体,比如“阅读知乎上关于机器学习话题下精华部分前十高赞的回答并做笔记”,“看看好久不见的 xx 老朋友又发了哪些动态”,“看一集 Rick and Morty”,”做五组俯卧撑”。 对于过去照片、文档、演讲稿、浏览器收藏以及其他个人资料,我们要做好心理准备,下好决心,清理掉那些自认为还有用但是以后再也不会用到的信息。 过去就像一个每个位置上都铺满厚厚纸片的房子,纸片中有不少重要线索,它们记录着过去的理想,过去生活的瞬间,过去你的认为及其重要的东西,过去的开心与快乐,过去的精神状况。这是生命中最珍贵的一部分回忆,你或许根本不想打乱他们,移动他们的位置,模糊了它们最初的模样,只是想在闲暇时间翻翻这些纸片,看看过去的自己。但不管怎么说,房间是要打扫一下了,虽然这会让自己的过去失真,但是不这样做的话纸片会越铺越厚,这些线索也会更加难以找到,我们只能筛选出一些值得纪念的纸片,把它们整理好,归档放到文件夹内。其他的,通通扔进垃圾桶。 不仅要把房间打扫干净,还要维持好这种状态,定期整理未处理的信息,不要吧纸片扔的满房间都是了。秩序,需要在我们内心的最底层建立。 如果读者你认为这篇文章有一些参考意义并打算将之付诸于实践,那有一点必须要提醒一下:只关注自己感兴趣的东西也会带来一些副作用,如果自己的时间线上都只限定于那几个化题,那么自我观点会不断的强化,认为自己关注的事物就是这世界的全部。就像头条刷多了推送的都是自己感兴趣的话题,实际上这会限制自己的视野,忽略了其他有趣的事情,这时候就需要加入一些“不和谐”的因素,刷刷知乎、Filpboard 就是不错的选择,但是也不要用力过猛,一刷就是一下午。 事实上,做好上面几点很难,这是一个系统工程,需要花费不少时间。把自己想象成是一个公司,你就是管理这个公司的 CEO,管理好这个公司需要艺术,更需要耐心,但是值得尝试。 逻辑有些混乱,最后我用一句话总结一下这篇文章讲了什么:由于信息爆炸,很多人都有有限精力和信息过剩之间的矛盾,这时候需要确定自己真正想要什么,闭源开流,只接受对自己有益的信息,做一个极简主义者。

JS中 slice、substring、substr 的区别

一、substring() substring()方法返回一个索引和另一个索引之间的字符串,语法如下: str.substring(indexStart, [indexEnd]) 下面有六点需要注意: substring()从提取的字符 indexStart 可达但不包括 indexEnd 如果 indexStart 等于 indexEnd,substring()返回一个空字符串。 如果 indexEnd 省略,则将 substring()字符提取到字符串的末尾。 如果任一参数小于 0 或是 NaN,它被视为为 0。 如果任何一个参数都大于 stringName.length,则被视为是 stringName.length。 如果 indexStart 大于 indexEnd,那么效果 substring()就好像这两个论点被交换了一样; 例如,str.substring(1, 0) == str.substring(0, 1) 以下是一些示例代码: 1 2 3 4 5 6 7 8 9 var str = "abcdefghij"; console.log("(1, 2): " + str.substring(1, 2)); // '(1, 2): b' console.log("(1, 1): " + str.substring(1, 1)); // '(1, 1): ' console.log("(-3, 2): " + str.