Are you sure?

Revision Log

Upgraded the codebase to Python 3 and Django 2. This is a fairly major structural change, but it simplifies things and ensures that we're on a stable and supported development platform for the foreseeable future.
Added explicit handling for image processing errors — meaning when you upload a picture that the site's back-end has trouble processing (for example because of corrupt data which may or may not be apparent to the user because client-side viewer apps might still be able to display it properly), now it shows an "alert" icon and emails the artist a notice that the image is corrupted and needs to be re-saved and re-submitted.
Added the ability to reply by PM directly to bulletins.
Reworked bulletins to allow replies. This involved changing PictureComment objects to more generic ThreadedComment objects, which can now have either a picture or a bulletin as a root object. Also redid the styling on the bulletin popup box, which now uses jQueryUI dialog instead of the old and decrepit Shadowbox.js (which I should get rid of).
Added more verbose reporting of the reasons why a pending picture has triggered manual approval.
Fixed up the comment function, thanks to Sukala; you can now again delete comments you've left on others' pics, and you can also cancel after you begin editing a comment.

Next I need to figure out a good way to do editing of roars. Maybe a popup window...
Did some cleanup on adoptable offers—fixed the thumbnail dimension setting and also put in a check to ensure the same character cannot be adopted out multiple times.
Noticed a race condition in profile picture resizing/thumbnailing (the thumb was being created at the same time as the main resize, by two parallel asynchronous celery processes). Solution is to do the thumbnail synchronously, then spin off the process to resize the main profile pic if needed.
PMs in response to Roars were still going through the old popup-style PM view (oops), so I moved that workflow into the new integrated system.
Filtered out deleted Roars from being displayed. There's no purpose in showing "Roar deleted", is there. Feh
Reworked the layout of the artist landing pages. Now the Roars appear in a narrow column to the right of the info box; the idea is to encourage them to be brief little greetings rather than large presentations. They also load by infinite-scrolling now rather than having to click a button.
Fixed some encoding errors in the email module that were causing things like PMs to break if the user's name has special/Unicode characters in it.
Added a condition on the picture.html include template such that the "view unviewed picture" routine is not executed if you're viewing the picture on the site's main page. This should prevent people's unviewed pictures from disappearing after they've hit the main page without realizing that there are new pictures there.
Realized that the "# new" indicator in the Favorite Artists list wasn't reflecting new pictures anymore. Found that this was because it was rendering the Favorite Artists list after rendering all the new pictures on the page itself, which in the process clears the "new" flag for those pictures. D'oh! Rejiggered the code to generate the Favorite Artists sidebar before doing any of the rest of the page. Thanks to Alan the Leopard for the catch!
Moved the Bulletins and Admin Announcements boxes on the front page to infinite-scrolling, and got rid of the "More" buttons.
Fixed the Blocks feature so you can't block yourself. Oops! Also made it clearer on the commenting pages when you're blocked from commenting or roaring. Thanks to KimiKubby!
Made some long-overdue improvements to the Bulletins in the front-page boxes; now you can click anywhere in the bulletin to pop up the shadowbox window. I still want to spiff them up a bit more—the shadowbox is ugly, and I think the whole thing should be lazy-loaded and have infinite-scrolling so that "More" button should go away—but this is a start.
Time zone support. Thank you Django for making this a no-brainer.
Redid the Contests page in ArtManager so that it doesn't list all the entries for every contest all at once (that makes the page load really slowly if you have a lot of contests or entries); now the entries are disclosed via an AJAX call. Much better. Still looks kinda hokey, but I can fiddle with the styling later.

Also, finally excluded your own picture comments from the "Unread Comments" list on the Dashboard. That one should have been fixed a million years ago. Oops! 😳
Reworked the global contest setup page/form, in time for the end of the current global contest.
New PM system rolled out. This replaces the shadowboxed popup windows (with their cruddy barely-styled look & feel and their awkward inline quoting paradigm) with a more traditional message view where a PM is shown in a full-screen ArtManager window, along with all other PMs in the related thread. No more embedded quotes, and no more weird popups that don't work properly on mobile. The whole thing is more familiar-feeling (in 2018 we've all grown used to certain well-understood styles of messaging) and at the same time tries to be helpful and convenient (i.e. by showing a whole thread at once instead of just the one you select).

The message list now lets you click on any part of the row (and highlights the row on hover), so no more having to click on the subject and the rest being dead space.
Made the "# new private message" note a link to the PMs page, and added a badge to the tab. Yet another of the things I had intended to add long ago but never really found the time after rolling out the 2016 (/2010) rewrite.

Another thing on that list is "rewrite PMs so they don't use that stupid shadowbox popup". That's next up...
Reworked the Characters section a whole bunch. Now it navigates like the Artwork and Artist pages, with a series of tabs that load content inline; the Search tab now loads the popular species list in an AJAX call to prevent it from blocking load times. (It's also finally styled properly.)
Added the Upcoming Birthdays box back to the front page, where it had been MIA since the rollout of the 2016 version.

Brought back this Revision Log too, where I'll get back to noting new features and bug fixes. Since the old Revision Log was a static HTML file and is now stored in the database, this might be the last remaining item in the "separating data from code" checklist.
In an attempt to spruce up the main page a bit and call attention to some of the most showoffable artwork created by the members of this site over the years, I've put a new sidebar there which shows 12 randomly selected pictures with 20 or more faves. It's responsive too, so if the browser window is too narrow it just disappears.

There is also now BBcode support for YouTube videos, using the syntax [⁣youtube]<video_id>[/youtube]
Grand opening of the brand-new (but still similar-looking) Django rewrite of the site, replacing what turned out to be the "interim" 2016 JSP/Java version!

Everything looks and works the same (with the exception of uploads being smoother with better visual feedback, and little spinny icons to indicate that thumbnails are being background processed). Sooner or later the whole look and feel of the site will get another revamp, since the current front-end was written in 2010 and never rolled out until 2016, and time's arrow keeps marching on...
Moved to django-wiki from MediaWiki. No more PHP in the system. Users other than myself still can't edit articles, but that'll be coming soon, once I get the user database synced over and integrated in the back-end.
Moved to a new server with lots more disk space and bandwidth than the old one. This opens up lots of new possibilities that haven't been in the cards for the last few years.
Fixed the folder links in just-uploaded pictures. Thanks to Feuillyien!
Fixed a JavaScript issue with the popup code on the Random Pictures listing. Thanks to Thowra!
Found a bug (thanks to Faragona) in the Perl image-type-detection library I'm using, where it fails to find critical image data (like the format and dimensions) when it encounters certain embedded Photoshop profile information. Because the library is not under my control, I've made a fix to the upload routine that strips out these headers from all uploads before any processing is done. This should fix the buggy case we found, but let's hope it doesn't cause anyone else any unexpected results.
Added the character count display to the Pending Pictures page. Thanks to Alan for noting this feature inconsistency.
Fixed the permalinks on the Coloring Cave; now a saved link will open up the targeted item and only that one, rather than trying to load the entire CC list (while calculating the right page) and then jump to the correct item. This is way simpler.
Did some database reorganization recently that allowed me to finally get the schema more properly aligned (ID columns first in the tables, etc). This led to some obscure and insidious bugs, such as folder moves and the uploading history graph, which are now fixed.
Fixed an apparently long-standing bug in the password recovery system where it wasn't properly updating the user profile password as well as the artist password. (Also it was kicking you to a badly mangled page that has apparently been misformatted ever since I went to the tabbed Artist Account area some years ago.) This is now fixed, though, and gets us ever closer to the distant goal of being able to functionally eliminate the disconnect between Artist Accounts and User Profiles, at least from the end-user perspective...
Fixed an issue with the Favorite Artists list where the sort selector didn't always work predictably (specifically, it was setting a different cookie for every URL that had a different path component, so you had a different sort option for every sub-page within the site). Now it behaves the same throughout the site.
Added a site-wide limitation on the number of connections that are allowed to each IP. If you make more than 3 requests in 10 seconds, you get a brief error message; otherwise, it works like normal. We'll see whether this threshold is too low or not low enough, or if it makes a difference at all to the performance of the site. But I don't think it can much hurt.
Decoupled the zipping functionality from the auto-upload process. That should have happened ages ago, but it seems I plumb forgot. That should make a huge difference in performance, especially for artists who have tons of pictures in their galleries already.
I don't know what possesses me to do these things the night before I leave on a cross-country plane trip that will take me away from net access for several days at a time, but I've just rearchitected the approval back-end a little so that the updating of the new picture notifications table is now decoupled from the insertion process. This uses a newpics_pending table and a new asynchronous process that reads that table's contents and adds newpics entries in the background; that should speed up the process of uploading new pics for artists who have zillions of watchers, especially in auto-approval. Now to see whether this will blow up on me before tomorrow...
Added a couple of features suggested (months ago) by Alan: character counts for the Pictures and Folders editing pages. This isn't something that was difficult to do; the main reason I'd held off doing it for so long seems to have been that wading into the rat's nest of code in those awful old pages is simply depressing, thinking that that's how I once programmed. I seriously, seriously need to do a ground-up rewrite of the whole site someday.

Also put in the functionality for a user block to take effect throughout your gallery, rather than just on the picture you block them on; I made it so that's the default behavior too, since likely 99% of the time that's what the artist wants to do anyway, and it would clutter the controls needlessly to have separate "block for just this picture" and "block globally" controls. Thanks to Kash for the idea!
Made a couple of fixes to the "Upcoming Birthdays" display, to make sure it handles the end-of-year condition properly (e.g. birthdays coming up in January when you're viewing it in December). Also I broke out the "show age" setting to its own dedicated switch.
Finished the slow (and quiet) rollout of the "Upcoming Birthdays" feature, which is an AJAX popup on the main page under the bulletins. This requires a new "birthdate" field in the artists table, which artists have to set using a date picker (as opposed to the old free-form "age/birthday" field, which they can still use). There's also a "display birthdate publicly" switch, so people can hide their ages. Thanks to Kari for the idea!
Fixed a bit of the Edit Characters page where a character who had previously been offered for adoption but then removed could not be re-adopted out. Thanks to N'Kira!
Deleted Coloring Cave pictures were still showing up in the inline gallery view; that's fixed now. Thanks to Jogu!
Fixed the targeting on artist names in the User Comments window. Thanks to Jomm for catching that one.
Made a fix to the uploading system where it checks the hash fingerprint of the uploaded file against any that are already in the queue; now it properly detects if someone else (other than you) has already uploaded the picture you're uploading, and is waiting for it to be approved. This condition can happen if the other person is a recipient of an art trade and has received the picture separately already, and misunderstands the system such that they try to upload it into their own gallery rather than waiting for it to be uploaded by the original artist and submitted to the recipient via Art Trades/Requests. Kind of a corner case, and it's not possible to fix 100% (I'll never know whether the first upload is by the original artist or the recipient), but now at least it gives enough of a useful message to help people figure out what's wrong.
Added a preference setting to enable/disable the pseudo-folder that links to the Coloring Cave contributions on an artist's Gallery page.
Realized that I hadn't provided a way to edit the titles on offered adoptables (brought to my attention indirectly by Snow Leopard 3000). This is addressed now, for both adoptables and icons.
The picture info on the Picture Comments page wasn't properly displaying the folder; fixed.
Fixed a font sizing issue on the Contests page (the body text on each picture entry was being passed in as a special override, which mistakenly had a <FONT> tag on it dating back to the age when browsers communicated only in grunts and whistles).
Finally fixed something that I should have done way better in the first place: the Show All/Close links on the Artist Comment block now work a lot more sensibly. Instead of loading up two completely separate divs with the Artist Comment content, making one hidden and the other truncated, and then layering them on top of each other, now I'm just making the one div and having the links expand and contract it on demand. I have no idea why I didn't do it that way to begin with; I just know that it caused no end of problems when people did things like embed videos and music (if you stopped the video in one layer, the one in the other layer would keep playing, stupidly). It should work a lot more predictably now.
Of administrative interest only—I've now added tracking code to the database schema and supporting apps that will log all artist name changes; so if I'm trying to find an artist by a name he or she USED to have (rather than the current one), it'll be far easier. It'll also make investigating certain kinds of shenanigans possible.
In the spirit of the previous new listing, Kari suggested a similar one: Top Ten Recently Uploaded Pictures. So that's now in there too. And it works the same as the regular Top Ten listing, too, so you can drill down to see a list of up to a thousand.
Added a new listing to the Artists page: "Top Ten Recently Active Artists", which is just like "Top Ten Artists" except that it shows only those artists whose last upload is in the past month. This entailed adding a new field to the artists table to keep track of the last upload date, which I realized I should have had in there a long time ago; now that I have that, I was able to go through the Artists page and remove a bunch of superfluous queries that do nothing but grab the last upload date for each artist being displayed. That should speed things up a bit—well, I'm not sure how much, but it sure can't hurt. Thanks to Tigre for the idea!
Fixed some issues with folder listings/counts that arose from me trying to fit in the Coloring Cave listings in a sensible way. There are so many different conditions associated with the gallery/folder view—whether you're in tree or list mode, whether you're viewing the top level or a subfolder, whether you're in a mode like "by date" or "new", and so on—I guess it was inevitable that I'd screw it up somewhere. Thanks to jomm for the assist in figuring it out!
Re-enabled the special Coloring Cave folders on artists' pages who have uploaded colored line-art into the Coloring Cave. This folder appears automatically above the artist's normal folders, and it has a slightly different appearance. I don't want it to look too different, because there should be a consistent style; but I also don't want it to look just like other folders, because when I originally put this feature up back in December '07, it confused people who had thought they'd created the folder themselves and were having trouble deleting it. I think enough time has passed that it will be clear what it's for now, and it should help to clarify the policy regarding where you're supposed to upload your Coloring Cave colored pictures (it continues to be a popular feature and deserves full support).

I've also fixed a few bugs in the list view so that missing original line-art is handled correctly, and the links to the original line-art go to the correct Coloring Cave page. And at the same time I've redone the show/hide function in the Coloring Cave to use AJAX, like in the Contests page, which means it no longer has to reload the entire page just to repaint the picture list.
Took another stab at clearing out the last of those "false" errors that keep showing up as a result of an earlier cleanup/fix that attempted to simplify the targeting code on popup windows. I'm sure this isn't the last of them, but there should be a lot fewer now...
Fixed the "By date" view so the folders are never shown. It was still mistakenly showing them if there was a folderview cookie shown.
Fixed the replacement routine so that if the replaced picture is entered in a contest, the votes that were cast for the original carry over to the replacement too. Thanks to Nala Lover who alerted me to this issue.
Made a few tweaks to the font sizes in some of the pop-up windows where the text size wasn't explicitly specified in the CSS. Recently I found (to my great shame) that I've been setting my browsers' default font sizes down by three points all these years, with the result that all my poorly specified styles have text that's way too big, even though it looks fine on my browser. I hope nobody's gotten too used to the way things like the Artist Profile table looked before, because now it's the way I intended it all along. Sorry about that...
Fixed a problem where comments by users (who don't have artist accounts linked to their profiles) didn't have the user's name embedded in them. Caught by Kari.
Cleaned up the yellow file-size warning code a little, moving the thresholds to the tops of the respective files so they can be tweaked if necessary.
At Kari's suggestion, added links to the Artists page sections that expand each of the listings to fuller 100-up listings (e.g. Most Prolific, Top Rated, etc). This is much simpler than making those pages fully navigable with paging going back arbitrarily far, and probably will cover all the navigating anyone will want to do along those axes. Also fixed an issue where the e-mail notifications showing replies to User Comments at the artist level weren't quoting the original message the way the picture comment replies were.
Fixed a bug in the Edit Characters picture-setting screen, where I mistakenly added a field to the printPictureEntry call thinking it was printPictureEntryMinimal, leading to a very wacked-out table. I really need to start using proper Perl objects in these subroutines.
Fixed the main-page search function to, um, work. Apparently it never has. Ahem. Thanks to Dogdev3 for catching it!
Reworked printPictureEntryMinimal a little bit to better accommodate anonymous entries (e.g. on contests; now, if a contest is anonymous, clicking the thumbnail sends it to /cgi-bin/view rather than to the direct path in the artist's directory, and hovering over the thumbnail no longer reveals the artist's name (in the path). It's still pretty easy to figure out who did the picture if you want to (e.g. clicking the "comments" link, or viewing the source to see where the thumbnail is coming from); but I didn't think it was worth obscuring it that obsessively (besides, calling a CGI for every single image, including thumbnails, would get burdensome real fast).
Added a feature to the Sketcher admin page to allow admins to ban and unban artists.
Added a feature suggested by Killress: it is now possible for a picture to be immediately sent to another artist as an Art Trade/Request right after being uploaded, if you have auto-approval. This should make things a lot more convenient for artists who find themselves in that situation a lot...
Added an extra check to the Sketcher login page such that you have to have at least 5 pictures uploaded in order to use the system. This should help dissuade troublemakers who sign up and post a quick gag picture just so they can get into Sketcher and cause mischief.
Fixed the Adoptables section of the Trading Tree so that accepted adoptables get removed from the listings; a use case I overlooked in the previous fix.
A couple of improvements to icon offers in the Trading Tree:
  • When you remove an offer, it now gives you the option to delete all your prior completed icons from their respective recipients' Art Trades/Requests, or not (thanks to QuachirMayah and Summer Rain)
  • Icon offer descriptions can now be edited (thanks to Mithril)
Moved some of the styling from printBulletins into the stylesheet, where it should be.
Fixed a problem with folder indenting in Firefox, pointed out to me by Killress. Finally did something else I've been meaning to do for a long time: added a "Coloring Cave Pictures" pseudo-folder to the folder list in the gallery page to gather all of an artist's recolored line-art into a single view. Perhaps this will help to discourage artists from uploading recolored line-art into their galleries...
Incorporated Ajax into the Contests page; now showing/hiding the entries for a given contest is an inline Ajax query, rather than a reload of the entire page with an anchor (an ugly and troublesome method). Soon I'll do the same for the Coloring Cave and Trading Tree.
Changed the Admin Message portlet to also use Ajax.

Also made a sanitizeArtistName routine, finally, so all the places where I try to make a filesystem-friendly version of the names artists might choose are at least kept in one central location so that the same rules and tinkerings are applied to everything across the board (e.g. Sketcher).
Finally starting to incorporate some Ajax into the site. I started by making the Bulletins portlet into an interactive-updating list that fetches a whole new set of bulletins from a script and replaces it into the bulletins div on demand, rather than having to load two whole divs, one with five bulletins and one with twenty, which defeats the whole purpose of starting with a short list in the first place (which is to reduce page weight and load time). Now the whole overhead of loading the longer list is deferred to when (and if) it's actually requested, rather than forcing it to happen on every single page load. That's what I'm talkin' 'bout.

As time goes on, I'll be incorporating Ajaxy page-replacing functions into other parts of the site that desperately need them, like the Contests page, the Trading Tree, and other popup pages that currently make you reload the entire page and jump to an anchor if you want to expand the view of a certain item. These are the kinds of things Ajax was made for.
Fixed a case in auto-approval where a filename of "0.jpg" could cause it to mistakenly put it in the manual approval queue.
Removed the onKeyUp length checking from the Edit Pending page. I may need to put in a validation on form submit like on the upload box, but at least now it doesn't keep kicking your cursor to the end of the box as you type.
Whoops... fixed the main-page search form. That'll teach me to test it before rolling it out...
Added a generalized Search form to the main page, and tweaked the spacing so it doesn't interfere much with the layout. I'm not sure why I thought it was a good idea to force people to go to the View pages to get into the right searching context; probably because I thought loading those pages wouldn't be so computationally heavy.
Removed artists with zero pictures from the artist picker in the AotM voting section.
Argh... I just realized that some ancient code in upload.cgi was preventing HTML code in picture descriptions from being passed through into the pictures table, even though formatText handles anything that has been reformatted after being uploaded. Fixed now.
Did a bunch of cleanup on the artist name change process, in response to fallout from making * characters into underscorable symbols. Some artists have had their directory names changed as a result of this, but there should not be any further issues with name collisions or with Sketcher kicking people out who have asterisks in their names.
Added MPEG-4 (.mp4) to the list of acceptable file types. I should have done this long ago, but I can only say I simply forgot...

Also made some tweaks to the dirname sanitizer so that * characters are converted into underscores (to help avoid collisions), and reworked the layout of the Artist Info/Prefs page so the Change Name and Upload New Profile Picture buttons are more readily visible.
Bumped up the field sizes on name, dirname, and sortname to 32 from 30; this allows me to put in some safety code that sets the dirname to an MD5 hash if the artist name is one made up of symbols that reduces down to a blank in the sanitizing process.
Some people were actually relying on showfans.cgi displaying fans in chronological order of when they added the artist as a favorite; so I put in a switcher that lets you toggle between "by date added" and "by name". Thanks to Mithril and Blu_wulf for bringing it to my attention!
Added a charset=latin1 header to the main site HTML, finally. No idea why I hadn't done that long ago.
Added a MAXLENGTH statement to the filename input fields on the approval script, to prevent me from blithely sending through gigantic long filenames that are too big to fit in the filename field in the database.
Changed the showfans.cgi list query to sort based on name, showing the non-artist users first and then the artists. Suggested by Whiteclaw.
Changed the upload.cgi response page to use the CSS image display format (akin to the one in the Edit Pending Pictures page).
Added an error message on the User Profile login box that tells you if your name/password was incorrect. That should reduce some confusion...
Fixed the AotM vote picker so it excludes previously featured artists. Somehow I'd forgotten to add that filter when I changed it to a pop-up picker. Thanks to Kiche.
Added a new "Adopt Out" button on the Edit Characters page, which sends you directly to the Trading Tree setup page, with that character filled in. Also put in some interlocks and warnings to prevent you from accidentally deleting a character that's currently up for adoption. There will be more integration coming eventually, but this is an incremental improvement.
Fixed sendrequest.cgi (where you send art trades/requests to other artists) so it sends you back to the folder you came from, instead of the Main Folder (thanks to CheetahCub). Also spruced it up to use the "new" (now almost three years old) layout. I'm not sure how many more pages there are that I'm overlooking, but I've got to be closing in on them by now...
Added a new option to the big contests: anonymous entries. Now, when the contest is set up, the originator can decide whether entered pictures should be anonymous or not; if so, the artists' names are not displayed along with the pictures. This should help to address some participants' concerns that people vote for popular artists, not for the best picture. Thanks to Fireheart for the idea!
Added a new view mode for artist gallery pages, "All Pictures by Date". It's just a flat listing of all pictures in all folders. This is actually something I've wanted to do for a long time, but it was Edward_Elric whose suggestion made me get up and do it. Also made a fix to pagesLink(), where the ">>" button wasn't pointing to the right page.
Made the change to the Trading Tree so that an adopted character transfers directly over from the sender's Characters section and into the adopter's, rather than creating a whole new character entry in the database.
Timba twotail alerted me that the Picture Comments window wasn't allowing users to add the picture to their Favorite Pictures; that's fixed now (the code had simply never been put into that page—oops!)
Reworked the Adoptables section of the Trading Tree so that you now have to pick an existing character from your registered Characters section, rather than just uploading an unmoderated file straight from your computer. I'd hoped this wouldn't become necessary, but there have been too many issues lately with people posting off-topic characters and adoptables using other people's artwork. We'll see how this goes. It's not a complete implementation yet, and there's still some error handling to work out, but this should at least get us back on track for the time being. (Icons still work the same as they always have.)
Fixed some JavaScript problems on the comment pages, thanks to Alexus Lioness. Those pages have given me nothing but problems—why can't I ever get them right? And how come it always goes so long without anybody noticing there's a problem?
Added the capability for Sketcher admins to cancel and uncancel upcoming board resets. Thanks to BlueJay!
Fixed some layout issues in the comments pages on IE, thanks to Razzi.
Fixed the Trading Tree so that clicking on a completed icon returns you to the correct page (I was leaving out the page-number argument). Thanks to Mizan!
Revamped the Comments pages to use an inline hideable-box reply system rather than the clumsy Javascript-popup method. Still not sure why I went with the one-comment-per-user-per-artist/picture model way back when, but nobody's complained about that to date. Then again, nobody's ever complained about the replying method being clunky either...

I suspect that next I'll want to make inline editing the norm on comments themselves next not just replies, and then I'll float the idea of going to a more conventional non-editable, many-comments-per-user, perhaps threaded comment system. But we'll see what the reaction to this is like...
Fixed the Edit Contests page's behavior; it was not applying changes when you clicked "Publish and Begin Contest". Now it does that and performs the same checks as when you click "Edit Contest".
Made a little addition to the Guidelines (and to the Coloring Cave header) explaining that it's not acceptable to upload colored versions of other people's line-art into your own gallery—you're supposed to upload them back into the Coloring Cave.
Changed the AotM voting page to use the artist name picker and free-form name input field like in the Send Request page. Thanks to Criquetin!
Finally began the long-overdue transition to a more modern visual style for the artist account management pages. Right now it's just the main account.cgi page, which has the uploading form and a few miscellaneous functions like the password-reset and new account routines; over the next few days I plan to move the rest of the editing pages into the new format as well. For now, they all work the same as they used to—you just use nicer-looking links to get to them. Plus the uploading form is a lot tighter-looking now, I think.

Also fixed the searching functions to make sure to only turn up results from artists with at least one picture. (I'd started to put that clause in a long time ago, but somehow never finished it all the way.)
Fixed an embarrassing and potentially very dangerous bug in the "select/deselect all" function on the Edit Pictures page, found by XaKo. The toggleAll function was addressing pictures by different index values than the individual selection boxes were using, so if you did a "select all" and then deselected some, it wasn't really deselecting them, so you'd then go and delete the selected ones and it would kill even the ones you'd deselected. Yuck. Also I made the undelete script a bit more robust.
Made the sorting by name or image count work again on alphabetical artist listings, and added the ability to sort your Favorite Artists list by name or by number of pictures, thanks to brinazarski. Also generalized the "linkbar" CSS.
Made some minor adjustments to the font size in the comments pages; also posted some preemptive rules for adoptables and icons on the Edit Offers page, and started standardizing on a CSS warning-box div.
Fixed the e-mail notifications on the Contests page (I hope); thanks to brinazarski.

Also fixed a security hole in the Sketcher login whereby someone could spoof someone else's artist name (thanks to Timba twotail for catching that!).
Fixed the Coloring Cave so that deleted pictures aren't shown as being available for coloring. Also added a filtering feature to the Trading Tree so you can only show icons and adoptables being offered by a specified artist (thanks to ladrador).
Finally switched the User Comments and Picture Comments pages over to the new CSS-y style. That makes all the public-facing pages consistent. Took long enough, huh?
Added a field to the artists table that allows me to ban an artist from the Sketcher without completely suspending their account. Not making it available to Sketcher admins primarily for technical reasons, namely that the artists in Sketcher are tracked not by ID but by their munged-up display names, which I can't reliably use to reverse-lookup an artist in the database. But I can still do it manually, upon request by admins.
Added red and green lights to indicate each artist's "accepting requests/commissions" status in the Favorite Artists bar. Thanks to Vitsy for the idea!
Added <C to the list of allowed text strings.
Added a web utility to help me manage Sketcher admins.
Again thanks to Brinazarski—fixed the User Comments' "block" function, which was totally horked. I'm surprised nobody's mentioned this before. Then again, I guess that means people don't often have a need to block commenters, so that might be encouraging...
Fixed the User Comments page to trap quotes in replies, which had already been fixed in the picture comments page, but hadn't been rolled into the User Comments page too. Thanks to Brinazarski.
Tinkered with the database schema a bit today, adding another index to the comments table to (hopefully) speed up certain queries. This was spurred by the newpics table developing an indexing error, and when I tried to rebuild the indexes to repair it, realizing that only indexing several individual columns doesn't get the same speed benefits as having an additional index with all those columns as a combined key. Also cleared out all newpics entries up to January 1, 2004.
Made a change to the password-reset script so that it doesn't display your registered e-mail address if you've chosen to have it hidden; this will prevent people from being able to harvest e-mail addresses by performing password-reset requests on registered artists.
Introduced the Coloring Cave, which—;like the Trading Tree—is meant to help address the problem of certain kinds of art being uploaded to artists' main galleries that shouldn't really be there. In this case, it's the problem of colored line-art being uploaded as original art. Now there's a place for it to be posted, right along with the line-art it's derived from. (Thanks to Blue Tiger, in part, for suggesting a feature like this some time ago.)

Also reworked the Edit Pictures page to move the zipping function outside the loop that handles bulk operations (to speed it up), and put a status message on the page for when the form has been submitted, primarily so there's text being printed to the browser while it works, which prevents it from timing out.
Made an experimental change to try to fix how the "Edit/Clear New Pictures" links under the Favorite Artists list apparently aren't showing up for AOL users. I can't check it myself, but I hope adding a z-index: 2 statement helped...
Fixed the Fan Listing page to not display e-mail addresses of those artists who have set their e-mail addresses not to be visible. Oops! Thanks to Shock.
Added <D to the list of allowed text strings.
The Special Features page was using a bogus query to get its list of thumbnails for each special page in the list; I was forgetting to reset a certain clause in the query, so the first one was "terrorism", and the next was "terrorism and tlk10", and the next was "terrorism and tlk10 and tsunami"... d'oh! Thanks to Razzi for catching that.
Fixed a bad database query in the User Comments page that was causing replies to result in a 500 Server Error if the reply text had a quote mark in it. (Wrong variable getting passed.) Thanks to brinazarski!
Added a new cookie to keep track of the time zone offset as reported by the browser. This allows me to tweak formatDate() to present dates according to each user's local time, rather than forcing everyone to use Pacific.
Changed the Icons section of the Trading Tree to show only 20 icon offers per page rather than 100. (It's nice having that be a simple variable to set.) Since with 100 offers it often meant a user had to download like 800 total icons per page view, this should be a big help to non-broadband users especially, but also to the server in general.
Put some extra error trapping into dosearch.cgi to deal properly with browsers that come in without a query string. Also added a script to the Sketcher, which kicks out anyone whose name doesn't correspond to an artist in the database. That'll take care of the people I'm hearing about who like to log in, change their names, and log in again...

Also added a "View" link under the Favorite Artists which goes to the existing Most Recent Uploads page (with the Favorite Artists option enabled).
Fixed the Sketcher page so there are separate error traps for if you have an invalid cookie set and if you don't have any pictures uploaded yet.
Added the option to replace a picture without having one's fans be notified of it as a new upload. Thanks to Aikachi!
Fixed the artist name/wiki username mapping to account for names with initial lowercase, which MediaWiki doesn't like.
Made a couple of fixes to database queries that were causing search failures, particularly on artist profiles and in entering contests. Also trapped for URLs that try to access an out-of-range page number on an artist gallery page.
Added a MAXLENGTH=16 to the password input field on the main page for the user profile; that will account for passwords that are longer than 16 characters (they'll just be cropped before being hashed).
Wow... I don't know how long this has been a problem, but the "Select/Deselect All" toggle on the Edit Pictures page was not working properly, and according to the code it must never have. Specifically, it would select all the pictures in the folder, but then if you tried to do anything with it like delete or move the pictures, it just wouldn't do anything. That's fixed now; thanks to SpiritWolf77 for alerting me!

Also did a purge of six years' worth of deleted files, adding up to about 6.2 GB. I'm still undecided as to whether to make this sort of purge an automated thing, as it was originally intended to long ago; but since nobody has ever asked about restoring a deleted file, I'm not going to lose too much sleep over it.
Placed a three-month time limit on the Adoptables side of the Trading Tree, and replaced the old 500 Server Error page with a [url=/500.html]new one[/url] that's more informative and uses the "Ed tripping over the power cord" image that Salama did.
Fixed a problem where replacement pictures weren't getting their filenames updated in contest entries.
Made some more optimizations, because picture searches were still slow and causing things to pile up (I think we may have just happened to reach a constructive-interference size on one of the tables or something). Now there's a fulltext index on the title and keywords, which makes searching a ton faster as well as more accurate; but it doesn't do the ranked sorting thing anymore, which is kind of a bummer. But it might not matter for something like this. At least now it's totally fast.
Made some changes to the random-select code so that the "Five Random Pictures" block on the Artwork page executes a lot faster and no longer leads to blocking processes. I don't know if that's the biggest culprit for the behavior I've seen lately where some query will stick in MySQL's throat and cause a billion more processes to build up into a logjam, but it'll certainly not hurt.

...Also, after more rethinking, I've made a change that seems so obvious in retrospect that I can't believe I went this long without doing it. I added a "numpictures" field to the artists table, which I just pick up directly when doing an artist query rather than having to do a join on the pictures table. Now things like the Artists page are immensely faster, and I think the logjams will probably prove to be a thing of the past now.
Fixed a problem with the Reset Password function; now that I'd collapsed the Edit Artist Account/Profile sequence into a single screen, I'd forgotten to allow the Reset Password thing to actually, y'know, reset the password. It's fixed now, thanks to Whiteclaw.
The move to the new server came with a new version of ImageMagick, which has a new way of handling resizing animated GIFs. It used to be that the string of still-frames it created were copied to files with names that ended in ".jpg.#"... but now it becomes "-#.jpg". Since I'm using the ".jpg.0" file to determine whether a file is an animated GIF, I had to make some changes to account for the new format.
We're now moved over to the new server at, which ought to be a huge improvement—not necessarily because of hardware, but because of the general quality of the business. WebHostPlus appears to have gone into arrears and sold off a bunch of its machines (including to pay back rent, so it can't take much to be an improvement. But these guys appear to really have it together.

Even though the server is nominally slower than the one we left (2.4 GHz versus 2.8), the execution of server scripts looks to be a whole lot faster now; that's because I've put in a bunch of performance tweaks to MySQL, the most important of which is a saved query cache, which speeds up repetitive queries immensely. (I also tweaked the Artist Search query to hopefully be a lot more efficient; now it no longer tries to count up each artists total pictures while creating the temporary table.) Now the main page renders in less than a second every time, which is like night and day over the old one. We should be able to get along just fine on this new hardware, for the foreseeable future. Now we just have to worry about going over the 1500 GB/month limit...
Removed the "Promontory Point Chat Room" link from the Community Services box (the site seemed to be broken, and was installing malware on visitors' computers).
Reorganized the Artist Profile page so it's all in one screen now; you no longer have the e-mail and password on a separate screen from everything else.
Added an admin interface for Sketcher, and designated several artists as admins who can boot troublesome users and such.
Fixed the commenting system so that when an artist replies to your comment, the reply is sent to your artist account e-mail address (if it exists), not your user profile e-mail address. (Thanks to Shard.)

Also fixed the Edit Pending page so that when you move a picture into another folder, it moves it immediately upon selecting the destination folder, rather than making you click on the "Folder:" above it, which was pretty counterintuitive. (Thanks to Mahogi.) I really need to redo the look and feel of the artist managment stuff soon...
Made a change to the Trading Tree so that icons and adoptables that you've posted a claim for appear at the top of the list, followed by all others. Thanks to Aspen Glow for the idea!
Added a new option to the "Send Art Trade/Request" script; now you can either pick a single recipient, or click a checkbox to send it to all your visible fans at once. This means the workflow had to be completely changed around, but it should be essentially unchanged for most people's purposes. Thanks to Bladestar for the idea!
Fixed a big problem in the Trading Tree where the three-week time limit wasn't being applied, so every single icon posted since February was being listed in the page. This wasn't a problem until it got under 100 icons, which meant the entire faulty query was now happening all on one page, making for over 7000 files to download just from looking at the Trading Tree. Yurgh.
Discovered (thanks to King Simba_123456) that the MediaWiki user database works like wiki pages in that underscores in user names are converted to spaces before it checks login authorizations. This was causing problems with any artist whose name has a "_" in it. So I converted all the wiki user names to change underscores to spaces (after making sure there wouldn't be any clashes with similarly-named artists), and then added checking to the artist name change code that ensures underscores are treated the same as spaces when checking for existing artists with the selected name. That should take care of it.
Fixed the artist rename function to read in the current directory name from the ID just before renaming the files; this protects against cases where the artist changes names several times in a row within the same session, causing the script to attempt to rename a file that doesn't exist anymore and the directory name to get lost in action. Thanks to Unity!
Made a fix to the validateEmail() function, whose regexp was only matching addresses with a single dot in the domain part after the "@". This was causing all kinds of problems for people with addresses like "". It's fixed now. Thanks to Astrocat for reporting it!
Went live with the TLKFAAwiki, which out of the gate has a ton of great content by Shard, who suggested some kind of tutorial-posting place in the first place and made me get off my butt and integrate MediaWiki into the site. Editing requires an artist account (I hacked the "user" table to be correlated to an artist ID), but as with all wikis, I suspect there will be issues with vandalism. We'll have to see how it goes. Fingers crossed—because it's potentially a very good addition.
Changed the Sketcher login page behavior so that if there are 12 users in the room already, the login button gives you an explanatory JavaScript message rather than being confusingly grayed-out.
Added a listing of entered pictures to the Edit Contests page. That way artists can see who entered a contest even after it expires off the main page.
Bumped up the security on the Sketcher board, such that artists who haven't yet uploaded any pictures can't get in. This should protect against people who create prank accounts and then jump in and start scribbling on other people's art.
Installed an upgraded Sketcher package which has the following four fixes in it, requested and purchased from the developer:
  • There's now a "Smooth zoom" checkbox that can be used to toggle whether pixels are antialiased/interpolated when zoomed in
  • There's an explicit warning message that appears when you delete a layer, telling the user that the action might delete others' work
  • Zooming now centers on the middle of the viewport rather than off in some random direction
  • Putting linefeeds in the talk.txt file no longer causes an exception in the thread
Redesigned the Sketcher login page to be a bit more informative and prettier.
Spent most of today getting the automated board-clearing script working, including a page that people can hit which will prevent the board from being cleared if they've got something up that they're working on. Also finally tracked down an insidious little unbalanced quote mark in the Contests page that was causing lots of little untraceable SQL errors.
Thor Harald Johansen, owner of, contacted me over the weekend to express his frustration with TLKFAA artists flooding his site and his collaborative Sketcher rooms with TLK art. In accordance with his suggestion, I've now installed Sketcher at, so artists here can draw TLK stuff without taking over ArtGrounds. There's only one room set up so far, with a hard limit of 12 participants per room at once, and the server will need to be restarted every few hours to prevent memory leaks; but so far it seems to be off to a good start.

Also fixed up some code in the Contests page that was interfering with notification e-mails being sent out properly.
Added a validateEmail() function to help ensure that e-mail notifications are being sent to valid e-mail addresses before it attempts to send them, because a broken recipient address can make the whole display routine choke in processes like submitting a contest entry. Thanks to Shard! Also added a check that makes sure the sending e-mail address doesn't belong to an artist who has chosen to have their address hidden, and if so, anonymizes it to "". Thanks to Rascha for that one!

Also added a "Clear New Pictures" function to the Favorite Artists list, which should be a big help for people keeping their faves organized.
Fixed a problem with the expiration time on the Trading Tree that was causing the "New icons for you" not to show up.

Also did a big purge of artists who had never uploaded anything after signing up; that's 1,984 names that new artists can use again.
Added e-mail notifications for when someone enters a picture into an artist's contest.
Added a time limit for expiration of icon offers; offers older than three weeks are no longer displayed at the Trading Tree, and there's a red note on old offers in the Edit Offers page. This should address the problem of the ever-increasing backlog of old icons on the Tree. Thanks to Chaos!
Cleaned up the Featured Artists archive a little bit by combining the index script and the monthly page script into a single file and moving it to the server root, where the subdirectory scripts symlink to it. Because all the scripts are in the server root now, it'll be easier for me to ensure that future changes to the database schema (like the one I made in fixing the IM client business) won't affect existing scripts and queries.
In these modern times, turns out that people use other IM clients than just ICQ and AIM; so I finally made the change in the profile pages to support a drop-down menu for multiple IM clients and a flexible text field for the ID. It now supports ICQ, AIM, Yahoo, and MSN, and it'll be expandable if more IM clients come out in the future (assuming an enum field can be altered without losing data).

Also cleaned up formatText() a little by moving the processing of literals up above the escaping of non-allowed tags. This gets around the obvious problem caused by my making <! a literal.
Converted the page-numbering widget to a CSS-based "box" style, as seen on all the cool kids' sites. Also took the opportunity to fix a couple of other bugs I discovered in the process: the "now displaying" number on the artist search was using the wrong query to get its number; also my earlier fix (June 20) for the folder-targeting bug was interfering with multi-page navigation in search results (I was undef'ing $ARGV[2] if $ARGV[5] was present, but I forgot that $ARGV[5] is used for the page number in search results as well as the folder number in artist views); so I fixed it by undef'ing $ARGV[2] just before the printPictureEntryMinimal() calls.

Also fixed a problem with the deadlines on the contests—it was acting like they expired at midnight preceding the current day, not at 11:59:59 tonight as the global contests do.
Added <! to the list of literals in formatText(), because of an upload that was using it (this shouldn't ever be necessary as a non-literal).
Added selectable sorting methods (artist name, starting date, deadline) to the Contests pop-up page. Thanks to Chelsea!
Put a listing of the artist's current contests (if any) on the gallery page, under the toolbar icons. Thanks again to Pegasuss!
Added a "permalink" to each of the contests in the Contests pop-up page. Thanks to Pegasuss!

Also I added some explicit "Membership Rules" to the Create New Artist Account page. It isn't anything new, but it formalizes things so that if someone breaks these rules, at least I can point to something that they've said they agree with.
Yikes! Fixed a stupid bug in folderTotal() and folderTotalNew() where the recursive functions weren't passing the "aggregate" property to their sub-iterations, with the effect that folder totals were only showing the totals from one level deep, sometimes much less than the correct number for the whole folder subtree. This must have been like this ever since I moved those functions into Sorry, everybody!
Fixed a bug where folder links in search results weren't going to the right folder page, because the search query string was overriding the folder ID argument.

Also added a "favorite artists only" view mode for the Contests page, thanks to Shoka.
By popular request, now there's an Art Contests feature that allows artists to set up their own contests in a formal way, rather than just filling up the Bulletins with contest announcements and reminders. Now there's a popup window with all active contests, as well as a box on the main page that shows newly posted contests and contests that are about to expire. No voting mechanism (it's up to the artists holding the contests to decide the winners), but it's using the same picture-entering code as on the global contest.
The Trading Tree's handling of animated GIFs was wonky—it wasn't substituting in the first still frame for the icon like it's supposed to, so the icons ended up looking like they hadn't been resized. Fixed and cleaned up all the existing postings.

Also put in a check to prevent people from being able to apply multiple times for the same adoptable.

Also finally made it possible for commenters (on both pictures and general comment pages) to specify whether they should be e-mailed when the artist replies. Thanks to Jo-Z for the suggestion!
Fixed a bug in the new artist creation code. Until now, if you created a new artist account using a computer with an existing user profile stored in the cookies, the new artist account would become assigned to that user profile even if there was already an account assigned to it (e.g. the one owned by the person who primarily uses that computer). Now it checks for a pre-existing user/artist link before assigning the user profile, so now you can create an account for your friend using your own computer and it won't mess up the database. (Also cleaned up a few remaining scripts that were setting $validuser to 1 instead of the user ID, which if I can rely on it will make coding a lot simpler.)
Fixed what I hope is the main reason why people aren't receiving mail messages properly on picture comments and elsewhere: a missing close() statement on the mail output filehandle. Dopey in the extreme; in fact, I'm left wondering how it ever worked before.
Added a "Select/deselect all pictures" function to the Edit Pictures page. I can't believe I hadn't added this feature before; it's sure to be useful. Thanks to NekoSplash for the idea!
Non-public pictures weren't displaying the image number; fixed.
Well, that was kind of a wash. Turns out Hostik's service offerings are, indeed, Too Good to Be True. ("3000 GB/month" really means "As much bandwidth as you need, as long as it doesn't go over about 1.5 Mbps continuous, or else you have to pay for dedicated bandwidth, even though at that rate you wouldn't use more than 500 MB/month anyway".) We're back at Managed/WebHostPlus now. The good news is that none of the data was lost; this migration process is getting to be second nature.
Moved the data and traffic over to the new server at Hostik. It only took a couple of hours for the DNS to transfer for most users; one of the more transparent transitions in recent memory.
The upload page was triggering the yellow "warning" marking on file sizes at 300 KB, whereas the Edit Pending page was triggering it at 200 KB. Fixed it so both use 200 KB. Thanks to Kyra.
Noticed that the dates on "classic" pictures were being printed straight, rather than with the "Before Feb 18 1999" string I'd previously been using. Fixed that.
We're back, after a ten-day downtime thanks to hosting company follies. See here for details.
Fixed an ambiguity in the query tallying the number of Trading Tree icons available for the logged-in user, thanks to Anto J Lareneg.
Added a note to the Post Bulletin page asking artists not to post bulletins just asking for visitors or comments.
Wrote a little tool that lets me browse quarantined pictures easily. Also fixed the comment pages so artists who are disabled don't have their comments shown, even under "user" mode.

Also updated the Help page to reflect the new layout. Oops!
Fixed a bug in the Post a Bulletin page—quote marks weren't being escaped in the title, so the input box was eating them.
Made some significant changes to how the zip-on-demand script works, which enabled me to extend its functionality to the Favorite Pictures page. Now people can select individual pictures or download all the Favorite Pictures at once; zips downloaded in this way put each artist's pictures in a subdirectory to avoid filename collisions (not a problem when you're using a single artist's directory). Thanks to Rascha for the suggestion!

Also noticed that the "Create Profile" link was a relative URL, so people clicking it from within a sub-page were getting a 404; fixed that.
Fixed the "Adoptables for you" number on the main page, which was counting icons as well as adoptables in the query, making the number wrong.
Fixed the query for the "Most Recently Active Artists" list; if I don't explicitly ask for the last-upload date, it sends back unpredictable results.
Found that the New User Profile page was still limiting usernames to 12 characters, for no reason (the database has a limit of 30 on that field). Fixed that. Thanks to Albino Lioness!
Fixed a couple of embarrassing little bugs in the Trading Tree, such as the vertical height on adopted character thumbnails being set to zero on Windows IE, and the count of assigned adoptables for a user not being read properly. Thanks to Toraz and Saz!
Disabled the Trading Tree button for artists who don't have any pictures yet; this should quell people who sign up to abuse the tree and not post any pictures of their own.
Fixed a Firefox/IE issue with the Trading Tree where clicking on posted pictures would put a URL into the main window instead of reloading it.
Added a position: relative to the links in the User Profile box, because they were in a floated div and IE was sticking them under the profile box so they were invisible.
Added the Reference URL links to the Edit Offers page as well as on the Trading Tree itself. Oops! (Sugg: Taz)
Added the artist configuration option of the "private" property, allowing artists to make their work visible only to registered users. I'm still figuring out how best to handle the pictures and artist entries in listings throughout the site; hiding them entirely would probably be best, but it's hard on the database (it requires extra joins). For now, picture entries come up with a "Non-Public Picture" icon and a generic message about the artist's gallery not being public. I might change this if demand indicates I should.
Icons from the Trading Tree now show up in the recipient's Art Trades/Requests page, in an expandable window.

Also laid the groundwork for per-artist toggling of the new "private" property, which makes their gallery pages and pictures visible or invisible depending on whether the user is logged in. All the display functions now support the property; now I just need to add the controls allowing artists to set themselves private.

Also added the functionality whereby an adoptable that's been granted can be copied into the recipient's Characters page and removed from the listing.
Made a change to the regexp in activateHyperlinks() that turns the link text into the final part of the linked URL (generally the filename). That should help with text wrapping issues.

Also added "unviewed" coloring to unclaimed adoptables, and added a "New icons for you" section at the top of the page so people can find them more easily.
Opened the Trading Tree section, which is designed to be a place where people can request and exchange icons and adoptables without cluttering up the main stream of uploads. No idea at all whether this will address people's needs, or whether I even fully grasp the concepts underlying it; but icons and adoptables are a big part of what the artists here do with the site, even though they don't have much to do with Lion King fan-art, and so—like in the old User Interface story about the university where they simply paved the muddy paths where the students had walked across the grass—I'm hoping this will help to formalize a popular use case while preserving the integrity of the site's main purpose.

Then again, maybe this will backfire horribly. We'll see...
Put the weekday (three-letter) into the dates in formatDate(). Also fixed the Show Characters page—I'd forgotten to put in the multi-page link widgets. Brilliant, Brian.
Replaced the starry sky header image with one that wraps better (finally), thanks to some volunteer help from Ch'marr of VCL. Also switched the Copyright page to the new format.
Updated the Artist Profile pop-up to the new style. This one doesn't have much in common with the rest of the site stylistically, so I'm more or less free to experiment with funky table styles.

Also reworked the listing on the main page to "Last 5 Artists' Uploads". This means that only unique artists are shown; in other words, if an artist has uploaded five pictures, only the most recent one is shown in the list. This will make it so more artists get to stay on the list longer, and it'll combat the problem of large blocks of icons and adoptables covering up all the artists who only uploaded one or two pictures. Thanks to Kuroneko Tenshi for the suggestion!
The hidden DIV in the artist comment block was obscuring links because of layering issues, even though it's invisible; in IE, you have to open and then close the box again before links in the page body below the hidden layer would work. I added a display: none statement to it, along with corresponding toggles in the open/close links; it seems to be working okay now. Dang, I'm starting to hate that artist comment block.
In response to comments from Kithwynn, changed the style of the "unviewed" pictures by favorite artists to a very light blue with a slightly "raised" border. This should help set it apart without making it too garish.

Also I resorted to the "nuclear option" for solving the problems with Artist Comment blocks: I put the whole thing inside a table. This seems to solve a lot of problems and doesn't have any obvious downsides, except that it means sloppy HTML is once again tolerated. Sigh...

Also moved the Newest Artists to the top of the View Artists page. If people are coming through the front page, they'll already have seen the most recent artists via their pictures.
Fixed the "artist profiles and comments" search function, which wasn't searching on the proper fields. Oops!
Moved the "Approve Art Trade/Request" page to the new style, which is the first full-screen page other than the main layout to be revised (all the rest so far have been redone as popups). This will probably serve as the template for the artist account management pages. I'm using an absolute-positioned div for the footer, but only on pages that have very little content; that should both make the pages render more cleanly (the footer will stick to the bottom of the page rather than sit in the middle somewhere), and I won't have to put big blocks of line-breaks in the HTML.

Also removed the underlines on the Community Services links. Furthermore, finally I wrote a web-based "edit artist" interface that will let me manage artist/user interactions and fix passwords and so on without doing manual database tinkering.
Fixed a bug that was preventing the owner of the current contest from removing entries.
Fixed another layering issue, this one causing the topmost folder in the scrolling folder tree (which hadn't had a z-index set) to be not be a link, because the hidden artist comment layer was obscuring it (even though it was invisible).

Also moved the code for generating the Favorite Artists list to the top of the script, so that the number of new pictures reflects the number before displaying any new pictures that happen to be on the page. This way, the number of new pictures shown in the list agrees with the number that's indicated by the "new" color in the picture list.

Also finally added the ability to add administrative comments in-line during the approval process, so I don't have to go in and run a command-line script when I want to flag an artist as having had a history of art theft, etc.

Also changed the Edit List page (in the Favorite Artists list) to the new format, and put it in a pop-up window.
Changed the pop-up feature pages on the artist galleries (Most Popular Pictures, Characters, and Art Trades/Requests) to the new CSS-based format. Also fixed the "# new" label on folders; I'd been using 9-point Arial for the labels because it's very compact, but I also found that its Bold variant is pretty much indistinguishable from its normal variant at less than 11 points on Windows. Thank you very much for your superb fonts, Microsoft.
Added a new cookie-based option for the folder viewing mode; now you can choose whether to view all of an artist's folders in a tree (in a scrolling window), or in a single-level list (the old way). This should alleviate recurring complaints of the tree view being too unwieldy.

Also fixed the Contest page's picture entries (I'd forgotten to call formatText() on the descriptions), and cleaned up the Favorite Artist links (there's no reason to have it append a big ugly query string anymore, now that the clean directory URLs assume sensible defaults and cookies control the rest).

Also moved the Favorite Pictures page to a smaller pop-up window in the new format, which will be the model for the sub-pages of the Artist Gallery pages (Characters, Most Popular Pictures, etc). At the same time, added an argument to the printPictureEntryMinimal() function (eventually to be renamed) which lets me specify the target for artist/folder links; this eliminates the need for <BASE> statements on pop-up-type windows.

Also did a bunch of maintenance on fonts throughout the site, forcing sans-serif fonts like Verdana (for controls and titles) and Lucida Grande or Helvetica/Arial (for body text). Hopefully this will make it more readable without making me raise the point size too much...
Fixed a missing </FORM> tag that was preventing the favorite pictures links from working. Also raised the font size of the picture descriptions by one point; let's see if this makes it easier to read...
Finally rolled out the individual artist gallery page in the new layout format. The Artist Comment block is now a pop-up box that can be viewed at its accustomed size and then dismissed; it also no longer appears on any page but the artist's Main Folder page. That should make the pages a lot more economical. However, it also means the layout is a lot more susceptible to bad HTML code; I've already found several dozen artists whose unbalanced table tags have caused the entire page not to display, or all the comment content to appear splayed across the right side of the page, and other fun variations on the theme. It's going to be a whole lot more important in the future for people to use good code in their artist comments; but at least it'll be really obvious when some bad code is used, so maybe it'll encourage more development of HTML skills.

The folder list is also now a hierarchical, scrolling box above the picture list; it lets you skip directly to a folder without having to click through the folder tree one page at a time.

Feedback has been very mixed; a lot of the negativity I'm sure comes from seeing so many artists' pages no longer working in the more rigorous format, but there's also some pushback against the scrolling folder list, and I'm not sure what to do about that. Hopefully things will iron themselves out with time, as I get artist comment blocks tweaked and so on. Then I can move on to the private artist account pages.

Also I added code so the title bar of the browser properly reflects the section of the site you're in.
Changed the "Your Comments" editing window to pop up a second comment window when you click on "change/remove"; this way you can get back to the original listing quickly. (Sugg: Razzi)

Also fixed a bug in the picture comments where double-quotes weren't being escaped properly in artist replies.
Fixed a problem with repeating header images on high-resolution screens (now the ground pictures are actual inline images, and there's a repeating grass patch behind them). Now I really ought to take another stab at making the starry-sky header repeat properly...

Also fixed a bug in the uploading script where the dimensions string was getting messed up by files with certain kinds of IPTC headers. Putting in a re-read of the image info after the IPTC strip-out seems to have fixed that. (Thanks to Holly/scarred_cub.)
Fixed a layering issue where the images in the Artist of the Month section weren't showing up in IE.

Also added an overflow: hidden statement to the Bulletin pop-up box so large inline images don't burst out of it; you have to widen the window to see the whole thing. Maybe that'll discourage people from putting huge pictures in their bulletins.

Also reworked the options setting widget for the Most Recent blocks so they now all have checkboxes for Favorite Artists and for WIPs. This makes it so the options that used to be available from the main page are all one click away, instead of making people go into the Artists page.
Changed "Created" to "Joined" on the Artists listings; this makes more sense in the context of people rather than "accounts" which is the perspective I always have.
KristynLioness pointed out that artists whose accounts had been created before I added the "created" field (April 25, 2002) were mistakenly being listed as having been created before Feb 18, 1999 (the date that I first organized artists into directories). I updated the code to reflect the proper cutoff date.
Finished up the new Contest page and switched it over. Also includes a reworked Contest History page, now in a popup window and with internal anchors for expanding/collapsing each contest's runners-up. Also put the link back on the main page; it won't cause any extra appreciable load, and it'll help drive people to the contest page (something people have been missing).

Also added a "Top Ten Artists" grouping on the Artists page; it's simply the ten artists who appear the most in people's Favorite Artists lists.
Changed over the Special page (9/11, TLK 10th Anniversary, etc.) to be an encapsulated subsection of the integrated Special Features page. Next I have to do the same for the Contest page; I'll probably add it as a link on the main page as well, to give it higher billing.
Fixed the "View More" link/form at the bottom of the Most Recent Uploads listings. IE wasn't properly sending the selected number per page, because I'd neglected to change the select options to have an explicit "value" argument; most browsers default to the "text" property if "value" is missing, but IE doesn't. Now it works.

Also added a "View More" link to the "10 Newest Artists" block, which leads to a page with the 100 newest artists. (Sugg: Saffron Spirit).
Fixed the bounds checking on the Most Recent Uploads pages, where the per-page number could potentially be set higher than 100, or if it was omitted, made for an invalid SQL query.

Fixed the Search function on the Characters page to use the new search redirector properly.

Added a toggle on the Artist Bulletins so people can hide them if they want; it reduces the size of the Admin Message appropriately. (It requires an additional cookie; I figured it was better to make this a setting you could take advantage of even if you're not a registered user, like the thumbnails setting.)

Changed the Last 5 Uploads list on the main page to not clear new pictures from favorite artists; people aren't necessarily looking at the pictures on the main page, so it shouldn't be marking the pictures "viewed". (Sugg. Takuma)
Response to the new design is flooding in. Most of it is generally positive, but there are a few consistent complaints—one of which is that the Artist of the Month no longer has its accustomed prominence when it's hidden behind a popup link. The original idea was to try to save space and make the main page as lightweight as possible; but I don't think a single person has approved of this change, so back it goes. I'm also considering other changes to the main page; its content is still open for debate, but the main aim of it is still to be as concise and simple as possible, and to hit the database as little as possible. Maybe the Contest needs to be on the main page—though that's really what I'd hoped the Special Features page would be for. Ah well...

I've now reversed the content of the Artwork page so the Favorite Artists block comes first, and added a link from the Last 5 on the main page pointing out that there's more groupings on the Artwork page. Also I made an e-mail-driven bulletin approver (maybe it'll work better than approving bulletins in one big block along with uploads), and found that the "published" field in the bulletins table hadn't been indexed—fixing that seems to have sped the main page up immensely.

Also added >< to the list of exception expressions in formatText(), along with >_<, <3, and </3, that mess up HTML formatting if I don't translate them. I just have to hope nobody actually uses two HTML tags back-to-back like this... but at least if they do, it'll fail gracefully.

Also lightened the gray of the User Profile and Community Services boxes a little, to make the text show up better. Also added a "Have this picture manually approved" checkbox option on the uploading box, for artists with auto-approval (in case they want to upload something they feel is a borderline-acceptable case).
Rolled out the new tab-based design tonight. This design attempts to bring some order to the chaos of the original five-year-old layout by organizing Artists, Artwork, and Special Features into tabs accessible off the main page. The Artist Login and User Profile/Favorite Artists listings are now always accessible on the right column of the page, which should make them easier to understand and work with.

The new layout covers everything except for the individual artist gallery pages, the Contest page, and the artist account section with its attendant editing pages. Those will be moved over to the new design as I develop a way of integrating them; now that the main page is done, this transition can take place more or less at leisure, especially because the new layout will have the additional effect of easing the CPU load that typically results from loading the bloated, all-encompassing main page. Big relief to have this done!
Fixed a bug in sanitizeFilename() where I was using the wrong path to the directory for collision checking, with the result that people with auto-approval who were uploading images with duplicate filenames weren't having them get automatically unique-ified. Thanks to Taz for catching this!
Moved the "Use original upload date" selector down into the Options box on the upload form for replacement pictures. It's an "option", isn't it?
I made a change in the artist account/user profile linking code today. I made it so it associates an artist account with a user profile at artist account login time only if the logged-in profile isn't already associated with an artist account. (Beforehand, I was linking the two together whenever an artist logged in while logged in to a user profile, regardless of whether that profile was linked to an artist before.) The old way assumed artists would be changing accounts a lot; but because I try to keep artists from opening multiple accounts, and because artists who know each other tend to share computers (which wreaks havoc on shared cookies), the new scheme should cause fewer surprising situations and result in less cleanup when such things happen.
Started keeping a formal log, which I really should have been doing for the past five years.
Created a "view" CGI which can be called inline with any image request; this would enable view-count tracking and fine-grained "viewed/unviewed" control (suggestion: Brea/ClearGreenWater). However, I haven't yet made it live, and I might never do so, because the current system of marking whole pages as "viewed" through the act of loading them has actually proved to be trouble-free and user-friendly (at least, nobody has complained). Making people have to explicitly view each image for it to be marked "viewed" would probably be way too tedious (and would fill up the newpics table even faster).
Created a new parental permission form (a downloadable/printable PDF) for parents of children under 13 who want to sign up for artist accounts.
Added an "Upload History" button on the Artist Account page, allowing artists to view all their pictures in a linear, chronological list. It also has a pop-up graph that shows their uploading history by day, with little red bars. CSS is slowly making inroads into the site, after figuring prominently in the recently completed redesign of (Suggestion: Shoka)
Added a separate preference for artists to have picture comments e-mailed to them. Previously, only general comments were mailed, and the analogous functions in the picture comment page were disabled. (Suggestion: TpT)
Extended the formatTitle() function to allow for customizable lists of permitted HTML tags, depending on what kind of text block you're formatting.
Added a collapseLongStrings() function which takes sequences of more than eight of the same character in a text string and truncates them down to eight. This should all but solve the problem of picture titles with things like "NOOOOOOOOOOOOOOOOOOOO!!!!" forcing the table wider than the page. (Idea from a great picture by Akril.)
Used formatTitle() for picture comments, which should allow people to use basic HTML formatting.
Raised the length limit on picture titles to 500 characters.
Added a new and hopefully helpful little doodad to the upload box: a character counter that updates live as you type. It says "123/400" and gives you a clear sense of how much room you've got left in the title field. (It uses CSS and the InnerHTML property. I'm starting to think I really ought to sit down and learn how CSS works.) Also, instead of automatically shortening a title that's too long when you click Upload, now it just pops up a warning dialog and asks you to shorten it yourself. Thanks to LoonyLion for bringing the formerly rather unfriendly behavior to my attention!
Added an option on the uploading box for replacement pictures so that the artist can choose to have the picture retain the original picture's upload date, rather than being treated as though it's a brand-new upload. This will help with pictures that are in specific orders. (Suggestion: tabby)
Added DIV and SPAN to the list of allowed comments in formatTitle().
For the entirety of the history of (and its prior life as a subsection of, all artists' uploads have had to be moderated and approved by me before they're made visible. The rapidly increasing popularity of the site in the past five years has made it all but impossible to keep up with this—it takes me at least an hour to do all the approvals for a day's uploads, and more if there are movie files that I have to download, review, and manually add a poster image for. This is also a major point of frustration for artists who have to wait a day or more (or all weekend) for their pictures to appear, even though they always follow the rules. So I'm now going to introduce an "Auto-Approval" feature, an attribute that I'm going to set on certain artists whose uploads I can trust to be on-topic and not problematic, and especially whose uploads constitute a large portion of my approval duties. For these artists, uploaded pictures go straight into the Archive and are immediately made public (using the same filename sanitizer that I use in the approval script), unless they're too big or movie files that need post-processing. I'll be contacting several artists and briefing them on the implications of this feature and what it'll mean for them as an honor code. If it's successful, I'll extend it to other artists, generally those who ask and who demonstrate a good attitude. I hope I don't regret this...
Whoops—found an unindexed data field in the comments table. It was slowing the comments page way down. Now it's far faster. Thanks to Not_Quite_Normal for catching this!
Added a "Your Comments" page in the user profile block; it shows all a user's past comments, whether on pictures or artists, and gives users the ability to change or remove comments all from one central location (rather than trying to chase them all down artist by artist). At the same time I changed the general comments page so it now pops up in a small window like the picture comments, and the format is now the same; now new comments are added to the bottom, like on every blog in the world.
Added support for PNG images. Hopefully this will give artists a better option than the quality-ruining JPEG and the color-challenged GIF. File sizes will unavoidably be bigger, though...
A few bits of minor housecleaning:
  • When you replace a picture, the filename changes to the new picture's filename, rather than staying with the old one. This should help in cases where the browser caches the old file under the old filename, making it look like the picture wasn't replaced after all.
  • When you change your artist name, your user profile name is changed to match, automatically.
  • Similarly, when you change your artist account password, your user profile password is changed to match as well.
Added an "Indian Ocean Tsunami Tributes" special feature section.
Because of the popularity of "contests" on the Archive, and thanks to some artists' suggestions, there's now a new part of the site where we hold sequential contests for artists to create and submit pictures according to a given theme, decided by the previous contest's winner. Contests last between one and three weeks (user-selectable). A new "pickpicture.cgi" palette lets artists who are logged in to their user profiles browse their pictures and select one to enter without having to type any filenames or anything.
Added the ability for artists to post Artist Bulletins, using a new button/section in the Artist Account page. They're moderated (I have to review and publish them). My administrative messages will now use this same system, too, rather than relying on an include file that I have to keep changing. This also means I have a historical record of changes I announce... and changes prior to this date are going to be a lot harder to pin down retroactively.
By popular request, I've added the ability for artists to manage the comments that users and other artists have left on their gallery pages and their individual pictures. You can now reply to comments that have been left (the replies appear in-line under the original comment), or you can delete troublesome comments or block troublesome users. You will have to be logged in to your User Profile for this to work, as that's how the system identifies you.
I changed the picture title field so its text is no longer a link (suggestion: Sarafina Lioness). Why on earth was it ever one in the first place? —Well, okay, for the non-thumbnail pages it was necessary, but now I've added a "Click for Picture" link to the title cell if the page is in no-thumbnail mode. The printPictureEntry() function, which handles all picture table row output, is getting so convoluted it may as well not even be a function at all...
Reworked the 9/11 page into a more generic "Special Features" page which can support any of several different themes, each with its own keyword(s) for artists to submit pictures into it. At the same time, I put it to use by adding a Special Feature page for the TLK Tenth Anniversary (coming up on June 24).
Ever since the introduction of the Favorite Artists list, artists have wanted to know who the people were who had them in their lists (the number is reported on their Artist Account pages). I've always considered it an invasion of privacy to allow artists to see users' names who'd simply added the artists to their Favorites. So now I've added an attribute allowing users to add artists in one of two ways: Visible or Invisible. If they're visible, they show up by name in the new "fans" link on the Artist Account page, and their comment they'd left for the artist (if present) is also shown. For the remaining invisible users, the "fans" window just shows their total number. There's also an "eye" icon on the Favorite Artists list indicating which artists you're visible to.
Added the ability to post comments on individual pictures, instead of just general comments on artists. This now entails a new pop-up comment window instead of the big full-size one for general comments. It's still one comment per person, editable—a weird design, but people seem to like it okay. (Suggestion: Tabby)
Added a "Customize Your Page" section on the Artist Account page. This allows artists to upload custom icons for the toolbar on the top of the page (profile, comments, art trades/request, etc) in place of the default ones, and to edit their Artist Comment block as well. I also reworked the Edit Profile section so profile pictures are given a guaranteed unique filename and kept in a central directory (the filename/number of each profile picture and icon is stored in the database).
Moved to a separate server hosted at, a co-location facility where I'm no longer the owner of the hardware, but where I still have full control of the system. Billing is based on cumulative data transmitted rather than instantaneous throughput caps, so the response time for the Fan-Art Archive should be better now than it was when it shared a pipe with and all its movie files.
Added an attribute allowing artists to set a particular picture as their "example picture" to be used in the artist listings instead of a random selection from their galleries. (Suggestion: Aquanite)
I've removed the link to the Lion King Fan-Art Message Board (an external site). This is in response to someone named Liza McFarly claiming to be an attorney representing Disney and objecting to the indecent material being posted there (mostly adult-oriented role-playing, etc). Subsequent research (using IP matching and inquiries at the person's supposed address in Chicago) showed that this claim was fraudulent and amounted to a disgruntled forum member trying to get it shut down. Nonetheless, I'm reluctant to re-establish the link, because it's certainly true that the content at the forum could stand to be cleaned up a little. Next time it might not be a fake lawyer.
Reworked the "full ZIP" option button on the Image Archive pages throughout fanart and www; now, instead of linking straight to a prepared ZIP file, it creates a copy of the standard one and gives it a temp filename as with the user-selectable ZIP method. The reason for this was to allow full ZIPs of fan-art gallery pages to have the descript.ion files included; rather than trying to keep that file updated for every artist every time I insert a new picture or the artist changes a title or anything, I've set it up now so it creates the descript.ion file when the user clicks the button and packs it into the existing ZIP. So it still saves time over having to ZIP up all the pictures in the gallery; but it also ensures that the descript.ion file is always up-to-date, because it's auto-generated at download time.
Following suggestions from Christopher Shumway, the Fan-Art Archive now has a path navigator for artists' folders-- and there's also a user preference for maximum pop-up window size. You can open up a pop-up window and resize it to whatever size you want, then set that size as the largest a pop-up window will open. I've also got several new admin scripts—I can purge stale artists (artists with no pictures, if their last login was more than a certain time interval ago), and I can review artists with duplicate e-mail addresses and consolidate them.
Following a brilliant suggestion from a user in Russia (who mocked up the idea in an HTML file and everything), I put a thumbnail of the most recently uploaded picture in each folder at the far right side of the folder table row, along with the date. That'll help people see when there are new pictures to find.
Modified the image-zipping/download script so that now it compiles a descript.ion file containing all the picture descriptions for the files that are being downloaded. This file can be read by ACDSee and other popular image viewing programs.
Yesterday, many artists at uploaded special pieces of tribute art thanking me for keeping the site running and improving. They called it "Brian Tiemann Day". Wow... that's quite an honor, and I was very touched by it. I hope everybody knows now why I love this fandom. By the way, I also reworked the "New Pictures" functionality so that it keeps track of individual pictures rather than just when the user last looked at an artist, so now per-folder counts work properly. I'll also be able to fix various pages so a picture is counted as "viewed" regardless of what page it appears on.
Found a way to put the folders to good use, so it's a good thing I got them done in time: a New York Disaster commemorative page. Artists can put pictures into specially named folders that they create, and those pictures are collected and displayed on a page linked from the main site. Many artists have already submitted their work towards this cause, and now it can be displayed properly and in a timely way.
Ignoring (as best I could) the terrorist attacks on New York and Washington D.C. today, I added an extra feature to the Edit Pictures section: multiple selection for bulk deletions and folder moves. This will hopefully make life much easier for those who have lots and lots of pictures to toss around.
Finally got around to adding a new and long-awaited feature: folders. Now artists can set up a completely hierarchical folder system to organize their pictures. This was probably the largest single feature adddition since the launch of almost a year ago; it involves changes to the majority of the display and editing scripts, and they all have to interact properly. No real bugs reported so far, though... just a need for a "bulk operation" function, which I'll work on next.
After fixing the last couple of bugs (the randomizer wasn't working properly—turns out I have to generate a random integer to feed to MySQL's rand(), or else that one won't give me a random result :P) any rate, there's now a "See a Random Picture" link on the main page. Just like a "real" art archive!
There's a new Top Ten Pictures list at, showing the site's users' most frequently "favorite" pictures. I fixed a stupid SQL bug in it today, so now it's even accurate. Yay!
These past few months have been fairly busy, so I haven't been able to keep this list updated. Fortunately, there haven't been many changes. Today I made the "Favorite Pictures" column headings into links that pop up the "Favorite Pictures" album for the user. I'm also finishing up the book I've been working on for the past several months, so I'll be able to start working on a few other features I've had in mind. Also, we're now located at Paul's network in New York, instead of in Canada as previously.
Added notes in each artist's "Edit Pictures" section to say who has which pictures in their "Favorite Pictures" albums. There's also a link to Cally's new discussion forum.
Added a "Favorite Pictures" album for each user. I have some interesting features planned for the near future which will use it—stay tuned! I also did a bunch of minor compatibility bug fixes to the layout, so opening new windows would happen more smoothly.
Search engine! Yaay! Another feature check-box marked off. It uses a MySQL fulltext search on picture titles, which means you can't search on words of three letters or less, but it seems to be nice and fast. You can search artist names, artist profiles, or pictures.
After much hemming and hawing, I've decided to remove the User Ratings system. It's been a good way to sift artists up and down the food chain, but the dynamics of it just don't work out well. Worse artists tend to get discouraged by low ratings and don't bother improving (or leave). Better artists and their fans tend to engage in vote-stuffing, scrambling for the top spot. And there's seldom any legitimate movement, even when an artist improves greatly. In general the system results in far more bad feeling than is made up for by any benefit in being able to sort the artist lists on Rating. (Maybe this makes sense for sites like, where the movie producers can't get hurt feelings by seeing the ratings people give them, or respond directly to the users.) I'll have to think of another way to give the spotlight to good artists and yet allow people to discover up-and-comers...
Yet another feature: Art Trades/Requests. Now, any artist who has done requested work for another artist on the system can submit it to the recipient artist's page, where it will appear in a separate "Art Trades/Requests" listing gathering together all the art done by other artists for that recipient. It's just a new/cooler way of grouping together related art, and hopefully it will help contribute to the whole "community" thing. Especially if nobody abuses the feature. :)
Added numbers to the pictures, in the ZIP check-box field.
Added a new little tweak: now, when viewing one of your Favorite Artists, any new pictures (inserted since your last viewing of that artist) will appear with the title field background in a subtle cyan color. My non-colorblind friends tell me it works well...
Got the last few MySQL queries done, so now is running wholly on the live database. No more flat files! Booh yah! And so begins a new era of giddy coding. I don't think this will ever end, do you?
I've been slowly integrating MySQL into the features, and I'm almost done; I only have a few more issues to work out with various ordering options in the artist view pages. Today I moved the rating and voting systems into the user-profile database, meaning that I can now dispense with all the feeble attempts at ensuring voting fairness by restricting rating/voting to registered users only. It seems to be working well, and best of all I've been able to eliminate huge ugly swathes of perl code! Yay!
Developments in I've come late to the MySQL game, but I've finally taken the plunge and planned out a new set of features for the Fan-Art Archive. I'm gradually integrating them into the system; today I brought online the "Favorite Artists" list feature. This allows visitors to set up user profiles which allow them to create lists of their favorite artists; the system then keeps track of whether those artists have uploaded any new art since the visitor last looked at their collections. I've got a few more features planned, but for now they're mostly performance enhancements; the major visible feature is now in place, and working well (I think).
A new cookie saves your artist name, and then automatically selects it for you from the artist login menu when you visit the site again. This should eliminate any potential complaints people might have about the login menu getting too big!
Changed the listings in the Fan-Art Archive slightly; now, every artist's section opens up on the most recent page, rather than page 1. (Of course, this only applies to artists with 100 or more pictures in their collections.) Hopefully this will help direct people to the newer pictures rather than the older ones, since I'm not willing to change it so it's listed in reverse chronological order. :)
Phase II of the Fan-Art Archive is now complete. This includes functionality for artists to rename pictures, replace them, or delete them. I've done a fair amount of smoke testing and put in various safeguards and recovery mechanisms, so I'm fairly sure it will work as expected. Here's hoping! Oh, and by the way, user reaction to Phase I has been very positive so far. :)
Added a small "profile" icon to each artist line on the section listings. Now people can pop up the profiles without opening each artist's section. Should help people sort out where their attention should go...
Grand opening of, on a separate domain from (where fan-art had previously been only a subsection of the Image Archive), although they're both hosted on the same machine and share a significant amount of code. Initial features include automated artist account creation, name/profile changes, alphabetical artist name listings (down the left side of the page), per-letter artist listings (each one on a separate page—the "All" listing is very long), Last n Uploads, and the Featured Artist of the Month (which is decided based on user votes). Some parts of the system are rather slow, though, particularly the artist listings; I may need to consider another kind of back-end database than the flat files I'm currently using.
Artist login
Register Forgot?