4 पॉइंट द्वारा GN⁺ 2024-12-16 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Map of GitHub 6.9 लाख से अधिक GitHub प्रोजेक्ट्स को बिंदुओं के रूप में रखने वाला एक मानचित्र है, और जिन प्रोजेक्ट्स के common stargazer ज़्यादा हैं वे एक-दूसरे के अधिक करीब रखे जाते हैं
  • मानचित्र बनाने में Google BigQuery के GitHub activity events public dataset का उपयोग किया गया, और फ़रवरी 2011 से मई 2025 तक की events से लगभग 50 करोड़ star डेटा इस्तेमाल किया गया
  • repositories के बीच संबंध की गणना में सटीक Jaccard Similarity का उपयोग हुआ, और 24GB RAM वाले घरेलू कंप्यूटर पर यह संभव नहीं था, इसलिए 512GB RAM वाले AWS EC2 instance पर कई घंटों तक प्रोसेस किया गया
  • clustering के लिए कई algorithms आज़माने के बाद Leiden clustering चुना गया, और नतीजतन लगभग 6.9 लाख प्रोजेक्ट्स 1,500 से अधिक clusters में बँटे
  • rendering को अपने layout tool के साथ maplibre, GeoJSON, और tippecanoe के संयोजन से बनाया गया, और कई country-name labels ChatGPT की मदद से तैयार किए गए

प्रोजेक्ट अवलोकन

  • Map of GitHub GitHub के 6.9 लाख से अधिक प्रोजेक्ट्स को visualise करने वाला एक मानचित्र है
  • हर बिंदु एक project को दर्शाता है
  • जिन प्रोजेक्ट्स को common users ने star दिया है, वे मानचित्र पर एक-दूसरे के अधिक करीब रखे जाते हैं

सार्वजनिक संस्करण

डेटा संग्रह और similarity calculation

  • पहले चरण में यह लाया गया कि किस user ने किस repository को star दिया
    • Google BigQuery के GitHub activity events public dataset का उपयोग किया गया
    • लक्षित अवधि फ़रवरी 2011 से मई 2025 तक है
    • इस प्रक्रिया में लगभग 50 करोड़ stars का डेटा मिला
  • दूसरे चरण में हर repository के बीच सटीक Jaccard Similarity की गणना की गई
    • 24GB RAM वाले घरेलू कंप्यूटर के लिए यह गणना बहुत बड़ी थी
    • 512GB RAM वाले AWS EC2 instance पर यह कुछ घंटों में पूरा हुआ
    • similarity के अन्य तरीके भी आज़माए गए, लेकिन Jaccard ने सबसे भरोसेमंद परिणाम दिए

clustering और map layout

  • तीसरे चरण में repositories को समूहित करने के लिए कई clustering algorithms आज़माए गए
  • अंततः Leiden clustering को सबसे अधिक पसंद किया गया, और लगभग 6.9 लाख प्रोजेक्ट्स 1,500 से अधिक clusters में बँट गए
  • चौथे चरण में cluster के अंदर nodes की placement के लिए अपने ngraph.forcelayout का उपयोग किया गया
  • पूरे clusters की global placement के लिए अलग settings इस्तेमाल की गईं

rendering का तरीका

  • पाँचवाँ चरण मानचित्र को render करने की प्रक्रिया है
  • पिछले प्रोजेक्ट्स की तरह सब कुछ फिर से बनाने के बजाय maplibre का उपयोग किया गया
  • डेटा को GeoJSON फ़ॉर्मेट में बदला गया
  • tiles बनाने के लिए tippecanoe का उपयोग हुआ
  • इसके बाद map navigation experience तैयार किया गया

country-name labels बनाना

  • मानचित्र पर दिखने वाले कई country labels ChatGPT की मदद से बनाए गए
  • अगर कोई गलत label दिखे, तो right-click से उसे ठीक करके pull request भेजी जा सकती है
  • labels बनाने के लिए system prompt में GitHub repositories के समूह को किसी खास programming community के “देश” की तरह मानकर अलग और याद रखने में आसान नाम बनाने को कहा गया
    • नाम 1 से 3 शब्दों में संक्षिप्त होना चाहिए
    • वह repository समूह के common topic, technology, और purpose को पकड़ना चाहिए
    • “JSWorld”, “UI”, “Web”, “Forge”, “Archipelago”, “Hub”, “Republic”, “Nexus” जैसे सामान्य expressions से बचना चाहिए
    • मिलते-जुलते repository names को बस जोड़कर नाम नहीं बनाना चाहिए
    • नाम इतना अलग होना चाहिए कि मानचित्र पर दूसरे देशों के नामों से तुरंत अलग पहचाना जा सके
  • user input में repoList और repoNamesOnly शामिल होते हैं, और उन repositories के ठोस topics व technologies का विश्लेषण करके नाम बनाने को कहा जाता है
  • अगर LLM पहले के नामों से बहुत मिलता-जुलता नाम लौटाता है, तो उसे फिर से कोशिश करने को कहा जाता है और temperature बढ़ाकर अधिक creative परिणाम लाए जाते हैं

search और design

  • search box को सभी repositories के simple dump को पहले अक्षर या author के आधार पर index करके बनाया गया
  • search box में a दर्ज करने पर a से शुरू होने वाली repositories ढूँढी जाती हैं और client पर fuzzy matcher से दिखाई जाती हैं
  • अभी का data representation पसंद है, लेकिन map visual design के लिए सही style अभी भी खोजा जा रहा है
  • अगर किसी के पास map design experience या visual ideas हों, तो उन्हें साझा करने का अनुरोध है

लाइसेंस

  • repository को MIT लाइसेंस के तहत सार्वजनिक किया गया है
  • अगर डेटा को किसी और काम में उपयोग किया जाए, तो इस प्रोजेक्ट को attribution देने पर विचार करने का अनुरोध है

1 टिप्पणियां

 
GN⁺ 2024-12-16
Hacker News की रायें
  • पता नहीं क्यों torvalds/linux JS प्रोजेक्ट्स, awesome-X सूचियों और frontend checklist के बगल में Fronterra में है
    या तो kernel hackers को अचानक frontend से प्यार हो गया है, या ज्यादा संभावना यह है कि code लिखने वाले लोगों और GitHub projects को star करने वाले लोगों में बहुत कम overlap है

    • Jaccard similarity “celebrity” projects के लिए बहुत अच्छी नहीं है
      वे semantically जुड़े होने की वजह से समान नहीं दिखते, बस दोनों popular हैं इसलिए समान दिख जाते हैं
      reddit map में भी यही समस्या आई थी: https://anvaka.github.io/map-of-reddit/ — popular subreddits सब एक-दूसरे से “similar” बन जाते हैं
      फिर भी छोटे और कम प्रसिद्ध projects पर यह अब भी अच्छा काम करता है :D
    • सोचता हूँ कि projects को व्यवस्थित करने के लिए code embeddings बेहतर रहे होते क्या
      हालांकि हर file download करके embeddings calculate करने के लिए जितने resources चाहिए, उसे देखते हुए शायद यह practically मुश्किल होगा
    • शायद वही वजह है जिसकी वजह से heatmaps अक्सर असल में population maps बन जाते हैं
      https://xkcd.com/1138/
    • क्या react की वजह से?
  • असली link: https://anvaka.github.io/map-of-github/

    • सही, repository की जगह यही link होना चाहिए था
  • Among Us वाले इलाके का नाम Sussex देखकर हंसी आ गई

    • मैंने जो सबसे funny देखा वह Lispaña था
  • Rustland इतना छोटा है, यह देखकर हैरानी हुई। यह Clouderra के अंदर बस एक state जितना है
    Bevy और Veloren दोनों का Rustland में होना भी दिलचस्प है। शायद stars game development community की तुलना में Rust community से ज्यादा आए हैं
    यह समझ में आता है कि Rust ecosystem अभी भी अपेक्षाकृत छोटा है, और “X को Rust में करने वाले लोग” काफी दिखते हैं

    • nodelandia भी इतना छोटा है और ऊपर से अलग continent भी नहीं है, यह shocking है
      लगता है हर कोई अपने bubble के size को overestimate करता है
    • “PlusPlus Nation” में दूसरे kernels के पास operating system development Rust projects काफी दिख रहे हैं
      तो “X but in Rust” शायद “RustLand” में नहीं बल्कि “X” वाली तरफ जा सकता है
    • इतना surprising नहीं है। Rust को प्रचार करने वाली loud minority की language के रूप में भी जाना जाता है
    • OP के मुताबिक data March 2023 का है, इसलिए ज्यादा नए Rust projects शायद अभी ज्यादा शामिल नहीं होंगे
    • फिर भी बीच में bevy दिख रहा है, यह देखकर अच्छा लगा :)
  • अपना project mapbox-gl-utils यहाँ मिलना काफी मजेदार है
    https://anvaka.github.io/map-of-github/#12/24.78947/18.85186

  • search feature के बिना सिर्फ map से कोई खास project ढूंढना एक मजेदार mini-game बन जाता है :-)

    • या एक project से शुरू करके दूसरे project तक रास्ता खोज सकते हैं। मान सकते हैं कि समुद्री routes हैं :)
  • Julia fan के तौर पर julialang/julia से इतने कम connections देखकर हैरानी हुई
    यह niche language तो है, लेकिन इस map में इसका इतना isolated दिखना users या developers के experience से बहुत अलग भी नहीं लगता

    • जिस island पर julialang/julia है, उसके west में JuliaLand है
      julialang/julia खुद tensorflow और opencv के पास है, और actual Julia packages कहीं और इकट्ठे हैं—यह “aspirational users” और “actual users” का फर्क दिखाता लगता है
      Julia project को star करने वाले बहुत से लोग numerical computing वाले Python users थे जो नया Python ढूंढ रहे थे, लेकिन ज्यादातर Python में ही रहे, इसलिए उनके बाकी stars भी numerical computing Python side पर हैं
      वहीं JuliaLand packages को star करने वाले लोग actual Julia users हैं, इसलिए वे plausibly Moleculandia, AstroSpace, Quantumia के पास इकट्ठे हुए हैं
  • बहुत neat और creative approach है, लेकिन सच कहूँ तो country/map metaphor सबसे अच्छा है या नहीं, इस पर दुविधा है
    कई मामलों में सिर्फ नाम से साफ नहीं होता, इसलिए क्या represent हो रहा है समझने के लिए zoom करना पड़ता है
    इसके बजाय hierarchical clustering करके, ज्यादा descriptive और faithful LLM-generated labels लगाकर, फिर top-level clusters के बीच average connectivity को lines से दिखाना शायद ज्यादा interesting होता

    • मुझे उल्टा pleasantly surprised किया कि यह ढेर सारी lines वाली भारी-भरकम image नहीं है
      90s में ऐसी images पहली बार बनाकर लगभग तुरंत उनकी limits सीखने वाले व्यक्ति के तौर पर, मुझे अच्छा लगा कि यह overclaim नहीं करता। यह paper नहीं, बस एक view है
      मुझे ऐसे charts पसंद हैं जिनमें axes का meaning हो। lines, shapes, boxes/groups, distance, X versus Y, color, thickness, texture, background, foreground जैसी चीजें
      simple चीजें भी अच्छी होती हैं। अक्सर लोग बिना meaning के style के लिए lines खींच देते हैं, लेकिन यह बस कुछ groups वाली image है और इसमें character है। अच्छा नहीं है क्या?
      बेशक lines मुझे अब भी पसंद हैं, लेकिन वे हर जगह, हर समय जरूरी नहीं होतीं
    • अभी तक universal clustering algorithm नहीं मिला है
      data को group करने के कई तरीके अक्सर अपने-अपने हिसाब से सही लगते हैं, इसलिए जो भी final clustering चुनें, वह perfect नहीं होती
      हम्म… शायद quantum clustering जैसा कुछ करना एक fun project हो सकता है
      अभी थोड़ा धुंधला याद है, लेकिन hdbscan algorithm, यानी hierarchical clustering, try किया था। GitHub scale के graph में उसे memory में load नहीं किया जा सकता था
      आखिर में hierarchical clustering जैसी किसी चीज़, louvain/leiden/खुद बनाए तरीके के mix का इस्तेमाल किया, और final map में जो दिख रहा है वही उसका result है
    • ऐसा किया जा सकता था, लेकिन इस project ने map बनाने का फैसला किया था
  • Quitlessia और NeoQuitlessia… नाम बड़े wicked हैं
    Doom Emacs, Emacsia में नहीं बल्कि NeoQuitlessia में है, और आश्चर्यजनक रूप से यह सही लगता है :)

    • haha! vim से प्यार है
      हम quit नहीं करेंगे
  • सोच रहा हूँ repositories के बीच connections कैसे तय होते हैं
    मैंने अपनी कुछ repositories check कीं, और कुछ connections में किसी भी direction में reference नहीं दिखता

    • author ने original HN post में जवाब दिया था: https://news.ycombinator.com/item?id=35933981
      basically, जैसा दूसरों ने guess किया था, lines “star करने वाले लोगों” के आधार पर highest similarity scores दिखाती हैं, और पूरा map भी उसी आधार पर बना है
      यह confusing हो सकता है, लेकिन lines सिर्फ किसी particular country पर click करने पर दिखती हैं
    • पहली line में लिखा है: “अगर कई लोगों ने दोनों को common में star किया है, तो dots एक-दूसरे के पास होते हैं”
    • Jaccard similarity 0 और 1 के बीच value return करती है। इस case में ज्यादातर values 0 के करीब होंगी
      शायद edge बनाना है या नहीं तय करने के लिए कोई hardcoded threshold होगा। जैसे A और B के बीच Jaccard similarity 0.2 से ज्यादा हो तो edge बना देना