I've been intending to have Test-Run use TAPx-Parser instead of what it is using now for a long time now. A few days ago, I got into actually doing that. So in one large refactoring, I converted Test::Run::Straps to make use of TAPx::Parser. In the process I removed its support for the deprecated todo tests in the test plan, and fixed a bug in TAPx::Parser, which took a very long time to find, until I decided to check whether TAPx::Parser could be the problem.
In any case, TAPx::Parser is now integrated into Test::Run, which I'll probably make a new release of soon. While I was in the neighbourhood, I decided to try to integrate Test::Run into Module::Build. This turned out to be much easier than I feared it would be, and now I can type "./Build runtest" or "./Build distruntest" and get the summary line in colour. I guess I can try to do the same for ExtUtils::MakeMaker, but I guess it will be somewhat harder.
In other news, I've did some work on File-Find-Object. Now the is-a relationship is gone (factoring it out turned out to be quite easy the second time I tried), and several cleanups were made. Next I'd like to add more tests to it and also enhance it in several respects, and also try to patch File::Find::Rule to make use of it instead of File::Find. (Which I might convert to eventually allow a choice of either.)
The biggest news however is XML-Grammar-Products-Syndication, which is an XML-based framework for generating categorised lists of recommended media items (such as books, CDs or movies). It involved a lot of work of DTD, XSLT and Perl hacking, with a lot of test-driven development. After reading the Zvon XSLT Tutorial I think I finally got the hang of XSLT, and was able to write the XSLT stylesheet for compiling the products syndication grammar into XHTML on my own without any help from the outside.
Notice that I've decided to put it under the CPAN XML-Grammar-* namespace, which I believe should contain modules for dealing with specific XML grammars, and leave the main XML-* namespace for generic XML modules. The module may still not be ready for general consumption, for various reasons, but it's good enough for what I need.
I'm so glad I'm writing code again.