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.
İ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.
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.
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.
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:
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 .
İlk adım bir GitHub organizasyonu kurmak ve iki depo oluşturmaktır:
İ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:
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.
Artık bir organizasyon, sorunları olan bazı depolar ve bazı yapılar mevcut olduğuna göre, otomasyon zamanı geldi.
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:
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.
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 .
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.
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:
README.md
veya .json
dosyalarından alınır; Herkes düzenleyebilir, CMS veya hesap vs. gerekmezevents
deposundaki onaylanmış ve etkinlik etiketli sorunlar)
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.
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:
Tüm bunları inşa etmek çok fazla zaman ve enerji aldı ve hala vaktim olmadığı için eksik olan pek çok şey var:
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.