Another month coding, another month rootlogging.
I'll get to the detailing the latest happenings from Patch Manager
in a second. Broadly, this month I spent a lot of time on the new
usergroup discussions, plus assorted other smaller things. I've
gotten more and more familiar with the e2 codebase, and have run into
the coding feats of the great masters of the past that have built e2
over the past decade and in some cases still are. In no particular
order, wharfinger, N-Wing, jaybonci, kthejoker, ascorbic,
Oolong, and of course nate. You each have very
particular coding styles, and even if it's been extemporaneously, it's been a pleasure working with you. I
Modernising Everything2 — Time for Everything3?
Now and then the idea gets tossed around that our Everything Engine,
abbreviated to ecore (although strictly speaking, ecore is a
subset of the Everything Engine) is old and needs to be scrapped. Of
course it's old. It's even older than what the only other site that I
can think of that's still running ecore is running: perlmonks. We're
running 0.8 here, and they're running a newer version that they've
hacked the hell out of. Being old, it has lots of flaws, but now that
I've been working with it, I realise that it's not all that
bad. The "everything is a node" mantra is actually really cute and a
useful simplification at times, but other times it becomes a serious
obstacle to getting certain things done.
In the words of its creator, ecore is the best that web
technology could offer in 1999. It is now a decade later, and we're
still using it. Web technology has moved forward, but we haven't. I
myself have toyed with the idea of completely scrapping ecore and
begin building something else in Python instead of Perl, Django
instead of ecore. We called that pipe dream something2. Will it
ever become a reality? Who knows. Probably not. But just maybe it
will. Now that I've actually been spending quite a bit within the guts
of e2, and I feel that I can give a reasonable overview more or less
of how the whole site is put together and just what makes e2 tick, I
do think I could have a more reasonable try one of these days to
rebuild e2 with a different CMS than ecore. The dream of the E2
Community Development Newsletter, Summer 2007 will be near impossible
to achieve with ecore. Well, not without lots and lots of work. But
perhaps, or so I'm told, it will be
easier with a CMS that has been updated within the last decade.
Don't hold your breath. I am enjoying myself way too much hacking away
at e2 as it currently stands, so first I'll need to lose some inertia
before I decide that I want to rebuild e2 in a different framework.
For now, it's a pipe dream. Perhaps it could forever remain a pipe
dream. But it could also one day become a reality.
On to the actual root log
Enough soapboxing. With the permission of edev and the other
e2coders, I'll now document what I've done as well as what they've
helped me with. Broad strokes first. At the end, I'll put up all the
little bugs that were squashed and the tiny features that you wouldn't
even notice unless I pointed them out.
The most visible change for this month is that we have usergroup
discussions. This has been talked about since they were created, way
back in 2001. Sorry it took eight years to get them to all usergroups
as suggested almost since their creation. Previously, only the eds and
admins could use them. Better late than never, right?
I spent a lot of time tweaking them in various ways. I had to be
absolutely sure that permissions worked right so that only the members
of the right usergroup can see the discussions, so that was the first
thing. In retrospect, maybe that's a little too restrictive at times,
and it would be good if some discussions could be more public at the
discretion of the initiator or usergroup. I may implement something of
the sort. There were lots of little tweaks for usergroup discussions,
which I now detail:
- usergroup discussions itself filters by usergroups
- Easy method to choose which usergroup to create a discussion
- Fix various bugs with permissions not being set correctly on
- Make it possible for authors to edit their posts, not just
- Implement Virgil /msg notifications for notifying a usergroup
when a new discussion is created or a poster for when a reply is
made to their post
- Also implement more aggressive notifications in the
notifications nodelet separate from Virgil's /msgs that
notify everyone in the usergroup of a new reply,
not just the person being replied to. The idea is to eventually
completely deprecate system bots as notificators and only use the
- Improve navigation by giving links to the discussion page filtered
by usergroup or to the whole thing
- Display reply count instead of the create time
- Show which discussions have had activity that the user hasn't read
- Sort discussions by last update time instead of create time
- Setup a default "untitled $usergroup discussion" title and not
allow blank titles
- Automatically and invisibly namespace discussions by usergroup.
E.g., all discussions for SexE2 are prefixed by "SexE2:" in their
title. Older discussions still aren't properly namespaced, but they
will fade away of their own accord eventually
- Paginate usergroup discussions
- Put links between usergroup message archive and usergroup
- Provide anchor tags so that it's possible to link to a particular
reply but within the whole discussion node
- Deprecate the old Everything Discussion Directory which violated
various privacy settings anyways
And I'm not completely done yet! There is one last nagging thing about
the way that when replying, you're taken to the edit page for the
reply instead of the full discussion. Also, at some point, we're
eventually gonna create a discussion that's huge and needs some
pagination of sorts. Those are in the TODO list for discussions.
For security reasons, I won't fully detail what's been going on here,
but albinowax has spent lots of time finding ways to mess up our
security. I've been more or less diligent about patching security
holes as they're found, but many are still possible. ascorbic has
also provided a new mechanism that will take some effort to implement
throughout e2, but once it's done, it will greatly increase our
security. Basically, e2 has been built since the beginning without any
concern for security at all. I am fairly certain that the biggest
holes have been patched, but mostly harmless smaller holes still exist
that we patch as we find them. If you do find a security hole, please
report them privately to me or someone else, so that it can't be
exploited until we patch it.
April Fool's Day
So this has been my first year in charge of the April Fool's coding,
and it was quite fun. The only difficult thing was coming up with
ideas to do for it! I could think of nothing good, until on the last
minute alex came up with four simple things: (1) random pig Latin
in messages, (2) XP and GP in binary, (3) node titles sdrawkcab,
and, the one that proved really popular, (4) give everyone a
semi-random name of a historical figure. There was a list of 84
possible names, and each noder got a name based on the
remainder of their user id when divided by 84. We got a few
interesting coincidences for it. I had a good time tracking down all
the places where noder names could show up. I wanted to be a bit more
extreme and make the HTML title of the node (i.e. the
"NODE@everyting2.com" in the browser's titlebar) be the only place
where the original name could be seen, but the boss thought
that was too extreme, and I left homenodes mostly intact. For
those of you who can see our code, you can read the list
of possible names in afd2009Username.
The coding took up the better part of March 31st, but it was very fun
coding. For better or for worse, the boss pulled the plug after
only 12 hours of April Fooling, hoping that this would leave noders
hungry for more next year. If I'm the coder in charge of next year's
AFD, we're going to have to come up with something much more elaborate
for next year in order to make it up for only half a day of fun this
Other, various, misc., etc.
Now on to document the other changes that have been going on around
here. Not to downplay the contributions of other coders, but most of
their work can be found here in small things that of course end up
adding to quite a lot. Thanks to everyone who helped with patches this
Without further ado:
- Implement the X writeups in a month
achievements. The only achievement that hasn't been implemented yet
is "most writeups in a month"
- Can optionally display recent node count in
- rootbeer277: Personal writeup types now gives you 5 XP. It used
to be blocked.
- Fix problems with some usergroups not showing their talk box
- OldMiner and rootbeer277: Improve the sorting algorithm of
Other Users (sorry, it's still by recent writeups).
- Oolong: Some improvements towards making our URLs more
semantic in various places, particularly as regards writeups.
- rootbeer277: Add dice rolling to the catbox. See "/help roll" in
- Oolong: Don't nag users above level 0 about linkless
- OldMiner: Move pollvoting to GP from XP.
- Paginate Patch Manager
- rootbeer277: Cleanup cool code for eds and admins, now that they
don't have unlimited chings anymore.
- rootbeer277: Don't show bookmarks in homenodes to Guest
- rootbeer277: Fix a bug regarding resurrecting writeups.
- Oolong: Retire a dangerous and buggy feature that can result in
a usergroup accidentally getting emptied out.
- OldMiner: Don't show some notifications to those who shouldn't
- Oolong and me: Some work towards making it easier to integrate
audio and podcasts into e2. This is very much work-in-progress
- alex (yeah, boss is a coder too!): Grant eds power to rename
- Slightly patch our patch system. We are almost there to turning
our patch system into a real version control system! :D
- Give Message Inbox much needed pagination.
In the near future, mkb is gonna try to fix an annoying bug with
ajax chatterlight regarding focus, and we're gonna see about putting
the Notifications nodelet in it too. UPDATE: That's already been done almost as soon as I said it. Since notifications mostly
says stuff that should drag you away from too much chatting in the
catbox, this is a good thing. ;-)
I want to finish up that one last thing regarding the non-intuitive
way that replying currently works in usergroup discussions, and I
want to see about taking the
live, as soon as I clear up a few things with the people in charge
about how exactly should revoting work. I also believe that the
notifications nodelet should be the future, and I'm pondering
despite his complaints, to permanently move Cool Man Eddie's office
to the Notifications nodelet, along with the other notification
That's all for this month! Thanks to everyone who's been
contributing. To those of you who aren't coders, remember that you can still contribute to improve the code of this site by reporting bugs to e2 bugs. And for those of you who are, happy hacking!