当前位置: 首页 > news >正文

连接微信群、Slack 和 GitHub:社区开放沟通的基础设施搭建

NebulaGraph 社区如何构建工具让 Slack、WeChat 中宝贵的群聊讨论同步到公共领域。

要开放,不要封闭

在开源社区中,开放的一个重要意义是社区内的沟通、讨论应该是透明、包容并且方便所有成员访问的。这意味着社区中的任何人都应该能够参与讨论和决策过程,并且所有相关信息应该公开和自由地与他人共享。

在公共场合进行沟通在开源理念中是重要的,正是这种方式使得社区的成员可以进行有效地共同工作,分享想法和反馈,为项目或社区做出贡献。

但是,社区在实践开放性沟通的过程中,或多或少都会遇到以下一些情况:

  • 工具选择,本该是用来降低沟通成本的工具,却阻碍了部分社区成员在开源社区中的开放沟通。例如:
    • 邮件列表交流模式是我个人很偏爱的方式,但在中文社区背景下,因为邮件列表不是所有用户都能够 access,其作为中文社区单一沟通渠道可能会带来沟通的不对等性(一定程度只有部分的人有特权表达自己),反而伤害中文开源社区的开放性。
    • 选择交流工具的时候选择了付费产品,社区成员需要为此买单,而并非所有社区成员都能负担得起,这也导致了部分社区成员不能参与到社区中。
    • 所用工具难用,或者需要一定的技术经验积累,而这经验并非所有社区成员都具备。
    • 用于交流的工具在某些操作系统或设备上不兼容,这可能使一些社区成员难以访问它们,更别提使用它们。
  • 信息共享,在不与社区其他成员分享上下文、过程或结果的情况下,只在线下(例如:通过当面沟通、IM 或电话会议)进行决策可能会使重要信息只被少数社区成员掌握。这可能会阻止其他人基于这些信息做贡献,或是从中学习知识,阻碍了开源社区所必需的开放沟通和协作。
  • 资料公开,没有把系统、功能设计和提案信息以公开方式文档化、归档下来,例如:只提供某一个公司内网的链接,从而可能伤害开源社区的透明度和包容性。这样的封闭结果会使得社区的其他成员很难保持对社区进展的了解、就更不用说参与进来做贡献了。为了促进透明度和包容性,开源社区应尽量确保所有重要的信息公开和自由地共享、尽可能保有细节地被公开归档。

开放性挑战

为了使社区(或工作环境)的沟通保持透明、高效和健康,其实已经存在一些共识,和通用的做法:

  1. 异步优于同步,在分布式和全球协作的情况下,同步通信在大多数情况下成本高且效率低。因此,推荐使用 GitHub Discussion 和 Stack Overflow 进行提问式的沟通。
  2. 专题(Thread)讨论优于广播(Fan out),注意力是宝贵的,习惯性向所有人群发送信息会最终导致重要信息没有人真的读到信息,都知道狼来了的故事。因此,在 GitHub Discussion 和 Slack 中设有分类、频道。建立 SIG 来讨论一些有趣的主题并归档沟通的结果,而不是将所有事情带到社区会议广泛讨论。
  3. 优先选择可搜索/文本、版本控制、协作的方式与工具,并在可能的情况下鼓励成员们给其他人反馈;在基础设施上跟踪文档、设计流程,并且提供评论、review 的能力。为此,实践过程中采用 etherpad.opendev.org 来记录社区会议文档。

但是,还是存在一些特例的情况,我们不能盲目追求异步、绝对的开放。正如前面提到的,能让更多参与者公平、方便与社区连结本身也是开放的一部分,尽管使用的基础设施可能是封闭的。事实上,几乎所有的开源社区都在用类似的方式建立他们的社区沟通平台:

  • Slack 支持丰富的格式化信息(支持 Markdown!)和 Thread 系统,其现代化的设计和开放/软定义接口使我们的工作流程可以非常优美流畅。
  • 与 Slack 相比,因为微信不是专为开放的技术交流场景设计,所以微信在技术社区中在许多方面都很不理想。但在国内,它是社区中所有人都可以访问的唯一平台。几乎每个人都有一个微信账号,几乎每天都会查看微信信息。但与之相反的是,几乎上每个人都有不止一个邮箱,且只有很少一部分人会每天查邮件。

在 NebulaGraph 社区中,上面这两个平台承担了主要的沟通工作,但这些信息在出现后的几个月后就会消失,它们在短时间内只能被割裂的一部分社区成员看到,而未来没有人或其他平台可以读到、搜到和参考、引用这些有价值的讨论。

摸索的方案

曾经有一段时间,NebulaGraph 会自己手动收集 Slack、微信群里的讨论摘要,定期分享、归档在公共领域,这个方法也确实带来了一些价值。然而,我们最后都没坚持下去,原因很简单:

  1. 这太费事儿了,完全不 scale;
  2. 这种摘要其实不好平衡能被归档信息的裁剪程度,有时候细节非常重要却不容易被摘要保留。

搞定 Slack 的信息孤岛

2022 年 10 月,我注意到了 linen.dev 这个开源项目,同时它也是一个 SaaS 服务。有了它,我们可以把 Discord 和 Slack 中的每个 thread 保留。linen.dev 整站看起来和 Discord / Slack 几乎一样,但是,它完全是可以被匿名访问、引用,以及被搜索引擎收录供他人检索使用。

经过几个月的评估,我们最终决定了订阅 linen.dev 服务,并收获的果实:

  • 不用去改造现有 Slack,保留 Slack 所有的好处;
  • 有了这样 https://community-chat.nebula-graph.io/ 的一个站点收录 Slack 信息。其中,Slack 中的每个公共频道内容都能被匿名访问、被搜索引擎收录,而访客还可以很容易地知道怎么加入我们的 Slack,如图右上角:

这个站会实时同步 Slack 里的消息,重要的是,它是面向搜索引擎优化过的,你可以搜搜 Kotlin 社区通过 Linen 被收录的网页有多少,搜这个:“site: slack-chats.kotlinlang.org”。

此外,每一个 Slack thread 都有一个无需登录的只读 URL,我们可以方便去分享、引用它。虽然,这件事儿本身就是超链接、URL 的作用。但是,在现在已经变得非常不容易了,比如:这个新闻里提到现在新一代的年轻人更倾向于在抖音里搜索而不是在公共领域里。

有了 Linen,我们可以非常开心地在 GitHub 里引用任意一个 Slack 讨论话题:

解决了 Slack 的问题之后,唯一剩下的痛点就是微信群了。微信群每周都有许多宝贵的讨论在社群中进行,却不能被保留下来,真是太令人心疼了。终于有一天,我决定直面这个问题。

解决微信群的信息公开化

首先,能不能直接用 Linen 一把梭,同步群消息呢?我确实在 Linen 社区和他们的 Kam 讨论直接解决 IM 同步的可能,不过到现在,他们都没有优先考虑😭。

但,机智如我,我想如果直接把微信同步到 Slack,Linen 不就能把微信的信息也收录了吗?

在 Twitter 上 求助黑客/开源社区 + 一番调研确定了没有这样的东西存在之后,我决定搞一个,做成开源项目,我花了一点时间实现了最初的版本。

万万没想到,当我做到把消息从微信同步到 Slack 之后,随之而来的问题是,通过 Slack API 发出的消息 Linen 并不会收录。

为此,我放弃了 Linen 一把梭的美好愿望,转而考虑把消息同步到其他公共领域。而我第一个想到的就是 GitHub Discussions 之中,又花了周末的下午加晚上,把它做出来了:

现在,这个机器人程序会把配置好的微信群消息同时同步到 Slack 频道和 GitHub Discussion 中给定的标签下的主题中,每一个群一个礼拜是一个主题,所有的消息都是主题下的评论。

小结

现在,我们保留了所有 Slack / 微信的美好的一面的同时,把它们中的讨论消息历史全都归档、索引并公开到这两个域之下了,是不是很酷呢?来访问下下面的链接,感受“私密消息”下消息被公开的快乐吧:

  • https://community-chat.nebula-graph.io/
  • https://github.com/vesoft-inc/nebula-community/discussions/categories/wechat-chat-history

后续工作

这个同步微信的项目是 Apache 2.0 协议开源的,并且现在由我和Frost Ming在维护,这里还有很多待增强、实现的新功能、新任务,欢迎大家来试玩、贡献。

让我们一起把开源社区的沟通做的多一点开放、少一点封闭吧~

项目地址 👉🏻 https://github.com/wey-gu/chatroom-syncer

最新进展

在圣诞节前,Linen 的工程师允许了 chatroom-syncer 同步到 Slack 的消息,详见:

  • Linen-dev/linen.dev#761
  • wey-gu/chatroom-syncer#42

现在,我们可以在 https://community-chat.nebula-graph.io/c/wechat-sync-venus 看到 WeChat 中的群聊的文本备份了!当然啦,如果你更喜欢 GitHub Discussion 的方式,help yourself,选你选的方式就好。

结论

有效的沟通是成功的开源社区的基石,因为它让协作、分享思想与知识、以及所有成员的参与成为可能。为了确保沟通透明、包容和有效,对于开源社区来说,让所有成员有机会参与讨论和决策以及公开自由地分享相关信息是非常重要的。

我们 NebulaGraph 社区的建设者/贡献者将继续寻找和黑客方法,以开放和良好的方式使人们连接在一起,和大家共建更好的开源、技术社区。


谢谢你读完本文 (///▽///)

要来近距离体验一把图数据库吗?现在可以用用 NebulaGraph Cloud 来搭建自己的图数据系统哟,快来节省大量的部署安装时间来搞定业务吧~ NebulaGraph 阿里云计算巢现 30 天免费使用中,点击链接来用用图数据库吧~

想看源码的小伙伴可以前往 GitHub 阅读、使用、(з)-☆ star 它 -> GitHub;和其他的 NebulaGraph 用户一起交流图数据库技术和应用技能,留下「你的名片」一起玩耍呢~

相关文章:

连接微信群、Slack 和 GitHub:社区开放沟通的基础设施搭建

NebulaGraph 社区如何构建工具让 Slack、WeChat 中宝贵的群聊讨论同步到公共领域。 要开放,不要封闭 在开源社区中,开放的一个重要意义是社区内的沟通、讨论应该是透明、包容并且方便所有成员访问的。这意味着社区中的任何人都应该能够参与讨论和决策过…...

数据中台架构体系理解

目前,大部分企业更倾向于数据集中采集、存储,并应用分层建设。这种方式一方面有利于应用系统的快速部署,另一方面也保证了数据的集中管理与运营,体现数据的资产、资源属性。 数据中台的出现弥补了数据开发和应用开发之间由于开发…...

高并发性能指标:QPS、TPS、RT、并发数、吞吐量

QPS(每秒查询) QPS:Queries Per Second意思是“每秒查询率”,一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准 互联网中,作为域名系统服务器的机器的性…...

【微信小程序】-- 案例 - 本地生活(列表页面)(三十)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...

华为OD机试题,用 Java 解【一种字符串压缩表示的解压】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…...

所有科研人警惕,掠夺型期刊和劫持型期刊的区别,千万别投错了

当今,新形式的学术出版物——例如数字式或开源式的学术期刊日益普及,热门期刊的数量逐年增长【1】。 人们获取学术出版物也越来越容易,使得更多的科研人员(特别是在低收入国家)能够及时了解各自研究领域的最新发展态势…...

超详细CentOS7 NAT模式(有图形化界面)网络配置

在此附上CentOS7(有可视化界面版)安装教程 超详细VMware CentOS7(有可视化界面版)安装教程 打开VMware—>点击编辑---->选择虚拟网络编辑器 打开虚拟网络编辑器后如下图所示: 从下图中我们看到最下面子网IP为…...

华为OD机试题,用 Java 解【英文输入法】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…...

【Redis】主从集群 实现读写分离(二)

目录 2.Redis主从 2.1.搭建主从架构 2.2.主从数据同步原理 2.2.1.全量同步 2.2.2.增量同步 2.2.3.repl_backlog原理 2.3.主从同步优化 2.4.小结 2.Redis主从 2.1.搭建主从架构 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,…...

【JavaEE】前后端分离实现博客系统(页面构建)

文章目录1 效果展示1.1 博客登录页面1.2 博客列表页面1.3 博客详情页面1.4 博客编辑页面2 页面具体实现2.1 博客列表页的实现2.2 博客详情页的实现2.3 博客登录页面的实现2.4 博客编辑页面的实现写在最后1 效果展示 1.1 博客登录页面 用于实现用户的登录功能,并展…...

MyBatis的基本使用

MyBatis 为啥MyBatis会使用xml 在一个程序中,若需要操作数据表,那么 SQL 语句有两种存放方式:1. 放到 Java 类里面(这个就存在大量的字符串拼接,还有占位符需要处理-----JDBC);2:放…...

看完书上的链表还不会实现?不进来看看?

1.1链表的概念定义:链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构。特点:链表由一系列节点组成,节点在运行时动态生成 (malloc),…...

【批处理脚本】-3.2-call命令详解

"><--点击返回「批处理BAT从入门到精通」总目录--> 共5页精讲(列举了所有call的用法,图文并茂,通俗易懂) 在从事“嵌入式软件开发”和“Autosar工具开发软件”过程中,经常会在其集成开发环境IDE(CodeWarrior,S32K DS,Davinci,EB Tresos,ETAS…)中,…...

华为OD机试题,用 Java 解【寻找相同子串】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…...

思腾合力深思系列 | 四款高性能 AI 服务器

深思系列 AI 服务器涵盖多种 CPU 平台&#xff0c;支持按客户需求预装 OS、驱动、DL 框架、常用 DL 库&#xff0c;节省您大量的前期调试时间&#xff0c;开机即用。 一个简单的任务&#xff0c;若想要在 AI 的脑中形成清晰的思路&#xff0c;需要大量的实验和练习。从 AI 训练…...

Vue3做出B站【bilibili】 Vue3+TypeScript+ant-design-vue【快速入门一篇文章精通系列(一)前端项目案例】

本项目分为二部分 1、后台管理系统&#xff08;用户管理&#xff0c;角色管理&#xff0c;视频管理等&#xff09; 2、客户端&#xff08;登录注册、发布视频&#xff09; Vue3做出B站【bilibili】 Vue3TypeScriptant-design-vue【快速入门一篇文章精通系列&#xff08;一&…...

2.3操作系统-进程管理:死锁、死锁的产生条件、死锁资源数计算

2.3操作系统-进程管理&#xff1a;死锁、死锁的产生条件、死锁资源数计算死锁死锁的产生条件死锁资源数计算死锁 进程管理是操作系统的核心&#xff0c;如果设计不当&#xff0c;就会出现死锁的问题。如果一个进程在等待意见不可能发生的事&#xff0c;进程就会死锁。而如果一…...

人物百科怎么建?个人百度百科创建的注意事项

百科词条根据百科类型可分为人物词条、品牌词条以及企业词条等等,对于不同类型的词条,在创建时有着不同的规则要求。 相对于品牌词条和企业词条&#xff0c;人物词条是相对有难度的一类&#xff0c;因为品牌有注册商标&#xff0c;企业有营业执照&#xff0c;都是比较容易佐证的…...

ArrayList与LinkedList的区别 以及 链表理解

list接口中ArrayList、LinkedList都不是线程安全&#xff0c;Vector是线程安全 1、数据结构不同 ArrayList是Array(动态数组)的数据结构&#xff0c;LinkedList是Link(链表)双向链表的数据结构。 2、空间灵活性 ArrayList最好指定初始容量 LinkedList是比ArrayList灵活的&a…...

电脑蓝屏怎么办?这5个技巧你必须学会

案例&#xff1a;电脑蓝屏是什么原因&#xff1f;怎么样可以解决&#xff1f; “救命&#xff01;&#xff01;&#xff01;电脑是怎么了&#xff1f;开机直接蓝屏&#xff0c;是哪里坏了吗&#xff1f;前几天电脑还是好的&#xff0c;今早一打开就是蓝屏&#xff0c;可能是之…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

轻量级Docker管理工具Docker Switchboard

简介 什么是 Docker Switchboard &#xff1f; Docker Switchboard 是一个轻量级的 Web 应用程序&#xff0c;用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器&#xff0c;使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...

Centos 7 服务器部署多网站

一、准备工作 安装 Apache bash sudo yum install httpd -y sudo systemctl start httpd sudo systemctl enable httpd创建网站目录 假设部署 2 个网站&#xff0c;目录结构如下&#xff1a; bash sudo mkdir -p /var/www/site1/html sudo mkdir -p /var/www/site2/html添加测试…...