server outage, caching changes --Simon Michael, Tue, 12 Jan 2010 07:04:11 -0800 reply

My server has been increasingly melting down due to heavy ill-behaved bot traffic and trying to do too much in 1G of ram with not enough sysadmin-fu; I had to walk away from it this weekend. Sorry for the recent slowness and outages. I have been trying all kinds of adjustments, as well as looking into reducing the free hosted zwikis, moving zope to a cheaper vps and so on.

This week I have enabled apache's mod_disk_cache for all of joyful.com & zwiki.org. Now those slow zope requests are being cached in /var/ cache/apache2/mod_disk_cache, and server load is way down. But you may not see very fresh results, I think depending on your browser. Eg the last edited time at top right of wiki pages may be way wrong. I suspect it should update itself after an hour, but maybe not. If in doubt, try a shift-reload. Still working on this.

Best - Simon

server outage, caching changes --Niall Douglas, Wed, 13 Jan 2010 02:41:35 -0800 reply

On 12 Jan 2010 at 7:04, Simon Michael wrote:

> My server has been increasingly melting down due to heavy ill-behaved > bot traffic and trying to do too much in 1G of ram with not enough > sysadmin-fu; I had to walk away from it this weekend. Sorry for the > recent slowness and outages. I have been trying all kinds of > adjustments, as well as looking into reducing the free hosted zwikis, > moving zope to a cheaper vps and so on.

Sorry to hear this, though I don't think that RAM will be your problem.

> This week I have enabled apache's mod_disk_cache for all of joyful.com > & zwiki.org. Now those slow zope requests are being cached in /var/ > cache/apache2/mod_disk_cache, and server load is way down. But you may > not see very fresh results, I think depending on your browser. Eg the > last edited time at top right of wiki pages may be way wrong. I > suspect it should update itself after an hour, but maybe not. If in > doubt, try a shift-reload. Still working on this.

I would VERY strongly recommend deploying a nginx + varnish frontend to Zope instead of Apache. You'll get a fast, responsive and fresh website with no page being more than a few seconds out of date, and I was running that on 256Mb of RAM for around a year (I wouldn't recommend this though if anyone is logging in). 512Mb should be enough, and 1Gb more than plenty. That said, FsckVPS? were doing a 25% off for life deal there before and you nowadays get a KVM rather than OpenVZ? which makes it the best on the VPS market right now. Oh BTW you might find my site http://www.lowenddedi.net/ useful - it's a list of the cheapest Plone capable hosting providers along with reviews and tests.

I have an outdated guide along with testing results at http://www.nedprod.com/Niall_stuff/lowendDedicatedPloneServer.html. If you do decide to go down this route, let me know and I'll freshen that page with my latest config scripts - in particular my varnish default.vcl has evolved considerably over the past year. It's such a capable programming language!

HTH, Niall

server outage, caching changes --Simon Michael, Wed, 13 Jan 2010 07:36:24 -0800 reply

Niall, thanks a lot, I had forgotten these pages. This really deserves to be prominent in the zope & plone docs. I'll reread and explore those suggestions more. What makes you prefer nginx + varnish so much to apache (+ varnish, perhaps) ? Note my zope with just two threads and 5000 target cache size likes to get up around 700M. I have a $20/ mo 1G vps from prgmr.com to try, which seems a pretty good deal..

server outage, caching changes --Niall Douglas, Wed, 13 Jan 2010 08:01:59 -0800 reply

On 13 Jan 2010 at 7:36, Simon Michael wrote:

> Niall, thanks a lot, I had forgotten these pages. This really deserves > to be prominent in the zope & plone docs. I'll reread and explore > those suggestions more. What makes you prefer nginx + varnish so much > to apache (+ varnish, perhaps) ? Note my zope with just two threads > and 5000 target cache size likes to get up around 700M. I have a $20/ > mo 1G vps from prgmr.com to try, which seems a pretty good deal..

My reasons were purely from benchmarking - nginx had a narrower result variance even though it was slightly slower on average than its next competitor which in my mind meant it was more predictable and therefore more desirable. BTW nginx is many times faster than Apache when acting as a simple frontend, so much so that I simply wouldn't advise using Apache at all. In the end though, my nginx does very little except handling a few static pages, some gzip compression of merged CSS and Javascript which Zope cannot currently gzip (this makes a BIG difference to bandwidth usage when using Plone) and of course HTTPS. I don't think I have the magic nginx config for this public, so here it is:

# Plone's ResourceRegistries? can't gzip their compressed output # so we need to patch it here. Makes a huge difference to first # load times so it's worth the extra server load gzip on; gzip_http_version 1.0; gzip_buffers 16 8k; gzip_min_length 1000; gzip_proxied any; gzip_types application/x-javascript text/css; gzip_disable "MSIE [1-6]?."; gzip_vary on;

If you do follow the nginx route, let me know if you have trouble figuring out how to correctly handle 503 errors. It took me weeks of experimentation :(

BTW I've attached my varnish default.vcl below. You'll note that it manages to "mount" cached copies of Google Finance and the RePeC? bibliographic database as subdirectories of my websites - this allows one to work around cross-domain scripting in AJAX. Such is the power of varnish!

I have a low end 1.2Ghz Celeron D dedicated server, yet a nginx + varnish config will easily max out my 100Mbit network port before maxing out my CPU. I'd doubt though that my CPU would handle a 1Gbit max out though.

HTH, Niall

# This VCL config file is adapted from template.vcl in http://pypi.python.org/pypi/plone.recipe.varnish backend default {

.host = "localhost"; .port = "6100"; .first_byte_timeout = 300s; /* varnish v2.0.3 or later only */

}

backend repec {
.host = "ideas.repec.org"; .port = "80";

}

backend google {
.host = "209.85.229.106"; /www.google.com";/ .port = "80";

}

/* Only permit cluster to purge files from cache */ acl purge {

"dedi1.nedprod.com"; "us1.nedproductions.biz"; "localhost";

}

sub vcl_recv {
set req.grace = 20s; /* Only enable if you don't mind slightly stale

content */

/* Before anything else we need to fix gzip compression */ if (req.http.Accept-Encoding) {

if (req.url ~ ".(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") {
# No point in compressing these remove req.http.Accept-Encoding;
} else if (req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
} else if (req.http.Accept-Encoding ~ "deflate") {
set req.http.Accept-Encoding = "deflate";
} else {
# unknown algorithm remove req.http.Accept-Encoding;

}

}

if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";

} /* Always purge by URL rather than going via vcl_hash

as it hashes other factors which break purging */

purge_url(req.url); error 200 "Purged";

}

/* Rewrite all requests to /repec/cgi-bin/authorref.cgi to

http://ideas.repec.org/cgi-bin/authorref.cgi */
if (req.url ~ "^/repec/cgi-bin/authorref.cgi?handle=" || req.url ~
"^/repec/cgi-bin/ref.cgi?handle=") {
set req.http.host = "ideas.repec.org"; set req.url = regsub(req.url, "^/repec", ""); set req.backend = repec; remove req.http.Cookie; lookup;
} else if(req.url ~ "^/googlefinance/finance/converter?") {
set req.http.host = "www.google.com"; set req.url = regsub(req.url, "^/googlefinance", ""); set req.backend = google; remove req.http.Cookie; lookup;
} else {

set req.backend = default; if (req.http.X-Forwarded-Proto == "https" ) {

set req.http.X-Forwarded-Port = "443";
} else {
set req.http.X-Forwarded-Port = "80";

} if (req.http.host ~ "^(www.|ipv6.)?([-0-9a-zA-Z]?+).([a-zA-

Z]+)$") {
set req.http.host = regsub(req.http.host, "^(www.|ipv6.)?([-0-9a-
zA-Z]+).([a-zA-Z]?+)$", "12.3");
set req.url = "/VirtualHostBase?/" req.http.X-Forwarded-Proto
regsub(req.http.host, "^(www.|ipv6.)?([-0-9a-zA-Z]?+).([a-zA-
Z]+)$", "/12.3:")
req.http.X-Forwarded-Port regsub(req.http.host, "^(www.|ipv6.)?([-0-9a-zA-Z]?+).([a-zA-
Z]+)$", "/2.3/2.3/VirtualHostRoot?")
req.url;

}

}

if (req.request != "GET" &&
req.request != "HEAD" && req.request != "PUT" && req.request != "POST" && req.request != "TRACE" && req.request != "OPTIONS" && req.request != "DELETE") { /* Non-RFC2616 or CONNECT which is weird. */ pipe;

}

if (req.request != "GET" && req.request != "HEAD") {
/* We only deal with GET and HEAD by default */ pass;

}

if (req.http.Cookie) {
# We only care about the "__ac.*" cookies, used for
authentication and special persistent p_* cookies.
if (req.http.Cookie ~ "__ac.*" ) {
pass;

} # Else strip all cookies remove req.http.Cookie;

}

if (req.http.If-None-Match) {
pass;

}

if (req.url ~ "createObject") {
pass;

}

lookup;

}

sub vcl_pipe {
# This is not necessary if you do not do any request rewriting. set req.http.connection = "close";

}

sub vcl_hash {

# Normally it hashes on URL and Host but we rewrite the host # into a VirtualHostBase? URL. Therefore we can hash on URL alone. set req.hash += req.url;

# One needs to include compression state normalised above if (req.http.Accept-Encoding) {

set req.hash += req.http.Accept-Encoding;

}

# Differentiate based on login cookie too #set req.hash += req.http.cookie;

return (hash);

}

sub vcl_hit {
if (req.request == "PURGE") {
purge_url(req.url); error 200 "Purged";

}

}

sub vcl_miss {
if (req.request == "PURGE") {
error 404 "Not in cache";

}

}

sub vcl_fetch {
set req.grace = 20s; /* Only enable if you don't mind slightly stale
content */
if (req.url ~ ".svgz$") {
# Add a Content-Encoding to match compressed SVG set obj.http.Content-Type = "image/svg+xml"; set obj.http.Content-Encoding = "gzip"; remove obj.http.Content-Length; set obj.ttl = 86400s; set obj.http.Cache-Control = "max-age=3600"; deliver;

} if (req.http.host == "ideas.repec.org" || req.http.host ==

"www.google.com") {
set obj.http.Content-Type = "text/html; charset=utf-8"; /* Correct
the wrong response */
set obj.ttl = 86400s; set obj.http.Cache-Control = "max-age=3600"; deliver;

} if (obj.http.Set-Cookie) {

pass;

} if (req.http.Authorization && !obj.http.Cache-Control ~ "public") {

pass;

} /* Only use this if you wish to override Plone's CacheFu? */ if (obj.ttl < 3600s) {

if (obj.http.Cache-Control ~ "(private|no-cache|no-store)") {
set obj.ttl = 60s; /* Caching everything anonymous for 60s is
handy for being slashdotted :) */
} else {
set obj.ttl = 3600s;

}

}

}

sub vcl_error {
set obj.http.Content-Type = "text/html; charset=utf-8"; synthetic {"

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>"} obj.status " " obj.response {"</title>

</head> <body>

<div style="background-color:yellow;">
<h1>This website is unavailable</h1> <p>If you are seeing this page, either maintenance is being
performed
or something really bad has happened. Try returning in a few
minutes.</p>

<h2>Error "} obj.status " " obj.response {"</h2> <p>"} obj.response {"</p> <h3>Guru Meditation:</h3> <p>XID: "} req.xid {"</p> <address>

<a href="http://www.nedproductions.biz/">ned Productions
Ltd.</a>
</address>

</div> <div style="position:fixed;top:0;left:0;width:100%;height:100%;z-

index:-1;">
<img alt="" src="/static/BBCTestCard?.jpg"
style="width:100%;height:100%" /></div>
</body>

</html> "};

return (deliver);

}

#Below is a commented-out copy of the default VCL logic. If you #redefine any of these subroutines, the built-in logic will be #appended to your code. # #sub vcl_recv { # if (req.request != "GET" && # req.request != "HEAD" && # req.request != "PUT" && # req.request != "POST" && # req.request != "TRACE" && # req.request != "OPTIONS" && # req.request != "DELETE") { # /* Non-RFC2616 or CONNECT which is weird. / # return (pipe); # } # if (req.request != "GET" && req.request != "HEAD") { # / We only deal with GET and HEAD by default / # return (pass); # } # if (req.http.Authorization || req.http.Cookie) { # / Not cacheable by default / # return (pass); # } # return (lookup); #} # #sub vcl_pipe { # return (pipe); #} # #sub vcl_pass { # return (pass); #} # #sub vcl_hash { # set req.hash += req.url; # if (req.http.host) { # set req.hash += req.http.host; # } else { # set req.hash += server.ip; # } # return (hash); #} # #sub vcl_hit { # if (!obj.cacheable) { # return (pass); # } # return (deliver); #} # #sub vcl_miss { # return (fetch); #} # #sub vcl_fetch { # if (!obj.cacheable) { # return (pass); # } # if (obj.http.Set-Cookie) { # return (pass); # } # set obj.prefetch = -30s; # return (deliver); #} # #sub vcl_deliver { # return (deliver); #} # #sub vcl_discard { # / XXX: Do not redefine vcl_discard{}, it is not yet supported / # return (discard); #} # #sub vcl_prefetch { # / XXX: Do not redefine vcl_prefetch{}, it is not yet supported / # return (fetch); #} # #sub vcl_timeout { # / XXX: Do not redefine vcl_timeout{}, it is not yet supported */ # return (discard); #} # #sub vcl_error { # set obj.http.Content-Type = "text/html; charset=utf-8"; # synthetic {" #<?xml version="1.0" encoding="utf-8"?> #<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" # "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> #<html> # <head> # <title>"} obj.status " " obj.response {"</title> # </head> # <body> # <h1>Error "} obj.status " " obj.response {"</h1> # <p>"} obj.response {"</p> # <h3>Guru Meditation:</h3> # <p>XID: "} req.xid {"</p> # <address> # <a href="http://www.varnish-cache.org/">Varnish</a> # </address> # </body> #</html> #"}; # return (deliver); #}

Site Error/ An error was encountered while publishing this resource. --johngrey, Wed, 20 Jan 2010 14:38:42 -0800 reply

Sorry to have to post what is probably something very basic but..

All the ZWikis? on my Zope site have suddenly stopped working for no obvious reason (well to me at least)

I'm using:

(Zope 2.10.5-final, python 2.4.5, linux2) Python Version 2.4.5 (#2, Jul 22 2009, 13:43:00) [GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu3)]? ZWiki (Installed product ZWiki (ZWiki-0-61-0))

All the ZWiki pages are accessible via the ZMI but attempting to display any of them gives the following Traceback. This traceback is the result of trying to display a ZWiki I have just added.

I'm at a loss to know how to approach this.

Any ideas?

thanks John

Site Error

An error was encountered while publishing this resource.

AttributeError
Sorry, a site error occurred.

Traceback (innermost last):

  * Module ZPublisher.Publish, line 202, in publish_module_standard
  * Module ZPublisher.Publish, line 150, in publish
  * Module Zope2.App.startup, line 221, in zpublisher_exception_hook
  * Module ZPublisher.Publish, line 119, in publish
  * Module ZPublisher.mapply, line 88, in mapply
  * Module ZPublisher.Publish, line 42, in call_object
  * Module Products.ZWiki.ZWikiPage, line 229, in __call__
  * Module Products.ZWiki.ZWikiPage, line 241, in render
  * Module Products.ZWiki.pagetypes.stx, line 96, in render
  * Module Products.ZWiki.Views, line 668, in addSkinTo
  * Module Shared.DC.Scripts.Bindings, line 313, in __call__
  * Module Shared.DC.Scripts.Bindings, line 350, in _bindAndExec
  * Module Products.PageTemplates.PageTemplateFile, line 129, in _exec
  * Module Products.PageTemplates.PageTemplate, line 89, in pt_render
  * Module zope.pagetemplate.pagetemplate, line 117, in pt_render
    Warning: Macro expansion failed
    Warning: exceptions.AttributeError: pt_macros
  * Module zope.tal.talinterpreter, line 271, in __call__
  * Module zope.tal.talinterpreter, line 346, in interpret
  * Module zope.tal.talinterpreter, line 891, in do_useMacro
  * Module zope.tal.talinterpreter, line 346, in interpret
  * Module zope.tal.talinterpreter, line 536, in do_optTag_tal
  * Module zope.tal.talinterpreter, line 521, in do_optTag
  * Module zope.tal.talinterpreter, line 516, in no_tag
  * Module zope.tal.talinterpreter, line 346, in interpret
  * Module zope.tal.talinterpreter, line 949, in do_defineSlot
  * Module zope.tal.talinterpreter, line 346, in interpret
  * Module zope.tal.talinterpreter, line 536, in do_optTag_tal
  * Module zope.tal.talinterpreter, line 521, in do_optTag
  * Module zope.tal.talinterpreter, line 516, in no_tag
  * Module zope.tal.talinterpreter, line 346, in interpret
  * Module zope.tal.talinterpreter, line 870, in do_useMacro
  * Module zope.tales.tales, line 696, in evaluate
    URL: wikipage
    Line 7, Column 6
    Expression: <PathExpr standard:'here/macros/pagesearchtags'>
    Names:

    {'container': <Folder at /test_wiki>,
     'context': <ZWikiPage 'FrontPage' at 0x941f7cc>,
     'default': <object object at 0xb7d6f528>,
     'here': <ZWikiPage 'FrontPage' at 0x941f7cc>,
     'loop': {},
     'nothing': None,
     'options': {'args': (<ZWikiPage 'FrontPage' at 0x941f7cc>,
                          <HTTPRequest, URL=http://red.sunderland.ac.uk:8080/test_wiki/FrontPage>),
                 'body': '<p><strong>Welcome!</strong> </p>\n<p>This is the front page of <a href="http://red.sunderland.ac.uk:8080/test_wiki/ZWiki">ZWiki</a>\'s "basic" wiki template, a small set of\nstarter pages for your wiki.  <a href="FrontPage/editform">Edit</


[cut the rest of the default Frontpage]


>\n<p>Enjoy your wiki!</p>\n<p>\n</p>\n'},
     'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0x94347ec>,
     'request': <HTTPRequest, URL=http://red.sunderland.ac.uk:8080/test_wiki/FrontPage>,
     'root': <Application at >,
     'template': <PageTemplateFile at /test_wiki/wikipage used for /test_wiki/FrontPage>,
     'user': <User 'john'>}

  * Module zope.tales.expressions, line 217, in __call__
  * Module Products.PageTemplates.Expressions, line 153, in _eval
  * Module zope.tales.expressions, line 124, in _eval
  * Module Products.PageTemplates.Expressions, line 80, in boboAwareZopeTraverse
  * Module OFS.Traversable, line 301, in restrictedTraverse
  * Module OFS.Traversable, line 284, in unrestrictedTraverse
    __traceback_info__: ([], 'macros')

AttributeError

Troubleshooting Suggestions

Site Error/ An error was encountered while publishing this resource. --Simon Michael, Wed, 20 Jan 2010 15:10:28 -0800 reply

Hi John, that is quite odd. The first thing I see there that's probably indicating a problem is:

* Module zope.pagetemplate.pagetemplate, line 117, in pt_render
  Warning: Macro expansion failed
  Warning: exceptions.AttributeError: pt_macros

If nothing has changed about your zope/zwiki configuration, is it possible you installed something elsewhere on the system - like a newer version of zope.pagetemplate - that could be affecting it, causing the standard pt_macros attribute to disappear ?

I would also look at the traceback in /error_log, where you'll get the clearest rendering. I'd like to know what exactly it shows after the final "AttributeError?" at the bottom.

Site Error/ An error was encountered while publishing this resource. --Simon Michael, Wed, 20 Jan 2010 15:19:00 -0800 reply

Another wild guess, could an object have been added to your zodb with a sensitive id, causing things to break ? http://wiki.zope.org/zope2/IdsToAvoid

lists some of these. Have you noticed any other breakage with this

zope ? Are you able to create a new Page Template in the root folder and view it ? How about in the wiki folder ? Are you able to test with a recent previous version of this zodb, if necessary by rolling back recent transactions in Undo (in a copy, obviously) ?

**continued - Site Error/ An error was encountered while publishing
this resource. ** --johngrey, Wed, 20 Jan 2010 15:32:11 -0800 reply

This is the end of the event.log

</ul>\n<p>Enjoy your wiki!</p>\n<p>\n</p>\n'},

       'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0x94ca92c>,

       'request': <HTTPRequest, URL=http://red.sunderland.ac.uk:8080/test_wiki/FrontPage>,

       'root': <Application at >,

       'template': <PageTemplateFile at /test_wiki/wikipage used for /test_wiki/FrontPage>,

       'user': <User 'john'>}

  Module zope.tales.expressions, line 217, in __call__

  Module Products.PageTemplates.Expressions, line 153, in _eval

  Module zope.tales.expressions, line 124, in _eval

  Module Products.PageTemplates.Expressions, line 80, in boboAwareZopeTraverse

  Module OFS.Traversable, line 301, in restrictedTraverse

  Module OFS.Traversable, line 284, in unrestrictedTraverse

   - __traceback_info__: ([], 'macros')

AttributeError: pt_macros

thanks, John

**continued - Site Error/ An error was encountered while publishing
this resource. ** --Simon Michael, Wed, 20 Jan 2010 15:40:58 -0800 reply
Googling for that error finds only http://zwiki.org/1373AttributeErrorPtMacrosInPlone
  • check this in case it contains any clues. You should probably open

a new issue to track this (at http://zwiki.org/IssueTracker ).

... --johngrey, Wed, 20 Jan 2010 15:52:18 -0800 reply

thanks - just to add - I haven't added anything significant - at the time it seemed to break I was working on a script to allow users to change passwords and I can't see anything else that has changed. I've rolled things back to before I thought the problem occurred with no effect. I tried to roll back further but got a page of error messages (sorry didn't capture these) and Zope now displays that there are no undos available. Everything else in Zope seems to be working ok. The error from google looks similar - although I wasn't using plone as was the case then.

I'll have to leave it for tonight but will investigate further tomorrow - thanks John

**continued - Site Error/ An error was encountered while publishing
this resource. ** --johngrey, Thu, 21 Jan 2010 03:27:30 -0800 reply

OK - I fixed it (after much messing around setting up another server to experiment with)

turns out there is another http://wiki.zope.org/zope2/IdsToAvoid - "content" - I had an empty method called content in root which was obviously being picked up by ZWiki and preventing publishing.

thanks, John

**continued - Site Error/ An error was encountered while publishing
this resource. ** --Simon Michael, Thu, 21 Jan 2010 08:08:31 -0800 reply

Excellent! And unfortunate. :-/ Thanks for the tip.

hello --simon, Mon, 26 Jul 2010 11:51:22 -0700 reply

I've just had a look around zwiki.org for the first time in a while. It seems to be working as intended despite the neglect, so this is good.

Nothing has happened in Zwiki development for some time. Are many of you still using it ? Any new deployments, or is it just to keep legacy sites going, or has Zwiki gone the way of the dodo ?

I wanted to say hi to all you subscribers (wave).

hello --DeanG, Mon, 26 Jul 2010 11:58:43 -0700 reply

Good to hear from you Simon (wave).

Since switching departments from where I deployed Zwiki I haven't been involved and the site has been mothballed. - DeanG http://twitter.com/ponderings

I'd like to encourage you to pencil in PyCon? 2011 in the spring as it will be in California next year (Silicon valley area). :)

hello --EmmaLaurijssens, Tue, 27 Jul 2010 01:26:01 -0700 reply

(waves back) Still here, but not a wiki admin anymore. I'm currently working in a shop that relies on MediaWiki?.

hello --jmax, Sun, 01 Aug 2010 23:01:39 -0700 reply

Hi, Simon... with a certain amount of shame I have to admit that we've bowed to peer pressure and moved most of Thinkubator(.ccsp.sfu.ca) into WordPress? (all my friends were doing it, so...). I still have the legacy site up and running. WordPress? is nowhere near as elegant an architecture as Zope/ZWiki, but I do feel a lot less like a lone wolf... Perhaps it's time for me to just say THANKS for such a terrific platform which served me for something like 7 years; I wish history were on its side, but from my perspective, it doesn't look that way.

hello --tralala, Mon, 02 Aug 2010 04:05:32 -0700 reply

Hey, Simon!

Nearly four years walking down the zwiki road I still have trouble convincing the company to use it actively. Nevertheless there's some progress - from a closed, department only wiki, now we have an open company-wide site and a policy to use it as a tool for communicating requirements and documenting the internal projects. I'm still waiting for the site to really pick up. The progress has been way too slow.

hello --JohnDeBruyn, Sun, 08 Aug 2010 08:24:05 -0700 reply

Hi Simon: Zope and Zwiki are great. Hang in there. Your efforts are much appreciated. John

ZwikiBlog --JohnDeBruyn, Sun, 08 Aug 2010 08:57:16 -0700 reply

Hi Simon: I got over to the ZwikiBlog page. Exciting stuff. Keep up the good work. John

hello --simon, Wed, 08 Sep 2010 08:12:19 -0700 reply

Hey all.. thanks for the replies to my ping in July. It sounds pretty much as I thought. But also, I've seen an unexpected slight uptick in activity of late - traffic on zwikis I subscribe to, Zwiki bug reports, #zwiki support incidents, new zwikis (eg).

So keep the ol' sites running I guess.

I accidentally the pypi package.. --simon, Fri, 17 Dec 2010 06:57:58 -0800 reply

Thanks to witsch for dropping by #zwiki and nudging me to do something about the broken Zwiki PYPI package. I removed it (now re-added, but hidden) until we conform to current packaging standards. To install Zwiki 2.0b1, use the traditional product tarball or darcs get methods linked on zwiki.org .