大纲

  • 飞行途中
  • 圣地亚哥
    • Open edX 2019
      • Régis的晚宴
      • 我们的分享主题: blocks for open edx
      • Developer Summit: 席地而坐的吐槽大会
      • 明年葡萄牙见(Lisbon, Portugal)
    • 向@Grace介绍CodeLab
    • San Diego Bay:  如果潮来你还不来
    • 圣地亚哥军港: 爱情、自由与航空母舰
  • 洛杉矶
    • 约书亚树国家公园: 沙漠、小镇与雪山
    • 环球影城
      • 霍格沃滋的城堡与魔法棒
      • 3D电影与过山车的结合
    • 格里菲斯天文台: 万点灯芒浮夜海
      • 《La La Land》(爱乐之城)取景地
    • 灰石公园(GREYSTORE): 城堡与庭院
    • UCLA: 草地树荫好读书
  • 旧金山与奥克兰: 行程有变
  • 波士顿: 春寒料峭

倒时差

这两天倒时差,今天5点多醒来后便睡不着,于是6点多出发到办公室写这篇文章。

飞行途中

出发

3月25号早上8点的飞机,飞往北京。

早上6点钟的广州,天色晦暗,大雨倾盆,我和@leeyi乘@阿武哥的车,一早往白云机场。在机场与@liuxin、@finn集合,一同飞往北京。

@曾老师下午一点钟到达首都机场,草草吃了个午饭,从北京出发往洛杉矶。

飞机往东北方向飞行,行程中有一段接近北极圈。

飞行

途中只睡了几个小时,其余时间在读艾伦·凯的《Smalltalk的早期历史》和卡尔·波普尔的《开放社会及其敌人》

《Smalltalk的早期历史》是艾伦凯写于1993的一篇论文,当时他已经离开施乐(Xerox),在Apple工作。 在这篇论文里,艾伦凯回顾了Smalltalk诞生历史及其思想来源。

艾伦凯在论文的开篇里写道:

Most ideas come from previous ideas.

他回顾了Smalltalk诞生的背景:

在60年代,特别是在ARPA社区,通过交互式分时计算机、图形屏幕、指点设备(pointing devices)产生了很多关于人机共生的概念…现代个人计算机、层叠窗口界面和面向对象设计带来的范式转变都来自将60年代的工作视为更好的旧事物… 早期的Smalltalk是这些新观点的一次完全实现,它同时是硬件、编程语言和用户界面…

艾伦凯在论文里提到一件趣事,当Allen Newell访问PARC时,被要求解决一个问题:

given a list of items, produce a list consisting of all of the odd indexed items followed by all of the even indexed items.

Allen Newell使用类似IPL-V的编程语言,在这门语言里,指针被显式操控,他很难完成这个程序。艾伦凯在2秒内写下:

oddsEvens(x) = append(odds(x), evens(x))

这是LISP语法,他继续写下:

1
2
3
4
where odds(x) = if null(x)  null(tl(x)) then x
                   else hd(x) & odds(ttl(x))
     evens(x) = if null(x)  null(tl(x)) then nil
                   else odds(tl(x))

艾伦凯说到:

这种以声明形式写下解决方案,并使它们也成为程序是这种语言(LISP)的吸引力和美感的一部分。

看着一个比自己聪明的著名人物奋斗了超过30分钟来解决这个问题(其中还有一处错误),这给艾伦凯留下了深刻印象, 他想到:

point of view is worth 80 IQ points.

我并不聪明,但我有一个更好的内置思维工具来扩展我的能力.

这一事件和其他事件使得他想到:

任何儿童工具都应该具有伟大的思维模式和内置的深层美感。

论文接下来讨论了几个我很感兴趣的话题,诸如面向对象设计以及Smalltalk与孩子

艾伦凯试着回答面向对象设计的特殊效率来自何处?这个问题,他说:

正确地进行封装,不仅是对状态的抽象,而是为了从编程中消除面向状态的隐喻…OOP是一种后期绑定(late binding)策略,这种策略比旧策略更能对抗脆弱性和代码规模爆炸。

在讨论Smalltalk与孩子时,论文提到LOGO海龟,除了表面效果,并无法帮助孩子们创作互动工具(dynamic media)。

语言用于阅读和写作,但在某些时候,观点的组织开始主导语言能力…所以我们决定教授设计。

Adele认为所需的是关于问题的模糊想法,以及详细编码之间的中介。她称这个中间形式为design template(ps:有些像UML)。使用这个东西,孩子们可以查看他们想要模拟的情况,并将其分解为类和消息,而不必担心具体的方法如何工作。之后使用英语非正式地完成方法规划,这些注释稍后将作为实际代码的注释和指南(《代码大全》有过类似建议)。这个方法运行得很好。

抵达洛杉矶

飞行了12小时候后,抵达洛杉矶。我在途中读完《Smalltalk的早期历史》以及卡尔·波普尔对黑格尔的批判。

抵达时还是3.25号, 美国时间是下午。

西海岸的天气和海风都宜人,清爽舒适。我们租了两辆车,往San Diego开去。

抵达

行程的前半段景色平平,将近圣地亚哥时,路的一边临海,海边有灌木草丛。 摇下车窗,海风拂面, 落日西沉,风光热情洋溢,仿佛赴一场party。

海边草地

抵达下榻的酒店,已是美国时间下午6点。

酒店

放下行李,出门找吃的去。一同参会的@杨教授给我们推荐了一个中餐馆。 菜的分量十足,味道也地道。

我和@曾老师一个房间,一日奔波,夜里10点多便入睡,凌晨三点醒来,就睡不着,与@曾老师闲聊到天亮。

Open edX 2019 X UC San Diego

Open edX ConferenceUCSD举行,我们住处离会场大约半小时车程。

会议从9点正式开始,在UCSD Center Hall。

会议的日程为Open edX 2019 Schedule。 第一天是开发者大会,会议分5个分会场。

会议册子

我们一行人,分头行动,选择各自感兴趣的主题。我往113分会场。这是DevOps分会场,正在进行的议题是: Open edX Production-Ready in 10 Steps。我不为议题而来,为主讲者而来。

Régis

Régis Behmo是主讲者之一,来自法国的自由职业者。

它在Github的自我介绍里提到:

Freelance teacher, fullstack dev, data scientist, data architect. Expert in machine learning, computer vision, Python. I work remotely EXCLUSIVELY.

与Régis建立联系缘于他的tutor项目。tutor是个出色的项目,通过引入Docker,极大地简化了Open edX的安装部署,做到了一键安装。 edX官方团队在Docker这块的进展一直都不顺利。 Régis以一己之力,完成了大多数的工作。

如果你了解Open edX复杂的架构: Open edX Architecture, 就会对Régis所做的事,抱有敬意。

草草看一眼edx架构鸟瞰图:

tutor令人吃惊的地方在于,它把Open edX的开发和部署一体化了,将脏活累活做完后,为用户留下简洁漂亮的命令行界面。

tutor给我留下了深刻印象。围绕docker和Open edX我此前做过不少尝试,甚至做过分布式部署。但都不如tutor做得 看到tutor在这块取得的进展,我希望将其与Kubernetes结合, 如此一来我们就可以构建一个SaaS平台,将Open edX实例作为服务提供给用户。这是我一直以来想做的事。

于是我在tutor(彼时,这个项目还叫openedx-docker)的基础上继续前进。 将实验结果记录在将Open edX部署到Kubernetes上的踩坑笔记一文里。我把遇到的问题,提交给了Régis: How to deploy to kubernetes with Kompose? ,希望他一起来推进这项工作。

Régis当时对kubernetes还不熟悉。他只说:

I’ll try to find the time to take a look at this.

我提交这个issue的时间是2018.8.13, 半年后,Régis宣布他基本完成这项工作了。于是我邮件他说,想邀请他在第一天会后一起吃个晚饭,碰面细聊。Régis回复说:

the luxurious life of open source maintainers!

回到我们的113分会场。Center Hall的113分会场是个阶梯教室。我推门进来时,讲解已经结束,大家忙着各自实操。讲台上空无一人。

我回忆着Régis 在Github的头像,寻找棕色皮肤的中东面孔,搜寻片刻,一无所获。于是问前排女生(Open edX核心开发者之一,在网上见过照片)谁是Régis,她向人群里的招了招手,Régis走过来,眼前是一张白人面孔,网友见面,寒暄几句,约着晚上吃饭细聊。Régis在Github的头像应该是徒步中拍的(估计被爆嗮),Régis喜欢满世界徒步,他的肤色随着行程而变化。

会场的另一位主讲者,是Régis 的老友Lawrence。和Lawrence聊了一会儿。Lawrence住在墨西哥,热情奔放,富有魅力,Lawrence大叔工作经验丰富,早在1993年,就在做数据分析方面的工作,在高盛和IBM待了几年,近年在几个教育相关的非营利组织当志愿者,目前是一位自由职业者。Lawrence经常和Régis结伴旅行。他们二人为Open edX做了很多出色的工作。在Open edX 2018上,edX CEO在大会上演讲致辞时,特别感谢了他们二位。

Lawrence善于数据分析,在这块的经验将近20年!于是我们与他聊了edX在数据分析这块的困境,吐槽了edx-analytics的庞大臃肿和难以修改。Lawrence吐槽说他也受够了,推荐我们下午还来这个教室里听Get Started with Figures的主题报告。由appsembler带来的figures是个轻量级项目。

我此前在盘点Open edX社区中拥抱开源的公司及值得关注的项目里推荐过figures。但此前并未对它有足够重视。

中午吃过午饭,与@曾老师一起逛了逛UCSD校园。我们都很喜欢这面墙:

下午听完Get Started with Figures演讲,现场将其运行起来之后,觉得效果十分理想。与会者皆十分振奋。edx的数据分析是整个体系中最笨重的部分,它在设计之初被定位与于处理千万级用户的数据,数据结构也极为复杂。但大多数用户并没有edx.org这种量级的数据,却不得不忍受这个项目庞大的设计和烦人的复杂度。figures为大家带来曙光。Open edX官方团队成员在被吐槽数据分析项目时,也推荐大家转向figures

the luxurious life of open source maintainers!

@Jackson于3.25夜里抵达San Diego,专程过来请我们一起吃晚餐。@Jackson常年四处飞行,于是教给我们倒时差的技巧: 红酒与褪黑素。

Régis骑着一个电动滑板车过来,用餐的西餐厅里的光影极好,适合聊天,Régis开朗幽默。 我们邀请他来广州,与我们一起折腾一些有趣的东西, 他表示十分乐意,暂定在夏天过来。

blocks for open edx

我在blocks for open edx中提到:

Elite Education邀请我与@MT(曾老师)和他们一同参加2019.3.26在UCSD(加州大学圣地亚哥分校)举办的Open edX年会,在年会上,我们可能会就blocks4edx做一个主题演讲。

如文中所言,blocks for open edx的idea最初由@leeyi想到,@leeyi有着惊人的创造力、清晰的逻辑和强大的执行力,@leeyi目前是Elite Education负责人,也是CodeLab最热心的志愿者之一。当讨论问题时,@leeyi总能耐心听完所有发言者的观点和分歧,在一边沉思。当需要总结时,他的观点常常是最完备的;而当需要发散的点子时,他的创造性总是令我吃惊。我不知道如何能同时保有这些优越的思维特征。

我不满于IQ(智商)的定义,在我看来这东西类似灵魂的概念,充满了含糊不清,我不知道心理学上如何能忍受这种混乱的臆测(据我所知,心理学上对此的攻击很多),我觉得智力是一种动态的东西。相比于IQ,我更关注人们思维的深度,@leeyi是我结识的人中,思考最为清晰深刻的人之一。

回到我们的演讲话题。blocks for open edx想做的事情是这样的:

将积木引入Open edX中,帮助课程团队创作复杂的题目。blocks4edx可用于替代Open edX的Custom Python-Evaluated Input题目编辑器。允许课程团队在不写代码的情况下,通过拖拽积木自动生成代码与题目(XML)。

对这个话题有兴趣的朋友可以看Slide: Blocks for Open edX

演讲由@杨教授发言,@杨教授在自我介绍里写着:

  • Co-founder of Elite Education in Guangzhou, China
  • Associate Professor at Long Island University, New York
  • Course launched on Open edX based platform since 2016
  • A big fan of MATLAB

在正式发言前,我们与来自MIT的@jolyon bloomfield在休息区做过交流,他可能会将我们的积木概念与他自己的项目做结合。@jolyon bloomfield也是speaker之一。他带来了一个非常有趣的项目,该项目可以自动分析出数学公式中存在的错误,并给出提示,就像编程语言中的静态分析器。MIT的物理学院目前在使用这个工具。

Developer Summit

会议的最后一天是开发者峰会,参与者众。

在各个分会场,参与者多于凳子数量时,大家便席地而坐。

![]()

我将其称作”席地而坐的吐槽大会”。这句玩笑话,是伪装成吐槽的赞美。

Open edX的核心团队全部在现场,他们大方承认社区成员所吐槽的地方,并与大家一起探讨改进方案。有时也加入吐槽大军,幽自己一默。这种集结大家共识的讨论,让参与者对项目的未来报以极大信心。

我参与了Developer Summit的多个分会场,在其中一个分会场,Régis与几个社区核心贡献者,讨论tutor的插件系统和未来,令人满怀期待。

由于Régis出色的工作,Open edX试图将其收归官方团队,但Régis闲云野鹤惯了,加之让他去做的事,并不是他当前热衷的方向, 便拒绝了。

Open edX的Developer Summit给我留下极为深刻的印象, 人们分享各自的困境和探索历程,发言者来自不同的国家和公司,但都心无芥蒂,乐于分享。人们在讨论时彼此信任、耐心倾听,遇到分歧,则各自陈述立论点,与会者一起加入梳理和讨论,直至达成共识。

在参与Developer Summit时,令我感叹开放组织的优越性。我现场在手机备忘录里记录了这段感受:

开放组织的优越性,不在于开放是道德正确或者效率最高。而在于它的开放机制赋予了组织的纠错能力。在构建复杂系统时,尤其是在新的领域里探索而不是复制时,大可大方承认我们是在试错,这和科学探索极为相似,需要不断接受外部世界的反馈(可能是用户需求和使用场景),及时调整自己的假设。今天,至少在软件工程领域,人们已经普遍达成共识,无论是《人月神话》的出版,测试驱动的流行,还是开源运动的胜利,人们都假设错误是常态,好的机制不是杜绝错误,而是能够及时从错误中重新出发,不要因为一个错误而使系统陷入灾难。 那些喜好权威的人,总是喜欢自顶而下的设计,他们喜欢一蹴而就(这种倾向根植于人性深处),他们喜欢集中力量办大事,他们将其定义为效率,如果你对历史感兴趣,可以看到这些想法带来了多少末路狂奔。他们当中最有名的人物如柏拉图,所设计的乌托邦(理想国),最终为我们带来了什么,如卡尔·波普尔所言:

怀抱着建立人间天堂的最美好的愿望,但它只是成功地制造了人间地狱—人以其自身的力量为自己的同胞们准备的地狱。

希特勒和前苏联是柏拉图历史主义的两个典型产物。

开源运动或者说开放组织在今天取得的胜利鼓舞人心。

waiting…

途中风景

行程有变

拜访MIT Media Lab

拜访The Clubhouse Network

哈佛大学

科技馆与艺术馆

@yating的休学旅行

@Eric的不羁人生

参考