• Somebody Shoot Me Please (unregistered)

    You haven't felt pain until you've seen someone write a lambda inside a normal function inside a lambda which was being passed around as a struct.

    If this man is your friend, please, shoot him. Shoot him now.

  • (cs)

    Okay, so now a dispatch table is considered a WTF. More and more it becomes obvious that the readers of TDWTF are TRWTF.

    But hey, it's a common symptom of never having programmed anything real in your life.

  • Jay (unregistered) in reply to frits
    frits:
    Who hasn't done something like this?

    Like, "Oh, don't be so judgemental. I suppose YOU'VE never killed anyone for kicks, huh?"

  • (cs) in reply to #TDWTFMafia #SOMafia
    #TDWTFMafia #SOMafia:
    Nagesh:
    Shiva:
    Nagesh:
    boog:
    I'm pretty sure I would have strangled the penguin before I got to the 4th NULL.

    What is strangling the penguin? Is this a BATMAN reference?

    Nagesh, dude, someone hacked your account yesterday.

    Idiot, Nobody has hacked my account. THere's one stalkher I have acquired, who insists on using my good name.

    One? We are legion and the coolest!

    TRWTF is SO.
  • Bob the Builder (unregistered)

    Should have used a null array

  • Troy (unregistered) in reply to whatamess

    Those who do not understand function pointers will recreate them badly.

  • (cs) in reply to Grown Man with a Van
    Grown Man with a Van:
    Hey, how come they don't do featured comments anymore?
    Because all the comments suck ass.
  • (cs) in reply to Nagesh
    Nagesh:
    #TDWTFMafia #SOMafia:
    Nagesh:
    Shiva:
    Nagesh:
    boog:
    I'm pretty sure I would have strangled the penguin before I got to the 4th NULL.

    What is strangling the penguin? Is this a BATMAN reference?

    Nagesh, dude, someone hacked your account yesterday.

    Idiot, Nobody has hacked my account. THere's one stalkher I have acquired, who insists on using my good name.

    One? We are legion and the coolest!

    Why???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

    Please do not reply with "WHY NOT".

    WHY NOT
  • (cs) in reply to Skip
    Skip:
    Sigh. There are 255 of them. 10 per line. Can you count to 10? What would you have them do? something like, in code, assign:

    SID[OP_START_DIAGNOSTIC] = &start_diagnostic_session;

    etc.? That's a really bad idea, because it's wasted space on a system where you're very likely counting bytes to fit all the code and data on a very small ROM, and it's simply unneeded.

    Well, I'd agree with you -- if they filled the array. For five entries, they'd be far better off with a different method. How 'bout 5 if()s :

         if(op == OP_START_DIAGNOSTIC)
            start_diagnostic_session(len, dataptr);
    

    Way more clear as to what it's doing, and a helluva lot smaller that wasting 512 (or 1024, depending on function pointer size) bytes on the sparely populated array.

  • (cs)

    Can't anyone read. TRWTF is right here:

    "In fact, here's a single line of code from one of the many layers."

    The formatting to make it readable screws up the WTF. There aren't 10 entries per line so you can easily find the 54th entry easily. It's all on one line. Nobody sane creates a vtable and puts all the entries on a single line.

    The fact that the junior programmer encountering this doesn't understand it is secondary.

  • NOT the original, ORIGINAL by (unregistered) in reply to jmucchiello
    jmucchiello:
    Can't anyone read. TRWTF is right here:

    "In fact, here's a single line of code from one of the many layers."

    The formatting to make it readable screws up the WTF. There aren't 10 entries per line so you can easily find the 54th entry easily. It's all on one line. Nobody sane creates a vtable and puts all the entries on a single line.

    The fact that the junior programmer encountering this doesn't understand it is secondary.

    Sorry, beg to differ (from the article): "Apparently, this structure is essential for passing information to other layers. Now if I only knew how it's supposed to do that..."

    The submitter had no idea what it was supposed to so, much less complain about the formatting, however I do agree with you that formatting this on one line is a WTF as well.

  • (cs) in reply to Yuppie
    Yuppie:
    Nagesh:
    Inside each small problem is a bigger one waiting to get out.

    Kind of like a reverse matryoshka doll from an evil parallel universe.

    Yes I did write that code in the Starbucks built on top of an ancient Native American burial ground ... why do you ask?

    I heard that before Starbucks built the store, they dug up all the bodies, pissed on them, then buried them again upside down.

    Reason? They don't know; they were drunk.

    -South Park

  • Englebart (unregistered) in reply to JamesCurran
    JamesCurran:
    Skip:
    Sigh. There are 255 of them. 10 per line. Can you count to 10? What would you have them do? something like, in code, assign:

    SID[OP_START_DIAGNOSTIC] = &start_diagnostic_session;

    etc.? That's a really bad idea, because it's wasted space on a system where you're very likely counting bytes to fit all the code and data on a very small ROM, and it's simply unneeded.

    Well, I'd agree with you -- if they filled the array. For five entries, they'd be far better off with a different method. How 'bout 5 if()s :

         if(op == OP_START_DIAGNOSTIC)
            start_diagnostic_session(len, dataptr);
    

    Way more clear as to what it's doing, and a helluva lot smaller that wasting 512 (or 1024, depending on function pointer size) bytes on the sparely populated array.

    I once saw a code block of 135 ifs like you are proposing that would have worked a LOT better as a struct of key + function pointer. This article is kind of the opposite case.

    My guess would be that MAX_NUM_SERVICE_IDENTIFIERS is the last member of an enum. Hopefully, every item in the enum is clearly documented somewhere.

    One advantage of this over many of the proposed fixes is deterministic,consistent execution time. Important if it is running on an embedded system or a slow CPU.

    This reminds of a OO chapter I read once where the author went through great pains to develop a complex double dynamic dispatch solution for a problem that could have easily and clearly been solved by a simple two dimensional array of function pointers!

  • Childish (unregistered) in reply to C3PO
    C3PO:
    Obviously, Brian does not understand C. He probably thinks it's like Java™, where references new arrays are initialized to [n]null[/b] or 0 (depending on type) automatically. In C, if you initialize a structure, it is filled with random bits and bytes. This could be a sparse array or a fixed-state machine, which should in either case contain a valid base-case value.

    I would think that a "real" C programmer would just use 0 here, but maybe that is TRWTF?

    A real C programmer would use memset() here.

    void *memset(void *s, int c, size_t n);

    /* set buff buffer to zeroes. */ memset(buff, 0, sizeof(buff));

  • (cs) in reply to Englebart
    Englebart:
    This reminds of a OO chapter I read once where the author went through great pains to develop a complex double dynamic dispatch solution for a problem that could have easily and clearly been solved by a simple two dimensional array of function pointers!
    Did the language(s) the book was written against even have function pointers?
  • Design Pattern (unregistered) in reply to Englebart
    Englebart:
    One advantage of this over many of the proposed fixes is deterministic,consistent execution time. Important if it is running on an embedded system or a slow CPU.
    There were not many fixes proposed, but even with this table there is a need for handling the NULL values (which could have been avoided by introducing a NOOP-function).

    Trimming the table to the actually required size (the highest index in use is 46) and populating it with a loop to init to NOOP, then set the five entries would have resulted in far less space required than this "solution".

  • (cs) in reply to RickD
    RickD:
    The best way to eliminate trolls is to ignore them, plain and simple.
    Actually, the best way to eliminate trolls is to have a system where moderators tag the troll posts and the system hides the tagged posts from everyone but the poster. The trolls don't realize they've been moderated, they just see that nobody is taking their bait. Eventually they go away because it's no fun for them.

    The downside is you have to require registration and logon to read posts.

    You're all wrong. This is the best way to get rid of trolls. I promise.

  • DEADBEEF (unregistered) in reply to Childish
    Childish:
    C3PO:
    Obviously, Brian does not understand C. He probably thinks it's like Java™, where references new arrays are initialized to [n]null[/b] or 0 (depending on type) automatically. In C, if you initialize a structure, it is filled with random bits and bytes. This could be a sparse array or a fixed-state machine, which should in either case contain a valid base-case value.

    I would think that a "real" C programmer would just use 0 here, but maybe that is TRWTF?

    A real C programmer would use memset() here.

    void *memset(void *s, int c, size_t n);

    /* set buff buffer to zeroes. */ memset(buff, 0, sizeof(buff));

    A real C programmer would have done it just like the article. Why waste time calling code, when you can use the compiler to initalize your data?
  • frits (unregistered) in reply to hoodaticus
    hoodaticus:
    RickD:
    The best way to eliminate trolls is to ignore them, plain and simple.
    Actually, the best way to eliminate trolls is to have a system where moderators tag the troll posts and the system hides the tagged posts from everyone but the poster. The trolls don't realize they've been moderated, they just see that nobody is taking their bait. Eventually they go away because it's no fun for them.

    The downside is you have to require registration and logon to read posts.

    You're all wrong. This is the best way to get rid of trolls. I promise.
    I'm pretty sure you'd go to prison for life in any U.S. state if you tried to implement that policy.

    Your not too bright, are you?

  • foo (unregistered)

    Huh?

    • The title reads "The Interface".

    • The text talks about layers and layers and layers.

    • The code sample is a (poorly implemented, unless autogenerated) dispatch table.

    What's happened to the idea that title, text and code should, uhm, have something to do with each other?

    Seems like TDWTF is TRWTF. Did you srew up your SQL to randomly select an item from GENERIC_TITLE, USER_STORY and CODE_SAMPLE? Alright, I'll stop now. I guess I shouldn't be too harsh; you're probably still rebuilding your database.

  • NOT the original, ORIGINAL by (unregistered) in reply to frits
    frits:
    hoodaticus:
    RickD:
    The best way to eliminate trolls is to ignore them, plain and simple.
    Actually, the best way to eliminate trolls is to have a system where moderators tag the troll posts and the system hides the tagged posts from everyone but the poster. The trolls don't realize they've been moderated, they just see that nobody is taking their bait. Eventually they go away because it's no fun for them.

    The downside is you have to require registration and logon to read posts.

    You're all wrong. This is the best way to get rid of trolls. I promise.
    I'm pretty sure you'd go to prison for life in any U.S. state if you tried to implement that policy.

    Your not too bright, are you?

    Man, that gets boring really fast... I'm curious what the payload-to-troll content ratio currently is. I'm pulling a magic out-of-my-ass number and say it's at least 50/50.

  • foo (unregistered) in reply to NOT the original, ORIGINAL by
    NOT the original:
    Man, that gets boring really fast... I'm curious what the payload-to-troll content ratio currently is. I'm pulling a magic out-of-my-ass number and say it's at least 50/50.
    At least? So you mean, there's 50 percent or more useful content? I thought it was more like 10/90 or less.
  • NOT the original, ORIGINAL by (unregistered) in reply to foo
    foo:
    NOT the original:
    Man, that gets boring really fast... I'm curious what the payload-to-troll content ratio currently is. I'm pulling a magic out-of-my-ass number and say it's at least 50/50.
    At least? So you mean, there's 50 percent or more useful content? I thought it was more like 10/90 or less.

    Hey now, lets not get out of hand here. Nobody said useful content, I just said at least 50% is non-trolling. This could mean actual useful content or someone smashing their fish on a keyboard for 10 seconds before hitting the submit button.

  • DOA (unregistered) in reply to NOT the original, ORIGINAL by
    NOT the original:
    foo:
    NOT the original:
    Man, that gets boring really fast... I'm curious what the payload-to-troll content ratio currently is. I'm pulling a magic out-of-my-ass number and say it's at least 50/50.
    At least? So you mean, there's 50 percent or more useful content? I thought it was more like 10/90 or less.

    Hey now, lets not get out of hand here. Nobody said useful content, I just said at least 50% is non-trolling. This could mean actual useful content or someone smashing their fish on a keyboard for 10 seconds before hitting the submit button.

    hndsafhflk;hds;lfkhodsioudsuhniks ujmdfpdsisd098u9dfsa-]9sadfs9yh[0fsasa bsda0 f dsfba

  • NOT the original, ORIGINAL by (unregistered) in reply to DOA
    DOA:
    NOT the original:
    foo:
    NOT the original:
    Man, that gets boring really fast... I'm curious what the payload-to-troll content ratio currently is. I'm pulling a magic out-of-my-ass number and say it's at least 50/50.
    At least? So you mean, there's 50 percent or more useful content? I thought it was more like 10/90 or less.

    Hey now, lets not get out of hand here. Nobody said useful content, I just said at least 50% is non-trolling. This could mean actual useful content or someone smashing their fish on a keyboard for 10 seconds before hitting the submit button.

    hndsafhflk;hds;lfkhodsioudsuhniks ujmdfpdsisd098u9dfsa-]9sadfs9yh[0fsasa bsda0 f dsfba

    See! We need moar of this! ^^

  • (cs) in reply to Skip
    Skip:
    pjt33:
    Having to count the NULLs to check that functions are in the right positions is not fun. It's fundamentally another form of magic number.

    Sigh. There are 255 of them. 10 per line. Can you count to 10? What would you have them do? something like, in code, assign:

    SID[OP_START_DIAGNOSTIC] = &start_diagnostic_session;

    etc.? That's a really bad idea, because it's wasted space on a system where you're very likely counting bytes to fit all the code and data on a very small ROM, and it's simply unneeded. If this kind of thing bothers you, stay the heck away from embedded systems.

    Yes. And if the optimising compiler (they do exist for C, right?) can't produce optimal code, then I would look at how to do it with a preprocessor. When I write programs for the Java4k competition, which imposes a tight constraint on code size, I expect to put a moderate amount of effort into writing scripts which turn source I can maintain into source which produces the shortest output.

  • (cs) in reply to hoodaticus
    hoodaticus:
    RickD:
    The best way to eliminate trolls is to ignore them, plain and simple.
    Actually, the best way to eliminate trolls is to have a system where moderators tag the troll posts and the system hides the tagged posts from everyone but the poster. The trolls don't realize they've been moderated, they just see that nobody is taking their bait. Eventually they go away because it's no fun for them.

    The downside is you have to require registration and logon to read posts.

    You're all wrong. This is the best way to get rid of trolls. I promise.

    That makes as much sense as the code posted in this WTF.

  • Aris (unregistered)

    Perfectly acceptable as long as you comment your NULLs so you can find out where to add the new ones. http://git.libssh.org/projects/libssh.git/tree/src/packet.c

    And this is way better code than wrapping everything in a huge switch/case. At least you can see the unimplemented packets.

  • Jenkins (unregistered) in reply to NOT the original, ORIGINAL by
    NOT the original:
    DOA:
    NOT the original:
    foo:
    NOT the original:
    Man, that gets boring really fast... I'm curious what the payload-to-troll content ratio currently is. I'm pulling a magic out-of-my-ass number and say it's at least 50/50.
    At least? So you mean, there's 50 percent or more useful content? I thought it was more like 10/90 or less.

    Hey now, lets not get out of hand here. Nobody said useful content, I just said at least 50% is non-trolling. This could mean actual useful content or someone smashing their fish on a keyboard for 10 seconds before hitting the submit button.

    hndsafhflk;hds;lfkhodsioudsuhniks ujmdfpdsisd098u9dfsa-]9sadfs9yh[0fsasa bsda0 f dsfba

    See! We need moar of this! ^^

    You mean sock puppeteering?

  • NOT the original, ORIGINAL by (unregistered) in reply to Jenkins
    Jenkins:
    NOT the original:
    DOA:
    NOT the original:
    foo:
    NOT the original:
    Man, that gets boring really fast... I'm curious what the payload-to-troll content ratio currently is. I'm pulling a magic out-of-my-ass number and say it's at least 50/50.
    At least? So you mean, there's 50 percent or more useful content? I thought it was more like 10/90 or less.

    Hey now, lets not get out of hand here. Nobody said useful content, I just said at least 50% is non-trolling. This could mean actual useful content or someone smashing their fish on a keyboard for 10 seconds before hitting the submit button.

    hndsafhflk;hds;lfkhodsioudsuhniks ujmdfpdsisd098u9dfsa-]9sadfs9yh[0fsasa bsda0 f dsfba

    See! We need moar of this! ^^

    You mean sock puppeteering?

    Unfortunately, the end result of too much trolling is that everybody thinks that everybody else is trolling, always. It's like the whole forum has gone paranoid-schizophrenic. Hearing and seeing trolls when there isn't any, etc.

    (In case I wasn't clear enough, I'm not sock-puppeteering)

  • (cs)

    It would be so easy, if everyone registered. This unregistered commentating is driving up the troll ratio.

    For the record, I am not against trolls if they happen to be witty. One troll who has tried to be witty from time to time is hoodacticus.

    If you are going to troll, be an entertaining troll. Don't be stick in mud garden vareity troll.

  • dhromed (unregistered) in reply to Nagesh
    Nagesh:
    It would be so easy, if everyone registered. This unregistered commentating is driving up the troll ratio.

    For the record, I am not against trolls if they happen to be witty. One troll who has tried to be witty from time to time is hoodacticus.

    If you are going to troll, be an entertaining troll. Don't be stick in mud garden vareity troll.

    Hey Hoodaticus, with friends likes this...

  • ¢ÃƒÆ’ĉۮ(unregistered) in reply to Nagesh
    Nagesh:
    It would be so easy, if everyone registered. This unregistered commentating is driving up the troll ratio.

    For the record, I am not against trolls if they happen to be witty. One troll who has tried to be witty from time to time is hoodacticus.

    If you are going to troll, be an entertaining troll. Don't be stick in mud garden vareity troll.

    No, Nagesh, you are not an entertaining troll. Stop wishing that you could be a "good" troll.

  • (cs) in reply to Nagesh
    Nagesh:
    One troll who has tried to be witty from time to time is hoodacticus.
    Tried and succeeded. Good job hoodie! (btw, can I call you hoodie? how about hoodarino?)
  • Abso (unregistered) in reply to ¢ÃƒÆ’ƒâ€Ãâ€
    ¢ÃƒÆ’ƒâ€Ãâ€:
    Nagesh:
    It would be so easy, if everyone registered. This unregistered commentating is driving up the troll ratio.

    For the record, I am not against trolls if they happen to be witty. One troll who has tried to be witty from time to time is hoodacticus.

    If you are going to troll, be an entertaining troll. Don't be stick in mud garden vareity troll.

    No, Nagesh, you are not an entertaining troll. Stop wishing that you could be a "good" troll.

    But he's registered, so clearly he's not part of the problem at all.

  • Bert Glanstron (unregistered) in reply to Nagesh
    Nagesh:
    Bert Glanstron:
    Dear Nagesh,
    In case you can’t tell, this is a grown-up place. The 
    fact that you insist on using your ridiculous fake handle 
    clearly shows that you’re too young and too stupid 
    to be using thedailywtf.com
    
    Go away and grow up. 
    
    Sincerely, 
    Bert Glanstron
    
    It would be so easy, if everyone registered.
    Dear admins,

    The feed clearly indicates that no handles are allowed. I insist that Nagesh be cut from thedailywtf.com completely.

    Sincerely, Bert Glanstron

  • (cs) in reply to Nagesh
    Nagesh:
    hoodaticus:
    RickD:
    The best way to eliminate trolls is to ignore them, plain and simple.
    Actually, the best way to eliminate trolls is to have a system where moderators tag the troll posts and the system hides the tagged posts from everyone but the poster. The trolls don't realize they've been moderated, they just see that nobody is taking their bait. Eventually they go away because it's no fun for them.

    The downside is you have to require registration and logon to read posts.

    You're all wrong. This is the best way to get rid of trolls. I promise.

    That makes as much sense as the code posted in this WTF.

    As with the code posted here, it helps if you know the language.

  • (cs) in reply to boog
    boog:
    Nagesh:
    One troll who has tried to be witty from time to time is hoodacticus.
    Tried and succeeded. Good job hoodie! (btw, can I call you hoodie? how about hoodarino?)
    Thanks, boog! You're one of my few favorites on here, and you can call me whatever you want.
  • All Females (unregistered) in reply to hoodaticus
    hoodaticus:
    boog:
    Nagesh:
    One troll who has tried to be witty from time to time is hoodacticus.
    Tried and succeeded. Good job hoodie! (btw, can I call you hoodie? how about hoodarino?)
    Thanks, boog! You're one of my few favorites on here, and you can call me whatever you want.
    *gag*
  • Tracy Morgan (unregistered) in reply to All Females
    All Females:
    hoodaticus:
    boog:
    Nagesh:
    One troll who has tried to be witty from time to time is hoodacticus.
    Tried and succeeded. Good job hoodie! (btw, can I call you hoodie? how about hoodarino?)
    Thanks, boog! You're one of my few favorites on here, and you can call me whatever you want.
    *gag*

    gurkle gulkle gurkle GACK!

  • NOT the original, ORIGINAL by (unregistered) in reply to hoodaticus
    hoodaticus:
    Nagesh:
    hoodaticus:
    RickD:
    The best way to eliminate trolls is to ignore them, plain and simple.
    Actually, the best way to eliminate trolls is to have a system where moderators tag the troll posts and the system hides the tagged posts from everyone but the poster. The trolls don't realize they've been moderated, they just see that nobody is taking their bait. Eventually they go away because it's no fun for them.

    The downside is you have to require registration and logon to read posts.

    You're all wrong. This is the best way to get rid of trolls. I promise.

    That makes as much sense as the code posted in this WTF.

    As with the code posted here, it helps if you know the language.

    QFT

  • (cs) in reply to Steve The Cynic
    Steve The Cynic:
    Ok, the arrangement of entries is a little wanked, mostly because the names of the functions aren't the same length in the source code as NULL is, but there's nothing particularly wrong with this.

    The declaration is confusing because, although it is accurately declared as an array of constant pointers to functions receiving const u8 * and (const) u16 and returning void, it is unusual to see an array of function pointers declared in a single step like this. I wrote my first C program 26 years ago (and have been writing them ever since, as well as C++, Fortran, assembler, Pascal, VB, Python, OPL, and a few other oddments), and it took me a moment to work out where the "const" was supposed to be binding.

    Other than that, and a lack of hint comments showing what the programmer thinks the indexes are, it's not so bad.

    I agree. The biggest problem is the lack of documentation. Otherwise, this is a straight forward dispatching construct. Constructs like these are how "your" favorite OO language map objects to methods.

    TRWTF is that people still believe the Gang of Four's treatise on organizing code. Properly implemented (and that includes documentation, at least through descriptive names and notes on name semantics), customized control structures are the easiest to maintain. This is especially true in languages with strong type systems, where you can get the compiler to literally derive the glue code from the logic code. (See "Djinn", for example. It's not tied to a particular compiler, but it will derive free theorems for Haskell types (a.k.a glue code))

  • powerlord (unregistered) in reply to All Females
    All Females:
    hoodaticus:
    boog:
    Nagesh:
    One troll who has tried to be witty from time to time is hoodacticus.
    Tried and succeeded. Good job hoodie! (btw, can I call you hoodie? how about hoodarino?)
    Thanks, boog! You're one of my few favorites on here, and you can call me whatever you want.
    *gag*
    Yeah right. Like there are females that read TDWTF comments.
  • fruits (unregistered) in reply to Nagesh
    Nagesh:
    It would be so easy, if everyone registered. This unregistered commentating is driving up the troll ratio.

    ...

    If you are going to troll, be an entertaining troll. Don't be stick in mud garden vareity troll.

    The comedy here is so sweet, I think I'll be skipping lunch today

  • All Females (unregistered) in reply to powerlord
    powerlord:
    All Females:
    hoodaticus:
    boog:
    Nagesh:
    One troll who has tried to be witty from time to time is hoodacticus.
    Tried and succeeded. Good job hoodie! (btw, can I call you hoodie? how about hoodarino?)
    Thanks, boog! You're one of my few favorites on here, and you can call me whatever you want.
    *gag*
    Yeah right. Like there are females that read TDWTF comments.
    It's true! Oprah just put TDWTF comments on her book club!
  • BK (unregistered)

    trivial. It's a vtable implementation in C and these NULLs are pointers to (abstract) virtual functions. Someone must have hated C++ so much they decided to rewrite it in C.

  • rfoxmich (unregistered)

    TRWFT is that there isn't really a WTF in this article...just a function dispatch table.

  • smxlong (unregistered)

    It is obvious you are all TRWTF more and more everyday. obsly this is the only brillant way to implement a table of static multiconstructor abstract classes through the use of lambdas in an embedded device with no file system. othrwse, you'll only get FILE_NOT_FOUNDS

  • Lingerance (unregistered) in reply to BK
    BK:
    trivial. It's a vtable implementation in C and these NULLs are pointers to (abstract) virtual functions. Someone must have hated C++ so much they decided to rewrite it in C.

    Implementing your own vtable in C is stupid since you almost always get a C++ compiler to go with your C compiler.

  • (cs) in reply to All Females
    All Females:
    hoodaticus:
    boog:
    Nagesh:
    One troll who has tried to be witty from time to time is hoodacticus.
    Tried and succeeded. Good job hoodie! (btw, can I call you hoodie? how about hoodarino?)
    Thanks, boog! You're one of my few favorites on here, and you can call me whatever you want.
    *gag*

    You win "The lamest handle in WTF." award.

Leave a comment on “The Interface”

Log In or post as a guest

Replying to comment #:

« Return to Article