One of the problems I've been facing lately is because of Windows' combination of case-preservation and case-insensitivity in file names, specifically dealing with the 'version' and 'Version::Requirements' modules which are both required for ExtUtils::MakeMaker nowadays.

You end up with perl/lib/version/Requirements.pm as a filename, or perl/lib/Version/vpp.pm and vxs.pm - usually the first one.

(in retrospect, Version::Requirements was a bad name for that module for exactly this reason - but if you come from a Unix background, it's not something you think of when naming your modules!)

I need to use the development version in order to get MYMETA files, which I plan to start using soon, so don't say 'The current release version doesn't use Version::Requirements, so you could use it!' That's just delaying the problem.

The fact is that an MSI will throw warnings when creating an installer that would install two files with names that would be the same, given Windows' file name semantics - and rightfully so. So creating builds that install the correct filename is now becoming a problem that I have to solve. And yes, this is delaying 5.12.4 and 5.14.x builds. I'm working on this as quickly as I can, given the other demands on my time. I think I have it solved now, and am running a test 5.12.4 x64 build right now. Then I'll start in on 5.14.1.

I have had a few people contact me in response to my request for help last week on FLOSS Weekly. If I haven't contacted you back yet, don't assume I've forgotten about you - I haven't. The same reasons for needing the help are the reasons I haven't contacted you back yet (that and I need to get a little more infrastructure written and in place!) I'll get to you soon!
My internet HAD to go down JUST after my landlord switches the office phone to voicemail for the weekend - and since it's not in my name, I can't get it fixed until Monday. So the Perl::Dist::Strawberry modules won't get released until after that. (I'm posting from my fiance's computer right now.)
The releasing modules will follow in due course in the next few days.

You can get it from 3 places:

A) the main site http://strawberryperl.com/
B) the download mirror at http://strawberryperl.curtisjewell.name/
C) the googlecode download mirror at http://code.google.com/p/strawberry-perl/ (non-exotic builds.)

If the links at any of those places don't work, please tell me.
I'm starting work on being able to build 5.14.0.

And yes, a Perl::Dist::WiX build works sans-testing so far. (I just added the last change in Perl::Dist::WiX to get EU::MM upgraded, and I'm trying that now. Otherwise, FCGI will not build.)

http://hg.curtisjewell.name/Perl-Dist-WiX
http://hg.curtisjewell.name/Perl-Dist-WiX-BuildPerl-5140

While the Strawberry-BuildPerl-5140 repository is there, there are no changesets in it yet.

(If you're wondering, the release-1.750 branch in BuildPerl-5140 is for the NEXT version of Perl::Dist::WiX, where I'm going to have the plugins do quite a bit more that they do in 1.500+.)
If there are no problems, this will become the next release version of Strawberry Perl on Thursday at 1200 UTC or so.

Same links as the previous entry, or you can go to http://strawberryperl.curtisjewell.name/ to use my 'backup site', as well.

This should FINALLY fix the installation crashes, and allow the README file to load.
If there are no problems reported in 5-7 days, these will become the officially blessed releases of Strawberry Perl.

If you're not willing to test, go to strawberryperl.com and use the links on the front page (these aren't linked there yet, and won't be until official blessing.)

If you are, here they are!

5.12.3.0 32-bit:

http://www.strawberryperl.com/downloads/5.12.3.0/strawberry-perl-5.12.3.0.msi
http://www.strawberryperl.com/downloads/5.12.3.0/strawberry-perl-5.12.3.0.zip

5.12.3.0 64-bit:

http://www.strawberryperl.com/download/5.12.3.0/strawberry-perl-5.12.3.0-64bit.msi
http://www.strawberryperl.com/download/5.12.3.0/strawberry-perl-5.12.3.0-64bit.zip

5.12.3.0 portable:

http://www.strawberryperl.com/download/5.12.3.0/strawberry-perl-5.12.3.0-portable.zip

5.10.1.5 (32-bit only, installs to C:\strawberry)

http://www.strawberryperl.com/download/5.10.1.5/strawberry-perl-5.10.1.5.msi
http://www.strawberryperl.com/download/5.10.1.5/strawberry-perl-5.10.1.5.zip

5.10.1.5 (32-bit only, installs to D:\strawberry)

http://www.strawberryperl.com/download/5.10.1.5/strawberry-perl-5.10.1.5-ddrive.msi

I'll work on the release notes and such over the next few days.

(Edited: corrected links)
Been a nervous day yesterday, (my parents and my fiancee finally got the chance to meet) but I do have 2 pieces of Strawberry news:

One, the two smoke machines are building a random version of Strawberry every night, using the code at http://hg.curtisjewell.name/strawberry-smoker. No, there isn't a place where the code so built is being uploaded yet. I intend on that, in order to provide a 'daily alpha' for those that want to try them.

What IS being done is that I (and one other person so far) get what the screen output of the smokers are doing as an e-mail. If you want to be on that list, just contact me here for now (I'll probably make it a mailing list eventually.)

One of the smoke machines also smokes CPAN, with the output from that going into the CPAN Testers Metabase per normal procedures (I'll be bringing up the other one soon, and making the current one smoke using 64-bit Strawberry 5.12.2 instead of the 32-bit Strawberry 5.12.2 it's currently using.)

Two, Noting that the smoke machines have been running successfully (when I download the files first - I run them in 'don't get the files from the internet' mode) for the past 3-4 days, even though a check has been added to the build itself that all files in the .zip get entries in the .msi (the cause of the crashes in the .msi's for 5.12.x lately is that there have been files missing) - THERE WILL BE A RELEASE SOON.

This will be the 5.10.1.5/5.12.3.0 'February' release. I'll try and get a beta of 5.14.0.0 out after this is done, but with the release process for perl the way it is (with only one month between .0 and .1), we may end up waiting until 5.14.1.0 for a non-beta.

I'm going to release-candidate mode as of this point, and the links to the builds will be here and on the perl-win32 list, as well as e-mailed to the 'private list' of interested people I have once they're built and uploaded (which should be Monday night/Tuesday morning, hopefully)

I'm locking down the minicpan I'll use for the builds to be the one I pull MONDAY, the 9th at 1700 UTC (11am US Mountain Daylight time) - my automated pulling for the smoke machines does it at my 11am, I'll just copy off the contents of Monday's pull.

5.10.1.5 will be the LAST 5.10 build built. No more updates for 5.10 Strawberry, it's done, stick a fork in it!
(but not crotchety) CPU that caused the problems with Math::BigInt::GMP.

The fix is to change out the libgmp library, and this will be tested later today.

See http://hg.curtisjewell.name/Perl-Dist-Strawberry/rev/68bfeebf36f0 or https://fisheye2.atlassian.com/changelog/cpan?cs=13768 for more information.

In other news, we've fixed the 'missing-README' bug - the README file (and a few links, as well) were accidental casualties of the 'pluggable-Perl-version' move.

So hopefully I'll be able to build a Beta 1 this weekend.
5.12.3 build is being painful, but there is progress. I got a quick response from the maintainers of the Math::Big* modules on one issue, but there's another I haven't reported to them yet - nor do I know whether it's their issue or mine! Math::BigInt::GMP is ABENDing during its tests. This could be caused by the build of libgmp I'm using, (which was built from a mercurial checkout from last year) so I'm going to put fixing that off until after Beta 1, and just skip it for now... problem being that it's near the bottom of a dependency tree, so all those modules will have to be yanked for Beta 1.

But at least a build of Strawberry Perl 5.12.3 will be available to investigate with!
Built 5.10.1 successfully again (hit a bug that made me surprised it ever built before) and 5.12.3 built through perl, at least, before it broke. (ran into the fact that I forgot to specify where pari for 5.12.3 lives.) I fixed that, and I'm doing a completely non-forced build of 5.12.3 to make sure everything works fine, then I'm going to chase after the missing-README bug tomorrow.

Oh, and I have a code-signing certificate, so I can sign the .msi's now. No more off-putting yellow message about installing unsigned software. Instead, there'll be a blue message in the same place - if I remember to go and sign before uploading. (my signature provider only has a 'new-style' signing server, so I've got to copy the files up to my Windows 7 machine before I sign and upload them.)

So, 5.10.1.5 Beta 1 and 5.12.3.0 Beta 1 should be up within the next few days, I hope.
I've got my 'smoker' machine set up for Strawberry 32-bit finally, and it's successfully built a 5.12.2 build. The script to set up a build environment from scratch, and then use it to do a build, is at http://hg.curtisjewell.name/strawberry-smoker - I'll expand it to do QA testing, and to send to an e-mail list, later.

Yes, there was no README file when the build was finished. That's likely the reason there were problems with the .msi installations crashing - it expects to change file locations in the README file. I thought upgrading would cause the crashes, but instead, it looks like upgrading would have HIDDEN the situation that caused them.

I'm going to try a 5.10.1 build today and see how it works.

Hopefully I'll be able to get a beta of 5.12.3 built this weekend, and start releasing code.
FINALLY got the beta out... took longer than I expected. Because of that, I'm not building a 64-bit version this time. I will build it for the final. October release MAY end up being released the first weekend of November at this rate - I only have so much time after work and on the weekends.

I DID get the code to have right-click/double-click settings for .pl files added. Right now, they're mandatory - after the October release, I'll throw a switch in.

At any rate, here are the links (I'll have to edit the beta page tomorrow):

http://strawberryperl.com/download/5.10.1.4/strawberry-perl-5.10.1.4-beta-1.msi
http://strawberryperl.com/download/5.10.1.4/strawberry-perl-5.10.1.4-beta-1.zip
http://strawberryperl.com/download/5.10.1.4/strawberry-perl-5.10.1.4-ddrive-beta-1.msi
http://strawberryperl.com/download/5.12.2.0/strawberry-perl-5.12.2.0-beta-1.msi
http://strawberryperl.com/download/5.12.2.0/strawberry-perl-5.12.2.0-beta-1.zip
http://strawberryperl.com/download/5.12.2.0/strawberry-perl-5.12.2.0-portable-beta-1.zip
I ended up polishing Strawberry Perl off this last weekend, instead (in between sessions of General Conference.) I'll post in my personal journal tonight as to why, and crosspost it here.

I'm testing the first 5.12.2 build this morning, and if all goes well, a beta should be up Tuesday night, and the build modules Wednesday night.

I've also got the opportunity to talk to some people who use Strawberry, and they REALLY want a .pl association - so I'll be adding it after the beta, if not before.
I ended up finally getting a job in computer programming, (I started it Wednesday) and moving to a new apartment.

I work with two other CPAN authors (nice surprise) and I'm having to dredge what *nix skills I have out of my memory. :)

Plans for Strawberry are that I'll be working hard on polishing everything this weekend for a first beta release.
There is some stress going on in my personal life, but Strawberry Perl is rolling forward.

Two major things are happening:

1) Making the perl-building process itself pluggable. This is 99% done, and development versions with this code, and the plugins required to use them, will be released over the next few days.

2) Allowing the user to choose how much of an "on top of Strawberry" distribution is to be installed.

I'll be gone over the weekend, (Friday to Sunday) but should be back online and working Monday or Tuesday. If 5.12.2 is out by then, I'll release a beta version of it then.

I've also checking why a "Strawberry-process" 5.13.4 won't work ( http://rt.perl.org/rt3/Ticket/Display.html?id=77416 ), and checking how well a branch of ExtUtils::ParseXS will work for Strawberry (answer: we're working on it.)
Apparently Dist::Zilla is the "new shiny" for creating and releasing distributions... and I got a "WHAT? You're still using Module::Starter???" question... so I'm creating a Dist::Zilla::BeLike::CSJEWELL for myself (and anybody else that wants to use it) that includes both a profile for creating a new distribution (I got the idea from http://www.dagolden.com/index.php/955/creating-new-distributions-with-distzilla/ ), a PluginBundle, and a few Plugins, as well as a few other things to support those 3 things.

The repository is at http://bitbucket.org/csjewell/dist-zilla-belike-csjewell - it's still a work in progress. The creation half is pretty much done, the release half is not. (I still need to get an "upload to my own non-cpan web site" plugin done, and a "commit tarball to svn directory" plugin done, as well.)
The locations are as follows:

http://strawberryperl.com/download/professional/strawberry-perl-professional-5.10.1.3-alpha-2.msi [85.4 MB (89,592,320 bytes)]
http://strawberryperl.com/download/professional/strawberry-perl-professional-5.10.1.3-alpha-2.zip [108 MB (113,595,865 bytes)]

Since this is 5.10 based, it's not a relocatable version - it installs to C:\strawberry\ only. The intent is that Alpha 3 will be 5.12 based, and therefore, will be.

Two small bugs already found:
1) the README.txt file isn't as fleshed out as I like (or as Strawberry Beta 2's was) - it was a matter of running out of time before I realised my error.
2) SDL got installed into site - I had to pin the version and forgot to tell it the M::B directions for installing into vendor.

I'll flesh out the release notes and make a better announcement (with a section of strawberryperl.com/beta/ dedicated to this) later today.
This is a picture of the final screen of the installer. Note that it now has a "Open README file" check box - this is also in the current Strawberry Perl betas. Yes, I just noticed that I need to polish the text a little bit. :)





The start menu has been split up - those who have been installing the current Strawberry Perl betas may have noticed that the split is there, too:











And we have Padre - this is a picture of a portion of the Strawberry Perl Professional builder code within Padre:





And here is the list of modules from that build:

Click here to see list... )

The plan is (and I think we'll make it) to have Strawberry Perl Professional Alpha 2 out for what I call Pioneer Day (July 24th, a week from today, otherwise known as Padre's 2nd Birthday. Me, I think it's gotten into the terrible twos a little early!)


Here is what will be included:

  1. All modules from Alpha 1 are updated.

  2. Most modules from current versions of Task::Kensho, Task::Moose, and Task::Catalyst are included. (a few do not build, or do things that Windows does not like.)

  3. Frozen Bubble is now included.

  4. Padre 0.64 is included.

  5. The CPAN Testers 2.0 toolchain will be included - you'll still have to go and configure it yourself, however. (I'd like Alpha 3 to contain a graphical configurator for CT2.0, as well as a few other things. Alias' wxFormBuilder work will help much here.)


Right now, I'm working on polish and verifying with stakeholders what modules should be put in or taken out.


If you have any particular requests, or any CPAN module fixes that need to go in, (icons for a few sites/programs would be nice) contact me now, because I'll be using the same minicpan that the Strawberry RC's will be using to build SPPα2, and the code for building it is at http://svn.ali.as/cpan/trunk/Perl-Dist-Chocolate/. lib/Perl/Dist/Chocolate.pm, among other things, contains the list of modules that will be installed.

It's at the usual place: http://strawberryperl.com/beta/

This fixes the bugs that were in Beta 1, adds some polish, and updates all modules.

If your modules are in Strawberry, consider this your warning: the minicpan will be pulled in 96 hours - 11pm Wednesday the 21st GMT - for the release candidates.

Right now, I'm using it as a basis for Strawberry Perl Professional (5.10.1.3b2) Alpha 2 - I'm doing a test compilation right now, and have been for the last 2 days.

See the next post for the news about that.
But now I'm doing a last runthrough of Strawberry Perl July 2010 Beta 2. If this runthrough works, I'll build and upload it tomorrow (which will come in about 30 minutes)

CPAN Testers 2.0 works great, even on a "Strawberry x64" system. - in fact, that's what I'm testing it out on right now. Once I build Beta 2, I'll wipe out any leftovers of the current installation, and then reinstall Beta 2, the CT2 stuff, and the stuff I want for my next generation of my website (which is being written in Catalyst as my own personal "how does this work?" test. I'll put it up on BitBucket once it's a little more fleshed out...)

Then it will finally be time for Strawberry Professional Alpha 2 to be tried (and hopefully not found wanting.) There will still be stuff that needs to wait for an Alpha 3, but at least there will be a refresh out there.

Now I've got to go pick up my brother from work (he had to be dropped off today), fold clothes, and do dishes.
I've got to do these 3 things in order first.

1) Take 2 days to get home from YAPC. (I was crazy enough to do flipping GREYHOUND from Utah.)
2) Test and Build Strawberry Perl July 2010 Beta 2
3) Test and Build SP Pro Alpha 2.

So plan on 2 weeks.

I've also got a talk idea I should start mulling over in my mind, too, for the next one.
The final portions of the Corporate, Embedded, and Multi-user Strawberry Perl grant have been completed.

There were three main parts to the grant:

1) A script that allowed the local::lib module to save its settings on Windows easily.

This script is complete, and is available from CPAN and has an SVN repository for future changes.

2) A merge module that allows other people to build distributions on top of Strawberry Perl.

The merge module started being generated with the January 2010 releases of Strawberry Perl, although I did not feel comfortable documenting how to use it at that time.

"Strawberry Perl Professional Alpha 1" and the "Strawberry Perl + Padre 0.56" installers both used this merge module.

It was improved for the April 2010 release of Strawberry Perl, and initial directions for building a "Strawberry Perl plus..." distribution using it are now available and at http://strawberryperl.com/documentation/building.html.

This portion of the grant was completed first, basically.

3) The ability to choose where Strawberry Perl was installed.

There was a bug found in Perl that needs fixed in order for 5.10.x versions of Strawberry Perl to be easily movable.

However, 5.12.0 did not have this bug, and the ability to choose where Strawberry Perl was installed was made available in the April 2010 release of that version of Perl.

This ability was improved for future releases. (April 2010 used a script and a hard-coded file list to do the relocation, due to lack of time to fix bugs in the relocation DLL, while future releases [including the July 2010 betas] will use a (now completed) DLL for the installer, and generate the list of files that need processing semi-automatically. A script is also available for .zip packages.)

The merge modules for 5.12.0 also incorporate this capability.

There are limitations to the location that can be chosen, but now the 5.12.x (and future) versions of Strawberry Perl can be installed on any drive, and can be installed in any directory path that contains no spaces and only uses a basic set of characters.

This was the main portion of the grant that was worked on after January 2010.

The current versions of Perl::Dist::WiX (1.200001) and Perl::Dist::Strawberry (2.10) that are available on CPAN will generate merge modules, or use them, when told to do so, and will create relocatable distributions when told to do so.

During the grant period, it also became possible to build Strawberry Perl for x64 processors. This has also been done.

I have had fun, learned a lot, and am very relieved.
I wanted to throttle Strawberry-chan's neck for a day or two there - a bug that got fixed in Moose revealed a few bugs in the Strawberry build toolchain - which just now got found and fixed. Took 2 days to find.

Again, beta site is http://strawberryperl.com/beta/ - what got fixed and added is listed there.

64-bit is being uploaded tonight, the other builds got uploaded a few days ago. Release notes pages, the updated toolchain, and that type of stuff will be up tomorrow, so don't be surprised if those aren't up yet.

This includes the first Strawberry build of 5.12.1, including a portable build.

Whew...

May. 23rd, 2010 11:21 pm
I've been sick the last few days (that kind of thing happens) so it's delayed the pre-testing of July 2010 Beta 1 just a little bit.

Hopefully, it'll be out Tuesday or Wednesday. (I intended on tomorrow, but it only now got most-of-the-way-built.)

At any rate, I forgot this in the last post, so adding it in again.

http://shadowcat.co.uk/blog/matt-s-trout/iron-man-lost?colour=pink&title=Why+Module::Build+is+better+for+installing+your+CPAN+distributions+than+ExtUtils::MakeMaker

Thanks to the Ironman people for fixing the aggregator, by the way... I figured it would be something simple like that, I just didn't know what.
http://perl5.git.perl.org/perl.git/blob/d069c0939011465ebb38fe3c8ba2bf2164f7ae17:/Porting/epigraphs.pod#l25

"For those who go in quest of the sepulchre, faith is bridge enough."

I hope I can pick better if I ever release-manage a 5.13! Certainly applies to us Perl people sometimes.

(Edit: Should have make it clear that I say that because I LIKE it, not because I don't.)

5.13.1 is finally out. I won't worry about 5.13.x very much until x gets to 9 or so (because then we're close to a 5.14, which I want to verify early will work for Strawberry.)
The C++ version of the relocation code looks like it's FINALLY starting to shine.

So I'll probably be releasing Beta 1 early this next week.

As for what mst's talk should be, I'd like to see him turn blue in the face... *grin*

So my proposed title is "Why Module::Build is better for installing your CPAN distributions than ExtUtils::MakeMaker".

And I like the idea of having his hair orange - it IS the official color of this blog, after all. (although I do have to admit the idea of seeing him do a Kojak haircut is funny, too.)

http://shadowcat.co.uk/blog/matt-s-trout/iron-man-lost?colour=pink&title=Why+Module::Build+is+better+for+installing+your+CPAN+distributions+than+ExtUtils::MakeMaker
Well, on http://use.perl.org/~Alias/journal/40184, Alias described how we shrunk the Strawberry Perl .msi files by ordering which files went into the databases, and suggested an Archive::Tar::Optimize. Let's see if that's actually worth doing.

Script:
#!perl

use 5.012;
use warnings;
use Archive::Tar qw();
use File::Find::Rule qw();
use File::Spec::Functions qw(updir rel2abs abs2rel catdir catfile splitpath);
use File::pushd qw(pushd);
use IO::Compress::Bzip2 qw(bzip2);
use IO::Compress::Xz qw(xz);
use IO::Compress::Gzip qw(gzip);

# This script assumes an unpacked perl distribution here.
my $PERLDIST  = 'L:\\perl\\perl-5.12.1';
my $ROOTDIR   = rel2abs(catdir($PERLDIST, updir()));
my $DISTDIR   = abs2rel($PERLDIST, $ROOTDIR);
my $TESTDIR   = 'C:\\Users\\Curtis\\Desktop\\tartest';
my $DUMB_TAR  = catfile($TESTDIR, $DISTDIR . '-dumb.tar');
my $SMART_TAR = catfile($TESTDIR, $DISTDIR . '-smart.tar');

sub compare {
	my ($a, $b) = @_;

	my (undef, $a_dir, $a_file) = splitpath($a);
	my (undef, $b_dir, $b_file) = splitpath($b);
	
	my ($a_ext) = split /[.]/, scalar reverse $a_file;
	my ($b_ext) = split /[.]/, scalar reverse $b_file;
	
	$a_ext //= q{};
	$b_ext //= q{};
	
	if ($a_ext ne $b_ext) {
		return $a_ext cmp $b_ext;
	} elsif ($a_dir ne $b_dir) { 
		return $a_dir cmp $b_dir;
	} elsif ($a_file ne $b_file) { 
		return $a_file cmp $b_file;
	} else { 
		return $a cmp $b;
	}
}

say "Starting test.";

my @filelist = File::Find::Rule->file()->relative()->in($PERLDIST);

my @filelist_dumb = map { catfile($DISTDIR, $_) } @filelist;
my @filelist_smart = sort { compare($a, $b) } @filelist_dumb;	

{ # Give File::pushd a scope.
	my $pushd = File::pushd::pushd($ROOTDIR);

	say "Making $DUMB_TAR.";
	my $dumb_tar = Archive::Tar->new();
	$dumb_tar->add_files(@filelist_dumb);
	$dumb_tar->write($DUMB_TAR);

	say "Making $SMART_TAR.";
	my $smart_tar = Archive::Tar->new();
	foreach my $file (@filelist_smart) {
#		say $file;
		$smart_tar->add_files($file);
	}
	$smart_tar->write($SMART_TAR);
}

print "\n";

say "Compressing $DUMB_TAR with gzip.";
gzip $DUMB_TAR  => $DUMB_TAR  . '.gz', -Level => 9, BinModeIn => 1;

say "Compressing $SMART_TAR with gzip.";
gzip $SMART_TAR => $SMART_TAR . '.gz', -Level => 9, BinModeIn => 1;

say "Compressing $DUMB_TAR with bzip2.";
bzip2 $DUMB_TAR  => $DUMB_TAR  . '.bz2', BlockSize100K => 9, BinModeIn => 1, WorkFactor => 250;

say "Compressing $SMART_TAR with bzip2.";
bzip2 $SMART_TAR => $SMART_TAR . '.bz2', BlockSize100K => 9, BinModeIn => 1, WorkFactor => 250;

say "Compressing $DUMB_TAR with xz.";
xz $DUMB_TAR  => $DUMB_TAR  . '.xz', Preset => 9, BinModeIn => 1;

say "Compressing $SMART_TAR with xz.";
xz $SMART_TAR => $SMART_TAR . '.xz', Preset => 9, BinModeIn => 1;
print "\n";

my $dumb_tar_gz_size  = -s $DUMB_TAR  . '.gz';
my $smart_tar_gz_size = -s $SMART_TAR . '.gz';
my $difference_gz = $dumb_tar_gz_size - $smart_tar_gz_size;
my $percent_gz = ($difference_gz / $dumb_tar_gz_size) * 100;
my $diff_gz_k = $difference_gz / 1024;

say "$DUMB_TAR.gz  size: $dumb_tar_gz_size ";
say "$SMART_TAR.gz size: $smart_tar_gz_size";
say "difference: $difference_gz ($percent_gz %) ($diff_gz_k KiB)";
print "\n";

my $dumb_tar_bz2_size  = -s $DUMB_TAR  . '.bz2';
my $smart_tar_bz2_size = -s $SMART_TAR . '.bz2';
my $difference_bz2 = $dumb_tar_bz2_size - $smart_tar_bz2_size;
my $percent_bz2 = ($difference_bz2 / $dumb_tar_bz2_size) * 100;
my $diff_bz2_k = $difference_bz2 / 1024;

say "$DUMB_TAR.bz2  size: $dumb_tar_bz2_size ";
say "$SMART_TAR.bz2 size: $smart_tar_bz2_size";
say "difference: $difference_bz2 ($percent_bz2 %) ($diff_bz2_k KiB)";
print "\n";

my $dumb_tar_xz_size  = -s $DUMB_TAR  . '.xz';
my $smart_tar_xz_size = -s $SMART_TAR . '.xz';
my $difference_xz = $dumb_tar_xz_size - $smart_tar_xz_size;
my $percent_xz = ($difference_xz / $dumb_tar_xz_size) * 100;
my $diff_xz_k = $difference_xz / 1024;

say "$DUMB_TAR.xz  size: $dumb_tar_xz_size ";
say "$SMART_TAR.xz size: $smart_tar_xz_size";
say "difference: $difference_xz ($percent_xz %) ($diff_xz_k KiB)";

exit;


Output:
Starting test.
Making C:\Users\Curtis\Desktop\tartest\perl-5.12.1-dumb.tar.
Making C:\Users\Curtis\Desktop\tartest\perl-5.12.1-smart.tar.

Compressing C:\Users\Curtis\Desktop\tartest\perl-5.12.1-dumb.tar with gzip.
Compressing C:\Users\Curtis\Desktop\tartest\perl-5.12.1-smart.tar with gzip.
Compressing C:\Users\Curtis\Desktop\tartest\perl-5.12.1-dumb.tar with bzip2.
Compressing C:\Users\Curtis\Desktop\tartest\perl-5.12.1-smart.tar with bzip2.
Compressing C:\Users\Curtis\Desktop\tartest\perl-5.12.1-dumb.tar with xz.
Compressing C:\Users\Curtis\Desktop\tartest\perl-5.12.1-smart.tar with xz.

C:\Users\Curtis\Desktop\tartest\perl-5.12.1-dumb.tar.gz  size: 14885143
C:\Users\Curtis\Desktop\tartest\perl-5.12.1-smart.tar.gz size: 14892370
difference: -7227 (-0.0485517673562155 %) (-7.0576171875 KiB)

C:\Users\Curtis\Desktop\tartest\perl-5.12.1-dumb.tar.bz2  size: 12011773
C:\Users\Curtis\Desktop\tartest\perl-5.12.1-smart.tar.bz2 size: 12073770
difference: -61997 (-0.516135294931065 %) (-60.5439453125 KiB)

C:\Users\Curtis\Desktop\tartest\perl-5.12.1-dumb.tar.xz  size: 9280004
C:\Users\Curtis\Desktop\tartest\perl-5.12.1-smart.tar.xz size: 9260888
difference: 19116 (0.205991290520995 %) (18.66796875 KiB)


So in the case of the Perl source code, trying to optimize the .tar file by trying to group files with similar extensions together (as an attempt to optimize for similar content) doesn't do enough to worry about in the .xz case, and makes a file that compresses WORSE for .gz and .bz2.

And just as an aside, the .tar files are exactly the same size.

(speaking of which, .xz is obviously optimized for decompression. It took about 90 seconds to compress each file, while .bz2 and .gz take 15 seconds each.)

Of course, your mileage may vary, based on your own test data.

Should actually try with an extracted Strawberry Perl (in order to have more binary data) and see what happens.

Profile

csjewell

June 2011

S M T W T F S
   1234
567891011
12131415161718
192021 22232425
2627282930  

Style Credit

Syndicate

RSS Atom
Page generated Oct. 21st, 2014 05:21 am
Powered by Dreamwidth Studios

Expand Cut Tags

No cut tags

Most Popular Tags