写点什么

我在朝鲜教开源

  • 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:183459
用户头像

发布了 890 篇内容, 共 627.0 次阅读, 收获喜欢 1619 次。

关注

评论 2 条评论

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

软件测试 | 测试开发 | 测试人生 | 双非院校、入职某知名电商公司薪资翻倍还有股票奖励,这个90后小姐姐也太飒了吧?

测吧(北京)科技有限公司

面试 软件测试

只需搞定Docker,环境问题再也不是测开路上的『坑』

霍格沃兹测试开发学社

天翼云打造国云安全品牌 铸牢企业云上安全防线

极客天地

软件测试 | 测试开发 | 测试人生 | 双非院校跨城重新开始,薪资翻了2倍还多,这个90后小姐姐好飒

测吧(北京)科技有限公司

软件测试 | 测试开发 | 测试人生 | 拿到多个 offer 从了一线互联网公司并涨薪70%,90后小哥哥免费分享面试经验~

测吧(北京)科技有限公司

测试 软件测试和开发

知识图谱在智能运维中的应用

穿过生命散发芬芳

知识图谱 9月月更

最佳实践|用腾讯云AI图像搜索打造属于自己的拍立淘

牵着蜗牛去散步

腾讯 图像搜索 腾讯云AI 小程序商城 AI技术实践

后端Web开发框架(Java)

霍格沃兹测试开发学社

软件测试 | 测试开发 | 测试人生 | 毕业2年,拒绝独角兽入职名企大厂涨薪10万+,这个95后小姐姐好飒

测吧(北京)科技有限公司

软件测试 测试

上海参加java开发培训怎么样

小谷哥

软件测试 | 测试开发 | 测试人生 | 从传统行业到名企大厂,薪资翻倍,我做到了

测吧(北京)科技有限公司

面试 测试工程师 软件测试和开发

软件测试 | 测试开发 | 测试人生 | 从外行到外包,从手工测试到知名互联大厂测开 这个90后小姐姐是怎么腾飞的?

测吧(北京)科技有限公司

基于 Spring Boot 的 RESTful API 设计与实现

霍格沃兹测试开发学社

软件测试 | 测试开发 | 使用charles 修改服务器返回数据

测吧(北京)科技有限公司

软件测试 测试

软件测试 | 测试开发 | Kafka入门

测吧(北京)科技有限公司

kafka 软件测试

在北京如何能找到大数据培训机构

小谷哥

软件测试 | 测试开发 | 测试人生 | 从跨专业手工测试转岗外包,再到 Python 测试开发,跳槽涨薪 85%

测吧(北京)科技有限公司

Python 测试开发

基于Requests与mitmproxy打造迷你接口测试框架

霍格沃兹测试开发学社

大话JMeter2|正确get参数传递和HTTP如何正确使用

霍格沃兹测试开发学社

软件测试 | 测试开发 | 基于php-code-coverage的增量代码覆盖率实现

测吧(北京)科技有限公司

php 测试 PHP框架

Python基础(二) | Python的基本数据类型

timerring

Python 9月月更

软件测试 | 测试开发 | MySQL锁机制总结

测吧(北京)科技有限公司

深圳参加java培训哪个机构靠谱

小谷哥

软件测试 | 测试开发 | 测试人生 | 年薪50w+ 并入职名企大厂,这是双非学历小哥哥给自己30岁的礼物

测吧(北京)科技有限公司

人生 软件测试 测试

OpenIM集群(非k8s)部署文档

Geek_1ef48b

软件测试 | 测试开发 | 项目倒排,跟工期不足say byebye~

测吧(北京)科技有限公司

测试

同样是断言,为何 Hamcrest 如此优秀?

霍格沃兹测试开发学社

软件测试 | 测试开发 | vue双向绑定原理实现

测吧(北京)科技有限公司

Vue 测试框架

专访|3DCAT如何赋能Matterverse打造3A游戏画面的Sandbox

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

软件测试 | 测试开发 | 测试人生 | 双非学历,从外包到某大厂只用了1年时间,在2线城市年薪近30万,我柠檬了......

测吧(北京)科技有限公司

面试 测试 软件测试和开发

切流的基本逻辑

agnostic

切流

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