paint-brush
GitHub ve Açık Topluluklar Oluşturma Sanatıby@patrickheneise
188

GitHub ve Açık Topluluklar Oluşturma Sanatı

Patrick Heneise11m2023/12/20
Read on Terminal Reader

Bu makalede açık toplulukların nasıl oluşturulabileceğine dair deneyimlerimi ve fikirlerimi paylaşıyorum. Topluluk otomasyonu için parçaları bir araya getirmek amacıyla bu konsept ve araçlar üzerinde çalışıyorum ve bunun sizin ve topluluğunuzun işleri kolaylaştırmasına yardımcı olabileceğini umuyorum.
featured image - GitHub ve Açık Topluluklar Oluşturma Sanatı
Patrick Heneise HackerNoon profile picture
0-item
1-item
2-item

Topluluklar zordur. İnşa edilmesi zor, bakımı zor ve büyümesi zor. Ancak topluluklar oluşturmak kariyerimdeki en ödüllendirici şeylerden biri oldu çünkü pek çok muhteşem insanla tanıştım ve öğrenmeye ve konfor alanımın dışında bir şeyler yapmaya zorlandım.


10 yıldan fazla bir süre önce Berlin'deki ilk küçük teknoloji konferansım olan CouchConf'a katıldığımı hatırlıyorum. Şans eseri aynı sıralarda bir BerlinJS Buluşması da vardı ve topluluk ve insanlar beni çok şaşırttı. Web sitesi için ayarlanmış bir GitHub deposu var ve konuşmalar GitHub Sorunları olarak gönderiliyor. Sürecin basitliği ve şeffaflığı beni şaşırttı, bu yüzden repoyu çatalladım ve birkaç hafta sonra BarcelonaJS'yi kurdum. Bu benim organizatörlerimin yolculuğunun başlangıcıydı.


Sıradan ve çok sinir bozucu bir deneyimin küçük bir anekdotu: Harika bir etkinlik oluşturmak için hazırlanmak, iletişim kurmak, konuşmacı bulmak ve davet etmek, tarih ve mekan bulmak ve ayarlamak, yiyecek ve içecek için sponsorlarla konuşmak için saatler harcadınız. Ve zamanı geldiğinde orada tek başınıza ya da geleceğini düşündüğünüz insanların bir kısmıyla birlikte oturuyorsunuz çünkü Meetup "150 kişi LCV yaptı" diyor. Nadiren de olsa bu, hava koşulları nedeniyle kötü şans anlamına geliyordu, ancak daha sonra insanlarla konuştuğumda daha sık şunu duydum:


Bu muhteşem, keşke orada olabilseydim ama bilmiyordum!


Bu ifade, GitHub'u bir topluluk aracı olarak keşfetmem için beni motive etti çünkü GitHub, otomasyon için en harika platformlardan biridir ve bir organizatör olarak yapmanız gereken şey de budur: etkinliği Eventbrite'ta yayınlamak için her şeyi otomatikleştirin, Meetup, Twitter, Facebook, Telegram Grupları, WhatsApp, E-posta, Takvim vb. vb. ve bunu etkinlikten 2 hafta önce, 1 hafta önce, 3 gün önce, 1 gün önce, 1 saat önce yapın ki kimse sonrasını söyleyemesin : "Bunu bilmiyordum". Çünkü sonuçta bunu kendiniz için değil toplum için yapıyorsunuz.


Seyahatlerim sırasında Meetup'ta binlerce üyenin bulunduğu Node.js ve JavaScript topluluklarıyla karşılaştım, ancak yaklaşan veya güncel tek bir etkinliğe rastlamadım. Bunun birçok nedeni olabilir, ancak bunun nedeni genellikle organizatörlerin zamanlarının olmaması veya başka şeylere yönelmiş olmalarıdır ve işleri devam ettirecek bir halef bulmanın zor olmasıdır. Meetup ve diğer platformlar toplulukların ve etkinliklerin keşfedilmesi için harikadır ancak bir organizatörün artık aktif olmaması durumunda üyelerin topluluğa ulaşmasını ve topluluğu devralmasını/canlandırmasını zorlaştırır.


Bir geliştirici olarak GitHub'da çok zaman harcıyorum ve araçlara ve iş akışlarına aşinayım, bu yüzden GitHub'u bir topluluk platformu olarak nasıl kullanacağımı araştırmaya başladım.

Topluluk Oluşturma için GitHub'u kullanmanın faydaları

Açık Kaynak ve Açık Topluluk

İlk ve en belirgin fayda, GitHub'daki halka açık depoların Açık Kaynak olmasıdır. Bu, tüm içeriğin, konuların ve tartışmaların herkese açık olduğu ve herkes tarafından çatallanabileceği, kopyalanabileceği ve yeniden kullanılabileceği anlamına gelir. Bu topluluklar için harikadır çünkü topluluk terk edilirse herkesin onu çatallayıp çalışmaya devam edebileceği anlamına gelir. Bu aynı zamanda yeni bir topluluk başlatmak istiyorsanız mevcut topluluğu çatallayıp ihtiyaçlarınıza göre uyarlayabileceğiniz anlamına da gelir.


GitHub'ta kullanıcı/ekip/kuruluş yönetimi yerleşiktir, dolayısıyla kendi başınıza herhangi bir şey oluşturmanıza gerek yoktur. Birini kuruluşa davet etmek veya kuruluşun farklı izinlerine sahip ekipler eklemek kolaydır.


Çoğumuz GitHub'ı nasıl kullanacağımızı ve siteyi günlük olarak nasıl ziyaret edeceğimizi biliyoruz, dolayısıyla veritabanı yönetimi, içerik yönetimi veya diğer araçlar için ek siteleri yer imlerine eklemeye gerek yok. GitHub Actions ile otomatikleştirilmiş görevleri bir programa göre veya isteğe bağlı olarak çalıştırabiliriz ve GitHub Pages ile topluluk web sitemizi ücretsiz olarak barındırabiliriz.

Kamuoyunda ve Şeffaflıkta İnşa Etmek

Benim için GitHub'da bir topluluk oluşturmanın en önemli faydalarından biri tam şeffaflık ve açık iletişimdir. Her şey[1] halka açıktır, dolayısıyla kimin neye erişebileceği konusunda endişelenmenize gerek yok. Bu, herkesin topluluğa katkıda bulunabileceği ve herkesin neler olup bittiğini görebileceği anlamına gelir. Bu, güven oluşturmak ve herkesi kucaklayan ve kucaklayan bir topluluk oluşturmak için harikadır.


BarcelonaJS, CDC vb. gibi topluluklarla amacım, geliştiricilerin paylaşıp bağlantı kurabileceği ücretsiz ve açık alanlar yaratmaktı/olmaktır. Ve "ücretsiz", şeffaflığın devreye girdiği yerdir. Geçmişte maddi katkılardan her zaman elimi çektim. Bir şirket sponsor olmak isterse doğrudan mekana yiyecek veya içecek sipariş edebilirdi ama ben kolaylaştırmazdım. Açık Kolektif sayesinde bu çok daha kolay hale geldi ve artık mali katkıları kabul edebiliyor ve bunları topluluğa şeffaf hale getirebiliyoruz. Bunlar, örneğin alan(lar) için ödeme yapmak, yiyecek ve içecek almak, reklam kampanyaları yürütmek vb. için kullanılır.


[1] elbette, dahili organizatörlerin tartışmaları vb. için de özel bir depo oluşturabilirsiniz.

Dezavantajlar ve Uyarılar

GitHub, Meetup gibi bir Topluluk/Etkinlik Platformu değildir, dolayısıyla bazı uyarılar bulunmaktadır. Gönderileri yapılandırmak için Sorunları "Etkinlikler" veya "Konuşma Teklifleri" ve GitHub Sorun Formları olarak ele almaya alıştım. Ancak bu ideal değildir ve yeni gelenlerin "Konuşma göndermek için bir konu oluşturun" ifadesini anlaması zaman alır. Harita üzerinde tarih, konum vb. seçip yüzlerce kişiye basit bir e-posta bildirimi tetikleyecek "konfor özellikleri" yoktur.

Açık (Geliştirici) Topluluk

Bu konseptin tamamı GitHub ve IssueOps etrafında geliştiği için öncelikle geliştiricilere ve mühendislere odaklanıyor. Önceki deneyimlerim hakkında bir fikir vermek için, oluşturulmasına yardımcı olduğum birkaç topluluk ve konferansı burada bulabilirsiniz:


  • BarselonaJS , 2012 - 2018
  • Bilgisayar Korsanları ve Kurucular Barselona, 2012 - 2015
  • Node.js Barselona Buluşma Grubu, 2012 - 2018
  • Couchbase Barselona Buluşması, 2012 - 2015
  • NodeConf Barselona, 2015, 2016, 2017
  • AkdenizJS, 2015
  • KıbrısJS 2018 - 2021
  • Kıbrıs Geliştirici Topluluğu 2020 - günümüz


Bunları oluştururken organizatörlerin hayatlarını kolaylaştırmak için sürekli olarak bir dizi araç, iş akışı ve otomasyon üzerinde çalıştım çünkü bu çok zor ve çoğu zaman nankör bir iş. İşte GitHub'da nasıl halka açık bir topluluk oluşturduğuma dair Açık Topluluk Konseptim .

Etiketler ve Yapı

İlk adım bir GitHub organizasyonu kurmak ve iki depo oluşturmaktır:

  1. olaylar
  2. görüşmeler


İsimler açıktır: etkinlik havuzunda yeni etkinlikler oluşturmaya yönelik şablonlar bulunur ve konuşma havuzunda konuşma önerilerini göndermek için şablonlar bulunur. Konuşmalar bir gündem oluşturmak için etkinliklere bağlanabilir ve eğer topluluğun katılımını sağlamayı başarırsanız (unutmayın: bu zor!), 👍 veya ❤️ gibi yorumlar ve tepkiler görüşmelere oy vermek için kullanılabilir.


Teklif, planlama ve duyuru aşamaları aracılığıyla etkinlik yaşam döngüsünü yönetmek için GitHub Projesi'ni de kullanabilirsiniz:

GitHub Proje Görünümü


Kıbrıs'ta adanın farklı bölgeleri için etiketler ekledik ama en önemlisi "Onaylandı" etiketine ihtiyaç var. Tüm yeni sayılar "Etkinlik" etiketiyle oluşturulur, ancak yalnızca "öncelik belirleme" iznine sahip biri (organizatör ekibi) etkinliği "onaylayabilir". Spam'den kaçınmak ve etkinliğin alakalı olduğundan emin olmak için bu önemlidir.

GitHub Etkinlik Etiketleri


Artık bir organizasyon, sorunları olan bazı depolar ve bazı yapılar mevcut olduğuna göre, otomasyon zamanı geldi.

GitEvents

GitHub'daki GitEvents / GitEvents'in geçmişi çok eskilere (2014) dayanıyor ve London Node User Group (LNUG) ile Barccelona Node.js Group arasında bir "hack haftasonu" işbirliği olarak gitup adıyla başladı. O zamanlar GitHub Eylemleri mevcut değildi ve Meetup.com verilerine dayalı GitHub Barındırılan web siteleri için yapılandırılmış veriler oluşturmak amacıyla sorunlar için Web Kancalarını kullanmaya çalıştık. Kurulum hantaldı ve proje bir süreliğine terk edildi.


Günümüzde GitEvents , sorun iş akışlarını otomatikleştirmeye yönelik basit bir GitHub Eylemleri kümesidir. Buluşmalar ve etkinlikler için "Git Ops". İhtiyaç duyulan tek şey bir GitHub Organizasyonu ve bir GitHub Uygulamasıdır. Özelliklerden bazıları şunlardır:


  • Kapsayıcı Organizasyon : GitHub depolarıyla, sorunlarla veya tartışmalarla herhangi bir etkileşim, kullanıcıyı GitHub organizasyonuna davet etmek ve onları "Topluluk Üyeleri" ekibine eklemek için bir iş akışını tetikler. İzinler halka açık izinlerle aynıdır, ancak küçük bir "büyüme ve katılım hilesi", sorunlarda tüm topluluk üyelerinden @-bahsetmenize olanak tanır. Bu, duyurular için harikadır ancak kötüye kullanılmamalıdır, aksi takdirde üyelerinizi hızla kaybedersiniz.
  • Sayı Şablonları : GitEvents'i hızlı bir şekilde kullanmaya başlamak için etkinlikler, konuşmalar, davranış kuralları yanıtları vb. için bir dizi basit şablon hazırladım.
  • Yayın : üyelere e-posta gönderme/tweetleme/bluesky gönderme, Discord, EventBrite, Meetup vb.'de etkinlikler oluşturma/güncelleme gibi pazarlama ve ortak görevleri otomatikleştirmek için yeniden kullanılabilen GitHub İş Akışlarıdır.
  • ICS : olaylar için iCal dosyaları oluşturmaya yönelik bir GitHub Eylemidir. iCal takvim etkinlikleri için bir standarttır. İnsanlar topluluk etkinliklerinden haberdar olmak için bunu takvimlerine abonelik olarak ekleyebilirler. İnsanların basit bir bağlantıyla takvime abone olabilmesi için github dosyasına bir yönlendirme oluşturduk: https://calendar.cdc.cy .


Her şey "tak ve çalıştır" olduğundan beğendiğiniz Eylemleri seçebilirsiniz ve bunları bir iş akışı halinde oluşturmak nispeten kolaydır. Örnekler için Kıbrıs Geliştirici Topluluğu İş Akışlarına göz atın.


GitEvents'i kullanmaya başlamak istiyorsanız ve yardıma ihtiyacınız varsa lütfen Discord Sunucumuza ulaşın. GitEvents'in çalışmaları devam ediyor ve özellikle diğer platformlara entegrasyon vb. konularda her zaman yapılacak çok şey var. Yardım etmek istiyorsanız lütfen temasta olmak.

GitHub Sayı Formları

Sayı Formları GitHub'da hâlâ nispeten az bilinen bir özelliktir. Normal Markdown şablonları yerine form yapılandırmasıyla birlikte bir YAML dosyası sağlanabilir .

GitHub Sayı Formu


Yapılandırılmış girdi elde etmek oldukça güzel, ancak bir kez "Sorun" olarak kaydedildiğinde veriler anlamsal olarak işe yaramaz çünkü bu yalnızca Markdown'dır. Bir soruna tarihler, konumlar vb. gibi anlamsal bilgiler eklemek için Kilometre Taşları, İşaretleme başlıkları, Etiketler vb. ile deneyler yaptım, ancak hiçbir şey işe yaramadı. Böylece GitHub Issue Forms Body Parser'ı oluşturmaya başladım. Bu, tarihleri, bağlantıları, görüntüleri, listeleri vb. ayıklamak ve bunları yapılandırılmış JSON verilerine dönüştürmek için bir form aracılığıyla oluşturulan bir sorunun ayrıştırılmasına yardımcı olur. Bu doğrudan Discord, EventBrite, Meetup vb. gibi diğer platformlara aktarılabilir veya postalarda, tweet'lerde vb. kullanılabilir.


Sayı Formları Gövde Ayrıştırıcısı, herhangi bir Markdown metnini ayrıştırmak için npm bir kitaplık olarak da mevcuttur . Kısa bir süre önce README.md dosyalarının tamamının bir web sitesine ilişkin verileri yapılandırmak için ayrıştırılabileceğini fark ettim:


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


Bu, bir havuzun main dalından dosya içeriğini almak için kullanılan sorgudur ve bunu "gövde ayrıştırıcısına" iletebilirsiniz:

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


Topluluk açıklamanızın başka bir kopyasını saklamak yerine artık README.md dosyasından About bölümünü alıp web sitenizde kullanabilirsiniz.

GraphQL API'si

En son https://cdc.cy web sitesiyle Sorunlar, README.md dosyaları ve yapılandırılmış JSON verileriyle neyin mümkün olabileceğini keşfetmek ve sınırlarını zorlamak istedim ve sonuçtan oldukça memnunum:


  • web sitesi içeriğinin çoğu GitHub'daki README.md veya .json dosyalarından alınır; Herkes düzenleyebilir, CMS veya hesap vs. gerekmez
  • yaklaşan ve geçmiş etkinlikler GitHub sorunlarına dayanmaktadır ( events deposundaki onaylanmış ve etkinlik etiketli sorunlar)
  • organizatörler GitHub Ekip Üyelerinden alınır
  • Olaylara "ortak konumlar" dosyasındaki uygun konum verileriyle açıklama eklenebilir/geliştirilebilir
  • Konuşmacı profilleri tamamen GitHub Kullanıcı Profillerini temel alır; avatarları, biyografiyi (benioku), konumu vb. alabilir ve güzel konuşmacı profili sayfaları oluşturabiliriz
  • "Kuruluşun üye sayısı", "geçmiş/gelecek etkinlik sayısı" gibi bazı istatistikleri görüntüleyebiliriz.


Bu özelliklerin tümü GraphQL API aracılığıyla ve Markdown dosyalarının gövde ayrıştırıcıyla ayrıştırılmasıyla mümkün oldu.

Özet ve Görünüm

Bir süredir bu konsept üzerinde çalışıyorum ve hala arada bir şekil değiştiriyor. Ancak BerlinJS'den benimsediğim temel fikirler değişmedi:


  • Açık Topluluk : Her şey halka açık ve şeffaftır ve herkes memnuniyetle karşılanır (Davranış Kurallarına uydukları sürece)
  • Etkinlikler ve Konuşmalar/Teklifler bir arşivdeki konulardır
  • Etiketler yapı ve otomasyona yardımcı olur


Tüm bunları inşa etmek çok fazla zaman ve enerji aldı ve hala vaktim olmadığı için eksik olan pek çok şey var:

  • programlar, hatırlatıcılar vb. ile uygun e-posta entegrasyonu.
  • EventBrite entegrasyonunu sonlandırın
  • Meetup entegrasyonunu ekle
  • WhatsApp/Telegram/Slack entegrasyonunu ekleyin
  • Sorunların ele alınmasını ve otomatik yorumları iyileştirin (ör. Davranış Kuralları hatırlatıcısı, takip hatırlatıcısı vb.)


Bunun size ve topluluğunuza yardımcı olabileceğini düşünüyorsanız ve bulmacanın parçalarını bir araya getirmeye dahil olmak istiyorsanız, lütfen gitevents Discord Sunucusuna , GitHub Tartışmalarına veya doğrudan GitHub Sorunlarından birine ulaşın.


Kıbrıs'ta veya Barselona'daysanız lütfen yerel geliştirici gruplarına katılın ve onları destekleyin.

Rastgele Düzenleyicilerin Kişisel Deneyimlerden Düşünceleri, İpuçları ve Püf Noktaları

  • Mekanlar: Mekan olarak bir şirket ofisini seçmek kolaydır ancak birçok dezavantajı vardır. İnsanları ofise getirdiğinizde onları manipüle etmek kolaydır (havalı yerimize bakın, hatta bir kokteyl barımız bile var!). Şirketin sizden farklı amaçları olduğunu unutmayın (işe alma, pazarlama vb.). Bazen insanların rakiplerin ofisini ziyaret etmelerine izin verilmemesi gibi anlaşmazlıklar bile yaşanabilir. Mümkünse "nötr" ortak çalışma ve etkinlik alanlarını tercih ediyorum ve Open Collective sayesinde herkes için adil (işe alma/pazarlama/vb) kurallarla mekanın ödemesini yapacak sponsorluklar alabilirsiniz.
  • Hatırlatmalar: Hepimiz meşgulüz ve bazı şeyleri unutmak kolaydır. Herkes etkinlik konusunda sizin kadar meşgul, motive ve heyecanlı olmayabilir, bu nedenle düzenli hatırlatmalar insanların ilgisini canlı tutar ve bir alışkanlık oluşturmalarına yardımcı olur. Hatırlatıcılar için iyi bir tempo bulun ve bunu abartıp insanlara spam göndermeyin. Farklı medya farklı insanlar için işe yarar, bu yüzden mümkün olduğunca çok sayıda konuyu ele almaya çalışıyorum.
  • Kıtlık "Etkinliği gerçekleşmeden sadece bir hafta önce duyurmanın ve sınırlı sayıda koltuğa sahip olmanın, 100'den fazla kapasiteyle bir ay önceden yayınlamaktan daha iyi sonuç verdiğini fark ettim" – Dmitry Zaets, BarcelonaJs
  • Avantajları: "Çekilişler eğlencelidir ve konferanslara ve diğer etkinliklere bilet vermek, katılım için güzel bir avantaj olabilir" – Dmitry Zaets, BarcelonaJs
  • Tutarlılık: "Başlangıçtan itibaren gerçekçi bir program oluşturun. İster aylık bir toplantı ister üç aylık bir konferans olsun, tutarlılık çok önemlidir. Bir yol haritası oluşturun, sorumlulukları dağıtın ve plana sadık kalın. Bu yalnızca kitlenizin ilgisini canlı tutmakla kalmaz, aynı zamanda oluşturmanıza da yardımcı olur. güvenilir bir topluluk." – Federico Rampazzo, CDC.cy
  • Konuşmacı Bulma: "İçgörülerini paylaşmaya istekli olabilecek uzmanlara yaklaşmaktan korkmayın. Üyelerinizin çoğunun paylaşmaya değer ilginç hikayeleri olması muhtemeldir! Bu, topluluk için olduğu kadar onlar için de zenginleştirici bir deneyim olabilir. Etkinliklerin fotoğraf, video, ses kaydının alınması değerlidir ve konuşmacılara konuşma kariyerlerinde yardımcı olmanın yanı sıra etkinliğin ulaşılabilirliğini de arttırır." – Federico Rampazzo, CDC.cy