Peta GitHub
(github.com/anvaka)- Map of GitHub adalah peta yang menempatkan lebih dari 690 ribu proyek GitHub sebagai titik; proyek dengan banyak stargazer yang sama ditempatkan lebih berdekatan
- Untuk pembuatan peta, digunakan dataset publik aktivitas event GitHub dari Google BigQuery, dengan sekitar 500 juta data star dari event antara Februari 2011 hingga Mei 2025
- Untuk menghitung hubungan antar-repositori digunakan Jaccard Similarity yang presisi; karena komputer rumahan dengan RAM 24GB tidak mencukupi, pemrosesan dilakukan selama beberapa jam di instans AWS EC2 dengan RAM 512GB
- Untuk clustering, setelah menguji beberapa algoritme, dipilih Leiden clustering; hasilnya sekitar 690 ribu proyek terbagi menjadi lebih dari 1.500 cluster
- Rendering diimplementasikan dengan kombinasi tool layout buatan sendiri serta maplibre, GeoJSON, dan tippecanoe; sebagian besar label nama negara dibuat dengan bantuan ChatGPT
Gambaran Umum Proyek
- Map of GitHub adalah peta yang memvisualisasikan lebih dari 690 ribu proyek GitHub
- Setiap titik merepresentasikan satu proyek
- Proyek-proyek yang memiliki banyak pengguna pemberi star yang sama ditempatkan lebih dekat di peta
Versi Publik
- Rilis saat ini, 10 Mei 2025: 690 ribu proyek, 1.500 cluster
- Rilis awal, 8 Mei 2023: 400 ribu proyek, 1.000 cluster
Pengumpulan Data dan Perhitungan Kemiripan
- Pada tahap pertama, diambil data tentang pengguna mana yang memberi star pada repositori mana
- Menggunakan dataset publik aktivitas event GitHub dari Google BigQuery
- Periode target adalah Februari 2011 hingga Mei 2025
- Dari proses ini diperoleh sekitar 500 juta star
- Pada tahap kedua, dihitung Jaccard Similarity yang presisi antar-setiap repositori
- Beban komputasinya terlalu besar untuk komputer rumahan dengan RAM 24GB
- Pada instans AWS EC2 dengan RAM 512GB, proses selesai dalam beberapa jam
- Metode kemiripan lain juga diuji, tetapi Jaccard menghasilkan hasil yang paling dapat dipercaya
Clustering dan Layout Peta
- Pada tahap ketiga, beberapa algoritme clustering dicoba untuk mengelompokkan repositori
- Pada akhirnya Leiden clustering paling disukai, dan sekitar 690 ribu proyek terbagi menjadi lebih dari 1.500 cluster
- Pada tahap keempat, digunakan ngraph.forcelayout buatan sendiri untuk penempatan node di dalam cluster
- Untuk penempatan global seluruh cluster, digunakan konfigurasi terpisah
Cara Rendering
- Tahap kelima adalah proses merender peta
- Berbeda dari proyek-proyek sebelumnya, digunakan maplibre agar tidak perlu membuat ulang semuanya dari nol
- Data dikonversi ke format GeoJSON
- tippecanoe digunakan untuk membuat tile
- Setelah itu, pengalaman navigasi peta dibangun
Pembuatan Label Nama Negara
- Banyak label negara yang ditampilkan di peta dibuat dengan bantuan ChatGPT
- Jika menemukan label yang salah, pengguna dapat memperbaikinya dengan klik kanan dan mengirim pull request
- System prompt untuk pembuatan label meminta agar kumpulan repositori GitHub dipandang sebagai “negara” dari komunitas pemrograman tertentu, lalu dibuat nama yang unik dan mudah diingat
- Nama harus ringkas, terdiri dari 1–3 kata
- Harus menangkap tema, teknologi, atau tujuan bersama dari kumpulan repositori tersebut
- Harus menghindari ungkapan generik seperti “JSWorld”, “UI”, “Web”, “Forge”, “Archipelago”, “Hub”, “Republic”, “Nexus”
- Tidak boleh sekadar menggabungkan nama repositori yang mirip
- Harus cukup berbeda dari nama negara lain agar langsung dapat dikenali di peta
- Input pengguna berisi
repoListdanrepoNamesOnly, dan meminta model menganalisis tema serta teknologi spesifik repositori tersebut untuk membuat nama - Jika LLM mengembalikan nama yang terlalu mirip dengan nama sebelumnya, model diminta mencoba lagi dan temperature dinaikkan untuk mendorong hasil yang lebih kreatif
Pencarian dan Desain
- Kotak pencarian diimplementasikan dengan mengindeks dump sederhana semua repositori berdasarkan huruf pertama atau penulis
- Jika mengetik
adi kolom pencarian, sistem mencari repositori yang diawaliadan menampilkannya di klien dengan fuzzy matcher - Representasi data saat ini sudah dirasa memuaskan, tetapi desain visual petanya masih belum menemukan gaya yang tepat
- Pengguna diminta berbagi pengalaman desain peta atau ide visual jika memilikinya
Lisensi
- Repositori dirilis dengan lisensi MIT
- Jika menggunakan data ini untuk pekerjaan lain, diminta untuk mempertimbangkan pemberian atribusi kepada proyek ini
1 komentar
Opini Hacker News
Entah kenapa torvalds/linux ada di Fronterra di sebelah proyek JS, daftar awesome-X, dan checklist frontend
Entah para peretas kernel tiba-tiba jatuh cinta pada frontend, atau yang lebih mungkin, orang yang menulis kode dan orang yang memberi bintang pada proyek GitHub ternyata tidak terlalu tumpang tindih
Bukan mirip karena berhubungan secara semantik, tapi cuma karena dua-duanya populer jadi terlihat mirip
Hal yang sama juga terjadi pada peta reddit: https://anvaka.github.io/map-of-reddit/ — subreddit populer semuanya jadi saling “mirip”
Meski begitu, ini masih bekerja dengan baik untuk proyek yang kecil dan kurang terkenal :D
Tapi mengingat sumber daya yang dibutuhkan untuk mengunduh setiap file dan menghitung embedding-nya, mungkin memang tidak realistis
https://xkcd.com/1138/
Tautan aslinya: https://anvaka.github.io/map-of-github/
Aku tertawa saat melihat nama wilayah Among Us adalah Sussex
Kaget juga Rustland sekecil ini. Cuma sebesar satu provinsi di dalam Clouderra
Menarik juga bahwa Bevy dan Veloren sama-sama ada di Rustland. Mungkin bintangnya lebih banyak datang dari komunitas Rust daripada komunitas game dev
Masuk akal juga kalau melihat ekosistem Rust masih relatif kecil, dan tampaknya ada banyak orang yang “melakukan X dengan Rust”
Sepertinya semua orang melebih-lebihkan ukuran gelembungnya sendiri
Jadi “X but in Rust” mungkin masuk ke sisi “X”, bukan “RustLand”
Menemukan proyekku mapbox-gl-utils di sini itu sangat menyenangkan
https://anvaka.github.io/map-of-github/#12/24.78947/18.85186
Tanpa fitur pencarian, mencoba menemukan proyek tertentu hanya dari peta jadi semacam minigame yang seru :-)
Sebagai penggemar Julia, aku heran julialang/julia punya koneksi sesedikit ini
Memang bahasa niche, tapi tampilannya yang begitu terisolasi di peta ini juga tidak sepenuhnya bertolak belakang dengan pengalaman pengguna atau pengalaman pengembangnya
julialang/julia sendiri ada dekat tensorflow dan opencv, sementara paket-paket Julia yang sebenarnya berkumpul di tempat lain, yang seolah menunjukkan perbedaan antara “calon pengguna” dan “pengguna nyata”
Banyak orang yang memberi bintang pada proyek Julia itu adalah pengguna Python komputasi numerik yang sedang mencari Python baru, tapi kebanyakan tetap bertahan di Python, jadi bintang-bintang mereka yang lain juga ada di sisi Python komputasi numerik
Sementara itu, orang-orang yang memberi bintang pada paket di JuliaLand adalah pengguna Julia sungguhan, jadi masuk akal kalau mereka berkumpul dekat Moleculandia, AstroSpace, dan Quantumia
Pendekatannya sangat rapi dan kreatif, tapi terus terang aku bimbang apakah metafora negara/peta ini yang terbaik
Dalam banyak kasus, hanya dari namanya saja tidak jelas, jadi harus diperbesar dulu untuk memahami apa yang direpresentasikan
Mungkin akan lebih menarik kalau dilakukan hierarchical clustering, lalu diberi label buatan LLM yang lebih deskriptif dan lebih setia, kemudian konektivitas rata-rata antar klaster tingkat atas ditampilkan dengan garis
Sebagai orang yang pertama kali membuat gambar seperti itu di tahun 90-an dan hampir langsung belajar batasannya, aku suka ini karena tidak membuat klaim berlebihan. Ini bukan makalah, cuma sebuah visualisasi
Aku suka diagram yang sumbunya punya makna. Garis, bentuk, kotak/grup, jarak, X versus Y, warna, ketebalan, tekstur, latar belakang, latar depan, hal-hal seperti itu
Yang sederhana juga bagus. Terlalu sering orang menggambar garis cuma demi terlihat keren tanpa makna apa pun, sementara ini cuma gambar dengan sedikit pengelompokan dan punya karakter. Bukannya bagus?
Tentu saja aku tetap suka garis, tapi tidak berarti garis selalu diperlukan di mana pun dan kapan pun
Sering kali ada beberapa cara yang sama-sama masuk akal untuk mengelompokkan data, jadi apa pun hasil akhir clustering yang dipilih tetap tidak akan sempurna
Hmm… mungkin clustering kuantum bisa jadi proyek yang menarik
Sekarang sudah agak samar, tapi aku ingat pernah mencoba algoritme hdbscan, yaitu hierarchical clustering. Pada graf sebesar GitHub, itu tidak muat di memori
Pada akhirnya yang kupakai adalah sesuatu yang mirip hierarchical clustering, campuran louvain/leiden/cara buatan sendiri, dan itulah yang muncul di peta akhir
Quitlessia dan NeoQuitlessia… nama-namanya jahat sekali
Doom Emacs ada di NeoQuitlessia, bukan Emacsia, dan anehnya itu memang masuk akal :)
Kita tidak akan keluar
Jadi penasaran bagaimana koneksi antar repositori ditentukan
Aku cek beberapa repo milikku, dan untuk sebagian koneksi tidak terlihat ada referensi ke arah mana pun
Pada dasarnya, seperti dugaan orang-orang lain, garis menunjukkan skor kemiripan tertinggi berdasarkan “orang-orang yang memberi bintang”, dan seluruh peta juga dibentuk berdasarkan itu
Ini bisa membingungkan, tapi garis hanya muncul saat sebuah negara tertentu diklik
Kurasa ada ambang batas hardcoded untuk menentukan apakah sebuah edge dibuat atau tidak. Misalnya, jika kemiripan Jaccard antara A dan B lebih besar dari 0.2, maka edge dibuat