Reading view

There are new articles available, click to refresh the page.

【404文库】老干体v|他们怎么就不信我们,反对纳入CPTPP?

先让我加入嘛!

难道还怕赖账?

img

CDT 档案卡
标题:他们怎么就不信我们,反对纳入CPTPP?
作者:家传研究院
发表日期:2024.12.3
来源:老干体v
主题归类:中国经济
CDS收藏:公民馆
版权说明:该作品版权归原作者所有。中国数字时代仅对原作进行存档,以对抗中国的网络审查。详细版权说明

本周,全球标准最高的贸易组织CPTPP在温哥华举行会议,同意成立工作组,负责审议哥斯达黎加加入CPTPP的申请。这意味着,哥斯达黎加入盟之门已经打开。

自2022年8月申请加入,迄今正好两年多。

而我国2021年与英国同期申请加入,英国已于去年7月入盟。

我国申请加入CPTPP的事宜是否也已经成立相关工作组?外事部发言人昨天说中方的立场是一贯明确的,坚定倡导贸易自由化、便利化,积极参与亚太区域合作和经济一体化。主动对接国际高标准经贸规则,积极扩大自主开放,推动加入CPTPP进程,与各方就此保持着接触、沟通和磋商。

说了那么多,其实就一句话,没动静。

这是第四年、第五次被拒绝讨论申请。

朱自清评论说,热闹是他们的,我什么也没有。

盟里十几个国家,包括同为社会主义阵营的越南早在2018年首批加入,而我国那时还在批判特朗普退出后被日本捡起的《全面与进步跨太平洋伙伴关系协定》(CPTPP)既不全面也不进步,各国都没兴趣。

还有山东博主认为,应该用一带一路替代它!

这说明,CPTPP不反共,但排华。换句话说,只要达到官员财产公示、工会独立等条件,仍然是有机会的。

这也是我国努力的前提。

越南加入CPTPP的过程相对顺利,政府修改和新增了一系列法律以符合CPTPP的要求。

怪不得这两年越南的经济发展这么好。

就连战火纷飞的乌克兰,也于2023年申请加入。

但我国的压力很大。

  • 工会独立,与政府脱钩。

  • 不对国有企业进行任何补贴和税收优惠扶持,国企民企私企公平竞争。

  • 外资企业服务器可留在本国。

  • 公务员财产向人民公开。

  • 稳定和透明的政治体制……

这些标准条条都很致命,弄不好要动摇国本:

我国的入盟动作,最近很频密:

向群主日本示好:

  • 向日本单向免签。

  • 移除钓鱼岛附近浮标。

  • 核废水引发的海产品暂停进口也将很快恢复。

向第二大群主澳洲示好:

  • 单向免签的逗留时长从半个月增加到一个月。

但由于CPTPP采取的是所有会员一致同意原则,仅正副群主同意也没用,所以其他会员国文莱、加拿大、智利、马来西亚、墨西哥、新西兰、秘鲁、新加坡、越南、英国都要同意。且随着会员越来越多,我国需要搞定的国家也就越多,难度会越来越高。

怪不得这么急。今年仅商务部就开了两次发布会,外事部昨天又出来讲。

img

除此之外,贸易政策也在修订:

  • 2024年11月15日,成品油、光伏、电池、部分非金属矿物制品的出口退税率由13%下调至9%。

其他的管制领域也在逐步开放:

  • 前天,两办官宣,电信、互联网、文化领域有序扩大开放两办官宣:互联网有序扩大开放!

  • 昨日,《独资医院领域扩大开放试点工作方案》公布,医疗领域有序扩大开放,试点城市允许设立外商独资医院,允许医院按规定聘用外国医师、港澳台医师、港澳其他卫生专业技术人员短期执业全院管理和卫生专业技术人员的中方(内地)人员占比均不得少于50%。

  • 9月8日,向外资开放敏感的出版物印刷行业,制造业领域外资准入限制措施「清零」。

  • 今年初,取消股份比例限制,外国资本可以持有银行保险机构100%的股权,实现完全控股。

当然,这些也都应该在2016年前开放,毕竟加入WTO时承诺了。

当然,之所以有CPTPP,也是因为有人认为我国不履行WTO承诺,故而另起炉灶另组新群。

对此,我是坚决不承认的。

但情况就是这么个情况。

因此,CPTPP不搞承诺制,而搞达标制,就怕你说话不算数。

而且,每年审议一次,如果不达标就踢出群,就是怕有人玩心眼搞权宜之计,把CPTPP搞成下一个WTO。

怎么会呢?

1944年,毛泽东对到访延安的美国代表团表示:「奋斗目标,就是推翻独裁的国民党反动派,建立美国式的MZ(民主)制度。」

多么堂堂正正、正义凛然!

事实上,我们建立了更先进的制度。

那次他们就信了,这次怎么就不信呢?


我写了那么多家传,发现许多成功的家庭,祖辈要么是读书人、绅士,要么是企业家地主。

当然,也有平民家庭出一雄杰,通过读书等方式逆天改命,从而实现阶层跃升。

无论欧美,还是立国仅200余年的澳洲,孩子们入学先讲家传,次学国史,为的是真正认识自己以及自己的成长背景。

人是意义的动物,讲述关于我们的世界、关系和自我的故事、写作家传,是人类创造意义的基本方式。长按下面微信二维码,识别加我好友:

img

img

img

家传编辑部系列,点击关注

img

浙江人为什么从小学习好、会做生意?早在南宋就义利并举、农商互藉了,而其他地方还在小人喻利、歧视工商。我写的这部以浙江为主的家风作品,9月上市当月就登上浙江省好书榜:

◆  推荐阅读

img

【404文库】个人记忆库|WTO已死,CPTPP拒绝,我国外贸被卡死了?

  • 工会独立,与政府脱钩。
  • 不对国有企业进行任何补贴和税收优惠扶持,国企民企私企公平竞争。
  • 外资企业服务器可留在本国。
  • 公务员财产向人民公开。
  • 稳定和透明的政治体制。
  • 开放且自由的经济环境。
  • 具备长远的市场潜力值。
  • 良好的劳工生活工作权益。
  • 其余会员国一致同意。

以上9条不是梦癔,而是从CPTPP(跨太平洋伙伴关系全面进步协定)2300多项群规中挑出来的。之所以炸裂,是因为这些条款本就是针对我国体制「量身定制」的「排除条款」!

但自2021年以来,我国已是第四年申请加入却被拒绝。

file

相关阅读:第一财经|中国申请加入CPTPP的三个关键问题

中国经历过长达15年的入世谈判,以及21个自贸区协定的成功签署,这些都为中国在经贸投资领域的谈判提供了丰富的经验。由于两者在章节内容设置上存在一定的重合,RCEP(区域全面经济伙伴关系协定)的签署,也从某种程度上扮演了中国加入CPTPP “垫脚石”的作用。不过,CPTPP比RCEP还多出了以下章节:纺织品和服装(第4章)、技术性贸易壁垒(第8章)、国有企业和指定垄断(第17章)、劳工(第19章)、环境(第20章)、竞争力和商务便利化(第22章)、发展(第23章)、监管一致性(第25章),以及透明度和反腐败(第26章)。其中有些章节在WTO体系中已经涵盖了相关内容,如纺织品和服装、技术性贸易壁垒等。

后续谈判中,关键性的章节将集中在国有企业、劳工、电子商务、监管一致性等章节。当前,一些成员对中国的国有企业仍然保持密切关注,包括针对国有企业的非商业援助、补贴和透明度等问题。在这个章节的谈判中,一定程度上可以借鉴越南的规定。例如,在透明度要求中有很多过渡性条款或例外规定。关于劳工章节,在后续的谈判中,各方对CPTPP中有关“集体谈判权利”“强迫或强制劳动”“就业与职业歧视”等的认识可能存在分歧,对此需要有充分的准备。

CDT 档案卡
标题:WTO已死,CPTPP拒绝,我国外贸被卡死了?
作者:货殖新传
发表日期:2024.11.28
来源:微信公众号“个人记忆库”
主题归类:世界贸易组织
CDS收藏:公民馆
版权说明:该作品版权归原作者所有。中国数字时代仅对原作进行存档,以对抗中国的网络审查。详细版权说明

上星期,商务部新闻发言人何咏前表示,正与各成员开展深入沟通交流,积极推进加入进程。并称将通过改革,目标全面达到CPTPP规则标准

而且,与WTO的承诺制不同,CPTPP是必须达标才能加入,我国此时急着加入,可见决心。

但难度在于,这些为我国量身定制的条件,真的能达到?

如果要加入,需要所有会员一致同意,而日本和澳洲打头的12个经济体,很多与我们关系都不太对付,尤其是中日之间,真的能谈成?

要知道,8小时工作制、双休,可是加入WTO时承诺的。年轻的朋友可能不知道,之前我们星期六也要上半天班。

而一旦不能加入,WTO已死,我们将会被国际贸易体系彻底排除在外。

再加上美国正在立法取消我国最惠国贸易待遇,有些国际拒绝承认市场经济地位,一场风暴,骤然而至。

弄不好,外贸回到1978。

全面示好求入盟

特朗普2017年退出CPTPP前身TPP时,我们长舒了一口气。

重阳客座研究员张敬伟撰文称,日本要率领11国把缩小版的TPP这出戏继续演下去,但既不「全面」也不「进步」。

他的看法是,美国的亚太再平衡战略破产了,没有美国挑头,参与TPP的很多国家,失去了假美国之威之利的机会,对于TPP也就失去了兴趣

现在看来,众狼误国,CPTPP不但没有烟消云散,反而成为目前标准最高的自贸区,连远在欧洲的英国也加入了。

最近,我国入盟的诚心日月可鉴:日本成为我国单向免签国,澳洲单向免签的逗留时长从半个月增加到一个月。有人说当下这样子,日本人来干什么?这是另一回事,首先得有态度。

此外,我国还将移除钓鱼岛附近浮标——是个人都知道这有多敏感。

至于核废水引发的海产品进口,也将很快恢复。

日方应该看不穿我们的权宜之计吧?

不过,我乐观其成。一个最新的案例是,引以为豪的新能源汽车产能严重过剩,但由于背后都是国企股东,根本无法破产退出,严重扭曲了市场资源配置。

file

今日流传的这份要求降价函,背后是各国以产业补贴为由对中国新能源车加税30%、50%,你补贴多少他加税多少,也就没有价格优势了。

有媒体发现,上汽大通25日也向其供应商致信称,市场供需失衡状况预计在短期内难以得到根本改善,导致价格战难以平息,要求降价。

再不解决,大家都得卷死,这也正是CPTPP国企条款的原因!

假道被堵、重组无果

最近,随着特朗普威胁要对墨西哥和加拿大产品征收25%的关税,吓得墨西哥主动移除中国产零部件,要么本土产,要么北美产。

这两年,我国不少企业假道墨西哥和加拿大进入美国市场,看来这条路又有麻烦了。

这几年很多国家指责我国没有落实WTO承诺,不玩了另组新群。但我国是最近20年WTO体系的最大受益国,因此一直守着WTO,希望能重新亮灯。可现在坟头的野草都一人深了,肯定不会有人来了。

作为替代品、针对我国体制的CPTPP,成立之初就没想我国参与,我国也持批评态度,不可能主动加入。

也不是没有第二手准备,2020年,我国牵头组了个新群RCEP。

相比之下,RCEP对90%商品实施零关税,而CPTPP有98%。从贸易实践看,RCEP标准太低,我当时就很不看好,以致一位朋友批评我对国家的好都看不惯。

事实上,现在还有人提RCEP吗?

而且,RCEP成立仅一年,我们改变前倨后恭的态度,次年即申请加入CPTPP。

日本前首相岸田文雄公开反对中国加入,日本高官也表示「中国达不到加入CPTPP的标准」。

这恐怕不是日本一国的意思。洋人现在很头痛,一旦放中国进来,CPTPP会不会成为下一个WTO?

回想日资是改开后进入我国市场的第一批外资,真是今夕何夕。那时邓小平赴日邀请日资,现在我们求日本开门入盟,氛围却是《除了俄罗斯,我们都讨厌!》。

连英国都加入了,却没中国

2023年7月16日,与太平洋不沾边的英国正式加入CPTPP,我国望洋兴叹。

目前CPTPP已正式运作,申请入盟注定是一场长跑。

2021年9月16日,正式申请加入。

2023年3月31日,毛发言人表示,坚决反对台湾地区加入任何官方性质的协议和组织,包括CPTPP。6月17日,向各成员递交交流文件。

2024年3月21日,商务部发言人何亚东称,中方已就货物贸易、服务贸易和投资等领域市场准入出价做好准备中方完全有信心、有能力达到协定的高标准。

2024年11月21日,商务部发言人何咏前重复了上述发言。

加入的好处当然是明摆着的,但是除了文首的9条硬杠,如信息和数据的自由流动,换言之网络要开放,那对现有体制的挑战是全方面的。

有人说,如果能成真,那无异于政治上的改革开放。

记得2001年加入WTO前,面对谈判僵局,愿意去美国低头、甚至被国内原教旨主义者指为「李鸿章」的朱相,以及加入后迅速边缘化的龙永图冲锋陷阵。

如今安在哉?

对此,一位山东博主提出了天才般的建议,用「一D一L」取代CPTPP。

活成了这个样子,也是奇迹。

How to VLAN

介绍VLAN的基本概念和几种场景下的应用,而OpenWrt下VLAN处理机制和一般交换机有些不同,这里做了一个对比并给出了一种两台路由器之间的单线复用的方案

问题

计算机网络的教材对VLAN一笔带过,作业的却要用到交换机互联,之前看的VLAN的文章貌似都对应不到OpenWrt上去,也就很难有实践的机会;下面根据个人在宿舍组网上遇到的问题,一步步来探究VLAN的用法

后面又看到了N1盒子基于VLAN的单臂路由,又做了一些补充

多线接入

宿舍是上床下桌,每一张桌子下面有一个百兆的网口,通过负载均衡,很早就可以把网速跑到100Mbps了,这显然不够啊,因为宿舍WiFi是共用的,自然而然想到连接相邻的两个床位的网口,这样就有300Mbps了,这也是多线拨号的第一步

上图就是将LAN3与LAN4作双线接入,通过VLAN分别对应到eth0.3和eth0.4

此时LAN4与WAN是“直通”的,效果上来说,就是LAN4也可以插网线用电脑拨号了,如果是要给路由器做双线接入的话,则需要添加VLAN,再把一个LAN口添加到新VLAN中,最后建立接口拨号即可

交换

然而舍友还是需要网口拨号的,所以如果需要长期占用的话偶尔肯定是不太方便的,所以需要交换机来扩展一下网口,这一步已经可以通过简单的修改下OpenWrt路由器的Switch来实现,將LAN4和WAN划到同一个VLAN,两个接口就相当于在同一交换机下:

单线复用

然而,仅仅通过untagged只能实现多条线路的“汇聚”,能够达到100Mbps+的只有一台路由器而已,并没有实现“互通”,即每一台路由器都可以上到100Mbps+;不仅如此,还要实现相邻床位的路由器之间只用一根线连接就可以达到同样的网速,更具体的就是在一根网线传输不同的来源(网口)的数据

而VLAN的一个重要的功能恰好就是实现交换机之间的互通

单臂路由

这个需求源于有一台N1,之前看过VLAN的接入网络的方法,觉得网络结构更清晰,以此可以解决主路由算力不足的问题,但之前一直没有刷上OpenWrt,刷完之后发现居然没有交换机的Switch选项,赶紧翻出了之前看到的帖子:N1做主路由,新3做AP的最正统vlan连法教程,想起之前文档刚好有部分没看懂,刚好可以补充上

概念

首先还是OpenWrt的文档:VLAN,很早就读过,但是因为缺少具体的有解释的例子,当时没弄清楚VLAN tagged的机制

所以这里先结合华为的文档了解下基础的概念

VLAN Tag

首先需要理解VLAN标签是被添加到以太帧内部的一个4个字节的片段,其中VID也就是常说的VLAN ID

在一个VLAN交换网络中,以太网帧主要有以下两种形式:

  • 有标记帧(Tagged帧):加入了4字节VLAN标签的帧
  • 无标记帧(Untagged帧):原始的、未加入4字节VLAN标签的帧

常用设备中:

  • 用户主机、服务器、Hub只能收发Untagged帧(Linux系统可以通过安装软件实现收发Tagged帧)
  • 交换机、路由器和AC既能收发Tagged帧,也能收发Untagged帧
  • 语音终端、AP等设备可以同时收发一个Tagged帧和一个Untagged帧

VID & PVID

VID也就是数据帧中的12bit的VLAN ID,表示该数据帧所属VLAN的编号,而PVID(Port Default VLAN ID)又称为缺省VLAN,可以用于和VID做比较来判断Tag的情况

应用

最主要的应用是划分广播域,这部分可以参考图文并茂VLAN详解,然而和本文的关系不是很大

为了提高处理效率,设备内部处理的数据帧一律都是Tagged帧,例如在交换机内部的,在数据帧进入交换机的时候可能会按照一定的规则被打上VLAN Tag以方便下一步的处理,OpenWrt的Old Wiki的一张图很好地体现了这一点:

以太帧进入端口后被打上VLAN Tag,之后在传输的CPU的线路内(Port5-CPU),就同时传输带两种VLAN Tag的包

另外在交换机之间,可以在一条链路上使用两个VLAN也叫做Ethernet trunking,也有人称作单线复用,常见的应用:

  • 单臂路由(只有一个网口的路由器)
  • 使用一根网线同时传输IPTV和宽带的数据

交换机

这里参考的是上面的华为的交换机的文档,不同交换机可能有些不一样

Incoming & Outgoing

以收发的设备作为主体,指的是数据帧到达接口而没有完全进出交换机内部,举个例子:

  • 数据帧到达某一个接口时,路由器会对数据帧的VLAN情况做判断
  • 如果符合通过的规则,则放行做后续处理,不符合则丢弃
  • 后续处理可能就是剥离或者打上标签

链路类型和接口类型

配置VLAN:为了适应不同的连接和组网,设备定义了Access接口、Trunk接口和Hybrid接口3种接口类型,以及接入链路(Access Link)和干道链路(Trunk Link)两种链路类型,如下图所示

根据接口连接对象以及对收发数据帧处理的不同,以太网接口分为:

  • Access接口

Access接口一般用于和不能识别Tag的用户终端相连,只能收发Untagged帧,且只能为Untagged帧添加唯一VLAN的Tag

  • Trunk接口

Trunk接口一般用于连接交换机、路由器、AP以及可同时收发Tagged帧和Untagged帧的语音终端。它可以允许多个VLAN的帧带Tag通过,但只允许一个VLAN的帧从该类接口上发出时不带Tag(即剥除Tag)

  • Hybrid接口

Hybrid接口可以允许多个VLAN的帧带Tag通过,且允许从该类接口发出的帧根据需要配置某些VLAN的帧带Tag(即不剥除Tag)、某些VLAN的帧不带Tag(即剥除Tag)

Hybrid接口和Trunk接口在很多应用场景下可以通用,但在某些应用场景下,必须使用Hybrid接口。比如一个接口连接不同VLAN网段的场景(如图所示的Router连接Hub的接口)中,因为一个接口需要给多个Untagged报文添加Tag,所以必须使用Hybrid接口。

  • 接入链路只可以承载1个VLAN的数据帧,用于连接设备和用户终端
  • 干道链路可以承载多个不同VLAN的数据帧,用于设备间互连

处理机制

OpenWrt对VLAN Tag的处理机制见后文引用文档的加粗部分,此处暂作为理解的参考

  • Access端口

  • Trunk端口

  • Hybird端口

OpenWrt VLAN

OpenWrt的文档没怎么提及接口类型的概念,OpenWrt对VLAN设置的组织形式和普通的交换机有所不同,从机制介绍来看是比较接近Trunk端口的:发出的数据帧只有一个VLAN的数据帧不带Tag

OpenWrt文档所提到的:An untagged port can have only 1 VLAN ID 反映在:OpenWrt中的Switch设置VLAN时单个untagged Port无法再再其他VLAN上为Untagged,否则回提示:LAN 1 is untagged in multiple VLANs!

故抛开之前的端口类型,遵守VLAN的规则,兼容且实用就行

另外,不是所有OpenWrt设备都有Switch这个LuCI的配置选项,比如N1就没有,但是照样可以配置VLAN,位置在Interface的接口物理配置部分,由于无法像Switch那样有Tag之类的选项,

Tag机制

官方文档对Tag机制的介绍如下(散落在两处):

  • Tagged on “CPU (eth0)” means that the two VLAN ID tags used in this example (1, 2) are sent to the router CPU “as tagged data”. Remember: you can only send Tagged data to VLAN-aware devices configured to deal with it properly.
  • Untagged means that on these ports the switch will accept only the incoming traffic without any VLAN IDs (i.e. normal ethernet traffic). The switch will remove VLAN IDs on outgoing data in such ports. Each port can only be assigned as “untagged” to exactly one VLAN ID.
  • Off: no traffic to or from the tagged ports of this VLAN ID will reach these ports.

Ports can be tagged or untagged:

  • The tagged port (t is appended to the port number) is the one that forces usage of VLAN tags, i.e. when the packet is outgoing, the VLAN ID tag with vlan value is added to the packet, and when the packet is incoming, the VLAN ID tag has to be present and match the configured vlan value(s).
  • The untagged port is removing the VLAN ID tag when leaving the port – this is used for communication with ordinary devices that does not have any clue about VLANs. When the untagged packet arrives to the port, the default port VLAN ID (called pvid) is assigned to the packet automatically. The pvid value can be selected by the switch_port section.

特别指出,但是一般也用不上,在LuCI界面上看不到的PVID设置,设置具体在uci network switch_port部分:

Port PVID; the VLAN tag to assign to untagged ingress packets

无Switch配置

官方文档的位置在 Creating driver-level VLANs 一节,配置方式是通过在接口设置,选择自定义接口,在名称在做文章:如在物理网卡eth1上,通过自定义eth1.2接口的方式建立一个VLAN ID为2的接口,在使用Switch设置VLAN,如添加VLAN ID为3的VLAN之后,接口处也会出现eth0.3,逻辑上还是统一的;下面来看下文档对处理机制的描述:

If the incoming packet arrives to the interface with software VLANs (incoming packet to eth1) and has a VLAN ID tag set, it appears on the respective software-VLAN-interface instead (VLAN ID 2 tag arrives on eth1.2) – if it exists in the configuration! Otherwise the packet is dropped. Non-tagged packets are deliveded to non-VLAN interface (eth1) as usual.

即处理流入的包:接口只接收有相应Tag的包,相当于Switch中的VLAN在该接口设置为Tag

这样一来,一个物理网口可以同时收发带Untagged帧和Tagged帧,故使用VLAN来实现单臂路由也就很好理解了,配置的方式也不唯一

解决方案

回到本文开头提到的问题,仿照上面的Switch内部VLAN机制的图的形式,画了一张两台OpenWrt路由器通过VLAN互通,进而实现让两台路由器可以得到宿舍三个网口合计300Mbps的接入

需要说明的是:

  • 因为所有的VLAN都需要为拨号服务,所以这里略去了VLAN到CPU的一段
  • 格式为了照顾LuCI的设置界面显示,可能看起来有些不寻常
  • VLAN ID的外层意义就是接入的网口的标识,中间的TRUNK链路如何并不重要
  • 对WAN Interface的命名就相对随意了,例如Router 1的WAN_1应该命名为WAN_21更合适一点

最后的在宿舍的书桌背后的路由器如图

How to VSCode

还记得初见Atom的惊艳以及日久感受到的速度慢和占用高,记得VSCode刚推出时的“难用”,现已今非昔比,本文主要介绍VSCode的一些简单的应用:部分实用的插件以及调试C,Python代码的方法

最初为了写LaTeX而使用 Atom + 插件 来作为代码编辑器(积累了些经验之后转而使用TeXStudio),之后也就顺其自然的用Atom写了作业的大部分代码(装插件还要看网络环境),之后就是遇到了幽灵和熔断漏洞的影响,笔记本的性能越来越力不从心,使用Atom打开大文件特别慢,运行也并不流畅,才发现Atom的性能问题被诟病已久,有人推荐了微软的VSCode —— 和Atom的主题、插件基本通用,但是性能好太多,于是我就换下了Atom,一直用到了现在

现代代码编辑器最基本的功能:Git,多语言支持,丰富的效率插件,VSCode都是有的,而它出彩的地方还是在于开发方面(其实我就是写下作业)

准备

安装VSCode的时候记得勾选使用VSCode打开文件夹,因为VSCode的对工作空间要求比较严格的,另外对于Atom迁移而来的,可以选择Atom主题“One Dark Pro”以实现一个“平缓的过渡”

在调试代码和使用方面,常用的插件有:

  • Code Runner
  • Terminal
  • Resource Monitor

考虑到配置繁杂,重装或者有多台电脑迁移配置不便,可以用Setting Sync插件通过Github提供的服务以实现配置的同步

Remote-SSH

常规插件其实各大代码编辑器都差不多,对于VSCode来说,个人接触到的,最惊艳的插件当属Remote-SSH:

开发环境或者说代码运行的环境在远程或者其他的系统上,需要使用SSH客户端连接到远程,使用SCP或者SFTP来传输文件,这里面SSH客户端是一个重要的角色,最开始使用Atom编辑加上脚本完成“本地编辑,远程调试”的过程,后面遇到了一度让我觉得“相见恨晚”的FinalShell,解决了SSH时的一些列问题,但是作为一个独立开发者维护的闭源软件,稳定性和安全性是一般般的

而Remote-SSH相当于把VSCod搬到了服务器上,同时解决了运行环境和文件传输两个问题,尽管类似的问题可能早就有成熟的方案,但是在常用的代码编辑器中就能实现还是相当感动的,安装完成本地的客户端之后在VSCode的左下角有一个蓝色的标记,点击之后按照提示添加服务器就好(遇到SSH的config文件权限的问题,换用另外一个ssh的config文件就好),初次使用连接服务器之后会在服务器端自动下载和安装VSCode的相关组件(常用的LInux发行版没什么问题,也不需要root权限,ARM架构也支持),之后再手动把需要的插件安装下就好

初次连接时打开文件夹需要重连,直接打开另外一个文件夹也会重连,感觉不方便的话,可以在打开文件夹之后再添加另外一个文件夹到工作空间中(会重新连接),文件夹一栏会变成了工作空间,之后添加文件夹就不需要重连了,工作空间的配置可以保存以便下次使用;文件的上传下载分别是拖拽和右键菜单,体验算是很好了

如果在远程跑代码可以安装Resource Monitor用于监测CPU和内存占用,其他的细枝末节的部分搜索下就有

WSL支持

这里就不造轮子了,已经有人做的很好了,Dev on Windows with WSL,其中主要使用了Remote-WSL插件,虽然个人一度觉得WSL是未来,但是使用了一段时间之后还是觉得不如Docker或虚拟机来得方便,尤其是和Remote-WSL一起推出的Remote-SSH诞生之后

Docker支持

无意中又看到Remote插件多了一个Docker,之前的docker插件在VSCode侧边栏可以方便的查看镜像容器的情况,而Remote插件可以直接把VSCode的运行环境放到容器内,并且可以直接接入正在运行的容器(也就是不需要预先安装SSH和开放端口),尤其对编译环境下修改代码比较方便

另外还有个有趣的地方,可以让Win下的Docker支持图形化界面(勉强可用)

  • 安装vcxsrv,运行xlanuch,设置勾选最后一页的最后一项(Disable Access Control)
  • 获取本机的一个让容器可以到的IP,可取宿主机的WAN IP

这里直接把IP保存为变量了:

$DISPLAY=(ipconfig|findstr "IPv4")[1].split(" ")[-1]+":0.0";
docker run -it --net=host -e DISPLAY=$DISPLAY ....

调试代码

VSCode全称Visual Studio Code,调试代码方面算是对得起Visual Studio之名了,权威的配置过程还是参考VSCode官方文档,本文介绍的是个人配置在Windows下的配置尝试,点几下就配置好了,故分享出来,仅供参考

C语言

有些作业要求用C语言写,最开始追求新奇,用的Visual Studio 2015以及Clang,看中的是强大的调试功能,但是对于写个简单的作业来说太费事,Clang的报错常常不理解

之后转而使用了更常见的Dev C++,基于GCC,照抄书上的代码也不会莫名报错了,在很长一段时间里都是用Atom写代码,Dev C++做运行和调试,

到了VSCode当然会想要接近Visual Studio的体验,编译器肯定不用Clang了,至于GCC,WSL里有,Win上的GCC的版本不知道用哪个好,看网上的博客配置tasks.json (build instructions),launch.json (debugger settings)依然颇为繁琐

直到后面遇到了Scoop,安装就很简单了:scoop install gcc,查看版本后发现是MinGW的GCC,安装CodeRunner扩展后就可以运行代码了

注:代码及工作目录的路径不要有中文

调试功能则需要C/C++扩展,Debug功能在VSCode的左侧应该是自带的,对新目录来说Debug一栏的左上角绿色三角形旁边会显示”No COnfiguration”,Debug时配置gcc.exe作为代码的编译器,GDB作为代码的调试器的关键就在这里了:

  • Add Configuration的时候选C++(GDB/LLDB),之后再选gcc.exe build and debug active file设置完成后会在工作目录下生成一个.vscode/launch.json的文件,文件定义了gdb作为exe的调试器,需要注意的是这里的preLaunchTask,定义了在执行调试在前需要使用gcc对代码进行编译,也就是下一步

  • 回到C的源文件,点击Debug一栏的左上角绿色三角形开始调试,会提示Could not find the task ‘gcc.exe build active file’ ,点击Configure Task,再选gcc.exe debug active file,软件就会创建并打开.vscode/task.json,其中定义了gcc.exe编译的过程,也就是上一步的preLaunchTask

  • 以上的文件在做了选择之后就自动生成好了,之后该文件夹内的C代码都可以透过VSCode的Debug来调试了,设置断点,查看变量体验还是比较现代的~

已知问题

自带的运行代码和调试的terminal窗口对部分编码支持的不太好,调试的时候会闪退

使用WSL GCC可以参考下面的链接(和上个链接的WSL Remote还是有些不同的): VSCode使用WSL环境开发C语言配置

Python

首先在VSCode窗口的左下角,可以设置当前使用的Python解释器,运行依然是CodeRunner,在代码编辑窗口右键选择各种运行方式包括交互式。重点还是调试,这个时候可以选择创建一个新文件夹了(平时把Python代码都放到一个文件夹…),在新文件夹的情况下,点击调试会提示选择Debug Configuration:包括了Python File和Module以及其他没见过的类型

显然对于只会用调试Python File的情况,每次都做一次选择显然不太方便,那么可以选择Add Configuration,工作目录下会生成一个.vscode/launch.json的文件:

        {
            "name": "Python: 当前文件",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        }

在Debug的选项中也就有“Python: 当前文件”的选项了,如果想要在已经有launch.json的文件夹中调试,添加这一段到其中即可

调试Python文件的时候比较慢,比如调用Python还需要先激活Conda环境(选择Python解释器)

在编辑器窗口的右键选项中还有使用Jupyter-notebook作为交互式运行的选项,需要在Conda环境中准备:

conda install ipykernel
python -m ipykernel install --user --name 环境名称 --display-name "Python (环境名称)"

网页版

有上面的Remote-SSH,加上VSCode也是基于electron的,自然会想到能不能在浏览器中使用,偶然的一次机会还真的看到了这样的一个项目:Code-Server

这样一来,只要有一台配置OK的Linux的服务器,使用iPad之类的设备也可以在VSCode中看/写代码(随着iPad逐渐强调生产力,对键鼠支持的越来越好)

主题

Name: Vibrancy
Id: eyhn.vscode-vibrancy
Description: Vibrancy Effect for Visual Studio Code

拖动有些卡顿,打开的时候窗口大小有些异常,不过,不影响代码体验~(笔记本上可能对GPU负担太大从而影响续航)

最近发现有个网站收集了很多微软的壁纸:Wallpaper Hub

最重要的是,网站有一些Fluent Design的元素,最明显的就是Acrylic的效果了

其他插件

  • markmap,将Markdown转换为树状的思维导图
  • drawio,对于常见的流程图和框图,往往不需要特别重量级的工具,只需要创建.drawio的新文件就可以VSCode内画框图了
  • Marp,由Markdown生成slide,写slide也可以轻松地专注内容

How to Scoop

Scoop作为Windows下的命令行包管理工具,在之前的文章里用到的非常多,最近又看了下Scoop的说明,这里简要的介绍下更新后的特性,附带一些常用的命令行工具

Github:lukesampson/scoop的README对Scoop有了大概的介绍,我初次接触到是读到了 再谈谈 Scoop 这个 Windows 下的软件包管理器

缘由

  • 安装常见命令行工具
  • 自带配置环境变量,方便配置简易的开发环境
  • 有脚本自动化执行的优势,方便快速部署(比如重装系统的时候)

需要注意的是如果Scoop安装的软件和Powershell的命令或者别名重合,Powershell的命令依然被优先使用

安装

可以使用管理员模式打开powershell运行

Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
# or shorter
iwr -useb get.scoop.sh | iex

多线程下载支持

部分软件源在Github之类的连接性不太好的地方,偶尔下载很慢而且易报错,现在Scoop推荐默认使用aria2进行多线程下载,只需要安装aira2即可开启多线程下载

scoop install aria2

添加额外的仓库

参考SpencerWoo的文章添加的软件仓库基本上够用了

scoop bucket add extras
scoop bucket add java
scoop bucket add dorado https://github.com/h404bi/dorado
  • 默认的main仓库以命令行工具为主(比如收录的cmder是个有GUI的终端软件),例如Linux常用的sed, grep, gawk,vim可以大大方便Powershell的日常使用
  • extra仓库收录的高质量的gui软件比较多,比如说googlechrome,typora,vscode
  • java仓库收录了多种多版本的JDK,结合下文的scoop reset,可以便捷的切换环境变量下的JDK
  • dorado仓库收录了相当一部分国内常用的软件如微信,网易云,besttrace,因为下载源在国内下载速度很OK

常用软件

除去上面介绍的一些,其实想得到软件都可以在Scoop中使用scoop search找下看看

$ scoop list
Installed apps:

  7zip 19.00
  chromedriver 76.0.3809.126
  cmder-full 1.3.11
  concfg 0.2019.03.09
  ffmpeg 4.1.3 #编码工具
  gawk 3.1.7
  gcc 8.1.0
  gdrive 
  git 2.21.0.windows.1
  grep 2.5.4
  innounp 0.48
  iperf3 3.1.3 #网速测试工具
  nodejs 12.5.0
  pshazz 0.2019.04.02
  R 3.6.0
  sed 4.2.1
  tesseract 4.1.0.20190314 #OCR工具
  vim 8.1.1302 
  youtube-dl 2019.05.20 #偶尔下载视频
  trafficmonitor #任务栏网速,CPU内存占用监测
  screentogif #Gif录屏软件
  ntop #类似htop的的终端下的资源监视器(但是做不到htop那么强大)
  glow #终端下的Markdown Render
  openjdk #添加java仓库后,默认安装最新版的openjdk
  openjdk9 #java9

sudo

部分命令是无法在普通模式下运行的,一般的方法是打开一个新的管理员模式的窗口,相对来说不太方便,scoop可以安装sudo来实现对单一命令的赋权

比如设置禁用eth0接口的别名

scoop alias add ethd 'sudo netsh interface set interface eth0 disabled' 'disable eth0' 

输入scoop ethd之后就会弹出用户账户控制的弹窗,提示需要管理员权限,用键盘确认就好,省去了再开一个窗口的麻烦(如果是长串命令都需要管理员权限的话还是开一个吧)

ffmpeg

只介绍常用的简单指令

录制直播

面对没有加密的m3u8直播录制,IPTV用的较多,m3u8的地址可以通过浏览器的检查工具找到

ffmpeg -i m3u8 'test.ts'  

合并音频和视频

现在越来越多的网站选择把音频和视频分开,使用IDM下载两个文件可以直接用ffmpeg做快速的合并(复制)

ffmpeg -i v.mp4 -i a.mp4 -c copy output.mkv

当然如果youtube-dl支持视频网站的话使用youtube-dl更方便

提取视频中的音轨

常用于提取BGM,不做重编码的情况

ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac

-vn没有视频 -acodec copy说使用已经存在的相同的音频流

注意事项

scoop依然有许多不成熟的地方,在高可靠性要求的环境下依然是不推荐的,最经常遇到的莫非是软件安装因为网络等问题终端,安装状态会返回成功,如果需要重新安装的话需要先进行卸载

再一个就是环境变量的问题,scoop可以在安装的时候配置好一些环境变量,但是卸载却不一定会移除,这就导致一些重要的软件在Scoop卸载之后再在其他位置安装会出现环境变量错误的问题

部分高度依赖于安装目录,权限以及关联众多的软件不推荐使用scoop安装,如Chrome

使用Scoop提供的别名

Powershell的别名设置不方便,直接使用WSL的自定义别名(.bashrc)调用Windows下的程序又不能直接在Powershell中运行,直到发现Scoop可以自由的添加“环境变量”,想起来Scoop alias来设置程序运行的scoop别名

本来的用法应该是为Scoop内的操作添加别名:

# Install app
scoop alias add i 'scoop install $args[0]' 'Innstall app'
scoop alias add add 'scoop install $args[0]' 'Install app'

# Uninstall app
scoop alias add rm 'scoop uninstall $args[0]' 'Uninstall an app'
scoop alias add remove 'scoop uninstall $args[0]' 'Uninstall an app'

# List apps
scoop alias add ls 'scoop list' 'List installed apps'

# Update
scoop alias add u 'scoop update $args[0]' 'Update apps, or Scoop itself'
scoop alias add upgrade 'scoop update $args[0]' 'Update apps, or Scoop itself'

但是这个格式看起来就很自由:

比如说给WinMTRCmd添加一个scoop mtr的别名

scoop alias add mtr '~/winMTRCmd $args[0]' 'MTR tools for Win CMD'

之后使用scoop mtr [host]就可以愉快的使用mtr工具了

使用Scoop切换软件版本

这里以切换Java版本为例,例如在安装了openjdk和openjdk9之后,从默认的openjdk9切换到openjdk16

$ java -version
openjdk version "9.0.4"
OpenJDK Runtime Environment (build 9.0.4+11)
OpenJDK 64-Bit Server VM (build 9.0.4+11, mixed mode)

$ scoop reset openjdk
Resetting openjdk (16.0.1-9).
Linking ~\scoop\apps\openjdk\current => ~\scoop\apps\openjdk\16.0.1-9

$ java -version
openjdk version "16.0.1" 2021-04-20
OpenJDK Runtime Environment (build 16.0.1+9-24)
OpenJDK 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)
❌