April 5th, 2005

diesel, learning, evil, sweeti

Reinventing CPAN

At work I'm reinventing CPAN but for a multitude of interoperating languages. Which sounds an awful lot like FreePAN which coincedentally seems to have got some momentum at YAPC::Taipei.

To be honest I don't like some of the design decisions of FreePAN, particularly the "being backed by Subversion" nature. I don't even like the idea that it's backed by a VCS let alone tying into one specific one. I just feel that there should be a distinction between developer, installer and user. But maybe I'm strange.

My current plan is to not try and parse meta data out of different formats which should be possible but would take too long. Instead all meta data gets stored in various files in the root directory - MANIFEST, MAINTAINERS, VERSION, DEPENDENCIES are the obvious ones. It mandates that there must be a docs directory with html docs in it. This is so hacky it's not even true but I can't think of another clean way of guaranteeing there being HTML documentation.

Some other design issues I've thought of :-

How to deal with Branching

Do we tag automatically on release, release automatically on tag or keep the two seperate?

Keeping VCS agnostic

What language to write it in - should (could?) the frontend and the indexer be written in different languages

Do we generate the distribution using MANIFEST and VERSION or should the user provide a generate_dist script?

Dummy packages (i.e external dependencies)

RPM etc. generation

Is there a smarter way of doing the DB design so that schema changes aren't a complete arse?

diesel, learning, evil, sweeti

Devel::ebug

Leon decided that what was needed was new Perl debugger and Lo! Devel::ebug was born. A teensy bit hacky but much better than perl5db.pl was. It claimed to be a "a simple, extensible Perl debugger" but, to be honest, it wasn't very extensible and, given my love of plugins I decided to hack in plugins using, what else, Module::Pluggable.

This required more than a bit of Yak shaving (doesn't it always) some of it wasted because Leon also duplicated bits of my refactor but in the end I got it all working and very nifty it was too.

Bizarrely Devel::ebug doesn't work under 5.8.0 my patches or no - apparently this is a known problem and I can fix bits of it by changing

    use IO::Socket::INET;
    use String::Koremutake;
    use YAML;
    use Module::Pluggable search_path => 'Devel::ebug::Backend::Plugin', 
                          require => 1;

into

    BEGIN {
        require IO::Socket::INET;
        require String::Koremutake;
        require YAML;
        require Module::Pluggable;
        IO::Socket::INET->import;
        String::Koremutake->import;
        YAML->import;
        Module::Pluggable->import( search_path => 'Devel::ebug::Backend::Plugin', 
                                   require => 1 );
        sub DB {};
    };

but the breakpoints stop working and ... bah, I'll let someone else figure it out.

diesel, learning, evil, sweeti

Productivity decrease

Gosh, a month and a bit since I last stuck something in here.

I go through patches of insane productivity and then patches of complete lethargy and this seems to happen in a 3-odd month cycle. And I can feel myself slipping into the down cycle which is a shame because I've got some fairly interesting projects on the go at the moment.

Maybe I can kick myself out of it if I think of an interesting new project.