display | more...

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 salute you.

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.

Usergroup discussions

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 for
  • Fix various bugs with permissions not being set correctly on discussion nodes
  • Make it possible for authors to edit their posts, not just admins
  • 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 notifications nodelet.
  • 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 yet
  • 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 discussions
  • 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.

Security auditting

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 year.

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 month.

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 homenode.
  • rootbeer277: Personal writeup types now gives you 5 XP. It used to be blocked.
  • Fix problems with some usergroups not showing their talk box properly.
  • 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 same.
  • Oolong: Don't nag users above level 0 about linkless writeups.
  • 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 User.
  • 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 see them.
  • Oolong and me: Some work towards making it easier to integrate audio and podcasts into e2. This is very much work-in-progress still.
  • alex (yeah, boss is a coder too!): Grant eds power to rename nodes.
  • 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.

Coming soon...

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 revoting code 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 characters.

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!

Log in or register to write something here or to contact authors.