GitHub Haritası
(github.com/anvaka)- Map of GitHub, 690 binden fazla GitHub projesini noktalar olarak yerleştiren bir haritadır; ortak stargazer sayısı yüksek olan projeler birbirine daha yakın konumlandırılır
- Haritanın oluşturulmasında Google BigQuery’nin GitHub etkinlik olaylarına ait herkese açık veri kümesi kullanıldı ve Şubat 2011’den Mayıs 2025’e kadar olan olaylardan yaklaşık 500 milyon star verisi kullanıldı
- Depolar arasındaki ilişkilerin hesaplanmasında tam Jaccard Similarity kullanıldı; 24 GB RAM’li bir ev bilgisayarı yetersiz kaldığı için işlem, 512 GB RAM’li bir AWS EC2 instance’ında birkaç saat boyunca yürütüldü
- Kümeleme için çeşitli algoritmalar denendikten sonra Leiden clustering seçildi ve sonuçta yaklaşık 690 bin proje 1.500’den fazla kümeye ayrıldı
- Render işlemi, özel bir yerleşim aracı ile maplibre, GeoJSON ve tippecanoe birleştirilerek uygulandı; ülke adı etiketlerinin önemli bir kısmı ChatGPT yardımıyla oluşturuldu
Proje özeti
- Map of GitHub, 690 binden fazla GitHub projesini görselleştiren bir haritadır
- Her nokta bir projeyi temsil eder
- Ortak olarak star veren kullanıcı sayısı yüksek olan projeler haritada birbirine daha yakın yerleştirilir
Herkese açık sürümler
- Güncel sürüm, 10 Mayıs 2025: 690 bin proje, 1.500 küme
- İlk sürüm, 8 Mayıs 2023: 400 bin proje, 1.000 küme
Veri toplama ve benzerlik hesaplama
- İlk aşamada hangi kullanıcının hangi depoya star verdiği alındı
- Google BigQuery’nin GitHub etkinlik olayları için sunduğu herkese açık veri kümesi kullanıldı
- Hedef dönem Şubat 2011’den Mayıs 2025’e kadardı
- Bu süreçte yaklaşık 500 milyon star verisi elde edildi
- İkinci aşamada her depo çifti arasındaki tam Jaccard Similarity hesaplandı
- Hesaplama yükü, 24 GB RAM’li bir ev bilgisayarı için fazla büyüktü
- 512 GB RAM’e sahip bir AWS EC2 instance’ında birkaç saat içinde işlendi
- Başka benzerlik yöntemleri de denendi, ancak Jaccard en güvenilir sonuçları verdi
Kümeleme ve harita yerleşimi
- Üçüncü aşamada depoları gruplamak için çeşitli kümeleme algoritmaları denendi
- Sonunda en çok Leiden clustering tercih edildi ve yaklaşık 690 bin proje 1.500’den fazla kümeye ayrıldı
- Dördüncü aşamada küme içindeki düğümlerin yerleşimi için özel ngraph.forcelayout kullanıldı
- Kümelerin genel yerleşimi için ayrı bir yapılandırma kullanıldı
Render yöntemi
- Beşinci aşama, haritanın render edilmesi sürecidir
- Önceki projelerin aksine, tekerleği yeniden icat etmemek için maplibre kullanıldı
- Veriler GeoJSON biçimine dönüştürüldü
- Tile oluşturmak için tippecanoe kullanıldı
- Ardından harita gezinti deneyimi oluşturuldu
Ülke adı etiketlerinin oluşturulması
- Haritada gösterilen birçok ülke etiketi ChatGPT yardımıyla oluşturuldu
- Hatalı bir etiket fark ederseniz sağ tıklayarak düzeltebilir ve pull request gönderebilirsiniz
- Etiket oluşturma için kullanılan sistem prompt’u, GitHub depo gruplarını belirli bir programlama topluluğunun “ülkesi” olarak görüp özgün ve akılda kalıcı adlar üretmeyi ister
- Adlar 1–3 kelimeyle kısa olmalıdır
- İlgili depo grubunun ortak temasını, teknolojisini ve amacını yakalamalıdır
- “JSWorld”, “UI”, “Web”, “Forge”, “Archipelago”, “Hub”, “Republic”, “Nexus” gibi genel ifadelerden kaçınılmalıdır
- Benzer depo adları basitçe birleştirilmemelidir
- Harita üzerinde anında ayırt edilebilecek kadar diğer ülke adlarından farklı olmalıdır
- Kullanıcı girdisinde
repoListverepoNamesOnlybulunur; modelden bu depoların somut konularını ve teknolojilerini analiz ederek bir ad üretmesi istenir - LLM önceki ada çok benzeyen bir ad döndürürse yeniden denemesi sağlanır ve daha yaratıcı sonuçlar elde etmek için temperature artırılır
Arama ve tasarım
- Arama kutusu, tüm depoların basit bir dökümünün ilk harfe veya yazara göre indekslenmesiyle uygulandı
- Arama alanına
agirildiğindeaile başlayan depolar bulunur ve istemci tarafında bir fuzzy matcher ile gösterilir - Mevcut veri gösterimi beğeniliyor, ancak haritanın görsel tasarımı için hâlâ uygun stil aranıyor
- Harita tasarımı deneyiminiz veya görsel fikirleriniz varsa paylaşmanız isteniyor
Lisans
- Depo MIT lisansı ile yayımlandı
- Verileri başka çalışmalarda kullanırsanız bu projeye attribution vermeyi değerlendirmeniz isteniyor
1 yorum
Hacker News yorumları
Nedense torvalds/linux, JS projeleri, awesome-X listeleri ve frontend kontrol listelerinin yanındaki Fronterra’da yer alıyor
Ya çekirdek hacker’ları birden frontend’i sevmeye başladı ya da daha yüksek olasılıkla kod yazanlarla GitHub projelerine yıldız verenler pek örtüşmüyor
Anlamsal olarak ilişkili oldukları için benzer değiller; sadece ikisi de popüler olduğu için benzer görünüyorlar
reddit haritasında da aynı sorunu yaşadım: https://anvaka.github.io/map-of-reddit/ — popüler subreddit’lerin hepsi birbirine “benzer” oluveriyor
Yine de küçük ve daha az ünlü projelerde hâlâ iyi çalışıyor :D
Ama her dosyayı indirip embedding hesaplamak için gereken kaynakları düşününce muhtemelen pratik olmazdı
https://xkcd.com/1138/
Asıl bağlantı: https://anvaka.github.io/map-of-github/
Among Us bölgesinin adının Sussex olduğunu görünce güldüm
Rustland’in bu kadar küçük olmasına şaşırdım. Clouderra içinde ancak bir eyalet kadar
Bevy ve Veloren’in ikisinin de Rustland’de olması da ilginç. Muhtemelen yıldızlar oyun geliştirme topluluğundan çok Rust topluluğundan gelmiş
Rust ekosisteminin hâlâ görece küçük olduğu ve “X’i Rust ile yapanlar”ın çok göründüğü düşünülürse anlaşılır
Herkes kendi balonunun büyüklüğünü abartıyor gibi
O zaman “X but in Rust”, “RustLand”e değil “X” tarafına girebilir
Kendi projem mapbox-gl-utils’i burada bulabilmek çok eğlenceli
https://anvaka.github.io/map-of-github/#12/24.78947/18.85186
Arama özelliği olmadan, sadece haritayla belirli bir projeyi aramak eğlenceli bir mini oyuna dönüşüyor :-)
Bir Julia hayranı olarak julialang/julia’ya bu kadar az bağlantı olmasına şaşırdım
Niş bir dil ama bu haritada bu kadar izole görünmesi, kullanıcı ya da geliştirici deneyiminden çok da uzak değil gibi
julialang/julia’nın kendisinin tensorflow ve opencv yakınında olması, gerçek Julia paketlerinin ise başka yerde toplanması “umut edilen kullanıcılar” ile “gerçek kullanıcılar” arasındaki farkı gösteriyor gibi
Julia projesinin kendisine yıldız veren birçok kişi, yeni bir Python arayan sayısal hesaplama Python kullanıcılarıydı; ama çoğu Python’da kaldı, bu yüzden diğer yıldızları da sayısal hesaplama Python tarafında
Buna karşılık JuliaLand paketlerine yıldız verenler gerçek Julia kullanıcıları olduğundan, gayet makul biçimde Moleculandia, AstroSpace ve Quantumia yakınında kümelenmişler
Çok temiz ve yaratıcı bir yaklaşım, ama ülke/harita metaforunun en iyisi olup olmadığı konusunda açıkçası kararsızım
Çoğu durumda yalnızca isimden açık olmuyor; neyi temsil ettiğini anlamak için yakınlaştırmak gerekiyor
Bunun yerine hiyerarşik kümeleme yapıp, daha açıklayıcı ve sadık LLM üretimli etiketler eklemek ve üst kümeler arasındaki ortalama bağlantılılığı çizgilerle göstermek daha ilginç olabilirdi
90’larda böyle görselleri ilk yapan ve sınırlarını neredeyse hemen öğrenen biri olarak, bunun abartılı iddialarda bulunmamasını seviyorum. Bir makale değil, sadece bir görünüm
Eksenleri anlam taşıyan grafikleri severim. Çizgiler, şekiller, kutular/gruplar, mesafe, X’e karşı Y, renk, kalınlık, doku, arka plan, ön plan gibi şeyler
Basit olan da iyi. İnsanlar çok sık hiçbir anlamı olmadan havalı görünsün diye çizgi çekiyor; bu ise sadece biraz grupları olan bir görsel ve karakteri var. Güzel değil mi?
Elbette çizgileri hâlâ seviyorum, ama her zaman her yerde gerekli değiller
Veriyi gruplamanın birden fazla yolunun ayrı ayrı anlamlı olduğu durumlar sık görülüyor; bu yüzden hangi nihai kümelemeyi seçerseniz seçin kusursuz olmuyor
Hmm… belki kuantum kümeleme gibi bir şey yapmak eğlenceli bir proje olabilir
Şu an biraz bulanık hatırlıyorum ama hdbscan algoritmasını, yani hiyerarşik kümelemeyi denemiştim. GitHub ölçeğindeki grafikte belleğe sığmıyordu
Sonunda hiyerarşik kümelemeye benzer bir şey; louvain/leiden/kendi yazdığım yöntemlerin karışımını kullandım ve son haritada görünen sonuç bu
Quitlessia ve NeoQuitlessia… isimler şeytani
Doom Emacs, Emacsia’da değil NeoQuitlessia’da; şaşırtıcı biçimde mantıklı :)
Çıkmayacağız
Depolar arasındaki bağlantıların nasıl belirlendiğini merak ediyorum
Kendi depolarımdan birkaçını kontrol ettim; bazı bağlantılarda iki yönde de referans görünmüyor
Temelde başkalarının tahmin ettiği gibi, çizgiler “yıldız veren kişiler” bazında en yüksek benzerlik puanını temsil ediyor ve tüm harita da bu ölçüte göre oluşuyor
Kafa karıştırabilir: çizgiler yalnızca belirli bir ülkeye tıklandığında görünüyor
Kenar oluşturulup oluşturulmayacağını belirleyen sabit kodlanmış bir eşik olduğunu sanıyorum. Örneğin A ile B arasındaki Jaccard benzerliği 0,2’den büyükse kenar oluşturmak gibi