Kendi BitTorrent’inizi Oluşturun
(app.codecrafters.io)- CodeCrafters’ın BitTorrent challenge’ı, P2P dosya paylaşım protokolünü doğrudan uygulayarak herkese açık dosyaları indirme sürecini ele alır
- Öğrenme akışı bencode çözümleme ile başlar; .torrent dosyası ayrıştırma, info hash hesaplama, peer keşfi, handshake ve parça indirme ile devam eder
- Temel BitTorrent için 11 adım ve Magnet Links için 8 adım olmak üzere toplam 19 adımdan oluşur
- Adım yapısı ve yönergeler ücretsiz görülebilir, ancak kod gönderimi ve çözümleri görüntüleme için CodeCrafters Membership gerekir
- Önce ücretsiz denemek isterseniz, bu ayın ücretsiz challenge’ı olan Build your own Shell’i seçebilirsiniz
BitTorrent istemcisi uygulama hedefi
- Build your own BitTorrent, BitTorrent’i büyük ölçekli veri dağıtımı için bir P2P dosya paylaşım protokolü olarak ele alan ve bunu doğrudan uygulattıran bir CodeCrafters challenge’ıdır
- Nihai hedef, BitTorrent protokolüyle herkese açık dosyaları indirebilen bir BitTorrent istemcisi oluşturmaktır
- Süreç boyunca BitTorrent protokolünü ve .torrent dosyalarının nasıl çalıştığını da öğrenirsiniz
Adım yapısı ve zorluk seviyesi
-
Temel BitTorrent adımları
- bencode çözümlemeden torrent dosyası işlemeye, peer bağlantısından dosya indirmeye kadar sırayla uygularsınız
- Decode bencoded strings: Çok kolay
- Decode bencoded integers: Kolay
- Decode bencoded lists: Kolay
- Decode bencoded dictionaries: Kolay
- Parse torrent file: Kolay
- Calculate info hash: Orta
- Piece hashes: Kolay
- Discover peers: Orta
- Peer handshake: Orta
- Download a piece: Zor
- Download the whole file: Zor
-
Magnet Links adımları
- magnet link ayrıştırmadan başlayarak extension handshake, metadata alışverişi, parça ve tüm dosya indirmeyi kapsar
- Parse magnet link: Kolay
- Announce extension support: Kolay
- Send extension handshake: Kolay
- Receive extension handshake: Kolay
- Request metadata: Kolay
- Receive metadata: Kolay
- Download a piece: Zor
- Download the whole file: Zor
Kullanım koşulları
- Bu challenge için CodeCrafters Membership gerekir
- Tüm challenge yapısı ve adım yönergeleri ücretsiz olarak incelenebilir
- Kod gönderimi ve çözümleri görüntüleme için üyelik gerekir
- Ücretsiz bir challenge istiyorsanız, bu ay ücretsiz sunulan Build your own Shell’i deneyebilirsiniz
1 yorum
Hacker News yorumları
Merhaba! Codecrafters’ın Build your own BitTorrent meydan okumasını hazırlayan Sarp ben.
Biraz arka plan anlatmak gerekirse, FAANG’deki işimden çıkarıldıktan sonra geri dönme isteğim pek kalmamıştı ve kodlamaya olan ilgimi yeniden canlandıracak eğlenceli bir programlama projesi aramaya başladım.
Dijital göçebe olarak yaşarken Nomadlist’te Codecrafters’ı keşfettim; kodu Git’e push edip adım adım testleri geçme yaklaşımı hoşuma gitti. Oyunlaştırılmış ilerleme biçimi odaklanmama yardımcı oldu; SQLite, Git, Redis gibi zaten kullandığım yazılımları daha derinlemesine kurcalayabildim. Meydan okumaları yapmak için Go’yu da sıfırdan öğrendim.
Sitedeki tüm meydan okumaları bitirip yapacak işim kalmayınca, çok oy alan fikirlerden biri olan bir BitTorrent istemcisi yapmaya karar verdim.
BitTorrent istemcisi yaparken BitTorrent protokolü, torrent dosya yapısı, kodlama sorunları, ağ isteklerinde pipelining, ikili değerlerin URL encoding’i, Go’da channel kullanımı gibi pek çok şey öğrendim.
Meydan okuma hakkında geri bildirim almak isterim; soruları da memnuniyetle yanıtlarım.
Bunun paylaşılması ilginç oldu; ilerlememe yardımcı olabilir.
Cargo.toml’a bağımlılık ekleyememek biraz hayal kırıklığı yarattı.bencode meydan okumasının bir kısmını nom ile çözmeyi denemek istemiştim; belki abartılı bir seçimdi ama eğlencesine yapacaktım ve şu anda mümkün değil.
Uzaktaki builder’ın yükü ya da çalışma süresi konusunda endişe varsa, bu sorunu aşmak için test case’lerini yerelde çalıştırmanın bir yolu olsa güzel olurdu.
Jon Gjengset[1] şu anda kendi YT kanalında[2] aynı meydan okumayı Rust ile canlı kodluyor.
[1]: https://thesquareplanet.com/
[2]: https://www.youtube.com/watch?v=jSTkEPPiULs
Daha iyi link https://www.youtube.com/watch?v=jf_ddGnum_4; chapter işaretleri var ve ortadaki elektrik kesintisi kısmı da çıkarıldı :p
[0] https://www.twitch.tv/videos/1954769913
Neden giriş gerektiğini anlamıyorum. Bu ücretli bir tutorial mı?
Ücretsiz tutorial burada var:
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/
https://github.com/codecrafters-io/build-your-own-x
Neden hiçbir açıklama olmadan GitHub hesabıma erişim izni istediğini hiç anlamıyorum.
Yine de neden gerekli olduğunu açıklamaları gerekir.
Garip şekilde yükleme kısmı eksik. Peer ise eşit bir katılımcı demektir, dolayısıyla verinin iki yönde de akması gerekir. Aksi halde BitTorrent çalışmaz
Yükleme özelliğini challenge genişletmesi olarak eklemeyi planlıyoruz; topluluktan en çok oy alan genişletme fikirlerinden biri
Henüz desteklenmiyor ama yakında sunulacak; yeni genişletmeleri kullanıcı oylarına göre ekliyoruz
JavaScript kullananlar için Feross’un yaptığı WebTorrent var; bu, protokolü tarayıcı sekmesinin içine taşıdı
Kod tabanını okumak gerçekten çok keyifli. Birçok geliştirici kod okumaktan çok kod yazmada daha iyi; kod okuma becerinizi geliştirmek istiyorsanız WebTorrent kod tabanı kadar iyi bir başlangıç noktası pek görmedim. Okuma keyfi açısından redis ile aynı seviyeye koyarım
https://github.com/webtorrent/webtorrent
Bu fikri gerçekten çok sevdim! Eskiden Erlang öğrenmek istiyordum, bir arkadaşım da Crystal öğrenmek istiyordu; tamamen özel istemcilerle birbirimizle dosya paylaşabilir hale getirmeyi deneyelim demiştik
Temel protokol ve birkaç genişletmeyle dosya alıp gönderebilir hale geldiğimizde gerçekten eğlenceliydi. O genişletmelere BEP deniyordu, değil mi?
Yeni bir dil öğrenmenin muhtemelen en sevdiğim yolu bu. Çünkü anlamak ve uygulamak için yeterince basit
Yıllar geçtikçe beni heyecanlandıran küçük proje fikirleri giderek azalıyor; bu da onlardan biri
CodeCrafters’ı ilk kez duydum ama veritabanı yapmak gibi akademik challenge fikirleri hoşuma gitti. Derleyici yapmak da eklense güzel olurdu
https://twitter.com/codecraftersio/status/168850373608654028...
Go ile BitTorrent istemcisi yapmayı anlatan yazı aklıma geldi: https://blog.jse.li/posts/torrent/
Birkaç yıl önce önceki iş yerimde, çalışanların ucuz netbook’larda kullanabileceği özel bir Linux live OS geliştirip destekliyorduk
Güncellemeleri dağıtmak için sıfırdan şirket içi bir torrent sunucusu yazdık ve imaj güncellemelerinin dağıtımında kullandık
Standartlara uygun yazılım geliştirip varsayılan istemcilerle çalışır hale getirdiğim ilk deneyimlerden biriydi; iyi bir öğrenme süreciydi