paint-brush
GitHub và nghệ thuật xây dựng cộng đồng mởtừ tác giả@patrickheneise
194 lượt đọc

GitHub và nghệ thuật xây dựng cộng đồng mở

từ tác giả Patrick Heneise11m2023/12/20
Read on Terminal Reader

dài quá đọc không nổi

Trong bài viết này, tôi chia sẻ kinh nghiệm và ý tưởng của mình về cách xây dựng cộng đồng mở. Tôi đang nghiên cứu khái niệm và công cụ này để ghép mọi thứ lại với nhau nhằm tự động hóa cộng đồng và tôi hy vọng điều này có thể giúp bạn và cộng đồng của bạn khiến mọi việc trở nên dễ dàng hơn.
featured image - GitHub và nghệ thuật xây dựng cộng đồng mở
Patrick Heneise HackerNoon profile picture
0-item
1-item
2-item

Cộng đồng thật khó khăn. Chúng khó xây dựng, khó duy trì và khó phát triển. Tuy nhiên, xây dựng cộng đồng là một trong những điều bổ ích nhất trong sự nghiệp của tôi, bởi vì tôi đã gặp rất nhiều người tuyệt vời và buộc phải học hỏi cũng như làm những việc ngoài vùng an toàn của mình.


Tôi nhớ hơn 10 năm trước, tôi đã tham dự hội nghị công nghệ nhỏ đầu tiên của mình - CouchConf ở Berlin. May mắn thay, có một Cuộc gặp gỡ BerlinJS diễn ra cùng thời điểm và tôi đã rất ấn tượng với cộng đồng và mọi người. Họ có kho lưu trữ GitHub được thiết lập cho trang web và các cuộc thảo luận được gửi dưới dạng Vấn đề về GitHub. Tôi rất ngạc nhiên trước sự đơn giản và minh bạch của quy trình, vì vậy tôi đã phân nhánh repo và thành lập BarcelonaJS vài tuần sau đó. Đây là sự khởi đầu trong hành trình tổ chức của riêng tôi.


Một giai thoại nhỏ về một trải nghiệm thường xuyên và rất bực bội: Bạn đã dành hàng giờ để chuẩn bị, giao tiếp, tìm và mời diễn giả, tìm và đảm bảo ngày và địa điểm, nói chuyện với các nhà tài trợ về đồ ăn và đồ uống để cùng nhau tổ chức một sự kiện tuyệt vời. Và khi đến lúc, bạn đang ngồi đó một mình hoặc với một phần nhỏ những người mà bạn nghĩ sẽ đến, bởi vì Meetup nói "150 người trả lời CÓ". Và trong một trường hợp hiếm hoi đó chỉ là do thời tiết không may mắn, nhưng sau đó thường xuyên hơn khi nói chuyện với mọi người, tôi nghe thấy điều này:


Điều này thật tuyệt vời, tôi ước gì mình đã ở đó, nhưng tôi không biết!


Cụm từ này là động lực để tôi bắt đầu khám phá GitHub như một công cụ cộng đồng vì GitHub là một trong những nền tảng tuyệt vời nhất về tự động hóa và đó là điều bạn cần làm với tư cách là người tổ chức: tự động hóa mọi thứ để xuất bản sự kiện trên Eventbrite, Meetup, Twitter, Facebook, Telegram Groups, WhatsApp, Email, Lịch, v.v., v.v. và thực hiện điều đó 2 tuần trước, 1 tuần trước, 3 ngày trước, 1 ngày trước, 1 giờ trước sự kiện để không ai có thể nói gì sau đó : "Tôi không biết về điều này". Bởi vì suy cho cùng, bạn không làm điều này vì bản thân mà vì cộng đồng.


Trong chuyến du lịch của mình, tôi đã gặp các cộng đồng Node.js và JavaScript trên Meetup với hàng nghìn thành viên, nhưng không có một sự kiện nào sắp diễn ra hoặc gần đây. Điều này có thể xảy ra vì nhiều lý do, nhưng thường là do ban tổ chức không có thời gian hoặc đã chuyển sang việc khác và khó tìm được người kế nhiệm để duy trì hoạt động. Meetup và các nền tảng khác rất tốt cho việc khám phá cộng đồng và sự kiện, nhưng chúng khiến các thành viên khó tiếp cận với cộng đồng trong trường hợp người tổ chức không còn hoạt động và tiếp quản/hồi sinh cộng đồng.


Là một nhà phát triển, tôi dành nhiều thời gian cho GitHub và quen thuộc với các công cụ cũng như quy trình làm việc, vì vậy tôi bắt đầu khám phá cách sử dụng GitHub làm nền tảng cộng đồng.

Lợi ích của việc sử dụng GitHub để xây dựng cộng đồng

Nguồn mở & Cộng đồng mở

Lợi ích đầu tiên và rõ ràng nhất là các kho lưu trữ công khai trên GitHub là Nguồn mở. Điều này có nghĩa là tất cả nội dung, vấn đề và cuộc thảo luận đều được công khai và bất kỳ ai cũng có thể phân nhánh, sao chép và sử dụng lại. Điều này rất tốt cho cộng đồng vì nó có nghĩa là nếu cộng đồng bị bỏ rơi thì bất kỳ ai cũng có thể phân nhánh và tiếp tục công việc. Điều đó cũng có nghĩa là nếu bạn muốn bắt đầu một cộng đồng mới, bạn có thể phân nhánh một cộng đồng hiện có và điều chỉnh nó cho phù hợp với nhu cầu của bạn.


GitHub đã tích hợp sẵn tính năng quản lý người dùng/nhóm/tổ chức, vì vậy bạn không cần phải tự mình xây dựng bất cứ thứ gì. Thật dễ dàng để mời ai đó vào tổ chức hoặc thêm các nhóm có các quyền khác nhau của tổ chức.


Hầu hết chúng ta đều biết cách sử dụng GitHub và truy cập trang web hàng ngày, do đó không cần phải đánh dấu trang bổ sung để quản trị cơ sở dữ liệu, quản lý nội dung hoặc các công cụ khác. Với GitHub Actions, chúng tôi có thể chạy các tác vụ tự động theo lịch trình hoặc theo yêu cầu và với Trang GitHub, chúng tôi có thể lưu trữ trang web cộng đồng của mình miễn phí.

Xây dựng công khai và minh bạch

Đối với tôi, một trong những lợi ích quan trọng nhất của việc xây dựng cộng đồng trên GitHub là tính minh bạch hoàn toàn và giao tiếp cởi mở. Mọi thứ[1] đều công khai nên không cần phải lo lắng về việc ai có quyền truy cập vào nội dung gì. Điều này có nghĩa là bất kỳ ai cũng có thể đóng góp cho cộng đồng và bất kỳ ai cũng có thể xem điều gì đang diễn ra. Điều này rất tốt cho việc xây dựng lòng tin và xây dựng một cộng đồng hòa nhập và chào đón tất cả mọi người.


Mục tiêu của tôi với các cộng đồng như BarcelonaJS, CDC, v.v. là tạo ra không gian mở và miễn phí để các nhà phát triển chia sẻ và kết nối. Và "miễn phí" là nơi cần có sự minh bạch. Trước đây, tôi luôn tránh xa việc đóng góp tài chính. Nếu một công ty muốn tài trợ, họ có thể đặt đồ ăn hoặc đồ uống trực tiếp đến địa điểm, nhưng tôi sẽ không tạo điều kiện. Nhờ có Open Collective , việc này đã trở nên dễ dàng hơn nhiều và giờ đây chúng tôi có thể chấp nhận các khoản đóng góp tài chính và làm cho chúng trở nên minh bạch với cộng đồng. Ví dụ: chúng được sử dụng để thanh toán cho (các) tên miền, mua đồ ăn và đồ uống, chạy chiến dịch quảng cáo, v.v.


[1] tất nhiên, bạn cũng có thể tạo một kho lưu trữ riêng cho các cuộc thảo luận của người tổ chức nội bộ, v.v.

Hạn chế & Hãy cẩn thận

GitHub không phải là Nền tảng cộng đồng/sự kiện như Meetup, vì vậy có một số lưu ý. Tôi đã quen với việc coi Vấn đề là "Sự kiện" hoặc "Đề xuất thảo luận" và Biểu mẫu vấn đề GitHub để cấu trúc nội dung gửi. Nhưng nó không lý tưởng và cần có thời gian để người mới hiểu "Tạo vấn đề để gửi bài nói". Không có "tính năng tiện lợi" nào để chọn ngày, vị trí trên bản đồ, v.v. và kích hoạt thông báo email đơn giản tới hàng trăm người.

Cộng đồng mở (nhà phát triển)

Toàn bộ khái niệm này chủ yếu tập trung vào các nhà phát triển và kỹ sư vì nó phát triển dựa trên GitHub và IssueOps. Để đưa ra ý tưởng về kinh nghiệm trước đây của tôi, đây là một số cộng đồng và hội nghị mà tôi đã giúp xây dựng:


  • BarcelonaJS , 2012 - 2018
  • Tin tặc & Người sáng lập Barcelona, 2012 - 2015
  • Nhóm gặp gỡ Node.js Barcelona, 2012 - 2018
  • Cuộc gặp gỡ Couchbase Barcelona, 2012 - 2015
  • NodeConf Barcelona, 2015, 2016, 2017
  • Địa Trung HảiJS, 2015
  • SípJS 2018 - 2021
  • Cộng đồng nhà phát triển Síp 2020 - hiện tại


Trong khi xây dựng những thứ này, tôi đã liên tục làm việc trên một bộ công cụ, quy trình làm việc và tự động hóa để giúp cuộc sống của những người tổ chức trở nên dễ dàng hơn vì đó là một công việc khó khăn và thường không được cảm ơn. Vì vậy, đây là Khái niệm Cộng đồng Mở của tôi về cách tôi xây dựng một cộng đồng công khai trên GitHub.

Nhãn & Cấu trúc

Bước đầu tiên là thành lập tổ chức GitHub và tạo hai kho lưu trữ:

  1. sự kiện
  2. cuộc nói chuyện


Những cái tên này rất rõ ràng: trong kho sự kiện là các mẫu để tạo sự kiện mới và trong kho lưu trữ các cuộc thảo luận là các mẫu để gửi đề xuất thảo luận . Các cuộc thảo luận có thể được liên kết với các sự kiện để xây dựng chương trình nghị sự và nếu bạn thu hút được sự tham gia từ cộng đồng (hãy nhớ: thật khó!), các nhận xét và phản ứng như 👍 hoặc ❤️ có thể được sử dụng để bỏ phiếu cho các cuộc thảo luận.


Bạn cũng có thể sử dụng Dự án GitHub để quản lý vòng đời sự kiện thông qua các giai đoạn đề xuất, lên lịch và thông báo:

Xem dự án GitHub


Ở Síp, chúng tôi đã thêm nhãn cho các khu vực khác nhau trên đảo, nhưng quan trọng nhất là cần có nhãn "Đã phê duyệt". Tất cả các vấn đề mới được tạo với nhãn "Sự kiện", nhưng chỉ người nào có quyền "phân loại" (nhóm tổ chức) mới có thể "phê duyệt" sự kiện. Điều này rất quan trọng để tránh thư rác và đảm bảo sự kiện có liên quan.

Nhãn sự kiện GitHub


Bây giờ đã có một tổ chức, một số kho lưu trữ có vấn đề và một số cấu trúc đã sẵn sàng, đã đến lúc tự động hóa.

GitSự kiện

GitEvents / GitEvents trên GitHub đã quay trở lại (2014) và bắt đầu với cái tên gitup như một sự hợp tác "hack cuối tuần" giữa Nhóm người dùng nút London (LNUG) và Nhóm Barccelona Node.js. Trước đó, GitHub Actions chưa tồn tại và chúng tôi đã cố gắng sử dụng Webhooks để giải quyết các vấn đề nhằm xây dựng dữ liệu có cấu trúc cho các trang web được lưu trữ trên GitHub dựa trên dữ liệu Meetup.com. Việc thiết lập rất phức tạp và dự án đã bị bỏ dở một thời gian.


Ngày nay, GitEvents là một tập hợp các Hành động GitHub đơn giản để tự động hóa quy trình xử lý sự cố. "Git Ops" dành cho các cuộc gặp gỡ và sự kiện. Tất cả những gì cần thiết là Tổ chức GitHub và Ứng dụng GitHub. Một số tính năng là:


  • Tổ chức toàn diện : Bất kỳ tương tác nào với kho lưu trữ GitHub, sự cố hoặc cuộc thảo luận sẽ kích hoạt quy trình làm việc để mời người dùng vào tổ chức GitHub và thêm họ vào nhóm "Thành viên cộng đồng". Các quyền cũng giống như đối với công chúng, nhưng có một chút "bí quyết tăng trưởng và tương tác" là bạn có thể @-đề cập đến tất cả thành viên cộng đồng trong các vấn đề. Điều này rất tốt cho việc thông báo nhưng không nên lạm dụng, nếu không bạn sẽ nhanh chóng mất thành viên.
  • Mẫu vấn đề : Tôi tập hợp một tập hợp các mẫu đơn giản cho các sự kiện, buổi nói chuyện, câu trả lời về quy tắc ứng xử, v.v. để nhanh chóng bắt đầu với GitEvents.
  • Broadcast : là các Quy trình công việc GitHub có thể tái sử dụng để tự động hóa hoạt động tiếp thị và các tác vụ phổ biến như gửi email/tweet/blueskying thành viên, tạo/cập nhật sự kiện trên Discord, EventBrite, Meetup, v.v.
  • ICS : là Hành động GitHub để tạo tệp iCal cho các sự kiện. iCal là một tiêu chuẩn cho các sự kiện lịch. Mọi người chỉ có thể thêm phần này dưới dạng đăng ký vào lịch của mình để cập nhật các sự kiện cộng đồng. Chúng tôi đã tạo một chuyển hướng đến tệp github để mọi người có thể đăng ký lịch bằng một liên kết đơn giản: https://calendar.cdc.cy .


Mọi thứ đều "cắm và chạy" nên bạn có thể chọn Hành động mình thích và việc kết hợp chúng thành quy trình làm việc tương đối dễ dàng. Để biết ví dụ, hãy xem Quy trình làm việc của Cộng đồng nhà phát triển Síp .


Nếu bạn muốn bắt đầu với GitEvents và cần một số trợ giúp, vui lòng liên hệ với Máy chủ Discord của chúng tôi. GitEvents là một công việc đang được tiến hành và luôn có nhiều việc phải làm , đặc biệt là với việc tích hợp với các nền tảng khác, v.v. Nếu bạn muốn trợ giúp, vui lòng liên lạc.

Biểu mẫu phát hành GitHub

Biểu mẫu phát hành vẫn là một tính năng tương đối ít được biết đến trên GitHub. Thay vì các mẫu Markdown thông thường, tệp YAML có thể được cung cấp cấu hình biểu mẫu.

Biểu mẫu phát hành GitHub


Điều này khá thú vị để có được đầu vào có cấu trúc, nhưng sau khi được lưu dưới dạng "Vấn đề", dữ liệu sẽ vô dụng về mặt ngữ nghĩa vì đó chỉ là Markdown. Tôi đã thử nghiệm với Cột mốc, tiêu đề Markdown, Nhãn, v.v. để thêm thông tin ngữ nghĩa như ngày, vị trí, v.v. vào một vấn đề, nhưng không có gì hoạt động tốt. Vì vậy, tôi bắt đầu xây dựng GitHub Issue Forms Body Parser . Điều này giúp phân tích cú pháp một vấn đề được tạo thông qua một biểu mẫu để trích xuất ngày tháng, liên kết, hình ảnh, danh sách, v.v. và chuyển đổi chúng thành dữ liệu JSON có cấu trúc. Điều này có thể được chuyển trực tiếp sang các nền tảng khác như Discord, EventBrite, Meetup, v.v. hoặc được sử dụng trong gửi thư, tweet, v.v.


Trình phân tích nội dung biểu mẫu phát hành cũng có sẵn trên npm dưới dạng thư viện để phân tích bất kỳ văn bản Markdown nào. Chỉ gần đây tôi mới nhận ra toàn bộ tệp README.md có thể được phân tích cú pháp để cấu trúc dữ liệu cho một trang web:


 query ($organization: String!, $repository: String!) { repository(owner: $organization, name: $repository) { id name object(expression: "main:README.md") { ... on Blob { text } } } }


Đây là truy vấn để truy xuất nội dung tệp từ nhánh main của kho lưu trữ và bạn có thể chuyển nội dung đó vào "trình phân tích cú pháp nội dung":

const structuredData = await bodyParser(readmeFile()?.repository.object.text)


Thay vì giữ lại một bản sao mô tả cộng đồng của bạn, giờ đây bạn có thể tìm nạp phần About từ tệp README.md và sử dụng nó trên trang web của mình.

API đồ thịQL

Với trang web https://cdc.cy mới nhất, tôi muốn khám phá và vượt qua ranh giới về những gì có thể làm được với Sự cố, tệp README.md và dữ liệu JSON có cấu trúc và tôi khá hài lòng với kết quả này:


  • hầu hết nội dung trang web được lấy từ các tệp README.md hoặc .json trên GitHub; mọi người đều có thể chỉnh sửa, không cần CMS hoặc tài khoản, v.v.
  • các sự kiện sắp tới và trong quá khứ dựa trên các vấn đề của GitHub (các vấn đề được phê duyệt và gắn nhãn sự kiện trên kho lưu trữ events )
  • người tổ chức được lấy từ Thành viên nhóm GitHub
  • Các sự kiện có thể được chú thích/nâng cao bằng dữ liệu vị trí thích hợp từ tệp "vị trí chung"
  • Hồ sơ diễn giả hoàn toàn dựa trên Hồ sơ người dùng GitHub, chúng tôi có thể tìm nạp hình đại diện, tiểu sử (readme), vị trí, v.v. và xây dựng các trang hồ sơ diễn giả đẹp mắt
  • Chúng tôi có thể hiển thị một số số liệu thống kê như "số lượng thành viên của tổ chức", "số sự kiện trong quá khứ/sắp tới", v.v.


Tất cả các tính năng này đều có thể thực hiện được thông qua API GraphQL và bằng cách phân tích cú pháp các tệp Markdown bằng trình phân tích cú pháp nội dung.

Tóm tắt & Triển vọng

Tôi đã nghiên cứu ý tưởng này được một thời gian và thỉnh thoảng nó vẫn thay đổi hình dạng. Nhưng những ý tưởng cơ bản tôi áp dụng từ BerlinJS vẫn không thay đổi:


  • Cộng đồng mở : mọi thứ đều công khai và minh bạch và mọi người đều được chào đón (miễn là họ tuân theo Quy tắc ứng xử)
  • Sự kiện và Cuộc trò chuyện/Đề xuất là các vấn đề trong kho lưu trữ
  • Nhãn giúp cấu trúc và tự động hóa


Việc xây dựng tất cả những thứ này đã tiêu tốn rất nhiều thời gian và sức lực và vẫn còn thiếu rất nhiều thứ mà tôi không có thời gian để làm:

  • tích hợp email thích hợp với lịch trình, lời nhắc, v.v.
  • hoàn tất việc tích hợp EventBrite
  • thêm tích hợp Meetup
  • thêm tích hợp WhatsApp/Telegram/Slack
  • cải thiện việc xử lý vấn đề và nhận xét tự động (ví dụ: nhắc nhở về Quy tắc ứng xử, nhắc nhở theo dõi, v.v.)


Nếu bạn cho rằng điều này có thể giúp ích cho bạn và cộng đồng của bạn cũng như muốn tham gia vào việc ghép các câu đố lại với nhau, vui lòng liên hệ trên Máy chủ Discord của gevents , trên Thảo luận GitHub hoặc trực tiếp trên một trong các Vấn đề của GitHub .


Nếu bạn ở Síp hoặc Barcelona , vui lòng tham gia và hỗ trợ các nhóm nhà phát triển địa phương.

Suy nghĩ, mẹo và thủ thuật của người tổ chức ngẫu nhiên từ kinh nghiệm cá nhân

  • Địa điểm: chọn văn phòng công ty làm địa điểm thì dễ dàng nhưng lại có nhiều hạn chế. Thật dễ dàng để thao túng mọi người khi bạn đã có họ ở văn phòng (hãy nhìn vào nơi tuyệt vời của chúng tôi, chúng tôi thậm chí còn có một quầy bar phục vụ cocktail!). Hãy nhớ rằng công ty có những động cơ khác với bạn (tuyển dụng, tiếp thị, v.v.). Đôi khi thậm chí có thể xảy ra xung đột, khiến mọi người không được phép đến văn phòng của đối thủ cạnh tranh. Nếu có thể, tôi thích không gian làm việc chung và sự kiện "trung lập" hơn và nhờ Open Collective, bạn có thể nhận được tài trợ để trả tiền cho địa điểm với các quy tắc công bằng (tuyển dụng/tiếp thị/v.v.) cho mọi người.
  • Nhắc nhở: tất cả chúng ta đều bận rộn và rất dễ quên mọi thứ. Không phải ai cũng tham gia, có động lực và tâm lý về sự kiện như bạn, vì vậy, những lời nhắc nhở thường xuyên sẽ giúp mọi người tham gia và giúp xây dựng thói quen. Tìm một nhịp độ phù hợp cho lời nhắc và đừng lạm dụng nó và gửi thư rác cho mọi người. Các phương tiện truyền thông khác nhau phù hợp với những người khác nhau, vì vậy tôi cố gắng đưa tin càng nhiều càng tốt.
  • Sự khan hiếm "Tôi nhận thấy rằng việc thông báo sự kiện chỉ một tuần trước khi nó diễn ra và việc có số lượng chỗ ngồi hạn chế sẽ hiệu quả hơn việc phát hành trước một tháng với hơn 100 suất" – Dmitry Zaets, BarcelonaJs
  • Đặc quyền: "Quà tặng rất thú vị và việc tặng vé tham dự hội nghị cũng như những nội dung khác có thể là những đặc quyền tuyệt vời khi tham dự" – Dmitry Zaets, BarcelonaJs
  • Tính nhất quán: "Thiết lập một lịch trình thực tế ngay từ đầu. Cho dù đó là cuộc họp hàng tháng hay hội nghị hàng quý, tính nhất quán là chìa khóa. Tạo lộ trình, phân bổ trách nhiệm và bám sát kế hoạch. Điều này không chỉ thu hút khán giả của bạn tham gia mà còn giúp xây dựng một cộng đồng đáng tin cậy." – Federico Rampazzo, CDC.cy
  • Tìm Diễn giả: "Đừng ngại tiếp cận các chuyên gia, những người sẵn sàng chia sẻ hiểu biết sâu sắc của họ. Rất nhiều thành viên của bạn có thể có những câu chuyện thú vị đáng chia sẻ! Đó có thể là một trải nghiệm phong phú cho họ cũng như cho cộng đồng. Việc chụp ảnh, quay phim, ghi âm sự kiện rất có giá trị và giúp ích cho các diễn giả trong sự nghiệp diễn thuyết cũng như tăng phạm vi tiếp cận của sự kiện.” – Federico Rampazzo, CDC.cy