MLDonkey Downloads Import Module Development
Development in progress.
Monday, September 11, 2006
When is a software project "finished" ?
anonymous commented: After that much work done, I cannot believe this will stop here. If the project is not finished, Madcat, was a waste of time.
Define finished please. I have created generic cross-platform P2P client framework/API, and two proof-of-concept modules; I have created graphical user interface, an extendable IPC mechanism and much more.
Hydranode was meant to attract a lot of external developers due to it's well-documented and well-formatted codebase, as well as it's base API's generic nature; I've already written a couple of custom applications based on Hydranode base libraries, well beyond the API's original ideas.
Yet as it turned out, the quality standards are too high for external developers to join; also, when you have a messy codebase, everyone jumps in trying to "fix" it (I saw that working very well in *mule projects), yet a well-formatted and well-structured codebase, the average OSS programmer won't have an idea of where to start because there aren't easy things to fix.
As far as "finishing" the project goes, you can never call a piece of software finished. There's ALWAYS room for improvement, new features and such; yet I don't have a lifetime to spend on something that takes 15+h/day to develop and brings me zero income. I no longer have the luxury of living with near-zero monthly expenses - I gotta earn money to pay for food, rent and so on and so forth.
My greatest regret with Hydranode is that I didn't create a messy codebase; if I did that, there'd be a full-sized team behind the project already; but as it stands now, there's very little hope someone will pick up this project's maintainance, since developers knowing sufficient amount of C++/STL/Boost are hard to come by in OSS community, as it turns out. Personally, I know about 2-3 developers who'd have sufficient skillset to continue this project at these quality levels, and all of them are busy with other things.
Lesson learned - well-written codebase will cause most coders to run away in fear, rather than join in. However, I would never call Hydranode a waste of time; it's a great CV/Resume entry for me (I've gotten multiple job offers over the world already, from people who've seen Hydranode codebase), I've mastered advanced C++ (I knew very little C++ when I started this project), and I learned quite a lot about user interface design, usability testing and so on - all very valuable. I wrote Hydranode because I wanted to learn; towards that end, Hydranode has been a major success. But Hydranode failed as OSS project; next time I start some OSS project (doubtful it'll happen though), I'll create a messy codebase using basic C++ (no template metaprogramming, design patterns or any other of that "advanced crap"), and I'm willing to bet large sums of money that developers come running to join in.
If you do wish to continue this project, drop me a mail; other than that, as long as there's no decent financing behind this project, I cannot afford to spend time on it in foreseeable future.
Monday, August 21, 2006
I was putting together my CV the other day, and noticed an interesting pattern. Over the last 4-5 years, I have done database programming for companies for 2-3 month periods, and then 6-12-month periods of OSS/P2P development; and after that again couple months of database development.
This pattern comes from obvious reasons - OSS/P2P development doesn't pay bills, so after a while the finacies simply run out and I'm forced to do database development once again. Hydranode project was a notable exception to this pattern, with development running for whole 20 months before I had to resort to database development this February, and again this June. This is all thanks to everyone who has donated or funded the Hydranode development over the last two years (no names due to their requests). So thank you.
What's currently going on in the database project I'm currently developing for a company is that they keep changing the spec of the system, which actually hit me back two weeks before I realized the issue and told them I won't be doing any coding at all until they finalize the spec (I assumed the initial spec they sent was also final). Anyway, current timeline suggests that I'll be stuck with this database project until mid/end of September; naturally the price went up due to the delays, and will go further up if it gets further delayed, so it's all good (actually feels rather good to be properly financed for a change :)).
Anyway, the plans on new Hydranode site are still up and open, but since I recruited Arlekin (the resident Hydranode designer) also to the database project as designer, both of our schedules are filled with that project, so the Hydranode website design/implementation isn't moving forward at all in the current state.
Anyway, we'll see what the future brings; to be completely honest I have another potential client already waiting for another database system (scheduled for October/November), but I haven't said anything concrete to them yet, so it's currently open. Whether or not I take that other project depends on many factors (some not up to me).
If you have 1-2 hour development time feature requests for Hydranode, you could post them as comments here, and I could try to fit them into my busy schedule. Only important, and small requests please - anything taking longer than few hours is unfortunately more than I can currently accept due to my filled schedule, sorry.
Wednesday, July 19, 2006
Busy busy busy busy
It's been quite a while since the last blog post, so I figured it's time to update the status of things and ensure that I'm still around and kicking.
What's going on currently is that I'm heavily overbooked with projects; the database project I took a while ago had some delays getting started (actual development started on 15th this month), and I'm also trying to get the entire project (originally only one sub-module of the project was planned for me), which can increase the development time from 4 weeks (+ 2 weeks testing) to up to 6-8 weeks. Naturally, the money increases proportionally, so it's a Good Thing.
, will rely heavily on those technologies.
Hydranode website is also one of the projects currently being open; the design is about 90% completed (made by our resident designer, Arlekin), but needs few more days to complete the design, plus couple days for implementing. Our current timeline suggests that there won't be any free time to finish it before end of next week; I hope I can get it online before end of July, but it's gonna be tough.
Arlekin is also flooding me already with smaller website projects, some of which may start as early as mid-august, all of which means that we're both heavily overbooked with work until end of August, possibly even half-way into September. Hydranode-related things are at the bottom of our priority lists right now simply because payd projects take priority (naturally).
And the question that's burning within the majority of the readers here - what about Hydranode code updates? Well, what can I say. The current plans for next release include installer [finished], better integration with OS features on Linux (associations, external links), import wizard for eMule/ShareAza/MLDonkey (missing ShareAza import module right now only, plus GUI), and some minor other updates. Estimated time of release is completely unknown right now however - as said, I don't expect to have much time for core development in August, so Hydranode release is pushed to somewhere in second half of September, at the earliest.
All of those thinking that the project is dead should think again. There are many projects out there that occasionally have on-and-off development, often for years, before taking off bigtime again. I spent two (!) years full-time developing Hydranode, so starting to proclaim the death of the project just after couple months of slowed / non-existant development is a bit harsh, don't you think?
PS: Hydranode is OSS project, but why aren't there any OSS developers jumping in to develop while I'm busy with other things? Is Hydranode codebase really so complex that nobody is interested in learning it, or is it because developers don't believe in Hydranode being something worth developing?
Wednesday, July 05, 2006
MLDonkey Import Module (experimental preview)
As the bounty payment for this module was completed yesterday, today development started on the module. Today also the first version of the module was checked into SVN, containing about 350 lines of code; it is capable of importing ed2k downloads from MLDonkey to Hydranode; no files rehashing is needed (this is different from current eMule import support, which forces files to be rehashed).
It is currently not decided whether the plugin will be available as v0.3 release add-on, but if possible I try to make it available in binary form for v0.3. The trouble is that getting around the forced rehash of imported downloads required trivial change in hncore library, which is not available in v0.3 release. If the module is released for v0.3 release, it'll still cause full rehash of all temp files (and many MLDonkey users have hundreds of pending downloads).
File status, as well as Bittorrent downloads, are not currently imported. The support is expected to be added in the coming days.
Code preview: hncore/imp_mldonkey/imp_mldonkey.cpp
Tuesday, July 04, 2006
Hydranode User Experience
A few weeks ago I wrote up a public memo to Hydranode developers (both current and future) about Hydranode User Experience. Since the document got very positive feedback from people of very different backgrounds, I decided to make it available publically. It's a short read, about 8 A4 pages, so grab a cup of tea (or coffee) and enjoy. Comments welcome, as always.Hydranode User Experience (MS Word .doc format)
On other news, MLDonkey Import Module bounty was completed today, the required 80 EUR was raised. Development of the module will begin shortly, and is expected to be released publically within one week. Stay tuned.
Thursday, June 29, 2006
Bounty-based development model...
...a viable solution for funding open source development?
As I mentioned about a week ago, I'm taking on a medium-sized database project for development to generate some income; this naturally drops Hydranode development to near the bottom of my activity listings; however, this gave me an idea.
There has been discussions about "donate-based bounties" since last summer already, and the topic has raised on a monthly basis. About a week ago a bounty was set to implement mldonkey files import support to Hydranode; price was determined and currently money is being gathered for implementing it. The price was fixed at 80 EUR, out of which 20 eur has been donated so far. If you want to support this effort, send a donation via the Make a Donation button on the right; make sure to note in the comment that this is for "mldonkey import support" development. Once 80 eur has been raised, development will begin on the support and it will be released publically once completed.
All this gave me an idea. Why not implement this functionality in a semi-automated manner, publically available. The details of the system as the idea develops follow.
There are three parties involved in the system - Client, Implementer and Bounty Manager. Client makes a request (via a web-form or email) for a bounty; say '4+gb support for edonkey module'. Bounty Manager reviews the bounty, adds implementation details/comments, and determines the price for this work. For this sample, let's say 100 EUR. The bounty is then published (along with the price) on Hydranode website. Any Hydranode user can become a Client by donating to that bounty. Once the required money has been donated, an Implementer accepts the bounty and begins implementing it. Once completed, the module, patches or updates will be published.
Any developer (either official Hydranode developer, or 3rd-party developer) can take bounties and implement them. Since it cannot be expected that the Client(s) perform quality assurance, the Bounty Manager will perform quality assurance on the resulting patches or modules. Only if they pass the quality assurance will the bounty be considered 'completed' and the donated money to be payed to the Implementer.
This method would allow users to directly affect the development process and would motivate 3rd-party developers to code (since they get money for it).
Potential caveats: Refund policy? Implementors accepting a half-funded bounty (hungry coders needing food? :P) Implementors accepting bounty but not delivering on time or not passing QA? Implementing partially (important pre-work for some bounty)?
The idea obviously needs more work before all kinks can be ironed out. But the idea in general - what do you think?
Friday, June 23, 2006
First of all, I finally got internet at home again, so I'm online 24/7 again, which means development can resume properly now.
One thing that got done during past few days was an experimental installer. After a lengthy search for the 'best installer system', I finally settled on NSIS (Nullsoft installer system) for the time being. An experimental installer is available for previewing/testing purposes here
It seems I've been overloaded with work already; my checklist for the short-term future includes the following:
- Files and Settings Import Wizard (graphical)
- Port manager and port tester (core-side, single TCP/UDP listener for all networks, integration with UPnP support)
- Version check and (semi)automatic updates (graphical)
- Plugin manager user interface (user interface component; integration with online plugin database, automatic downloading and installing, version and updates checking)
- Skinning support for user interface (integration with online skin database; automatic downloading and installing; version and updates checking)
- User interface languages and localizations
- Web server and JSON-RPC-based core/gui communication support/wrapper (requires protocol specification draft; for the web interface concept discussed in previous blog post)
In addition to that I have about three websites to build (Hydranode website and two unrelated side-projects), and I got offered a PHP/SQL database job for a pretty nice amount of money; I'm undecided yet whether to take the latter, since it'd take 4-6 weeks to implement; however, on the other hand I need the money, so I probably should take it...
The user interface documentation is nearing completition as well, any comments / thoughts are welcome.