Thanks!! Yeah, I was pursuing such design that would allow to replace/customize most of the parts, including the internals. As a bonus, it makes it easier to continue working on the library as the codebase grows (now nearing 25K lines of code)
Man this looks slick, going to give it a shot. Love the ability to be able to download a magnet link from the CLI and not worry about what some fancy GUI is doing in the background cuz I am paranoid.
I also have a simple shell script locally, that wraps the java command, so I have to just type `btmagnet AF0D9AA01A9AE123A73802CFA58CCAF355EB19F8` to download to a pre-determined location (hardcoded in the script). I wonder if I should share it on the CLI README page
Credit to OP, this looks like a really solid project. The CLI aspect of it reminds me of peerflix (https://github.com/mafintosh/peerflix), which I've been using for a while and am pretty happy with (no affiliation, promise)
It looks great but the top GIF makes it seem like you are offering a command line BT client. If I were you I would have it slowly scroll through the code of the client in the GIF or put a few frames of code of the client and or some compiling and then show the current top GIF.
Oh, I didn't expect this :) Sounds good, but I'm not sure I have patience do this right, it's such a pain to record gifs - I always misspell or misclick something, and by take #47 go completely nuts
Nice work. I'm wondering, how would you test/benchmark such an application. Besides manual testing on a variety of torrents, how would you do regression test there? same question for benchmarking. How to compare this work with another client?
I have several hundred unit tests and also a bunch of integration tests. While UTs usually test API of individual classes, each of the ITs creates a swarm of local peers and launches a torrenting session with certain conditions: seeders to leechers ratio, downloading from .torrent file vs using a magnet link, PEX enabled/disabled, encrypted vs raw message streams, etc.
Benchmarks (like in libtorrent) is something I'm looking forward to, but the project is still in the early stage -- there's a lot to be done with regards to optimization, i.e. switching to using NIO selectors, adding a caching layer, etc. That's a lot of work, and that's why I'm looking for collaborators, before investing more time into performance-tuning.
I'm curious, it looks like the screenshot shows the author is using a Mac. But Mac OS hasn't shipped with Java in several years. So why Java? Is it simply familiarity, or are there other reasons?
A mix of both, actually. I've been using uTorrent for years until 2016, when I've decided to switch to some new OS X release. After installing the system update, the old, ad-free version of uTorrent has stopped working. The new version seemed a bloated mess to me, so I've tried a few other clients, but was left unsatisfied. Finally, in despair I've decided to write my own client with simplistic command-line UI, with emphasis on streaming movies. The sheer amount of new information in BEPs was enough for me to decide to take the easiest route and use the language, that I'm most familiar with.
Thank you! Calendar year, in the evenings and on weekends, with sprints of several weeks and a month or two of rest/AFK after each sprint to keep sanity (I have a full-time job, a wife and a 3 year old kid). Happy that I had the persistence to keep working on the project
I remember using Java based client Azureus and the memory usage was huge. Overnight it would leak to about 1Gb. Later uTorrent appeared and it used 2mb... Forever
I guess nothing to do with this but was triggered by two combined words: Torrent and Java
This is a feature from newer Java syntax that I'm not yet familiar enough with lambdas to understand in full what is happening.
Perhaps I can ask for an example that replaces the "->" into the older Java syntax? I know this would likely come at the cost of a few extra lines, it would certainly ease a lot for many developers looking at the example. Many thanks.
Not very familiar with the Java world yet. I've heard Android now supports at least some features from Java 8, but would this library work in an Android app?
[+] [-] atomashpolskiy|8 years ago|reply
[+] [-] atomashpolskiy|8 years ago|reply
[+] [-] yodsanklai|8 years ago|reply
[+] [-] niroze|8 years ago|reply
[+] [-] jph|8 years ago|reply
[+] [-] atomashpolskiy|8 years ago|reply
[+] [-] gigatexal|8 years ago|reply
[+] [-] atomashpolskiy|8 years ago|reply
I also have a simple shell script locally, that wraps the java command, so I have to just type `btmagnet AF0D9AA01A9AE123A73802CFA58CCAF355EB19F8` to download to a pre-determined location (hardcoded in the script). I wonder if I should share it on the CLI README page
[+] [-] rena-anju|8 years ago|reply
[+] [-] pmatev|8 years ago|reply
[+] [-] lotyrin|8 years ago|reply
[+] [-] hobarrera|8 years ago|reply
[+] [-] zitterbewegung|8 years ago|reply
[+] [-] atomashpolskiy|8 years ago|reply
[+] [-] yodsanklai|8 years ago|reply
[+] [-] atomashpolskiy|8 years ago|reply
Benchmarks (like in libtorrent) is something I'm looking forward to, but the project is still in the early stage -- there's a lot to be done with regards to optimization, i.e. switching to using NIO selectors, adding a caching layer, etc. That's a lot of work, and that's why I'm looking for collaborators, before investing more time into performance-tuning.
[+] [-] djhworld|8 years ago|reply
Will look forward to reading through the code later!
[+] [-] atomashpolskiy|8 years ago|reply
[+] [-] styfle|8 years ago|reply
[+] [-] atomashpolskiy|8 years ago|reply
[+] [-] jrs95|8 years ago|reply
[+] [-] pvg|8 years ago|reply
[+] [-] segmondy|8 years ago|reply
[+] [-] atomashpolskiy|8 years ago|reply
[+] [-] intellix|8 years ago|reply
I guess nothing to do with this but was triggered by two combined words: Torrent and Java
[+] [-] amzans|8 years ago|reply
[+] [-] nunobrito|8 years ago|reply
On my context it is useful for downloading large files without depending on a single point of failure or fixed location.
Have a question in regards to the example syntax:
client.startAsync(state -> { if (state.getPiecesRemaining() == 0) { client.stop(); } }, 1000).join();
This is a feature from newer Java syntax that I'm not yet familiar enough with lambdas to understand in full what is happening.
Perhaps I can ask for an example that replaces the "->" into the older Java syntax? I know this would likely come at the cost of a few extra lines, it would certainly ease a lot for many developers looking at the example. Many thanks.
[+] [-] train_robber|8 years ago|reply
[+] [-] tokenizerrr|8 years ago|reply
[+] [-] wodencafe|8 years ago|reply
[+] [-] ikurei|8 years ago|reply
[+] [-] atomashpolskiy|8 years ago|reply
[+] [-] tonyrice|8 years ago|reply
[+] [-] flarco|8 years ago|reply
[+] [-] maximumkek|8 years ago|reply
[deleted]
[+] [-] alexanderbisc|8 years ago|reply