4 poin oleh GN⁺ 2023-10-20 | 1 komentar | Bagikan ke WhatsApp
  • Tantangan BitTorrent dari CodeCrafters membahas proses mengimplementasikan langsung protokol berbagi file P2P dan mengunduh file yang tersedia secara publik
  • Alur pembelajaran dimulai dari decoding bencode, lalu berlanjut ke parsing file .torrent, menghitung info hash, menemukan peer, handshake, dan mengunduh potongan file
  • Terdiri dari total 19 tahap, gabungan 11 tahap BitTorrent dasar dan 8 tahap Magnet Links
  • Struktur tahap dan panduan dapat dilihat gratis, tetapi pengiriman kode dan melihat solusi memerlukan CodeCrafters Membership
  • Jika ingin mencoba gratis terlebih dahulu, Anda bisa memilih tantangan gratis bulan ini, Build your own Shell

Tujuan implementasi klien BitTorrent

  • Build your own BitTorrent adalah tantangan CodeCrafters yang memandang BitTorrent sebagai protokol berbagi file P2P untuk distribusi data skala besar dan mengajak Anda mengimplementasikannya sendiri
  • Tujuan akhirnya adalah membuat klien BitTorrent yang dapat mengunduh file yang tersedia secara publik menggunakan protokol BitTorrent
  • Selama prosesnya, Anda juga akan mempelajari cara kerja protokol BitTorrent dan file .torrent

Susunan tahap dan tingkat kesulitan

Ketentuan penggunaan

  • Tantangan ini memerlukan CodeCrafters Membership
    • Seluruh struktur tantangan dan panduan tahap dapat dipelajari secara gratis
    • Pengiriman kode dan melihat solusi memerlukan membership
  • Jika menginginkan tantangan gratis, Anda bisa mencoba Build your own Shell yang tersedia gratis bulan ini

1 komentar

 
GN⁺ 2023-10-20
Pendapat Hacker News
  • Halo! Saya Sarp, pembuat tantangan Build your own BitTorrent dari Codecrafters
    Sedikit latar belakang: setelah di-PHK dari pekerjaan di FAANG, saya hampir tidak punya motivasi untuk kembali, lalu mulai mencari proyek pemrograman yang menarik untuk menghidupkan lagi minat saya pada coding
    Saat menjalani hidup sebagai digital nomad, saya menemukan Codecrafters di Nomadlist, dan saya suka cara kerjanya: push kode ke Git untuk melewati pengujian tahap demi tahap. Alur progres yang digamifikasi membantu saya fokus, dan saya bisa menggali lebih dalam software yang biasa saya pakai seperti SQLite, Git, dan Redis. Saya juga belajar Go dari nol untuk mengerjakan tantangannya
    Setelah menyelesaikan semua tantangan di situs dan tidak ada lagi yang bisa dikerjakan, saya memutuskan membuat salah satu ide yang banyak mendapat suara, yaitu klien BitTorrent
    Saat membuat klien BitTorrent, saya belajar banyak hal: protokol BitTorrent, struktur file torrent, masalah encoding, pipelining request jaringan, URL encoding untuk nilai biner, penggunaan channel di Go, dan lain-lain
    Saya ingin mendapat masukan tentang tantangan ini, dan dengan senang hati menjawab pertanyaan

    • Tracker khusus undangan sering kali cukup ketat menentukan klien torrent apa yang boleh dan tidak boleh dipakai di tracker privat mereka. Saya penasaran bagaimana hambatan ini bisa dilewati agar adopsinya lebih luas
    • Saya penasaran bagaimana Anda belajar membuat klien BitTorrent. Saya suka ide Codecrafters atau buku yang memandu orang membangun sesuatu sendiri, tetapi saya selalu kesulitan jika tidak tahu titik awalnya
    • Kebetulan saya baru saja memulai proyek terkait BitTorrent. Sepertinya saya tidak akan mengimplementasikan klien sendiri, tetapi mungkin saja, dan setidaknya saya perlu mengimplementasikan pembuatan file .torrent dan magnet link, jadi saya sedang mempelajari sedikit protokolnya
      Menarik melihat ini muncul, dan mungkin bisa membantu saya melanjutkan proyek
    • Dari bagian “Setelah menyelesaikan semua tantangan di situs dan tidak ada lagi yang bisa dikerjakan, saya memutuskan membuat salah satu ide yang banyak mendapat suara, yaitu klien BitTorrent”, saya jadi penasaran apakah sekarang Anda dipekerjakan oleh Codecrafters
    • Saya tidak tahu apakah ini masukan untuk tantangannya sendiri, tetapi saya agak kecewa karena tidak bisa menambahkan dependensi ke Cargo.toml
      Saya ingin mencoba menyelesaikan sebagian tantangan bencode dengan nom; mungkin itu pilihan yang berlebihan, tetapi saya ingin melakukannya untuk bersenang-senang, dan saat ini tidak bisa
      Kalau kekhawatirannya adalah beban builder jarak jauh atau waktu eksekusi, akan bagus jika ada cara untuk menjalankan test case secara lokal agar masalah ini bisa dihindari
  • Jon Gjengset[1] saat ini sedang live coding dalam Rust untuk tantangan yang sama di kanal YT-nya[2]
    [1]: https://thesquareplanet.com/
    [2]: https://www.youtube.com/watch?v=jSTkEPPiULs

    • Ah, itu saya!
      Tautan yang lebih baik adalah https://www.youtube.com/watch?v=jf_ddGnum_4, sudah ada penanda chapter dan bagian mati listrik di tengah juga sudah dipotong :p
    • Untuk orang-orang yang YouTube-nya diblokir, ada juga salinan livestream di Twitch
      [0] https://www.twitch.tv/videos/1954769913
    • Menonton dia coding itu mengagumkan. Saya penasaran apakah ada juga pakar yang coding dengan Python, bukan Rust
  • Saya tidak mengerti kenapa harus login. Apakah ini tutorial berbayar?
    Tutorial gratis ada di sini
    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/

  • Kenapa mereka meminta hak akses ke akun GitHub saya tanpa penjelasan apa pun?

    • Agar adil, memang tertulis hanya meminta izin membaca email, tetapi saya juga tidak melanjutkan setelah tahap itu
    • Salah satu alasannya tampaknya karena Codecrafters adalah situs belajar, dan mereka tidak menghosting kode pengguna sendiri, melainkan menyimpannya di GitHub. Tulisan ini tentang salah satu proyek di Codecrafters
      Meski begitu, mereka tetap harus menjelaskan kenapa itu diperlukan
    • Mereka tidak menyediakan alternatif seperti pendaftaran email biasa, dan tampaknya hanya memakai GitHub sebagai penyedia autentikasi. Biasanya situs seperti ini menyediakan beberapa opsi
    • Diperlukan untuk autentikasi. Tautan aslinya mengarah ke app.codecrafters.io, sedangkan codecrafters.io adalah halaman pemasaran :)
    • Strukturnya adalah: ketika Anda mengunggah kode tantangan ke Git Anda sendiri, beberapa pengujian dijalankan terhadap implementasi itu
  • Anehnya, bagian upload tidak ada. Kalau memang peer, berarti peserta yang setara, jadi data seharusnya mengalir dua arah. Kalau tidak, BitTorrent tidak akan berfungsi

    • Benar. Awalnya kami mengecualikannya untuk memperkecil cakupan tantangan, karena sudah cukup panjang dengan 11 tahap
      Fitur upload rencananya akan ditambahkan sebagai perluasan tantangan, dan ini salah satu ide perluasan yang mendapat banyak suara dari komunitas
    • Benar, “Seeding files” adalah fitur perluasan: https://app.codecrafters.io/vote/challenge-extension-ideas?c...
      Saat ini belum didukung, tetapi akan segera tersedia, dan perluasan baru ditambahkan berdasarkan voting pengguna
  • Kalau Anda memakai JavaScript, ada WebTorrent buatan Feross, yang membawa protokol ini ke dalam tab browser
    Codebase-nya sangat enak dibaca. Banyak developer lebih mahir menulis kode daripada membacanya, dan kalau ingin melatih kemampuan membaca kode, saya jarang melihat tempat yang lebih baik untuk memulai daripada codebase WebTorrent. Dari sisi keseruan membaca, saya menempatkannya setara dengan redis
    https://github.com/webtorrent/webtorrent

  • Saya sangat suka ide ini! Dulu saya ingin belajar Erlang, sementara teman saya ingin belajar Crystal, jadi kami memutuskan untuk mencoba membuat klien yang sepenuhnya kustom agar bisa saling berbagi file
    Rasanya sangat menyenangkan ketika kami akhirnya bisa mengirim dan menerima file dengan protokol dasar dan beberapa ekstensi. Benarkah ekstensi-ekstensi itu disebut BEP?
    Ini mungkin cara favorit saya untuk mempelajari bahasa baru, karena cukup sederhana untuk dipahami dan diimplementasikan

    • CodeCrafters juga mendukung Crystal. Anda bisa mengerjakan Build your own Redis
  • Seiring tahun berganti, makin sedikit ide proyek kecil yang membuat saya bersemangat, dan ini salah satunya
    Saya baru pertama kali mendengar CodeCrafters, tetapi saya suka ide tantangan akademis seperti membuat database. Akan bagus juga kalau ada membuat compiler

  • Saya teringat tulisan tentang membuat klien BitTorrent dengan Go: https://blog.jse.li/posts/torrent/

  • Beberapa tahun lalu di tempat kerja sebelumnya, kami membuat dan mendukung Linux live OS kustom yang bisa dipakai karyawan di netbook murah
    Untuk distribusi update, kami membuat sendiri server torrent internal dari nol, dan menggunakannya untuk mendistribusikan update image
    Itu salah satu pengalaman pertama saya membuat software yang mengikuti standar dan bisa bekerja dengan klien-klien standar, jadi menjadi proses belajar yang bagus