惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Palo Alto Networks Blog
S
Security Affairs
T
Tor Project blog
T
Threatpost
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
A
Arctic Wolf
K
Kaspersky official blog
O
OpenAI News
Spread Privacy
Spread Privacy
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
Simon Willison's Weblog
Simon Willison's Weblog
雷峰网
雷峰网
P
Privacy & Cybersecurity Law Blog
Know Your Adversary
Know Your Adversary
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
Martin Fowler
Martin Fowler
量子位
博客园_首页
Cyberwarzone
Cyberwarzone
博客园 - 三生石上(FineUI控件)
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
IT之家
IT之家
N
News and Events Feed by Topic
博客园 - 司徒正美
V2EX - 技术
V2EX - 技术
S
Schneier on Security
博客园 - 叶小钗
Attack and Defense Labs
Attack and Defense Labs
AI
AI
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 【当耐特】
Jina AI
Jina AI
C
CXSECURITY Database RSS Feed - CXSecurity.com
C
Cybersecurity and Infrastructure Security Agency CISA
D
Darknet – Hacking Tools, Hacker News & Cyber Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
Cloudbric
Cloudbric
H
Hacker News: Front Page
The Last Watchdog
The Last Watchdog
V
V2EX
S
SegmentFault 最新的问题
V
Visual Studio Blog
PCI Perspectives
PCI Perspectives
Microsoft Security Blog
Microsoft Security Blog

囧克斯

奔四了,写给40岁的自己 有序退网 我和 Vue.js 的十年 我参与《代码之外 Beyond Code》的故事 博客站迁移至 VitePress 的备忘 写给我的奶奶 中文格式化小工具 zhlint 及其开发心得 vue-mark-display:用 markdown 语法轻松撰写幻灯片 我对技术会议的一些看法 VueConf Hangzhou 见闻 第四届 CSSConf CN 见闻 [译]Web 表单的未来 [译]苹果正在做一些他们的程序员明摆着不想要的东西 [译]为什么我不会无偿加班且你也不应该 [译]如果管理是唯一可走的路,那就完蛋了 [译]如何撰写 Git 提交信息 [译]C 程序的原则 Vue 2.0 来了! Weex 在 JS Runtime 内的多实例管理 我理解的 SPA 我理解的 Flux 架构 【整理】Vue 2.0 自 beta 1 到 beta 4 以来的主要更新 通过一张图走进 Vue 2.0 Code Review for Vue 2.0 Preview Vue 2.0 发布啦! 务实的小而美 Vue.js 1.0.0 发布了! [译]如何成为一名卓越的前端工程师 手机淘宝前端的图片相关工作流程梳理 [译]如何让办公室政治最小化 Vue.js 源码学习笔记 从原型到发布——“团队时间线” 1.0 开发心得 Vue + webpack 项目实践 用 Koa 写服务体验 webcomponents 笔记 之 配置管理 小秀个人的13~14年摄影作品 (共19张) 由今年D2前端论坛想到的 [译]CSS命名神马的真心难 [译]Git 分支的最佳实践 [译]撰写可测试的 JavaScript [译]语义化版本管理 [译]通过HTML5 Canvas API调节图像的亮度和颜色 [译]JavaScript V8性能小贴士 [译]视觉差,走起! [译]Chrome开发者工具中评估性能的五大新特性 精气神儿 细节无微不至,彩屏让人又爱又恨——新老“神机”大对决:Nokia 1050 vs Nokia 1202 秦升拿到红牌之后…… 用Sass重新整理自己的博客主题样式 Connect中间件使用手册 巧用 RequireJS Optimizer 给传统的前端项目打包 编辑器小调查结果 [译]JSLint 文档 烟火——写给蛇年的傲游和我 小秀个人的全年摄影作品 (共15张) 2012年终毫无正能量的总结 标签?ID?还是CLASS? 微创新=伪创新 HTML5峰会归来 分享bookmarklet一则:随意阅读 国际羽联和中国队之间的恶性循环 ZeroClipboard 学习笔记 “思考人生” 听杨东杰弹吉他 学习精髓 网站装修笔记20120426 网站装修笔记20120414 网站装修笔记20120406 分享Typecho插件:百度统计助手 我的得奖感言 网站装修笔记20120331 用CSS3制作尖角标签按钮样式 分享Typecho插件:Markdown 解析器 + 编辑器 分享Typecho皮肤:我的字很大 汇总自己过去的一些HTML5科普文章 html5中的消息通信简介 + 我的新网站开张 网站装修计划 Typed Arrays 是神马? 文明看球 HTML5中的文件处理 之 File Writer API HTML5中的文件处理 之 File API 独生子女、互相等和不耐烦 IndexedDB技术简介(四) IndexedDB技术简介(三) IndexedDB技术简介(二) IndexedDB技术简介(一) 把博客的字体进一步调大,同时去掉了侧边栏 “模仿别人是为了找到自己” 写给我未婚妻的2011年 写给自己的2011年 手把手教你入门EaselJS做HTML5动画 “吃了吧,不吃就浪费了” 写给傲游的2011年 所谓专业 写给HTML5的2011年 对HTML5中LocalStorage的一些使用建议 回味一下我2011年看到的最过瘾的5场足球比赛 浅浅浅谈开饭店被顾客吃出“异物”的用户体验 前端的本职 继续对Mac穷追猛打 之 修改原生按钮文字大小的技巧
Weex 近 4 个月的开源之路
勾三股四 · 2016-09-05 · via 囧克斯

本文早些时候发表在 weexteam 的博客 https://github.com/weexteam/article/issues/73

仅从我个人角度跟大家分享一下自己参与 Weex 开源这几个月以来的感受,中间可能会有写观点是偏颇的或者片面的,希望大家指正,另外不论怎样,这些都是我心里真实的想法和感受。


为什么选择开源 ​

有两个关键字:加速、共赢

我们提出来要开源的时候,在网上被很多人质疑过。有人质疑说这是个“KPI项目”,作者折腾完要“弃坑”了,所以就把它开源了;也有人质疑它的成色,也有人质疑“电商”的标签,是不是只有你们阿里用得到,别人都不太用得到。

我觉得开源最大的意义在于找到志同道合的人做出更伟大的事情,如果我们只是为了“弃坑”,那显然在4个月之前我们的工作就完成了,也不会有接下来的研发迭代、宣传、开发者服务和社区经营——最起码我自己从 Weex 还没有开源甚至还没有这个名字的时候就参与其中,一直参与到现在。我喜欢这个项目,也愿意接受这个项目带给我的各种刺激和挑战,他一直让我不断进步,有满满的收获。

话说回来,我确实看到很多社区的开源项目,自己厂的、友商的、个人的,确实有“弃坑”的意味,感觉源代码丢到 github 就没事了。我觉得这种开源不是没有价值,但价值是约等于 0 的。这段时间关注奥运会,也一下子想起奥林匹克之父顾拜旦老人家的一句名言:“生活的本质不在于索取,而在于奋斗!”我觉得这句话在开源社区更是如此。把代码开源出去然后撒手不管等着别人来捡,这实际上是索取,是没有意义的。关注开源项目的开发者表面上是索取,但是开发者提交的每一个 pull request、每一条 issue、甚至每一句评论和吐槽,也是在为项目做贡献。作为开源项目的参与者或作者,一定要在这方面有一个健康的心态,才能真正做出好的项目。

我还记得自己 2010 年参加 WebRebuild 交流会的时候,蒋定宇 的分享 让我印象深刻,他其中一句话我到今天还记得:

“最好的 solution 是讨论出来的”

所以如果想做出优秀的开源项目,除了摆正自己的心态,还要有一颗和别人 (甚至竞争对手和讨厌你的人) 一起共赢的心。尽可能团结一切可以团结的力量。让这个项目变得更好!

筹备过程:从心态到模式的全面转变 ​

团队内部从去年双十一之后宣布开源计划,到从4月份 QCon 开始邀请开发者陆续参与进来,再到6月底正式全面开源,一共经历了大概了大半年的时间。团队是把 Weex 开源这件事情当做一个工程来认真对待的,这里可以跟大家分享一些我们背后做的准备工作:

例行公事:脱敏、回避公司账号 ​

这是集团很早就定下来的规矩,我理解这件事情更大程度上是“怕出事”,不要不小心把不该公开的信息公开出去导致集团不必要的商业损失。我觉得这理所当然,同时这只是个最低要求。

当然集团今天对待开源已经不是“怕出事”这么简单了,我自己能够感觉到,集团新成立的开源委员会,除了通过这个流程帮助开发者打消不必要的顾虑之外,更多的希望我们能够通过开源的方式让一件事加速和共赢。这是我参与 Weex 开源过程中明显感受到和之前不一样的地方。

开放的工作环境和工作流程:issues、异步沟通的习惯、熟悉远程沟通的模式 ​

除了上面的“硬性”准备工作之外,对 Weex 团队更大的挑战在于工作方式的转变。在阿里有句土话,“能电话不邮件”,讲求的是密切沟通、快速响应,阿里的很多团队也是因此具有其他团队不曾想象的做事决心和执行力。在开源社区,面对海量的开发者一起参与,还要做好开发者服务,这种工作方式是不合适的。我们需要大量依赖线上的、异步的、远程的、开放的工作模式。

在团队内部,我们有意识的把所有的工作讨论和任务安排,能公开出来的,就全部公开在 github issue 里。随着团队成员的增多,我们的团队有杭州、北京、广州的,大家分散办公,然后在线上沟通,把不需要当面或同步沟通的工作大方的区分出来。表面上看,异步沟通增加了团队的沟通成本,但实际上,异步沟通让能够参与进来的人变多了,而且不仅限于杭州的某一个办公区或会议室的人,彼此也可以更自在灵活的安排自己的工作和行程。这给了项目组很多想象和发挥的空间。

image

甚至不只是 Weex 这个项目,我希望集团层面都可以更多的尝试远程协作和异步沟通,这是一种有魔力的体验。

培养兴趣和认同感,把开源当做马拉松,分配好体能,不能一蹴而就 ​

在筹备期间,我有幸和集团的几位开源的前辈聊到过我们的开源设想,印象最深刻的一个问题就是:

“你是否确定,如果有一天你的 KPI 里没有这个项目了,甚至你有一天不在阿里工作了,你会发自内心的去投入和维护它吗?”

我听完觉得前辈把话说到我们心坎儿里了。项目组核心团队里的每一个人,是把 Weex 简单当一份工作,还是发自内心的认同,做出来的东西我相信是完全不一样的。你会全职参与到一个项目里,还是兼职,有的时候兼职的效果更好,更健康。尤其是当我们从长计议的时候,对这几方面更加有感触。我们有大量的已经开源的项目,更新频度是大于半年的。这样的项目出发点都是很好的,但是结果很可惜。

我们在后期组建团队让更多人参与进来的时候特别思考了这个问题,今天在集团内部,Weex 的很多东西都是业务的同学在帮忙打理的。从项目组的角度,工作压力得到了分担和缓解;从个人的角度,在支持业务的同时,能够把一些比较解耦的工作拿来业余时间独自承担,松散的参与一些技术讨论,有自己的收获。这是两全其美的事情。

另外团队的既定工作安排是非饱和的,我们鼓励团员主动寻找值得参与和付出的地方,把项目的方方面面打理好,毕竟项目是完全对外的嘛,要“出去见人”总得把自己“打扮的漂漂亮亮的”。这是每个人都会有的心态。坦白讲这方面我们还不算做得特别好。所以有很多工作要继续做,也有很多空间给到团队。

欢迎把分散的工作内容到不同的团队和个人 ​

我们主动联系了很多和 Weex 有共同志向或相关联的团队和事业部,大家在不同的角度能够看到更多不同层次的问题,也有各自擅长的领域和空间。我们希望在 Weex 项目组之外,把一个围绕着 Weex 的生态建立起来,他会让 Weex 变得更丰富饱满,更有意义,更有价值。

今天在阿里,Weex 杭州的团队已经只是参与 Weex 的所有人中一小部分了,不同的业务方,不同的技术层次上,都有不同的小伙伴在参与。

image

团队选择 6-30 正式开源 ​

经过两个多月的筹备,我们于6月30日晚把项目正式开源了,我们在微博上做了个简单的宣传,但实际上团队当时内部压力是蛮大的,大家都很辛苦,所以我们搞了个小的 party,煞有介事的搬来一个“重大决策按钮”,很有仪式感的让大家一起把这个按钮按下去,把项目开源出来,尽量把这个过程搞得轻松愉悦一点。

开源之前大概就是这样,团队紧接着要面对的,是开源之后的漫长之路。

开源之后:更好的服务开发者 ​

我总结的开源社区经营就是一个“帽子戏法”的过程,就像开淘宝店是一样的,有三顶帽子你需要轮流得把他带到自己头上:

如果你要开店,那么你首先需要备货,拥有用户满意的商品;然后找入口买流量,让别人看到你的商品;用户发现你的商品之后,你要有很好的承接和售后服务;等到商品卖出去了,用户肯定会给你沟通、评价和建议,这会作为你拥有更好商品的筹码。每个环节之间都是紧密联系的,哪个做得不够平衡都会很痛苦。

image

做开源项目也是一样,首先你要做出好的技术产品;然后通过各种技术宣讲机会介绍给别人;当开发者来到项目的首页或 github 仓库时,要做好服务,帮助开发者解答参与过程中的疑惑;然后在这个过程中收集到用户的反馈和意见再做产品的迭代改进。

image

利用 QCon 等机会推广宣传 ​

包括4月份我们参与的 QCon 北京在内,团队先后参加了大大小小的很多场技术交流分享活动,同时在线上我们也在陆续写一些介绍 Weex 的技术文章,在宣传 Weex 的技术设想和理念的同时,也鼓励开发者更多的参与进来。

解答问题时遇到的问题 ​

现在回想起来,最早接触开发者的时候,团队对自己还是太过自信了,心想我们一起研发并且准备了这么久,开发者过来看过一定觉得很厉害。没想到遇到了大家的各种挑战。而且被问到最多的问题是完全没有想到的:

“怎么让程序跑起来?”

然后就发现了一堆问题:比如 Windows 环境下的命令行问题、路径分隔符问题、Node 版本问题、Android 环境翻墙的问题、npm/cocoapods 镜像的问题、NDK 的问题、x86 模拟器的问题等等……

这里面有些是团队自己知道的,只是觉得太顺理成章了,没觉得应该写清楚,结果就让开发者们误解了;有些确实是自己的工作环境很单一,而社区里开发者们的工作环境是千差万别的;还有些是交代得不够清楚,明明知道也写了,但是没能让开发者很好的充分理解。

后来我才留意到技术社区里一个流传很久的笑话:

“所有的开源软件都有一个特点:根据官方文档的步骤是跑不起来的。”

原来 Landing Page、README 和 文档这么重要,这给了团队当头一棒,大家认为最简单的问题都折腾得很狼狈。看起来搞开源真的“不是你一片赤诚就能够面对的”

经历了从 issue 邮件爆仓到 QQ 群再到 gitter 的过程 ​

最早期我们和开发者所有的沟通基本都是通过 github issues 来进行的,这也蛮正常的,看人家开源项目都在 issues 上讨论的火热,好有气氛好羡慕,巴不得有人在我们自己的 issues 上多聊个两句,哪怕是闲聊,总比冷冷清清无人问津的好。

后来发现完全不是我们想象的那样,我们真的是想多了,实际情况是各种 issue 洪水猛兽版袭来,大家的 github 账号默认都是可以收到每个 issue 的邮件提醒的,然后瞬间邮箱就被炸瘫痪了,正常的研发迭代也被应付这些 issue 变得支离破碎。

后来我们发现其实 issue 其实并不都适合处理所有的问题,有些使用上的小问题,在 issue 上几个来回讨论清楚,一个小时甚至一上午就这样过去了。而且问题多了之后,把 issues 上正常的工作内容讨论和安排都给淹没了。

这个时候就有非常热心的开发者帮我们建立了 QQ 群、微信群等社区,这种沟通方式更直接简单,回合更快,开发者遇到一个编译不通过的问题,问题抛出来在线等个几分钟就有人帮忙回应了。这样 github issues 的压力暂时得到了缓解。

后来经过几个同学的调研,我们最终把疑难杂症的解答和及时的线上讨论放到了 gitter 上,把需要跟进的事项、发现的 bug、值得追踪探讨的话题留在了 github issues 里。这样差不多是今天团队和社区开发者们协作的最终方式了。

根据开发者参与程度分场景提供不一样的支持 ​

我们根据开发者的参与度划分了几个维度:随便看看、试一试、用起来、交流互动、参与贡献。背后的需求和服务方式应该是不一样的

  • 如果开发者只是想先来了解个概念,我们要做的就是做个漂漂亮亮的欢迎页、还有 README,把主要功能、特点和适用范围交代清楚
  • 如果开发者看过之后觉得有兴趣尝试一下,我们要准备的是入门教程、预览工具、代码示例和 cli 入口集成工具
  • 如果开发者尝试过之后觉得不错,准备在实际工作中使用 Weex,那么我们要提供的东西就更复杂,包括详实的参考文档、丰富的工程示例、必备的所有工程工具集、还有常见问题的整理等等,更重要的是,要有稳定的版本。
  • 如果开发者自己用过之后,还乐于和众多其他 Weex 的开发者交流互动,我们要提供的就是 github、gitter 这样的平台,方便大家一起管理事物、及时解答和探讨各种问题,必要的情况下,我们会主动和我们的用户建立联系,了解更多大家平时不一定愿意主动说出来的观点和细节。
  • 最后,对于有能力和意愿为 Weex 做出更大贡献的开发者,我们需要提供更完整和演进的开发规范、技术约定和质量保障机制,让大家更低成本的参与贡献,同时还可以保障基本的代码质量和工程质量。

文章和讨论逐步沉淀 ​

随着 Weex 社区参与者的增多,我们也不需要鼓励大家有事没事写个 issue 打肿脸充胖子了,而是比较自然而合理的做各种事情。我们看到两个很好的势头:

一个是开发者在 issues 里参与了很多基于 proposal 的新功能讨论,之前团队在迭代新功能的时候是自行设计排期研发实现的,逐渐的,我们把整个技术设计的过程也透明出来并且有意识的在这个阶段放慢节奏,让这个功能经过足够充分的讨论之后,再付诸实现;

另一个是很多开发者开始在集团内网和 github articles 下写了越来越多对 Weex 的理解和相关讨论,很多文章团队自己看完都私下表示开发者们写得比我自己写得都好 [偷笑],这也让团队的每一个人更受鼓舞,也更愿意跟社区分享自己的想法和真知灼见。

这两方面不论哪一方面,对 Weex 社区来说都是很好的迹象,也都一定程度鼓舞了 Weex 团队本身做得更好!

有秩序分版本迭代和 release,因为有了上述的影响,最近的迭代也加快了节奏 ​

就像开源之后第一段提到的,Weex 团队除了宣传和服务开发者之外,还在保持有条不紊的版本迭代。去年 Weex 初期启动的时候,是一个7人左右的团队,通过不那么标准的 Scrum 的敏捷方式快速迭代。双十一过后,团队的规模扩大了,同时也有了非常专业的项目经理为团队保驾护航。我们基本保持着每个月一次迭代,每两个迭代发布一个版本的节奏,所以我们于5月份发布了0.5版本,7月份发布了0.6版本。

从0.7版本开始,随着团队默契度的提升,再加上整个社区逐步成型,也通过 proposal 讨论等机会给了团队很多回馈,我们加快了迭代频率,现在每个月都会完成一个新的版本,所以本月初我们发布了0.7版本。目前0.8版本也已经启动,正在紧锣密鼓的迭代过程中。

同时今年的双十一也要邻近了,团队针对今年双十一提出了更高的目标,具体内容这里不详细提及了,先卖个关子,请大家拭目以待。

未来的努力方向 ​

今天,Weex 在近4个月的开源之路后,累计了5000+个star,并且保持着比较高的迭代速度和社区活跃度。我们在欣喜的同时,更多的是感恩,觉得自己应该对得起大家的这份关注和信任,继续做出更好的产品给大家。除了之前提到的各方面细节和感触,将来我们还有很多地方值得改进

  1. 首先是把文档和网站做得更好,经过项目初期的摸爬滚打之后,我们对文档和网站本身也有了新的认识,同时我们有了更多的精力在这方面,所以未来我们会重新梳理我们的文档和网站,希望以一个更好的面膜提供给广大开发者
  2. 促进交流:除了 github issues 和 gitter,我们希望随着开发者诉求和参与程度的增加不断引入效果更好效率更高的交流和协作方式,比如 Playground 网站、Marketplace 之类的设想目前已经提上了日程
  3. 更透明:除了 proposal 的讨论透明化之外,我们会把整个团队的 Roadmap 也透明化,同时拿出更加民主的决策机制,让所有的开发者一同参与核心团队的决策和迭代计划
  4. 我们希望毫无保留的把我们的心得经验教训全部分享给希望在开源社区有所作为的朋友们,带动更多的开源实践,不论是阿里内部的,还是整个开源社区范围内的

最后的展望 ​

借近期参加开源中国源创汇和JSConf的活动,也给了我一个机会从开源经历的角度重新审视了一些自己和团队做的事情。同时 Weex 在 github 的 star 也即将迈过 6000 大关,有一些感触,分享给大家。未来我们会继续努力,用自己的实际行动。