Blogs

Private messages #announcement fstdt.com blog

I've been letting my modly minions handle approving quotes and moderating comments for the past few days because I've been spending the couple of hours I can allot to FSTDT-time a day working on a change to FSTDT that you can finally actually see and use: a private-messaging system! This whole idea developed out of the need for a convenient way for my modly minions and I to keep in touch, but I figured why not let everybody use it?

Right now it uses a separate SQLite database to store messages, partially to ease the burden on the database server if I use the SQLite database when the PM system goes live, but mostly to simplify testing and a massive performance increase. The finished product will obviously still use the user-accounts table in the main database, but if everything works out, I will keep the SQLite database for messages, because SQLite is extremely fast, can be made secure with a little work, and this is exactly the sort of 'light database' SQLite was intended to handle.

[aside]Edit: Asked permission from the host, was told no even though there is nothing in their terms of service that could interpreted or construed to the effect that using SQLite or something similar was not allowed. Figured this host was more expensive than average because it had better than average service and was liberal in what they let you do with your share of resources on their servers so long as it was legal and within reason. But nah they're just overpriced and evidently have two terms of service: one they let people see, and a 'secret' one whose terms you apparently have to figure out by breaking them and getting your account suspended. Complaining to them ain't worth my time, because if they gave a shit their service wouldn't be shit in the first place. I'm half-tempted to scrap the current PM data code and set it up so it uses a .NET DataTable whose DataSource is a flat XML file. Would use substantially more server resources than SQLite.

And that's all I have to say about that aside from the fact that we will be not be renewing our hosting account here. We will instead be moving FSTDT to a relatively high-end Linux/BSD dedicated server plan elsewhere that lets you roll your own shit, and I will set the server up to run FSTDT with nginx + Mono / ASP.NET core + PostgreSQL like I wanted to begin with. I am much more familiar, experienced, and competent with *nix servers, especially when it comes to web servers and databases. We may even make the move a little before this account expires so it coincides with the Shavy-era FSTDT rewrite. (Amusingly, every admin of the site thus far has rewritten its code to suit them.)[/aside]

Progress on the new PM system
+ Database schema
+ Module (static class or struct in C# speak) for database access that handles all SQL queries and abstracts working with a database away from the main code, but I'll likely be making small changes to the queries that return lists of messages to retrieve one 'page' at a time (one page = 25 messages) so I can paginate message lists.
+ Abstract base classes (MessageList, PagedDataNavigator, Message, and Message's child classes MessageWrite and MessageRead) — for non-programmers this more or less means I did a skeleton or 'outline' to put most of the code and now have to 'fill in the blanks' with that code.
+ Most of the code generating the HTML table for message lists, probably one of if not the hardest part because I decided to write it by hand.

As you can see, I'm about one-quarter to one-third of the way finished. Much of the code is pretty generic, and a lot of it can be reused in other parts of the FSTDT rewrite: PagedDataNavigator was already written for it, and the Message, MessageWrite, MessageRead will likely form the foundation of similar code for quotes and comments.

One more thing: Pepe's probably pretty salty right now. Hasn't been able to get a message through in five days and counting, but I'm not calling 'victory' until it's been a week. Even then, something of his will probably manage to slip through every now and then, but at nothing near the old pace of his textual diarrhea. Hopefully it require enough work to get rid of him for good.

Little Bobby Tables Award

Can you win it??

back up and running! #announcement blog

If you are having trouble posting or seeing comments, send an email to admin@fstdt.org with your username, the browser you are using, and if possible, the IP address and ISP you're using when comments don't work. Also include any browser extensions you are using. If you prefer IM, I can be reached on Skype (search spikedee@openmbx.org) or AIM (screenname 'a nerd of sorts'). I will always fix the troll bouncer so you can comment and/or see comments again. Someone's priorities are way mixed up if keeping trolls out is more important to them than letting people use their site.

Also email or post any other errors and issues you encounter in the Site / Off-Topic Thread'!

I'm so sorry for all the downtime and any other problems!! I feel really bad for not giving you any tangible new features for the wait. I made a large number of fairly significant changes to the database, a few of them particularly major changes, like completely redoing the pubadmin table in anticipation for the FSTDT rewrite and also because of how extravagantly disorganized the pubadmin data was stored. (I discuss the details of that later in this post.)

Many changes also had to be made to the behind-the-scenes FSTDT code to accommodate for the database changes, and in one case something had to be all but completely rewritten. (When that happens, I just go ahead and get a head start on the rewrite's transition from C# back to VB — the current C# version is itself a transition from an earlier VB version — it's like some kind of bizarre cycle. I write the new code in VB, since then it will be usable in the actual big rewrite itself. A number of other changes unrelated to those necessary to accommodate the database changes were made, but none of them are major.

But the biggest change to the FSTDT server-side code, though, is that the new troll-detection and auto-cleanup system Piège-à-Pèpe (PàP) I've been talking about is finally in place and has a real name!! Much of PàP is still turned off on the server side for that reason, but everything on the client side is operational. It still does more than enough to be useful and justify going live with it.
_

Known issues

oopz

I scrapped the original Banned IPs table and replaced it with one that supports wildcards and does away with the surrogate key. This is not an "issue," but I sure as hell accidentally made one while I was working on this. I intended to export the original banned IP list and import it into the new table. Unfortunately, however, my executing a query with a single misplaced colon deleted the entire list of IPs. Since the old table had not been cleaned out in literally 8 years, I doubt this will be a major issue. Like half or even more of those lost IPs were probably Mabus in the first place. Yes, he really was that fucking crazy.

[aside]Gotta love SQL and how it will execute literally anything without asking the user if they're sure they wanna do that, not even if it is something that just screams "What this does is almost certainly a mistake, and YOU WILL REGRET EVER EXECUTING THIS!!!" If you know SQL, can you guess what the offending statement was and where I put the misplaced semicolon? If you can, I'll give you the prestigious Little Bobby Tables Award and put your name on it at the top of the page for all to marvel and envy.[/aside]

Losing the banned IP list means there's a small chance we'll see a slight increase in the number of trolls over the next few days. When and if they show their ugly troll faces, their IPs will be re-collected again and added back to the database. Piège-à-Pèpe will also help deal with some of it, so any issues with this should be fully resolved over the next few days. Still, if you see 'em, report 'em in the Site / Off-Topic Discussion Thread.
_

Proxy Penalization

This is not an issue so much as something worth noting. PàP heavily penalizes known Tor nodes and IPs from a certain major Turkish telecommunications company. If this is a problem for you because you accidentally trigger other penalization from PàP such that it incorrectly considers you a troll, then use another browser and/or a different proxy to access FSTDT. If you're completely stuck, contact me. (See info above.)

Though not done by PàP, a certain other hotbed of seediness that calls itself a web host and proxy server provider has been completely banned. If you're posting from an IP there, you're probably The Frog or someone else up to no good anyway.
_

The Croaking Cloaking Croat

PàP could quite possibly have trouble recognizing the Croat because the information and behavior PàP uses is all over the place for him. I don't know if it's deliberate or the result of him using a fuckton of different devices. He also avoids obvious Tor nodes, (likely because they were already banned here), but I know a Tor exit note emitted his verbal diarrhea at least once — and possibly twice or more if an anonymous commenter was him as I suspect.

[aside]On the other hand, Le Frog Français is much easier to spot. We will most likely be seeing much less of him as soon as his first IP is added to the fresh, new, and now-empty banlist. He unwittingly gives PàP a decent amount of information to work with and seems to think otherwise. That means his comments will be tossed out and their originating IP banned before they ever even reach the server code that adds comments. Try harder, bro.[/aside]
_

"Summary" of database changes (and relevant FSTDT code changes)

Cleanup

I removed a ton of dead weight from the database (empty tables and a surprisingly large number of columns created for abandoned features). Doing this also required removing references to said dead weight from the FSTDT code itself; despite never actually using it, quite a bit of code (especially related to user accounts) queried the database for it. Trying to do that now that it's no longer there in the database would throw a Kerblewy error.
_

New Banned-IPs table

As I mentioned earlier, the old Banned-IPs table has been replaced with a new one that supports wildcards and does away with the needless surrogate key, instead using the IP addresses themselves as the primary key.
_

New banned-strings list

The banned-strings list was also scrapped and replaced with something supporting wildcards. Since you're most likely not aware of the banned-strings table, what it does is that if you try to post a comment with a string in the table, the comment is simply ignored and not posted, and the quote page the comment was posted from acts like nothing happened. (It does not ban or monitor people who try to post comments with the banned strings; it just discards comments that contain them.) Nearly all of the banned strings are for automatically discarding obvious spam that resembles nothing a real user would ever actually post. Believe it or not, this pathetically simplistic technique actually catches almost all of the spam that somehow makes it past the "Check here" button.

Note that the names of both Le Frog Français and the Literal Motherfucker are in the banned strings list now, since saying them is like speaking Lord Voldemort's name. A few of other tics and words related to them are also banned. These are mostly Frogface's.
_

Stored procedures

In addition to the stored procedures I wrote working on the pubadmin table, I also wrote stored procedures to handle all of the other specific database-related tasks that the FSTDT code has to do, such as getting the comments for a quote and paginating them, logging in, submitting a quote, etc. (Aside from the occasionally mentioned exception, none of it is actually used in the FSTDT code right now, and the current codebase won't be updated to do so. This move was in preparation for the new upcoming rewrite I keep talking about. It will interact with the database exclusively using stored procedure insofar as possible. Unless you have good reason not to, I am ridiculously passionate about storing procedures in databases rather than using inline queries that reference the structure of the database, but getting into that will launch me way beyond the point.
_

Pubadmin database overhaul

I redesigned the entire pubadmin database table. Note that I didn't say I restructured the table, as that would imply I just shuffled things around a bit, maybe tided up a few loose ends, or made a lot of changes but very minor ones, etc. — no, I redesigned the pubadmin table. Doing this is where the protracted downtime came from and why the site had to be brought down.

I completely rethought not only how to store pubadmin data but also how to approach the task of handling the pubadmin system itself, both in database design and the site's code.

This post and "summary" is already long enough, so I won't go into detail, but I will say that this was probably the most needed and overdue change I made: the old pubadmin table was there and indeed stored pubadmin data, but pubadmin data was also strewn across three other unrelated tables besides the correct one. That data had to be moved in the process of redoing the pubadmin table and the columns that contained it deleted.

For those who don't know about how awful making structural changes to a large database is, this task necessitated creating a temporary table, copying the to-be-changed table's data into the temporary table, dropping (deleting) the to-be-changed table, creating a new table like it with the desired changes, copying the data from the temporary table to the new table, and finally dropping the temporary table. This obviously isn't technically changing the table but making a whole new one.

When your database is stored on a shared database server with 100 or so other databases, and the table you want to 'change' has over 100,000 rows and 15-20 columns, and its indexes have not be defragmented in a while, you're gonna be waiting a couple hours, and that's with the whole process being the only transactions taking place on the database and with you the only user accessing it. Having other users accessing the database would cause the transactions to be even slower to the point of timing out because they took too long.

And that is why we had to go down for maintenance and why we were down for so long.

[aside]If you can't change a table's structure, then it would seem a new table should be able to be created in "just" four steps (rename the original table, create the new table, transfer the data to the new table, and drop the renamed original table). You can do this when it doesn't violate any foreign-key constraints that create relations between data and connect their tables. Ignoring these constraints can compromise the referential integrity of your database and cause its relations to fall into such a state of disarray that they may as well not exist.[/aside]
_

Rewriting the pubadmin code-behind file

Since I completely redid the pubadmin table, I had to gut almost all of the FSTDT pubadmin code-behind file because it was coded to read and write data using the old table. I bet every query in the gutted code would have failed when attempted on the new pubadmin table. (Not having that happen is one of the major advantages of using stored procedures that tell the database what you want rather than telling it how to do it.)

The overwhelming majority of the gutted code was just that: literally gutted, i.e. removed from the codebase altogether. The remainder was kept in the code, but it was still gutted in the sense that it was commented out so it wouldn't be used. The parts I commented out and kept were ones that can be easily translated to VB and used in the FSTDT rewrite. By saving that code, I'll have a concrete launchpad from which to begin the process of writing the rewrite's pubadmin code.

[aside]Already having something tangible like that to work with from the get-go makes starting a project from scratch a lot easier for me, even though this is mostly just a psychological thing, and I often wind up not even using or replacing those parts. Am I weird for this?[/aside]

So quotes could be approved, the code-behind file for the PublicAdmin.aspx file had to be almost completely rewritten aside from the repeater controls that show similar quotes to check for dupes. They still worked because they were using stored procedures when I had my first glance at the database back in September of last year. The rest of the rewritten code also uses stored procedures and saved views, unlike the original code, which used a combination of inline SQL and a separate data access class that also used inline SQL itself.

PublicAdmin.aspx also had to be updated to remove controls that interacted with the not-reimplemented functionality, like issues and public admin being able to actually be used by the public again. (These issues will be fixed in the FSTDT rewrite at the latest.) Mods will probably immediately notice these changes on the page.

Mods, everything in the above paragraphs probably needs to be combed through for bugs because it was literally written in half a day. Report any issues you find, SVP.
_

Anyway, bear with me while I get any kinks worked out, and please let me know if you notice any. Post them in the Site / Off-Topic Thread, or if you think they can be exploited or pose a potential security issue, send a message to the email above instead or shoot me an IM.

Again, sorry for all the down time! I'll try not to do anything like this again.

Site/Off-Topic Discussion Thread 3

Electric Boogaloo

holla @ shy #announcement blog

I feel like I've been a bad admin lately, still getting, being too busy with work-related stuff, but as far as that goes, things should be calming down since the beginning of the semester rush is over. I'm sorry for that.

Still, I want your honest opinions: How am I doing as admin? What am I doing right? More importantly, what am I doing wrong? Do you have any suggestions for how I can improve it? Do you have any other suggestions?

Also, I have a couple of new nominations for mods in mind. I won't say whom yet, but I want this to be a democratic process, i.e. for most of you guys to approve of my decisions before I make them. I also haven't contacted the nominees yet, but I will be doing that one day next week, and if they accept, I'll put up another post seeing if you're all cool with it.

Thanks guys for hanging in with me while I get the hang of running this crazy train! Being the conductor was the last thing on my mind when I made my first comment way back in 2008. It still kind of feels unreal in a way.

2016 FSTDT Awards

Fundies of the Year – Final round!!

The Nominees #announcement blog

2/1/2017: Voting's over! I'll verify the count sometime during the next couple of days, and the winners of the prestigious FSTDT Awards will be announced!

Voting this round is open till the end of the month. The usual rules apply, except this time we're voting fundie-against-fundie. That means the list of categories is [em]much[/em] shorter this time around ([b]choose from the list of nominees here[/b]):

• Religious Fundie of the Year
• Right-wing Fundie of the Year
• Left-wing Fundie of the Year
• Conspiracy Theorist of the Year
• Sexist of the Year
• Racist of the Year
• Single-issue Wonk of the Year
• Vulture of the Year
• Batshit-insane Person of the Year

When you cast your vote, use quote numbers instead of fundie names: that will make things much easier for me!

Happy voting!

>_< #announcement fstdt.com blog

...aack, I'm busy with beginning-of-semester stuff! Yell at me in this thread for stuff I get behind on. I'll have the final round of the 2016 FSTDT Awards voting ready by the end of today though, and I'm extending voting until the end of the month. But if there's other stuff that I need yelling at for, put it here plz.

2016 FSTDT Awards

Fundies of the Year, Round Two

The Fundies #announcement blog

[font=sans-serif]1/2/2007: Voting time for round 2 is over. The final round will be ready later today or tomorrow!
_

This is the page to cast your votes in round two of the 2016 FSTDT Awards for Fundies of the Year. If you want to cast votes for the 2016 FSTDT Awards Quotes of the Year or the other categories, you can do that here.

What's new this round?

This time around there are more candidates but fewer quotes up for vote. It may seem like a whole lot, but since there are fewer options, it won't take as long to read through them or decide. But, still, since there are so many things up for vote this round, and most of it was already up for vote last round, you may say "same as last time" or something along those lines if your vote for a fundie is still the same this time — but if you do this, make sure that what you voted for last time made the cut to this round; if it didn't, you obviously can't vote for it again, so if I catch this, I'll let you know and give you a chance to change your vote accordingly.

Just as last time, you can also abstain from voting for as many or as few categories as you want for any reason. Voting in general works exactly the same as in the last round. (See the next section and my sample ballot for this round.)

Due to the sheer number of third-place ties, I decided to narrow the number of quotes per fundie down to two instead of three (except for my man Joe Eigo). All of the "greyed out" categories from round one are now open for voting. Candidates with only one quote are placed together in "grab-bag" categories this round. Treat the grab bags like the other sections, and vote for one candidate in each. Everyone in the grab bags that gets at least one vote "win"s this round and moves on to the final.

I also changed the phrasing "three rounds of elimination" to say "two rounds of elimination" like it should have been — this is a correction, not actually a change in the voting process. We'll be pitting fundie-against-fundie in the next and final round.

Finally, I will not be manually counting quotes this round since the Visual Basic + Transact-SQL script I wrote for this purpose seems to be working correctly. I will still manually skim over and verify everything at the end of the round, though.

The Rules — read them (again) before voting

A lot of people seem to be confused about how voting is working this time, so I decided to rewrite the rules to be a bit clearer and their purpose more transparent. I've deleted the improperly casted votes to give the voters an opportunity to try again now that I've (hopefully) made things clearer.

When we did nominations, I divided quotes into two broad categories: Fundies and Everything Else. This was because the fundie nominations were going to be handled differently. When we nominated fundies for the different award categories this time, we also nominated some of their quotes to go with them. The idea here is to determine the Fundie of the Year using two rounds of elimination based on the quotes we collected.

In the first round of elimination (the previous round), voting was done to narrow the number of quotes for each fundie down to three two. In the second round of elimination (this round), we repeat the same process with the remaining quotes that each nominee has, and the previously closed categories are open for voting. This time the goal is to narrow the number of quotes down to one per each fundie in each award category, and to filter out the grab-bag fundies that get no votes. Finally, in the third and last round, we actually pit the fundies against each other. The winning fundie in each award category is decided by voting on which one has the best winning quote from the previous process of elimination.

This process may seem needlessly complicated (and I realize that now), but it is not without a purpose. In previous years, the FSTDT awards were very predictable to me, and there wasn't very many voting opportunities to influence the outcome. Victors frequently won in landslides and curbstomped their competition. That's not very fun. You'll hopefully see that this time around the quotes chosen for the final fundie-against-fundie vote will be more competitive, and the final round of voting will be much closer, more unpredictable, and actually at least a little entertaining to follow and keep track of.[/font]

[font=sans-serif]Now for the actual voting![/font]

[font=sans-serif]On the list of nominations here, find the corresponding section to each bullet on the ballot below, and use that list to cast your vote for each bullet. I know it seems like a lot since there are more candidates with quotes up for vote, but there are fewer quotes overall, and it should take you less time to cast your ballot. As before, follow the example I set forth in my ballot below (I'm actually abstaining from voting since I'm hosting and moderating the awards, but those are the picks I would've made if I were actually participating).[/font]

[font=sans-serif]The Ballot[/font]

[font=sans-serif]• Religious fundie quote grab bag
• Religious fundie quote, kingjameswriter1965
• Religious fundie quote, Mack Major (new!)
• Religious fundie quote, Catholic Nationalist
• Wingnut quote grab bag
• Right-wing fundie quote, Jim
• Right-wing fundie quote, Roosh Valizadeh
• Right-wing fundie quote, Students Against a Democratic Society
• Right-wing fundie quote, The Last Trump
• Right-wing fundie quote, Vox Day
• Moonbat quote grab bag
• Left-wing fundie Quote, Antisemitic British Moonbats
• Left-wing fundie quote, Bailey
• Conspiracy theorist quote, Godlike Productions
• Conspiracy theorist quote, Alex Jones
• Sexist quote, Matt Forney
• Sexist quote, SaintElliot
• Sexist quote, David J Stewart
• Sexist quote, Vox Day
• Sexist quote, Navigator
• Racist quote, James Laffrey
• Racist quote, Wotans Krieger
• Racist quote, Janet Bloomfield
• Racist quote, Vox Day
• Single-issue wonk quote, David J Stewart
• Single-issue wonk quote, Mack Major
• Single-issue wonk quote, Navaros
• Single-issue wonk quote, Ann Barnhardt
• Single-issue wonk quote, WorldGoneCrazy
• Single-issue wonk quote, Vox Day
• Vulture of the year
• Batshit "grab bag": include Johan Nygren? (Y/N)
• Batshit-insane person Quote, usachinanukewar
• Batshit-insane person Quote, ComeOnPeople
• Batshit-insane person Quote, Vox Day
• Batshit-insane person Quote, Joe Eigo
• Batshit-insane person Quote, SaintElliot[/font]

[font=sans-serif]Happy voting![/font]

How Not to Read Code #announcement fstdt.com blog

As most everyone knows, the site has a lot of bugs. 99% of which are caused by my own poor planning, and tendency to hack together modifications to the site with code that "looks like it works". – Yahweh, October 2007

That's how I'm feeling right now, but I'm getting more competent with each mistake I make and realize, each modification I hack together and have to fix, each time I do something that "looks like it works" but doesn't and I have to figure out why.

Seems I take a more optimistic attitude to it, though. I suppose it's partially because I'm an incorrigible optimist, partially because I have experience with .NET from working with the code of Windows Forms applications, and partially because I also already have a lot of Web development experience under my belt.

But I firmly come from the other side of the tracks when it comes to that; my experience prior to FSTDT has been mostly LAMP (Linux, Apache, PHP, MySQL*), the exception to the LAMP acronym being that one of the projects I worked on professionally mercifully chose PostgreSQL. So far as Apache goes, I've never had to do much work configuring it aside from mod_rewrite.

*I hate MySQL with a passion for so many reasons that are beyond this post, and now that I no longer have to deal with it to get paid, I refuse to work with it.

In other news, voting is now open to anonymous and unregistered users! And that's actually because I programmed, compiled, and 'plugged in' a couple of classes that automatically check for suspicious voting behavior and emails my FSTDT admin account an alert if it catches anything, so I don't have to manually keep an eye on it myself. It intercepts parts of the QuoteComments.aspx codebehind if the current quote is either of the voting pages or the nomination page. It also the first and only Visual Basic code in the current FSTDT codebase, though it's only going to be there temporarily.

Now to the main topic of this post: I was wrong about something I said earlier in the Site / Off-Topic discussion thread, namely that the BBCode processor is an ancient external library. In actuality, it appears to be custom-programmed, or if not, I still have the full source code all the same. The reason for my error is a combination of several coincidences (a couple almost freakishly so) and some stupid assumptions on my part. I feel like a complete fool. But I'll tell you a (not so) little story about what happened:

First, the external coincidences: There is another BBCode processor written in the stone age that has the exact same name as the class files of Distind's. Both of these store their settings and tags in a database, something I find a little unusual for a BBCode processor. Both are also written for the .NET platform, though I can't tell you whether the other BBCode processor was written in C#, VB.NET, or something else entirely. Either way, it almost certainly had to have been one of those two but that's beside the point.

Second, the internal coincidences: A few days after receiving the FSTDT source code, my walking through it led me to the BBCode class files. I skimmed over them (more on the reason for my skimming in just a bit), and a number of identifiers (variable and method/function names) stuck out to me and gave me the impression that these classes were some sort of wrapper* to the "real" external BBCode processor: frequent use of words like get, send, use, precompiled, translate, ConvertArguments, etc. all strike me as "wrapper-like" language. Wrappers are a pretty banal thing so I lost interest pretty quickly and skimmed over that code even less than the the other code in that directory — most experienced programmers have seen a wrapper class or library at some point or another, and some have written them (me being on that list from back when I was a programmer-for-hire).

*So this makes a little more sense, a wrapper is a class or other structured code that acts a mediator between a program's code and an outside library, i.e. all data transfer and other interaction between the program and external library are done through the wrapper class. There several reasons to use a wrapper, but going into that is too far astray from the current topic. Even a nonprogrammer could probably think of a few useful purposes for something like that.

I also noticed a surprising lack of words used in identifiers that I'd expect to see in a BBCode processor: lexer, tokenize, parse, expression, state, seek — basically I was expecting it to work a lot like a compiler that takes programmer-readable source code and compiles (translates) it into computer-readable binaries. I guess I had that assumption because that would be the approach I'd take to programming a BBCode processor — and is the one I'm taking for the one I am making now — since processing / converting data and compiling code are tasks suited to the same basic kinds of algorithms.

Upon arriving at this "realization" about the BBCode processor, I set off to find the "real" BBCode processor. I couldn't find any trace of it in the compiled binary or library folders. I thought that was a little odd (when in actuality it should have been a giant red flag I was not on the right trail — my blond comes from a bottle, but perhaps the chemicals from the dye have been somehow seeping through my scalp and skull and into my brain...) So I decided to go searching the 'net for it, and lo and behold, I find an external .NET BBCode library assembly whose name is identical to the BBCode class name. This must be it!!

...except it wasn't.

This first started to dawn on me when I could not find the DLL to the damned library anywhere, not even the GAC. I even checked for it on the server. Nothing. Hmm... maybe the BBCode classes in the FSTDT source code were borrowed from the source of this. Wait... there is no source code to it available. And no documentation to it. This thing must be shitty. But wait... the FSTDT BBCode classes are also kind of shitty about some things! And both access the BBCodes from a table in the database! Eventually I got the (legitimately) bright idea to just freaking read and comb through the FSTDT BBCodes classes with the same thoroughness I gave the main code — what I should have freaking done in the first place. Lo and behold, it was the real BBCode processor code all along! It's also really, really, really bad in comparison to the code for the rest of the site, which is programmed competently enough. Its primary issue is a lack of polish.

Now for the reason why I didn't do go through the BBCode files with the same attention I gave the others. "I thought it was a wrapper" is only part of the reason — why didn't I read through it and see that it wasn't? The short answer is that, as I started earlier, I was skimming (to be generous), not reading. And the reason for that is that the BBCode class was part of a sub-project whose contents were almost entirely unimplemented, not-quite-complete code* that existed as a sort of island, having no kind of entrance point except for instantiating User and BBCode objects from their respective classes within the sub-project. I was not aware of the latter being referenced at that time, so I just skimmed through it like I did the other unreferenced code, and I arrived at the stupid-ass conclusion I did. And I stuck with that conclusion even after I realized it was referenced.

*I'll talk more about what that code was intended to be for in a later post. It's pretty interesting, and I intend on starting to incorporate some of its ideas into the FSTDT rewrite as soon as its stable and at functional parity with the current version of FSTDT.

I mentioned earlier that the BBCode processor is lik really, exceptionally, extravagantly awful. But if the sloppiness of this thing's code is that bad, then no better are my stupid-ass assumptions, stupid-ass self, and stupid-ass failure to actually seriously read the damn code properly to start with, instead of only doing it after I had was at a complete loss as to what was going on.

Now let's look at some of the code of this, err, masterpiece.

This is just stupid on so many levels, like borderline CodeSOD stupid (sorry, Bossman):
private static Regex UrlRegex = new Regex("\\b([\\d\\w\\.\\/\\+\\-\\?\\:]*) ((ht|f)tp(s|)\\:\\/\\/|[\\d\\d\\d|\\d\\d]\\.[\\d\\d\\d| \\d\\d]\\.|www\\.|\\.tv|\\.ac|\\.com|\\.edu|\\.gov|\\.int| \\.mil|\\.net|\\.org|\\.biz|\\.info|\\.name|\\.pro| \\.museum|\\.co)([\\d\\w\\.\\/\\%\\+\\-\\=\\&amp;\\?\\: \\\\\\&quot;\\'\\,\\|\\~\\;]*)\\b", RegexOptions.Compiled);
Programmers in the audience: What is wrong with the above code when it interacts with the following code?
{ input = HttpContext.Current.Server.HtmlDecode(input); if (Uri.IsWellFormedUriString(input, UriKind.RelativeOrAbsolute) && YCode.UrlRegex.IsMatch(input)) return input; return "#"; };
Can you identify what bug this causes? If you can get it right and explain why, I'll put your name and achievement in an award at the top of this post.

2016 FSTDT Awards

Quotes of the Year & Remaining Categories

Quote & Misc Awards #announcement fstdt.com blog

1/2/2017: Voting time for round one is up. The second and final round will be up and ready for voting later today or tomorrow!
_

This is the page to cast your votes in round one of the 2016 FSTDT Awards for Quotes of the Year and the other awards up for grabs. If you want to cast votes for the 2016 FSTDT Awards for Fundie of the Year or the other categories, you can do that here.

[aside]Minor update (27 Dec): I manually counted quotes for round one of the [abbr=Fundie of the Year]FOTY[/abbr] categories and the first week of the [abbr=Quote of the Year (and other miscellaneous categories)]QOTY[/abbr] round one, but I won't be doing that from here on out. I did the manual counting to make sure the code I hacked together to tally votes works and ignores most "false positive" votes (i.e. mentioning another quote in the commentary for a different vote) but doesn't ignore "false negatives" (i.e. legitimate votes that look like false positives to a computer blindly following instructions). It's not perfect, but it does a good enough job that all I have to do afterwards is skim over the quotes manually and fix a mistake here and there. Good enough for me.[/aside]

We made a really big oversight when we didn't nominate Omniology to be a Board of the Year candidate, so I've decided to break protocol and add it after somebody voted for it. Since I did this, you may change your vote for Board of the Year to Omniology if you want. If you want to change it, post a new comment saying so; don't change your vote by editing your current comment, because I'll be very likely to overlook the change. –shy


The Rules — read them!

This is round one of voting and will last from December 18 until December 31. In this round, we will be narrowing the number of quotes and other nominees for each category down to three. You get one vote to cast on a quote or other nominee in each category. A list of exactly what's up for vote this round is given below.

Since I'm the host and moderator of the awards, I'm abstaining from voting. But I did a sample ballot below in the comments for demonstration purposes. (It does, for the record, show how'd I vote if I weren't abstaining.) Pay close attention to my ballot and how the votes are listed and formatted. Try to do your own ballots as much like mine as you can. This will greatly speed up the process of tallying votes and make things much easier for me.

Now for the actual voting!

Using the list of nominations here, cast your vote for the following categories (more quotes up for vote but fewer categories compared to FOTY):

• Funniest Quote of the Year
• Nightmare Fuel Quote of the Year
• One-liner of the Year
• WTF?! quote of the year
• Incel Quote of the Year

• Board of the Year
• Commenter of the Year
• Troll of the Year
• Conspiracy Theory of the Year

Happy voting!

2016 FSTDT Awards

Fundies of the Year

Fundies of the Year #announcement fstdt.com blog

Day after Christmas Update: Voting for round one has closed. Round two will be set up and ready for voting soon.
_

Christmas Eve Update: This Christmas has been alooot busier than I expected, so you guys are gonna get a couple extra days to vote. I'll check the tally script against my own tallies and set up the next round the day after Christmas. Hope you guys have a merry one!
_

This is the page to cast your votes in round one of the 2016 FSTDT Awards for Fundies of the Year. If you want to cast votes for the 2016 FSTDT Awards Quotes of the Year or the other categories, you can do that here.

Now open to unregistered and anonymous users!

The Rules — read them before voting

A lot of people seem to be confused about how voting is working this time, so I decided to rewrite the rules to be a bit clearer and their purpose more transparent. I've deleted the improperly casted votes to give the voters an opportunity to try again now that I've (hopefully) made things clearer.

When we did nominations, I divided quotes into two broad categories: Fundies and Everything Else. This was because the fundie nominations were going to be handled differently. When we nominated fundies for the different award categories this time, we also nominated some of their quotes to go with them. The idea here is to determine the Fundie of the Year using three rounds of elimination based on the quotes we collected.

In the first round of elimination (the current round), voting is done to narrow the number of quotes for each fundie down to three. Fundies that already have three or fewer quotes are greyed out on the nominations list for now because they're not up for vote, since they don't need narrowing down to three.

In the second round of elimination (the next round), we repeat the same process with the remaining three quotes that each nominee has. This time the goal is to narrow the number of quotes down to one per each fundie in each award category.

Then in the third round of elimination, we finally pit the fundies against each other. The winning fundie in each award category is decided by voting on which one has the best winning quote from the previous process of elimination.

This process may seem needlessly complicated (and I realize that now), but it is not without a purpose. In previous years, the FSTDT awards were very predictable to me, and there wasn't very many voting opportunities to influence the outcome. Victors frequently won in landslides and curbstomped their competition. That's not very fun. You'll hopefully see that this time around the quotes chosen for the final fundie-against-fundie vote will be more competitive, and the final round of voting will be much closer, more unpredictable, and actually at least a little entertaining to follow and keep track of.

Now for the actual voting!

On the list of nominations here, find the corresponding section to each bullet on the ballot below, and use that list to cast your vote for each bullet. Follow the example I set forth in my ballot below (I'm actually abstaining from voting since I'm hosting and moderating the awards, but those are the picks I would've made if I were actually participating).

The Ballot

• Religious Fundie Quote, kingjameswriter1965
• Religious Fundie Quote, Catholic Nationalist
• Right-wing Fundie Quote, Jim
• Right-wing Fundie Quote, Students Against a Democratic Society
• Left-wing Fundie Quote, Nicolas Maduro
• Left-wing Fundie Quote, Antisemitic British Moonbats
• Conspiracy Theorist Quote, Nicolas Maduro
• Sexist Quote, Matt Forney
• Sexist Quote, SaintElliot
• Sexist Quote, David J Stewart
• Sexist Quote, Vox Day
• Racist Quote, James Laffrey
• Racist Quote, Wotans Krieger
• Single-Issue Wonk Quote, David J Stewart
• Single-Issue Wonk Quote, Mack Major
• Single-Issue Wonk Quote, Navaros
• Single-Issue Wonk Quote, WorldGoneCrazy
• Single-Issue Wonk Quote, Vox Day
• Batshit-Insane Person Quote, usachinanukewar
• Batshit-Insane Person Quote, Vox Day
• Batshit-Insane Person Quote, Joe Eigo
• Batshit-Insane Person Quote, SaintElliot

Happy voting!

"FSTDT finally has a sorely needed basic feature" Award

Quote tags #announcement blog

You guys may have to log back in again. No, the old log-in bug is not back! This time it's because I made a few fixes to the FSTDT code and added a shiny new toy, and so I had to recompile the code and 'reboot' FSTDT so to speak. The "posts with certain things causing logouts" bug should be fixed now, but tell me if you encounter it again (in which case please be patient while I pull my weave out and try again to fix it). I'm gonna be making more changes to the existing code during the next few days, so I'll be doing a few more recompiles as I make progress, and they'll likely make you have to log in again. Sorry, guys. (But you might get some more new toys to make up for it!!)

Now about that shiny new toy: It's a working quote tag! See:

@nautical999

Leviathon is a spirit I have battled as well. It was a hard battle but was won. It was about four months or more ago. My wife and I were in McDonalds and were having a conversation with an angel and Leviathon had come up. I told the angel that i wanted to fight this demon and he said I could. On the way back to the hotel I asked the angel if he could bring the demon to a predestinated place and he said yes. I figured that since Leviathon was from the depths of the sea he would be used to the cold water so I filled the tub up with scalding hot water and blessed the water. The angels (there were two now) brought Leviathon bound to the tub and fought with me. We all pulled our swords from our hips and began running this demon through with all my strength and everything I had. I would say it took atleast half an hour or more. We were all spent but the battle was won.

Oh, you so crazy, nautical999. To use the new quote tag, the syntax is [quote=author]quoted text[/quote]. The opening quote tag should be put at the beginning of the first line of quoted text, and the closing quote tag should be put at the end of the last line of quoted text. There should also be two line breaks both above and below the quote tags and surrounding text (i.e. like it's a paragraph). The result will look wonky if you don't do it like that. Play around with it, and you should get the hang of it.

You can also omit the author of the quote:

im christian
if we came from apes
how come were not hairy and have a big mouth
and did we end up looking like we do know
and besides
there isnt any serious proof of apes
they showd a video saying an ape was wondering around in the forest
that thing looked exactly like a costume that i had saw at a store
know one ever cought an ape

The syntax for this is [quote]quoted text[/quote]. Other than that, quotes-sans-authors behave the same way as regular quotes. Again, play around with it and you'll get the hang of it.

Use the comments of this post to do your playing around. Take chances, make mistakes, get messy!

2016 FSTDT Awards

Nominees and Candidates

The Nominations #announcement fstdt.com blog

Here are the candidates and nominaitons for the 2016 FSTDT Awards!

Thanks to everyone who made nominations! Also special thanks to Pharaoh Bastethotep and everyone else for their help doing tl;dr snippets of the quotes

When casting your votes on quotes — for either a Fundie of the Year candidate or for a Quote of the Year nomination — remember that the snippets provided here are intended to be a convenience giving you a general gist of what the quotes are about. If you decide to vote for a particular quote, then you should first click its quote-number link and read the original quote in its entirety to make sure you don't have any second thoughts. It is also a wise idea to consider your second pick as well and read its full quote too before casting your final vote: if you change your mind after voting, your vote will not get to change with it. All votes are final with the exception of typos or similar errors. If you find yourself equally torn between two or more candidates, then you should definitely always read their full quotes before deciding!

You don't have to cast a vote on everything up for vote. You may abstain from as many or as few things as you like, but remember that you lose your abstained vote; you cannot use it as an "extra" vote somewhere else.

[font=sans-serif]Religious fundie of the year[/font]

• David J Stewart – #122928: Leviticus selectivity, shellfish ok, gehs bad
Sassy – #122088: "I flew in a plane what is different between that space and the space higher up? Where did Jesus go to when he was seen ascending into heaven? If Space is above the clouds where is heaven? You see there is a difference between Man and God the heavens above and heaven"
cmdrjones – #121628: "Atheists have constitutional rights by being citizens, but by denying the existence of a creator no one with two brain cells to run together would trust that they would respect anyone else's rights. So, they simply should never be afforded political power... What with their miserable track record and so on. "
• kingjameswriter1965 – #122435: "Now they claim they can use this hadron collider to bring forth the Devil and all his fallen ones."
Mack Major – #118255: "People who come from a voodoo or an old southern hoodoo background know about spirit husbands. These are actual spirit entities that become attached to a woman through ungodly sexual and spiritual activity."
Catholic Nationalist – #117704: "Catholicism is objectively the coolest religion. So cool in fact that the word cool is not nearly sufficient. What other religion allows you to literally eat God every day?"
_

[font=sans-serif]Right-wing fundie of the year[/font]

Abolish Abortion Florida – #121877: "The political committee Abolish Abortion Florida (AAFL) has launched a ballot initiative to amend the state's constitution to punish abortion as capital murder."
Donald Trump – #122148: [Donald's twitter tirades are, mercifully, already auto-summarized by Twitter's 144-character limit, but they are too numerous to list; we'll do a short vote on picking one if he wins. –shy]
Jim (Jim's Blog) – #120562: "We should protect our gays from Muslims and kill them ourselves."
Roosh Valizadeh – #120431: "Punish Trump haters with your cock: Besides the punitive element of withholding your cock from a Trump hater, we can also look at it from a time-saving perspective. If you are masculine, you simply won’t connect naturally with a feminist who hates Trump."
Students Against a Democratic Society – #116770: "We’ve done slavery (Issue 3), we’ve done lynching (Issue 11) – well, we haven’t done them, but you know what I mean."
The Last Trump – #118465: "[Appeals Court Rules in Favor of Virginia Transboy Who Sued School District to Use Men’s Restroom] THIS, is one of the biggest issues of our time!? Sort of reminds you of Nero fiddling while Rome burned doesn't it?"
Vox Day – #121392: "TL;DR: The Alt Right is a Western ideology that believes in science, history, reality, and the right of a genetic nation to exist and govern itself in its own interests."
_

[font=sans-serif]Left-wing fundie of the year[/font]

nikkipotnik420 – #120947: "You defend trans 'women' because its just another way for men to force women to coddle males and put them before our own needs and its transparant as fuck."
Mark Carey, et al. – #117469: "Feminist glaciology is rooted in, and combines, both feminist science studies and postcolonial science studies to meaningfully shift present-day glacier and ice sciences."
Johan Nygren – #118613: "Diagnoses are the contemporary equivalent of racial biology. [...] It’s ADHD and bipolarity and schizophrenia and autism was used to legitimize wage slavery"
University of Capetown Students – #122204: "They believe that [...] you are able to send lightning to strike someone. So, can you explain that scientifically" [Response: "It's not true."] "What you're trying to do is collapse the space and make it antagonizing, which we will not allow. This is a progressive space for people to say their opinions."
National Union of Students – #118198: "The National Union of Students’ LGBT Campaign has passed a motion calling for the abolition of representatives for gay men – because they 'don’t face oppression' in the LGBT community."
Aysegul Gurbuz (Labour Party Moonbat) – #118102: "If it wasn't for my man Hitler these Jews would've wiped Palestine years ago. Sorry but it's a fact. [...] Not hating on Jews btw"
Bailey – #117389: "It’s not irresponsible behavior to not tell someone you have hiv [...] It’s not irresponsible to have sex with somebody without telling them."
_

[font=sans-serif]Conspiracy theorist of the year[/font]

GLP Anonymous Cowards – #122457: "DO NOT GIVE IN AND MASTURBATE BEFORE THE ELECTION. It will lower your core energy to the lower chakra levels where that the demonic scum need the population to reside in for their ritual magick to be effective."
Nicolas Maduro – #123066: "He added that the situation is an attack by Colombian criminal groups and Venezuela's MUD opposition coalition "combined with international mafias via an NGO hired by the US Treasury." [...]The NGOs, according to the official, hire criminal organizations to move 100-bolivar bills, the largest bill in circulation now, to Colombia and from there to other countries, such as Switzerland, Poland, Ukraine, Spain, Germany and the Czech Republic, where the money is stored in large warehouses."
Alex Jones – #118606: "I’m pro-human so I say, black people, especially, stop killing your kids and get them in church, whatever, take them away from Beyoncé, who wants to eat their brain with the CIA, literally."
_

[font=sans-serif]Sexist of the year[/font]

nikkipotnik420 – #120947: "You defend trans 'women' because its just another way for men to force women to coddle males and put them before our own needs and its transparant as fuck."
sexselector – #101724: "Pain should never be considered a part of life. Being in pain is not a good evolutionary strategy. [...] Men’s choices in the patriarchy *created* women’s pain."
Matt Forney – #117165: "It’s time to stop beating around the bush: feminists want to be raped."
Saint Elliot – #122565: "The pussy of females can be used even 2 days after their death. Their sexual resources get wasted with the current system and people often die because there aren't enough organ donors."
David J Stewart – #120671: "If your husband wants his cereal in a certain bowl or wants you to wear a certain dress in public... JUST DO IT! If your husband wants you to rinse his glass for 15 seconds or asks you to roll his socks into a ball... JUST DO IT! If your husband wants more grain in his meals... JUST DO IT! If your husband doesn't like the smell of certain foods when you cook them... then DON'T DO IT! If your husband wants you to put the twist back onto the loaf of bread... then JUST DO IT! If your husband wants the toilet seat up at all times... then JUST DO IT! It may not seem fair to you but it is YOUR JOB ladies to HELP your husband."
Vox Day – #117889: "If the definition of rape is stretched so far to include women who have not given consent, then I am absolutely a serial rapist. So, too, is every man I know."
Navigator – #123052: "Rape should be legal. It is this simple. A woman is a sexual object."
_

[font=sans-serif]Racist of the year[/font]

James Laffrey – #116723: "The jews say Adolf Hitler ordered a 'Final Solution' of extermination of the jews. But Hitler, a humanitarian, a vegetarian, an artist, did no such thing — although, again, he should have."
Wotans Krieger – #117230: "In the Reich that is to come these bastardised noble familes will have no place of honour for they are enfeebled distortions of the once racially pure Germanic aristocracy. Thus we must begin again the restoration of the caste system. Building on the vision of the Rigsthula I propose that these reconstituted castes [...] The Rigsthula makes it clear that this caste was an alien one. The very presence of the Thrall in our lands represents a very real threat to our biological survival as a racial community. Some of these Thralls may outwardly appear to be people of our own blood but the obese, the sexual degenerate, the drug addict, the alcoholic and the career criminal should be regarded as part of this slave under class and the necessary corrective measures undertaken. They are the Untermenschen much prized by the liberal elite."
Janet Bloomfield – #117222: "Don't ban [the burka]. Use it to pick the next one to deport. #MakeAmericaGreatAgain #WhyWomenShouldNotVote"
Vox Day – #121315: "As it happens, the ruination of the United States is the result of the 'contributions' of two groups of immigrants, Irish and Jewish."
_

[font=sans-serif]Single-issue wonk of the year[/font]

David J Stewart: Creepy-ass Taylor Swift fixation
• #123073: "This perverted screenshot of Miss Swift to the right only appears in this 3:54 minute video for ONE SECOND TOTAL!!!"

Mack Major: Witchcraft and the Occult
#122812: "The biblical word for medicine in the New Testament is pharmakeia: and it means SORCERY. In other words witchcraft, occult power, black magic and potions. Why would Jesus Christ expect His followers to rely on the power of witchcraft or black magic to save them???"

Navaros: God's Holy Righteous Penis
#121503: "You will have to face HIM in ALL of HIS MALE PATRIARCH KING FATHER HOLY RIGHTEOUS PENIS-OWNING GLORY!"

Ann Barnhardt: Made-up fundie disease "Diabolical Narcissism"
#122361: "Diabolical Narcissism is of the most severe variety, what we refer to as “psychopathy”, and thus she [Hillary Clinton] is an Alpha Narcissist, very much desirous of personal power, all the way up to the national and even global level."

WorldGoneCrazy - Anti-abortion crusader
#120192: "All I know is that if fetuses could defend themselves with a gun, there would be no abortions."

Vox Day - Evolution denialism
#120508: [Eric Hovind is refuted by a sixth grader] "t is a form of intellectual combat where the goal is to discredit the interlocutor. [...] Frankly, I'd be surprised and a little disappointed if I didn't have the kid in tears and questioning his faith in science within minutes after asking such a pair of stupid questions [...] Destroy the interlocutor."
_

[font=sans-serif]Vulture of the year[/font]

#122859: Mack Major – "Someone may ask 'Why are you using this tragedy to promote your ebook?' The simple answer is because it saves lives! Hate to say I told you so, but had those who were partying read my ebook, they most likely would not have been there in the first place [at the Oakland warehouse fire]"
#119803: crunchymama – "My heart is heavy over every aspect of this. that some of those killed were believers[...] that everyone involved turn to Jesus, that our 2nd Amendment rights aren't taken away"
_

[font=sans-serif]Batshit-insane person of the year[/font]

usachinanukewar, #117354: "This divine pneumonia time bomb in my lungs implanted by Jesus years ago is the best ever gift I’ve received from Jesus."
ComeOnPeople, #122200: "I know longer believe what the government told me about the world. To me they have taken the biblical account and turned it upside down. Making everything revolve around the sun, which is contrary to what the bible says and what scientists and historical artifacts claimed up until nasa."
Vox Day, #119003: "War destroyed the body, but it did not destroy the spirit and the soul in the way peace and prosperity have."
Joe Eigo, #116613: "His sword cuts through what NEEDS to be TRANSMUTED by Lord Zadkiel of The Violet Ray which is the Ray OF TRANSMUTATION AND MERCY AND ALCHEMY. Lord Michael comes along FIRST and TRANSFORMS IT (IN EASIER TERMS ,CHOPS IT ALL UP (NOT RIGHT TERM) AND LORD ZADKIEL LAUGHED WHEN HE SAID LORD MICHAEL LEAVES HIM THE "MESS TO CLEAN UP WITH THE SWORD OF VIOLET FLAME HE WIELDS OF TRANSMUTATION.WE ARE IN THE VIOLET RAY AGE RIGHT NOW. THE AQUARIAN ONE. IT'S THE 7TH RAY."
Saint Elliot, #123058: "Heck, I even considered having sex with a dog cadaver that died outside my window but sadly the janitor threw it away before I could go out and get it at night."
_

[font=sans-serif]Funniest quote of the year[/font]

#106783: "We will use your leaning tower of pizza to throw off homosexual"
#120864: "Of course, [FSTDT commenters] are all socks of Valri, so the logistics are not too difficult. :-)"
_

[font=sans-serif]Nightmare fuel quote of the year[/font]

• #119250 (Ryon Travis sov-cit house of horrors)
#120032: "Recent discourse on child pornography falsely portrays it, like child sex in general, as a disaster for the child. [...] Yet there are many children seen in child pornography whose words, facial expressions, body language, and orgasms show that they thoroughly enjoy the sexual activity, sometimes enjoying it immensely."
_

[font=sans-serif]One-liner of the year[/font]

#122830: "You don't know how much you should fear Jesus"
#119953: "If I could be in the bedroom of every pro-choicer's when they have sex just to talk to them, I would. I could make them see how beautiful life actually is."
#121425: "Beware the beast Hildabeast Clinton and her Vagenda of Manocide"
_

[font=sans-serif]WTF?! quote of the year[/font]

• #122633: "[STEM] Syllabi promote the positivist view of knowledge by suggesting that there are correct conclusions that can be drawn with the right tools [...] the syllabi reinforce the larger male dominant view of knowledge as one that students acquire and use to make correct decisions."
• #123064: "[Beezow Doo-Doo Zopittybop-Bop-Bop] explained that his first name represents 'the explosion of awareness of the interconnectedness of the infinite love in the universe.' Doo-doo 'is the struggle of our daily lives with that awareness, that with love comes chaos,' and Zopittybop-bop-bop 'is the outcome of that struggle, which is often ironic, especially because all life ends in death.'"
#120864: "Of course, [FSTDT commenters] are all socks of Valri, so the logistics are not too difficult. :-)"
_

[font=sans-serif]Incel quote of the year[/font]

#122565: "The pussy of females can be used even 2 days after their death. Their sexual resources get wasted with the current system and people often die because there aren't enough organ donors."
#121548 "Modern Western women hate respect. They hate consent. They love bloody beatings. They love death. [...] You are the ones who don't see what's wrong."
#123058: "Heck, I even considered having sex with a dog cadaver that died outside my window but sadly the janitor threw it away before I could go out and get it at night."

[font=sans-serif]Board of the year[/font]

/r/IncelHeaven
Return of Kings
_

[font=sans-serif]Commenter of the year (winner!)[/font]

Hasan Prishtina
_

[font=sans-serif]Troll of the year[/font]

TimeToTurn
Anonymous "enlightened seer" (see here for where the madness begins — one can only hope it's a Poe)
_

[font=sans-serif]Conspiracy theory of the year[/font]

PizzaGate
The Mandela Effect

2016 FSTDT Awards

Nominations

The Nominees #announcement blog

Nominations closed — thanks to everyone who nominated! Also very special thanks to Pharaoh for keeping the nominations list up-to-date! The first round of voting will be up in the next day or two.
___

This the page for the 2016 FSTDT Awards nominations!

Note: you must be a registered user to make nominations. Nominations from anonymous and unregistered users will be deleted at my discretion. Make sure you're logged in before you make any nominations. If you don't have an account but you want to participate, register here! Don't be shy, because that's me!

In your nomination, try to include a brief explanation of why it is worthy of an award and a few exemplar quotes where applicable. (See my nominations below for an example.) You may make as many nominations for as many awards as you want, and you may nominate as many times as you want (i.e. all your nominations don't have to be in one comment, and I would much prefer you post a new comment than than edit your original comment when adding more nominations). Also feel free to suggest categories and give feedback on how I'm doing and handling the awards this year!

Categories that don't receive much attention will probably be culled from the final vote. The deadline for nominations is December 17.

The nominations will be aggregated and organized on this page to keep from cluttering this one.

And one last (but very important) thing: Please provide either quote URLs or quote #s / IDs where relevant (e.g. fundie-nomination exemplars, quote nominations)!

...and now, ladies and gentlemen, without further ado, the categories are:

Fundie Nominations
• Religious fundie of the year
• Right-wing / conservative fundie of the year
• Left-wing / liberal fundie of the year
• Conspiracy theorist of the year
• Sexist of the year
• Racist of the year
• Single-issue wonk of the year
• Vulture of the year
• Batshit-insane person of the year (generally / overall)

Quote nominations
These are regardless / independent of the fundie who said them, but you can make a double-nomination (i.e. nominate a fundie and nominate one of their quotes for X quote of the year). Quote nominations may be from any section and about anything: religion, politics, conspiracy theories, racism, sexism, etc.

• Funniest quote of the year
• Nightmare fuel quote of the year
• One-liner of the year: Two sentences and 250 characters max, ideally less.
• WTF?! quote of the year: The most bizarre, incomprehensible, or "out there" quote (this would be a prime example if it were from 2016)
• Incel quote of the year: Just since there's been so damn many of them

Board nomination
• Board of the year: may be fundie, racist, conspiracy theory, etc.

Commenter / Submitter nominations
• Best submitter of the year
• Best commenter of the year
• "Best" troll / shitposter of the year

Comment nominations
• Funniest comment of the year
• Best rebuttal of the year

Misc.
• Conspiracy theory of the year: Because this has truly been a banner year for CSTDT...
• False flag of the year: ...mostly because of these
_

17 Dec Update:
Today's the last day to nominate!

With that news out of the way, I'll go into detail about the candidate-selection and voting process. If I make this whole thing sound complicated and confusing, it's not really. It just seems that way because I'm going into a lot of detail. Just go with the flow come voting time and everything will make sense. Since I'm going over the voting process in length here, this'll probably be TL;DR for many (most?) people, so I'll also include the most important information here on the voting pages.

Fundies (religious, left-wing, right-wing, conspiracy theory, sexist, racist, single-issue wonk, vulture, batshit-insane person) must have at least one accompanying example quote to make it to candidates. Fundie nominees that still need quotes after today will be disqualified and removed from the list of candidates.

Quote categories (funniest, nightmare fuel, one-liner, WTF?!, incel) and the remaining categories (board, submitter, commenter, troll, best comment, best rebuttal, conspiracy theory, false flag) must have at least three nominees to make it on the list of categories up for vote. Those with fewer than three will be disqualified. (The same also technically applies for the fundie categories, but they have all surpassed the minimum number of three fundie nominees, rendering the whole rule moot for them.)

Voting for fundies and voting for the remaining categories will be done in two separate posts concurrently. Fundie categories will have four rounds of voting, each lasting a week (give or take a day for preparation), and the remaining categories will have two rounds, each lasting two weeks. That makes the total time for voting about a month (That's also about the same amount of time Distind generally allotted to voting, though he didn't do it in rounds.)

For fundies, the four rounds of voting will be:

First round (December 19–24) – Will select the top 3 exemplar quotes for each fundie. If a fundie already has only two or three exemplar quotes, then they will be exempted from this round and will be up for voting in the next. If a fundie has just one exemplar, then they will be exempted from this round and the next, and they will be up for voting in the third round.

Second round (December 25-31) – Will narrow the exemplar quotes down to one.

Third round (January 1-7) – Will choose the various fundies of the year! Their winning exemplar quotes will be embellished with their awards.

Fourth round (January 8-14) – Will pitch each of the winning fundies against one another to choose the one single darndest, fundiest fundie of the year. Their exemplar quotes will have two awards put on them: the category they won and fundiest fundie of the year.

For the remaining categories, the two rounds of voting will be:

First round (December 18–31): Candidates in each category will be narrowed down to three.

Second round (January 1-14): The three remaining candidates will be narrowed down to one, the winners! Each of the winning quotes will be embellished with their awards. Winners in the other categories will receive a special mention in a Shy Says post because I don't know what else to do. Any suggestions?

As with nominations, users must be registered and logged in to vote. If you don't have an account and wanna vote, go make one and use it! I will be the only one in charge of voting and tallying the votes. Letting more than one person do this is just asking for errors. While I'm busy handling voting, Pharaoh and Ravy will be the ones approving new quotes for the most part. They'll also be doing comment moderation after I have a little chat with them regarding trolls.

Oh, and another thing, when you cast your votes in the comments, each comment will be hidden after I count its vote to keep from losing my place and double-counting. So don't freak out if your vote suddenly disappears. That will actually be a good thing: it means I counted it. :) Hiding the votes will also have the benefit of preventing a bandwagon effect from influencing the vote.

But remember, I'm hiding the comments, not deleting them: if you vote more than once, I'll catch you and ask you to pick a vote to keep and discard the other one(s). If they're for the same candidate, I'll just count them as one. If you repeatedly vote more than once, all of your votes will be discarded and you won't get to participate in any remaining rounds of voting. (Any votes will be ignored if you try.)

Votes will be tallied using a combination of automated SQL queries and manual counting to ensure what the queries return is correct. To make manual counting easier for me, follow the ballot format I give on the voting pages exactly, that way my SQL sorcery will count it correctly with minimal fuss and all I'll have to do is verify it.

Whew. I think that covers everything. If you read it all, thanks for hanging in there with me!

fixed #announcement blog

I think I got a fix in place for the login issues. Let's cross our fingers and pray to the web.config gods that it works.

Edit: I am tentatively calling this "fixed." If you are reading this, post a comment letting me know if your login is "sticking" now or not.

That login issue #announcement fstdt.com blog

There's an issue where users won't stay logged in more than 24 hours. I'm not sure what is causing it, and I may have to get Distind to come back and fix it, because the source code of the latest version of the site is disassembled (the original was lost), and the disassembled version is nigh unreadable in places, especially the code involving user accounts. If worst comes to worst, I'll rewrite the entire session / login code myself. It might take a week or two to fix this issue. I'm really sorry it's taking so long to work out this annoying little bug.

In other news, I'm gonna throw up a post for nominations for Fundie of the Year awards either later today or tomorrow.

Postponing Fundie of the Year nominations until after this bug is fixed.

Mookitty

is still my cat

hay guys #announcement fstdt.org blog

I'll probably be posting here a little more often than bossman about fairly mundane things. I'll kick links to anything major up onto the navigation bar where "Greet your new masters!" is right now.

Just got finished approving quotes this morning. I've got a busy rest of the week ahead of me grading finals and posting final grades, and I've got to proctor tomorrow, so you probably won't hear too much out of me. I'll most likely still be able to approve quotes every morning and afternoon, though.

After this week, I'll be free until January barring the unexpected. Then we'll get down to bizness on possible plans for the site and what have you. First on the agenda will be a bunch of little fixes to the site code that won't really affect things on your end much. Before I can do that, I've also got to make a little pretend FSTDT database on my computer so I can test changes to the code before it goes live. But that should take a whole ten minutes to do.

Welp, I'm off to go do work things now.

Mookitty

is shy's cat

'ere we go! #announcement blog

NOTE: Comments are locked here because party's moved on over to this thread!

Turn over is in progress! I'm working out some kinks before handing everything over completely, but the majority of things have gone well.

I'm having some fun with the comments, and domains will most likely take a bit of time. But we're here, yell at Shy already.

-Distind

...and turnover complete! Shy/Ravy 2016 is here! If you find any outstanding bugs, post the details here. (When you get an error, ignore the e-mail instructions for now; I haven't gotten the new Admin e-mail set up yet.)

-shy

New boss! #announcement blog

This is possibly my last week folks, but good news, you have a gracious new overlord to bow to! Shy is stepping up to take over admin duties and hopefully we can get the transfer worked out without too much wasted time.

That said, web hosts are being changed in the process. Which means there will be a dead stop of fundies content for at least a few hours, possibly a few days. That said I'm going to be snagging and storing all the relevant data before my hosting runs up and we'll start working on data and domain transfer.

Right now I intend on taking the site down Monday the 28th at whenever the balls I remember to do so. After that you'll get error messages for a bit and hopefully the site comes back up before too long. That said, data transfer from my slow ass server is generally in the realm of hours at best at this scale. So be prepped for at least a day. And possibly more as I may have pulled jury duty for that week. I'll find out Friday.

Edit:
The joys of jury duty are mine, so transfer is going to take a bit. Expect the site to go down around 6pm EST tomorrow, transfer speeds are far better than I'm used to from last time so it may be up sooner than later. I'll post a redirect to the current domain as soon as it's working and we'll get these domains working not too much longer after that.

Brace for impact #announcement blog

Hey folks, start of the last month has gone already.

So far there's a few people who have made efforts but no solid results, so while I'll keep things up till the end of the month I may as well setup some contingency plans.

The jist, I'm not going away on my reddit account for a while. I annoy people off u/distind on a regular basis and don't see a need to change that right now. If you get to the point you want to take something over and have the historic quotes, hit me up there. Once the month ends I'll be finding a place to post the identification stripped files for whoever wants them. I'll most likely pin that location in the FSTDT subreddit in a few days after I've pulled the information and made sure the formatting isn't balls.

That said, of the options discussed, if the time comes and there isn't a viable site to go to and you are willing to run it off the subreddit, I'll happily toss it to someone and let them run with it. The only thing that sucks will be the searching on reddit is garbage. Other places odds are I don't run whatever you find associated with FSTDT so I'm of limited help there.

I'll check back in near the end of the month and make final announcements in the last week of the month.

The end is neigh #announcement blog

Quick Note before going onto the post, we have someone willing to attempt to take the place over and I'm working with them now. We'll see how things go.

Right-o folks. That time thing, yeah, it's happened.

Given I'm a week behind on quotes and don't have a massive interest in catching up I believe I'm going to be calling my actual end of admin here. I'm just to the point I have other things I want to do with my life.

I'm going to keep the lights on and push quotes out for a while yet, at least till the end of the month, possibly to the end of the year if some individual interested needs time to prepare a new home for the place. But if that's the case I'll be downgrading hosting considerably to save myself some money.

The over all, if you want to run FSTDT, well you're going to have a time of it. The code for the most recent version got nuked with my last hard drive failure and what I have is about three revisions old, which means most of the useful shit I've done in the last two years isn't there. It's livable, but frankly I'd recommend a full re-write anyway. It's the work I haven't had the motivation to do, and being in the middle of remodeling a house, I'm realizing it isn't a lack of motivation as much as a lack of interest in that particular project.

I wrote the original version of this site in about a weekend, it worked fine for a year that way. If you want to write your own I can tell you the tricks I've picked up over the years of handling overly large lists and analyzing comments for horror content. I can also supply a set of test data to build around, and once you've got that up and running the full dump to see how well you handle it. But I'm not up for hand holding anymore, I'm done.

As much as I don't want the site to die, I'm not willing to devote time to it any more and I should at least be honest about that. If you are, well, I'll happily hand the place over to the first schmuck who can handle the test data.

Where the balls have I been? #announcement fstdt.com blog

Remember that whole attempting to hand off the site thing I did a few months back before I started getting too busy to handle it myself anymore. The busy part of it happened.

Once I have a bit more free time I'll be talking to some of the volunteers and see what I can do to set things up, but given the state of the site itself someone would need to be technically competent to actually take it over without driving themselves insane trying to use the existing tools to handle the random shit I have to deal with on a regular basis.

As it stands I generally have enough time to get quotes out still and half the reason I'm still here is that I refuse to let the shitposter win so I'll always make time for that.

Depending on how my checking in goes we'll see how the future goes, and even in the absolute worst case I know three or four people have expressed interest in preserving the database even if they don't quite know what they will use it for. Which I'd be fine with supplying them once I'd stripped out user identifying data should I ditch.

Don't know exactly what I'm up to now for the future, I can't promise consistent quotes these days given my schedule but I should be able to manage something for the near future.

FSTDT Wants You! #announcement fstdt.com blog

Hey folks,

I'm looking for folks who would like to join public admin.

Public admin is how quotes get approved, corrected, and otherwise make it to the main page. I approve items out of the queue on a daily basis and it's been a while since we had enough people to actually approve a quote without my intervention, I'd like to fix that.

If you're interested, comment here with your account and I'll do a review and let folks know if they're in or not. I will most likely handle this on weekends, so it may take me a bit to respond, but I will.

If you want to discuss, hit me over on the subreddit as I check that more.

And a few notes for those who are accepted:

Using Public Admin

Access
Once you've been added to public admin log in to your FSTDT account and go to the home page. On the home page in the right hand column you see a link half way down the column "Admin" with a smartass line of text under it. Click that and you will be brought to the public admin page.

Use
You will be presented with one quote at a time, each quote has three options for you to select, Approve, Delete or Abstain. If you feel it should go onto the mainpage, approve, if you feel it shouldn't Delete, if you don't have much feeling either way abstain. I should note, these are votes to a community total and do not immediately determine the fate of a quote, express your opinion on the quotes freely.

In addition, if you notice an issue with a quote you can make note of it in the 'Issues' field which is below the approval buttons, making the note of it here allows me to fix it before it hits the mainpage. You will also see any notes made by other members of public admin.

Under the quote there are a selection of recent quotes from similar sources to check for duplicated submissions, along with links to a full search of those fields if you have a strong feeling you've seen it but it does not appear on the list.

As a final note, every time you access to the public admin page it will progress to a new quote, I suggest not check the page too often as it will march you past a fair number of quotes if you do.

Drop the T #announcement change.org blog

[Another reject I find interesting]

We are a group of gay/bisexual men and women who have come to the conclusion that the transgender community needs to be disassociated from the larger LGB community; in essence, we ask that organizations such as the Human Rights Campaign, GLAAD, Lambda Legal and media outlets such as The Advocate, Out, Huff Post Gay Voices, etc., stop representing the transgender community as we feel their ideology is not only completely different from that promoted by the LGB community (LGB is about sexual orientation, trans is about gender identity), but is ultimately regressive and actually hostile to the goals of women and gay men.

Fundie Quote of the Year 2016 #announcement fstdt.com blog

Voting is open, let me explain how to ensure your vote counts this year.

Each nominee has a number associated with it in one of the categories below. To vote for that nominee enter it's number into the comment section for that category. I'll be counting the first number I find in the comment and I'll be making sure votes come from unique commenters so please no funny business. Vote in as many or few categories as you like so long as it's only once in each.

Easier than most years since I have all this space to play with. Any questions, comments or general ranting can be addressed here on the subreddit where I'm more likely to look on a regular basis.

To see all of the categories and nothing else click 'Fundies 2016 Voting' below.

As of now I intend to let voting run through the end of the month. With results announced in the following week. Look forward to seeing the results folks.

Nominations Review #announcement fstdt.com blog

Nominations are up for review in the subreddit!

This isn't voting yet, this is me taking a pass through and seeing if I have a decent enough set of nominations for voting. I'm a bit behind so I'm only going to leave them open to review this week.

I've also got to figure out how I want to handle voting, I've done custom text parsing in the past, but I also didn't have this many items to vote on then. May do something a tad strange unless I find a good poll site. Anyway, take a look at the nominations, yell out any good ones that haven't made it under the categories, and hope to see you guys over there.

subreddit off the port bow #announcement reddit.com blog

Oi! After entirely too much preamble without any progress I've opened up the FSTDT subreddit.

I've got the basic rules up on the side bar. I'm running the place myself so be fully aware I have minimal tolerance for bullshit of the forum drama variety these days. It's actually a fair part of why I went with reddit. It's roughly as annon as here, and if you want to discuss something that doesn't fit within the rules there's probably another subreddit where you'll be in fine company. Want to screw around with other members of the community, commiserate or generally shoot the shit. Perfectly welcome. Actual discussion of topics, also welcome. I look forward to talking to folks.

That said, I'm running it myself and I'm already short on time these days. If it becomes a time sink I may well close it down. This is a bit of a trial period for me. If you'd like to help moderate the place hit me on the mod mail from the subreddit and we can talk.

Hosts #announcement fstdt.com blog

Been actively poking around and found a great reason to push through the test site's cancellation, my current host has a plan that's half the price of what I'm paying with twice the SQL space that I've been carefully managing to not exceed for the last few years. That's a thing. That's a hell of a thing. I'll be chasing after that and will try and warn folks if it looks like there may be a rough transition. Chance for an outage, and another one while I'm fucking around with the configuration to play with whatever new toys I wind up with. But hot damn if I can keep this level of service and just get more space I'd probably not care about paying less, just really don't want to get shafted service wise after the repeated fuck ups with the test site host.

Had to start some time. #announcement fstdt.com blog

Moving along, I have the first stages of the fundies together and... well, it'll mostly be quote of the year as the remaining categories are frankly predictable. If you have new category ideas let's hear them. But there are some nice quotes and I have a slightly different idea than usual I'll roll out and we can see how that goes.

Working with the preview site host, got my money back and will be closing that account before much longer. Sorry to cut it off, but next version will be elsewhere, with a few updates when I get the time.

If you have any nominations, throw them in the comments.

Now I'm off to make dinner, hope everyone had a great new year #announcement fstdt.com blog

Happy new year folks, quick run down time:

Been sick as a dog the last week
Got promoted the week before that because my boss was leaving
Busy is an understatement when I've been able to do anything
Yes we will be doing fundie of the year, I'll be working on that this weekend and setting up categories hit me with suggestions in the comments below.

My host for the preview site has had a few billing irregularities this last week, so that will be coming down by the end of the month. Anyone who knows good .net hosts let me know, I may well be having a conversation with my current one to see if I can't get my plan tweaked a bit to fit the site better.

That whole someone taking over the site thing didn't pan out, no one with the time and the money popped up. In the end I can't quite bring myself to say do or die and off the site, but I will say if there is someone interested I'd love the help. And I got plenty of offers to help in other ways which I'll be working out once I actually have some time again. It bugs me that I don't have the time to free up some time, but it goes that way at some points so hold on for the ride.

What's that mean? Well, I have a crap load of people who want in to public admin and a few folks who have volunteered to do quote corrections or even full administration. So with some luck that means less waiting on me to get quotes out soon as I get folks setup. Also, I've secured a new community location and I've been pounding out some rough guidelines. Going to finish those and make sure the volunteers are fully on board with them before it launches. May prioritize that for fundie of the year discussion, scream if that interests you.

After all that #announcement fstdt.com blog

Rolling along with some parallel projects at work. I have the basics of the current iteration of .NET Identity working, and frankly don't need half the additional features at work, so I'm going to use that knowledge to build out the fuller version for the site including registration, password recovery and basic user functionality as I have time. Which should let me give people public admin access to see what I have, and then blow time on some admin interfaces before coming back around to do the interface cleaning. Depending on what time I have when I'll be in and out with updates.

That said, I have something resembling a personal life which is making this rather difficult to focus on so I'm glad I'm down to more bite sized chunks.

Back to work #announcement fstdt.com blog

Right, said I was going to post one of these each day. Well, I'm moving on to the vote counting part of the system which has some interesting bits, and aiming to get the user admin stuff done by the end of the day. I hope folks check out the preview build of the site that's out live, but right now let's talk about the vote system and old abuses.

If you look at the archives 2008 looks like a banner year, right? Maybe? Not exactly. The software that was in use at that point was kinda ass and someone more or less hijacked the public admin voting and the top 100 voting to organize the site as they wished by exploiting a few loopholes. I hacked closed the loopholes, booted the responsible party and recalculated the top 100. It was a pain in the ass and rather embarrassing that I only caught on when the top 100 had the top 5 items separated by single digit votes.

That's not going to happen again. The new voting systems are designed to ensure that it is not possible to vote more than once, like literally I cannot record more than one vote from a given IP on an account. But how does that stop them from running up the value and not being recorded? Simple, I'm not incrementing on vote, I'm counting up all the stored votes and re generating the score when a new vote is added. I've finished the public admin voting system yesterday and pretty much need user admin working before I can open it up publicly, and there's a thing with login not triggering or redirecting properly that I need to sort out before it's usable. But, what's important here is the design works and I'm already largely done with the ass end of the public rating voting, it's a matter of getting the front and middle parts working and hopefully deployed sometime this weekend for you all to abuse.

On a note, anyone have opinions on changing the Vote tags from "WTF!" and "meh"? I still like them a bit, but simple up and down or + and - seem more intuitive. Or does the content of the site lend itself to those reactions?

Anyway, assuming I get user admin done today I'm going to say it was good 30 hours of work on the site this week and screw off tomorrow, maybe doing a bit more this weekend, but I have some things going on. That said, I do have another week of vacation and no significant plans. Sure as hell won't be spending another full week on the site, but I should have plenty of time to get things handled, particularly with the help volunteers who have stepped up to take over the place.

Free Samples! #announcement fstdt.com blog

Sample Site is out!

Only took me three days longer than I hoped, and I just dicked around another half hour tuning the Latest Comments a bit, but here it is:

Test Site Ahoy!

Note the data is over a year old, and any submissions to it will be tossed with the test data. But if you want to see what I'm planning for an interface, or just want to select random fundie quotes from every month of may the site has had, it can do that. Click around a bit and yell at me if you break something, I've left the error messages full, so just give me the whole text in a comment here.

Humpday #announcement fstdt.com blog

Alright, today's goals are reasonably simple, get Public admin working, then look at quote rating voting. I think what I'm going to do is get a basic mechanic working now, and pile on ajax versions later. If I have spare time today I'm going to work on User Management and do some cleaning on the existing code. Assuming I finish this today the rest is improvements and admin functionality. Which is the easy shit since it all ties back into display mechanics I already have and 90% of the work is SQL that I can rattle off quickly.

That said, it does look like I'll have some work to do after the week is said and done. But this stuff looks manageable in shorter periods of time rather than being the kind of things I actually need a day for.

Monday, and I'm awake at five am, why? #announcement fstdt.com blog

Today I plan on working on:

Comment Driven quote listings
- Latest comment and any similar listings

Finishing user authentication by hooking into the database
- Cleaning up user DB while I'm at it
- Figuring how to migrate folks to a better password encryption

Quote and Comment Admin Edit pages

Review go to latest comment functionality

Review needs for Quote and Comment submissions
- Largely the edit pages, only with less security and more anti-spam and hand holding.
- Get, Redirect, Profit

Review needs for Comment Administration pages
- A generic listing mechanism would probably be useful here

Next page