标签 present 下的文章

TB一周萃选[第3期]

本文是首发于个人微信公众号的文章“TB一周萃选[第3期]”的归档。

img{512x368}

 《岁旦》

   宋伯仁 宋代诗人

  居间无贺客,早起只如常。桃版随人换,梅花隔岁香。
  春风回笑语,云气卜丰穰。柏酒何劳劝,心平寿自长。

本期萃选是2017年的最后一期,也是迎接2018新年“承前启后”的一期。

对于现代中国人来说,公历新年又称为“元旦”。但稍有些历史常识的朋友都会知道:此“元旦”与中国古时的那个“元旦”有所不同。古代中国人把农历大年初一称为元旦,传说古时“元旦”在距今4000多年前“尧舜禹”的时候就已经有了。1911年辛亥革命成功后,当时孙中山领导的国民政府把农历的大年初一称春节,把公历1月1日称元旦,这就是现在元旦的由来。现代中国的元旦,在世界更广的范围内被更多称为“新年”,是全世界人们的一个共同的节日。在这样的一个节日里,人们家庭团聚,亲友重逢,倾诉过往,憧憬新年,祈求平安。

节日,似乎是群居生物的一种典型的行为表现形式,动物有之(可能是以我们无法理解的形式),人类也在进化的几十万年(又或更长的时间)内设定了大大小小的各种节日。这是作为群居动物的人类的一个重要需求,是进化数十万年后依然保留的最古老的基因所表现出的行为倾向。人类通过“节日”来“蓄力”,以迎接新的挑战!不同的是,古代人类挑战的是凶恶的生存环境,现代人类抗争的是现代生活无形的“生活压力”。

不过,人类从来没有屈服于困难!近期火热的电影《芳华》向我们直观生动地阐释了这一点,让我们更加明白生活的真谛,珍惜与家人、爱人、朋友在一起的时光,享受现在的生活,乐观的面对人生。

img{512x368}

一、一周文章精粹

1. Go初学者的类型系统入门

对于Go初学者而言,尤其是对那些从OO语言转到Go的开发者,在他们大脑中根深蒂固的OO type hierachy不见了,这让他们似乎一下子失去了着力点或抓手。原Go core team成员JBD撰文阐述了Go类型系统的特点,诸如:流程优先、嵌入不是继承、多态、没有构造函数、没有范型等。

原文链接:《The Go type system for newcomers》

2. Go反射详解

Go语言提供了反射(reflect)特性,在标准库中很多常见功能都是用反射实现的,比如:encoding/json、fmt包的Println系列等。但日常编程中,直接使用reflect包的场合并不多。reflect为Go程序员提供了一种在运行时 “陷入” 的机制,使得Go程序具备了直接操作runtime中类型元数据的能力以及在运行时凭空“制造”变量的能力,因此reflect操作是比较“危险”的。

Sidhartha Mani的“Go反射详解”分为两个part,part1主要讲解type与kind的区别、基于reflect包的type和value进行Go原生类型变量的构造和值的析出;part2则是针对复合类型,比如数组、map、struct等类型变量的构造和值的析出进行讲解,思路十分清晰。

原文链接:

《Go Reflection: Creating Objects from Types — Part I (Primitive Types)》
《Go Reflection: Creating Objects from Types — Part II (Composite Types)》

3. 现代网络负载均衡和代理指南

lyft的envoy工程师撰文对高可用分布式网络中的负载均衡和反向代理做了详尽的科普性讲解,内容包含:lb与proxy的区别、L4 lb、L7 lb、lb特性分析、lb的拓扑类型、当前L4-lb技术、L7-lb技术现状的情况、全局lb和集中控制平面等。强烈推荐阅读!

原文链接:《Introduction to modern network load balancing and proxying》

img{512x368}

4. Go编译器内幕

这是由国内一位就职于ARM公司的开发者在Go dev group上发的topic,这位开发者将自己学习和整理了Go compiler的原理(主要针对ARM平台)放在了一篇slide中,并在Go core team的反馈下,对他的slide进行了修正和优化。这份资料对于想深入了解Go compiler的朋友可能是大有裨益的。

原文链接:“Golang Compiler Internals for arm64″

5. 年度盘点2017之Service Mesh:群雄逐鹿烽烟起

在Kubecon&CloudNativeCon 2017上大放异彩后,Service Mesh在国内已经渐入火热阶段。Service Mesh的著名Advocator:数人云的架构师敖小剑年终前发了此文,对service mesh的发展历史、来龙去脉、各方开源项目和厂商势力分析以及未来发展做了回顾和展望。如果你还不知道什么是service mesh,那借此文赶紧上车吧:)

原文链接:“年度盘点2017之Service Mesh:群雄逐鹿烽烟起”

二、一周资料分享

1. Microservice’ing like a unicorn with kubernetes, envoy, and istio

随着传播渠道多元化和传播速度的加快,新技术“火”的速度也变得以前所未有。以Service Mesh概念为例(参考了 “年度盘点2017之Service Mesh:群雄逐鹿烽烟起”):

  • 2016 年 9 月 29 日在 SF Microservices 上,“Service Mesh”这个词汇第一次在公开场合被使用。这标志着“Service Mesh”这个词,从 Buoyant 公司走向社区。
  • 2017 年 4 月 25 日,William Morgan 发布博文“What’s a service mesh? And why do I need one?”。正式给 Service Mesh 做了一个权威定义。
  • 2017 年 5 月 24 日,Istio 0.1 release 版本发布,Google 和 IBM 高调宣讲,社区反响热烈,很多公司在这时就纷纷站队表示支持 Istio。

istio的正式发布,成为了service mesh的一个重要里程碑事件。谁能否认istio不是另一个Google内部技术的开源版本呢,就好比当年Kubernetes的开源。微服务框架走向统一的service mesh似乎成了大势所趋的趋势。无论国内外,对service mesh的研究、开发和试验,甚至是商用都在如火如荼地进行当中。

Redhat架构师Christian Posta近日在自己的博客上放出一份正在构建中的资料:Microservice’ing like a unicorn with kubernetes, envoy, and istio,对envoy和istio的原理与使用进行案例式的详尽说明,同时配有对应的示例源码。对于希望学习service mesh技术的朋友们,这是一份不可多得的资料。

资料分享链接:Microservice’ing like a unicorn with kubernetes, envoy, and istio

img{512x368}

三、一周工具推荐

1. mdp

今天给大家推荐一个比较有Geek赶脚的present工具:mdp

mdp是一款文稿演示工具,与go present工具有些类似,都是以一种类markdown格式的文档作为输入。不同之处,后者是将演示文稿渲染到浏览器中,而mdp工具则是将文稿渲染到terminal中,效果参见下面图示:

img{512x368}

mdp支持标准markdown语法,同时也支持通过一些扩展语法实现的特定渲染效果。mdp同时支持一些快捷键控制命令,比如:h,j,k,l组合的翻页控制等。在Mac上可使用brew工具来install mdp,在其他平台可以通过下载源码并自行编译的方式安装。

工具链接:mdp

四、一周图书推荐

笔者认为人类正在构建支撑未来20-30年支撑人类社会发展的IT技术“有机生命体”,包括:

  • 能量系统(类比于细胞化学反应,提供计算能量) – IT基础设施(云计算、vm、k8s、container)、Cloud Native技术框架:microservice 、service mesh(服务治理网络) 、serverless等。
  • 神经通道 – 基础高速互联网、移动网络、区块链(信用网络)
  • 大脑 – 人工智能、数据与智能算法
  • 肢体与感知 – 机器人、智能交通工具(比如:无人汽车等)、智能硬件、Iot等。

其中区块链技术作为未来社会信用网络的重要基础,IT技术人员都应该认真学习。本期我就推荐一本有关区块链技术的开源书:yesky的《区块链开发指南》。这是一本关于区块链技术的较为系统的开源书。该书探索了区块链概念的来龙去脉,剥茧抽丝,剖析关键技术原理、典型应用场景、分布式系统核心问题,同时讲解了区块链技术的三大典型应用:比特币、以太坊Hyperledger超级账本以及相关应用的开发入门。

开源书链接:《区块链开发指南》
商业纸板图书链接:《区块链原理、设计与应用》


我的联系方式:

微博:http://weibo.com/bigwhite20xx
微信公众号:iamtonybai
博客:tonybai.com
github: https://github.com/bigwhite

微信赞赏:
img{512x368}

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

GopherChina2017以讲师身份参会感悟

时光荏苒。2016年北京GopherChina大会的情形还历历在目,2017年上海GopherChina大会又如约而至。

img{512x368}

一、印象

这是我连续第二年参加AstaXie组织举办的GopherChina大会。而且不同于去年的是,这次我是以讲师身份参与的。虽然大会地点不同,我的角色不同,但不变的是和广大Gophers一样的对Go语言的极大热情。

这也是第三届GopherChina大会。随着Go语言自身的快速演进以及Go在国内各个行业应用的快速增长,GopherChina大会在大中华区的影响力与日俱增:既得到了更多圈内赞助商的赞助,也得到了Gophers们的极大关注。有好多Gophers都是GopherChina大会的连续参加者,有些Gopher甚至连续参加了三届,我个人就看到了好多去年在北京大会上遇到的Gophers。这让能容纳近1500名观众的主会场又近乎爆满。举办和参加这样级别的技术大会,无论是对于主办方还是观众都是一种考验。索性的是,在谢大和相关工作人员的不懈努力之下,两天的大会举办的是很是成功,大会紧凑而有序。并且在第一天晚上举办的技术Party上,大胡子Dave Cheney还为我们带来了“Gopher puzzlers”。这让技术party的气氛一下达到了高潮。

二、选题考量

由于本次是以讲师身份参加的大会,因此这里就不打算像去年那样对其他讲师以及其presentation进行点评了(若要看点评,可以移步到知乎上小伙伴开的贴子)。这里我主要来说说我这次参会的选题以及个人对于类似GopherChina这样的技术大会应该讲些什么的理解。

年初,谢大在征集GopherChina的topic的时候问我是否愿意在今年的GopherChina大会上做分享?说实话我非常想去分享,自己也是一个爱分享之人。但是分享什么topic的确是一个问题。自己研究Go较早,但一直没有全职Go,直到去年才开始成为full-time Go。而自己对GopherChina这类技术大会分享的主题也是有自己的想法的,那就是希望大会能像美国丹佛举办的gophercon大会一样,多一些关于Go语言本身的Topic。于是我就有了自己来分享一个关于Go语言自身的topic的想法,和谢大做了沟通后得到了谢大的支持。下面的topic初步描述反映了我当时关于slide的思路规划:

*“2016年Go语言问鼎TIOBE编程语言排行榜的年度语言,证明了Go语言在全世界范围内的蓬勃发展之势,将来会有越来越多的开发人员加入到Gophers行列。Go以语法简单、门槛低、上手快著称。但入门后很多人发现要写出地道的、遵循Go思维的代码却是不易。为此,在本次分享中,作者将结合Go team的talk资料、参考和提炼Go标准库以及主流Go开源项目的精华源码风格和惯用法,和大家一起探讨《go coding in go way》之道。” *

关于这样的一个主题,我的心理也是忐忑的,内心中有种赶脚:这个topic有些大啊!在阅读代码、收集和整理资料方面的工作肯定也不少,于是我早早开始了一些资料收集工作。

最初我的topic是偏向于go idiomatic tricks或best practice这个方向的,但随着准备工作的进行,我的头脑中出现了几个疑问:Go诞生这么多年,go idiomatic tricks或best practice已经为人知晓,但很多问题并无定论,我是否可以探讨一下呢?比如:Go的编程思维到底是如何形成的?为什么Go上手易,写出idiomatic的code难呢?我是否能再上一个层次,将go idiomatic tricks或best practice这些冰山上面的具现事物的底层根源找出来呢?这时恰逢国内上映《降临》这部美国大片,在电影院看完片后,我思考着影片中的理论核心:“萨丕尔-沃夫假说”并陷入沉思。

于是乎那天晚上我就有了一个关于topic的新的想法,那就是探究Go编程思维背后的东西。但考虑到如何应用编程思维去写go代码,我又阅读了大量go stdlib、kubernetes的代码,试图在这些代码中找到”Go语言编程思维”的应用实例并补充的slide中。这样slide的大体结构就出来了:

铺垫
    - “萨丕尔-沃夫假说” 作为引子,说明语言与思维的联系
    - 针对一个问题的三个语言版本实现,说明编程语言对编程思维的影响
    - 提出:语言价值观是语言影响思维的根本(一个示意图阐述模型)

价值观
    - Go语言的价值观的形成和价值观内容
    - 每种价值观下的语言设计
    - 每种价值观主导下的Go编程思维
    - 这写Go编程思维的具体运用实例

而随着资料准备的深入,逐渐完成了价值观(“全面简单”、“正交组合”和“偏好并发”)与编程思维的内容体系构架(大纲):

   Overall Simplicity
        - short naming thought
        - minimal thought

   Orthogonal Composition
        - vertical composition thought
        - small interface thought
        - horizontal composition thought

    Preference in Concurrency
        - concurrency thought

其实在这个资料准备过程,我个人对于Go语言的理解也得到了一定的升华,也更加理解Go的设计者在当初设计语言时做出的一些选择了,并且感觉在面对实际业务问题时、在代码设计时,更加有道可循了。

临近大会,开始写slide。本着present in go way的思路^_^,我首选go present tool支持.slide格式文档,最后形成了近70 pages的文档。我也感觉页数有些多,并且每次自己彩排一遍都超时。但页面之间逻辑紧扣,武断地删除一页又担心思维跳跃,不便于整体理解,于是硬着头皮将所有内容都保留到了最后。

三、Presentation分析

不过实际presenting过程,我依然超时了:(了,整个presentation过程并不顺利。

  • 首先是大会的屏幕分辨率似乎有些问题,slide的标题部分根本没有显示出来,这直接导致在座的gopher们看不清我的思路体系,内容让人感觉突兀。就像知乎上ezbuy 翁总的“批评”:“不知为何说变量统计”。
  • 其次,不得不承认自己在千人面前speaking,的确紧张紧张紧张啊,尤其是初期,节奏变慢,有些东西没有讲出来,可能会让在座观众感觉思路有跳跃;
  • 再次,也许gopher们更关心编程思维下的具体展现,也就是后面的代码部分,但由于前面节奏控制不好,铺垫部分有些多了,占用了大量时间,而导致后面代码部分讲解非常快。
  • 再再次,每个会场的gopher的关注点不同,一些gopher可能更喜欢像“微服务实战”这样的一些关于他们目前所遇到问题的解决方案的topic。
  • 最后,话题大,不够聚焦。自己准备这类规模大会topic时的经验还是不足。即便讲语言本身,也应该聚焦,就像Dave CheneyFrancesc Campoy的topic那样,只把一个事情的来龙去脉讲透。

纵观前两届gopherchina大会,国人讲关于Go语言自身层面topic的比例较低,甚至可以用凤毛麟角来形容。更多topic集中在某一业务领域的产品、架构、原理和工程上的实践等。我并不是说这些topic不好,毕竟像GopherChina这样规模的大会需要topic的多样性。只是这一届我要挑战一下自己,虽然结果不是那么理想。

不过,即便被吐槽,其实也没什么,说明和优秀的Go讲师相比,自己的确是有差距的。有差距就努力去弥补呗。如果下一届还有机会分享,我还会分享与Go语言相关的topic,只是要吸取经验,更加聚焦。

四、回复吐槽

在这里也回复一下几个gopher的吐槽:

1、”过度吹捧Go”

我真想不出为何这位Gopher能有这种想法。

首先在Gopher大会上,说Go肯定是没问题的。我从来都说Go是一门牛逼的语言,但从来没说Go是最好的语言。
至于所谓的上升到“价值观”的层面,那是对一门编程语言本质上的探讨,是对Go代码设计思维本源的思考,无关吹捧或不吹捧。
任何一门编程语言都有设计者自己背后的理解和选择,都可以上升到价值观。

不过我不能否认的是上升到编程语言价值观这个层次,是需要一定编程语言积累的。所以初学者体会不到也是正常的。慢慢来:)

2、“一些模凝两可的结论”

我不知道这个“吐槽”的原因是否是因为我在talk开始时说了几句谦虚的话。但谦虚并不代表模棱两可。slide中的所有结论都是我思考后的结果,这种东西本身就是主观的,这又不是数学,需要有精密的证明过程。但我在表达这些观点时一直都是坚定的。不知道在这位gopher心中,萨丕尔-沃夫假说是否也算是模棱两可的结论呢?

我的确希望这个topic能作为一次“抛砖引玉”,让广大gopher一起深层次理解语言设计者的初衷以及go设计过程中的一些考虑和认知,能让我们更好的使用Go语言。你可以补充,可以针对某个观点反驳,但你要拿出你的思考过程。如果能说服我,说服大家,那我就认同。这次的分享就是我的思考过程,绝不是模棱两可。

小结

最后,十分感谢AstaXie,没有他就没有GopherChina!希望今后的GopherChina大会越办越好,希望Go基金会越做越大!

gopherchina 2017所有讲师的slide已经放出,可以在这里下载。

我个人的talk slide在这里可以下载。

img{512x368}
GopherChina会场周围的美丽景色

img{512x368}
与GopherChina mascot合影

img{512x368}
演讲中


微博:@tonybai_cn
微信公众号:iamtonybai
github.com: https://github.com/bigwhite

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats