| [ | Tags | | | automated tests, backup, bug, conway, fortune, fortune cookies, fortunes, freecell solver, game of life, libxml, mandriva, mediawiki, module-starter, module::starter, perl, perl 6, perl6, pysol, python, qa, ruby, smop, tap, tap-parser, test-run, testing, unit tests, walkmeth, xml-grammar-fortune, xml-libxml | ] |
| [ | Current Location |
| | Home | ] |
| [ | Current Mood |
| | productive | ] |
| [ | Current Music |
| | Maksim Mrvica - Exodus | ] |
Well, I added more tests to
Module-Starter,
and while I was writing the tests, I discovered some bugs in it. So now
there's
a
patch with the tests and the bug fixes and
another
one with only the bug fixes. Both of them are unapplied.
Having been trying to learn Ruby recently, I decided to write a
Conway's
Game of Life implementation for it. It took me most of one evening to get
it working and then part of the other day to make it more idiomatic with the
help of the people on Freenode. It felt good in a way.
Then I decided to finally see why my
Test-Run failed
many tests recently. As it turns out, this was due to broken
TAP-Parser
compatibility: the skip message in skip_all field now accepts only
"SKIP " and not something like "skipping: ". Fixing the Test-Run tests
fixed it and I released new versions.
I also noticed that many of the Test-Run-CmdLine plugin had the following
pattern:
sub _init
{
my $self = shift;
$self->NEXT::_init(@_);
$self->add_to_backend_plugins("AlternateInterpreters");
}
So I overloaded the construction function, only to add a plugin. I decided to
fix this by doing an accumulation of such plugin specifiers in every plugin,
and so got only:
sub private_backend_plugins
{
my $self = shift;
return [qw(AlternateInterpreters)];
}
Which is much cleaner and less intrusive.
Next on my plate was Freecell
Solver. I decided to work on make_pysol_freecell_board.py
which is a Python script that generates the initial boards of PySol. The
script was crudely written to begin with and it became even cruder as
time went by. I decided to give it a serious face-lift. So what I did was:
-
Convert the columns (of the card games) from strings to arrays. Each card
was stored there individually.
-
Convert the cards to a class, instead of integers and strings. Create similar
classes for managing columsn and boards.
-
Extract many functions and methods.
-
Create a class to manipulate the various game types, and forward the different
logic based on it.
-
Pythonised the script by employing some Python paradigms.
You can find
what
I have so far in the repository. It's much better than what I started
with two days ago. Writing such Python code now seems more fun than I recall
it, and I actually enjoyed it.
In regards to
SMOP, they
convinced me to install Ruby-1.9.x under a prefix, which I did, but then
it yelled at me for not having a Haskell cabal thingy. Turns out that
the Pugs Makefile.PL installs it somewhere under the home-directory, which
I didn't want to happen, because I want to keep it tidy. Again, this
reminded me of Drivl.com
recipe on how to make square corners, and I decided to give up on SMOP
again.
And I should note that I was able
resolve
a long-standing problem I had with XML-LibXML/XML-LibXSLT on my Mandriva
system, and now I simplified the XML-Grammar-Fortune build-system.
I also spent some time writing a backup system for some of the Israeli
MediaWikis that I manage. This involved a bunch of Perl scripts.
So - Perl, Ruby and Python - all in a few days work. Cheers everybody.
|