4 poin oleh GN⁺ 2024-12-16 | 1 komentar | Bagikan ke WhatsApp
  • 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

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 repoList dan repoNamesOnly, 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 a di kolom pencarian, sistem mencari repositori yang diawali a dan 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

 
GN⁺ 2024-12-16
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

    • Kemiripan Jaccard sepertinya kurang bagus untuk proyek “selebritas”
      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
    • Jadi penasaran apakah embedding kode akan lebih baik untuk mengelompokkan proyek
      Tapi mengingat sumber daya yang dibutuhkan untuk mengunduh setiap file dan menghitung embedding-nya, mungkin memang tidak realistis
    • Mungkin alasannya mirip dengan kenapa heatmap sering kali pada praktiknya menjadi peta populasi
      https://xkcd.com/1138/
    • Karena react?
  • Tautan aslinya: https://anvaka.github.io/map-of-github/

    • Betul, yang seharusnya ditautkan itu ini, bukan repositorinya
  • Aku tertawa saat melihat nama wilayah Among Us adalah Sussex

    • Yang paling lucu yang pernah kulihat adalah Lispaña
  • 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”

    • Kaget juga nodelandia sekecil ini dan bahkan bukan benua tersendiri
      Sepertinya semua orang melebih-lebihkan ukuran gelembungnya sendiri
    • Ada banyak proyek Rust pengembangan sistem operasi yang terlihat di dekat kernel-kernel lain di “PlusPlus Nation”
      Jadi “X but in Rust” mungkin masuk ke sisi “X”, bukan “RustLand”
    • Sebenarnya tidak terlalu mengejutkan. Rust juga dikenal sebagai bahasa yang diinjili oleh minoritas yang sangat vokal
    • Menurut OP, datanya berdasarkan Maret 2023, jadi banyak proyek Rust yang lebih baru mungkin belum masuk
    • Tetap saja, senang melihat bevy ada di situ :)
  • 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 :-)

    • Atau mulai dari satu proyek lalu mencari jalan ke proyek lain. Bisa dibayangkan seperti ada rute pelayaran :)
  • 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

    • Ada JuliaLand di sebelah barat pulau tempat julialang/julia berada
      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

    • Justru aku senang terkejut karena ini bukan gambar berat yang penuh garis ke mana-mana
      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
    • Sampai sekarang masih belum menemukan algoritme clustering universal
      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
    • Bisa saja begitu, tapi proyek ini memang memutuskan untuk membuat peta
  • Quitlessia dan NeoQuitlessia… nama-namanya jahat sekali
    Doom Emacs ada di NeoQuitlessia, bukan Emacsia, dan anehnya itu memang masuk akal :)

    • Hahaha! Aku cinta vim
      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

    • Penulisnya menjawab di postingan HN asli: https://news.ycombinator.com/item?id=35933981
      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
    • Sudah tertulis di baris pertama: “Titik-titik yang punya banyak pemberi bintang yang sama akan saling berdekatan”
    • Kemiripan Jaccard mengembalikan nilai antara 0 dan 1. Dalam kasus ini kebanyakan nilainya mungkin akan mendekati 0
      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