Nick Hodges

I am now tpsfadmin on SourceForge

28 Sep

There has been a lot of interest lately in the TurboPower projects on SourceForge.  Lots of folks have used Turbopower code in the past and are now wanting to bring this code forward to Delphi 2010.  There has been a lot of work done in this area already, but unfortunately, the SourceForge pages haven’t always reflected that.  Because there has really been only a few people with admin rights to the projets, folks have had to pull down the code, change it, and then post it somewhere else. (For instance, a whole  bunch of great stuff can be found at http://www.songbeamer.com/delphi/) .  Roman Kassebaum has also been doing some great work getting the code and components ready for Unicode and the newer versions of Delphi.

Over the weekend, I sent an email to the guy who had been the tpsfadmin (TurboPower SourceForge Administrator).  That account is the “godfather” for all the TurboPower projects on SourceForge.  I asked him what we could to open things up, and I was quite pleased and not a little surprised when he simply sent me the “crown jewels”.  So today I logged in, changed the password, and pointed the email address for the account to my gmail.com account.

And so I’m feeling a bit heady about this.   I’m definitely not drunk with supremacy just yet, but as Spiderman said, with great power comes great responsibilities.  There is a lot of amazing code here, and I want to make sure that as much of it gets made updated and made available to the community as possible.  But I should note that this isn’t an “officially sponsored” Embarcadero deal.  This is at best “semi-official”.  We aren’t officially taking over corporate sponsorship of these projects or anything like that.

Anyway, here are some further notes;

  • I’ll be going through all 19 projects and checking their status, updating their web pages, and getting the all up to date
  • If you have Turbopower code that you’ve worked on and haven’t been able to get checked in, let me know and we’ll make that happen.
  • I think I”m going to pretty much be using Subversion going forward.  I’ll be making sure that all the projects have Subversion access.
  • I think, too, that I’ll put up another little “mini-survey” to ask what are the most popular of the projects.  That ought to give all of us a better idea of which projects should be focused on first.

I’m very interested in hearing what the community has to say here.  Given that these projects are all open source, community involvement and community input and feedback are critical here.  I know there are a lot of you out there that have done a lot of work to maintain things, and I want to make sure that your work is recognized and incorporated for the good of the project as a whole.

As I said, this was pretty much a surprise, but I’m delighted at how things are working out.  This should be really fun, and we can really get things rolling again with this great code.

79 Responses to “I am now tpsfadmin on SourceForge”

  1. 1
    Rich Says:

    TurboPower OnGuard looks very promising. A new version with a sane CreateMachineID() would be nice. It should get a major version number increase since doing that will make the ID not backward compatible.

    TurboPower AsyncPro seems popular. I don’t use it but I think others will appreciate improvements.

    TurboPower Abbrevia is redundant because JCL already includes zip, gzip, 7-Zip and other compression.

    TurboPower LockBox is, IMHO, yet another crappy crypto library. It is worse than OpenStreamSec II which has better features. But they both don’t even support AES in CTR mode (see Practical Cryptography by Bruce Schneier about CTR mode’s advantages over other modes).

    Instead of LockBox, Delphi community needs a high-quality Delphi wrapper to OpenSSL 1.0. OpenSSL 0.9x can be compiled by C++ Builder + NASM. Plus, it is fast enough not to be a bottleneck on PC’s using SSD drives like Intel X25. And finally, OpenSSL was FIPS certified before and will probably get certified again after 1.0 is final.

    Another key point: speed isn’t the only factor when choosing an AES implementation. Newer AES implementations have defenses against timing attacks. The old ones don’t.

  2. 2
    Richard Says:

    We still use TpAsync and TpWindows among others in BP7 applications. Even still have some manuals. Sorry Nick, were we supposed to upgrade to Delphi?

  3. 3
    Julian M Bucknall Says:

    Nick: Congratulations on the bloodless "coup" :) And careful with that code, I wrote quite a bit of it back when I was young and had hair. Have fun!

    Cheers, Julian

  4. 4
    Raymond Wilson Says:

    FYI, we use TP Internet Pro and TP Lockbox.

    It’ll be good to get the TP libs up-to-date and all in one place again :-)

    Raymond.

  5. 5
    Mark Says:

    This is GREAT! news.

    I’m sure many of us use at least portions of these packages even though some are archaic by modern Delphi standards.

    I won’t mind pitching in to update! Let me know how I can help.

  6. 6
    JB Says:

    thumbs up to you.

  7. 7
    Van Swofford Says:

    Hi Nick,

    Super! I’m glad you’ve taken an interest in the TP products, since I use them so heavily in my projects.

    I use the following:
    Orpheus
    SysTools
    BTree Filer (I may be the last living user of BTF, but it ain’t broke, so…)
    OnGuard

    So, do we need to get you a cape and T-shirt that says "TP Man" on it? :^)

    Cheers, Van

  8. 8
    Q Correll Says:

    Hey Nick!

    Way to go!!! Congratulations!

    I don’t think I need to tell you how happy this makes me.

    Q

  9. 9
    Samir Kumar Mishra Says:

    Hi Nick,

    Congratulations on this new responsibility. I would love to help in enhancing and maintaining the TP components. Pls let me know how can we participate.

    Cheers
    Samir

  10. 10
    Skinner Says:

    Great Nick, I’m glad to see this happen.

    I use a great deal of AsyncPro and Abbrevia. Thanks to Roman and SongBeamer for all their mods. Abbrevia is pretty sound for what I do but AsynPro is a nightmare. I mainly concentrate on all the AdPort related stuff and don’t mess much with Fax and Voice.

  11. 11
    Frank Reynolds Says:

    Well done Nick, your blood is worth bottling!

    I have been using Async (just the AdPort and AdStatusLights parts) on a program running in ‘real-time’ on Windows. This program is used to monitor cows in a dairy, recording Electronic Identification tags (the cows won’t go back and get re-scanned, so we can’t afford to loose data), alerting who shouldn’t get milked (many $10K’s lost on a mistake) and giving the cows their feed.

    Yes, there are problems, but it is at present the best tool by far, so any improvements you and the others can give us, the better.

    Many thanks,
    Frank (in Western Australia)

  12. 12
    Joe Says:

    @Julian: the hair needs to go when the brain needs space so you’re fine :-)

  13. 13
    Misha Charrett Says:

    TurboPower Abbrevia is not redundant because Abbrevia does compression natively in code and does not rely on dlls (which is why I use it).

    Cheers, Misha

  14. 14
    Daniel Says:

    That’s a great idea. But I do hope that new releases (like the one Rich mentions) will still compile on older Delphi versions (like Delphi7).

    Hope to see many improvements.

    Cheers,
    Daniel

  15. 15
    SeaCay Says:

    Buy yourself a drink from me - best nesw I’ve seen today!

    Saludos

    SeaCay

  16. 16
    Holgerwa Says:

    This is great news!
    I am using lots of these components and it was sad to see them go nowhere. Now they are in good hands!
    Holger

  17. 17
    Alan C Says:

    I think it’s in good hands!

    I use OnGuard from that helpful SongBeamer page, it seems to work fine in D2010 but with a few hints and warnings.

  18. 18
    David Cresswell Says:

    ASyncPro & OfficePartner are the boys for me!

  19. 19
    Pratt Says:

    Good news.

  20. 20
    Christer Says:

    Hi Nick,
    Great news! I am a user of TP products since 1987, and look forward to improvements, with support for Delphi 2010. We use TP components extensively in our Pascal Analyzer and Pascal Browser products. Pascal Analyzer has been inspired by the TP product Turbo Analyst (pre-Delphi only).
    Best regards
    Christer

  21. 21
    Giuseppe Garzotto Says:

    TurboPower XML Partner have an interesting component to process XSL-FO stylesheets and produce html, txt and rtf outputs. PDF is missing, and it could be very nice to have it, in order to
    avoid the use of Apache FOP (that works very well but need a JVM installed and a call to an
    external bat from Delphi).

  22. 22
    Henrick Says:

    @Rich:
    OpenStreamSecII does indeed have support for AES CTR mode. The only problem is that you have to subtract one from the IV you set to a TRijndael_CTR instance to get standard output. (Which is explained by the fact that I implemented that mode even before it became standardized by NIST.)

  23. 23
    Avra Says:

    ASyncPro is surely my winner!

  24. 24
    Thomas Mueller Says:

    Please don’t forget to maintain backward compatibility to at least Delphi 2007 (non-unicode!)

  25. 25
    Atle Smelvær Says:

    What you should do is try and get a hold on where Sleuth QA went. I still am not happy with AutomatedQA (and it’s expensive), TurboPower’s tools in the area is still a lot more easy and better to use (for D7), giving you exactly what you need. The problem is, the product disappeared when TurboPower went bankrupt. Think of what you could provide in Delphi if you got a hold on this product and updated it to Delphi 2010. Integrated profiler and memory analyzer? That would be something.

  26. 26
    Mark Vovo Says:

    Congrats Nick!
    This is very timely, as my code relies heavily on AsynchPro. I was just looking for a 2010 version. Let us know when something is available for testing.

  27. 27
    Jørn E. Angeltveit Says:

    Good news. I’ve been a little bit worried about the TP future.

    Uses:
    - Abbrevia
    - OfficePartner
    - Flashfiler

    Looks interesting:
    - OnGuard
    - XML

    …and don’t forget to update the good documentation/manuals!

  28. 28
    Hichem BOUKSANI Says:

    Congratulation Nick, Hope the we’ll get "Finally" the fourth version of TP Abbrevia

  29. 29
    Paul Bennett Says:

    Absolutely brilliant news! I have been using LockBox, Orpheus, Abbrevia, SysTools in many of our projects.

    Please, please ensure that it remains backward compatible with D7 (until I can persuade the ‘bagman’to part with enough cash to upgrade!!!).

  30. 30
    Lachlan Gemmell Says:

    I use (in order of frequency)
    - Orpheus
    - SysTools
    - OnGuard
    - Abbrevia
    - LockBox

  31. 31
    Robert Love Says:

    FYI- Craig Peterson has stepped up on the Abbrevia project to clean things up, I made him an Admin on the project quite some time ago.

  32. 32
    David Heffernan Says:

    Nick,

    I use ShellShock for file system aware tree and list views and also Essentials for the calculator component.

    I’d be very happy to contribute to the effort of maintaining these.

  33. 33
    Bruce McGee Says:

    Very good news!

    I’ve used the following:

    - Async Pro
    - Abbrevia
    - LockBox

  34. 34
    Eivind Bakkestuen Says:

    Atle, SleuthQA is unfortunately (afaik) still locked up in the TurboPower vault and nobody can touch it, otherwise I’m pretty sure the original author (Per Larsen) would have done *something* with it instead of letting it die.

    Its extra sad since, as you say, AQTime just doesnt cut it.

    As for what ex TP products to focus on; Visual PlanIt is so buggy that it needs a redesign. Dont touch it. ;)

  35. 35
    Donald Shimoda Says:

    I hope that work include actual ports to fpc and lazarus, rigth?

  36. 36
    Ken Knopfli Says:

    InternetPro, ShellShock and the editor/hex in OPro used here.

    The profiling in Sleuth was GREAT! Would love to see a similar tool.

  37. 37
    Ken Knopfli Says:

    …oh, forgot: B-Tree sees a lot of use, too.

  38. 38
    Stephen Boyd Says:

    Nick;

    I have made quite a few updates to AsynPro over the last few years. The Sourceforge repository is current with my changes. I know that people out there have been trying to port it to Delphi 2009 but I don’t know to what extent they have succeeded. If you have any questions regarding AsyncPro please feel free to contact me.

  39. 39
    Craig Stuntz Says:

    Cool! Sometimes it’s amazing what you can get just for asking.

  40. 40
    Robert Smith Says:

    I use SysTools and would need this ASAP. Thanks!

  41. 41
    Rich Says:

    @Henrick: in that case, I hope OpenStreamSec II is updated (with the mentioned change) to be compatible with NIST’s AES-CTR and ported to Delphi 2009/2010. IMHO, OpenStreamSec is a lot better than LockBox. Bad crypto libraries need to go away–sooner the better because they infect programs with false sense of security or slow speed that reflects poorly on Delphi.

    But I honestly think a CodeGear-produced wrapper to OpenSSL 1.0 is the best possible solution. Especially nice if CodeGear can compile OpenSSL with C++ Builder and make it able to be statically linked to Delphi apps in 2011. With DLL calls being so easy to intercept/redirect, it is preferable to avoid crypto calls to DLL.

  42. 42
    Greg Dunn Says:

    This is great news. We extensively use the following Turbopower packages: AsyncPro, Orpheous, IPro, & Abbreavia. If have fixed a few issues in AsyncPro over the years and would be interested in contributing to the project in the future.

  43. 43
    David Heffernan Says:

    @Greg Dunn

    If you want to track memory leaks you can just get FastMM (or indeed any other half-decent memory manager) to track them for you and report them when your app closes. This works very well indeed.

    In fact with the pluggable memory manager architecture of Delphi (SetMemoryManager) it’s trivial to write your own. Back in the days before FastMM here’s what I used:

    unit Memory;

    interface

    var
    // Can be used to change the expected memory leak.
    DelphiMemoryLeakCount: Integer=8;

    implementation

    //custom memory manager to track memory leaks

    var
    GetMemCount: Integer=0;
    FreeMemCount: Integer=0;
    OldMemoryManager: TMemoryManager;

    function NewGetMem(Size: Integer): Pointer;
    begin
    inc(GetMemCount);
    Result := OldMemoryManager.GetMem(Size);
    end; (* NewGetMem *)

    function NewFreeMem(P: Pointer): Integer;
    begin
    inc(FreeMemCount);
    Result := OldMemoryManager.FreeMem(P);
    end; (* NewFreeMem *)

    function NewReallocMem(P: Pointer; Size: Integer): Pointer;
    begin
    if Assigned(P) then begin
    if Size=0 then begin inc(FreeMemCount); end;
    end else begin
    if Size0 then begin inc(GetMemCount); end;
    end;
    Result := OldMemoryManager.ReallocMem(P, Size);
    end; (* NewReallocMem *)

    const
    CustomMemoryManager: TMemoryManager = (GetMem: NewGetMem;
    FreeMem: NewFreeMem;
    ReallocMem: NewReallocMem);

    procedure InstallCustomMemoryManager;
    begin
    GetMemoryManager(OldMemoryManager);
    SetMemoryManager(CustomMemoryManager);
    end; (* InstallCustomMemoryManager *)

    type
    HWND = type Longword;
    UINT = Longword;

    const
    MB_OK = $00000000;
    MB_ICONEXCLAMATION = $00000030;

    function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall; external ‘user32.dll’ name ‘MessageBoxA’;
    function wsprintf(Output: PChar; Format: PChar): Integer; cdecl; varargs; external ‘user32.dll’ name ‘wsprintfA’;

    function IntToStr(i: Integer): string;
    var
    Buffer: array [0..255] of char;
    begin
    wsprintf(@Buffer[0], ‘%li’, i);
    Result := Buffer;
    end; (* IntToStr *)

    procedure UninstallCustomMemoryManager;
    var
    s: string;
    Count: Integer;
    begin
    SetMemoryManager(OldMemoryManager);
    Count := GetMemCount-FreeMemCount-DelphiMemoryLeakCount;
    if Count0 then begin
    if Count1 then begin
    s := ‘blocks were’;
    end else begin
    s := ‘block was’;
    end;
    Try
    MessageBox(0,
    PChar(’WARNING: ‘+IntToStr(Count)+’ memory ‘+s+’ not freed.’),
    ‘Memory Leak’,
    MB_OK or MB_ICONEXCLAMATION);
    Except
    ;//ignore - we sometimes get exceptions here when startup fails due to dongle error
    End;
    end;
    end; (* UninstallCustomMemoryManager *)

    initialization
    {$IFOPT D+} //only install custom memory manager if we are debugging
    InstallCustomMemoryManager;
    {$ENDIF}

    finalization
    {$IFOPT D+} //only install custom memory manager if we are debugging
    UninstallCustomMemoryManager;
    {$ENDIF}

    end.

    The weird stuff at the end with the custom IntToStr and MessageBox is because you can’t import any use any other units in a custom memory manager unit because that screws up the initialization order.

    Of course nowadays you just use FastMM (even on old versions of Delphi) because it usually gives you enough information for you to work out where the leaked memory was allocated.

  44. 44
    Lars Ajana Says:

    We use B-Tree Filer and would be very happy with some unicode support in B-Tree Filer.

  45. 45
    Greg Dunn Says:

    We also used Sleuth in the past. This was a great tool as well. It is hard to imagine why this has not been a standard built in feature of the Delphi debugger! It is a pretty fundemental requirment to identify memory leaks in order to make reliable applications.

  46. 46
    Henrick Says:

    @Rich: You are sincerely welcome to discuss your concerns regarding OpenStreamSecII further over at news://news.streamsec.net/. Please do.

    BTW are you aware that NIST certification applies only to verifiably identical copies of the compiled and linked module that was submitted for certification? If you rebuild or relink it, even from the exact same sources, that build won’t be certified.

    Lastly, the significance of timing attacks should neither be underestimated, nor exaggerated. The best publicly known remote cache-collision timing attack requires the timing of approximately a million request-response pairs, so the most effective counter measure in to simply renegotiate the key long before that limit is reached. There are still no known counter measures against local attacks where the attacker has oracle access to the module, except, of course, to simply not allow anyone but yourself to execute code on that computer.

  47. 47
    Craig Stuntz Says:

    Henrick, Rich:

    I think this cartoon is relevant.

  48. 48
    Anon Says:

    Don’t forget to invoice Embarcadero for any work you do in this area.

    They don’t support the community for free, so the community shouldn’t support Embarcadero for free either.

  49. 49
    Jolyon Smith Says:

    And such a shame that Embarcadero have started to impose censorship on the community.

    I allow any and all comments to my blog where-ever they come from (unless they are outright offensive or insulting to individuals - even then, if it’s only language that is offensive I edit the offensive language out but allow the comment never-the-less).

    I do this whether the comment is in agreement with me or not, and without regard for who is making the comment.

  50. 50
    Nick Hodges Says:

    Jolyon -

    What in the world are you talking about?

    Nick

  51. 51
    Dave Murray Says:

    Great News! I extensively use Async Pro, SysTools and ShellShock as well as some of the other TP code.

  52. 52
    Craig Stuntz Says:

    The spam filters on the Embarcadero blogs, which are the same as the spam filters on my blog, are (of necessity) quite aggressive. Also, I don’t get notified when a comment is held for moderation, which is a bug, but not a bug which is at the top of the web team’s priorities right now, for good reason. To an outsider, this may look like "censorship" especially if a blogger is less than religious about checking the spam moderation queue. Of course, it is not censorship at all, but this isn’t obvious to folks who don’t have blogs on the Embarcadero server.

  53. 53
    Lee Grissom Says:

    @Rich: I don’t have access to the JCL compression, so forgive me if I jump to conclusions. Abbrevia might not be redundant to the JCL compression b/c Abbrevia is 100% native Delphi code and is great for compressing streams back and forth from a data source. I used it years ago, and it was the perfect solution that nothing else qualified for.

    P.S. +1 for nostalgic praise of Sleuth QA suite… better than AQTime.

  54. 54
    Julian M Bucknall Says:

    All: SleuthQA, although an impressive, nay, killer, product for its time, has now been in the bit bucket for 7 years. No work has been done on it at all in that time, no new code has been written, no new Delphis have been supported (and Delphi 2009 would be a hoot to support), no new functionality has been designed. To be honest, I can’t even remember who owns the copyright. Seven years is an eon in software development. It’s long gone, unfortunately.

    But, hey, it was the snizz. Even before there was snizz.

    Cheers, Julian

  55. 55
    Valerian Kadyshev Says:

    Keep working Nick! And thank you for your time and interest.

    TurboPower is very helpful for all freelancers who can’t afford commercial solutions.

  56. 56
    mike Says:

    Congrats, Nick, with the good move!

    My votes go for Abbrevia, InternetPro, LockBox, and also for XML Partner, Orpheus and Office Partner.

  57. 57
    Edwin Says:

    I use OnGuard, and want to use abbrevia and Officepartner.

  58. 58
    Frank Says:

    Wow 57 comments and climbing We use Abbrevia and I also use several different versions of Delphi.

  59. 59
    Wouter Says:

    Great news.. I hope this ensures that the tp products keep working in future Delphi’s.

    I’m using AsyncPro in several projects.

  60. 60
    Patrick Says:

    Wow…dreams do come true. I have used and use most all of them except the Async. Let me know how I can help as I am about to upgrade to Delphi 2010.

  61. 61
    Sebastian Vlachopoulos Says:

    Hi Nick , what is happening with the TIOBE Programming INDEX , is it strange or what??

    http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

  62. 62
    Jeff Says:

    Great news for TurboPower users. I am using Abbrevia! Is it on the top list?

    :)

  63. 63
    Brad Says:

    @ Nick and Julian,
    re: SleuthQA

    Can’t hurt to ask. Look where it has gotten us so far. 8: -)
    If it was open, I dare say there would be some people willing to take a shot at getting it back up to speed.

  64. 64
    Alf Christophersen Says:

    Isn’t that one based on another program written by a Danish guy that made it once upon a time for Turbo Pascal, I think it was memory Sleuth or something like that.

    BUT, THEE WHO SEARCH WILL FIND!

    http://www.portableminds.com/presume.htm

    The original name was MemMonD :-)

    So maybe it’s hope

  65. 65
    Alf Christophersen Says:

    I found the originator, Per Larsen with MemMonD

    But my pointer to his homepage has gotten stuck in that spam filter

  66. 66
    Alf Christophersen Says:

    Seems like blog s p a m filter hage me :-(

  67. 67
    Alf Christophersen Says:

    Seems like spam filter don’t like.
    Have two or three messages stuck by spam filter, btw. who own SleuthQA origin, MemMonD

    Please unlock

  68. 68
    Alf Christophersen Says:

    I tried yesterday to upload more information about editor of SleuthQA, but got stuck in that spam filter.

    Seem to be my name that triggers :-(

  69. 69
    Alf Christophersen Says:

    I tried yesterday to upload more information about editor of a popular program here, but got stuck in that spam filter.

    Seem to be my name that triggers :-(

  70. 70
    Ronaldo Says:

    Great News.
    I am using ABBREVIA, AsyncPro, OnGuard, PLANIT, Systools.
    We are upgrading to Delphi 2010.

    Let me know how I can help.

  71. 71
    Jan Says:

    Great news Nick,
    I am curently setting up my environment for D2010 - trying to eliminate old 3rd party components. Orpheus and ShellShock had to go, but i still need Abbrevia, Systools and Async Pro.

    OnGuard and LockBox both looks interesting.

    +1 in favour of the freedom of SleuthQA

    Jan

  72. 72
    Godfrey Says:

    Great news I use async pro. Have been considering moving away from it because of lack of updates for new versions of Delphi. No coordination of project. Would like to continue using it.

  73. 73
    Michael D. Frederiksen Says:

    We would appriciate an update for ASyncPro AND Abbrevia.

    Abbrevia allows us to compress (and decompress) streams in native code.
    We do NOT want in have to include one or more DLL´s for that purpose.

    We warmly welcome the news about Nick being new projectmaster for all TurboPower products !

  74. 74
    Hamilton Says:

    Would be great to see some support for the old TurboPower libraries. Async Pro is of particular interest to me. Special thanks to Stephen Boyd for maintaining this in recent years, cheers! I’ll be interested to see how you manage a repository with community submissions, hope you can come up with something that (a) gets useful updates implemented ASAP (b) keeps bad code out. Good luck!

    Oh, and anyone trying to install OnGuard on D2007 or later needs to put "DesignIntf, DesignEditors" in the places where the package compilation stops (or just remove the conditional define for Delphi 7).

  75. 75
    Jeff Says:

    I can make do without the other TurboPower products… but I need Async Pro. Been using it since the days of Turbo Pascal :-) Prefer it for Delphi 2010 too asap.lol. Thanks Nick!

  76. 76
    Craig Says:

    B-Tree Filer sees a lot of use here. I know the it is dependent on the size of string[x] as it uses file offsets. This would really help us move to 2010 sooner rather than later because we can at least read filer data and move it to something like Firebird. We use Delphi 2007 right now and love it.

  77. 77
    Brian Andersen Says:

    Hi Nick.

    When will you open for Subversion support on all projects? Also, when will you update the homepages?

    What about InstantObjects? It’s a nice little tool! How about putting some "semi-official" sponsoring to that tool too?

    Best regards,
    Brian Andersen

  78. 78
    Aaron Says:

    Will somebody be working on BTreeFiler? I submitted a patch to get it to compile on win32, as well as the start of fpcUnit tests. I’d like to continue that work but would like to be able to commit somewhere.

  79. 79
    Aaron Says:

    Or perhaps the project(s) could be moved to SourceForge’s Git offering, which would make this sort of contribution easier.

Leave a Reply

© 2010 Nick Hodges | Entries (RSS) and Comments (RSS)

Your Index Web Directorywordpress logo
Close