写点什么

我在朝鲜教开源

  • 2021-07-13
  • 本文字数:2397 字

    阅读完需:约 8 分钟

我在朝鲜教开源

本文最初发布于 Mike Izbicki 的个人博客,遵循创作共用许可,由 InfoQ 中文站翻译并分享。


2016 年,我去了朝鲜,给一个硕士班讲授如何给开源软件做贡献。下面是我在讲课时的一张照片:



作为这门课的一部分,学生们需要向自己选择的项目提交补丁。在本文中,我将分享其中两个补丁如何进入流行的机器学习库mlpackvowpal wabbit

mlpack 补丁


为了撰写硕士论文,一名学生研究了“基于视觉的车辆检测系统”。在这个问题中,我们得到了一个安装在路边的摄像机的实时画面,我们的目标是计算经过的汽车和卡车的数量。这是一个相当标准的机器视觉问题,世界各地的学生都经常实现,其输出结果类似下面这样:



(很遗憾,上图并非来自该生的项目,而是来自这里。)


显然,是朝鲜的交通部门指示该学生研究这个问题,因为平壤的来往车辆正在迅速增长。20 世纪 90 年代,到过平壤的游客经常会说路上没有汽车,但现如今,这个城市的交通已经变得很繁忙。我想,著名的平壤交通女孩可能需要一些自动化工具的帮助来保持交通畅通。


朝鲜的研究生可以不受限制的上网,为了实现车辆检测系统,学生们下载了 mlpack 机器学习库。他们选择使用 mlpack 是因为它是用 C++编写的,而这是他们在大学本科课程中学习的主要语言。但是,他们遇到了一个非常严重的问题:他们的电脑很旧,没有足够的内存来编译这个库!


在和学生调式了一个多小时后,我们将问题范围缩小到 mlpack 对 C++模板的使用。为了实现泛型编程而又不增加开销,mlpack 库在其代码中广泛使用了模板。模板的使用为 mlpack 赢得了“模型运行快,内存开销小”的声誉,这可谓实至名归。但它也有缺点,编译慢而且很耗内存。当时,该库在编译时最高会消耗大约 2GB 的内存,而这名学生的笔记本电脑只有 1GB 内存。


最终,这名学生通过大幅优化编译过程完成了对 mlpack 的编译。整个项目的原始代码中包含了数百个不必要的#include语句,而修复方式很简单,就是移除这些无用代码。你可以在 github 上查看具体的提交。成千上万的使用 mlpack 的个人和企业都从这名朝鲜学生的出色工作中获益了。

vowpal wabbit 补丁


我班上的许多硕士生没有选择论文题目,所以我鼓励一个学生研究推特情感分析。在这个问题中,对于下面这条推文:



我们要将其归类为针对某一主题的正面看法或负面看法。例如,上面的推文对 2018 年美国领导人和朝鲜领导人的新加坡峰表达了负面看法。像这样分析数以千计(或数以百万计/数以亿计)的推文,我们就可以判断不同群体对某个特定话题的感受。同样,这是一项世界各地的学生都在实现的常规任务。


这些学生都听说过推特,但没用过。虽然他们的电脑可以不受限制直接上网,但他们不能创建社交媒体账号。在我看来,这是因为美国控制着大部分互联网基础设施(包括推特这样的网站),而且,通过类似国家安全局的PRISM、军方的Cyber Command这样的项目,美国正在对社交媒体进行监视和操纵。在朝鲜战争后,美国和朝鲜未签署和平条约,因此,朝鲜人仍然非常担心受到美国的攻击。不创建社交媒体账号是这些朝鲜学生所采取的 "防御措施 "之一,以限制潜在的 "美国网络攻击 "的影响。幸运的是,推特是我的研究领域之一,我可以提供大小合适的数据集供他们分析。


对于这个项目,值得注意的是,这是朝鲜学生第一次分析推特数据。很快,分析推特数据就具有了地缘政治的意义:项目启动后不到一年,唐纳德·特朗普当选为美国总统,而推特是其政府向世界宣布外交政策的主要工具之一。幸运的是,在特朗普赋予推特这种伪官方地位时,至少已经有少数朝鲜人具备了分析推特数据的经验。他们可以利用这一经验,更好地理解特朗普的推文和数百万美国人的回复。现在,朝鲜政府认识到了利用社交媒体了解美国政策的重要性,并在最近成立了一个新的外交部门,专门通过社交媒体和其他公共信息源分析美国的意图。这对两国来说都是好消息!美国建立在一个透明的体系之上,我们希望每个人——包括朝鲜人——都能了解美国的民主如何运作,以及如何更好地与美国展开谈判,以实现共同的目标。


这种科学交流和外交之间的互动被称为科学外交。在冷战期间,对于美国和苏联限制核武器系统谈判的成功,这种外交模式发挥了重要的作用。我相信,我在朝鲜教授开源软件的工作可以证明,这种科学外交模式也可以成功地应用于美朝谈判。


现在,让我们回到学生的开源贡献。我建议该生使用vowpal wabbit进行分析,对于大型文本数据集分析来说,这是一个很棒的工具。该生成功下载并编译了代码,然后分析了数千条推特的情感。就这些分析来说,代码无需修改就可以正常工作。但对于我们这门关于开源软件的课程来说,该生还需要提交一个补丁。


他从 GitHub 上找了一个打开的问题(能够在训练线性模型时修正截距项和 L2 正则化的相互影响),并提交了增加相应行为的补丁。(两个项目的 PR 都是从我的 GitHub 账号提交的,因为 GitHub 被视为社交媒体,而朝鲜学生是不能创建社交媒体账号的。)后来,这个补丁被发现存在一个 Bug,我们就又提交了一个补丁来修复那个问题。这种反复正是开源软件开发的工作方式。我发现,开源软件让来自世界各地的普通人找到了共同的目标,甚至跨越了看似不可调和的政治分歧,构建了令人惊叹的软件。

未来展望


据我所知,这门课上提交的补丁是朝鲜有史以来所做的第一次开源贡献;遗憾的是,也是最后一次。


次年(2017 年),我又想组织一趟到朝鲜的旅行,我还想带其他几名教授开源软件的老师,但特朗普总统禁止美国人到朝鲜旅行。因此,我和其他老师就无法见到朝鲜学生了,也就没人教(或鼓励)他们为开源做贡献了。


最近,拜登总统宣布了他对朝鲜的 "务实外交 "政策。但关于这项政策的细节还不清楚,而且旅行禁令仍然有效。不过,只要这项政策还有效,我和其他美国老师就不能帮助朝鲜人为开源做贡献。因此,美国人将无法受益于朝鲜人对我们的代码的修复,而有效缓解了美苏联紧张关系的科学外交也无法成为缓解美朝紧张关系的工具。


原文链接:


https://izbicki.me/blog/teaching-open-source-in-north-korea.html

2021-07-13 11:183482
用户头像

发布了 919 篇内容, 共 644.4 次阅读, 收获喜欢 1628 次。

关注

评论 2 条评论

发布
暂无评论
发现更多内容

vivo鲁京辉:数据安全与隐私保护是消费者的基本权利,是企业的“铁律”

极客天地

架构实战营模块一作业

π

架构实战营

【编程实践】详解 MySQL 在 Python 中的使用(2)-pymysql的使用

迷彩

MySQL 数据库 增删改查 pymysql 9月月更 数据库操作

挑战Python的语法练习

芯动大师

项目实战 9月月更 模块创建

信我,Java面试的苦只吃一次,看完这八股文合集,渣渣也能进大厂

钟奕礼

编程 java;

APICloud可视化编程(二)

YonBuilder低代码开发平台

前端开发 APICloud 多端开发

程序员未来职业规划路线,请收藏

收到请回复

Java 程序员 架构 职业规划 语言 & 开发

天天都在谈的防火墙到底是个啥,有哪些分类?如何选择防火墙?

wljslmz

网络安全 防火墙 9月月更

这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试都可)

钟奕礼

编程 java;

作业一

小虎

架构实战营

后疫情时代,RTE“沉浸式”体验还能这么玩?丨RTE 2022 编程挑战赛赛后专访

RTE开发者社区

人工智能

未来智安加入中国通信标准化协会成为全权会员

未来智安XDR SEC

Python语法之模块和包(2)

芯动大师

9月月更 模块创建 包的应用

Redis进阶知识点(可学习,可复习,可面试)

钟奕礼

java; 编程、

【云原生 | 从零开始学Kubernetes】十二、k8spod的生命周期与容器钩子

泡泡

Docker 云计算 云原生 k8s 9月日更

开发者有话说|要不是家里穷,我也不想当码农

三掌柜

个人成长 个人感悟

详解数据计算能力的四种类型

穿过生命散发芬芳

9月月更 数据计算

Python语法之异常处理

芯动大师

异常处理 9月月更 Python异常处理方法

极客时间-架构师训练营作业-模块一

沐の爹

2022-09-28:以下go语言代码输出什么?A:1 1;B:1 2;C:2 2;D:不确定。 package main import ( “fmt“ ) func main() { var

福大大架构师每日一题

golang 福大大 选择题

实战案例,个个是经典,不愧是阿里P7私传“并发编程核心讲义”,竟能讲的如此通透

程序知音

Java 并发编程 多线程 高并发 后端技术

Java | abstract关键字【面向对象的第三大特征——多态】

Fire_Shield

Java 9月月更 abstract

面试中经常问到的几个问题,快来看看能答对几道吧(Java)

钟奕礼

java; 编程、

Android 开发环境的搭建(Android Studio + 逍遥模拟器)

Android Studio 安卓开发 9月月更

史上最全的Java容器集合之equals 和 hashCode

自然

集合 Java core 9月月更

史上最全的Java容器集合之HashMap(源码解读)

自然

集合 Java core 9月月更

【编程实践】详解MySQL在Python中的使用(1)

迷彩

Python MySQL 数据库 pymysql 9月月更

01简单架构分析

神奇的叶叔叔

Groovy closure 与Java function转换

FunTester

【最右】面向TS生态的新型Flutter框架

刘剑

typescript 小程序 移动端 动态化 flutter for web

架构实战训练营模块 1 作业

atcgnu

我在朝鲜教开源_开源_Mike Izbicki_InfoQ精选文章