Installed perl5.8.1-RC2 on the laptop and started to turn a bandaid I'd made for PadWalker into a proper fix.
After much study of the newly refactored pad.[ch] code I'm starting
to settle on the notion that PadWalker is relying on bugs which no
longer exist. There's probably a very small fix to be made, mostly in
documentation explaining the change in behaviour, I just have to spend
a little more time uncovering it.
Shaved a tiny amount off the Devel::LeakTrace overhead by calling on malloc a lot less. From 2.65 seconds down to 2.59 for a simple
for (1..1000) {++$x} loop. Only 2.3% by my sums, but it all counts.
Released 0.04 to CPAN.
Met up with some of Fotango folks for lunch in the park. Heard of many wonderous things from oscon, including getting a better notion of how ponie is going to happen.
---
I came away with the seeds of something in my brain. We were talking a little about parsing pod when Paul commented on how much of a pain it was to author compared to textile.
I'm not sure just how the dots got crossed to the notion of a textile->pod filter, I blame the hot hot sun unless Paul wants to take the credit/blame. Anyhow, just using a textile parser and then writing some emitting code seemed like it should just work, so I opened the box.
Reading the source to Text::Textile caused the loss of sight in my left eye. Prolonged exposure to regexes whose only mission in life is to generate html does that to me.
Similar examination of Text::WikiFormat made my other eye twitch, though it seems to at least be pluggable in what it'll emit. I've got a mental bookmark to come back to it, but first some calming C eye balm.
---
Backfilled this, though I've not been doing much, writing it up makes it feel a little more substantial and reminds me what I should be doing.
---
Pulled the hugely destructive set_plugins code out of
Siesta::List to find that only 3 test scripts failed. Sadly
they're the important ones for list administration, but maybe I can
just fill the gap with dolls heads and wax.
---
Did some light work on Mariachi to pull some of the speed back by allowing the more costly options to be disabled.
Spent a couple of hours installing -dev packages to get a build of Galeon back onto my machine.
At some point in the recent past debian unstable updated the core mozilla packages, which conflicted Galeon out of the park. This is considered ungood.
Building from source is also ungood.
The wrongs have this time made a right, as I now have my presentation platform (Galeon and Device::Ericsson::AccessoryMenu) working again with just over a week till YAPC::Europe
Started to port the Siesta schema over to Postgres. Ran into naming problems - user is a reserved word in Postgres land.
Ranted a bit, to provoke a show of hands.
---
Note to future self: never upgrade modules while you've got a large set of uncommitted code on the go. Class::DBI 0.93 was far too tempting, but with a partly reworked schema, on a new RDBMS, I should have just resisted.
Plodding on with getting Siesta to a releasable state.
Noticed while fecking around with the defer queue that the prefs aren't structured right. Resolved to rework little bits of the design using Postgres to check that all the foreign key constraints would work.
Started working over the Siesta web frontend. I hate developing web stuff, but it's one of the last few things that just have to be
built.
---
Remembered to release Mariachi 0.4, now with added slowness.
---
Started to think again on Devel::LeakTrace. Realised I was rampantly over-calling malloc for the most common cases and so shaved those a bit.
Timings went from:
% time perl -Mblib -MDevel::LeakTrace -e 'for (1..1000) {++$x}'
leaked SV(0x8140de0) from -e line 1
leaked SV(0x8140e1c) from -e line 1
perl -Mblib -MDevel::LeakTrace -e 'for (1..1000) {++$x}' 3.34s user 0.02s system 100% cpu 3.355 total
To:
% time perl -Mblib -MDevel::LeakTrace -e 'for (1..1000) {++$x}'
leaked SV(0x8140de0) from -e line 1
leaked SV(0x8140e1c) from -e line 1
perl -Mblib -MDevel::LeakTrace -e 'for (1..1000) {++$x}' 2.65s user 0.01s system 101% cpu 2.613 total
So a nice fat 25% speedup in a few easy steps.
Of course it's still burning way too many cycles in maintaining all the state. Compare the instant timings of an unladen perl.
% time perl -e 'for (1..1000) {++$x}'
perl -e 'for (1..1000) {++$x}' 0.00s user 0.00s system 0% cpu 0.000 total
Should tuits present themselves I'm going to see if Judy arrays really work well as they claim to, since they're potentially better suited for this than the existing use of GHashes.
---
Nope, Judy is slower:
% time perl -Mblib -MDevel::LeakTrace -e 'for (1..1000) {++$x}'
leaked SV(0x8140de0) from -e line 1
leaked SV(0x8140e1c) from -e line 1
perl -Mblib -MDevel::LeakTrace -e 'for (1..1000) {++$x}' 4.28s user 0.01s system 100% cpu 4.278 total
That and the API is weird.
Reworked my makereadme script
to make use of the META.yml that Module::Build generates, and
fixed up a distribution bungle in the File::Find::Rule beta.
Returned to the land of plentiful wire-free bandwidth.
Released a development snapshot of File::Find::Rule, which puts me on the road to doing a full release.
Andy really wants to see a release by the 1st, since my svn version now papers over that damned thinko. I await a borrow of his time machine so that I can change the preceding 10 releases and fix his article for him.
Confirmed my Siesta talk for YAPC::Europe, and acknowledged arrangements for travel.
---
Played about with making Devel::LeakTrace not be such a drag factor.
My first idea was to simply spool out the information about all allocated SVs on every new line, rather than updating hashes on the fly. That was really fast, for the simple case, but for a more complex script the file grew and ate all my diskspace in a couple of seconds.
The next plan is to use a pair of bitvectors to gate the GHash updates since for a lot of lines new SVs won't be getting allocated.