4 पॉइंट द्वारा GN⁺ 2023-10-20 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • CodeCrafters का BitTorrent challenge P2P फ़ाइल शेयरिंग प्रोटोकॉल को खुद implement करके सार्वजनिक रूप से उपलब्ध फ़ाइल डाउनलोड करने की प्रक्रिया कवर करता है
  • सीखने का flow bencode decoding से शुरू होकर .torrent फ़ाइल parsing, info hash calculation, peer discovery, handshake और piece download तक जाता है
  • यह बेसिक BitTorrent के 11 steps और Magnet Links के 8 steps मिलाकर कुल 19 steps से बना है
  • Step structure और instructions मुफ्त में देखे जा सकते हैं, लेकिन code submission और solutions देखने के लिए CodeCrafters Membership चाहिए
  • अगर पहले मुफ्त में try करना चाहते हैं, तो इस महीने का free challenge Build your own Shell चुन सकते हैं

BitTorrent client implementation का लक्ष्य

  • Build your own BitTorrent BitTorrent को बड़े पैमाने पर data distribution के लिए P2P फ़ाइल शेयरिंग प्रोटोकॉल के रूप में देखते हुए, उसे खुद implement करने वाला CodeCrafters challenge है
  • अंतिम लक्ष्य BitTorrent protocol से सार्वजनिक रूप से उपलब्ध फ़ाइलें डाउनलोड कर सकने वाला BitTorrent client बनाना है
  • इस प्रक्रिया में BitTorrent protocol और .torrent फ़ाइल के काम करने का तरीका भी सीखते हैं

Steps की संरचना और difficulty

उपयोग की शर्तें

  • इस challenge के लिए CodeCrafters Membership चाहिए
    • पूरी challenge structure और step instructions मुफ्त में सीखी जा सकती हैं
    • code submission और solutions देखने के लिए membership चाहिए
  • अगर आप free challenge चाहते हैं, तो इस महीने मुफ्त में उपलब्ध Build your own Shell try कर सकते हैं

1 टिप्पणियां

 
GN⁺ 2023-10-20
Hacker News की राय
  • नमस्ते! मैं Sarp हूं, Codecrafters का Build your own BitTorrent challenge बनाने वाला
    थोड़ा background बताऊं तो, FAANG वाली नौकरी से layoff होने के बाद वापस जाने की इच्छा लगभग नहीं थी, और मैंने coding में रुचि फिर से जगाने के लिए मजेदार programming projects ढूंढने शुरू किए
    digital nomad lifestyle के दौरान Nomadlist पर Codecrafters मिला, और code को Git में push करके step-by-step tests पास करने का तरीका मुझे पसंद आया। gamified progression ने focus करने में मदद की, और SQLite, Git, Redis जैसे इस्तेमाल किए हुए software को और गहराई से समझ पाया। challenge करने के लिए मैंने Go भी नए सिरे से सीखा
    site के सारे challenges खत्म करने के बाद जब करने को कुछ नहीं बचा, तो बहुत votes मिले ideas में से एक, BitTorrent client, बनाने का फैसला किया
    BitTorrent client बनाते हुए BitTorrent protocol, torrent file structure, encoding issues, network request pipelining, binary values की URL encoding, Go के channels का इस्तेमाल आदि बहुत कुछ सीखा
    challenge पर feedback लेना चाहता हूं, और सवालों के जवाब देने में भी खुशी होगी

    • invite-only trackers अक्सर अपने private tracker पर कौन-से torrent clients इस्तेमाल हो सकते हैं और कौन-से नहीं, इसे लेकर काफी सख्त rules रखते हैं। broader adoption के लिए इस barrier को कैसे पार किया जा सकता है, यह जानने की उत्सुकता है
    • जानना चाहता हूं कि BitTorrent client बनाना आपने कैसे सीखा। Codecrafters या ऐसी किताबों का idea मुझे पसंद है जो कुछ खुद बनाने के लिए guide करती हैं, लेकिन शुरुआत कहां से करूं यह न समझ आए तो हमेशा मुश्किल होती है
    • संयोग से मैंने अभी-अभी BitTorrent से जुड़ा project शुरू किया है। शायद client खुद implement नहीं करूंगा, लेकिन हो सकता है करूं भी, और कम-से-कम .torrent files और magnet links generate करना तो implement करना ही होगा, इसलिए protocol थोड़ा सीख रहा हूं
      ऐसा कुछ post हुआ है, यह रोचक है, और आगे बढ़ने में शायद मदद भी करे
    • “site के सारे challenges खत्म करने के बाद जब करने को कुछ नहीं बचा, तो बहुत votes मिले ideas में से एक BitTorrent client बनाने का फैसला किया” वाली बात देखकर, उत्सुकता है कि क्या अब आप Codecrafters में employed हैं
    • पता नहीं यह challenge itself पर feedback है या नहीं, लेकिन Cargo.toml में dependencies add न कर पाने से थोड़ी निराशा हुई
      bencode challenge के कुछ हिस्सों को nom से हल करके देखना चाहता था; शायद यह overkill choice होती, लेकिन मजे के लिए try करना था, और फिलहाल यह संभव नहीं है
      अगर remote builder के load या runtime की चिंता है, तो इस issue से बचने के लिए test cases locally run करने का तरीका मिल जाए तो अच्छा होगा
  • Jon Gjengset[1] अभी अपने YT channel[2] पर वही challenge Rust में live coding कर रहे हैं
    [1]: https://thesquareplanet.com/
    [2]: https://www.youtube.com/watch?v=jSTkEPPiULs

    • अरे, वह मैं ही हूं!
      बेहतर link https://www.youtube.com/watch?v=jf_ddGnum_4 है, इसमें chapters हैं और बीच वाला power outage वाला हिस्सा भी काट दिया गया है :p
    • जिनके लिए YouTube blocked है, उनके लिए livestream की copy Twitch पर भी है
      [0] https://www.twitch.tv/videos/1954769913
    • उन्हें coding करते देखना कमाल है। उत्सुकता है कि Rust के अलावा Python में coding करने वाले experts भी और हैं क्या
  • समझ नहीं आता login की जरूरत क्यों है। क्या यह paid tutorial है?
    free tutorials यहां हैं
    JS - https://allenkim67.github.io/programming/2016/05/04/how-to-m...
    GO - https://blog.jse.li/posts/torrent/
    Python - https://markuseliasson.se/article/bittorrent-in-python/

    • यहां के tutorials भी उपयोगी हो सकते हैं
      https://github.com/codecrafters-io/build-your-own-x
    • यह tutorial या course नहीं है, बल्कि हर step पर server-side tests वाला step-by-step guided project है
  • आखिर बिना किसी explanation के मेरे GitHub account access permission क्यों मांगे जा रहे हैं, समझ नहीं आता

    • fairness में कहें तो लिखा है कि सिर्फ email read permission मांगते हैं, लेकिन मैं भी उस step के बाद आगे नहीं बढ़ा
    • एक वजह शायद यह है कि Codecrafters एक learning site है, और user code को खुद host नहीं करता, बल्कि GitHub पर store करता है। यह article Codecrafters पर मौजूद एक project के बारे में है
      फिर भी इसकी जरूरत क्यों है, यह explain करना चाहिए
    • सामान्य email signup जैसा alternative दिए बिना, GitHub को सिर्फ authentication provider की तरह इस्तेमाल करता दिखता है। आम तौर पर ऐसी sites कई options देती हैं
    • authentication के लिए जरूरी है। original link app.codecrafters.io पर जाता है, और codecrafters.io marketing page है :)
    • structure ऐसा है कि challenge code को अपने Git पर push करने पर, उस implementation के लिए कुछ tests run होते हैं
  • अजीब बात है कि upload वाला हिस्सा गायब है। अगर यह peer है, तो बराबर का participant होने के नाते data दोनों दिशाओं में बहना चाहिए। वरना BitTorrent काम नहीं करेगा

    • सही है। challenge का scope कम रखने के लिए इसे शुरुआत में बाहर रखा था, क्योंकि यह पहले ही 11 steps का है और काफी लंबा है
      upload feature को challenge extension के रूप में जोड़ने की योजना है, और यह community में सबसे ज़्यादा votes पाने वाले extension ideas में से एक है
    • सही है, “Seeding files” एक extension feature है: https://app.codecrafters.io/vote/challenge-extension-ideas?c...
      अभी supported नहीं है, लेकिन जल्द उपलब्ध होगा, और नए extensions user votes के आधार पर जोड़े जा रहे हैं
  • अगर आप JavaScript इस्तेमाल करते हैं, तो Feross का बनाया WebTorrent है, जिसने protocol को browser tab के अंदर ला दिया
    codebase पढ़ने में सचमुच अच्छा है। कई developers code पढ़ने की तुलना में code लिखने में बेहतर होते हैं; अगर आप code reading skill को ट्रेन करना चाहते हैं, तो शुरुआत के लिए WebTorrent codebase जितनी अच्छी जगहें मैंने कम देखी हैं। पढ़ने के मज़े के मामले में मैं इसे redis जैसी league में रखता हूँ
    https://github.com/webtorrent/webtorrent

  • यह idea मुझे बहुत पसंद आया! पहले मैं Erlang सीखना चाहता था और मेरा दोस्त Crystal सीखना चाहता था, तो हमने सोचा कि पूरी तरह custom clients बनाकर एक-दूसरे के साथ files share कर सकें
    जब basic protocol और कुछ extensions के साथ files भेजना-पाना संभव हुआ, तो बहुत मज़ा आया। उन extensions को BEP कहना सही है न?
    नई language सीखने के तरीकों में शायद यह मेरा सबसे पसंदीदा तरीका है, क्योंकि यह समझने और implement करने के लिए पर्याप्त सरल है

    • CodeCrafters में Crystal support भी है। Build your own Redis कर सकते हैं
  • साल दर साल मुझे excite करने वाले छोटे project ideas कम होते जा रहे हैं, और यह उनमें से एक है
    CodeCrafters के बारे में पहली बार सुना, लेकिन database बनाने जैसे academic challenge ideas मुझे पसंद आए। compiler बनाना भी शामिल हो जाए तो अच्छा होगा

  • Go में BitTorrent client बनाने वाला article याद आया: https://blog.jse.li/posts/torrent/

  • कुछ साल पहले पिछली job में, हमने कर्मचारियों के लिए सस्ते netbooks पर इस्तेमाल करने योग्य custom Linux live OS बनाया और support किया था
    updates distribute करने के लिए हमने internal torrent server scratch से बनाया, और image updates distribute करने में उसका इस्तेमाल किया
    standards के मुताबिक software बनाने और उसे default clients के साथ काम कराने का यह मेरे शुरुआती अनुभवों में से एक था, इसलिए यह अच्छा learning process था