@inferior
@inferior
关注的小组(5)
动态 帖子 28 评论 320 短评 0 收到的赞 631 送出的赞 30
  1. inferior 北大未名
    inferior   在小组 2047 发表文章

    如何在“直观”上的数学期望是0甚至是负的时候赚钱

    答案是你的选择对后续收益有影响,而且你有选择随时中止的权利。

    很久以前看过一个视频,是耶鲁的公开课,因为时间过久找不到当时的视频了,如果有别人看过可以帮忙贴上来。

    思考一个问题:现在有一副牌,52张,一半红一半黑。从中抽牌,且不放回。抽到红的赢一块钱,黑的输一块钱,你可以选择随时停止这一局游戏,将所有牌洗牌重新开始。请问采用最佳策略你期望每局平均赢多少钱?

    答案是

    2.6元。
    
    具体计算就不写了,这里说一下思路。
    思考几个简单的情况。
    现在牌堆里只剩N张黑的,在这种情况下你的期望是什么?当然不是输N块钱,因为你可以直接不玩了睡大觉。是0.
    现在牌堆里只剩1张黑的1张红的,在这种情况下你的期望是什么?当然不是0,因为你有1/2的几率抽到红的,然后牌堆只剩黑的,不玩了睡大觉。1/2几率抽到黑的,这时候因为只剩红的所以一定抽完。于是,1张黑的1张红的期望实际是1/2*1+1/2*0=1/2。
    以此类推,在某种情况下的期望,实际上是:抽到红的概率乘以(这张红的收益(+1)加上牌堆移去一张红牌后的期望),加上抽到黑的概率乘以(这张黑的收益(-1)加上牌堆移去一张黑牌后的期望)
    递归下去,我们最后总会落到边界条件,即全红或者全黑,这种情况下的收益是显然的。
    于是我们可以计算出牌堆中有任意数目的红牌和黑牌的情况下真正的数学期望。
    
  2. inferior 北大未名
    inferior   在小组 2047 发表文章

    GFW大炮被滥用

    tttt

  3. inferior 北大未名
    inferior   在小组 2047 发表文章

    test123123123123

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  4. inferior 北大未名
    inferior   在小组 2047 发表文章

    卧底10个鸡娃群后,没娃的我都恨不得鸡自己了

    图太多,懒得贴了,建议去原文阅读

    https://news.ifeng.com/c/84bFj4CTM0I?

    互联网时代,人人都是云青年,我们带你去突击。最近,“鸡娃”(打鸡血式教育孩子)这种教育方式,逐渐从小众精英家庭破圈,进入寻常百姓家。有家长在微博吐槽说,有娃的人也许能躲过学生家长群的尔虞我诈、溜须拍马,但一定躲不过鸡娃群的“凡”式晒娃、焦虑轰炸。

    鸡娃,这种孩子烧脑、父母烧钱、全家烧时间的带娃方式真的有效吗?全家的鸡血式付出有没有错付?

    这次,云青年突击队决定卧底几个鸡娃群,探究鸡娃背后的真相。

    策划 | 云青年突击队

    鸡娃黑话词典

    为了成功潜入鸡娃群,没对象没娃的我给自己设定了一个假身份——北京妈妈,二胎,老大男孩,读五年级,老二女孩,在幼儿园幼中班,两个孩子一个幼升小,一个小升初。原本以为这种几乎要从字里行间溢出来的焦虑感,应该会让我成功混入任何一个鸡娃家长群,但从结果来看,我还是太天真了。

    在一个海淀升学公众号的文末,我找到了一位“鸡娃”助教的联系方式,添加对方好友后,我急切地表达了被鸡的渴望,然而对方回复的回复让我瞬间破功。

    突击中.jpg

    还没给两个假娃编出完整人生档案的我有点慌了,随口编了一个信息报上去,结果人家是专业的,一眼就识破了。

    突击中.jpg

    事情败露后,对方就把我拉黑了。出师不利的我后来通过一位有娃的朋友介绍,又申请加入另一个鸡娃群。在我自以为懂规矩地报上信息后,对方的一串“黑话”又给我砸懵了。

    突击中.jpg

    面对再次沉默的我,对方以一句“看来您并不能给其他家长提供宝贵经验”为由又把我删了。

    朋友告诉我,海淀作为教育大区,对应的鸡娃群都是“邀请制”,只有孩子优秀,家长才会被拉进去。连败两次后,我决定先自我成长一下, 开始在天涯和微博上大量浏览鸡娃心得,终于整理出了一套鸡娃用语黑话词典。

    鸡娃黑话词典

    🐸青蛙:又称普娃,指成绩等各方面比较普通的孩子。

    🐂牛蛙:指能力突出的孩子。其中根据具体表现又分为天牛(天生优秀)、人工牛(后天教导)、澳牛(奥数优秀)、英牛(英语优秀)等。

    🐔素鸡:指鸡血式地对娃进行艺术、体育等素质教育。

    🐔荤鸡:指鸡血式地对娃进行语数外等应试教育。

    🐔家鸡:家长自己在家鸡娃,不靠任何课外辅导班。

    🐔班鸡:靠满满当当的课外班达到鸡娃的目的。

    🐔自鸡:在教育孩子的同时,家长提升自己的实力,以达到匹配孩子教育的目的。

    ⭕SA:上岸,孩子终于靠鸡考学成功。

    ❌BNJ:不耐鸡,指孩子受不了家长的鸡娃方式。

    ⭕QZY:求资源,求大佬在群里分享教育资源。

    ❌JBCL:鸡不出来,多见于家长们吐槽,表达孩子被鸡后不见长进。

    靠着熟读并背诵以上黑话,我终于成功混进了10个鸡娃群。

    凡学集中营

    入群后的第一个清晨,我是被手机不停的震动吵醒的。大概从6点开始,各个鸡娃群就变得热闹。据我观察,家长们每天在群里做三件事:发自己的鸡娃计划、分享教学资源、晒鸡娃成果。上千条信息流里,我闻到一股老凡尔赛的味道。

    突击中.jpg

    ▲ 鸡娃群也非常群如其名,起到了每天凌晨5点叫我起床的作用。

    在鸡娃计划分享环节,普通家长会拿出一张纸质时间表,荤鸡素鸡并行,都排得满满的。

    突击中.jpg

    在这之后分享的家长,立刻抛出一张电子课表,仔细一看,连冲澡的时间都被严格规定好,附加项目更是让人看完后肃然起敬。

    突击中.jpg

    直到有人发出了这条文字消息,群里突然陷入长达1分钟的沉默:一位家长把孩子自主入睡的时间也写进了计划表。

    突击中.jpg

    一开始我还觉得挺正常,仔细一看才明白,小丑竟是我自己。发布这条消息的家长昵称叫做:XX妈-19m(19个月)-海淀。

    19个月,1岁半,加这个升学鸡娃群不会太着急了吗?

    后来一想,可能是特邀来的天牛家长下来指导工作吧。由于对人类幼崽的成长速度拿捏不准,我还特地去找我妈确认了一下。

    突击中.jpg

    此时的我竟生出了对母亲的一丝愧意。

    沉默过后,求同款早教资源的家长们,像雨后春笋一样长出来了。

    潜伏几天后,我算是明白了,鸡娃群至少有一个好处:省钱。这些资源买的话几百到几千一套,而在鸡娃群里,只要你胆够大嘴够甜,直接白拿不是梦。这可能也是凡尔赛得以在鸡娃群存活的原因吧。

    突击中.jpg

    群里几个经常分享资源的鸡娃大佬们也会暗暗较劲,你发英语听读的一个系列,我就发全集;你发一本数学练习题,我就发一套……

    在这种不断叠加的过程中,家长们分享的网盘资源也不断变得肥厚,经常出现手机打开就卡死的情况👇

    突击中.jpg

    而鸡娃大佬们为了填充资源有多疯呢?

    我试着打开了一位家长分享的英语听读素材,发现里面有《鹅妈妈童谣全集》,还是未删减的版本,随便拿出一篇,都能脑补出一部恐怖片。

    突击中.jpg(可上下滑)

    每天在睡前给娃循环听这个,细思恐极。

    一般这种亲切友善的分享氛围会持续到下午,到了晚上,集中鸡娃之前,会有短暂的闲聊时间,家长们也终于能做回一小时的自己,离开鸡娃的焦虑,开启成年人的焦虑。

    这时候的热门话题也有三个:挺娃妈、损娃笨和骂娃爸。

    当然这也是成年人的半命题作文,发挥多溜,基本就看家底多厚。

    有鸡妈说自己要边上班边鸡娃,立马有姐妹跳出来用痛苦“安慰”痛苦。

    突击中.jpg

    有家长抱怨孩子兴趣不大,实在是jbcl,其他家长也是搬出自家娃来举例。

    突击中.jpg(可上下滑)

    最绝的还要数骂娃爸环节,本来鸡娃群男女比例就堪忧,简称丧偶式教育的高发地区。

    突击中.jpg(可上下滑)

    以其中一个爸爸相对较多的鸡娃群为例,男女比例为1:127。

    最可怕的是,鸡妈吐槽一句老公不管孩子,就惊动了群里为数不多的鸡爹们上演了一出“男子茶艺大赛”。

    突击中.jpg

    不知道那些普娃的妈妈们看到后,会不会颤抖或泪流。

    永无止境的鸡与被鸡

    我潜伏一段时间后,群里突然有个妈妈来添加好友,备注信息是:邀请加入鸡眼群。

    突击中.jpg

    看到鸡眼这个新词,我按照黑话逻辑盲猜:难道指的是鸡娃群中的佼佼娃,鸡中之眼?迅速通过好友,入群后才发现,原来鸡眼指的是鸡眼睛、鸡视力。

    鸡眼群里的家长们会每天定时带孩子做眼保健操,出门爬树看绿叶子,甚至有家长会带着光度计出门测量,寻找最适宜的鸡眼圣地。

    突击中.jpg(可上下滑)

    正当我感慨父母终究是父母,把孩子的健康放在第一位时,群里一位家长的回应,直接把我的感动噎回嗓子眼。

    突击中.jpg

    今天鸡眼,原来是为了明天更耐鸡!

    对于一些过于偏执的家长来说,鸡娃就这样变成了一场永无止境的轮回。一管鸡血给自己扎进去,那股劲在孩子长大后也未必能消退。

    最近,微博上一个终极内卷家长群的聊天记录被许多网友吐槽,其实仔细一看,黑话和昵称格式,和鸡娃群高度一致。

    突击中.jpg

    ▲ 图 / 微博@一杨ish

    这些家长的孩子基本都是90后,他们在群里为孩子升职加薪发红包庆祝,昵称里用大小写的F/M,代表孩子的性别和感情状况,晒成就的同时顺便还能相个亲。

    不知道这些90后牛蛙们知不知道群的存在,也不知道牛蛙家长们的鸡娃之路,尽头到底在哪里。

    群列表里一水儿的“XX妈”和少数“XX爸”之间,还夹着几个零星的老一辈身影。

    突击中.jpg

    他们平时基本不说话,比卧底的我还隐形。我现学现卖,以“鸡眼”为由加了对方好友。

    聊了几句发现,他们是特殊的“隔代鸡”人群,觉得儿子/女儿鸡娃不给力,JBCL,所以不能再让孙子、孙女重蹈覆辙。

    突击中.jpg

    这种世世代代都要卷的焦虑,让我只想尽快退出所有群聊。

    谁知道,退群前我又赶上了一波焦虑轰炸——北京传闻叫停线下培训班。

    消息传开后,我看到了群里北京家长的不解和外地家长的“安慰”。

    突击中.jpg

    看到了上有政策下有对策的教育决心。

    突击中.jpg

    还有前所未有的团结一致。

    突击中.jpg

    尽管第二天,官方辟谣这是假消息,但鸡娃群里的讨论,还是热闹如往常。

  5. inferior 北大未名
    inferior   在小组 2047 发表文章

    反对跨站发帖

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  6. inferior 北大未名
    inferior   在小组 2047 发表文章

    极化:美国大分裂的前生今世

    原文出自岚目 @知乎/微信公账号

    极化作为一个相对宽泛的政治概念,几乎和美国当代面临的所有问题都能沾边。

    一转眼之间,拜登政府上台已经过去了一周多的时间。与惊喜不断的特朗普年代不同,拜登时代的美国政府又回到了那个一周没啥大新闻,平平淡淡过日子的老节奏上。(吃瓜群众都去观察美股了)

    当然,表面上的无聊,不代表美国政局就真的无事发生。拜登上台签署的一系列行政命令不提,即将开始的特朗普二次弹劾审判和拜登1.9万亿疫情纾困计划的谈判,都是对未来有深远影响的大事。

    不过,美国政坛的当前空档期,刚好让我们来谈谈一个近些年来主导美国政治讨论的另一个话题—极化(Polarization)。

    两党的分歧越来越大

    极化作为一个相对宽泛的政治概念,几乎和美国当代面临的所有问题都沾边,无论是恶性党争,国会崩坏,还是民粹主义抬头/特朗普上台,乃至民主制度的衰败/失衡,都能把锅甩到极化身上。

    也正是因此,有关极化的讨论和研究在近年来层出不穷,各方大家都试图从不同角度来探寻极化现象发生的原因经过以及这一现象对当下和未来美国社会政坛的影响。总的来说,学界对当前这一轮极化开启的诱因和最早出现时间有着比较统一的定论,但对什么因素加剧了极化的程度和如何解决这一问题存在着巨大的分歧。

    针尖对麦芒

    考虑到公众号不是学术期刊,我也不是啥正儿八经的政治学家(笑),这里有关极化的讨论只能说是梳理梳理过程和起因外加讲讲故事抛砖引玉。吃瓜为主,专业为辅,大家主要乐呵乐呵!

    何为极化?

    首先,在讲极化现象的起源和发展之前,先要给极化这个概念下个定义。

    极化在美国政治的语境中,指的是美国两党选民和精英阶层在意识形态和政策立场方面的极端化。在极化的推动下,两党均是根据保守和自由主义两大对立的意识形态立场来引导自身的政治行为。而这一过程自然而然的推动了两党选民和精英在重大政策和社会问题的判断认知上差别越来越大,发展到今天,基本形成了红蓝两个美国分裂的局面。

    通俗点讲,极化,就是民主党变得更左,而共和党变得更右。两党之间曾经宽阔的中间交际地带,随着极化现象的发生变得愈发狭窄,甚至可能在今天已经不复存在。

    民主党更左,共和党更右

    最直观的数据,就是选民意识形态上的变化。皮尤中心2014年的数据调查显示,自1994年以来20年的时间中,自认为简单自由派/保守派的美国人翻了一倍,从94年的10%上升到21%。而两党选民的意识形态中间值差异,也有着显著提升。截止到2014年,92%的共和党人比民主党要更右,而94%的民主党人要比共和党人更左,这一数据在二十年前仅位于60-70%的水平。

    越积极越极端

    而如果稍微了解美国政治的话,都知道90年代的美国远非什么两党认同一致的和谐年代。大门94年金里奇革命掀起的焦土式政治在大行其道20余年之后,把美国政治推向了今天的极度极化,比90年代还要严重很多的程度,足以说明极化现象在美国社会现在有多么根深蒂固了

    与此同时,作为政党精英的两党国会议员,也同样伴随着选民的极端化而自我调整。两党意识形态极化的一个重要外在表现,就是两党国会议员开始变得愈发和党派主流靠拢团结,使得原先6-70年代规模庞大的两院中间派势力在几十年后几乎完全销声匿迹。

    消失的中间

    两党的党派团结率分(Partisan Unity Scores)均从70年代的60%左右,上涨到21世纪初的90%水平,而奥巴马特朗普两任总统更是进一步加速了这种党内同化的趋势。一党多数必定反对另一党的多数,于是奥巴马任内的重大立法成就奥巴马医改没有一票来自于国会共和党人,特朗普的税改,也没有任何民主党人支持。

    团结是新节奏

    极化的问题

    虽然单就极化问题本身来说,极化所带来的影响并不完全是负面的。但由于美国民主制度实行的是福山所称之为“否决政治”(Vetocracy)的复杂机制,国会两院实权还同时三权分立,使得政治机制的正常运作需要多个环节的配合工作和广泛的跨党派民意支持。

    在两党选民和精英都因为极化而缺乏共识,本质上完全对立的情况下,美国政治几乎无法以正常的方式运作。随着而来的政治僵局和政府低效,导致了长期社会性问题频频得不到解决,民众对政府和体制失去信心,进而产生了浓厚的反建制和民粹主义情绪,给特朗普登场搭建了舞台。

    美国现在的政治体制只能用否决政治来形容了

    而两党意识形态的对立,很快演变成了两党选民对彼此的怨恨和敌视,负面式竞选成为了政治选举中主要采取的方式,而党同伐异为反对而反对,则成了两党选民思考问题时所最先思考的因素。在政治极化登峰造极的2020年,美国一切的事务都要通过政党和意识形态的滤镜来筛选。事实不再是最重要的考量,凡事先要看立场,站队要紧。

    极化固然不是美国独有的政治现象,但目前没有哪个国家的政治极化比美国更严重,影响更深远。即便是呼吁团结的拜登取代推动分裂的特朗普成为了总统,美国政治极化也没有出现丝毫好转的迹象。1月6日国会山暴乱的阴影,仍将长期笼罩着美国的未来,毕竟,能发生一次的事情,肯定还能再发生第二次。

    For the Union

    当然,美国当前的现状,肯定不是简简单单极化一个问题所造成的。未来怎么样,现在也说不好,与其鼓吹失败主义杞人忧天,不如先回顾回顾历史。

    极化的起源

    从历史的角度出发来看,极化在美国并不是一个突然出现的现象,建国初期,内战前美国都有着不同程度的政治两极化和两党尖锐对立。但一般来说,当前所指的政治极化,都是建立于美国内战重建(Reconstruction)结束,第四政党体系确立以来的语境之下。所谓有史以来政治最极化,社会最分裂,也是从内战后开始算起。(毕竟,内战不就是极化/分裂的衍生物嘛)

    具体到现在这一轮的政治极化,普遍的认知是它起源于上个世纪70年代。而政治极化诞生的诱因,是60年代的民权运动所引发的新政联盟(New Deal Coalition)崩塌,进而出现的选民迁徙和政党力量重组。

    独霸美国政坛四十年的新政联盟

    过去往往有一个常见却错误的坊间智慧—既民主党和共和党两党在历史上经过意识形态的换位,民主党从保守主义为主导变为了自由派的代言人,而共和党则从左转右,完美和民主党对调。显然,事实并非如此。两党意识形态的变化不是简单粗暴地交换立场,更多像是剔除了党内原来势力庞大的意识形态异端/独立山头,最终使得两党之间的意识形态区分变得无比明确。

    历史上,在20世纪6-70年代之前,民主党和共和党都是意识形态较为松散的大联盟政党,其选民组成和政策立场往往和美国的人文历史和社会经济发展有关,而不局限于单一的意识形态流派。民主党在内战后的早期虽然确实是由南方/保守派波旁民主党人为核心,但也吸收了中西部带有左翼经济民粹色彩的农场主作为补充。十九世纪末劳工运动兴起后,民主党更是积极和工会势力以及大城市中的政治机器所勾结,意图扩大自己的选民基本盘和作为第四政党体系处于绝对主导地位的共和党进行抗衡。

    三大自由派民主党总统

    等到了威尔逊和罗斯福两代民主党总统,特别是后者的新政,奠定了自由主义作为民主党主流的基础。而罗斯福上台执政带来的新政联盟,囊括了包括南方白人,自由派知识分子,劳工势力,爱尔兰意大利裔天主教徒,犹太人以及非裔美国人在内,形成了广泛群众基础。于是,凭借着新政联盟的力量,民主党在30年代之后的数十年中取代了共和党成为了美国政治中的多数党和霸者,开启了美国的第五政党体系。正是60年代民权运动引发的新政联盟逐步解体,才有了后来70年代极化现象出现的可能。

    而共和党,历史中同样也存在着意识形态迥异的内部派系和山头。重建结束后,共和党在美国当时的政治体制下有着绝对性优势,长期把持总统和国会的控制权(一度30年只有一位民主党总统)。虽然政党内部的主要话语权由东北部新英格兰地区的建制派把控,共和党内部的保守派力量一直十分强势。在镀金时代美国西部诸州逐渐加入联邦之后,自由意志主义者/保守主义思想在共和党内部更是成为了主流的思潮。

    第四政党体系

    不过由于第四政党体系下政治影响最为深远的共和党总统西奥多·罗斯福是一个进步主义者,他所代言的共和党左翼势力长期在二十世纪初保持着相当可观的政治力量。罗斯福新政之后,共和党为了突破新政联盟的包围,频繁需要提名温和乃至自由派的共和党人来和民主党总统候选人抗衡,客观上给共和党的中间自由派提供了强大的生命力和存在必要。

    随着罗斯福新政的高潮退去,二战结束之后民主党自由派的政治优势出现缩水。政治立场通常较为保守的南方民主党人为了遏制自由派和美国社会中日益高涨的反种族隔离情绪,主动和保守派共和党人结成了政治同盟,组成了长期实质性控制国会的“保守派联盟”(Conservative Coalition)。

    南方民主党人搭建的保守派联盟有效的维护了种族隔离制度

    通过对委员会层面的绝对控制,保守派联盟有效的阻击了杜鲁门和艾森豪威尔当政期间的民权法案。然而,民权运动的兴起和美苏冷战意识形态交锋的大背景,让南方的种族隔离制度成为了美国的负资产,变相促使除南方前邦联州外的国会议员迫于外界压力,逐步摒弃了放任南方民主党人单方面否决民权类法案的做法。最终,1964年民权法案的通过,敲响了南方种族隔离时代的”丧钟”,但与此同时,身为民主党人却签署民权法案的林登·约翰逊也亲手开启了民主党在“稳固南方”的崩盘。

    需要注意的是,民主党和南方的“脱钩”,并不是一个迅速发生的过程,而是经历了漫长的半个多世纪时间才宣告完成。重建结束之后在南方一党独大长达百年时间的民主党毕竟树大根深,长期执政所带来的稳固政党组织框架和选民的投票惯性,在民权法案生效之后的几十年时间起到了对冲作用。虽然绝大部分南方州在联邦大选层面不再支持民主党总统候选人(1976年的卡特例外),但仍稳定选出民主党籍的国会议员和地方官员,直到1994年和2010两次民主党总统任内的转型式中期选举才改变了这一惯性。

    LBJ签署民权法案

    但不管怎么说,民主党逐渐失去南方白人的支持,使得原先稳固的新政基本盘出现了本质性动摇。而随着大部分保守派南方民主党议员被共和党人所取代,原先在民主党内拥有具足轻重力量的保守一翼基本失去话语权和生存空间,使得民主党自我净化掉了意识形态的异端,变为自由派为绝对主导的政党。

    与民主党变化相应的,便是共和党在吸收了大量南方选民的情况下,逐渐丢失原有的东北部”气质”。宗教和社会保守主义两大因素越来越浓的共和党,不可避免地疏远了信奉世俗主义的东北部原共和党选民,把他们推向了民主党的阵营。

    一来一往,两党都刷掉了己方阵营中一度强势的“异端势力”,完成了意识形态和政策立场上的整合。实际上,这一变化让美国政治从40-50年代的“四党共治”(自由派/保守派民主党人,自由派/保守派共和党人)真正变成了70年代后的“两党对立”,从50年代两党缺乏本质性差别,变为70年代后的对比鲜明。

    四变二

    如果没有南方转型作为诱因,美国政治恐怕不会出现如此翻天覆地的变化。而人口和经济占比都不显著的南方,长期在美国历史上拥有远超地域本身硬实力外的政治影响力,是一个有趣且独特的现象。

    推动极化的原因

    然而,政党重组只是政治极化现象出现的导火索而已,真正把极化推向到今天两党剑拔弩张,事事针尖对麦芒这样极端局面的“幕后黑手”,另有他人,也不止一个。

    在这方面,不同的学者给出了不同的解释,社会学家和政治学家各有自己的侧重点。为了讲的全面一点,顺带避免争议,这里就把基本被公认和极化有关的一些因素都全部都稍微讲一遍。

    越走越远

    首先,推动极化的因素主要有两大类,一种是政治体制内部的改革和变化,另一种则是社会和选民本身所经历的变动。两大类原因之间并不互相排斥,时常相辅相成,齐心合力把极化推向高峰。(而究竟是政治精英还是基层选民要为极化负主要责任的有关讨论,很多时候和蛋生鸡还是鸡生蛋之类的辩论没啥区别,反正你也吵不出结果,不如说俩方面都一样的锅)

    政治体制内部的变化

    70年代以来政治体制内部的变化,主要体现在政党权力弱化,国会议事程序的变革,摇摆选区数量减少,和选举激烈程度上升等方面。

    初选制度的出现,极大的削弱了政党原先对国会议员和总统候选人提名的控制力。虽然初选有利于促进党内民主,把选择权力返还给基层选民,但权力弱化的政党无法积极的排除党内的极端因素。初选相对较小的选民规模,更是有利于党内的意识形态积极分子掌握政客的生死权,逼迫国会议员必须尽量严格遵循党的意识形态路线,不然将失去重新获得提名的机会。

    过多的民主=/=好制度

    不公平的选区重划(Gerrymandering)则加剧了初选带来的问题。伴随着摇摆选区数量的下滑,让大部分议员都处于稳固的红蓝席位,真正有意义的选举只是两党内部的初选。而由于两党选民愈发对反对党充满了抵触情绪,为了政治生存的政党精英也必须要相应的调整自己,进一步推动极化。

    国会议事程序的变革,同样也对极化起了极大的推波助澜效果。从6-70年代开始,民主党自由派不满于保守派南方民主党人长期把持重要委员会,开始积极推动参众两院权力结构的调整。尤其是众议院的“削藩”行为,使得立法权力重新高度集中在议长/领导层身上。

    C-SPAN的出现,对极化推波助澜

    金里奇革命之后,更是让这种大权独揽的现象登峰造极,基层国会议员在立法过程中的影响力大大削弱。大部分缺乏个人独特政治形象的议员,在缺乏立法成效的情况下,只能更多遵循党的基本路线,避免犯路线错误丢掉饭碗。

    在此期间,直播国会议事程序的电视频道C-SPAN开播,虽然有利于透明化民主过程,但各类听证会却也不可避免地变为了两党议员为博眼球的作秀平台和党争工具,进一步压缩了两党可合作的方式和空间。

    最后,国会和总统选举的激烈程度,也降低了两党之间合作妥协的意愿。90年代以来两党势均力敌的政治常态,在美国历史上其实非常罕见。内战后的第四第五政党体系都有明确的多数党/主导政党存在(先是共和党,后是民主党)。

    国会换手频率增加,降低了两党的合作意愿

    新政之后长达60多年的时间中,国会长期由民主党把持,共和党曾在众院连续四十年在野。相对低频率的国会控制权换手,反倒有助于两党的合作(因为在野党看不到翻身的希望)。94年之后,国会两院控制权频繁出现更迭,每两年都有可能出现新多数党,这大大降低了双方妥协的意愿。只需要反对党团结起来一致反对,让执政党一事无成,那么就可以等待政治风向推动自己上台。

    也就是说,选举竞争的愈发激烈提高了政治极化的收益,进入到新时代后,对立更加符合两党的核心利益—成为多数党,也难怪国会成为了政治极化的最大受害者。

    社会和选民的变动

    政治极化的另一大类驱动力量,则是美国社会和选民自70年代以来的变化。

    冷战的结束使得美国两党失去了共同的敌人—苏联。缺乏一个清晰明确的宿敌,让两党失去了一个可以一致对外的理由。选民的代际更迭,特别是大萧条二战年代成长起来的“伟大世代“(Greatest Generation)逐步凋零退出核心选民队伍,被没有经历过这些重大社会变故,缺乏集体记忆的战后婴儿潮和千禧世代所取代,造成了“这届选民不行”的本质性问题。

    归根结底,这届选民不行

    美国社会的种族和宗教多元化,给政治党争加入了文化和族群斗争的新变量。两党之间斗争逐渐由从原先利益分配方面的角力转向了道德和种族层面的话语权的争夺。双方的火药味是越来越浓,所斗法的领域也越来越多。以至于到了2020年,两党选民互相之间的看法,都是极度负面的,甚至可以说是互相仇恨的。

    而选民互相之间的敌对情绪,自然会折射到他们选出的国会议员和总统(比如特朗普)身上。负面党派情绪(Negative Partisanship)的另一直接后果,是美国选民愈发不愿在总统和国会选举中分割选票(Ticket Splitting),参院和众院选举结果与总统大选高度趋同。来自“敌人地盘”议员数量的大幅减少,国会内部和总统都缺乏向另一方让步妥协的政治意愿和需要。

    负面党派情绪=两党互相仇恨

    另一方面,两党意识形态主流在70年代确立之后,两党选民自主的进行党派选择行为(Partisan Sorting),进一步固化了两党的政治立场和区域性优势。70年代后,两党内部不完全符合政党主流标准的少数派,除了转投对立党派之外,往往会选择自我调整,积极向党的主流靠拢,增强了党内意见的一致性。

    选民自主选择向党派靠拢的同时,还会根据政治倾向来选择居住工作的地方。党派理念相同的人抱团,自然会加速美国政治地理的红蓝分裂。于是,大部分州都是红区越来越红,蓝区越来越蓝,带来的后果则是国会两党的安全选区/州越来越多,中间温和派选民的政治影响力随之下滑——更加极化。

    红更红,蓝更蓝

    冗长频繁的选举周期和竞选成本(金钱/政治现金)的激增,则更是放大了党内愿意花时间经历去参与初选/其他选举活动的政党活跃分子的能量,让政党精英不得不受制于党内的极端势力。

    最后,信息渠道的多样化和传统媒体的衰败,使得美国民众逐渐在事实认知和基本价值判断层面就出现分歧。6-70年代美国选民主要的信息来源还是传统的纸媒和ABC, NBC, CBS三大电视台。在公平原则(Fairness Doctrine) 的约束下,大部分媒体报道是相对客观可靠的,起码民众对事实还是有着比较共同的认识。

    三大台

    但自从里根政府废除公平原则之后,随之出现的24小时新闻周期和主观新闻台(CNN, FOX, MSNBC)逐渐让新闻报道变动主观起来。这些带有明确党派倾向的电视台,满足观众的同时,加固了公众的党派偏好。互联网和社交媒体时代信息的碎片化,再加上社交媒体根据用户偏好推送新闻的做法,更是把大部分美国民众圈在了自己的信息回音壁之中。假新闻和阴谋论大肆横行,两党之间现在连基本的事实判断都不能达成一致,焉能有不极化的道理?

    阶段性总结

    归根结底,美国的政治极化是一个起因极端复杂,涉及面又超广的政治文化现象。美国目前超极化的政治现状,也没有任何短期的良药可以来缓解解决。极化必然长期将与美国共存,分裂也将是美国短期内未来的主旋律。

    具体,极化对美国政治还有什么样的影响,又带来了什么样的改变,之后的文章再谈。

    极化作为一个大的课题,这篇文章显然只是为未来的系列更新开个头。接下来预计将会用多篇文章详细的讲述极化过程中的重大事件和关键人物,把文中所讲的一串极化原因仔细的再分析一番。

    至于下一篇先讲什么,当然是国会的内部变化咯!

    十九二十世纪国会体制的转变与极化的关系

    又是一周过去,拜登政府依然没有搞出啥大新闻,而大家集体沉迷Clubhouse,这不赶紧把极化文章更新下,好方便明天继续CH划水。

    上篇文章说到,极化作为一个美国社会近几十年最为重要,影响最深远的社会/政治现象显然是无法单用一篇文章或一种分析方式去解读梳理的。在系列开篇文章基本系统性阐述了造成极化现象出现/发展的几大原因之后,接下来的几篇更新都会聚集具体的几个方面,尝试把问题稍微梳理的简单易懂一点。

    渐行渐远

    国会作为受到政治极化冲击最大的权力机构,其实是最好的一个切入点。过去的一百年时间中,国会内部政治生态和制度的改革变迁,既反应了美国选民愈发极化的现实,也同时扮演了推动极化走向极端的角色。而通过解读穿插在这几十年风云变幻之中发挥了关键作用的几次重大历史事件(主要是选举),能比较的好理解为何国会制度的改革变相加剧了美国政治的极化。

    国会和极化

    一般来说,再谈政治极化对国会的影响时,几乎所有的讨论都是围绕着众议院所展开的。这并不是因为极化没有对参院原有的政治生态造成极大的冲击,事实上极化使得本就低效的参院在今天进入了立法全面瘫痪的状态,而是因为参院从宪法设计和议事规则层面来讲,并非是一个完全的多数决机制(Majoritarian System)。

    相比于完全由多数党乾纲独断的众院,参院的冗长议事规则(Filibuster)虽然历史上和今天长期被滥用,但也确实保证了参院的少数党保有一定的权力,不至于和众院少数党一样任人宰割。

    Mr. Smith Goes to Washington

    而基本按照多数党意志来运作,又是由来自“小”选区议员组成的众院,更能直接的反应政治极化给美国政坛和国会所带来的变化。在五六十年代两党政治联盟和政党纪律松散的年代,众议院尚能在维持多数决机制下,仍有少数党议员积极发挥立法影响力的空间。

    当然,二十世纪中叶国会能进入“黄金时代”,有战后/冷战的时代背景与民主党长期独霸国会的因素作祟。随着时间的推进,新一轮政客的登台加上国会自身内部制度的改革变迁,使得众议院变成了如今的这个极化样子。作为“人民院” (the People’s House)的众议院,也确实能更好地比参议院展示极化现象是怎样崛起,又如何“吞噬”国会的。(所以先讲众院,参院得专题另讲)

    国会权力结构的变迁

    俗话说得好,天下大势分久必合,合久必分。套用到众议院和整个美国国会的发展史上,就会发现国会领导层,特别是众议院议长(Speaker)一职的相对权威和权力,是一直在发生变化的。内战后,议长的权力一度登峰造极,达到了大权独揽说一不二的境界。而绝对的权力,自然而然地引来了外界的反感,导致了1910逼宫事件的出现,剥夺了大部分议长的权力。

    随后,众议院进入了事实上的封建制状态,各大委员会主席如同诸侯王一般各自为政。国会领导层缺乏约束各委员会山头的办法,更多只能扮演周天子/盟主调解纠纷,通过好言相劝来推动进程的角色。虽然这一时期国会立法机制运行得非常健康,但到了60年代,长期把持委员会主席岗位的南方民主党人阻挠民权法案和自由派议程的行为,引发了作为民主党主流的北方/自由派民主党人强烈反弹。所以水门事件后,众议院推动了“削藩“举措,开始重新把权力集中在国会领导层和议长身上,削弱委员会对立法的控制权。

    委员会权限的变化影响深远

    经过了二十多年的发展,议长权力在金里奇1994年引导共和党革命(Republican Revolution)之后再登巅峰。此后的时间里,议长的权威虽稍逊1910年前的水平,但在众院也是保持着说一不二的地位。而曾经是立法程序核心环节的各大委员会,逐渐随着权力的集中变得可有可无,离开了权力的中心。

    金里奇的重要性,得专门讲

    具有讽刺意味的是,早年改革者“削藩”是为了提高立法/国会效率,最终所导致的却是政治极化彻底吞噬绑架了国会,使得立法权完全进入目前半死不活的状态。只能说,许愿需谨慎(be careful what you wish for!)。

    从“沙皇议长”到“委员会治世”

    美国建国早期国会的规章制度较为松散,除了宪法规定的议长职位一直存在之外,并没有今天的两党领导层这种机关存在。早期的众院议长大部分是短期性职务,并不直接发挥政党领袖的作用。在这一时期,议长的权力和影响力因人而异,时高时低。十九世纪美国政坛三巨头之一亨利·克雷(Henry Clay)担任议长期间,议长的政治能量甚至可以和当时的几位总统比拟。而其他人担任议长时,历史都不会多记几笔,高下立判。

    政坛巨擎亨利·克雷

    时间推进到内战后,近代国会的生态开始成型。正是在这一时期,众议院修订了议事规则,废除了众议员通过冗长辩论(Filibuster)来阻挠法案通过的可能,正式的让众院成了一个制度上由多数决原则主导的机构。

    众院废除冗长辩论后,少数党所能使用的阻挠工具只剩下了在法定人数(Quorum)上做文章这一项。这一漏洞的来源,是立法机构开展立法工作需要满足法定人数标准,也就是需要三分之二的议员出席。在多数党不拥有三分之二席位的情况下,如果少数党拒绝出席,那么立法工作就无法开展,一些少数党反对的法案也就没法通过。

    这一拖延战术,一度让多数党吃尽了苦头。尤其是实际操作中,少数党议员并非真正的不出席,而是在众院议事时通过动议要求众院清点最低人数。到点名时,明明在却不回答,这种所谓消失的最低人数(Disappearing Quorum)让多数党无可奈何。直到“沙皇”瑞德上台,这问题才被解决。

    出席人数也是个学问

    时势造英雄,十九世纪末出现了两位政治能量极大的议长,将议长的权力推向了巅峰。一时间,大权独揽的议长被媒体拿来和同时代的帝俄沙皇作比较,因此两人被冠名“沙皇议长”。两人中首先出场的,是缅因州共和党人托马斯·瑞德(Thomas Reed),1889-1991和1895-1899六年时间里两度出任众院议长。

    瑞德能在这一时代的一票议长中脱颖而出,靠的不仅是他上台后强硬的手段和霸道的作风,同时还和他在出任议长前的经历有关。前面提到,众院在内战后废除了冗长议事机制,给众院的法案辩论时间和方式施加了限制。具体到操作层面,这项工作是由众院法规委员会(Rules Committee)来执行。在这一机制下,所有的国会法案在通过了原先的委员会审核之后,还需要经手法规委员会才能最终由全院表决。

    沙皇瑞德

    也就是说,法规委员会掌握了所有众院法案的生杀大权,除了极少数达成条件极难的议会工具可以让法案绕过法规委员会外,其余都要受到法规委员会的管控。瑞德在当选议长之前,担任了法规委员会的主席,他也深知这一权力要害机关的重要性。所以在出任议长之后,瑞德破天荒地继续亲自兼任法规委员会的主席一职,保证了不会出现大权旁落的现象,而这一传统,被后续的几位议长都学了去,极大的扩充了议长的权威。

    法规委员会那可就关键了

    与此同时,瑞德还在1890年强行废掉了少数党通过操控法定出席人数来阻挠众院议事的权力。在民主党继续玩消失的法定人数这一套时,瑞德要求众院的书记官在少数党议员不回答的情况下仍将其记录为出席。经过了一番斗争后瑞德彻底关闭了法定出席人数这一漏洞,进一步巩固了众院由多数党全权主导的传统。

    1910 “反叛”

    瑞德之后的另一位共和党“沙皇“议长,伊利诺伊州的约瑟夫·加农(Joseph Cannon)则是接过了他的衣钵,把议长的权力推向了”古典时代“的巅峰。

    加农在担任议长的期间内,不仅兼任的法规委员会主席,还同时把其他委员会名额和主席分配的权力牢牢掌握在自己的手中。众院最重要的三项权力:委员会分配,法案审核,和议程控制均被议长一人所独享。这个时代的众院,更像是西敏制下的内阁。议长等同于首相,大权独揽,而委员会主席则是他的阁员部属,因为权力和地位完全取决于议长,必须要唯唯诺诺,事事紧跟。

    大权独揽的加农

    然而,物极必反,加农权力过大,引发了众院两党基层成员的一直不满。特别是加农作为一个保守派共和党人,和同时期的进步派共和党总统老罗斯福政见不合,时常阻挠同党总统的立法议程,引起了党内进步派议员的强烈不满。

    于是,在未来的进步派大佬内布拉斯加州众议院乔治·诺里斯(George Norris)的带领下,共和党的部分议员在联合了在一旁幸灾乐祸正愁没机会羞辱加农的民主党议员发动了一场“起义”。具体的过程非常复杂,涉及到节假日(圣派特里克节)缺席和议会拉锯,这里就不具体谈了。

    进步派共和党人诺里斯

    总之,结果就是,1910之后,议长被禁止同时兼任法规委员会主席,委员会分配也改由筹款委员会(Ways and Means Committee)来负责。而委员会主席的任命,则由原先的议长亲自决定,改为完全按照资历(Seniority)来决定。那位多数党的成员在一个委员会干的时间最长,他就自动会成为委员会主席。

    这样一来,众院议长的权力受到重挫,此后的六十多年时间里一蹶不振。反观,从沙皇制议长淫威下独立出来的各大委员会主席,权力大大增长。不需要向政党本身和领导层负责的委员会事实上形成了一个个的独立王国,委员会主席也就成了割据势力(Committee Barons)。众院本身完成了从沙皇议长到“委员会治世”的转型。

    罗斯福新政和保守派联盟

    1910后长达半个多世纪的“委员会治世”时代中,众院议长和国会领导层缺乏管束委员会主席和基层议员的手段。即便是担任了17年议长的政坛传奇山姆·雷本(Sam Rayburn),他施展权力靠的也是劝说利诱的怀柔手段,而并非强硬的逼迫手下就范。 )

    雷本和罗斯福

    罗斯福新政开启的第五政党体系决定了民主党长期在美国政坛处于绝对的主导性地位。但新政联盟自身内部存在的意识形态分歧,决定了少数党(共和党)仍有在立法过程中影响政策的机会,

    这一时期国会各大委员会主席,由于是纯粹按资历决定,绝大部分都是由南方民主党人担任。这是因为民主党内战后在南方长期一党独大,在任议员除了初选偶遇风险外,毫无连任压力。北方民主党人倒霉时,南方民主党人根本不受政治大风变动的影响,一来一往资历就远比他们北方同僚资深许多。

    罗斯福新政

    意识形态层面,特别是种族问题上较为保守的南方民主党通过对委员会的控制,直接堵死了不利于维护种族隔离制度一切法案通过国会的通道。即便是罗斯福新政早期民主党占据国会四分之三席位的时候,大部分通过的新政举措和项目仍要在原则上遵循南方种族隔离的制度。随着新政规模越来越大,相当一部分南方的保守派更是开始拒绝和罗斯福政府合作,积极阻挠新的新政立法出台。

    南方保守派民主党人的出格行为,可是惹恼了罗斯福。为了进一步推动自己的新政,罗斯福在1938年中期选举亲自出马到南方各地拉票,支持在民主党初选中将保守派拉下马。然而,罗斯福本人超高的人气,仍不足以掀翻大部分在南方根深蒂固的老牌政客。经济复苏的缓慢,再加上前一年罗斯福试图扩充高院的余波,让民主党在1938年中期选举中蒙受巨大损失。

    FDR失败的清党行动

    38年选举的直接影响就是由保守派民主党人和保守派共和党人所组成的反新政的“保守派联盟”(Conservative Coalition)实际上成为了国会的新主人。之后二十多年的时间内,保守派联盟牢牢地把持着国会的控制权。尽管这一期间民主党除了短暂四年中断外,名义上一直掌控着国会,但美国国内有关民生议题的重大立法成就并不多。

    两党保守派在委员会层面的串通一气,运用他们对立法程序的高超理解,有效的阻挡了两党自由派势力推动民权相关的法案和其他进步主义立法。如果说罗斯福和杜鲁门的时代还有二战作为借口,整个艾森豪威时代在温和派共和党总统搭民主党国会的境况下只有《州际公路》一项重大民生有关的立法出台,则充分说明了这一时期国会在“委员会治世”下,保守派联盟是多么的高效。

    民权法案和新时代

    但是,政治周期永远是反反复复的。委员会治世时代过于分散的权力,低效的立法进程,都让民主党内的自由派和改革势力越来越不满。而在民主党长期把持国会的情况下,民主党主流(既自由派)的政策理念得不到贯彻,自然会引发对旧制度的巨大反弹,他们所需要的,只是一个理由和契机。

    果不其然,进入到60年代后,随着民权运动的声浪越来越高,反对南方种族隔离制度的美国人越来越多,国会被迫要面对必须在民权问题上有所作为的尴尬局面。作为国会多数党的民主党,更是被夹在了一个极其被动,腹背受敌的位置,既不能放弃传统的南方一翼,又不能开罪影响力越来越大的北方民主党人。

    民权运动带来的巨大社会压力使得国会不得不采取行动

    最终,在多重压力之下,民主党总统肯尼迪选择了公开为民权运动站台,正式准备向国会提交一份民权法案。但是在完成之前肯尼迪便遇刺去世,接替他的林登·约翰逊是来自德州的南方民主党人,这让许多人怀疑民权法案是否还有通过国会的希望。

    出乎意料的是,林登·约翰逊很快证明了他推动民权法案的决心并不比他的前任差。相反,在很多问题上,约翰逊的立场要比肯尼迪还要激进,更加自由派。事实上如果没有作为前参院多数党领袖,立法能力在历史上堪称第一的约翰逊的极力推动,民权法案未必能顺利躲过保守派联盟的绞杀最终成文。

    LBJ和JFK

    不过,国会对民权法案的抵制,并没有因为民主党总统的支持而消散。有冗长辩论机制的参院先不谈,法案光是通过众院就花了九牛二虎之力。时任众议院法规委员会主席霍华德·史密斯(Howard Smith),作为一个来自弗吉尼亚的南方民主党人和种族隔离制度坚决拥护者,用尽了一切手段阻止民权法案通过。

    而由于在委员会治世时代,法规委员会脱离了议长的控制,完全是按照委员会主席的意志在运行,史密斯的反对让法案长期卡在委员会层面无法进入表决阶段。史密斯本以为他的权威足以让法案胎死腹中,却没能想到民权运动带来的巨大社会压力,给予了两党基层议员破釜沉舟的决心。

    Judge Smith

    在两党议员纷纷准备签署“放行决议“(Discharge Petition),让法案绕过规章委员会直接进入表决之后,为了避免被羞辱的史密斯只得无奈给法案放行,承认了自己的失败。

    插曲

    这里还有一个很有意思的插曲,既史密斯在放行民权法案之后,又在最终表决前提出了一个修正案,将性别(SEX)加入到了民权法案第七章受保护的人群/类别之中。这一个小小的变动给未来几十年美国社会带来了巨大的意外影响,70年代兴起的女权运动和21世纪的婚姻平权均在不同程度上受益于这个变动。(最近就是高院去年六月的判决)

    但是,史密斯的举动究竟是出于什么用心,学界却一直存在着巨大的分歧。传统的观点认为史密斯属于夹带私货,试图通过引入两性问题来分裂支持民权的非南方议员(因为传统上工会反对女权),最终让民权法案无法通过。这一观点长期来作为学界主流,总是以一种嘲讽的目光看待史密斯这种弄巧成拙,搬起石头砸自己的脚的行为。

    女权先锋?

    然而事实可能未必那么简单,尽管我们无法真正了解史密斯当时真正在想什么,但作为一个种族主义者的史密斯,在女权问题上却有着十分进步的立场和历史。在担任国会议员期间,史密斯多次投票支持了平权修正案(Equal Rights Amendment),他也是同一时代的女权运动领袖爱丽丝·保尔(Alicee Paul)的好友兼国会政治盟友之一,长期以来一直在推动对女性权益的保护。

    当然,对于史密斯来说,他关心的只会是白人女性。但种族主义和女权主义在那个年代并不是一个矛盾的事情,这种今天看来不可思议的情况比比皆是。所以说,史密斯把“性“这个词加入民权法案,未必就不是真心的举动。毕竟羞辱北方民主党人的同时,还可以达成自己的政治目的,保护本州的白人女性。

    如何理解法律原意?

    史密斯立法意图的模糊性,同样还给美国法律中盛行的原教旨主义(Originalism)带来了理论上的挑战。既然原教旨主义讲究的是判案时要揣测立法者的原始意图,那么你怎么衡量类似史密斯和民权法案第七章的例子呢?戈萨奇大法官在去年高院六月份的判决中用的是文本主义(Textualism)的解读方法去解决这个纠纷,那么其他时候又该怎么办呢?

    总结

    不管怎么说,民权法案还是在历经艰险后通过了众院,在参院又经过了两个月的冗长辩论阻挠之后,最终由林登·约翰逊签署生效。

    随后的1964年大选中,LBJ带领着民主党取得了历史性的大胜,国会自由派的势力达到鼎盛,变相打破了保守派联盟的枷锁。随后的两年时间中,重大民生立法议题接连出台,林登·约翰逊的伟大社会又一次的改变了美国社会的本质生态,让自由主义在美国达到了巅峰。

    划时代的事件

    然而民权法案开启了新政联盟的垮台。随后的十几年中,民主党失去了作为美国政坛主导政党的地位,在1968年到1988年二十年期间仅赢了一次总统大选。但与此同时,共和党也并没有取代民主党成为政坛的主导,国会仍长期被民主党把持。

    众院牢不可破的民主党优势地位更是让外界怀疑共和党是否已经永远在众院层面沦为少数党。在民权法案证明了委员会制度不再是牢不可破的铁板之后,新的风暴的出现只是时间问题。70年代的水门事件,正是摧毁国会旧秩序的一个关键性事件。

    万恶之源水门事件

    没有水门事件,也不会有后来的里根,金里奇革命。

    而美国政坛极化的故事,才刚刚开始。

    PS: Clubhouse真香,欢迎大家关注我的账号@harrywang0401,一会有关于极化和这篇文章的专题研讨/吃瓜。

  7. inferior 北大未名
    inferior   在小组 2047 发表文章

    有种感觉,我们正处于又一次科技大变革的前夜

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  8. inferior 北大未名
    inferior   在小组 2047 发表文章

    为什么微博女权的理论家们总在发明新话?

    观近日首页有感,看了心累。

    你明白这些词的意思吗?

    慎点
    子宫道德
    平权仙子
    童权
    女权不是平权
    冠名权
    慎点-level-2
    婚驴

    劣精
    胎器
    赔钱货
    吸管女
  9. inferior 北大未名
    inferior   在小组 2047 发表文章

    伸手党:求推荐研究习近平早年经历的和之江新军的背景的著作

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  10. inferior 北大未名
    inferior   在小组 2047 发表文章

    你觉得自己属于DND设定中的哪个阵营?对什么事物的评价最能体现这一阵营的特点?

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  11. inferior 北大未名
    inferior   在小组 2047 发表文章

    我将来如果回国,理想主义一点就去当中学老师

    接触过不少来留学的博士硕士candidate,感觉基本的工具培训上水平太差。

    面试他们的时候,都已经经历过至少4年的训练(大学本科),一问什么是事实什么是观点,两眼抹黑;大概马原毛概(听说现在这课的名字越来越长了?)对辩证法还有点印象,就靠它胡扯。搜文献怎么搞?能知道Google scholar的已经算是不错的了。背的东西记得还可以,往深了一问原理,支支吾吾。为啥要出来读博读硕士?回答一看就不是真心话毫无热情。

    我想这些都是初等教育就该解决的问题,这些人大学本科毕业了还是这种水平,令人深感痛心。当个中学老师,最起码我觉得我可以保证学生对以上问题不再会一无所知。

  12. inferior 北大未名
    inferior   在小组 2047 发表文章

    AnA旅行者沙龙|博物馆与历史——为什么独裁者死不完?

    AnA旅行者沙龙|博物馆与历史——为什么独裁者死不完?

    02/11/2021

    中国数字空间词条:

    专制 专制极权

    原文

    注意文中有很多微信的链接,谨慎点击

    今次选的这首配乐是有特殊意义的

    原因在后文中会讲到

    BGM:We Are the World

    1、提格雷人民解放阵线

    2020年11月,covid-19还在影响全球的时候,埃塞俄比亚提格雷人民解放阵线和政府军发生武装冲突。死亡人数500人以上。

    这件事”本来应该“属于遥远国度的遥远人群发生的遥远战争,跟我没啥关系。

    但是,我看到新闻的时候略略捏了一把冷汗。

    原因在于:我曾经在提格雷人民解放阵线的地盘上,跟他们的军方,发生过一点……小小的冲突。

    事情是这样:本人看完火山熔岩湖的准备搭飞机离开时,带着的无人机被默克莱机场安检部门收缴了。我很生气:如果有不允许携带无人机的规定,应该在我到达的时候告知,让我寄存。不能在走的时候没收我的个人财产。

    于是本人据理力争,见谁都不服软。

    经过和安检员(她表示要把我抓进监狱)、安检员的上级、机场安检部门的负责人一路算不上太友好的交流,我得到了一个手写的字条。上面用我不懂的文字写了一串字符,让我到了首都的机场以后找专人申领。

    我再三询问:无人机会和我一起上飞机吗?

    高级军官:会的,我们会委托机组人员带着飞机一起搭飞机到埃塞俄比亚的首都亚的斯亚贝巴。

    然后我妥协了。不妥协的话就赶不上飞机了。

    结果毫不出人意料,我到了机场,拿着纸条,根本没有一个人理我。当时是晚上10点多,机场的管理部门基本都下班了。在我找了航空公司的人员,找了机场地面工作人员,很多好心人帮我打了若干个电话后,没能解决问题。

    于是,我决定,放弃之后的其他行程,在首都呆着,至少要搞清楚凭什么就把我的东西扣了不还给我。——我以前写旅行指南写旅行故事,很少写这类冲突性的事件。但是类似的情况其实在旅行中是会发生的。如何面对、如何解决,也是旅行者应当所具备的能力。

    当时,我并不知道“提格雷解放阵线”是什么,也不知道默克莱所在的提格雷省是在它的控制之下,机场也是由军方掌握的。

    如果我知道的话……可能态度会好很多。一来不敢发飙,二来,我对所有的反抗势力都有倾向性的好感。

    这件事,成为我接触埃塞俄比亚行政体系的一个契机。给了我一段很漫长的时间,让我得以缓慢地生活在亚的斯亚贝巴。

    2、 近代埃塞俄比亚

    埃塞俄比亚有一项桂冠。它是近代史上,唯一一个没有被殖民过的非洲国家。

    18世纪初,埃塞俄比亚的所罗门王朝宫廷内部陷入权利争夺,直到差不多20世纪才结束。期间,宫廷有许多戏剧化的情节,皇族暗杀(互相)、女皇掌权(不止一位)、双皇同时执政、部落冲突等等,如果由HBO之类的电视台来拍成影视剧,加上神秘的东非帝国和非洲部落为背景,我想会是很精彩的。

    此一历史时期,埃塞俄比亚杰泽语称之为「士师时代」。出自《旧约·士师记》的最后一句:“那时,以色列中没有王,各人任意而行。

    从这里,依然能看出作为基督教国家的埃塞俄比亚中浓烈而不同寻常的犹太色彩。(有关埃塞俄比亚古代历史和旅行指南:目的地指南|迷宫或圣域,在埃塞俄比亚寻找上帝的痕迹

    1889年,王子「萨赫勒·米里亚姆」在意大利的支持下继位,称门涅利克二世(如果看过我刚才提到的文章的话,应该有印象。这是传说中埃塞俄比亚古国的建立者的名字。传说他是所罗门王和示巴女王的儿子。采用这个帝号,用意明显)。

    次年,意大利想把埃塞俄比亚列为保护国(殖民),国王不同意,激烈反抗——埃塞俄比亚获得胜利,保持了其独立性。

    1930年,「海尔·塞拉西」继任皇帝。

    二战期间,意大利再次袭击了埃塞俄比亚,并占领了埃塞俄比亚北部的「厄立特里亚」地区。皇帝出逃英国。之后,意大利战争失利,该地区落入英国掌握,皇帝也跟着英国人回来了。

    这位皇帝的功绩有:废除奴隶制,发展教育。但他骄奢淫逸,实行独裁统治。国民食不果腹的情况下,依然过着极为奢华的生活。

    前殖民地「厄立特里亚」不愿意服从皇帝的统治,于1962年成立了厄立特里亚人民解放阵线,与埃国对峙。

    1974年,埃塞俄比亚发生大饥荒。皇帝引起了民众激烈的反对。军官趁机发动政变,拘捕了皇帝。一名叫「门格斯图」的上校刺杀了高级军官,闷死了狱中皇帝,排除竞争对手,在各大势力中脱颖而出,于1977年成为了国家元首。

    埃塞俄比亚至少长达2000年的君主统治模式宣告结束,开始进入历史阶段。

    不幸的是,门格斯图也是一位独裁者。可能还是一位更加恐怖的独裁者。他试图依靠“土地改革”笼络民心,同时实行红色恐怖,推行种族主义,迫害埃塞俄比亚的其他民族(包括犹太人),排除异己。国内不满的声音虽强,但都遭到了他的残酷的镇压。

    img

    门格斯图的受害者们

    提格雷民解放阵线是在1974年成立的。

    同时,厄立特里亚人民解放阵线持续与埃塞俄比亚新政府进行对抗。

    这两个组织,是反抗门格斯图的主要军事力量。

    不过,这两个武装力量的诉求有根本区别。前者想要推翻门格斯图政府,埃国内实现民主统治,后者要求独立。提格雷省位于北部边境,和厄立特里亚在地理上是接壤的,所以在很大程度上进行了合作。

    img

    默克莱是提格雷省的省府

    1990年,苏联式微。门格斯图宣布放弃社会主义,开始搞市场经济。次年,苏联解体。埃塞俄比亚的反对武装攻占首都。门格斯图逃亡国外。

    出生提格雷地区的「梅莱斯·泽纳维」担任总理,他是提格雷人民解放阵线的成立者之一。但由于他本身属于少数民族(提格雷地区的人是少数民族),因此被主流民族排挤,国内武装冲突不断。

    原本厄立特里亚人民解放阵线和提格雷解放阵线是合作关系,但后者上台以后,想要维持大一统。于是,双方继续开打。直到2000年,埃塞政府才正式承认其独立。不过仍处于敌对状态。

    2012年,梅莱斯去世,副总理接任。提格雷人民解放阵线对政府依然有巨大的影响。此时,埃塞俄比亚内部的民族冲突浮上台面,反政府示威不断。大量人员丧生。

    2018年,总理辞职。

    「阿比·艾哈迈德·阿里」当选。他一上台就依靠卓越的外交手段解除了和厄立特里亚之间数十年的敌对关系,获得了诺贝尔奖。但是,国内的冲突却没有到缓解。2018年的国内冲突造成了140万难民。

    由于艾哈迈德组建的执政党将提格雷人民解放阵线排除在外,埋下了冲突的隐患。

    2020年,由于疫情,政府要求推迟各地选举,提格雷省拒绝,于9月9日照常选举。双方进入紧张状态。11月4日,斗争爆发。因为造成了大量的死亡,艾哈迈德的军事行动也遭到了质疑。

    写这篇文章的时候,是2021年2月10日,问题依然还在。

    3、独裁者的博物馆

    那一年,我从默克莱离开时,由于无人机被提格雷人民解放阵线控制的机场安检部门收缴,皮球踢到了首都,我只好拿着一张写在草稿纸上的“介绍信”开始了和首都各部门打交道维权的道路。

    为此,我和当时的同伴在亚的斯亚贝巴租了一个房子住下来。一开始我们有6个人。几天后,小伙伴们各自去进行自己后续的行程,我是最后离开的。

    img

    img

    在首都短期租借的房子 包含隔天一次的清洁服务

    为什么我这么在乎这个无人机呢?一来,我不喜欢事情不明不白。没有合理的解释就把旅行者的财物收缴让我难以接受。二来,无人机是好友所赠,别具意义。

    当时我并不知道埃塞俄比亚近代史中有如此多的冲突,也不知道提格雷这个边境省一直处于战争前线非常敏感,更不知道它背后的提格雷人民解放阵线是推翻过政府的独立武装。

    所以,可以说是天真而勇敢的心态下,本人开始了在首都的生活。

    为了行事方便,我们包了一个车,每天往来机场。

    在解决问题的期间,司机同时作为向导,顺便带我们游历了非洲最大的城市之一,非盟总部所在地亚的斯亚贝巴。司机带着去吃了当地有名的传统菜餐厅,看了当地的民族舞蹈,逛了埃塞俄比亚唐人区,在菜市场买了菜。

    img

    img

    人生中做的最痛苦的一顿饭
    用一把钝的西餐刀切骨头

    img

    img

    img

    高级的埃塞俄比亚传统餐厅
    用锡壶盛水洗手
    肉类配酸味发酵饼
    这种饼是埃国传统食物,叫英吉拉
    (很多人吃不惯,味道是馊的)

    还参观了人类博物馆,见到了迄今发现的最古老的直立行走的南方古猿的化石——LUCY。她被称为“人类的祖母”。

    埃塞俄比亚所在的这个区域,在数百万年以前就是人类最早的起源地。境内有大量的古人类化石考古地,都被列入了最早(甚至是前10)的世界文化遗产。

    经历了千年的神学统治的欧洲,也经历了科学革命的欧洲,在“人类并非由上帝所造,而是从猴子进化来的”这个问题上,经历过颠覆性的认知革新。

    (PS:现在,最早的直立行走人化石已经不是露西了,而是阿尔迪(Ardi),她可能属于一个叫始祖地猿的新物种。阿尔迪的化石也是在埃塞俄比亚发现的。)

    img

    盆骨的进化

    在亚的斯亚贝巴游荡时,使我最意想不到的是一个叫「红色恐怖殉难者纪念馆」的博物馆。

    一般的景点,司机都会在车上等我们。这个博物馆,司机主动要求一起参观。

    那是一个独立的小楼,里面的灯光很暗。内中完全没有游客,当我们进去的时候,管理员一直陪同我们。

    并且,她额外地为我们打开了一些平时不让人参观的展览室,让我看到了这个博物馆中最非同寻常的收藏——尸骨。

    img

    img

    img

    可能是看我不像那种漫不经心的游客
    管理员用钥匙打开了殉难者遗骨陈列室
    我得到允许后拍了几张照片
    这样的房间不止一个

    红色恐怖殉难者纪念馆,是为了纪念在门格斯图统治期间,被杀害的3万多人而修建的。推翻了独裁皇帝的门格斯图,结束了君主制的门格斯图,实行名义上的“社会主义”的门格斯图,成为了另一个更恐怖的怪兽。

    在他的统治期间,除了大规模的红色恐怖杀戮外,经济被严重破坏,80年代出现了前所未有的大饥荒。这场饥荒引起全世界的关注,迈克尔杰克逊的《We Are The World》就是为了给埃塞俄比亚的灾民筹款的超大型演唱会创作的主题曲。

    本文的BGM就是这首歌。它的副标题是:USA FOR AFRICA(美国帮助非洲)。

    门格斯图统治期间,除了大肆屠杀异己分子、实行土地改革、推行非市场化的经济政策、造成灾荒外,还干了一件让我十分眼熟的事。

    1983年,门格斯图委托英国学者为其编写一本埃塞俄比亚的历史书。他要求:“证明这个国家的多种文化背后有一种潜在的一致性,强调该国政治版图在古代历史上是统一的,而反政府军正企图破坏这个版图。”(引自Graham Hancock,该书的编写者。)

    这是个脏活,英国人接了这个脏活。英国人后来在自己的著作中忏悔了为门格斯图政府创造历史的行为,表示“如果能再活一次,绝不会与如此卑鄙的家伙为伍。”

    20世纪,绝大部分国家都结束了君主制,至少在形式上采取了以民主选举为方式的民主政体。这是由法国启蒙运动开始,在美国形成实体的,现代国家制度。

    遗憾的是,虽然形式上成为了现代国家,很多地方仍然没有真正进入现代意义上的民主化,而是以另一个名义在进行独裁。

    启蒙运动的发源地法国经历了第一二三共和国和帝国的反复。现在正在引起国际关注的缅甸、之前介绍过的菲律宾、曾经也有过红色恐怖的柬埔寨,都有类似的问题。

    中亚地区的伊朗、小亚细亚的土耳其、北非的埃及,这些古老的君主制国家,也都有近似的情况。泰国的皇室依然保留,俄罗斯的普京也有关于独裁的争议。

    皇帝被推翻了,新皇帝又出现。

    img

    博物馆收藏的照片
    门格斯图镇压反对武装

    我们从博物馆出来的时候,司机异常沉默。我猜他对于国家的沉重历史有许多的想法。于是试着找点话题,说道:你们经历了一段可怕的过去。红色恐怖期间有太多人丧生了。

    司机没有回答我,不发一言地走向停车场。

    到了小型停车场门口无人的巷子里,司机忽然停了下来,看了看四周,非常小声地说了一句:现在也一样。

    然后头也不回的走到车前,开门坐进驾驶室,仿佛从来没有说过刚才那句话。

    换做别人,可能会以为自己听错了,或者不知道他是什么意思。

    但是我知道。

    他是在恐惧。

    他心里有无数的话想说,但是不敢说。

    所以他只能带着外国人去红色恐怖纪念馆,默默陪着参观过去的历史,希望多一个旅行者知道他所在的国家的过去。

    所以他只敢在没人的角落,跟看起来无害没有背景的外国游客,诉说当代。

    所以他无法继续再说什么。没有意义而且有巨大的风险,我们这些普通旅行者即使听到任何内容也对无法他的现状产生任何帮助。

    埃塞俄比亚并不是一个受人关注的国度。

    那是2017年,当时的统治者是「海尔马里亚姆·德萨莱尼」,之前是副总理,前任总理死后接任。他和前任一样,与提格雷人民解放阵线属于同一民族:提格雷尼亚人。

    这是一个人口只占6%的少数民族。

    他们推翻了实行恐怖统治的独裁者门格斯图。门格斯图属于阿姆哈拉人,是埃塞俄比亚的一个大民族。作为非洲最嗜血的独裁者,门格斯图对其他民族进行了迫害。

    img

    img

    img

    img

    整个博物馆的墙上贴满了照片
    这些照片是门格斯图统治时期的死难者
    我就在这些人的注视下,参观了博物馆

    门格斯图倒台后,少数民族的提格雷尼亚人上台以后,情况也不太好。

    那位司机显然不是提格雷尼亚人。他快速地说完那句“现在也一样”后坐到车里后不发一言的身影一直在我的脑海里。之后许多天,我一直用他的车,他再也没有提起过这个话题。

    这比我读任何资料都更雄辩地解释了2017年埃塞俄比亚的统治环境,解释了当时人民的状态(他的恐惧感使我永远无法忘记)。

    消灭了门格斯图推翻了独裁者,自己成了独裁者。

    提格雷人们解放阵线推翻了门格斯图,也给民众带来了独裁恐惧。

    今天,新总理艾哈迈德在三个月前镇压提格雷武装力量的时候,也展现了相当的残酷性。

    仿佛是一个屠龙者变成恶龙的循环。

    4、为什么独裁者死不完

    我取回自己无人机的过程中,起码和七、八个部门打了交道。

    过程很琐碎,也很无趣,我就不详细叙述了。

    总体而言,低效率、踢皮球、没人管事、官员口头承诺一件事以后过会儿就不认账,这些事情都发生了。

    其中有一天,有一个我也不知道什么级别的人员替我联系了默克莱机场以后,表示我的无人机会在当天送到。结果我从早上9点开始等,等到晚上11点最后一班飞机走了,都没有送到。

    还有一次,我最终等到无人机以后,A部门的官员让我去机场海关办理手续。海关在国际航班候机楼里,安保部门因为我没有机票不让我进候机楼。我给A部门那个让我去海关的官员打电话,让安保员接了电话沟通以后,还是不让我进去。

    两个部门之间没有任何协调。

    在我发火了要拍安保人员的照片投诉时,我的护照差点都被他们撕了。

    总之,我深刻、直观、深度地体会了当时的行政环境。

    因此,我不禁想要大声询问:为什么独裁者死不完?!

    新的独裁者代替旧的独裁者,推翻一个独裁制度后建立起另一个独裁制度(尽管换了一个名义)这种事,在世界上,尤其是长期实行君主制的古老国家中,屡见不鲜长盛不衰至今如此。

    img

    这是我从17年就开始考虑到现在的问题。这期间,我也读了许多许多许多的关于这方面的书籍。也在一些自媒体平台上跟很多人推荐过不少书籍。

    如今,我有了一个简单但直接的答案。

    反独裁包含两个含义。

    第一个含义是,反某一个具体的独裁者。

    第二个含义是,原则性的反独裁本身。

    一个人反某个具体的独裁者并不意味着原则性的反独裁。更有可能的是,他只是想打倒这个独裁者以后,自己作为获利者,来实行相同的统治。

    更直白的说,反抗皇帝的人,并不是要反抗不平等的制度,而是打算自己当皇帝。

    因此,在面对独裁政权时,指望另一个强人,往往是缘木求鱼。新制度的建立,需要伴随新的认知、新的价值观、新的意识形态而产生。

    微观的层面也是如此。一个人反对什么也不能说明任何问题。TA不认同的,未必就是事情本身,而可能是既得利益者并非自己。

    观念的建立,需要的不是一两个人,而是整个群体都有足够的能力去懂得与“独裁”相对应的是什么。这种懂得,需要知识。

    反对独裁者,并不能使独裁消失。因为独裁制度仍然还在,人们依然还在接受威权统治,属于新的独裁者代替旧的独裁者的轮换局面。

    这就是独裁者死不完的原因。

    想要真正让独裁者不再出现,需要的不仅仅是击败“具体”的对象,更在于树立起新的制度和思维方式,一种新的价值理念。

    屠龙者要消灭的并非只有某条恶龙,还有成为龙的渴望,甚至还有服从于龙的奴性。

    独裁者门格斯图还没有死。

    2006年被埃塞俄比亚政府单方面判了他死刑,却未能执行。他现在还活着,据说流亡在津巴布韦。

    击败“独裁”,远比击败“独裁者”要难得多。文明的发展也并非总是向前。历史发展远远比我们想当然地更加困难和复杂。

    埃塞俄比亚能在短期内否结束独裁循环,我不敢断言。但总体是乐观的。

    至少,埃塞俄比亚允许了厄立特里亚的人民进行公投,并独立。至少,在埃塞俄比亚的首都还有一座红色恐怖殉难者纪念馆作为提醒。

    至少,那位想表达什么的司机,什么也不用说,把我带去那里,就向我传达了一份历史。

    至少,埃塞俄比亚的人民没有忘记恶龙曾以什么样的姿态出现。

    独裁者,总有一天是会死完的。

    —————————————–

    埃国攻略:

    1.存放“人类的祖母”化石的博物馆叫埃塞俄比亚国家博物馆。名号很响亮,东西很少,20分钟逛完。

    2.红色恐怖纪念馆不要门票,但需要访问者登记。人不多,运气好(或者主动沟通的话),可以请博物馆的工作人员做讲解。有些展室需要单独开放。

    3.埃国是中国在非洲最大的建设地。亚的斯亚贝巴有大约40万中国人。华人区规模很大又不同于美国的唐人街。有些小贩甚至能用中文叫卖。有时间值得一看——祖国人民在发达国家的唐人街和在贫穷国家的华人聚集区,状态是一样的吗?

    4.首都南部不远有100多处考古遗址,其中有一处叫Tiya,登录世界文化遗产。

    5.埃塞俄比亚的自然风光很好,毕竟地处东非。可以在谷歌地图上找国家公园。多个世界文化遗产区域附近也是很好的自然区。

    6.[重点]

    埃塞俄比亚南部,奥摩河谷、孔索(见下图)有真正若干个原始部落。

    我本来有计划要去,但因为无人机的事情计划搁置了。

    这是很遗憾的 ,因为这些原始部落毫无疑问正在迅速消失。现代文明、现代旅游业,会在极短的时间内将之同化。以后遗留下来的,都只是故意留给旅行者参观的“样板”罢了。

    这些原始部落,其实并不能算“埃塞俄比亚人”。他们和埃塞俄比亚这个国家没有从属关系,不参与其税收、行政、司法、教育体系,甚至说,他们根本没有国家概念。他们应该算作埃塞俄比亚的一部分吗?从文明世界的角度,这片区域是在埃塞俄比亚的境内,地球上其他国家、其他人,也都承认埃塞俄比亚政府他们的“合法的”统治权。可这仅仅是外部的认知,是一种单方面的宣布。

    当然,埃塞俄比亚政府、现代文明的力量远远大于这些原始部落,要征服甚至消灭他们都是轻而易举的。但是,这样,真的可以证明这些人、这些地方,应该属于“埃塞俄比亚”这个国家概念吗?或者说,他们应该被“划分”给某个现代国家接受统治吗?

    我想,这也是一个值得考虑的社会学问题。

    img

    持枪的埃塞部落居民
    出自纪录片《Samsara》

    附录:

    埃塞俄比亚世界文化遗产地图:

    img

    10:阿瓦什低谷

    (附近有个湖是火烈鸟栖息地。这里是露西、阿尔迪的发现地——这两具古人类化石相距约100万年,却是同一个地方发现。其实有点不寻常。)

    12:蒂亚

    15:阿克苏姆 (位于提格雷省,之前写过的火山熔岩湖也在附近)

    17:奥莫低谷

    18:拉利贝拉岩石教堂(上篇文章有讲到)

    19:贡德尔地区的法西尔盖比城堡及古建筑

    1189:历史要塞城市哈勒尔

    1333:孔索文化景观

    ———–

    最后:

    我的无人机拿回来了吗?

    当然拿回来啦!本人毕竟有可爱作为终极武器。

    公众号里出现过的所有的无人机视频都是同一部无人机拍的。这么一说的话,是不是显得这些视频都有些珍贵了?哈哈哈哈。

    img

    在小黑屋里取回无人机的手续
    哈哈哈,本人战胜了提格雷人阵和首都行政部门

    谢谢大家看完。

    么么哒。

    祝福大年新年快乐!!!

    愿失控的生活都回到自己的手上,愿大家都能自己掌握人生!各位加油!

    img

    img

    埃塞俄比亚人民给大家跳个舞
    感谢那位不记得名字的司机大哥
    我在亚的斯亚贝巴的那些日子还是很有收获的

    Words by Julien | Picture by Julien

  13. inferior 北大未名
    inferior   在小组 2047 发布问题

    科技是否巩固了极权的统治?相比二十世纪以来的诸多独裁政权,习近平是否对社会拥有了前所未有的控制能力?

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  14. inferior 北大未名
    inferior   在小组 2047 发表文章

    自用——加密私信

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  15. inferior 北大未名
    inferior   在小组 2047 发表文章

    一则关于 《unbelievable 》强奸受害者的影片简介

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  16. inferior 北大未名
    inferior   在小组 2047 发表文章

    南方周末 |输入法会“背叛”我们吗?

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  17. inferior 北大未名
    inferior   在小组 2047 发布问题

    翻了翻中国大陆的高考历史题发现基本全是灌输观点

    想出几道“高中难度”的历史考题就去翻了一下最近几年的高考试题,结果发现选择题基本都是中共常见的话术下的观点。。

    倒也不是想说说这些观点对不对。因为本人作为理科生没怎么经过这种训练,妄加评论恐怕多为不妥,不过显然有立场的题拿来做入站考试很不合适。。

    印象中历史考试选择题里考史实的不少,材料题倒是让你从材料里摘取观点自己组织一下(说白了感觉和语文考试差不多)

    不知道大陆的文科生对此感受如何?其他地区的历史教育又是怎样的呢?

    随便发张图感受一下

    大陆境内网站: http://www.gaokao.com/e/20200527/5ece6a38be086_3.shtml

  18. inferior 北大未名
    inferior   在小组 2047 发表文章

    前南方周末"首席评论员"(自称)李铁自爆变为粉红的心路历程

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  19. inferior 北大未名
    inferior   在小组 2047 发表文章

    我现在越发能理解编程随想说他不愿移居国外的理由了

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  20. inferior 北大未名
    inferior   在小组 2047 发表文章

    【iYouPort】打破 Matrix 的路~与IYP对话2020:关于中国和美国

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  21. inferior 北大未名
    inferior   在小组 2047 发表文章

    本福特定律,中心极限定理,以及对数正态分布

    前段时间本福特定律着实火了一段时间,我也趁机学习了一下。本着费曼学习法的原则试一试能不能把理解的部分清晰地写出来。

    具体内容先坑着 不开坑大概永远都不会写,所以先开了再说ゝω・)~☆

  22. inferior 北大未名
    inferior   在小组 2047 发表文章

    一个简易的在不同设备(虚拟机)之间分享文件的方法

    想必大家都经历过这种情形,例如别人通过微信或者qq传来一个文件,想在电脑上打开查看(电脑要来干反党活动,天朝软件客户端当然是坚决不装的)。或者是下了一个可疑的软件,想在虚拟机里测试

    当然实现跨不同的操作系统文件同步的方法有很多,比如网盘,邮箱,虚拟机guest utility tools设定共享目录,等,不过为了这些还要装额外的软件很麻烦,特别是对于虚拟机来说,和host系统共通的部分越少越好

    一个比较简单的办法是在要分享的设备上设置一个临时的

    [http server](https://2047.name/t/8276) 。

    不过如果只是为了临时分享文件,是没必要写一段脚本的。python自带了一个简易的httpserver

    用法就是在命令行中进入你要分享的文件目录,然后输入以下指令:



    python3 -m http.server --bind 0.0.0.0 8964

    其中 --bind 是http服务器绑定的地址, 8964是端口号

    然后从任意浏览器访问http://你设备的ip:你设定的端口号就可以了 效果如下

    分享完成后,按Ctrl+C 退出当前进程即可

    可能的问题(目前暂时想到这么多):

    手机可以装Termux,然后用pkg install python可以安装python,然后在终端输入termux-setup-storage可以把手机内置存储挂在上,再输入cd ~/stroage 就是内置存储的目录了。。。这方法显得比较麻烦,我看app store里也有一些更简易的工具提供http server的功能,不过他们是否靠谱就不清楚了。。。

    这方法只能下载不能上传(所以某种意义上也是更安全)

    如果httpserver一方设置了防火墙,比如tails,很可能会失败

  23. inferior 北大未名
    inferior   在小组 2047 发表文章

    正在看直播,弹劾川普的议案已经在众议院通过

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  24. inferior 北大未名
    inferior   在小组 2047 发表文章

    test不要点进来

  25. inferior 北大未名
    inferior   在小组 2047 发表文章

    使用用户脚本,如你所愿改造网页(2)-在2047发帖时自动排版

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  26. inferior 北大未名
    inferior   在小组 2047 发表文章

    使用用户脚本,如你所愿改造网页(1)-解决友站敏感词

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  27. inferior 北大未名
    inferior   在小组 2047 发表文章

    深入浅出 Greasemonkey

    深入浅出 Greasemonkey

    版权 © 2005 Mark Pilgrimi sebug paper

    这本书、及其样例代码和视频文件都是自由软件。在“GNU 通用公共许可证(自由软件基金会)(版本2以及更新版本)”许可下,您可以随意的再分发和/或修改它们。我们发行这本书、及其样例代码和视频文件,希望它能对您有所帮助。但是我们并没有提供任何担保!请查阅GNU 通用公共许可证获取更多细节。

    目录

    版权 © 2005 Mark Pilgrimi sebug paper

    这本书、及其样例代码和视频文件都是自由软件。在“GNU 通用公共许可证(自由软件基金会)(版本2以及更新版本)”许可下,您可以随意的再分发和/或修改它们。我们发行这本书、及其样例代码和视频文件,希望它能对您有所帮助。但是我们并没有提供任何担保!请查阅GNU 通用公共许可证获取更多细节。

    目录

    第 1 章 开始

    1.1. Greasemonkey 是什么?

    Greasemonkey 是一个 Firefox 扩展,它具有通过编写脚本来改变被访问网页的功能。使用它,能使您访问的网站更便于阅读或者更便于使用。使用它,您能修复网页渲染的缺陷,而无须烦扰网站管理员。使用它,您能让网页更好地使用残疾人援助技术,清楚响亮地说出网页内容,或者将网页内容变为盲文。使用它,您能自动地获得其它网站的数据,从而使两个网站更好地相互链接起来。

    然而 Greasemonkey 本身并没有作这些事。实际上,在您安装它之后,您注意到根本没有任何变动...直到您开始安装一种叫做“用户脚本”的东西。用户脚本(user script)就是一大块 Javascript 代码,还有些附加信息,用来告诉 Greasemonkey 脚本应该在何时何地运行。每个用户脚本能够针对具体页面,具体网站,或者一批网站。用户脚本能做到您在 Javascript 中可做到的任何事情。实际上,它能做得更多,因为 Greasemonkey 提供了专供用户脚本使用的函数。

    这里是Greasemonkey 脚本库含了上百个用户脚本,这些都是用户为了满足自己的需要而写的。一旦您写了自己的用户脚本,只要您认为别人也许发现它有用,您可以把它添加到脚本库中。您也可以自己使用,因为从编写过程中获得知识,获得满足感,才是更重要的。

    这是Greasemonkey 的邮件列表,您可以在那里提问,发表用户脚本,和讨论新特性的想法。Greasemonkey 开发人员常去这个邮件列表; 他们也许会回答您的问题!

    为什么写这本书?

    深入浅出 Greasemonkey 是从 Greasemonkey 邮件列表中的用户讨论和作者本人编写用户脚本的经验中发展而来。仅仅一个星期,作者就发现,新用户经常会提出重复的问题,而这些问题是被回答过的。此外,在写了几个用户脚本以后,作者发现,一些常用的模式,以及可以解决某一类问题的成块的可重用代码会反复出现。因此,作者开始整理这些有用的模式,解释编程思路,同时作者也从中写作中得到不少锻炼。

    如果没有 Greasemonkey 的开发者 Aaron Boodman 和 Jeremy Dunck 的大力帮助,没有那些对我的初稿提出宝贵的反馈建议的用户,就不会有现在的这本书。谢谢大家。

    1.2. 安装 Greasemonkey

    要写用户脚本,您首先要安装 Greasemonkey 扩展, 0.3 或以上版本。

    过程 1.1. 安装 Greasemonkey 扩展

    1. 访问Greasemonkey的主页

    2. 点击名为“Install Greasemonkey”的链接。

    3. Firefox会显示(可能在浏览器窗口的上方)阻止网站安装软件的信息。点击编辑选项...打开“允许的站点”对话框,点击允许,将 Greasemonkey 的网站添加到允许安装软件的网站列表中。点击确定,关闭“允许的站点”对话框。

    4. 再次点击名为“Install Greasemonkey”的链接。

    5. 将弹出安装对话框,确定您要安装。几秒钟后,安装按钮变亮,点击安装。

      [软件安装对话框截图]

    6. 重新启动 Firefox。

    当您重新启动了 Firefox 后,选择工具 (T)单。您应该看到四个菜单项:启用 (E)、管理用户脚本 (U)...、新建用户脚本 (N)...和用户脚本命令 (C)。 只要管理用户脚本 (U)...可以使用,那么就装好了。其他的两个要在特殊情况下才能使用。

    一般来说,安装好 Greasemonkey,(除了四个菜单项外)并不会给浏览器添加任何功能。但是它能让您添加别的东西,名叫“用户脚本”,用户脚本可以用来定制指定的网页。

    1.3. 安装用户脚本

    Greasemonkey “用户脚本”是用 Javascript 编写的独立文件,用来定制一个或多个网页。

    [提示] 您可以在Greasemonkey脚本库,找到许多用户脚本。尽管没人要求您必须把脚本放到那儿去,但是实际上,您可以把您的脚本共享到任何地方,这样别人就可以安装它了。甚至您根本不需要一台网络服务器,因为你可以从本地文件中安装用户脚本。
    [注意] 用户脚本的文件名必须以.user.js结尾。

    我写的第一个用户脚本叫做“Butler”。它增强了Google的搜索结果的功能。

    过程 1.2. 安装 Butler 用户脚本

    1. 访问Butler 的主页,可看到有关 Butler 的功能简述。(并不是所有的用户脚本都有主页, Greasemonkey 只要有用户脚本就够了。)
    2. 点击“Download version...”链接 (0.3截至发稿时)。
    3. 弹出一个标题为“Greasemonkey 安装过程”的对话框,其中显示了将要安装的用户脚本名称,简介以及作用与排除的页面列表。所有这些信息都包含在脚本之中;以后您会在用元数据描述您的用户脚本学到定义的方法。
    4. 点击确定安装用户脚本。

    没有意外的话,Greasemonkey 会在状态栏滑出一个提示,“'Butler' 安装成功”。

    现在,可以在 Google中任意搜索一些东西。在搜索结果页面的顶部会有一行文字:“Try your search on: Yahoo, Ask Jeeves, AlltheWeb, ...”。在其下面会有一个标签:“Enhanced by Butler”。这些都是由 Butler 用户脚本加进去的。

    参考资料

    1.4. 管理用户脚本

    如果愿意可以安装很多个 Greasemonkey 脚本。 Greasemonkey 带有配置对话框来管理用户脚本:暂时禁用,改变配置或卸载脚本。

    过程 1.3. 暂时禁用 Butler

    1. 在菜单中,选择工具 (T) → Greasemonkey → 管理用户脚本 (U)...,Greasemonkey 会弹出一个对话框:“管理用户脚本”。
    2. 在对话框左方一栏中列出了已安装的所有用户脚本 (如果您从本文开始一步步来的话,这里只有一个脚本:Butler。)
    3. 选中列表中的 Butler,然后取消启用复选框。左方列表中的“Butler”就会由黑色转为灰色。(当它还是选中状态的时候,看起来比较费劲,但是当安装了很多脚本的时候,这个特性就非常有用了。)
    4. 点击 确定,退出“管理用户脚本”对话框。

    现在 Butler 已经安装,但是未被启用。您在Google上随便搜索下就会发现确实如此。在页面顶端的“Enhanced by Butler”应该没有了。您可以在“管理用户脚本”对话框中重复刚才的步骤,重新选中 Butler,重新启用启用复选框。

    [注意] 虽然我用“暂时”来形容禁用用户脚本,但是如果您不重新启用它,它就始终会被禁用。之所以是暂时,只因为您可以方便的启用它,而不需要再到我的网站上来找原始脚本,而且还要重新安装。

    也可以用“管理用户脚本”对话框来彻底得卸载脚本。

    过程 1.4. 卸载 Butler

    1. 在菜单中,选择工具 (T) → Greasemonkey → 管理用户脚本 (U)...。Greasemonkey 会弹出“管理用户脚本”对话框。
    2. 在左方列表栏中,选中 Butler 再点击卸载。不需要确认;用户脚本马上就被卸载掉了。
    3. 第三步... 没有第三步!(感谢 Jeff Goldblum。)

    先等一下,还没完呢!您也可以修改您之前安装过的用户脚本的配置。记得第一次安装 Butler 时看到的对话框吗,上面有两个列表:包含和排除的网站?嗯,您可以在“管理用户脚本” 对话框中编辑这两个列表,不管是第一次安装时或者其它什么时候。

    好!继续。假如您觉得 Butler 不错,但是它在Froogle上毫无用处。Google的商品对比网站。那么可以编辑用户脚本的配置来排除这个网站,而让它在别的 Google 网站上仍然生效。

    过程 1.5. 重新配置 Butler 排除 Froogle

    1. 在菜单中,选择工具 (T) → Greasemonkey → 管理用户脚本 (U).... Greasemonkey 会弹出“管理用户脚本”对话框。
    2. 在左方面板中,选择“Butler”。接着在右方面板中就会显示两个列表,一个是执行的页面(“http://.google./*”),另一个是豁免的页面(空白)。
    3. 接下来在“不包含下列网页”的列表中,点击添加...。
    4. Greasemonkey 会弹出另一个对话框:“添加网页地址”,并提示您输入新的URL。在其中输入**http://froogle.google.com/\***然后点击确定。
    5. 回到“管理用户脚本”对话框中,豁免页面列表中现在就有了您新添的 URL 和通配符,http://froogle.google.com/\*,表示 Butler 会在froogle.google.com站点的任何页面上执行。星号被当做通配符使用,可以在 URL: 域名,路径或者任意 URL schema(http://)中使用 。
    6. 点击确定,退出“管理用户脚本”对话框。在 Froogle 中搜索一下,验证下 Butler 会不会执行。但是它仍然会在普通搜索、图片搜索以及 Google 站点的其他页面中执行。

    第 2 章 您的第一个用户脚本

    2.1. Hello World

    我们步入 Greasemonkey 美妙世界的万里长征将从第一步开始,所有读过技术手册的读者都会很熟悉这一步:让您的电脑打出“Hello world”。

    例 2.1. helloworld.user.js

    // Hello World! example user script
    // version 0.1 BETA!
    // 2005-04-22
    // Copyright (c) 2005, Mark Pilgrim
    // Released under the GPL license
    // http://www.gnu.org/copyleft/gpl.html
    //
    // --------------------------------------------------------------------
    //
    // This is a Greasemonkey user script.
    //
    // To install, you need Greasemonkey: http://greasemonkey.mozdev.org/
    // Then restart Firefox and revisit this script.
    // Under Tools, there will be a new menu item to "Install User Script".
    // Accept the default configuration and install.
    //
    // To uninstall, go to Tools/Manage User Scripts,
    // select "Hello World", and click Uninstall.
    //
    // --------------------------------------------------------------------
    //
    // ==UserScript==
    // @name          Hello World
    // @namespace     http://diveintogreasemonkey.org/download/
    // @description   example script to alert "Hello world!" on every page
    // @include       *
    // @exclude       http://diveintogreasemonkey.org/*
    // @exclude       http://www.diveintogreasemonkey.org/*
    // ==/UserScript==
    
    alert('Hello world!');
    

    正如您所见到的,这个Hello World脚本的大部分都是注释。有些注释,比如如何安装,没什么特殊含义;那只是对初学者的一些指导。但是,有一节注释确实有特殊含义,下一节会有详细的解释。

    要看到脚本的效果,您首先要安装,然后访问一个不在diveintogreasemonkey.org域名下的网站(例如,Google)。这个页面将会像平时一样显示出来,还会弹出一个对话框:“Hello world!”

    下载

    2.2. 用元数据描述您的用户脚本

    每个用户脚本都含有一段元数据,用来向 Greasemonkey 描述这个脚本自身的信息:发行者,执行规则等等。

    例 2.2. Hello World 元数据

    // ==UserScript==
    // @name          Hello World
    // @namespace     http://diveintogreasemonkey.org/download/
    // @description   example script to alert "Hello world!" on every page
    // @include       *
    // @exclude       http://diveintogreasemonkey.org/*
    // @exclude       http://www.diveintogreasemonkey.org/*
    // ==/UserScript==
    

    这里有六条独立的元数据信息,作为一个整体包含在注释中。现在让我们按顺序逐条解释。首先讲最外面的这层包装。

    // ==UserScript==
    //
    // ==/UserScript==
    

    上述标记很重要,必须完全吻合。Greasemonkey 用它们来标记用户脚本的元数据段。这段注释可以放在用户脚本的任何部位,但经常会放在靠近顶部的地方。

    在元数据段内,第一项是名字。

    // @name          Hello World
    

    这是您的用户脚本的名字。它将会在您第一次安装脚本时在安装对话框(install dialog)中显示出来。之后会显示在“管理用户脚本”对话框中。这个名字应该言简意赅。

    @name可选的。如果存在,它只能被定义一次。如果不存在,将会默认显示用户脚本的去掉扩展名.user.js的文件名。

    下一个是命名空间(namespace)。

    // @namespace     http://diveintogreasemonkey.org/download/
    

    这是一个 URL,Greasemonkey 用它来区分名称相同但是作者不同的用户脚本。如果您有一个域名,您可以使用它作命名空间。另外您也可以用 tag: URI

    @namespace是可选的。如果存在,它只能被定义一次。如果不存在,将会默认使用下载用户脚本的网站域名。

    [提示] 元数据可以以任意次序排列。笔者推荐使用@name@namespace@description@include,最后是@exclude,但是其它的顺序也没关系。

    下一项是描述。

    // @description   example script to alert "Hello world!" on every page
    

    这是关于用户脚本功能的描述。在您第一次安装脚本时,它将会在安装对话框中显示,之后会在“管理用户脚本”对话框中显示。描述不应多于两句。

    @description是可选的。如果使用它,那么它只能被定义一次。如果不使用,默认会显示为空白。

    [重要] 不要忘记写@description。即使您所写的用户脚本是给自己用的。你最后很可能会拥有很多脚本,如果没有描述的话,在“管理用户脚本”对话框中管理脚本将会成为一件令人头疼的事。

    下面三行是最重要的 (从 Greasemonkey 的角度来看):@include@exclude URL。

    // @include       *
    // @exclude       http://diveintogreasemonkey.org/*
    // @exclude       http://www.diveintogreasemonkey.org/*
    

    这几行让 Greasemonkey 知道在那些网站上执行您的用户脚本。您可以明确的指定一个 URL,或者用通配符*来代替域名或路径中的部分字符。在这个例子中,我们告诉 Greasemonkey 在除了http://diveintogreasemonkey.org/http://www.diveintogreasemonkey.org/的所有网站上执行。排除(Excludes)优先于包含(includes),所以即使http://diveintogreasemonkey.org/download/匹配* (所有网站),它还是会被排除掉,因为它还匹配http://diveintogreasemonkey.org/*

    @include@exclude 是可选的,可以自定义执行和豁免的 URL,但必须每条规则各占一行。如果您没有任何定义, Greasemonkey 将会对所有的网站执行您的用户脚本。(等同于@include *)。

    [注意] 您需要定义非常精确的@include@exclude元数据。Greasemonkey 不会对域名作任何的假设,如果一个网站符合http://example.com/http://www.example.com/,您需要把这两个网址都标示出来。

    参考资料

    2.3. 编写用户脚本代码

    我们的第一个用户脚本是在执行时简单地显示一条提示信息:“Hello world!”。

    例 2.3. 显示“Hello world!”提示信息

    alert('Hello world!');
    

    尽管这段代码仿佛够用了,而且也达到了目的。Greasemonkey 实际上在幕后做了很多的事情来确保用户脚本不会与页面所包含的原有脚本发生严重的冲突。特别是它会自动的把您的用户脚本封装在一个匿名的函数包里。一般情况下,您可以忽视,但是终究有一天会让您遇到麻烦。所以最好现在就了解一下。

    最经常遇到的麻烦之一是在用户脚本里定义的变量和函数能被别的脚本访问。事实上,只要用户脚本运行完了,所有的变量和函数就都不能使用了。如果您期望使用 window.setTimeout 函数,或者在链接挂上字符串式的 onclick 属性然后期望 Javascript 稍后调用您的函数,那么您会遇到问题。

    例如,下面这个用户脚本中定义了一个函数 helloworld, 然后尝试设置一个计数器来在一秒后调用这个函数。

    例 2.4. 延迟调用函数的错误方法

    function helloworld() {
    alert('Hello world!');
    }
    
    window.setTimeout("helloworld()", 60);
    

    这段代码没有起任何作用;不会弹出提示窗口。如果您打开错误控制台,会看到一个异常:Error: helloworld is not defined.这是因为当延迟结束,开始调用helloworld()时,helloworld函数已经不存在了。

    如果您需要引用用户脚本中的变量或者函数,应该显式的把它们定义为window对象的属性,它是始终存在的。

    例 2.5. 延迟调用函数的更好方法

    window.helloworld = function() {
    	alert('Hello world!');
    	}
    
    window.setTimeout("helloworld()", 60);
    

    目的达到了!页面完成加载一秒后,一个提示框骄傲的弹了出来,写着:“Hello world!”

    然而,在 window上设置属性依然不太理想;这有点像用全局变量来做局部变量该做的事。(事实上,就是那么回事,window是全局的,可以被页面中的所有脚本访问。更实际的讲,它可能会与页面自身的脚本,甚至是其它的用户脚本相互干扰。

    最佳的解决方案是定义匿名函数,把它作为第一个参数传递给 window.setTimeout

    例 2.6. 延迟调用函数的最好方法

    window.setTimeout(function() { alert('Hello world!') }, 60);
    

    我在这里所做的是建立一个没有名字的函数(一个“匿名函数”),然后直接把它传递给 window.setTimeout。这样可以完成与上个例子相同的事,而不会留下痕迹。例如不会被其它的脚本检测到。

    我发现我在写用户脚本时经常使用匿名函数。它们很适合创建“一次性”函数,然后当作参数传递给类似window.setTimeoutdocument.addEventListener 或者赋值给事件句柄像 clicksubmit

    参考资料

    2.4. 修改用户脚本

    对于脚本的作者来讲,“管理用户脚本”对话框有个很实用的功能:编辑按钮可以“动态的(live)”修改已安装的脚本。

    过程 2.1. 编辑 Hello World 的源代码然后观察运行结果

    1. 在菜单中,选择工具 (T) → Greasemonkey → 管理用户脚本 (U).... Greasemonkey 会弹出“管理用户脚本”对话框。
    2. 在左方面板中,选择 Hello World 再点击编辑。Hello World 的已安装版本将会在你喜好的文本编辑器中打开。(否则,请检查.js文件是否已经关联到您喜好的文本编辑器上。)
    3. 修改alert语句,替换显示内容为“Live editing!”。
    4. 在编辑器中保存所做的更改,然后回到浏览器,随意刷新某个页面来测试所做的更改,你将能立刻看到效果。你不需要重新安装或者“刷新”用户脚本,您是在“动态”修改。
    [提示] 在“管理用户脚本”对话框中,点击编辑,您正在“动态”修改脚本的副本,它在 Firefox 的个人配置文件夹中。我形成了一个习惯,每“动态”修改完毕,又回到编辑器,选择文件(F) → 另存为(a)...,把用户脚本保存到另一个文件夹中。尽管这不是必须的(Greasemonkey 只会用您配置文件夹中的那个脚本),但是我喜欢在完成全部修改后把脚本在其它文件夹里保存一个“原本”。

    第 3 章 调试用户脚本

    3.1. 用错误控制台追踪错误

    如果用户脚本好似没有正常执行,第一个要检查的地方是错误控制台,那里列出了所有与脚本有关的错误,包括用户脚本在内。

    过程 3.1. 打开错误控制台

    1. 在 Firefox 菜单中,选择 工具 (T) → 错误控制台 (C)。
    2. 控制台中列出了从打开 Firefox 以来在所有页面上发生的所有错误,应该会有很多的(您会惊奇地发现,很多大的网站的脚本是那么的糟糕)。在开始调试您的用户脚本前,请点击清空 (C)来清空列表。

    现在刷新页面来测试出现错误的用户脚本。如果它的确出错了,一条异常会显示在错误控制台中。

    [注意] 如果您的用户脚本出错了,错误控制台会显示一条异常(exception)和一个行号。由于 Greasemonkey 将用户脚本插入到页面中,所以行号没有实际的用处,应该忽略这个行号。这并不是您的用户脚本中发生异常的行号。

    3.2. 用 GM_log 记日志

    Greasemonkey 提供了一个记录用的函数,GM_log,这个函数可以将消息写入错误控制台。这些消息在发布前应当剔出掉,不过在调试时却非常有用。此外,看调试信息比在调试用的警告窗口中一次次点确定好得多。

    GM_log有一个参数:日志的字符串。在将信息输出到错误控制台后,用户脚本会一如既往地执行。

    例 3.1. 记录到错误控制台然后继续( gmlog.user.js )

    if (/^http:\/\/diveintogreasemonkey\.org\//.test(window.location.href)) {
    	GM_log('running on Dive Into Greasemonkey site w/o www prefix');
    } else {
    	GM_log('running elsewhere');
    }
    GM_log('this line is always printed');
    

    安装这个用户脚本后打开 http://diveintogreasemonkey.org/,这两行就会出现在错误控制台中:

    Greasemonkey: http://diveintomark.org/projects/greasemonkey//Test Log:
    running on Dive Into Greasemonkey site w/o www prefix
    Greasemonkey: http://diveintomark.org/projects/greasemonkey//Test Log:
    this line is always printed
    

    如您所见,Greasemonkey 从用户脚本元数据段中取得命名空间和脚本名称,再把作为传给GM_log的参数日志消息算进来,做为显示在错误控制台中显示的信息。

    如果您访问的不是http://diveintogreasemonkey.org/,那么下面这两条信息会显示在错误控制台中。

    Greasemonkey: http://diveintomark.org/projects/greasemonkey//Test Log:
    running elsewhere
    Greasemonkey: http://diveintomark.org/projects/greasemonkey//Test Log:
    this line is always printed
    

    我已经厌倦去挖掘日志信息的最大长度。它超过了255个字符。还有,输出的信息在错误控制台中可以正确断行,可以向下滚动来查看日志消息其余部分。为日志着迷吧!

    [提示] 在错误控制台中可以用右键(Mac用户用 control-click)点击任意行选中,然后选择复制(C),将信息复制到剪贴板。

    参见

    3.3. 用 DOM 查看器查看元素

    DOM 查看器能够查看任何页面的已解析的文档对象模型(DOM)。可以获得每个 HTML 元素、属性和文本节点的详细信息;也可以看到每个页面样式表中的所有 CSS 规则;也可以看到每个对象的所有脚本属性。它的功能非常强大。

    DOM 查看器包含在 Firefox 的安装程序中,但是由您的平台而定,它可能默认没装。如果您在工具 (T)菜单中看不到DOM 查看器(N),那么您需要重新安装 Firefox。重新安装 Firefox 不会影响您现有的书签,设置,扩展以及用户脚本。

    过程 3.2. 安装 DOM 查看器

    1. 运行 Firefox 的安装程序。
    2. 接受用户协议后,选择定制 (C)安装。
    3. 选择安装路径后,安装向导会询问安装的组件。选择开发工具。
    4. 安装结束后,运行 Firefox。您会看到工具 (T) → DOM 查看器 (N)。

    下面我们将要访问深入浅出 Greasemonkey的主页,让您了解 DOM 查看器的强大功能。

    过程 3.3. 查看和编辑深入浅出 Greasemonkey的主页

    1. 访问http://www.firefox.net.cn/dig/。
    2. 在菜单中,选择工具 (T) → DOM 查看器 (N)打开 DOM 查看器。
    3. 在 DOM 查看器的左侧视图中,会看到 DOM 节点的树状图。如果看不到,打开左上角的下拉菜单,选择DOM Nodes。
    4. DOM 的树状列表从 document 节点开始,标记为 #document。展开此节点,可以看到 HTML 节点。
    5. 展开 HTML 元素后可以看到三个节点:HEAD#textBODY。注意 BODYiddiveintogreasemonkey-org。如果没看到,调整一下列宽度。
    6. 展开 BODY 可以看到五个节点: #text, DIV id="intro", #text, DIV id="main"#text
    7. 展开 DIV id="intro" 可以看到两个节点: #textDIV class="sectionInner"
    8. 展开 DIV class="sectionInner" 可以看到两个节点: #textDIV class="sectionInner2"
    9. 展开 DIV class="sectionInner2" 可以看到五个节点: #text, DIV class="s", #text, DIV class="s"#text
    10. 展开第一个 DIV class="s" 可以看到五个节点: #text, H1, #text, P#text
    11. 选择 H1 节点。在原始页面上(DOM 查看器后面), H1 元素会闪现红色的边框。在右侧面板中可以看到节点的名称(“H1”)、命名空间 URI (空白,因为 HTML 没有命名空间 -- 只有在页面被当作 application/xhtml+xml 时有效,或者显示一些其他名字空间 XML 的页面)、节点类型(1代表元素)和节点值(空白,因为标题没有值 -- 标题上的文字有自己的节点)。
    12. 在右侧面板的顶部,有个下拉菜单,在其中可以看到数个选项:DOM Node, Box Model, XBL Bindings, CSS Style Rules, Computed Style 和 Javascript Object。它们提供了当前选中的节点的不同信息。有些是可以修改的,变更会立即反映到原始页面上。选择 Javascript Object 可以看到选中的 H1 元素的所有可脚本控制的的属性和方法。
    13. 选择 CSS Style Rules。右侧面板会分为两部分,顶部的列出了所有可以作用于这个元素的样式(包括浏览器已有的默认样式),下面的显示了样式所定义的属性。
    14. 在右上方的视图中选中第二条规则,这条样式规则是在 http://www.firefox.net.cn/dig/css/dig.css 样式表中定义的。
    15. 在右下面板中双击 font-variant 属性,然后输入新值: normal。在原始页面中(DOM查看器后面),“深入浅出 Greasemonkey” 标志文字会立即从 small-caps 变为正常的大小写字母。
    16. 在右下面板中任意位置点击右键(Mac 用户 control-click),然后选择 新建属性。会弹出一个对话框:“新样式规则”。输入属性名称: background-color,然后点击确定,接下来属性值:red,然后点击确定应用新属性。新属性会显示在右下面板中,并且原始页面会立即变成红色背景。

    如果觉得依次展开 DOM 节点树中每层很不方便,那么我强烈推荐您使用 Inspect Element 扩展,它能迅速找到 DOM 查看器中的指定元素。

    [警告] 安装 Inspect Element 扩展前,您必须先安装 DOM 查看器,否则 Firefox 就不能正常启动。如果已经遇到了这种情况,打开命令行窗口,进入 Firefox 的安装目录,输入 firefox -safe-mode 。Firefox 会以安全模式启动,不加载任何扩展,然后选择工具 (T) → 附加软件 (A)接着卸载 Inspect Element。

    过程 3.4. 用 Inspect Element 直接查看元素

    1. 访问 Inspect Element 下载页面,然后点击 Install Now。
    2. 重新启动 Firefox。
    3. 再访问http://www.firefox.net.cn/dig/。
    4. 右击(Mac 用户 control-click) 标志语:深入浅出 Greasemonkey
    5. 在上下文菜单中,选择 Inspect element。.DOM 查看器会打开,并且选中了 H1 元素,然后您可以马上开始查看和/或编辑它的属性。
    [警告] DOM 查看器不会“跟着”您一起浏览网页。如果打开 DOM 查看器然后在原始窗口中浏览别的网页,DOM 查看器会变得非常困惑。好的做法是,去您想去的地方,查看您想查看的页面,在做别的事情前先关闭 DOM 查看器。

    参考资料

    3.4. 用 Javascript Shell 计算表达式

    Javascript Shell 是一个 bookmarklet,可以在当前页面的内容中计算任意 Javascript 表达式。

    过程 3.5. 安装 Javascript Shell

    1. 访问 Jesse's Web Development Bookmarklets
    2. 将 Shell bookmarklet 拖放到您的书签工具栏。
    3. 访问一个网页(例如,深入浅出 Greasemonkey 主页),然后点击书签工具栏上的 Shell bookmarklet。Javascript Shell 窗口会在后台打开。

    Javascript Shell 提供了与 DOM 查看器一样强大的功能,但是环境更加宽松。就把它当作 DOM 的命令行版本吧。游戏开始。

    例 3.2. Javascript Shell 介绍

    document.title
    深入浅出 Greasemonkey
    document.title = 'Hello World'
    Hello World
    var paragraphs = document.getElementsByTagName('p')
    paragraphs
    [object HTMLCollection]
    paragraphs.length
    5
    paragraphs[0]
    [object HTMLParagraphElement]
    paragraphs[0].innerHTML
    教老网玩新把戏
    paragraphs[0].innerHTML = 'Live editing, baby!'
    Live editing, baby!
    

    当输入完上面的内容后,按回车键,变更就会反映到原始网页上。

    我想提一下 Javascript Shell 的 props 函数。

    例 3.3. 获取元素属性

    var link = document.getElementsByTagName('a')[0]
    props(link)
    Methods of prototype: blur, focus
    Fields of prototype: id, title, lang, dir, className, accessKey,
    charset, coords, href, hreflang, name, rel, rev, shape, tabIndex,
    target, type, protocol, host, hostname, pathname, search, port,
    hash, text, offsetTop, offsetLeft, offsetWidth, offsetHeight,
    offsetParent, innerHTML, scrollTop, scrollLeft, scrollHeight,
    scrollWidth, clientHeight, clientWidth, style
    Methods of prototype of prototype of prototype: insertBefore,
    replaceChild, removeChild, appendChild, hasChildNodes, cloneNode,
    normalize, isSupported, hasAttributes, getAttribute, setAttribute,
    removeAttribute, getAttributeNode, setAttributeNode,
    removeAttributeNode, getElementsByTagName, getAttributeNS,
    setAttributeNS, removeAttributeNS, getAttributeNodeNS,
    setAttributeNodeNS, getElementsByTagNameNS, hasAttribute,
    hasAttributeNS, addEventListener, removeEventListener, dispatchEvent,
    compareDocumentPosition, isSameNode, lookupPrefix, isDefaultNamespace,
    lookupNamespaceURI, isEqualNode, getFeature, setUserData, getUserData
    Fields of prototype of prototype of prototype: tagName, nodeName,
    nodeValue, nodeType, parentNode, childNodes, firstChild, lastChild,
    previousSibling, nextSibling, attributes, ownerDocument, namespaceURI,
    prefix, localName, ELEMENT_NODE, ATTRIBUTE_NODE, TEXT_NODE,
    CDATA_SECTION_NODE, ENTITY_REFERENCE_NODE, ENTITY_NODE,
    PROCESSING_INSTRUCTION_NODE, COMMENT_NODE, DOCUMENT_NODE,
    DOCUMENT_TYPE_NODE, DOCUMENT_FRAGMENT_NODE, NOTATION_NODE,
    baseURI, textContent, DOCUMENT_POSITION_DISCONNECTED,
    DOCUMENT_POSITION_PRECEDING, DOCUMENT_POSITION_FOLLOWING,
    DOCUMENT_POSITION_CONTAINS, DOCUMENT_POSITION_CONTAINED_BY,
    DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
    Methods of prototype of prototype of prototype of prototype of prototype: toString
    

    “哇哦!”这些是什么?它列出了元素 `` 在 Javascript 中所有有效的属性和方法,并且按照 DOM 的对象层级分类。先列出的是链接元素的特有方法和属性(比如 blurfocus 方法, hrefhreflang 属性),然后列出了所有节点公有的方法和属性(比如 insertBefore),等等。

    此外,这和 DOM 查看器上的内容一样……只不过是多些打字多些试验,少点些鼠标。

    [警告] DOM 查看器一样,Javascript Shell 也不会“跟着”您浏览网页。如果打开 Javascript Shell 然后在原始窗口中浏览别的网页,Javascript Shell 会变得非常困惑。好的做法是,去您想去的地方,查看您想查看的页面,在做别的事情前先关闭 Javascript Shell。

    3.5. 其他调试工具

    下面是我觉得有用的其他调试工具,由于时间有限,我没有全部列出。

    参考资料

    第 4 章 公共模式

    4.1. 在域名以及它所有子域名上执行用户脚本

    对于许多网站,无论是否有 www. 前缀,访问网站都是等效的。如果要为这样的站点写用户脚本,需要能匹配这两种地址。

    例 4.1. 匹配域名和它所有子域名的元数据标签

    // ==UserScript==
    // @include http://example.com/*
    // @include http://*.example.com/*
    // ==/UserScript==
    

    实例

    4.2. 测试 Greasemonkey 函数是否有效

    Greasemonkey 的新版本给用户脚本提供了新函数。如果准备发布用户脚本,那么应该测试下所用的 Greasemonkey 函数是否存在。

    例 4.2. GM_xmlhttpRequest 函数无效时警告用户

    if (!GM_xmlhttpRequest) {
    	alert('请升级到最新版本的 Greasemonkey.');
    	return;
    }
    // 使用 GM_xmlhttpRequest 的其他代码
    

    4.3. 测试页面中是否有 HTML 元素

    可以用 getElementsByTagName 函数来测试页面中是否有 HTML 元素。

    例 4.3. 检查页面中是否有 `` 元属

    var textareas = document.getElementsByTagName('textarea');
    if (textareas.length) {
    // 页面中有至少一个 textarea
    } else {
    // 页面中没有 textarea
    }
    

    实例

    4.4. 操作所有 HTML 元素

    有时需要操作页面中的所有 HTML 元素。Firefox支持 getElementsByTagName('*'),它返回一个可遍历操作的元素集合。

    例 4.4. 遍历所有元素

    var allElements, thisElement;
    allElements = document.getElementsByTagName('*');
    for (var i = 0; i < allElements.length; i++) {
    	thisElement = allElements[i];
    	// 使用 thisElement
    }
    
    [注意] 只有真需要操作所有元素时才能采用这种方法。如果只要操作特定的一些元素,可使用 XPath 查询可以正确快速地得到这些元素。更多资料,请查看操作所有有特定属性的元素

    实例

    4.5. 操作特定 HTML 元素的所有实例

    有时您需要操作页面中特定 HTML 元素的所有实例。例如改变所有 `` 的字体大小。最简单的办法就是调用 getElementsByTagName('tagname'),它返回一个可遍历操作的元素集合。

    例 4.5. 获取页面上所有的 textarea

    var allTextareas, thisTextarea;
    allTextareas = document.getElementsByTagName('textarea');
    for (var i = 0; i < allTextareas.length; i++) {
    	thisTextarea = allTextareas[i];
    	// 使用 thisTextarea
    }
    
    [注意] 不应该用这个方法来操作页面中所有的链接,因为 `` 元素也可以用作页面中的锚。要知道如何查找页面中所有的链接,请查看操作所有有特定属性的元素

    实例

    4.6. 操作所有有特定属性的元素

    在 Greasemonkey 的兵器库中最强悍的一个就是 evaluate 方法。利用 XPath 查询语言,它可以用来获取页面中的元素,属性以及文本。

    举个例子来说,如果您想获得页面中的全部链接。您也许会想到用 document.getElementsByTagName('a'),但是您还要检查每个元属是否具有 href 属性,因为 `` 元属还可以用作有名称的锚。

    然而可以用 Firefox 内建的 XPath 功能来查找具有 href 属性的 `` 元属。

  28. inferior 北大未名
    inferior   在小组 2047 发表文章

    近期安全动态和点评(2020年4季度)@ 编程随想的博客

    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。