今天看完《基因传》

著作,喜欢,期待有时间看第二遍。

书中DNA脱氧核糖核酸的双螺旋结构的发现,阅读后特别感动,我们需要科学的力量,科技创新是当前最大的事情。

转载一个简介

关于作者

悉达多·穆克吉,医生、科学家、畅销书作家,哥伦比亚大学医学中心癌症医师和研究员、哥伦比亚大学医学院副教授。他以《众病之王——癌症传》获得了普利策奖。

关于本书

继《癌症传》之后,穆克吉忍不住追问,如果说癌症是生物体畸形变异的话,那么生命正常的变异与传承又是什么?于是就有了《基因传》这样一本同样详实有趣又充满人文色彩的大部头,也可以被视作《癌症传》的前传。2016年年底,比尔·盖茨还把这本《基因传》列为年度最爱的五本书之一。

核心内容

本书的核心内容是:基因研究是当下的显学,基于基因研究的生命科学研究也是未来科技发展的最重要的领域之一。人们希望基因研究能够找到治疗绝症的良方和健康长寿的密码,也有人希望基因剪辑能够筛除致病基因,添加优秀基因,培育出新新人类。基因与环境的相互作用,决定了我们的体征,也影响了我们的性格和脾性。未来,在基因诊断和基因剪辑领域会有更快更大的突破。只是,如果人类基因可能像转基因植物那样可以被随意删减搭配,穆克吉提醒我们,生命是复杂多元的,一定不会那么容易被精确的剪裁所规整。     

点击查看大图,保存到手机,也可以分享到朋友圈

前言

你好,欢迎每天听本书。今天为你解读的是《The Gene—An Intimate History》,中文版2017年刚刚出版,叫做《基因传》。我给你解读的是这本书的英文原版,大约20万字,我会用大约24分钟的时间,为你讲述书中的精髓:基因研究将会怎样改变我们的世界?

几年前,美国影星安吉丽娜·朱莉为了降低患乳腺癌的风险,做了切除双乳乳腺的手术。这对于一名女明星来说,是个重大决定。朱莉解释说,自己的母亲和癌症斗争了接近10年,最终仍然在56岁就去世了。她不希望自己的孩子也经历同样失去母亲的痛苦。朱莉这么做,背后也是基因科学快速发展的结果。科学家成功筛选出了乳腺癌基因,携带这一遗传基因的女性在一生中有80%的几率患乳腺癌。朱莉就通过基因筛查,发现了乳腺癌基因,摘除乳腺之后,患乳腺癌的几率就降到了5%。

朱莉的案例告诉我们,像乳腺癌这样由遗传基因变异导致的疾病,基因科学的发展能够让老百姓更好地预防。按照这一逻辑推理,如果每个人都能方便地为自己的基因排序,如果科学家能筛查出所有可能导致重大疾病的基因变异,那我们每个人都可以了解自己可能会得什么遗传疾病,每个人都可以更长寿更健康。

是这样吗?是,也不是。大多数疾病并不是像乳腺癌那样有一个明确的致病基因,许多疾病是很多基因变异和环境影响共同的结果。基因的排序和筛查并不是马上就能解开人类的生命奥秘,基因研究只是掀开了混沌复杂基因世界的一角。

这本书的作者是悉达多·穆克吉,很多人读过他的另一本书《众病之王——癌症传》,每天听本书栏目也解读过,那本介绍癌症起源和治疗预防癌症历史的巨作让他获得了普利策奖。写完《癌症传》之后,穆克吉忍不住追问,如果说癌症是生物体畸形变异的话,那么生命正常的变异与传承又是什么?于是就有了《基因传》这样一本同样详实有趣又充满人文色彩的大部头,也可以被视作《癌症传》的前传。2016年年底,比尔·盖茨还把这本《基因传》列为年度最爱的五本书之一。

基因研究是当下的显学,基于基因研究的生命科学研究也是未来科技发展的最重要的领域之一。人们希望基因研究能够找到治疗绝症的良方和健康长寿的密码。也有人希望基因剪辑能够筛除致病基因,添加优秀基因,培育出新新人类。但是除了科学进步的一面之外,研究基因也有很强的人文关怀。每个自我的塑造,到底多少来自遗传,多少来自努力,多少来自偶然?《基因传》恰恰兼顾了科学与人文的两面,站在微观基因的视角,对命运与选择做了全新的诠释。

我会带着三个问题,来为你解读这本书的重点内容:第一,到底该怎么去认识基因?第二,基因研究会挑战进化论吗?第三,未来基因研究的重点是什么?第一部分

什么是基因?专业的解释是,基因是控制生物性状的基本遗传单位。通俗一点来说,一个生命体的生、长、衰、病、老、死都与基因存储的信息有关。既然基因是生物信息存储的单位,又影响到了生命体的生物信息,普通人会认为,人类基因存储了构建人类身体信息的蓝图,可以决定我们全部的身体、生理与心理的特征。换句话说,掌握了基因就可以克隆出一模一样的生物体。如果你能够解构我所有的基因,就可以完全按照基因复制出一个跟我一模一样的人。

《基因传》这本书告诉我们,这样的认知太简单、太黑白分明了,基因的世界要复杂并混乱得多。实际上,大多数基因储存的信息更像是菜谱。蓝图和菜谱的最大区别是,根据蓝图可以制造出精确的最终成品,能复制出成千上万个一模一样的副本。菜谱却只是规定了做菜每一步的流程,最终做出的菜色却是因人而异,没有谁能做出1000道一样的宫保鸡丁。

用菜谱来理解基因,可以更好地理解基因到底怎么影响我们每个人的身心发展。就像菜谱所列出的流程有先后次序,先做的流程对一道菜的影响常常大于后续的流程,基因发生作用也有上下区别。比如说,要烤面包,第一道流程就是和面,规定要加多少面粉,加多少水。水和面粉的比例合适,就能和出适合烤面包的面,如果太多的水太少的面,那只能变成面糊糊了。同样,前序的基因常常对最终的产品起到决定性的作用——到底最终产品是面包,还是面糊糊。

举个例子,影响一个人性别取向的基因就是一道菜谱,每个人在胚胎发育阶段都按照这个菜谱形成自己的性别特征。在这道菜谱的第一条,是一个叫 SRY 的基因。这是最开始的基因,也是决定整个流程走向最关键的基因,因此被称为主调节基因。 SRY 基因的开启或者关闭,决定了一个人的生理体征是男还是女。生物学家就做了一项实验,在雌性小白鼠胚胎内植入额外的 SRY 基因并激活,胚胎就会发育出完全雄性的体征,包括阴茎和睾丸,出生后的小白鼠也只会对雌性小白鼠感兴趣。

但是, SRY 只包含了菜谱的第一道流程的指令,在后续的流程中,这个基因还会影响其他几十个基因,这些基因又会整合来自内部和环境的影响,比如荷尔蒙的因素、社会和文化的影响等等,最终塑造出个体不同的性别取向。换句话说,决定性别菜谱的流程中, SRY 基因的影响是决定性的,决定了个体的生理体征是男还是女。但是性别取向却并不仅仅由 SRY 基因决定,在菜谱的后续流程中,其他不同基因的变异会导致程度和倾向的差异。

前边说过的女影星朱莉筛查出的癌症基因也是一个位于菜谱第一道流程的基因,它的变异基本决定了一名女性是否会患上乳腺癌,但是携带这一基因的女性会在什么时候患上哪一类的乳腺癌,却不由这个基因所决定,而是由菜谱后续流程中的其他基因和外部环境来共同影响。此外,并不是所有疾病都像乳腺癌一样,可以确定主调节基因是哪一个。比如精神分裂症,就可以追溯到几十个相关的基因的变异,而且,有的基因变异没被激活,这就会导致各种严重程度不同的精神病状态。

基因不仅会决定人的生理体征,也会导致人患遗传疾病。除此之外,基因会不会影响人的心理、性格和特长?换句话说,每个人的身心特征是不是也都由背后的基因来决定?对于这一问题,在基因研究历史上一直存在两个极端的观点。一边是外部环境决定论,认为婴孩就像是随机内存一样,出生时脑子白纸一张,可以下载任何一种操作系统,未来的心理和性格塑造,文化起了决定因素。另一边则是基因决定论,认为基因决定了人的性格、欲求、脾性和行为。

生物学家和人类学家为此做了不少的实验。结果证明基因对人类的性格和脾性的影响要比一般人想象的大得多。最著名的一项研究是,对生活环境不同的同卵双胞胎的研究。同卵双胞胎是由同一个受精卵分裂成两个不同的胚胎长大而成。有些双胞胎在出生后不久就被分开,成长在完全不同的环境中。研究十几年后他们之间的差异,就可以从侧面观察基因对个体的影响到底有多大。研究者发现,这些被分开的双胞胎发展出许多惊人的相似之处,比如他们有相似的性格、爱好,也会患上类似的病症。一些研究甚至发现,分开成长的双胞胎有类似的音乐爱好、相同的理财偏好、同样的利他行为。这一类的研究证明,基因的确可以不仅决定外表,还影响性格。

但是是不是由此就能推导出“基因决定论”了呢?当然不是。换一个角度来看双胞胎研究:为什么两个基因完全相同的同卵双胞胎,即使在同一个环境中共同成长,长大之后也会变成个性并不相同的两个个体,而不是精确复制的镜像?一个简单的回答是:因为受到外部环境的影响。即使共同生长,双胞胎所经历的外部环境总会有细微差别,他们各自也会有很多属于自己的偶然经历。甚至双胞胎中一人得了某种遗传疾病,比如说糖尿病,另一人也并不是百分百会得病,只是患糖尿病的几率比常人要大得多。这仍然是因为,导致发病的基因并不是只有一个,众多基因变异是被激活还是被抑制,也与外部环境的许多偶然因素有关。

我们可以这么来想象双胞胎,他们就是同样的一组基因在时空机器中发展出的两种不同的生命体。基因只决定了他们身体和性格的一部分,但个体到底怎么演化,与外部环境偶然特殊的事件都有着千丝万缕的联系,比如小时候的一场大病、年轻时候的一场事故、坠入爱河的甜蜜柔情,都是影响个体的变量。

作者把基因的作用做了一个非常形象的比喻,说“基因给人类写出了剧本,却留下了不按剧本演戏的空间”。这句话也深刻地描绘了生命的意义。生命的一部分是遗传,但是也会留下偶遇的空间,留下应对外部环境变化而改变的空间。没有变异也就不会有进化,更不会有我们。

小结一下第一个观点,基因包含的生物信息并不是决定生物体发展的精确蓝图,更像是一组菜谱,菜谱规定了生产菜品的流程,却没有办法保证所有的成品都一模一样。基因不仅决定了我们的体征,也会影响我们的性格和脾性。不过,我们也不能忽视基因与基因之间的相互作用,以及基因应对环境变化的反应。作者把基因与环境相互的作用称为“命运”,把人因此做出的反应称为“选择”。虽然命运主要由遗传决定,却也会受环境的影响,不同人的不同选择,推动了世界变得多元。第二部分

我们对进化传统的认知来自于达尔文,你一定熟悉达尔文进化论的两个要点:物竞天择,适者生存。举个例子。长颈鹿之所以从某种食草动物中演化出来,变得拥有长长的脖子,是因为很久以前,某种食草动物有了长颈的基因变异,在一次旱灾过后,它存活了下来,新变异的基因也就因此被选择,遗传到下一代,这种携带变异基因的食草动物经过几万年甚至几十万年,最终演化成了长颈鹿。但长颈鹿的演变会不会有另一种可能?比如某一天,一只羚羊伸长了脖子努力去吃高树枝上的嫩叶子,渐渐的这头羚羊习惯了伸长脖子,而它伸长脖子的行为也被记录到它的基因上,并传给了下一代,下一代的脖子因此变得更长。几代之后,羚羊会不会变成长颈鹿?外部环境会不会给基因留下这样的记忆?如果有,这种记忆会不会遗传呢?

《基因私密历史》中就讲述了这样一个人类社会的真实故事。故事发生在1944年寒冬的荷兰。当时德国人限制了对荷兰北部的食品和煤的供给,阿姆斯特丹等地几百万居民一下子面临饥寒交迫的悲惨境地,每个人每天只能分到三个土豆,几万人饿死,幸存者也大都瘦得脱了形。残酷的人造饥荒制造了一场“天然实验”,上百万人面对这场突如其来的营养短缺,身心备受打击。研究者发现,经历过寒冬饥荒的孩子除了发育迟缓之外,还很容易患上慢性病,比如心脏病、骨质疏松和糖尿病。

到了上世纪80年代,研究者对饥荒时期出生的婴儿进行回访时发现,那些在饥荒时受孕的胎儿,长大了也会得和母亲类似的慢性病,比如肥胖症和糖尿病。这也很能理解,因为胎儿在母体面临营养不良时一定会改变自己的新陈代谢,试图争取更多的脂肪,这可能导致成人之后的肥胖和代谢紊乱。不过,最令人吃惊的是,到了90年代,当研究者对这些人的子女,也就是饥荒亲历者的第三代,进行跟踪调查时发现,他们仍然有更大几率得类似的慢性病。这一案例显示,外部环境对亲历饥荒者基因所产生的影响,会被遗传给下一代,乃至再下一代。

荷兰寒冬饥荒给亲历者带来的基因转变显示的确有这样一种可能,演变不再通过长时间的基因变异和自然选择,而是通过外部环境巨变带来的影响,在基因上留下记忆,并且把这种记忆带来的改变遗传给了后代,跨度至少两代人。这会不会是生物体适应环境并“进化”的另一条“捷径”?虽然这样所谓的“进化”带来的并不是生理的进步,而是对饥荒过度反应的慢性疾病。

科学家们后续的干细胞研究也从侧面印证了“基因记忆”的存在。干细胞是具有自我修复能力的多潜能细胞,在胚胎中最常见。受精卵通过细胞分裂形成胚胎,胚胎的细胞可以长成各种不同的器官。不同器官的细胞虽然拥有同样的 DNA ,却性状不同。胚胎中的干细胞可以“发育”成各种不同的细胞,但是相反,皮肤细胞不会有一天醒来突然变成了神经细胞,更不可能重新变成干细胞。

这种演变是不可逆的吗?一位研究者试图将皮肤细胞转变成可塑性很强的干细胞,却发现,年轻小白鼠的皮肤细胞比年老小白鼠的皮肤细胞更容易转化成干细胞。他们就问了:为什么年老小白鼠的细胞,就很难“返老回童”?他们认为,答案就在基因有记忆,各种应对外部环境变化的反应,比如说身体代谢应对饥荒的变化,就被记录在基因之上,无法磨灭。这些带着斑驳历史的基因比较难重新焕发青春。

怎么理解这种基因记忆?可以用一个非常形象的比喻来形容:每个从胚胎发育而成的细胞都拥有同样的基因,就好像来自同样的一本大书。但是不同的细胞在生命的过程中因为环境的变化,会删掉大书里的一些句子,又加上几个词,在一些句子下面画线,把另外一些点加粗。这样一来,不同的细胞在这本大书的基础上,都创造出了自己独特的解读。

小结一下这本书的第二个观点:进化论的核心是基因的变异和生物体通过竞争淘汰胜出。但是随着我们对基因的深入了解,会发现基因在环境发生巨变后做出的应对,会被牢牢刻印在基因上,形成基因记忆,而如果这种基因记忆可以遗传的话,就可能成为某种进化的捷径。第三部分

最后来看看未来基因研究的重点是什么。基因研究是当下科技发展的显学之一,未来人类基因研究的两大重点分别是基因诊断和基因剪辑。

先解释一下这两个名词。基因诊断概括来说就是,通过对一个人的基因排序和筛查,可以决定他患不同疾病的几率,同时也可以预测他的生理、性格、偏好、特长等特征。基因剪辑,就是对有缺陷或者致病变异的基因进行修补和替换,防止未来疾病的发生,或者改变一个人的性格和偏好甚至特长。

基因诊断和基因剪辑在预防和治疗疾病领域的潜力非常大。目前已经筛查出一万多种由单个基因变异导致的疾病。现在科学家已经完成了人类基因组的排序,下一步针对个人的基因排序和基因筛查的成本也会变得越来越低。不久的将来,每个人都可能了解自己携带什么样的致病基因,患不同遗传性疾病的几率有多少。

基因诊断在“优生”领域已经被广为使用,比如对唐氏综合征的筛查,未来可以筛查的致病基因会更多。筛查之后可以有两种选择,产妇可以选择对携带问题变异基因的胎儿人工流产,另一种选择适用于人工授精。人工授精卵通常有许多个,在对受精卵分别进行基因筛查后,可以只把那些没有变异基因的受精卵植入母体。不过两种做法都面临一定的道德困境,而且,当筛查的基因数量越来越多,而一些基因致病的影响又越来越弱的时候,这种选择面临的道德困境就会越来越高。比如,如果筛查出胚胎有5%的几率患某种癌症,你会选择流产吗?

成人就没有那么多选择了。你知道了基因筛查的结果,找到了有危险的变异基因,现在可以做的仍然很少。作者甚至造出了这样一个词来形容我们可能面对的情况:Presurvivor,翻译过来就是“还没有患病却已经在寻求幸存的人”。还是举朱莉的例子。当她知道自己会有非常大的可能得乳腺癌的时候,她选择乳腺切除,就是一种 Presurvivor 的选择。其他人可能选择定期乳腺检查,一旦发现早期病灶之后再去手术。所有这些做法都不能彻底保证不发病,但的确能减少担心得癌症带来的恐惧。

通过修改体内有缺陷的基因,来治愈某种疾病,理论上有可行手段。生物学家就曾经利用病毒作为载体,带着修改的基因打入人体的主要器官,希望能够修正变异基因的缺陷,达到诊疗的目的。但是这样的实验在20世纪末经历了惨痛的失败,参与实验的少年最后死亡,之后实验被叫停。

暂时的挫败并没有停止基因领域的发展。过去五年,基因剪辑正成为生物化学领域内最显赫的一点。其中有一项技术,第一次让生物学家可以对基因携带的 DNA 片段进行有针对性的剪裁,虽然实践中还远远达不到完美,但是相比之前的基因修改技术可以说是一次飞跃。甚至已经有生物学家预言,基因剪辑将和干细胞技术、细胞核移植一起,可以对人类基因组进行全面的修整。这也意味着,不久的将来“转基因人”将成为可能。

很多人一听到“转基因”,就会本能的担心,“转基因人”也引起了多方面的担忧。最起码这么几个方面值得我们深入思考。

第一,我们对基因对生物体的影响、基因与基因之间的作用、基因与外部环境的作用的研究,仍然在初步阶段。基因的结构很复杂,基因和基因之间相互联系的架构,人们还没有完全了解清楚。因为不同基因在“菜谱”流程中的位置不同,有的基因一旦产生变化,会带来一系列其他基因的变化。如果用通俗的“蝴蝶效应”来理解,那么对特定有缺陷基因的剪辑,可能会对身体产生想不到的影响。

第二,很难去界定什么是好的基因,什么是有缺陷的基因。这不仅因为基因依赖相互作用产生影响,更因为同一个基因变异在不同的环境中可能会有不同的作用。比如那些导致人精神分裂的基因,很多其实也是潜在激发人的创造力的基因。你看历史上的名人,很多人都有精神问题:比如大画家梵·高、才女作家沃尔夫,以及电影《美丽心灵》中描写的大数学家纳什。他们在一个凡人的世界里可能被认为是疯子,但是在创造者的世界里被看成是天才。同样的类比也可以用在自闭症的人群中。自闭症的孩子在凡人的世界里,是无法与人打交道的,但是有些得自闭症的孩子会在画画、音乐等领域展示出超出一般人的智力。这或许就是大自然偶然和变异的结果。

第三,利用基因剪辑技术制造“完美的”婴儿,会带来严重的道德、伦理与社会问题。基因剪辑不仅可以修补有缺陷的基因,也可以增加人体没有的基因。基因不仅能影响我们的身体,也可能会影响我们的性格和脾性。假设我们能分离出“长寿”的基因和“聪明”的基因,我们能不能允许在人工授精的胚胎里加上这样的基因?如果这种基因技术很昂贵,只能超级富豪才能负担得起,允许这么做是不是会加剧贫富分化和阶层固化?

总体而言,基因研究对我们更好地了解自身、预测未来的确有好处。已经有科学家建议,对十万个婴孩进行基因排序,然后对他们做终身追踪研究,了解基因在决定人的生理、疾病、性格、偏好、特长等各个领域,到底发挥什么样的决定因素。最近几年大数据、云计算和人工智能领域的发展也给了生物学家更好的工具,他们可以为更大的样本创造每个人的“基因分身”,或者说虚拟的双胞胎,来帮助科学家推理基因“菜谱”的可能结果。

这种研究不仅能预测某个个体患心脏病或者胆结石的几率,也可以推断他可能的性别取向,甚至评估他可能酗酒的风险。未来你的基因检测报告,会是一份告诉你未来各种可能性的报告,就好像作者形容的那样:和打分卡不同,这种报告会列出你未来发生各种风险或者可能性的几率;和简历也不一样,列出的不是你过去的经验,而是你未来的倾向。一句话,你将拥有一本“尚未患病却可以寻求幸存”的指南。

总结一下,基因诊断和基因剪辑是未来人类基因研究的两大重点领域。基因诊断可以更好地做胎儿的遗传疾病筛查,基因剪辑也可以修补人工授精卵中的基因缺陷,甚至可以添加所谓的“好”基因。只是和转基因农作物一样,转基因人类的未来仍然会引发大量的质疑。不过有一点可以肯定,在大数据、云计算和人工智能的帮助下,我们对基因“菜谱”如何运作会更了解,也可能对自己未来的各种可能性做出更好的预判。总结

说到这儿,《基因传》的重点内容就为你介绍得差不多了,下面来为你简单回顾一下。

生物世界和物理世界或者数字世界最大的不同,就是它的混沌和复杂,基因作为承载生物遗传信息的最小单位,也不例外。

我们不能用物理世界的“蓝图”来理解基因所承载的生物信息,这些信息更像是菜谱中的一条一条的指令,能勾勒出生产菜品的流程,却没有办法保证所有的成品都一模一样。基因与环境的相互作用,决定了我们的体征,也影响了我们的性格和脾性。恰恰因为“菜谱”中留足了对外部环境偶然事件的应变空间,才会有每个人的多元发展。

对基因的深入了解也开始挑战进化论的核心观点。研究发现,基因在环境发生巨变后所做出的应对,会形成“基因记忆”,并有可能遗传给下一代。这种“快捷”的进化管道,让我们对“遗传”有了新的理解。

未来,在基因诊断和基因剪辑领域会有更快更大的突破,要攻克癌症,一定会建立在这两项突破之上。人类的健康与疾病的预防,都可能基于胚胎的基因筛查和每个人定期基因报告的预测。只是,如果人类基因可能像转基因植物那样可以被随意删减搭配,穆克吉提醒我们,生命是复杂多元的,一定不会那么容易被精确的剪裁所规整。

linux 查看文件/文件夹大小

  • 查看一个文件夹中所有文件的大小(不含子目录中的文件):du -Shdu -Ssh
  • 查看一个文件夹中所有文件的大小(包含子目录中的文件):du -h或者du -sh
  • S:表示不统计子目录,s:表示不要显示其下子目录和文件占用的磁盘空间大小信息,只显示总的占用空间大小
  • 查看文件夹中每一个文件的大小:du -ah 或者ls -lRh

openairinterface5g branch

~/OAI/master/openairinterface5g$ git branch -a

  • master
    remotes/origin/207-feature-ued-platform-support
    remotes/origin/2cw_fairRRscd
    remotes/origin/340-fix-beamforming-for-multiple-antenna
    remotes/origin/342-isip-pcie-lib
    remotes/origin/375-syrtem-sdr-platform
    remotes/origin/383-ulsch-scheduler-optimization
    remotes/origin/387-fraunhofer-iis-transmission-mode-4
    remotes/origin/401-bug-related-to-nr-pucch-format-2-generator
    remotes/origin/408-reworked
    remotes/origin/408-ue-main-threads
    remotes/origin/445-LDPC-implementation-on-GPU
    remotes/origin/459-pusch-based-ta-updates
    remotes/origin/464-ru_beamforming_in_gpu
    remotes/origin/464-ru_beamforming_in_gpu-CPUsubfunction
    remotes/origin/472-add-pusch-dmrs-modes
    remotes/origin/5g_fapi_scf
    remotes/origin/HEAD -> origin/master
    remotes/origin/LTE-sidelink
    remotes/origin/NR_RRCConfiguration
    remotes/origin/New-Merge-sidelink-develop
    remotes/origin/PerfumeOldTdd
    remotes/origin/RRC-measurements-merge2develop
    remotes/origin/UpdateRANRemoteUEReport
    remotes/origin/add_iris_hw
    remotes/origin/addoptions_nr_USRPdevice
    remotes/origin/block_mmse_receiver_with_whitenning
    remotes/origin/bugfix-find-uci
    remotes/origin/bugfix-pdcch_order
    remotes/origin/ci-yacine
    remotes/origin/develop
    remotes/origin/develop-FeMBMS
    remotes/origin/develop-aarch64build
    remotes/origin/develop-ci
    remotes/origin/develop-ci-fju
    remotes/origin/develop-large-scale-emulations
    remotes/origin/develop-m2ap
    remotes/origin/develop-multi-RRUs
    remotes/origin/develop-nb-iot
    remotes/origin/develop-nb-iot-merge
    remotes/origin/develop-nb-iot-merge-w-conflicts
    remotes/origin/develop-nb-iot-ntust
    remotes/origin/develop-nr
    remotes/origin/develop-nr-adding-2018-09-asn1
    remotes/origin/develop-nr-fr2
    remotes/origin/develop-nr-fr2-rework
    remotes/origin/develop-oriecpriupdates
    remotes/origin/develop-sidekiq
    remotes/origin/develop-vco3
    remotes/origin/develop_ci
    remotes/origin/develop_inria_ci_deployment
    remotes/origin/develop_inria_ci_deployment_gp
    remotes/origin/develop_jenkins_replay
    remotes/origin/dlsim-autotests
    remotes/origin/documentation
    remotes/origin/dual-connectivity
    remotes/origin/enhancement-149-iqtxshift
    remotes/origin/feat-mac-sock
    remotes/origin/feature-15-carrier_aggregation
    remotes/origin/feature-21-TM7
    remotes/origin/feature-230-tm3_scheduler
    remotes/origin/feature-247-tm89
    remotes/origin/feature-247-tm89-fixes
    remotes/origin/feature-247-tm89-rebased
    remotes/origin/feature-278-physical-layer-GPU-version
    remotes/origin/feature-309-phy_procedures_eNB_TX_split_to_multi_threading
    remotes/origin/feature-31-ff-scheduler-api
    remotes/origin/feature-330-turbo_decoder_gpu
    remotes/origin/feature-368-channel-simulator
    remotes/origin/feature-39-X2-handover
    remotes/origin/feature-68-enb-agent
    remotes/origin/feature-flexran-cm-s1ap
    remotes/origin/feature-nr-4g-nfapi-modifications
    remotes/origin/feature-pdcp-task
    remotes/origin/feature-send-rrc-message-for-wireshark-logging
    remotes/origin/fix-clock-source
    remotes/origin/fix-dirty-ue-same-machine
    remotes/origin/fix-itti
    remotes/origin/fix-segfault-flexran-isolated
    remotes/origin/flexran-improvements
    remotes/origin/flexran-report-split
    remotes/origin/fr2-hw-test
    remotes/origin/gNB-nrUE-USRP
    remotes/origin/gNB_mwc18_integration
    remotes/origin/hotfix_usrp_lib
    remotes/origin/initial-nfapi-PNF-fixes
    remotes/origin/integration-develop-nr-2020w03
    remotes/origin/inter-RRU
    remotes/origin/interoperability-test
    remotes/origin/isip-turbo-decoder-dynamic
    remotes/origin/isip-turbo-decoder-parallel
    remotes/origin/isip_nr
    remotes/origin/issue271_simulator
    remotes/origin/issue392-simplify-s1-nos1step2_01
    remotes/origin/issue416_nfapicleanup
    remotes/origin/issue_345_l2_fapi_simulator
    remotes/origin/large_scale_simulations
    remotes/origin/ldpc-dec-layering
    remotes/origin/ldpc-decoder-improvements
    remotes/origin/lte-m-ue_type
    remotes/origin/mac-monitoring
    remotes/origin/main_python
    remotes/origin/master
    remotes/origin/master_large_scale_emulations
    remotes/origin/merging-2019-w51-to-develop-nr
    remotes/origin/mex_mmse_receiver
    remotes/origin/mobipass-hack
    remotes/origin/modify_fairRRscd_parallel
    remotes/origin/mu_allocate
    remotes/origin/multi-L1
    remotes/origin/multi-RRUs
    remotes/origin/new_nos1
    remotes/origin/new_pdcp
    remotes/origin/new_rlc
    remotes/origin/new_rlc_in_mbms
    remotes/origin/nfapi-L2-emulator
    remotes/origin/nfapi_improvement
    remotes/origin/nr-coreset-bug-fix
    remotes/origin/nr-dlsch-multi-thread
    remotes/origin/nr-dlsch-thread
    remotes/origin/nr-dual-connectivity
    remotes/origin/nr-interdigital-test
    remotes/origin/nr-multiple-ssb
    remotes/origin/nr-pdcp
    remotes/origin/nr-pdsch-extraction-bugfix
    remotes/origin/nr-physim-update
    remotes/origin/nr-ssb-measurements
    remotes/origin/nr-timing-measurement
    remotes/origin/nr-timing-measurement-merge
    remotes/origin/nr-ue-buffer-status
    remotes/origin/nr-ue-slot-based
    remotes/origin/nr-uldci
    remotes/origin/nr_beamforming
    remotes/origin/nr_ci_dlsim
    remotes/origin/nr_csi_newbranch
    remotes/origin/nr_dci_procedures
    remotes/origin/nr_demo_wsa2019
    remotes/origin/nr_dlsch_parallel_measurements
    remotes/origin/nr_dlsim_plot
    remotes/origin/nr_fapi_for_push_tmp
    remotes/origin/nr_flexible_NRBDL
    remotes/origin/nr_improve_build_procedures
    remotes/origin/nr_increase_tp
    remotes/origin/nr_mib_vsa_test
    remotes/origin/nr_pdcch_testing
    remotes/origin/nr_pdcch_updates
    remotes/origin/nr_pdsch_integration
    remotes/origin/nr_prach
    remotes/origin/nr_segmentation_fixes
    remotes/origin/nr_sim_fix
    remotes/origin/nr_tdd_configuration
    remotes/origin/nr_vcd
    remotes/origin/oai_ue_mwc18_integration
    remotes/origin/ocp_simulator
    remotes/origin/pdsch-ch-est
    remotes/origin/preprocessor_refactor-2
    remotes/origin/pucch2ab
    remotes/origin/pucchsim-multiue
    remotes/origin/rau_rru_reciprocity_measurements
    remotes/origin/recode_itti_from_scratch
    remotes/origin/reduce_memory_footprint
    remotes/origin/release_v1_2_0_candidate
    remotes/origin/remove-ci-workaround
    remotes/origin/revert-f5c94279
    remotes/origin/revert-itti
    remotes/origin/rhel77-build
    remotes/origin/rru-txwrite-modification
    remotes/origin/ru-parallel-beamforming
    remotes/origin/ru_rau_enhancement
    remotes/origin/ru_rau_enhancement-external-timing
    remotes/origin/runel
    remotes/origin/runel-reverse-test
    remotes/origin/schedule-si-fix
    remotes/origin/signal-delay
    remotes/origin/tcri
    remotes/origin/test-x310-perf
    remotes/origin/thread-pool
    remotes/origin/tm7-iris
    remotes/origin/ue-updates-runel-test
    remotes/origin/ue_adjust_gain
    remotes/origin/ue_dlsch-multi-threading
    remotes/origin/ue_dlsch_decoding_ldpc_offload
    remotes/origin/ues_test_tmp
    remotes/origin/uhd_priority_set_cleanup
    remotes/origin/update-to-2019-march-june-release
    remotes/origin/usrp_gpio_test
    remotes/origin/workaround-rebased
    remotes/origin/workaround-restart-not-working
    remotes/origin/x2-ho
    remotes/origin/x2-ka-test
    remotes/origin/x2_neighbor_6cells
    remotes/origin/x2_tdd

github 搜索技巧

参考几个博客:

GitHub 上影响力颇大的项目:

free-programming-books:整理了所有和编程相关的免费书籍,同时也有 中文版项目。

github-cheat-sheet:集合了使用 GitHub 的各种技巧。

android-open-project:涵盖 Android 开发的优秀开源项目。

chinese-independent-developer:聚合所有中国独立开发者的项目。

安吉旅游 2006

21case-tf “完成chapter-1/2/3”

今天在家里的ubuntu-1804环境,python2.7+Anaconda2使用conda国内源,在“NVIDIA-SMI 440.33.01 Driver Version: 440.33.01 CUDA Version: 10.2”条件下,安装conda install tensorflow-gpu==1.13.1版本,成功验证chapter_3的slim模型微调功能。

其中,如果使用1.8.0等底版本的tf,无法兼容cuda10(我的系统是1804),运行python会出现调用gpu的失败打印,研究下来tensorflow-gpu的1.13.1可以兼容cuda10,,另外,建议不要使用pip install,而是使用conda install更容易快速安装包,具体安装包如下:

(21exp-gpu) wangwei@falls:~/21case/21-Examples/chapter_3$ conda list

_libgcc_mutex             0.1                        main    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

_tflow_select             2.1.0                       gpu    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

absl-py                   0.8.1                    py27_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

astor                     0.8.0                    py27_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

backports                 1.0                        py_2    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

backports.weakref         1.0.post1                  py_1    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

blas                      1.0                         mkl    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

c-ares                    1.15.0            h7b6447c_1001    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

ca-certificates           2019.11.27                    0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

certifi                   2019.11.28               py27_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

cudatoolkit               10.0.130                      0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

cudnn                     7.6.5                cuda10.0_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

cupti                     10.0.130                      0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

enum34                    1.1.6                    py27_1    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

funcsigs                  1.0.2                    py27_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

futures                   3.3.0                    py27_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

gast                      0.3.2                      py_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

grpcio                    1.16.1           py27hf8bcb03_1    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

h5py                      2.9.0            py27h7918eee_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

hdf5                      1.10.4               hb1b8bf9_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

intel-openmp              2019.4                      243    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

keras-applications        1.0.8                      py_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

keras-preprocessing       1.1.0                      py_1    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

libedit                   3.1.20181209         hc058e9b_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

libffi                    3.2.1                hd88cf55_4    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

libgcc-ng                 9.1.0                hdf63c60_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

libgfortran-ng            7.3.0                hdf63c60_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

libprotobuf               3.11.2               hd408876_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

libstdcxx-ng              9.1.0                hdf63c60_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

linecache2                1.0.0                    py27_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

markdown                  3.1.1                    py27_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

mkl                       2019.4                      243    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

mkl-service               2.3.0            py27he904b0f_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

mkl_fft                   1.0.15           py27ha843d7b_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

mkl_random                1.1.0            py27hd6b4f25_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

mock                      3.0.5                    py27_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

ncurses                   6.1                  he6710b0_1    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

numpy                     1.16.5           py27h7e9f1db_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

numpy-base                1.16.5           py27hde5b4d6_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

openssl                   1.1.1d               h7b6447c_3    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

pip                       19.3.1                   py27_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

protobuf                  3.11.2           py27he6710b0_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

python                    2.7.17               h9bab390_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

readline                  7.0                  h7b6447c_5    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

scipy                     1.2.1            py27h7c811a0_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

setuptools                42.0.2                   py27_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

six                       1.13.0                   py27_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

sqlite                    3.30.1               h7b6447c_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

tensorboard               1.13.1           py27hf484d3e_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

tensorflow                1.13.1          gpu_py27hcb41dfa_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

tensorflow-base           1.13.1          gpu_py27h8d69cac_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

tensorflow-estimator      1.13.0                     py_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

tensorflow-gpu            1.13.1               h0d30ee6_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

termcolor                 1.1.0                    py27_1    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

tk                        8.6.8                hbc83047_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

traceback2                1.4.0                    py27_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

unittest2                 1.1.0                    py27_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

werkzeug                  0.16.0                     py_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

wheel                     0.33.6                   py27_0    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

zlib                      1.2.11               h7b6447c_3    https://mirrors.ustc.edu.cn/anaconda/pkgs/main

ubuntu setup path of cuda

参考:https://blog.csdn.net/wanzhen4330/article/details/81699769

setup PATH: 打开主目录下的 .bashrc文件添加如下路径, .bashrc文件在/home/eric下。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-9.0/lib64
export PATH=$PATH:/usr/local/cuda-9.0/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-9.0

终端运行:source ~/.bashrc

检查:nvcc –version。 驱动是通过nvidia-smi来检查。

安装cudnn

解压下载的文件,可以看到cuda文件夹,在当前目录打开终端,执行如下命令:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/

sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/

sudo chmod a+r /usr/local/cuda/include/cudnn.h

sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

macOS写img file to U disk

  • 打开磁盘工具卸载U disk,或者在终端里“diskutil unmount /Volumes/usb”;
  • 然后就可以使用dd命令来写img和ISO文件“sudo dd if=/Download/ubuntu-1604.iso of=/dev/disk2 bs=10m ”;
  • dd命令解释
    参数if- 输入文件名,就是iso的文件名
    参数of- 输出文件名
    参数bs- 同时设置读写块的大小,单位是bytes

在ubuntu里也是类似的操作方法。

Intel-MKL在home ubuntu18.04的尝试

今天在win10平台尝试使用MKL库+VC2015,运行LTE的phy,没有成功,在VC上的compile始终有问题,而且遇到c代码的数组【0:x】语法问题,可能是C++的扩展,需要email作者。

回到家里上网百度发现ubuntu的环境比较简洁,基于gcc编译,可以不采用VC或intel的icc编译。参考此文:<https://blog.csdn.net/qccz123456/article/details/85246439>

  • 首先把下载的“l_mkl_2019.5.281.tgz”执行“./install.sh”安装在我的~目录;
  • 然后执行“source ~/intel/bin/compilervars.sh intel64”设环境变量,这个是最关键的一步,然后安装gcc(7.4.0)编译器 apt install gcc;
  • 解压从intel下载的example文件“ipsxe2019_samples_lin_20190327.tgz”,tar -zxvf 放在/mkl-software目录。
  • 里面的mkl目录里有一个C例子“dgemm_example.c”,用它来验证MKL;
  • 编译“gcc -I ~/intel/mkl/include/ ./dgemm_example.c -lmkl_rt” 生成a.out,运行就可以出现下面内容:

This example computes real matrix C=alphaAB+beta*C using
Intel(R) MKL function dgemm, where A, B, and C are matrices and
alpha and beta are double precision scalars

Initializing data for matrix multiplication C=A*B for matrix
A(2000×200) and matrix B(200×1000)

Allocating memory for matrices aligned on 64-byte boundary for better
performance

Intializing matrix data

Computing matrix product using Intel(R) MKL dgemm function via CBLAS interface

Computations completed.

Top left corner of matrix A:
1 2 3 4 5 6
201 202 203 204 205 206
401 402 403 404 405 406
601 602 603 604 605 606
801 802 803 804 805 806
1001 1002 1003 1004 1005 1006

Top left corner of matrix B:
-1 -2 -3 -4 -5 -6
-1001 -1002 -1003 -1004 -1005 -1006
-2001 -2002 -2003 -2004 -2005 -2006
-3001 -3002 -3003 -3004 -3005 -3006
-4001 -4002 -4003 -4004 -4005 -4006
-5001 -5002 -5003 -5004 -5005 -5006

Top left corner of matrix C:
-2.6666E+09 -2.6666E+09 -2.6667E+09 -2.6667E+09 -2.6667E+09 -2.6667E+09
-6.6467E+09 -6.6467E+09 -6.6468E+09 -6.6468E+09 -6.6469E+09 -6.647E+09
-1.0627E+10 -1.0627E+10 -1.0627E+10 -1.0627E+10 -1.0627E+10 -1.0627E+10
-1.4607E+10 -1.4607E+10 -1.4607E+10 -1.4607E+10 -1.4607E+10 -1.4607E+10
-1.8587E+10 -1.8587E+10 -1.8587E+10 -1.8587E+10 -1.8588E+10 -1.8588E+10
-2.2567E+10 -2.2567E+10 -2.2567E+10 -2.2567E+10 -2.2568E+10 -2.2568E+10

Deallocating memory

Example completed.

这张图是我遇到的语法问题,代码是github shang de LTE_PHY_GP的intel目录里的代码,继续扫盲咯。。。。。