Total Pageviews

Monday 13 May 2024

實拍越南華人,被迫逃難,沒收財產

 

渔家姑娘在海边

 

中国的制造业即将衰落 作者: 易富贤

 

最近美国、欧盟都在指责中国的产能过剩,2022年中国的制造业增加值占全球的31%,制造业出口占全球的20%。那么中国的制造业是否能“永葆青春”?产能过剩能持续多久?

日本制造业的兴衰

我们先来看看日本的案例。二战后,日本制造业快速崛起,制造业出口占全球比例从1950年的2.8%提高到1986年的15.7%,很大程度依赖美国的产业转移和市场。日美安保体制让日本没有军费支出负担而可以专注发展民用产品,1950年代朝鲜战争、1960年代越南战争带来的特别需求,政治互信使得美国的产业大量转移到日本。以汽车为例,日本战后经济凋敝,本国市场不足以发展出汽车产业,但丰田等企业借助美国市场(先是生产军用卡车,后大量向美出口)而发展成为了世界顶尖汽车制造商

1971年美元与黄金脱钩后,美国从世界上最大的贸易顺差国变成了最大的逆差国,主要逆差给了日本。比如1978-1984年,日本从美国获取的顺差占美国总逆差的49%。廉价的日本产品冲击了美国的制造业。日美贸易摩擦从纺织、钢铁这些传统产业,升级到家电、半导体、通信设备、汽车等技术及知识密集型产业。

1985年的广场协议并没有导致日本经济衰退,此后日本依然经历了7年的“平成景气”。但是广场协议却将日本产品挤出美国市场,导致日本制造业衰落。日本商品占美国进口的份额从1986年的22.4%降至2022年的4.6%,同期日本在全球制造业出口中的份额从15.7%降至3.6%

中国制造业崛起依赖美国市场

中国制造业的崛起模式与日本类似,但对美国市场的依赖度比日本更大,因为独生子女政策减少年轻消费群体,使得中国“额外过剩”了上亿劳动力,导致经济和就业高度依赖出口。比如,1978-1984年日本从美进口是向美出口的51%,而2001-2018年中国只有23%。

中国的居民可支配收入只占GDP的44%(国际社会占60-70%),也导致了中国在制造业上的“低人权优势”,但是也使得居民消费只占GDP的38%(1980年代日本占52%,美国占62%)。比如,正常工资应为60-70元,而中国只给44元,让企业更具竞争力,政府有财力提供产业补贴,政府和企业有足够的资金用于投资和创新,国际资本也因为高回报率而愿意投资中国。如果工资60-70元,那么生产和消费平衡;但是44元的工资却导致只有38元的消费力,人为造成“产能过剩”,只好大量出口。

中国商品占美国市场份额从1985年的1.1%上升到2000年的8.2%,同期中国制造业出口占全球比例从0.65%上升到4.7%。2001年中国加入世贸组织后,中国商品长驱直入美国市场,占美国市场份额提升到2017年的21.6%使得中国制造业出口占全球比例上升到2021年的20.5%

美中贸易战

世界经济正进入一个产品剩余化的时代,消费者的发言权、影响力要大于生产者日本在1960年代就意识到“顾客就是上帝”。美中贸易比当年的美日贸易更加不平衡,加上中国的人口规模和经济体量比日本大,因此,中国对美国制造业的冲击远比当年日本要大。而中国在意识形态又与美国不同,因此需要格外珍惜美中关系,才能留住美国市场这一最大的顾客

但是中国决策层却在林毅夫、李稻葵、张维为、金灿荣等人的忽悠下,真以为中国经济将是美国的两三倍,要取代美国主导国际新秩序。这就引发了美国的战略焦虑,导致美中贸易战在2018年全面爆发,中国商品占美国进口的份额从2017年的21.6%降至2023年的13.9%、2024年一季度的12.9%

美中贸易战最大的受益者是墨西哥和东盟(尤其是越南),其次是印度。墨、越、印的商品占美国进口的份额从2018年的13.6%、1.9%、2.1%提高到2024年一季度的15.9%、3.9%、2.8%。预计美国不会扶持越南的制造业,而会增加从墨西哥的进口,因为美越贸易极不平衡,过去十年越南从美进口只是向美出口的13%,而墨西哥是74%。

有人说,美国市场只占中国出口的不到20%,不足为虑。但是美国的市场是不可替代的,因为美元是国际储备货币,只有美国可以允许贸易逆差,成为其他国家的顺差池日本、台湾、韩国、越南的制造业崛起都是依赖这个顺差池。比如2018年美国市场只占中国出口的19%,但是却占了中国总顺差的92%。2009-2018年中国商品占美国进口的20%,但是中国从美国获取的顺差却占美国的总逆差的45%,每年给中国提供了数千万的就业。可以说,没有美国的市场,就没有中国制造业的崛起和经济的腾飞

中国驻美大使谢锋4月访问哈佛大学时说,“优质产能不仅不过剩,还能带动更多有效需求。”但是光有需求是不够的,还需要有购买力。除了美国外,其他国家需要贸易平衡,即便欧盟也如此。如果中国长期向这些国家大量出口,而这些国家未能大致等量出口(到中国或其他国家),会陷这些国家入债务危机、甚至政治危机,最后导致对华关系恶化。

以前凭借来自美国的巨额顺差,中国可以保持人民币汇率稳定,购买石油等原材料,对法国等国的贸易维持相对平衡,对德国等国甚至存在逆差。因此,法、德等国对华比较友好。但是现在来自美国的顺差减少,中国不得不减少从欧盟的进口,对法国的顺差在扩大,对德国从逆差转为顺差,如果此趋势继续,那么欧盟对华关系也将恶化。

何去何从?

美中贸易战对中国制造业的影响暂时还不大,因为一些企业借道第三国出口美国。但是长此以往,中国的产业链会像当年日本那样从低端向高端不断向境外转移,从而导致本国制造业衰退。

日本制造业的衰退,还因为人口因素。日本的高等教育毛入学率从1992年的30%提高到现在的62%,大学生不愿意从事制造业。从业工业的劳动力占比从1991年的35%降至现在的23%,并且年龄在老化。

支撑中国制造业的其实是农民工,但是农民工的数量已达顶峰,平均年龄从2008年的34岁提高到2023年的43岁,同期50岁以上者占比从11%提高到31%。中国的高等教育毛入学率已经与日本相当,还在攀升,意味着制造业从业人员将快速减少,很多产业将后继乏人。中国制造业的衰落可能不会像日本那么快,因为中国拥有更大的人口规模和国内市场,更完整的产业链和生态系统,但衰退的趋势是难以逆转的。

2023年中国的总顺差中仍然有41%来自美国,美国的总逆差中的26%则来自中国。如果不能妥善处理美中关系,中国商品占美国市场份额将继续下降,如果低于8%,对中国的经济、制造业、就业以及国际地缘政治都将是灾难性的。

美中是联合国安理会常任理事国,从两国和世界利益考虑,经贸纽带不应该继续削弱。理想的状况是:中国向美出口占美国总进口的10%以上,从美进口也占美国总出口的10%以上(2023年只占7.3%);从美进口不应低于向美出口的50%(已经从2018年的22%提高到2023年的35%了)。要做到这一点,中国应该将居民可支配收入占GDP的比例提高到60-70%的正常水平,一方面可以靠内需消化产能而避免因产业链转移导致制造业过快衰落,另一方面可以增加从美国的进口。中国从资源输出国进口石油等资源,对这些国家存在逆差,中国应该增加对这些国家的出口,减少从这些国家进口非资源产品,从而腾出市场份额给美国相关产品。这样才能让美中两国建立战略互信,共同维护国际秩序。

继续跟大陆“脱钩”,台湾才能“去风险”

 

赖清德总统当选人即将就职,两岸经贸的走向备受关注。近日有几项数据,可以作为参考的依据。一,今年前四个月,台湾对中国(含香港)出口比率下降到至三十.七%,接近二〇〇二年前四个月创下的三十.五%,为二十二年新低。二,去年台商赴中国的投资金额,创下历史新低纪录。台商对中国投资占我海外投资总额的比率,已从二〇一〇年的八十三.八%,降至二〇二三年十一.四%。另外,根据金管会统计,今年第一季金控海外曝险二十七.三八兆元,创统计以来最高;但对中国曝险占比则降至历年新低的八.一%。凡此,印证小英政府降低对中国经贸依赖的显著成果

台商西进中国是过去两岸经贸模式的主轴,虽然造成表面上的荣景,但因特殊的三角贸易模式,使得台商的利润、促成的薪资成长、就业人口,有利于中国远大于台湾。台湾对中国的出口比重,在二〇二〇年,曾创下四十三.九%的高峰;中国也曾是台湾对外投资的主要对象,曾创下对外投资占比的八成五;而台湾金融业亦曾掀起西进风,陶醉在对台商与“世界工厂”大作放贷业务的美梦之中。但是,在美中爆发贸易战,对抗日益激化之后,台湾选择加入美国队,降低对中国的经贸依赖,乃成为自保的必然作为。尤有甚者,中国是专制极权国家,凡事政治挂帅,并没有“经济归经济、政治归政治”的市场机制,对于其并吞对象的台湾,高经贸依存度更是“以商逼政”的武器。因此,本为正常的经贸往来,都会成为中国胁迫台湾的手段。在此情况下,台湾出口中国比重达到四成多,绝大多数对外投资流向中国,金融业大举在中国进行放贷,可用一句话贴切形容,令人“毛骨悚然”。

事实上,台湾对中经贸的高度依赖已成为中国胁迫台湾的筹码。中国动辄禁止台湾农渔产品输入,放话废除ECFA、或是取消早收清单优惠,都成为其惩罚具“台独倾向”的小英政府之武器。令人啼笑皆非的,中国观光客是否放行来台,竟然也成为中国对台是否释出善意的指标。幸而,ECFA涉及的石化等产业,近年在中国大规模量产下,陷入经营困境,几乎无利可图,且占我出口比例日益降低,有效降低ECFA一旦被废止所造成的冲击。另外,中国一再封杀我农渔产品,造成我相关业者的严重损失,但危机就是转机,促成了我外销多元化,已有卓著成效,降低了对中国这种非常规市场的依赖。这些年中共的经济胁迫作法已被看破手脚,唯有脱离它的掌控,才能促成台湾产品产销的正常化。至于观光客议题,正常的机制是由观光客的个人意志决定,不是由国家操控。但自由旅行的概念在中国是行不通的,加上人口优势,观光客竟成为执行国家意志的筹码。因此,它完全无视台湾人去中国的人数远远超过中国人来台,实际上一旦恢复两岸观光客自由行,中国受惠更是多于台湾,竟然把开放中国观光客来台当作皇恩浩荡,甚至蓝营前往中国输诚,也只获得开放福建至马祖观光的奈米级利多。遑论即使开放中国观光客来台,由于中客在台旅游,中国企业早已建立一条龙服务,大部分利益势必回流中国,所谓“肥水不落外人田”,中国开放两岸旅游,台湾受惠有限。故而,对于中国是否开放观光客来台,台湾应坚持对等立场,来者欢迎,不来亦无须强求,不能具有统战的政治目的,才是对待中国的正确方法。

坦言之,赖清德当选,民进党继续执政,中共早已定性为“台独”,两岸关系要有“春暖花开”的可能性似乎不高。况且,中国在习近平修改宪法,意图终生执政下,民族主义是其执政正当性的依据,因此在经济陷入困境,战狼外交激怒自由阵营,美国对抗中国的意志更形强大之下,“武统台湾”成为习近平的历史使命。但另一方面,台湾人的自我认同则愈来愈强,普遍不愿接受中共统治。如此一来,中共势必强化对台施压的规模与力道。在习近平的“中华民族伟大复兴”大旗下,在东海对抗日本、在台海扰乱台湾,于南海则挑衅菲律宾等南海诸国,已使中国变成世界动荡的根源。在此形势下,中共军机舰扰台,踰越台海中线,在金门周遭海域冒进,似乎将是赖执政下的日常。

总之,在中共不放弃并台野心下,欲建立正常的两岸互动,无异痴人说梦话;而美中对抗的基调,无论拜登或川普当选,都不会改变。其实,自由阵营与邪恶轴心的抗衡,并不只有自由民主等普世价值对抗独裁极权,更涉及生存所赖的经济矛盾。美国近日不断抨击中国输出过剩产能,将会重创先进国家的制造业;而中国大力补贴特定国内产业,已造成产业生态血流成河。当前中国大举倾销电动车,企图以不正当的补贴改写全球产业版图,已是欧、美、日与中国之间难以化解的矛盾。未来,先进经济体国家势必更加强调与中国“脱钩”,以达成“去风险”。反观台湾,小英已在脱钩与去风险缴出漂亮成绩,赖清德也须往这个方向前进,才能确保台湾永续发展。

老百姓为何不再乖巧听话,还唱反调,3点真相道出实情

在很多人的认知里面,老百姓就是一直被描绘为乖巧听话的形象,无论好坏都认为老百姓是默默接受的对象。然而,最近发生了一个令人惊讶的变化:越来越多的老百姓开始唱反调,用犀利的语言表达对专家建议的质疑和不满。

这个现象引起了广泛的关注和热议,也让我们不禁思考:为什么老百姓开始变得不再听话?

真相到底是什么呢?

一:信息获取途径的拓宽

随着移动网络和自媒体平台的快速发展,老百姓的信息获取途径得到了极大的拓宽。过去,专家的声音是主流媒体的独家代言人,老百姓只能被动接受他们的观点和建议。

然而,如今,社交平台上涌现出大量的自媒体和网红,博主。他们通过自己的观点和经验分享吸引了大量的关注和粉丝不同观点的传播和影响力的扩大使得老百姓开始怀疑专家建议的合理性,更加理性地思考问题

例如:以前人们对于健康的认知主要来自医生的建议和媒体的报道。但现在,自媒体上出现了很多健康领域的意见领袖,他们分享了各种不同的养生方法和经验。一些人可能提倡素食主义,而另一些人则主张运动和草药疗法。这些多元化的声音给老百姓提供了更多选择,也激发了他们对传统健康观念的怀疑。

二:怀疑专家动机

这些现象背后揭示出专家建议的真实动机

例如:最近某些专家说一些令常人费解的话,具体不说谁,毕竟我也是普通百姓,怕事。

专家一:“农民很勤劳是一种错觉,他们白天把种子撒地里就回家睡大觉,粮食是自己在土里长出来的,和农民没有多大关系。他还说农民不能用收割机收麦子,因为收割机收麦子会扬起很多因为收割机收麦子会扬起很多灰尘,会对环境造成污染。”

专家二:“当下不少年轻人选择送外卖、送快递、做电商、搞网络直播,不愿进工厂当产业工人,导致制造业招工困难,这不利于社会长远发展,他建议社会各界共同努力,鼓励支持更多年轻人成为产业工人,这样才能有利于制造业的发展,年轻人不能只考虑个人收入。”

专家三:“低收入人群可以灵活就业,比如用私家车拉活,或者把闲置的房子租出去,这对于解决低收入人群的收入问题是一个很有效的方式。”

......还有很多就不一一列举了。

这些话真的令普通老百姓费解。甚至质疑,这些专家是在为自己的利益而服务,他们的建议不过是割韭菜的手段

温铁军曾说过:“农民是城市发展的支撑。”他的观点引起了广泛共鸣,老百姓开始重新思考专家建议的可行性和真实性。他们不再盲目听从,而是依靠自己的判断和理性选择。

随着人文素质的提高,百姓们都会独立思考,已经不在韭菜,面对不合理的,甚至偏见的声音,怀疑/唱反调正常不过

三:与生活现状的脱节

专家们总是有着自己的理论和观点,然而,他们的建议却常常与老百姓的生活现状脱节。

例如,有些专家建议农民进城买房,回农村种地,却没有考虑到农民面临的土地问题、农村发展的不平衡和社会保障的问题。这样的建议引来了农民们的嘲笑和指责。

例如:某地政府提倡大力发展旅游业,专家们建议居民投资旅游项目。然而,当地居民却担心自己的投资回报不确定、旅游业竞争激烈等问题。他们更愿意选择稳定的行业就业或者保守的投资方式。这种现实与专家建议之间的差距引发了老百姓的疑虑。

以上就是为什么老百姓开始变得不再听话的真相。老百姓不再被定义为唯唯诺诺的群体,他们用冷嘲热讽说出真相,揭示出专家建议背后的真实情况

这是一个值得关注的变化,也是社会进步的体现。让我们一起支持他们,为他们的勇气和理性而鼓掌!

你认可吗?

被支解与审查的语言——华语面临的政治环境


 作者: 马建


目前全球使用华语的地区,尽管政治制度不同,但不可避免地受到了北京政府的影响。比如孔子学院、中文教学课本、网络博客、书籍出版商以及文学活动场所和语言翻译领域。因此作为语言的意指,会限制知识信息内容的诠释,从而在阅读文本时,我们便成了意识形态的复读机了。

(注:在本文里使用的华语一词就是指繁体、正体、汉语、中文或叫简体字)

我为了创作小说《阴之道》,曾走访了中国的黄河、长江和珠江等几条河流。几次碰到与当地政府官员坐在一起聊天谈话。他们大都有出国访问或是驻欧美大学一年的学者经历。但谈话明显互相隔着一层窗户。尽管他们是市级领导,平时看到的网络和传媒信息,和被封网的普通百姓几乎完全一致。这就是说:监控者和被监控者都在同一个知识信息领域内。与囚犯和狱卒关系不同的是:狱卒有离开铁门回家和探亲的自由,但城市高层官员和市民低层都享受着没有自由思想资源的待遇。久而久之,他们的个人意识就不存在了。只要习近平认为要打台湾,那中国大陆的人们都会统一认为是英明决策。这也就是共产党高官们把习近平思想“凝心铸魂”的成功。近十四亿人口,都成为习近平思想的复制版,甚至都不需要再研发入脑芯片了。语言的可怕之处就是它成为独裁者的统治工具,是可以杀人诛心的,而失去言论自由的人们习以为常了。那么,在中国防火墙监控之外的社会是否就可以幸免被洗脑呢。答案是:难以避免。西藏、新疆以被冠以“藏独彊独”一词而陷落,今天的香港人头顶国安法之后,以言获罪己然发生了。台湾也随时因“台独”这两个字而被围歼。

众所周知,中国海关的书报审查和所有互连网络监控一样,都是中国共产党意识形态存活下去的强大守护神。我就常被罗湖海关扣下一本书或几张报纸。在中国大陆,被意識形態审查过滤的书籍和所有声音视频的电视媒体就是中国人的知識信息來源。然后人们再用获得的知识信息成为学者教授或是“有头脑”的成功人士。那些名人、名导、儒商们也以为自已独立于习近平的思想之外,拥有个人意识和判断能力。还有一些画家、挂着念珠的修禅者、驴友、悟道习佛的社会精英们,也在画展、文学节和电影颁奖活动中谈着当代思潮。有些导演作家的作品也如同当年的东德,在国际上获得了各种奖项。甚至那些警惕不被洗脑的诗人和自由艺术家们,也在分不清爱国和爱党这相互对立的观念中,就在电视节目、创作剧本中发挥着自已的知识经验以及信息源泉。进了国家科学院的院士们因研究着习近平思想而成为国宝

总之,中国人已深信国际社会的信息和知识,在中国共产党的地盘里全都具有了。但这种“认知裂痕”又把很多年青人无设防地成了被谎言打晕的愚人。有很多的大学生既不知道文革历史,也不知道发生过北京天安门事件的真相,连发生在中国的大饥荒都一问三不知。但他们就在西方列强火烧圆明园和中国经济强大的中国梦里大学毕业了。而他们的老师教授很多就是从英美等国家派过去的白左教授也在大谈乌克兰的大饥荒而对中国发生的政治灾难一无所知。这个有用的白痴群体又在把他们的价值观散播给中国学生。在这个全球化时代,语言和信息的真实性就被掺假了。起码人们会认为:这种多信息知识来源正是落实了言论自由。从而认为新疆建了集中营,那是抹黑中国,是阴谋论。那些读中文媒体的华人就认为不准用“新疆棉”就是“种族歧视”。

上个月,当我走出建在美国华盛顿的“共产主义受难者展览馆”时,面对中国式的共产主义意识形态,我首先想到这个控制了好几代人的红色恐怖主义,正高举一带一路经济发展旗帜,开始试图控制全球的政治意识形态。中国共产党正以经济实力在影响人类政治文明的走向。他们把马克思的阶级斗争、无产阶级专政和暴力革命,如此有条不紊地在中国成功实践了近一个世纪。能够使共产党团结的不是信仰,是共同的恨。恨英美、恨知识、恨家庭父母,还恨穿牛皮鞋、穿呢子外套的。恨大于爱,甚至超过了恨犹太人的纳粹。共产主义的受难者还在中国产生着。中国的孩子们从小学就要开始相信要打倒英美是帝国主义,要解放台湾。伊斯兰恐怖组织更是传承了中国军人董荐瑞,举着炸药包和敌人同归于尽的精神,把人肉炸弹专利传承下来。中国共产党能长期监控言论思想,那就有能力箝制国际己形成的文明架构,无视已形成的民主与自由的政治环境。在国际上,以便宜的商品和好吃文化展开的大外宣,正配以國家洗脑成功的文化产品传向世界,甚至在非洲建立了”新闻学院”。培养了大批爱中国的党粉,进而影响着全球文明走向。这一切不是来自武器火药,而是语言,是那些放在唐人街和饭馆的简体字的人民日报。明眼人都明白来自武汉的新冠病毒,不过是萨斯病毒的变种,但被中国政府禁止查询并让世卫组织改了英文名称之后,也就不了了之了。现在连武汉暴发过新冠病毒的信息,都将如天安门大屠杀的信息一样,在中国大陆将无从获知。如果国际社会认为新冠病毒来自武汉,华文媒体都将认为是”种族歧视”。这些恶性循环信息,又会迎来大批中国留学生抗议。因为中国共产党已经公布新冠病毒来自美国,人们无需怀疑。我们相信以后在民主国家,被华语知识信息封闭的华人们,会不断地掀起因语言掺假而发生的反对种族歧视的浪潮,而这正漫延了民主国家的社会文明基础。进而人们无法辨别来自独裁制度审查过的信息是否合理,而是给了不同的言论意识更大的传播空间。俄乌战爭、哈以战争、拜登川普之爭,己让二十一世纪混乱不已。在善恶不分对和错的信息里,就等着被中国共产党的意识形态来”大同”了。

为共产主义奋斗终身的中国共产党,夺到权力之后先是在词语中改为”社会主义初级阶段”,然后又改成:中国特色社会主义。随着中国梦在世界漫延,也许会再次改为”国际大同社会主义”。我认为,这种词语病毒背后的“新冷战”,正在侵害华语的思维,甚至己经与台湾华语的语义都很难产生共识了。华语语言正在政治领域,教育和学术伦理被侵蚀着。如果我们把三千多个华语词汇做个模型来看的话,这个语言几乎是千疮百孔。被审查被禁用的关健词己使华语己失去了精确品质和真实的信息。多数使用华语的人只能用符号代替词句交流着。如果用华语上网查询天安门事件时,中国的所有网站都没有相关信息。而中国大陆读华语的人也就相信没有这个事件。而言论审查又把可能联想的词语封杀,甚至汗衫上印了”六四”两个数字,都会被抓捕。这已经完全降低了华语知识的多元和思想表达空间。在每天都有新语言词汇出现的网络时代,被防火墙绞杀的华语,已使知识信息循环渐如枯井。

我们本是靠语言和信息来预设世界观和判断文化价值。当语言信息从源头被断。那思想就只有日渐枯竭,也包括想象力。当中国大陆的书店学校充满习近平的语言,当人们的头脑填满被审查过的词语时,受中共价值观主导的华语,便开始抵触没有被审查的华语领域了。因此,中国的留学生们依然会自我审查地使用百度网,依然会看唐人街的《人民日报》,依然路径依赖式地使用着小图标和那些支解的词语,碰到老师讲文革就抗议,碰到香港人就骂”港独”。

当中华民族伟大复兴成为中国人的民意之时,文明社会的民众也感受不到中国语言威胁着你的言论自由,那你的价值观以及判断就己经被支解的华语操弄了,偏见比无知更危险。不要以为你没有去孔子学院,又看不懂华语媒体就生活的安全。被中国共产党审查后推向世界的华语载体,已经包裹了可感染的红色病毒。

马建

2024.4.6 於伦敦树屋

——《中国之春》首发

《寻租中国》解构的中国发展模式

中国始终无法摆脱“世界工厂”的宿命,但在不同的时空背景下,这种发展模式导致的政治经济社会后果会有很大的分别。台湾学者吴介明在他的专著《寻租中国:台商、广东模式与全球资本主义》中就富有洞见地指出中国自改革开放以来创下经济奇迹的诀窍正是“顺着全球价值链打造世界工厂”,而包括港资台资在内的境外资本在这个过程中扮演不可或缺的角色,为中国沿海地区的制造业崛起解决产业经验、技术及人才匮乏等问题。在这本书中,吴介民将价值链的全球展开作为海外华人资金,特别是台湾制造业资金进入中国的起点,从微观层面的政企互动和企业生产活动出发,讲述了中国政府和台商共同推动了广东发展成“世界工厂”,为中国经济增长模式的形成提供了出发点。

吴介明《寻租中国:台商、广东模式与全球资本主义》


吴介民用“寻租”这个概念来形容中国地方政府对外商经营活动的介入,将地方政府和包括台商在内的外资企业构成的“地方成长联盟”如何让全球价值链嵌入地方经济发展作为分析焦点。理论上说,寻租指的是官员私下索贿的个别行为,不利于经济成长,但在珠三角,寻租行为得到中央政府的默许,地方官员集体化、组织化、制度化、日常化地参与其中,形成“机构化寻租”。比如,外商为了投资设厂的便利,避免“违法违规”或“惹麻烦”,就必须向地方政府缴纳不同名目的费用,包括工缴费、管理费、特别费、挂靠费等。此外,地方政府也会在批租土地、缴纳五险一金等方面为企业大开方便之门来收取“服务费”。

由此可见,在一穷二白的情况下,中央及地方政府的改革派采取务实主义的态度,积极拥抱外资,创设“政策租金”,编织“权钱交易”网络,使得寻租行为反而成为一种不可言明的“准生产要素”,不但使得地方官员获利,而且帮助国家积累外汇存底,此外,各级政府也以招商引资的成效来考核官员,作为提拔升迁的依据。正是寻租行为的制度化奠定了中国过去40年经济崛起的基础,而寻租的主体包含在前台的地方官员和外资制造商(以台资台商为代表),以及在后头的中央政府与跨国企业,他们构成了一个攫取最大利益的跨层级政商集团,因此吴介民把这种发展特色概括为“寻租发展型国家”。

吴介民认为这套寻租模式必须嵌入在劳动密集型出口加工业才能成立,他在1994年首次进入珠三角时,刚好碰上改革开放在邓小平南巡之后重启,深圳东莞等地处处大兴土木、建造厂房、楼房和道路,传统的小村落快速成为工业区,聚集了大量的外来人口,他们正是全球产业链迫切需要的廉价农民工,“民工阶级提供相对优质而低成本的劳动力供给,让不断寻找劳动力的全球价值链延展到中国,快速与中国沿海的地方制度结构产生镶嵌,而将中国纳入世界资本主义体系中的一环”。而管理工业区的地方官员则构成了一个特权的收租阶级,“他们征收工厂租金,土地租金,管理费、民工中介费用等利益。

农民工可以说是毛泽东时代生育政策与户籍制度相结合的意外后果,并且随着农村土地改革和城市对外开放的推进,大量劳动力从农村流动到城市就业。但是受到“城乡二元结构”的限制,农民工的户籍仍在农村,从最低工资标准、社会保险到子女受教育权,农民工根本无法享有城市身份和公民权利,沦为二等公民。这种“公民身份差序”制度是“地方成长联盟”共谋的结果,使得政商双方皆能攫取最大的利益,而农民工则遭受来自国家和资本的双重剥削。

裴宜理在本书的英文版前言中写道“这种剥削机制是建立在限制自由迁徙的户口制度之上,该制度剥夺了农民工享有城市居民的权益。低工资让台湾资本家能够以具有全球竞争力的价格雇用优质劳动力,而户口制度则排除了民工的城市公民身份,使国家不必提供昂贵的福利开销。这种安排对国家和资本都十足有利可图,让地方政府以加工费、管理费、虚拟所有权合约等形式,向台湾投资者收取高额租金”。

在身份剥削之外,农民工还遭遇严重的阶级剥削,特别是港资台资企业以血汗工厂臭名昭著。珠三角的制造企业大都采取低成本战略,人为压低工人的工资待遇(以最低工资标准为底薪),但为了追求生产效率和利润最大化,工厂要求工人长时间工作,在生产旺季,每月加班时数经常超过100小时,工人的工作环境恶劣,劳动强度大,需要长时间站立和重复性工作。此外,台资企业往往采用独特的准军事化管理方式,把工人高度原子化,辱骂和罚款在车间里是常态。

四十年来,农民工为中国制造业的崛起做出了巨大贡献,如果没有庞大的农民工群体提供廉价而温顺的劳动力,中国不会成为世界工厂。但是农民工却长期被排除在“地方成长联盟”之外,无法公平分享快经济成长的果实,比如地方政府刻意限制最低工资标准的增长,使得农民工不得不超时加班,自我剥削,否则难以负担在城市的基本生活。另一方面,农民工针对严苛的阶级剥削发起的不同程度的“马克思式抗争”都会遭到国家和资本的联手打压,群体聚集被驱散,罢工工人被解雇,工人领袖被抓捕,这些事件在过去二十年间屡见不鲜。凡此种种,一言以蔽之:“机构化寻租是对农民工劳动力剥削的掩饰”,但产生了严重的社会政治后果,包括但不限于贫富差距扩大、阶级不平等加剧、最后酿成集体抗争或城市骚乱。


难以持续的中国式寻租

但是,历史与现实经验表明,这种世界工厂发展模式并不是永动机,它的功能发挥受到时空背景的制约,一方面,全球价值链的转移有其内在规律,“逐底竞争”仍然是主要驱动力;另一方面,中国的劳动力市场受人口结构的影响瞬息万变,农民工不会永远甘愿接受身份剥削和阶级剥削,这两方面因素决定了中国寻租式发展的内在不稳定性,而全球金融危机的冲击只是触媒。随着要素价格的上涨,政策制度环境与政商关系的变化,产业升级的政策推力,加上周边国家低劳动成本吸引力,以及发达国家要求供应链“去风险化”,这些内外因素所汇集而成的巨大力量,使得全球“世界工厂”格局朝着“中国+N”方向发展。从这点来看,中国要追求经济转型和产业升级,无论是主动拥抱还是被动接受,都需要超越寻租式的世界工厂发展模式。

吴介民基于丰富的民族志研究与全面的理论结构,结合宏观与微观,历史与当下,为中国过去四十年的经济崛起提供了启发性的解释,但“机构化寻租”、“在地镶嵌治理”、“公民身份差序”等概念的成功逻辑还能继续适用于下一阶段的发展吗?尽管中国在过去多年擘画了一系列产业转型升级蓝图,并透过强势国家能力来推动实施,像“中国制造2025”、半导体大基金、新能源产业等。但是在真正的高技术领域和高附加值环节,中国的自主创新与技术突破仍然受到国内僵硬过时的科研体系的制约,再加上西方国家的技术抵制与封锁,导致中国式的创新驱动发展只能走回举国体制的老路,其结果也有历史经验可循

在以芯片为代表的高科技无法取得突破,但又要解决眼下的经济困境的情况下,中国试图在传统的“世界工厂”模式中寻找所谓的新质生产力,以Temu、Shein等跨境平台和电动汽车、太阳能电池和锂电池等新产业为经贸武器,向全球市场发起冲击。备受重视的高层智囊郑永年在最近的一篇《这次轮到中国了》文章中自信地讲到,“唯有足够的产能,才能改变世界。一个拥有足够改变世界的产能的中国有助于塑造出一个更加可持续发展和公平的世界经济新秩序”,气势恢宏。

但是深究一下就会发现,跨境电商平台和新能源产业的底色仍旧是低成本大规模制造,而困在“内卷”里的人就是代价,像拼多多用竞业协议向离职员工索赔巨款、比亚迪薪资待遇太差导致工人必须排队离职等问题比比皆是,层出不穷。但是这些打工人的痛苦和哀嚎早就淹没在强国竞争的宏大叙事与“遥遥领先”的尖叫欢呼中。

中国向何处去?吴介民带来的洞见与郑永年描绘的前景预示着截然不同的方向,但过去的经验表明,即使是西方社会科学哪怕是最佳的预测都没能料到过去四十年中国的经济崛起会如此成功,以及未来的走向会如此让人难受甚至恐惧。

吴介民这本书讲述的是台商西进与中国地方资本结成利益联盟共同剥削农民工的故事,但时移世易,如今包括台商在内的外资大规模撤离,留下的利益空间迅速被本土资本占据,资本与国家不再需要形式上的结盟,因为它们已经融为一体,像“合肥模式”就是国家化的资本。这样的资本更加不受制约,行为上更有进攻性,它们压迫的对象正是那些躺不平也卷不动的大国小民。

困在“公民身份差序”里的农民工是被牺牲掉的一代人,他们辛劳一辈子,大部分积蓄花在给子女买房结婚上。但他们现在垂垂老矣,大部分人没有退休金,不得不以高龄在工地搬砖,在马路扫地,在零工市场趴活,这样的场景入不了郑永年这样的政治学家的法眼,反而是耶伦看到了,她指出中国工人的待遇过低,呼吁减少工时并增加工资。为强国奉献一生的故事还要继续吗?这或许对烟草二代、电力二代、银行二代适用,但普通人的命运还是映照在吴介民的书中,所以就不如“最后一代”吧!


TS文件格式:什么是TS?如何打开,编辑和转换它?

 概要
对于TS文件,相信很多人都对它很陌生,它并不像MP4格式那么流行。为了让大家进一步了解TS文件,本文将围绕TS文件格式,详细介绍它的来源、适用范围、打开方式以及如何编辑转换等。

一、什么是TS文件格式

TS(Transport Stream,传输流)是一种封装的格式,它的全称为MPEG2-TS。MPEG2-TS是一种标准数据容器格式,传输与存储音视频、节目与系统信息协议数据,主要应用于数字广播系统,譬如DVB、ATSC与IPTV。传输流最初是为广播而设计的。后来,通过在标准的188字节数据包中添加4字节的时间码(TC),从而使该数据包成为192字节的数据包,使其适用于数码摄像机,录像机和播放器。

MPEG2是一种多媒体传输、复用技术,在数字电视广播中可提供数百个节目频道。复用的含义是,可以同时传输多层节目。MPEG-2标准中,有两种不同的码流输出到信道,一种是节目码流(PS: Program Stream ,节目流),适用于没有传输误差的场景;一种是传送流(TS : Transport Stream ,传输流),适用于有信道噪声的传输场景。

节目码流是用于稳定可靠的媒体,如光盘(如DVD / CD),而传输流是用于不太稳定的传输,例如地面或卫星广播。此外,传输流可以传输多个节目。它们两者之间之间不具有层级关系。在逻辑上,其中它们都是都是PES(Packetized Elementary Stream,包基本流)包组成的,所以可以很方便地实现相互转换。

TS流是将视频、音频、PSI等数据打包成传输包进行传送,主要用于节目传输。
其优点有:

● 动态带宽分配:由于TS的传输包长度是固定的,因此可将视频、音频和数据信息进行实时的、灵活的分配。

● 可分级性。

● 可扩展性。

● 抗干扰性。

● 接收机成本低廉。

二、TS文件格式的适用范围

TS作为一种封装文件格式,它的适用范围也较为广泛,其中可应用在以下领域:
● 广播电视领域

TS通常在DVB和ATSC等广播系统中使用。该格式具有纠错和流同步功能,可在信号降级时保持传输完整性。TS流最经典的应用就是我们平时生活中的数字高清电视。

● 实时流媒体

苹果公司发明的HTTP Live Streaming流媒体是基于TS文件的,在直播中将视频流切片或文件片段进行传输,或者是通过给出的TS文件地址依次播放。

● 蓝光光盘/全高清视频

TS作为一种封装格式,MPEG-2或者VC-1等编码都可以封装,同时也是蓝光和全高清视频较为常用的封装格式。所以通常TS格式的视频具有视频质量高、体积大、还原准确的特点,是高清发烧友所喜爱的格式。

● 数码摄像机

为了能适用在数码摄像机,在TS格式分组上增加了4个字节长的时间码。另外,借助时间码也可以用来同步多个摄像机拍摄的内容。

三、可打开TS视频文件的程序

TS文件通常作为多个文件保存在DVD上,例如“ moviename1.ts”,“ moviename2.ts”,“ moviename3.ts”等。DVD上存储的视频传输流文件可以在DVD播放器中播放。虽然TS文件可以在高清摄像机、蓝光DVD中无需借助其他软件就能直接打开,但是TS视频文件与大多数的媒体播放器、便携式播放器或视频编辑工具都不兼容。
要播放TS视频文件,你可通过以下程序打开:
Windows 可打开TS文件的程序
Roxio Creator NXT Pro 7
Corel会声会影 2019
Audials One 2019
VideoLAN VLC媒体播放器
DAUM PotPlayer
MAC Roxio Popcorn
苹果DVD播放器
VideoLAN VLC媒体播放器
Aiseesoft Mac Video Converter Ultimate
Squared 5 MPEG Streamclip
Linux VideoLAN VLC媒体播放器
SMP播放器
由于TS文件的设备兼容性较差,在很多时候需要下载额外的程序才能打开。为了能快速打开该视频文件,那你可尝试将其转换为MP4格式。

四、如何将TS文件格式转换到MP4格式

如果你想将TS视频文件传输到手机或其他便携式播放器中播放,那最好的办法就是直接转换成更易访问的格式,例如MP4。TS格式与MP4格式都用于存储视频文件以及流媒体传输,但两者在适用领域上有着很大的不同。TS更适用于专业流媒体播放,而MP4是在计算机和移动设备上存储和观看视频的绝佳选择。
TS格式与MP4格式之间的区别:

TS MP4
文件拓展名 .ts .Mp4
视频编码格式 MPEG-2,H.264,H.265 H.264,H.265,MPEG-4等
音频编码格式 AC-3,DTS,LPCM等 MP3,AAC,AC-3等
章节
流媒体
移动设备支持 ×

使用FFmpeg转换视频格式

FFmpeg是一个免费开源的多媒体框架,可支持多种的视频音频/视频格式,可实现多种影音之间的自由转换。FFmpeg的转换方式是通过命令行来进行的,对于不熟悉命令行的新手来说,是不建议使用的,建议你使用第一种转换方法。
具体的操作步骤如下:
① 将FFmpeg下载到电脑后,同时按住键盘的“Windows+R”键,在运行框汇中输入“cmd”,点击“确定”。 

②如果您需要将TS转换为MP4格式,那只需在命令符窗口中输入命令

C:\Windows\System32\ffmpeg.exe –i D:\TS\Peace.ts D:\Peace.mp4 ,并按Enter键运行,即可成功将视频转换为您需要的视频格式。(ffmpeg不错,这里我第一次用它成功把ts文件转换为mp4文件,mp4文件体积稍微增大了一点

注意:【D:\TS\Peace.ts】是您需要转换的视频文件位置及名称,【D:\Peace.mp4】是转换输出的文件路径、名称以及格式。
--------------------------------
 
把ts扩展名改成mp4扩展名即可。 
--------------------------------------
 
相关帖子:
 


Sunday 12 May 2024

SQLite 命令

 只要有数据存储首先就想到了 sqlite

我一直对 C/S 模式的数据存储很反感,记得在知道 sqlite 之前的很长一段时间里一直用的是 xml 来存数我的数据,我喜欢将数据存储在单一文件里,我可以随时把数据带在身上,而且它们兼容性够好,拿着数据文件到那里都能用,哪怕是在嵌入式系统里照样玩儿的转…

SQLite特性

  • 零配置 – 无需安装和管理配置
  • 储存在单一磁盘文件中的一个完整的数据库
  • 数据库文件可以在不同字节顺序的机器间自由的共享
  • 支持数据库大小至2TB
  • 足够小, 大致3万行C代码, 250K
  • 比一些流行的数据库在大部分普通数据库操作要快
  • 简单, 轻松的API
  • 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定
  • 良好注释的源代码, 并且有着90%以上的测试覆盖率
  • 独立: 没有额外依赖
  • Source完全的Open, 你可以用于任何用途, 包括出售它
  • 支持多种开发语言,C, PHP, Perl, Java, ASP.NET,Python

Sqlite安装

现在各大Linux发型版均有现成的软件包可供安装,而且大部份系统都是自带有的,想确认系统里有没有运行下

$ sqlite3

非 Linux 系统到:sqlite.org下载安装,接下来就是 sqlite 命令行工具的使用

打开或创建数据库

$sqlite3 test.db3

这样就能打开或者创建一个新的数据库文件

$sqlite3 test.db3
SQLite version 3.6.23
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>

它看起来就是这个样子

SQlite内置命令

它除了能执行SQL语句以外还提供一组内置的命令,它们是以点.开始,比如说查看帮助信息就是 .help, 退出是 .exit 跟 .quit

创建表

在命令行里大部份的SQL语句它都是支持的,现在来新建两个表

sqlite>create table Artists (
--->ArtistID INTEGER PRIMARY KEY,
--->ArtistName TEXT);

sqlite 对SQL语句大小写不敏感,所以大写小写随便

sqlite>create table CDs (
--->CDID INTEGER PRIMARY KEY,
--->ArtistID INTEGER NOT NULL,
--->Title TEXT NOT NULL,
--->Date TEXT);

这里注意,除了INTEGER PRIMARY KEY,其它字段是都可以是无类型的,也就是不关声明什么或者不声明,这个字段是可以存储任何数据的。

插入数据

sqlite>insert into Artists (ArtistID,ArtistName) values (NULL,'Peter Gabriel');
sqlite>insert into Artists (ArtistID,ArtistName) values (NULL,'Bruce Hornsby');
sqlite>insert into Artists (ArtistID,ArtistName) values (NULL,'Lyle Lovett');
sqlite>insert into Artists (ArtistID,ArtistName) values (NULL,'Beach Boys');
sqlite>insert into CDs (CDID,ArtistID,Title,Date) values (NULL,1,'So','1984');
sqlite>insert into CDs (CDID,ArtistID,Title,Date) values (NULL,1,'Us','1992');
sqlite>insert into CDs (CDID,ArtistID,Title,Date) values (NULL,2,'The Way It Is','1986');
sqlite>insert into CDs (CDID,ArtistID,Title,Date) values (NULL,2,'Scenes from the Southside','1990');
sqlite>insert into CDs (CDID,ArtistID,Title,Date) values (NULL,1,'Security','1990');
sqlite>insert into CDs (CDID,ArtistID,Title,Date) values (NULL,3,'Joshua Judges Ruth','1992');
sqlite>insert into CDs (CDID,ArtistID,Title,Date) values (NULL,4,'Pet Sounds','1966');

sqlite是支持导入sql文件的,只要使用内置命令.read即可,比如说我们将以上的命令建成一个sql文件,命名为insert_table.sql

insert into Artists (ArtistID,ArtistName) values (NULL,’Peter Gabriel’);
insert into Artists (ArtistID,ArtistName) values (NULL,’Bruce Hornsby’);
insert into Artists (ArtistID,ArtistName) values (NULL,’Lyle Lovett’);
insert into Artists (ArtistID,ArtistName) values (NULL,’Beach Boys’);
insert into CDs (CDID,ArtistID,Title,Date) values (NULL,1,’So’,’1984′);
insert into CDs (CDID,ArtistID,Title,Date) values (NULL,1,’Us’,’1992′);
insert into CDs (CDID,ArtistID,Title,Date) values (NULL,2,’The Way It Is’,’1986′);
insert into CDs (CDID,ArtistID,Title,Date) values (NULL,2,’Scenes from the Southside’,’1990′);
insert into CDs (CDID,ArtistID,Title,Date) values (NULL,1,’Security’,’1990′);
insert into CDs (CDID,ArtistID,Title,Date) values (NULL,3,’Joshua Judges Ruth’,’1992′);
insert into CDs (CDID,ArtistID,Title,Date) values (NULL,4,’Pet Sounds’,’1966′);

接着在命令行里运行

sqlite>.read insert_table.sql

表查询

来看看现在这两张表里都有那些内容,执行

sqlite>select * from Artists;

sqlite>select * from CDs;

如果要同时看表头,请在运行查询语句前打开headers选项

aqlite>.headers ON

输出结果看起来应该是这样子

ArtisID|ArtistName
1 |Peter Gabriel
2 |Bruce Hornsby
3 |Lyle Lovett
4 |Beach Boys

CDID|ArtisID|Title |Date
1 |1 |So |1984
2 |1 |Us |1992
3 |2 |The Way It Is |1986
4 |2 |Scenes from the Southside|1990
5 |1 |Security |1990
6 |3 |Joshua Judges Ruth |1992
7 |4 |Pet Sounds |1966

其它的一些查询语句

sqlite>SELECT Title AS AlbumName FROM CDs;
sqlite>SELECT Title FROM CDs WHERE Date>=1990 ORDER BY Title;
sqlite>SELECT Date FROM CDs;
sqlite>SELECT DISTINCT Date FROM CDs;
sqlite>SELECT Title FROM CDs GROUP BY ArtistID;

多表查询

执行

sqlite>SELECT t1.ArtistName,CDs.Title FROM Artists t1, CDs WHERE t1.ArtistID=CDs.ArtistID

得到的结果

ArtistName |Title
Peter Gabriel|So
Peter Gabriel|Us
Peter Gabriel|Security
Bruce Hornsby|The Way It Is
Bruce Hornsby|Scenes from the Southside
Lyle Lovett |Joshua Judge Ruth
Beach Boys |Pet Sounds

更新字段

插入一条数据

sqlite>insert into Artists (ArtistID,ArtistName) values (NULL,'Supernatural');

如果要更改歌手名字为 Santana

sqlite>UPDATE Artists SET ArtistName ='Santana' WHERE ArtistID=5;

即可.

删除字段

首先执行

sqlite>select * FROM CDs WHERE Title LIKE 'Super%';

看看是不是想要删除的数据,是的话,执行

sqlite>DELETE FROM CDs WHERE Title LIKE 'Super%';

再运行

sqlite>select * FROM CDs WHERE Title LIKE 'Super%';

看看是不是已经删除了?

如果嫌上面的命令行不够直观高效,而你又非常喜欢多用鼠标,那么推荐你安装 SQLite Manager 这个 Firefox 扩展程序,它真的非常方便。

----------------------------------------------------------

SQLite 命令行程序说明

SQLite 库包含一个名字叫做 sqlite3 的命令行,它可以让用户手工输入并执行面向 SQLite 数据库的 SQL 命令。本文档提供一个样使用sqlite3 的简要说明。

开始

启动 sqlite3 程序,仅仅需要敲入带有 SQLite 数据库名字的 sqlite3 命令即可。如果文件不存在,则创建一个新的(数据库)文件。然后 sqlite3 程序将提示你输入 SQL。敲入 SQL 语句(以分号“;”结束),敲回车键之后,SQL 语句就会执行。

例如,创建一个包含一个表 ”tb11″ 名字为 ”ex1″ 的 SQLite 数据库,你可以这样做:

$ sqlite3 ex1
SQLite version 3.3.17
Enter ".help" for instructions
sqlite> create table tbl1(one varchar(10), two smallint);
sqlite> insert into tbl1 values('hello!', 10);
sqlite> insert into tbl1 values('goodbye', 20);
sqlite> select * from tbl1;
hello!|10
goodbye|20
sqlite>

你可以通过敲你所用系统的文件结束符(通常是Ctrl + D)或者中断字符(通常是Ctrl + C)。来终止 sqlite3 程序。确定你在每个 SQL 语句结束敲入分号 !sqlite3 程序通过查找分号来决定一个SQL语句的结束。如果你省略分号,sqlite3 将给你一个连续的命令提示符并等你给当前的SQL命令添加更多的文字。这个特点让你输入多行的多个 SQL 语句,例如:

sqlite> create table tbl2(
...> f1 varchar(30) primary key,
...> f2 text,
...> f3 real
...> );
sqlite>
题外话:查询 SQLITE_MASTER 表

SQLite数据库的框架被保存在一个名叫”sqlite_master”的特殊的表中。你可以像查询其它表一样通过执行“SELECT”查询这个特殊的表。例如:

$ sqlite3 ex1
SQlite vresion 3.3.10
Enter ".help" for instructions
sqlite> select * from sqlite_master;
type = table
name = tbl1
tbl_name = tbl1
rootpage = 3
sql = create table tbl1(one varchar(10), two smallint)
sqlite>

但你不能在 sqlite_master 表中执行诸如 DROP TABLE, UPDATE, INSERT 或者 DELETE 命令。sqlite_master 表在你创建、删除和索引数据库时自动更新这个表。你不能手工更改 sqlite_master 表。

TEMPORARY 表的结构没有存储在 sqlite_master 表中,由于 TEMPORARY 表对应用是不可见的,而不是应用程序创建这个表。TEMPORARY 表结构被存储在另外一个名叫 sqlite_temp_master 的特定的表中。sqlite_temp_master 表是临时表自身。

sqlite3 的特殊命令

大多数候,sqlite3 读入输入行,并把它们传递到 SQLite 库中去运行。但是如果输入行以一个点(“.”)开始,那么这行将被 sqlite3 程序自己截取并解释。这些 “点命令” 通常被用来改变查询输出的格式,或者执行鞭个预封包(预定义prepackaged)的查询语句。

你可以在任何时候输入 .help,列出可用的点命令。例如

sqlite> .help
.backup ?DB? FILE      Backup DB (default "main") to FILE
.bail ON|OFF           Stop after hitting an error.  Default OFF
.databases             List names and files of attached databases
.dump ?TABLE? ...      Dump the database in an SQL text format
                         If TABLE specified, only dump tables matching
                         LIKE pattern TABLE.
.echo ON|OFF           Turn command echo on or off
.exit                  Exit this program
.explain ?ON|OFF?      Turn output mode suitable for EXPLAIN on or off.
                         With no args, it turns EXPLAIN on.
.header(s) ON|OFF      Turn display of headers on or off
.help                  Show this message
.import FILE TABLE     Import data from FILE into TABLE
.indices ?TABLE?       Show names of all indices
                         If TABLE specified, only show indices for tables
                         matching LIKE pattern TABLE.
.load FILE ?ENTRY?     Load an extension library
.log FILE|off          Turn logging on or off.  FILE can be stderr/stdout
.mode MODE ?TABLE?     Set output mode where MODE is one of:
                         csv      Comma-separated values
                         column   Left-aligned columns.  (See .width)
                         html     HTML <table> code
                         insert   SQL insert statements for TABLE
                         line     One value per line
                         list     Values delimited by .separator string
                         tabs     Tab-separated values
                         tcl      TCL list elements
.nullvalue STRING      Print STRING in place of NULL values
.output FILENAME       Send output to FILENAME
.output stdout         Send output to the screen
.prompt MAIN CONTINUE  Replace the standard prompts
.quit                  Exit this program
.read FILENAME         Execute SQL in FILENAME
.restore ?DB? FILE     Restore content of DB (default "main") from FILE
.schema ?TABLE?        Show the CREATE statements
                         If TABLE specified, only show tables matching
                         LIKE pattern TABLE.
.separator STRING      Change separator used by output mode and .import
.show                  Show the current values for various settings
.stats ON|OFF          Turn stats on or off
.tables ?TABLE?        List names of tables
                         If TABLE specified, only list tables matching
                         LIKE pattern TABLE.
.timeout MS            Try opening locked tables for MS milliseconds
.width NUM1 NUM2 ...   Set column widths for "column" mode
.timer ON|OFF          Turn the CPU timer measurement on or off

改变输出格式

sqlite3 程序可以以八种不同的格式显示一个查询的结果:”csv”, “列”, “html”, “插入”, “行”, “制表”和”tcl”。你可以用.mode点命令在这些输出格式之间切换。

默认的输出格式是“列表”。在列表模式下,每条查询结果记录被写在一行中并且每列之间以一个字符串分割符隔开。默认的分隔符是一个管道符号(“|”)。列表符号在当你输出查询结果到另外一个符加处理的程序(如AWK)中去是尤为有用。

sqlite> .mode list
sqlite> select * from tbl1;
hello|10
goodbye|20
sqlite>

你可以用 .separator 点命令来改变分界符。例如,为了把分割符改为一个逗号和一个空格,你可以这样做:

sqlite> .separator ", "
sqlite> select * from tbl1;
hello, 10
goodbye, 20
sqlite>

在 “line” 模式下,每一个位于条记录中的列在它自己那行显示。每行由列名、一个等号和列数据组成。下一条记录以一个空行隔开。这是一个行模式输出的例子:

sqlite> .mode line
sqlite> select * from tbl1;
one = hello
two = 10
one = goodbye
two = 20
sqlite>

在列模式下,每条记录在一个单独的行中以数据列对齐的方式显示。列如:

sqlite> .mode column
sqlite> select * from tbl1;
one two
---------- ----------
hello 10
goodbye 20
sqlite>

在默认的情况下,每列至少 10 个字符宽。太宽的数据将被截取。你可以用 .width 命令来调整列宽。如下所示:

sqlite> .width 12 6
sqlite> select * from tbl1;
one two
------------ ------
hello 10
goodbye 20
sqlite>

上面例子中 .width 命令设置第一列宽为 12 第二列宽为 6。其它的列宽不变。你可以指定与你查询结果需要的列数一样多的 .width 参数。

如果你指定一列宽为0,那么这个列宽将自动以下面三个数字中的最大值做为列宽:10、表头宽度和最宽的数据列的宽度。这可以让列自动调整宽度。每列的默认设置为自动调整的 0 值。

出现在输出开头两行的列标示可以用 .header 点命令关闭。在上面的例子中,列标示是打开的。可以用下面的方法关闭列标示:

sqlite> .header off
sqlite> select * from tbl1;
hello 10
goodbye 20
sqlite>

另外一个有用的输出模式是 insert。在插入模式下,被子格式化为看起来像 SQL INSERT 语句的样式。你可以用插入模式来产生文件(便于)以后用于不同数据库的输入。

当指定插入模式时,你必须给定一个特定参数就是要插入的表名。例如:

sqlite> .mode insert new_table
sqlite> select * from tbl1;
INSERT INTO 'new_table' VALUES('hello',10);
INSERT INTO 'new_table' VALUES('goodbye',20);
sqlite>

最新的输出格式是 “html”。在这种模式下,sqlite3 把查询的结果写做 XHTML 表。开始的和结束的(标记)没有写出,但有、和等分界符。html 输出对 CGI 来说是相当有用地。

把结果写到文件中

默认情况下,sqlte3 把结送到标准输出。你可以用 .output 命令改变它。只须把输出文件名做为 .output 命令的输出参数然后所有后续查询结果将被写到那个文件中。用 .output stdout 再一次改为标准输出。例如:

sqlite> .mode list
sqlite> .separator |
sqlite> .output test_file_1.txt
sqlite> select * from tbl1;
sqlite> .exit
$ cat test_file_1.txt
hello|10
goodbye|20
$

查询数据库结构

sqlite3 程序提供几个有用的用于查询数据库结构的快捷命令。这些不是不可以用别的方式来实现。这些命令仅仅是一个快捷方式而已。

例如,为了查看数据库的表列表,你可以敲入 .tables

sqlite> .tables
tbl1
tbl2
sqlite>

.tables 命令相似于设置列表模式然后执行接下来的查询:

SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1

事实上,你可以查看 sqlite3 的源代码(可以在源文件树的 src/shell.c 中),你可找到上面的具体的查询。

.indices 命令作用类似的方式是列出特定表的所有的索引。.indics 命令须一个参数即所要索引表的表名。最后,但不是至少,是 .schema 命令。不带任何参数,.schema 命令显示原始的用于创建当前数据库的 CREATE TABLE和CREATE INDEX 语句。如果你给 .schema 命令一个表名,它显示原始的创建该表和它所有索引的 CREATE 语句。我们可以:

sqlite> .schema
create table tbl1(one varchar(10), two smallint)
CREATE TABLE tbl2 (
f1 varchar(30) primary key,
f2 text,
f3 real
)
sqlite> .schema tbl2
CREATE TABLE tbl2 (
f1 varchar(30) primary key,
f2 text,
f3 real
)
sqlite>

.schema 命令可以用设置列表然后执行以下查询来实现:

SELECT sql FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type!='meta'
ORDER BY tbl_name, type DESC, name

或者,如果你给 .schema 命令一个参数,由于你只想得到一个表的结构,查询可以是这样:

SELECT sql FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'
ORDER BY substr(type,2,1), name

你可以担供一个参数给 .schema 命令。如果这橛,查询可以是这样的:

SELECT sql FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE tbl_name LIKE '%s'
AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'
ORDER BY substr(type,2,1), name

在查询中 “%S“ 为你的参数所取代。这使你可以询数据库结构的某个子集。

sqlite> .schema %abc%

与这些一起,.table 命令也接受一个模式作为他的参数。如果你给.table 一个参数,“%” 将被前后扩展并且一个 LIKE 子句被附加到查询上。这让你可以列出只与特定模式相匹配的的表。

.datebasae 命令显示所有当前连接打开的数据库的一个列表。将允许一次到少两个。第一个是 “main”,最初打开的那个数据库。第二个是 ”temp”,用于临时表的数据库。对于用 ATTACH 语句附加的数据也许有附加数据库列表。输出的第一列与之相联的数据库名,第二列是外部文件名。

sqlite> .databases

将整个数据库转换为 ASCII 文本文件

.dump 命令成一个单一的 ASCII 文本文件。这个文件可以被用作管道传递给 sqlite3 命令来转换回数据库。

一个最好的制作一个数据库档案拷贝的命令是:

$ echo '.dump' | sqlite3 ex1 | gzip -c >ex1.dump.gz

它产生一个一个名为 ex1.dump.gz 的文件,它包含了你以后或在其它机器上重构数据库的所有的信息。要重构数据库,只须敲入:

$ zcat ex1.dump.gz | sqlite3 ex2

这个文本格式是纯粹的 SQL 语句所以你可以用 .dump 命令来导出一个 SQLite 数据库到另一个常用的 SQL 数据库引擎。比如:

$ createdb ex2
$ sqlite3 ex1 .dump | psql ex2

其它的点命令

.explain 命令可以被用来设置输出格式为 “column” 并设置列宽为 EXPLAIN 命令看起来比较合理的宽度。EXPLAIN 命令是 SQLite 特有的 SQL 扩展,它是对调试有用。如果任何常规的 SQL 被 EXPLAIN 执行,那么 SQL 命令被分解并分析但并不执行。取而代之的是,虚拟机指令序列将被用于执行SQL命令并返回一个类似的查询结果。如:

sqlite> .explain
sqlite> explain delete from tbl1 where two<20;
addr  opcode        p1     p2     p3          
----  ------------  -----  -----  -------------------------------------   
0     ListOpen      0      0                  
1     Open          0      1      tbl1        
2     Next          0      9                  
3     Field         0      1                  
4     Integer       20     0                  
5     Ge            0      2                  
6     Key           0      0                  
7     ListWrite     0      0                  
8     Goto          0      2                  
9     Noop          0      0                  
10    ListRewind    0      0                  
11    ListRead      0      14                 
12    Delete        0      0                  
13    Goto          0      11                 
14    ListClose     0      0

.timeout 命令设置 sqlite3 等待一个试图存储文件锁定请除直到错误返回的总时间。默认的超时值是0因此如果任何需要的数据库表或序列列被锁定时它将立即返回一个错误。

最后,我们提到 .exit 命令它交导致 sqlite3 退出。

原文地址:http://www.sqlite.org/sqlite.html

 

 

Dropbox使用技巧


Dropbox可以算是文件云同步领域的鼻祖了,即使不是最早出现的,也是第一个推动云同步向普通互联网用户普及的。Dropbox的成功并非偶然,其强大而且独一无二的功能和技术是支撑其用户忠诚度的基石。作为一个Dropbox的早期用户,使用至今,有些小经验小技巧,在这里与大家分享一下,希望能帮助大家把Dropbox的作用发挥到最大。

值得信赖的差量同步

『差量同步』是Dropbox相比其它同类云同步工具的核心技术优势。其效果可以简单理解为,文件的变更只需同步变化的部分,为用户节省流量和时间。差量同步所带来的好处其实还不仅仅是文件的变化同步更快,你还可以随心所欲的将文件或整个文件夹从Dropbox下的一个位置移至另一个位置、更名,甚至拿掉一段时间之后再放回来,它们都不必重新被上传到服务器。而其它云同步工具就未必能这么省心了。

Dropbox的其它一些特性,也是建立在这个机制之上的。就拿『文件历史』功能来说,别担心Dropbox会消耗数倍的空间来保存文件的历史版本,其实它只是保存了多个版本的差异,这样消耗的空间通常是非常少的。

得益于强大的差量同步,你甚至可以在Dropbox之上构建其它存储技术,并保持高效率的同步。比如在Dropbox中使用TrueCrypt,由于后者对加密数据的变更作用到卷文件上体现为局部的变化,所以可被Dropbox高效的同步,而完全不必担心一点变化而导致整个庞大的卷文件需要重新上传,这是其它一些云同步工具所无法比拟的。不过,在这类场景下需要非常小心『变更冲突』可能带来的不良后果(产生两份不和谐的副本),尽可能不要同时在多处对数据进行修改。

善用选择性同步(Selective Sync)

选择性同步是Dropbox早期呼声最高的期望特性,没有之一。不过这个特性足足让大家等了一年多,才最终被开发团队满足。背后故事的曲折就不赘述了,好在现在的这套实现方式应该还算是比较让人满意的。选择性同步的使用场景非常广泛,下面简单列举几个,大家也可以根据自己的需要自由发挥:

  • 避免在非主用电脑上同步包含备用资料、音乐、视频的大文件夹。
  • 避免在笔记本电脑上同步敏感私人数据。
  • 避免同步.svn文件夹,最好配合支持归一svn文件夹的新版SVN客户端。
  • 避免同步系统或应用程序频繁自动生成的文件,比如某些临时文件夹、Java开发工程的target/bin/gen文件夹。
  • 避免同步与本地电脑环境(如绝对路径)相关的数据,比如引用了绝对路径的Java工程中的.project文件、某些应用程序的配置文件。
  • ……

更简单实用的分享功能

Dropbox发展到今天,共享功能几经优化,已渐趋完善。现在你不仅可以在网络上开放的分享Dropbox中的某个文件或文件夹,而且还能有选择的在几个朋友或同事之间私密的共享一个文件夹,并保持它在多人之间的实时同步。多人共享功能需要其它人也有Dropbox账号,但不必一定使用客户端。现在我就经常利用多人共享功能和朋友共享一些技术书籍电子版、合作收集一些素材、交换最近出行的照片,甚至替代SCM工具直接作为简单开发工程的多人同步方式。因为简单,所以方便!

Git over Dropbox

这里特地把Git拿出来单独讲,是因为我在这个使用场景下摸索了一段时间才找到最佳的使用方式,与大家交流一下。通过Git分布式的管理代码是现在主流的SCM解决方案,但在多人之间协作时,往往还是绕不开一个中心服务器。Git Hub或者Bit Bucket是不错的选择,但繁琐的配置和网络的等待让这个方案变得有点难受。其实Git over Dropbox就是一个简单易行的入门级解决方案,不仅适合小团队,还可以用作个人的代码管理。

如果是个人使用,我倾向于直接将整个工程,连同.git子文件夹一并放在Dropbox上。表面上看起来是有些冗余,不过好处是,不仅git中的数据在云端自动备份,尚未commit的代码也保证了同步,方便有时即使有尚未写完的代码,也不必为了保持同步而commit进去污染仓库,回到家里还可以继续调试完善。

倘若需要多人协作,则建议将工程与git分离,只在Dropbox上创建bare repo (git init –bare),大家将各自Dropbox中同步的bare repo作为remote进行push/pull或clone。不过,这种方案其实是以让渡一致性换取异步同步的便捷性,所以不适合大量开发人员的频繁git操作,那样容易引入让人头疼的同步冲突。

正确使用『内网优先同步』

这是Dropbox从很早版本就支持的一个特性,但却鲜有人知晓和使用。这个按照简单原则所设计的产品功能,在现实情况下,往往并不如其所设想的那么奏效。『内网优先同步』要求同步的多点在同一个子网(广播域)下,所以如果电脑之间的连接跨越了路由器,则在物理上阻断了这个特性的正常工作。

另外,防火墙也必须允许Dropbox的端口侦听。需要注意的一点是,当Dropbox检测到防火墙阻断其端口侦听时,会自动关闭这个功能,所以在正确设置了防火墙之后,还应检查Dropbox的配置中是否激活了『Lan sync』。

值得一提的是,『内网优先同步』除了可在同一账号的多台电脑间快速同步文件外,还支持多人的共享文件夹同步。所以小团队在局域网内使用这个功能是一个非常简单而高效的文件共享解决方案。

奖励空间的最大化

Dropbox依仗其技术优势和行业地位,在空间的给予上明显有些吝啬了。普通注册用户只有2G空间,通过邀请注册勉强能得到2.5G的初始容量,不过只是杯水车薪了。其实,Dropbox提供的一些空间奖励计划能帮你快速增加不小的空间,而且操作难度并不大,比如邀请一个好友可以得到500G空间(本来还想写如何认证学生账号获得双倍奖励,可惜最近也给扯平了)。

其实,有一个隐藏颇深的奖励任务入口,可能大部分Dropbox用户都未必发现并完成了其中的任务。完成诸如链接Twitter/Facebook账号、follow @Dropbox、发表感言等小任务,就可以得到640M的额外空间,虽然不算多,倒也不拿白不拿。

--------------------------------------------------------

我分享的音频文件:

https://www.dropbox.com/scl/fi/cm2li5bj51d65wnifnjs7/colorful-night.mp3?rlkey=zg8oosiihvu2lz6lb1yn2ecv3&e=2&st=9syf2ajm&dl=0

中美关系中存在很多冲突

 

中美关系中存在很多冲突,主要是两方面的冲突。一方面是利益冲突。两国在利益方面的争夺,包括地缘政治、资源方面的争夺。另一方面是价值观念方面的冲突。中美关系往往就围绕着这两个冲突。例如台湾问题就是一个利益问题。美国在国际上经常打着价值观的旗号来争夺利益
但是有时美国也会面临自己内部的利益诉求和价值观诉求发生冲突的时候。例如美国在中东所支持的人,如穆巴拉克,都是一些独裁者,是和美国的价值观所违背的;一旦这些国家出现了问题,美国这种利益和价值观的冲突就暴露无疑了。就我观察,这几次中东问题美国最后还是选择了利益服从价值观的做法来解决问题,不会明目张胆地支持这些独裁者。
利益冲突方面,美国企业家、经济学家、领导人都基本相信,合作共赢的经济利益比互相冲突时大得多。经济方面的利益还是以合作为主的。因此主要的冲突还是来自政治和核心价值观的不同。这种冲突应该怎么解决?有些做法可能可以简单地解决国际层面的冲突,但是这些解决办法国内的百姓可能很难接受认可。
从这个角度来看,中美冲突的很多问题最终都归结到民主政体的建立、中国的政治体制改革
我们现在面临两个很大的挑战,其一是民粹主义(包括社会主义的平均主义),其二是民族主义。国家经过几十年的发展,领导者权威的正当性已经不是靠打江山了,也很难继续靠经济改革来支持,寻求正当性的唯一途径就是推动政治体制改革。但是如果缺乏勇气,没有足够的决断力和权威来推动政治改革,求助于民粹主义和民族主义,这是非常危险的。在这种局面下,大的改革无法进行,倒退就很有可能发生。可以想象,当下层领导胡作非为的时候上层领导却没有足够的权威性能够表态时,倒行逆施就可能盛行。民族主义和民粹主义的问题相结合,就使得在中国,有理性的行为很难进行。
我们现在在处理问题的时候往往不是按照市场的逻辑,不是以法治的精神,而是先通过舆论等手段对事情进行道德定性,然后就不考虑处理方法的合法性了。总之,政治体制改革将是影响中国未来发展的关键因素。
总而言之,未来十年,中国政治体制改变或者不变,都将对中国未来的发展起到重要的影响。就美国而言,美国的领导地位若干年内难以挑战。未来中国在经济上超过美国是非常有可能的,但是这不意味着中国就能挑战美国、领导世界。美国的经济规模1890年就超过英国,但美国的领导地位只是在二战后才得到确立
在经济问题上,美国领导人太政治化,导致了很多事情难以处理。例如人民币的升值问题,对美国究竟会有什么好处,现在尚且不明朗。但是其可预期的对美国的影响至少有二:
第一,美国消费者会支付更高的价格,美国将会面临更快的物价上涨;
第二,将对国际大公司的利润结构产生巨大影响,尤其是跨国公司、品牌公司,因为它们所在的市场是一个寡头市场,利润本身比较厚足,人民币的升值将挤出这些跨国公司的一部分利润。这对整个企业的结构都带来影响。
国际关系方面,中国这个国家在世界上没有公开而坚定的盟友,相比在国际社会上有很多公开盟友的美国,中国是很难挑战它的领导地位的
我相信影响历史的是理念和思想。因此我的态度是既悲观又乐观的。悲观的是,理念和思想的传播是非常缓慢的。乐观的是,思想仍然在潜移默化地改变。现在年轻人的观念已经与老一代很不一样了。
中国和美国的联系原来只是政府与政府之间,而现在有了很多民间的势力,比如企业、学者、媒体等等。美国对这种力量也非常重视。所有这些民间的力量都在影响世界对中国的看法,影响中美关系。未来民众的外交力量会成为国际交流的第二渠道。

恶魔在政治,根源是制度


社会溃败就其表现而言固然不直接和政治上的权力争夺相关,然而,其深层根源却一定和政治制度相关。当然,互害社会的形成背后有多种原因,并不是只有政治上的因素。但是,作为政治的研究者,我从前述社会溃败中所看到的首先却是政治的原因。事实上,在中国这样一个不仅政治专制而且政治极权的国家,政治凌驾于一切之上,其实也正是一切社会现象的根源

中国互联网上有一篇报道邯郸初中生杀人事件的文章开头说:"地狱空荡荡,恶魔在人间"。我看到时的第一反应是:地狱满当当,恶魔到人间。接下来,作为政治学者的我,再有一个反应,那就是:专制即地狱,恶魔在政治。西方有句老话,说人一半是天使,一半是魔鬼。那么,人们什么时候是天使而什么时候是魔鬼呢?制度分析的逻辑是:好制度使人们形成天使的心肠,展现天使的笑容,坏制度使人们积蓄魔鬼的凶恶,发挥魔鬼的狰狞。对掌握巨大权力的人来说尚且如此,普通人受制度安排的影响之大就更不用说了。

试想,在一个权力至上、任性、暴虐的社会,在大学生们以考公务员为最好前途的那样一个国家,官员们充斥着贪婪、霸道、败德、腐化,这个社会怎能不充满戾气?这怎能不对年轻人产生强烈的"示范"作用?插说一个也是前不久发生的小例子:在内蒙古开鲁县,农民要春耕了,当地官员却不允许,非要强制征收超过100万元人民币的"水浇地钱"才行。与"李刚是我爸"一样,官员这么说,"别提什么法律,我不懂法!" 这不,铁链铐住八孩母亲的那人也不懂法,唐山烧烤店打人的那些人也不懂法,用铁锹砸死同学的那三个初中生更不懂法——他们都是一个模子的产品啊!

不要说他们不懂法,其实他们懂得这个制度下没有法治,因此可以无视和践踏法律,也只有无视和践踏法律才能展示自己的特权、能力和威风。邓小平可以无视宪法而用坦克、机枪在首都北京当街杀人,张小平就可以在烧烤店随意打人,李小平也可以用铁锹把同学砸死

是的,人性中的恶魔就是这样释放出来的:坏事做绝者有权有势,荣华富贵;整个制度就是要你做坏事,越坏越保你有出息。这样的政治制度安排下,怎么可能形成人与人之间充满善意、诚信、温情与互助的社会呢?是的,专制政治不仅剥夺人们的基本权利,它还在毁掉人们的天良人性

Saturday 11 May 2024

PHP-Dynamic-Mirror

 Create an exact path-to-path dynamic mirror (proxy) for a pre-defined site. 

from https://github.com/oasisfeng/PHP-Dynamic-Mirror

----------------------------------------------------------------------

php-dynamic-mirror

Dynamic Site Mirror written in PHP

Create an exact path-to-path dynamic mirror (proxy) for a pre-defined site.

Restrictions

  • NOT work for absolute URL (with full site domain). Since this is an exact mirror, content of HTTP response will be transfered without any modification. That means, if the original site uses absolute URL instead relative path, the page may not be rendered correctly, or visitor will be redirected to the original site.

  • NOT work for web page with <BASE> HTML tag. The reason is the same as above.

Instructions

Unzip the package to your PHP hosting, either in domain root or under sub-path (for patial mirror). Modify the index.php (see comments)

Example working target sites

  • yourapp.appspot.com (Only if the app is following the above restrictions)
  • bit.ly & j.mp
  • twitter.com

IMPORTANT WARNING

Full mirroring any restricted sites may bring PERMANENT DISASTER to your site, to your subnet, to your hosting service, or event to all the sites on the same hosting. So, please use it as your private service and DO NOT DISTRIBUTE YOUR MIRROR。

from  https://code.google.com/archive/p/php-dynamic-mirror/

 

 

Google的终极愿景

 先来看一下Google的愿景及其诞生至今的战略布局。Google的终极愿景很明确,也几乎没有改变过,那就是:“整合全球信息,使人人皆可访问并从中受益。” 这句话讲的挺有技巧,整合全球信息,并非简单的供你们搜索和访问,“从中受益”,那前提是Google需要充分从这些信息中挖掘出价值,而后才能造福大众。“掌握和控制信息”是Google所有从属战略的核心。

  第一代搜索引擎所代表的是“整合互联网静态信息”的愿景,Google借助其强大的搜索引擎和海量存储成功的树立了搜索领域的霸主地位。在这个年代,整合互联网信息的方式相对比较直接了当,那就是“蜘蛛+索引+搜索”。大部分静态内容都是可以方便的直接访问到的,因此Google只需要构建一个巨型索引就可以达到整合信息的战略目的了。

  伴随着Web 2.0的迅速发展,互联网的主要构成已经由静态信息向用户贡献内容倾斜。越来越多的网站主要依靠用户发表或上传的内容主导,Google也因时而动的推出了一系列针对性的垂直搜索,例如Blog Search、Groups Search、Photo (Images) Search、Code Search。但是,Web 2.0的一个显著特征是社会化,这就造成为数不少的用户贡献信息并不面对搜索引擎的蜘蛛开放,尤其是各大SNS社区,几乎都主动屏蔽了搜索引擎。出于用户隐私的保护,其它信息形式,如照片、代码等往往也部分性的不开放给搜索引擎访问。另一方面,Web 2.0提供了更为结构化的信息,这些信息依靠蜘蛛的抓取很难保留其结构化的原貌。不断涌现的新情况让Google觉得相当的被动,于是它启动了一轮庞大的

“信息控制战”,通过免费向用户提供有竞争力的各种信息的存储服务,达到将全球信息掌控在自己手中的目的。于是Gmail、Blogger、Picasa Web、Google Code便应运而生。但凡有其它初创型公司挡在了Google的战略大道上,便不客气的一口吞掉,比如YouTube、Writely。在如此强势的战略夹击下,Google在Web 2.0的时代勉强保持住了它在信息整合方面的优势地位,但面对Facebook、Twitter等新兴信息承载形式的崛起,却显得颇有些步履蹒跚、力不从心了

  在后Web 2.0时代,互联网对于大众的意义,已经逐渐从一个单纯的信息获取通道,转变为一个全能的服务平台,这在最近刚刚被提出的Gov 2.0中体现的尤为明显。交互应用开始取代信息媒体,成为互联网的主导力量,并剧烈的改变着互联网的面貌。尽管Google一直致力于推动数据开放化和API标准化,但互联网毕竟不是一家说了算,长尾的延伸,让Google执行其战略愿景的难度越来越大。搜索引擎的历史局限性注定其难以在新的互联网格局下继续担当整合全球信息的重任。首先,搜索只能控制用户在互联网行为的最初阶段,其快速的逸出性使搜索引擎很难像SNS那样掌握更丰富的用户信息;其次,交互应用取代单纯的信息呈现后,已经不再可能简单的通过搜索引擎体现其对用户的价值;最后,应用之间的Mashup使得互联网上信息的拓扑层次愈加复杂,搜索引擎扁平的索引方式已经很难有效整合这些信息。

https://about.google/intl/zh-CN/

walkaround

 

Getting and running the code

Supported environments: * Linux with Java, Ant, Subversion, Zip, GCC, and Git installed. On Ubuntu, you can install these packages by running sudo apt-get install openjdk-6-jdk ant subversion zip build-essential git-core . * Mac OS X with MacPorts and a few extra packages that you can install by running sudo port install md5sha1sum apache-ant subversion .

Steps to run walkaround: git clone https://code.google.com/p/walkaround/ cd walkaround ./get-third-party-deps cp runant.sample runant chmod +x runant ./runant run

(If ./get-third-party-deps warns you that the certificate for https://svn.apache.org:443 is not trusted, check that the fingerprint is bc:5f:40:92:fd:6a:49:aa:f8:b8:35:0d:ed:27:5e:a6:64:c1:7a:1b (from https://www.apache.org/dev/version-control.html) and enter p to accept permanently.)

The above steps allow you to test walkaround locally by going to http://localhost:8080/ in your browser. You'll see a "New wave" button after going through App Engine's fake login screen. Running walkaround locally is only for testing; for proper persistence, user authentication and access control, and scalability, you have to deploy it to App Engine (see below).


Optionally, if you want to allow walkaround to show participant avatars and import waves from wave.google.com, you should get an OAuth application id:

  • Go to https://code.google.com/apis/console/. All of the settings you are about to make are easy to change later, so don't worry about them too much.
  • Create a new project.
  • Click on "API Access" on the left, then "Create an OAuth2.0 client id".
  • Enter a product name (like MyWalkaround). You can leave the logo empty. Click "Next".
  • Application type: Web application. Next to "Your site or hostname", click on "more options".
  • Authorized redirect URIs: Replace the text in here with http://localhost:8080/authenticate. If you have an application id on App Engine, add a second line https://<your-app-id>.appspot.com/authenticate.
  • Authorized JavaScript origins: Delete the text in here.
  • Click "Create client ID". (I've seen the page say "An unexpected error has occurred. We're looking into it" even though the client ID was created just fine; if you get this message, reload the page a few times to check if the client ID appears.)
  • Copy and paste the client ID and client secret into your runant script.


To deploy walkaround to App Engine:

  • Create an application ID at https://appengine.google.com. Use the default High Replication storage, not Master/Slave.
  • Edit your runant script to put your application id in the app-id parameter.
  • ./deploy Once you've entered your credentials, they will be stored for a day, and you can use ./deploy to re-build and re-deploy.


Optionally, for better responsiveness if you have many users:

  • Enable backends. This is easy but currently not documented; ask on the mailing list how to do this.


To update and re-deploy walkaround:

git pull
./runant war
third_party/appengine-sdk/sdk/bin/appcfg.sh update_indexes build/war

After this, go to the Admin Console and click "Datastore Indexes". Wait until all indexes show status "Serving". Finally, run:

third_party/appengine-sdk/sdk/bin/appcfg.sh update build/war


If ./runant gives you compilation errors, try

rm -rf third_party third_party_src
./get-third-party-deps

and repeat.

from https://code.google.com/archive/p/walkaround/wikis/RunningTheCode.wiki

Networking essentials


I recently bought a Linksys WRT-54GL router and a DSL router/modem so I could have a good network setup for my home computers/server. I must admit that configuring all that is rather hard if you don't know much about networking, so I decided to write this "Networking essentials" guide so people could have an idea what all these terms mean.

IP Address

First off, a bit about IP addresses. In order for computers to talk to each other, they must have a way to address each other, so each one needs to have a unique name (or number). Since, however, numbers are more practical for computers, that's what we use. A computer's number is its IP address, and it's unique to it within a network (so yes, noone on the entire internet in the whole world has the same IP address as you.

An IP address consists of four numbers (they're actually four digits, but don't pay much attention to this) in the range 0-254, separated by periods. So, 119.12.23.64 is a valid IP address (and someone is probably using it right now).

DNS server

As I already said, the internet works with IP addresses, and that's how your computer knows where to get what you want. IP addresses, however, are rather tedious for people to remember (it's much easier to remember poromenos.org than 63.247.68.107), so we need a system to translate human-readable words into IP addresses. This is what the DNS does. When you type a hostname (such as www.poromenos.org) in a program, your computer sends a DNS request to its DNS server to ask it what IP address that hostname corresponds to. The DNS server checks its list for the address. If it doesn't know it, it forwards the request to another DNS server. This can take a few hops if noone knows the hostname, until the request reaches the root servers, which hold all the hostnames in the world. If the address isn't found there either, the lookup fails.

DHCP Server

The DHCP server's job is to send the network configuration to any client that requests it. So, instead of setting each computer's IP address, DNS server, gateway, etc manually, your computer sends a DHCP request and all this info is returned to it by the server. For IP addresses, the DHCP server has a list of addresses it has leased to computers (they are leased because they expire after a few days, usually, and need to be renewed), to make sure it doesn't assign the same address to two computers.

Gateway

The gateway is a computer (or device) that connects a network to another network, for example your LAN to the internet. Computers send their requests to the gateway and the gateway forwards them to the internet and relays the responses back.

Ports

Each computer has various ports (65536, to be exact) on which it can receive data. This is purely for convenience, since this way computers can offer various services on specific ports. For example, if you connect to some computer's port 80, you'll find its web server (if it has one). Similarly, port 110 is POP3 (for getting your e-mails), 25 is SMTP (for sending your e-mails), etc.

from http://web.archive.org/web/20070712174227/http://www.poromenos.org/tutorials/networking

How to encode your movies

(如何压缩你的电影文件)

If you're like me, you start too many prologues with the phrase "if you're like me". Apart from that, you probably own many movies but hate getting up and reaching for the DVDs when you want to watch one. Well, you're in luck, because I'm about to teach you how to copy them to your computer and compress them using XviD so they take up less space.

For this howto you will need two programs, DVD Decrypter, which you can get from Doom9, and Auto Gordian Knot. A good piece of software I always recommend is the Combined Community Codec Pack, it will allow you to play most media formats in existence today (or, the VLC player is equally good). Install all the software and move on to the next step.

So, to begin, you should copy the movie to your hard disk using DVD Decrypter, as illustrated below (you need Macromedia Flash to see the animations).

After you have copied the movie, you have to compress it using AutoGK.

from  http://web.archive.org/web/20070819165049/http://www.poromenos.org/tutorials/movieencoding