Tags:
performance1Add my vote for this tag create new tag
, view all tags

Modperlize, a script to remove all TWiki global variables

I am working with Marzia Mastrogiacomo on a small script (suggested by FrancoBagnoli) to get rid of all TWiki global variables.

Pros

  • TWiki will be able (at last!) to run under ModPerl without issues coming from shared global variables.
    • stop bothering about CPAN and Plugins load times .. you can preload all modules at server startup
    • stop bothering about users stepping on each other toes
  • a first hack toward OO twiki
  • multiple TWiki installations can run on the same apache server
Cons
  • this could be seen as a temporary hack

How does it works

  • all global vars are gathered from their use vars declarations
  • all global vars are mapped to a single hash named %config
    • e.g. TWiki::dataDir => $config{TWiki}{datadir}
  • a reference to the %config hash is threaded through all subroutines
    • care is taken for modules written as objects
  • all variable accesses are replaced with the corresponding hash access
  • for each module, BEGIN blocks are moved to a initConfig routine
    • the twiki initialization calls them
  • special cases are handled with a patch to be applied before

Stay tuned ...

-- AndreaSterbini - 27 Aug 2003

I'm curious as to why you are doing this as a script to edit the code rather than a set of permanent changes to the code in CVS? Is there some drawback to these changes for non-ModPerl installations (apart from some reduction in readability, which could be significant)?

I thought this change mainly resolved the 'two TWiki installations on single ModPerl' issue (MultipleTwikisonApacheCorruption and ModPerlStickyPages) - would be useful to have some expansion of the other benefits (pre-loading all modules sounds good).

On a somewhat related topic, it would be useful if the I18N globals (grouped in the TWiki.pm code) could be exported as a single object/hash via an extended Plugin API - many of them are read-only compiled regexes that should be used by plugins in order to ensure they are I18N friendly.

-- RichardDonkin - 11 Sep 2003

Could'nt some of the variables (the one in TWiki.cfg) be declared as constant ?

-- MarcelTrap - 12 Sep 2003

Yes, when the transformation satisfies the CoreTeam we could commit it to CVS.

-- AndreaSterbini - 12 Sep 2003

Transforming global variables in local variables prevents conflits between multiple twiki session opened on an Apache server with mod_perl. So twiki installation with multiple configuration becomes possible and stable.

Moreover having multiple configurations working on the same web server without conflits also allows you to reduce the number of processes and web server instances running on a single system.

The package, that you can dowload in this page, contains a modified version of Twiki ( beta20040320 version ) transformed to use local variables instead of global variables ( tested on a Red Hat 9 ), it is composed of:

  • the directories ./bin and ./lib transformed
  • some configuration files
  • modperlizebeta20040320.pl and twiki.diff.beta20040320 used to "transform" the original twikibeta20040320. You can use them to transform also your own twiki code as described in this document.
  • READMEbeta20040320modperlize.html

-- MarziaMastrogiacomo - 06 May 2004

I'm getting an error with the packaged bin and lib files. First, when I visit the view script in my browser, I get the following error:

Software error: Can't locate /bin/view.pm in @INC (@INC contains: /usr/lib/twiki . /etc/perl /usr/lib/perl5/site_perl/5.8.2/i686-linux /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl/5.8.0/i686-linux /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.2/i686-linux /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl/5.8.0/i686-linux /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.2/i686-linux /usr/lib/perl5/5.8.2 /usr/local/lib/site_perl /usr/lib/perl5/site_perl/5.8.0/i686-linux /usr/lib/perl5/site_perl/5.8.0) at /usr/lib/twiki/TWiki.pm line 141.

The first solution I see is that I don't use .pm file extension for my bin scripts for my installation. This seems to be hard-coded into the TWiki.pm script. Or perhaps the problem is that it should be looking in the lib directory for those files with the .pm extension, instead of the bin directory.

Now, I was running an alpha from last week, and downgraded to the modified beta in this package, so maybe that has something to do with it, but I can't see how.

-- AdamTheo - 09 May 2004

Thanks for debugging information reported. The problem could be in the string you choosed for your twiki-url. It is strictly related to determine the name of configuration file. I'll try to reproduce your error and get a solution.

-- MarziaMastrogiacomo - 12 May 2004

Looks like it is not running setlib.cfg - without this the scripts can't see the TWikiBaseDir/lib directory and hence fails to find any of the .pm files.

-- MartinCleaver - 12 May 2004

I reproduced the error and modified the configuration file name composition. If you want, you can download and try the new code in this page ( I hope ). Thanks

-- MarziaMastrogiacomo - 25 May 2004

OK, Thanks. I've tried the conversion script 'modperlizebeta20040320.pl' on my beta 20040507 setup. It converted with the following output:

mathaw root # ./modperlizebeta20040320.pl

copy directory twiki in twiki.patched ... OK applying patch .....patching file bin/testenv Hunk #3 succeeded at 377 (offset 2 lines). patching file lib/Algorithm/Diff.pm Hunk #1 FAILED at 1. 1 out of 1 hunk FAILED -- saving rejects to file lib/Algorithm/Diff.pm.rej patching file lib/TWiki/Meta.pm patching file lib/TWiki/Plugins/InterwikiPlugin.pm patching file lib/TWiki/Plugins/SmiliesPlugin.pm patching file lib/TWiki/Plugins.pm Hunk #1 succeeded at 216 (offset 19 lines). Hunk #2 succeeded at 245 (offset 19 lines). Hunk #3 succeeded at 436 (offset 50 lines). Hunk #4 succeeded at 459 (offset 50 lines). Hunk #5 succeeded at 476 (offset 50 lines). Hunk #6 succeeded at 496 (offset 51 lines). Hunk #7 succeeded at 513 (offset 51 lines). Hunk #8 succeeded at 530 (offset 51 lines). Hunk #9 succeeded at 547 (offset 51 lines). Hunk #10 succeeded at 564 (offset 51 lines). Hunk #11 succeeded at 581 (offset 51 lines). Hunk #12 succeeded at 598 (offset 51 lines). Hunk #13 succeeded at 660 (offset 88 lines). Hunk #14 succeeded at 676 (offset 88 lines). Hunk #15 succeeded at 692 (offset 88 lines). Hunk #16 succeeded at 708 (offset 88 lines). Hunk #17 succeeded at 724 with fuzz 1 (offset 88 lines). patching file lib/TWiki/Prefs.pm Hunk #1 succeeded at 533 (offset 66 lines). patching file lib/TWiki/Store.pm Hunk #2 succeeded at 696 (offset 4 lines). patching file lib/TWiki.cfg Hunk #2 succeeded at 471 (offset 1 line). patching file lib/TWiki.pm Hunk #4 succeeded at 181 (offset 23 lines). Hunk #5 succeeded at 200 with fuzz 2 (offset -8 lines). Hunk #6 succeeded at 484 (offset 16 lines). Hunk #7 succeeded at 690 (offset 16 lines). Hunk #8 succeeded at 756 (offset 16 lines). Hunk #9 succeeded at 766 (offset 16 lines). Hunk #10 succeeded at 1031 (offset 16 lines). Hunk #11 succeeded at 1049 (offset 16 lines). Hunk #12 succeeded at 1219 (offset 18 lines). Hunk #13 succeeded at 2263 (offset 56 lines). OK Check patching and press y to continue : y

CONTINUE EXIT: Can't read twiki.patched/lib/TWiki/User.pm

I then tried to run the bin/view script from the browser as I have in the past, but got this error:

Software error: Global symbol "$config" requires explicit package name at /usr/lib/twiki2/TWiki.pm line 61. Global symbol "$useLocale" requires explicit package name at /usr/lib/twiki2/TWiki.pm line 66. BEGIN not safe after errors--compilation aborted at /usr/lib/twiki2/TWiki.pm line 95. Compilation failed in require at /usr/lib/twiki2/TWiki/UI/View.pm line 31. BEGIN failed--compilation aborted at /usr/lib/twiki2/TWiki/UI/View.pm line 31. Compilation failed in require at /var/www/user/bin/view line 36. BEGIN failed--compilation aborted at /var/www/user/bin/view line 36.

The pathnames are correct, so that's good, at least.

Now I will try using the stock scripts included in your package...

-- AdamTheo - 26 May 2004

I just tried the stock scripts in your package, after updating the 'TWikicfg.pm' file. I am getting this error:

Software error: Can't locate user.theoretic.comPort80user.pm in @INC (@INC contains: /usr/lib/twiki2 . /etc/perl /usr/lib/perl5/site_perl/5.8.2/i686-linux /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl/5.8.0/i686-linux /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.2/i686-linux /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl/5.8.0/i686-linux /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.2/i686-linux /usr/lib/perl5/5.8.2 /usr/local/lib/site_perl /usr/lib/perl5/site_perl/5.8.0/i686-linux /usr/lib/perl5/site_perl/5.8.0) at /usr/lib/twiki2/TWiki.pm line 141.

Seems some variable might be mis-coded? The filename it's looking for doesn't seem right smile

-- AdamTheo - 26 May 2004

Thanks Adam. You should create the file <lib twiki directory>/user.theoretic.comPort80user.pm as a copy of alphaPort80twikimodperl.pm and update this file. Because the configuration file must be named: <server name>Port<port number><third string from the last of twiki SCRIPT_FILENAME>.pm

About the error in patching "beta 20040507", a new twiki version require a new patch: the patch implements only few particular transformations. I'll provide to release the patch as soon as possible. Regards.

-- MarziaMastrogiacomo - 26 May 2004

Hmm... I had wiped my installation, but re-downloaded and tried your suggestion. But now using the same set-up with your fix, It's giving the following error:

view: Can't locate Port.pm in @INC (@INC contains: /usr/lib/twiki2 . /etc/perl /usr/lib/perl5/site_perl/5.8.2/i686-linux /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl/5.8.0/i686-linux /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.2/i686-linux /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl/5.8.0/i686-linux /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.2/i686-linux /usr/lib/perl5/5.8.2 /usr/local/lib/site_perl /usr/lib/perl5/site_perl/5.8.0/i686-linux /usr/lib/perl5/site_perl/5.8.0) at /usr/lib/twiki2/TWiki.pm line 141.

Now it's not even looking for a filename with my domain name, port number, or anything, just "Port.pm". Again, a typo in the script?

  • Oops, scratch that. I was getting this error because I'd mis-typed the domain name using a comma. Using correct punctuation, the stock scripts seem to work fine. I'll do more testing.
  • Seems I spoke too soon, again. I refreshed the page a couple of times, and am running into this error:

ModPerl::Registry: [Sat May 29 04:41:25 2004] -e: Can't use string ("Version mismatch between Comment") as a HASH ref while "strict refs" in use at /usr/lib/twiki2/TWiki.pm line 196.\n

-- AdamTheo - 29 May 2004

Abuot this error, it can be produced from a Plugin not yet "transformed without global variable". In this case, if you want transform your installed plugins, you can apply modperlize20040507.pl ( or modperlize20040320.pl ) to your twiki directory .

I attached the package twikimodperlizebeta20040507.tar.gz in this page, it transforms Twiki beta20040507 version. The only difference from previous package is the patch file. I'll hope you try it.

-- MarziaMastrogiacomo - 04 Jun 2004

I have tried your 20040507 package. First I tried it by installing a fresh 20040507beta install of twiki, then applying your 20040507 patch using your perl script with your 20040507 package. It successfully patched every file with no errors, but at the end reported that it could not read file 'twiki.patched/lib/TWiki/User.pm'. I verified that this file existed, using that relative pathname, and it does. It in fact symbollically links to the patched file (just making sure this is normal behaviour for your script).

I noticed that your perl script did not automatically create an 'alphaPort80twikimodperl.pm' file for me using my existing configurations from 'TWiki.cfg'. I created one myself, but it would be nice if the script did this for me.

Next, I restarted apache2 to make sure mod_perl reloaded, and ran the vew script in my browser. I got the following error:

Global symbol "$config" requires explicit package name at /usr/lib/twiki2/TWiki/Store.pm line 116. BEGIN not safe after errors--compilation aborted at /usr/lib/twiki2/TWiki/Store.pm line 1697. Compilation failed in require at /usr/lib/twiki2/TWiki.pm line 109. BEGIN failed--compilation aborted at /usr/lib/twiki2/TWiki.pm line 109. Compilation failed in require at /usr/lib/twiki2/TWiki/UI/View.pm line 31. BEGIN failed--compilation aborted at /usr/lib/twiki2/TWiki/UI/View.pm line 31. Compilation failed in require at /var/www/user/bin/view line 36. BEGIN failed--compilation aborted at /var/www/user/bin/view line 36.

I've looked and noticed that the new/patched Store.pm file uses the variable '$config' in the subroutine '_getTopicHandler' at around that line.

Next I will try with the stock files in your package.

UPDATE: I just tried with the stock files in your 20040507 package, and am receiving a very similar error as with the old version of your package:

Software error: Can't use string ("Version mismatch between Comment") as a HASH ref while "strict refs" in use at /usr/lib/twiki2/TWiki.pm line 195.

By visiting the testenv script (which runs fairly fine) everything seems fine. All paths are correct, and it says mod_perl is loaded and being used for that script.

-- AdamTheo - 05 Jun 2004

Thanks Adam for debbuging. To try to solve the "software error" I need some informations . You should execute these commands in twiki test directory :

cd lib/TWiki/Plugins
grep "Version mismatch between Comment" *

and write me the output. Regards

-- MarziaMastrogiacomo - 08 Jun 2004

OK, I ran the output, and getting no output. I've also tried a recursive 'grep' from the lib directory, and still nothing. I do not have any "extra" Plugins installed, only those included in your stock package. Note this is using a fresh install using your stock twiki bin/ and lib/ files from your modified version of 20040507, below.

Again, my system stats:

Apache: 2.0.49 and mod_perl 1.99_13

Perl: 5.8.2

TWiki 20040507 (modified)

Gentoo Linux

I also tried your scripts without enabling mod_perl, and see that the scripts work fine. I will next try the conversion script again under mod_perl, and report.

I've noticed that when I reload the 'view' script a few times, I sometimes get a new error:

Can't locate object method "param" via package "guest" (perhaps you forgot to load "guest"?) at /usr/lib/twiki/TWiki/UI/View.pm line 50.

Also, even rarer, when I reload sometimes I get the intended 'view' page, complete with templated content as I should see it.

-- AdamTheo - 12 Jun 2004

In this page now you can download TWiki version beta 20040507 modified in Object Oriented working on mod_perl2.

The package twikibeta20040507oo.tar.gz is composed of:

  • the directories ./bin and ./lib transformed
  • some configuration files
  • modperlizebeta20040507oo.pl and twiki.diff.beta20040507oo used to "transform" the original twikibeta20040507. You can use them to transform also your own twiki code as described in this document.
  • READMEbeta20040507oo.html

How does it works

  • each package is transformed in a class
  • all subs are transformed in methods
  • all call to sub are substituted in call to method
  • all global variables are substituted with local variables, mapped to a single hash
    • e.g. TWiki::Prefs::finalPrefsName => $config->{TWiki}->{Prefs}->{finalPrefsName}

-- MarziaMastrogiacomo - 14 Sep 2004

Have you done any performace/benchmarks of this? before/after with/without modperl?

-- SamHasler - 16 Sep 2004

Yes, run time of twiki OO with modperl2 are less than standard installation of about 31%.

To have more details see attach READMEbeta20040507oo.html.

-- MarziaMastrogiacomo - 17 Sep 2004

Hard to tell from the way you've phrased that, is that better performance? (less time to run == faster)

ab is notoriously unreliable. Would it be possable to get a benchmark in AthensMarks? (see CairoPerformanceExperiments and CairoPerformanceIssues for background)

-- SamHasler - 17 Sep 2004

Could you please post a patch against the latest release?

-- RafaelAlvarez - 17 Sep 2004

Sam, AthensMarks apply to core performance only. mod_perl would not make any difference to AthensMarks performance. We need an ab normalistion methodology as well.

-- CrawfordCurrie - 18 Sep 2004

That's why I asked for benchmarks without using mod_perl. Surely this patch would have some affect on core performance?

-- SamHasler - 18 Sep 2004

Doh... good point.

-- CrawfordCurrie - 18 Sep 2004

The attached package twikibeta20040730oo.tar.gz contains version beta20040730 of twiki transformated in Object Oriented without global variable.

Note that I needed to add a new variable in configuration file TWikicfg.pm. The variable is libDir, it contains the directory of twiki library and is used in sub getTWikiLibDir in TWiki.pm, this sub determine where the plugins can be found.

-- MarziaMastrogiacomo - 8 Oct 2004

Marzia - thanks. I appreciate how difficult it is for you to keep up with the Core without access to a development branch, (but I'd appreciate if you could update this to TWikiRelease20040901?

-- MartinCleaver - 08 Oct 2004

You can download and try an Object Oriented TWiki20040901 version in this page.

-- MarziaMastrogiacomo - 5 Nov 04

Marzia - thanks for this. We need to get you access to the DevelopBranch ASAP. I suggest you complete the topic MarziaMastrogiacomoWouldLikeToCheckin?

-- MartinCleaver - 05 Nov 2004

I ran the AthensMarks test on a patched cairo. There are the numbers I got. Notice that I didn't use the latest versions of MAIN or DEVELOP.

The tests where run WITHOUT mod_perl, and only the "develop/cairomodperl" version was patched. The other distros are untouched (only the distributed plugins where removed).

The experiments were run in a PII 400 256Mb RAM Win2k box using cygwin and Apache 1.39

The page where the test was run is indicated in each case:

TWiki core code benchmarks (TWiki/WhatIsWikiWiki)

Release Skin Plugins Time per page AthensMarks
base/athens   DefaultPlugin, InterwikiPlugin 1.816 100
base/cairo classic DefaultPlugin, InterwikiPlugin 3.114 58.3172768143866
checkout/trunk1781 classic DefaultPlugin, InterwikiPlugin 3.312 54.8309178743961
checkout/DEVELOP1776) classic DefaultPlugin, InterwikiPlugin 2.668 68.0659670164918
develop/cairomodperl classic DefaultPlugin, InterwikiPlugin 2.454 74.0016299918501

TWiki core code benchmarks (TWiki/TextFormattingRules)

Release Skin Plugins Time per page AthensMarks
base/athens   DefaultPlugin, InterwikiPlugin 2.152 100
base/cairo classic DefaultPlugin, InterwikiPlugin 3.808 56.5126050420168
checkout/trunk1781 classic DefaultPlugin, InterwikiPlugin 3.97 54.2065491183879
checkout/DEVELOP1776 classic DefaultPlugin, InterwikiPlugin 3.264 65.9313725490196
develop/cairomodperl classic DefaultPlugin, InterwikiPlugin 2.464 87.3376623376624

TWiki core code benchmarks (Main/WebHome)

Release Skin Plugins Time per page AthensMarks
base/athens   DefaultPlugin, InterwikiPlugin 1.98 100
base/cairo classic DefaultPlugin, InterwikiPlugin 5.008 39.5367412140575
checkout/trunk1781 classic DefaultPlugin, InterwikiPlugin 4.928 40.1785714285714
checkout/DEVELOP1776 classic DefaultPlugin, InterwikiPlugin 4.206 47.0756062767475
develop/cairomodperl classic DefaultPlugin, InterwikiPlugin 2.46 80.4878048780488

-- RafaelAlvarez - 08 Nov 2004

I uploaded the benchmark script used to test " develop/cairomodperl". Is a modified version of the Cairo script to make it work with the patched version.

-- RafaelAlvarez - 08 Nov 2004

Marzia, Rafael's benchmarks are confirmed; but it's very frustrating not knowing what process you are using to do the transformation. We would like to transform the DEVELOP code, but we need whatever scripts you use and the process you follow....???

-- CrawfordCurrie - 08 Nov 2004

Hello, Crawford. The script to transform twiki is in packet twiki20040901oo.tar.gz that you can dowload in this page. The process is described in README20040901oo.html , this is in the same packet. For further informations, you can ask me and I shall happy to give you.

-- MarziaMastrogiacomo - 09 Nov 2004

Thanks Marzia. I ran against DEVELOP. I had to make a lot of edits to the patched code, but I got there eventually wink

Notes:

  1. I manually applied the chnahges in the patch. Note that there are several errors in the patch, most worryingly in the Rcs* modules.
  2. I did not permit the script to run on Algorithm::Diff. This is a CPAN module and should not be touched.
  3. I reverted to the "TWiki standard" for configuration i.e using TWiki.cfg
  4. I removed the "Config" object and associated the config with a "TWiki" object instead, eliminating one level of indirection
  5. I corrected the indentation of the generated code wink
  6. I eliminated the indirection via {TWiki} in class-static methods, and replaced them with references to $self e.g. $config->{TWiki}->{Prefs}-> becomes $self->
  7. The script actually broke several objects I had already manually refactored, so I had to undo those changes.
  8. I haven't resolved yet how to handle Func. It cannot be an object, as it is the interface used by plugins and plugins can - by definition - come from anywhere. I'm not sure yet how to make the TWiki object visible to Func methods. Is there some way in Perl to seek back up the stack for the closest definition of a variable?

Apart from those problems, an excellent script!

FYI, the one function that is radically improved by the OO change is (ironically) . On a WebHome page the code now delivers over 90 AthensMarks, and on a page with no search over 80 AthensMarks - a significant improvement even without mod_perl!

We're having an argument about the branching methodology at the moment, but as soon as that is settled I will check in to a branch.

-- CrawfordCurrie - 10 Nov 2004

On Note 8, that would be the difference between declaring a variable with my and local. my variables are statically scoped, local are dynamically scoped, though it achieves this with temporary settings to global variables, so I'm not sure if it would work in a threaded environment.

How goes deciding where to check this in? I'd like to see it in Dakar, as response time is one of the two issues I have getting twiki approved by my boss. The other was the rather sceptical look he gave me when I told him he'd have to count spaces in order to do lists and sublists, but that I can fix with HTMLArea and some custom translating javascript (Yes, I know about Kupu, but the first time I took some tricky twiki markup through it and it destroyed it, I gave up on that, at least until the new translation engine is complete).

-- EricSchwertfeger - 26 Nov 2004

I used the pattern demonstrated by Marzia's script to convert all TWiki modules to singleton objects, linked under the umbrella of a TWiki "session" object. Now, whenever a script starts, it creates a new "TWiki" instance. This code is checked in to the DEVELOP branch and is proposed for inclusion in DakarRelease. There is still a risk that plugins won't work if they maintain their own stables of global variables, but I can't do much about that.

Performance is another issue. The introduction of the Sandbox (required for security) has slowed TWiki down, in a way that mod_perl can't help with, unfortunately. I haven't benchmarked it with mod_perl, though I know that speedycgi significantly speeds it up.

-- CrawfordCurrie - 13 Jan 2005

Topic attachments
I Attachment History Action Size Date Who Comment
Unknown file formatEXT benchmark r1 manage 1.9 K 2004-11-08 - 13:53 RafaelAlvarez Benchmark Script for the ModPerlized Cairo, to be used by AthensMarks tests
Unknown file formatgz twiki20040901oo.tar.gz r1 manage 292.1 K 2004-11-05 - 16:08 MarziaMastrogiacomo twiki version 20040901 transformed in Object Oriented
Unknown file formatgz twikibeta20040507oo.tar.gz r1 manage 249.0 K 2004-09-14 - 16:00 MarziaMastrogiacomo Twiki beta 20040507 transformed in Object Oriented whit modperl2
Unknown file formatgz twikibeta20040730oo.tar.gz r1 manage 287.8 K 2004-10-08 - 07:49 MarziaMastrogiacomo Twiki beta20040730 version transformated in Object Oriented without global variable on modperl2
Unknown file formatgz twikimodperlizebeta20040320.tar.gz r2 r1 manage 220.0 K 2004-05-25 - 16:54 MarziaMastrogiacomo Transform twiki without global variables and with multiple configuration files named like server name
Unknown file formatgz twikimodperlizebeta20040507.tar.gz r1 manage 234.6 K 2004-06-04 - 15:36 MarziaMastrogiacomo Transform twiki beta20040507 without global variables and with multiple configuration files
Edit | Attach | Watch | Print version | History: r43 < r42 < r41 < r40 < r39 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r43 - 2005-01-17 - SamHasler
 
  • Learn about TWiki  
  • Download TWiki
This site is powered by the TWiki collaboration platform Powered by Perl Hosted by OICcam.com Ideas, requests, problems regarding TWiki? Send feedback. Ask community in the support forum.
Copyright © 1999-2018 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.