Hi! Sarp here, author of the Build your own BitTorrent challenge on Codecrafters.<p>Some back story: After being laid off from my FAANG job, I found myself very unmotivated to go back. I started looking for interesting programming projects to revive my interest in coding. While nomading, I discovered Codecrafters on Nomadlist and really liked the push code to git and pass different stages interaction. The gamification helped me focus and projects allowed me to go deeper on software I used (SQLite, Git, Redis etc.). I even picked up a new language (Go) to do the challenges with. After completing all the challenges on the site, I ran out of things to do. This is when I decided to build a BitTorrent client which was one of the highly voted ideas on the site.<p>I learned many new things by building a BitTorrent client: the BitTorrent protocol, how torrent files are structured, encoding issues, pipelining network requests, url encoding binary values, using Channels in Go etc.<p>I’d love any feedback on the challenge. Also happy to answer any questions!
Jon Gjengset[1] is currently doing a livestream on the same challenge in Rust, on his YT channel[2].<p>[1]: <a href="https://thesquareplanet.com/" rel="nofollow noreferrer">https://thesquareplanet.com/</a><p>[2]: <a href="https://www.youtube.com/watch?v=jSTkEPPiULs">https://www.youtube.com/watch?v=jSTkEPPiULs</a>
what's with the sign in required, is this a paid tutorial?<p>Here are some free tutorials:<p>JS - <a href="https://allenkim67.github.io/programming/2016/05/04/how-to-make-your-own-bittorrent-client.html" rel="nofollow noreferrer">https://allenkim67.github.io/programming/2016/05/04/how-to-m...</a><p>GO - <a href="https://blog.jse.li/posts/torrent/" rel="nofollow noreferrer">https://blog.jse.li/posts/torrent/</a><p>Python - <a href="https://markuseliasson.se/article/bittorrent-in-python/" rel="nofollow noreferrer">https://markuseliasson.se/article/bittorrent-in-python/</a>
For folks who speak JavaScript, Feross built WebTorrent which brought the protocol into a browser tab.<p>The code base is delightful to read. A lot of developers are better at writing code than they are reading it. If you're wanting to flex your code-reading muscles, I haven't found many better places to start than the WebTorrent codebase. I put it up there with redis in being fun to read.<p><a href="https://github.com/webtorrent/webtorrent">https://github.com/webtorrent/webtorrent</a>
I really like this idea! I wanted to leant Erlang some time ago and a friend wanted to learn Crystal, so we set out to be able to share files between each other with completely custom clients! It was so much fun when we were able to exchange files with the base protocol and some.. Is it call BEP? Enhancements tk the protocol?<p>It's probably my favourite way of learning a new language, as it's simple enough to understand and implement
As the years go on, I find there are fewer and fewer small project ideas that give me butterflies. But this is one!<p>Hadn't heard of CodeCrafters before but I love how academic their challenge ideas are (eg build a DB). I'd love to see a compiler build in there too.
Reminds me of building a bittorrent client in go: <a href="https://blog.jse.li/posts/torrent/" rel="nofollow noreferrer">https://blog.jse.li/posts/torrent/</a>
Years ago, one of my previous roles was building and supporting a custom linux live OS that could be used by employees on cheap netbooks (remember those?). To distribute updates, I ended up building our own internal torrent server from scratch and used it to distribute image updates. It was a good learning exercise as one of the first times I had built software to conform to a standard and work with out of the box clients.
For anyone who is interested in peer-to-peer systems like this, and completes Sarp's course, I have an open interview challenge you can submit it to if you find that you want to continue building in this space as a profession:<p><a href="https://gitlab.com/webai-open/network/interview-challenge" rel="nofollow noreferrer">https://gitlab.com/webai-open/network/interview-challenge</a><p>Take the guidelines to heart though. We evaluate you on demonstrating understanding of what you did, not that you completed the course.<p>My advice for standing out would be to continue building on it past the end of the course and do something cool yourself.
Can anyone comment as to how far one can go before paying for the codecrafters service?<p>The crowd that is interested in these kinds of experiences may also like Protohackers, which is completely free.
Have been exploring this and it is a pretty fun way to learn some of the intrinsics of some products we use daily!<p>I have also had positive interactions with Sarp so hoping this product takes off!
Does this include the DHT? BT, the protocol itself is not very interesting, it's just a very bad file access protocol over HTTP without DHT, which makes it really P2P.
This is super fun! I did the same back in uni, it was an awesome project: <a href="https://github.com/bbpcr/Yomato">https://github.com/bbpcr/Yomato</a>
Viewing on mobile.<p>Not sure what I see. There is no content, nothing clickable.
Just decode bencoded strings and integers and some comments.<p>What's the point?
I love the idea of this site but I don’t understand the pricing model. It says 30$/month but I can only pay 120$ for 3 months. It should be 90$ for 3 month.
A monthly payment model would be more accessible. I do I misunderstood something?
I wish more folks distributed Linux ISOs via Bittorrent since it has an integrity check built into the protocol -- messing with PGP is hard and showing me an MD5 sum over a self signed certificate is... just <i>special</i>.