Fruity Loop

« Return to Article
  • Steve The Cynic 2012-07-30 10:18
    So did the hero impale the idiot on the unicorn's horn?
  • Bob Freeman 2012-07-30 10:28
    Not Frist.
  • Herwig 2012-07-30 10:29
    Huh? WTF? How do you implement progress bars?
  • Twilight Sparkle 2012-07-30 10:29
    A sparkling unicorn? My pony senses are tingling... :)
  • GoodtimesSnuggler 2012-07-30 10:32
    I think I speak on behalf of everyone.

    We need that gif.

    Seriously.
  • Matt 2012-07-30 10:33
    Paragraph four: "produly" = "proudly"
  • wonk 2012-07-30 10:36
    Well, at least the code reviews don't end in:

    My eyes! The goggles! They do nothing!
  • Give me your name first, then I'll give you mine 2012-07-30 10:37
    merging document structure and implementation code in the same file _was a terrible idea_. Classic ASP was a bad thing, even by the standards of its day.


    So, by your standards PHP is also terrible. I'm not complaining - just verifying that your logic is consistent.
  • Andrew 2012-07-30 10:40
    Give me your name first, then I'll give you mine:
    merging document structure and implementation code in the same file _was a terrible idea_. Classic ASP was a bad thing, even by the standards of its day.


    So, by your standards PHP is also terrible. I'm not complaining - just verifying that your logic is consistent.


    There's still debate about that??
  • qazwsx 2012-07-30 10:43
    Give me your name first, then I'll give you mine:
    merging document structure and implementation code in the same file _was a terrible idea_. Classic ASP was a bad thing, even by the standards of its day.


    So, by your standards PHP is also terrible. I'm not complaining - just verifying that your logic is consistent.


    There are people who think PHP isn't terrible?
  • Remy Porter 2012-07-30 10:45
    PHP has frameworks that allow you to not merge implementation and document structure. But PHP, as usually used, is friggin' terrible. It's Classic ASP with PERL-like syntax, which is roughly equivalent to the product of a forced mating between a hippopotamus and a duck-billed platypus.

    Which language matches which organism can be left as an exercise to the reader.
  • Jens 2012-07-30 10:47
    Well, it is a good idea. Not the unicorn part, that is more a matter of taste. But slowing down processing to enhance the UX may sound like a sin to engineers but often it is really helping the customer to understand what happens. Not automatically the best solution here, but sounds reasonable to me.
  • YR 2012-07-30 10:51
    TRWTF is that the file was not URL-encoded after the fancy file upload GIF being shown by client-side JS...

    ...but that would make the client's browser work. Nah, the server must to do it! He have to show his worth!
  • YR 2012-07-30 10:53
    I'm sorry, TRWTF is Jens.
  • pitchingchris 2012-07-30 10:54
    Jens:
    Well, it is a good idea. Not the unicorn part, that is more a matter of taste. But slowing down processing to enhance the UX may sound like a sin to engineers but often it is really helping the customer to understand what happens. Not automatically the best solution here, but sounds reasonable to me.


    I know nothing of web development, but surely there's a way to do the delay on the client end for the sake of animation. What if a different function wanted to upload a file and they don't want no spiffy animation. Now it takes them all the extra time to get files uploaded because there's some ui delays in the server end.
  • Nagesh 2012-07-30 10:55
    Unicorn is making story more cornier. I think this is the story of Remy and his boss.
  • Le Forgeron 2012-07-30 10:55
    Herwig:
    Huh? WTF? How do you implement progress bars?


    The old way of web 1.0: with an animated gif

    Each frame of the gif is part of the progressing bar... and loop forever, just in case it take longer than expected by the timer in the animated gif.

    It's similar to the Remaining Time: 10s, 2 hours, 8 s, 5 days... of some downloading browsers.

    I second the motion: we need that gif.
  • @Deprecated 2012-07-30 11:04
    GoodtimesSnuggler:
    I think I speak on behalf of everyone.

    We need that gif.

    Seriously.


    Finally, we'll have something to stick it to that nyan cat.
  • Some Jerk 2012-07-30 11:04
    I find it funny how every wtf article ends up with people claiming one language or another is the WTF. It is surprising that one of the largest commonalities among developers (and the distinction between inferior developers and good ones) is that they are all brashly convinced that the coding language they choose to use is the single best solution and all other languages, platforms and technologies are inferior.

    I, for one, will use any language to equal effect (except cold fusion... but that is OBVIOUSLY not designed for professional use... or Flash, which is clearly modeled for designers and not programmers... and other such tools that are obviously inappropriate). In my experience, I have seen JSP and ASP.NET websites perform the same functionality with a lower performance threshold as vbscript or php websites... due to the inexperience or stupdity of the coder. They were probably fools that were simply using a technology they didn't understand because some idiot convinced them that it was best.

    Hopefully.. my fellow developers will move forward and judge the quality of the code and not their enthusiasm for the technology exectuting it.

    CAPTCHA : consequat - when cause and effect turns you into a vegetable?
  • Some Jerk 2012-07-30 11:06
    [quote user="Some Jerk"]I find it funny how every wtf article ends up with people claiming one language or another is the WTF....quote]

    wow... sorry for all of them typos! I am trying to multi-task... and not doing so well at it I suppose
  • TheSHEEEP 2012-07-30 11:06
    Nice unicorns you have there :D
  • Remy Porter 2012-07-30 11:08
    "I think it's foolish to look down on any language except this one that I look down on."

    LULZ.

    When you get down to it, each language is exactly the same- they're all (or mostly all) Turing Complete, and hence can be used to solve any problem. But there's a difference between being able to solve a problem and their ability to solve a problem elegantly.

    Mixing implementation with document structure is bad, unless you actually validate them both (like Razor syntax). And Razor isn't really implementation- it's letting you define document structure programmaticly, but it's entirely, 100% about doing document structure.
  • Nagesh 2012-07-30 11:12
    I look down on all languages includes English.
  • Some Jerk 2012-07-30 11:21
    Remy Porter:
    "I think it's foolish to look down on any language except this one that I look down on."

    LULZ.

    When you get down to it, each language is exactly the same- they're all (or mostly all) Turing Complete, and hence can be used to solve any problem. But there's a difference between being able to solve a problem and their ability to solve a problem elegantly.

    Mixing implementation with document structure is bad, unless you actually validate them both (like Razor syntax). And Razor isn't really implementation- it's letting you define document structure programmaticly, but it's entirely, 100% about doing document structure.


    1. Didn't say I look down on other languages... just said that I choose not to use the ones that are not designed for my role. I don't look down on Flash and Cold Fusion... they just are designed with a different intent in mind... and one that is incompatible with what I do (professionally speaking).

    2. I agree about the implimentation strategies... but most of the major development platforms do have advantages... and ways to utilize them to maximum effect. Most of them also have ways that a novice can do what they are attempting and produce unintended results. I just look down on the developers that seem to equate learning something new with an indication that they may be inferior and therefore judge all that they do not know as being inferior instead.
  • WC 2012-07-30 11:28
    I'm not sure what the WTF is supposed to be. This is actually something that is done and works.

    People want to feel that something is happening, and computers often do it really fast. Slowing it down makes them think it worked harder. One of the major tax companies does this with their online tax software. It spends like 5 seconds 'loading' my account, when I know good and well that it's already loaded when I logged in.

    I've heard other usability stories that say their customer opinion improved when they showed a loading bar in certain places that it was expected, instead of just doing things fast.

    If there's any real WTF here, it's people. And not the one who implemented the loading bar here.
  • Zylon 2012-07-30 11:29
    Given who anonymized this article, I very strongly doubt that the animated GIF in question was actually of a unicorn.
  • Remy Porter 2012-07-30 11:30
    And PHP was designed with a different intent in mind- because it couldn't possibly have been designed to be a modern web development language.

    PHP, like Flash and Cold Fusion, isn't fit-for-purpose. Its popularity arises, not from any inherent quality of the language, but because of the prevalence of its deployment on cheap web hosts.

    I'll say this much: PHP is better than using CGI to do web development.
  • iToad 2012-07-30 11:34
    Remy Porter:
    "...But there's a difference between being able to solve a problem and their ability to solve a problem elegantly..."


    I am so going to steal this.
  • Some Jerk 2012-07-30 11:35
    WC:
    I'm not sure what the WTF is supposed to be. This is actually something that is done and works.

    People want to feel that something is happening, and computers often do it really fast. Slowing it down makes them think it worked harder. One of the major tax companies does this with their online tax software. It spends like 5 seconds 'loading' my account, when I know good and well that it's already loaded when I logged in.

    I've heard other usability stories that say their customer opinion improved when they showed a loading bar in certain places that it was expected, instead of just doing things fast.

    If there's any real WTF here, it's people. And not the one who implemented the loading bar here.


    it is actually quite simple... but one of those things that you improve on over time. For one thing... the progress graphic should have been small enough to load more quickly. Secondly, if it was a real progress bar, it might have ajaxed the status, or used a similar means of retrieving that information. Finally, The server process should not have been tied up longer than necessary. If need be, report a success / fail and use javascript to forward the user on after an interval. Windows Server 2000 and before will only process a limited number of concurrent requests ... and even classic asp implimentation on later servers have some limitations in that regard. Hanging a thread for 15 seconds unnecessarily will have consiquences.

    CAPTCHA: esse - Hooked on Phonics is very esse to use!
  • Ayn Rand's Ghost! 2012-07-30 11:36
    Nagesh:
    I look down on all languages includes English.


    If I were to speak your kind of language, I would say that man's only moral commandment is: Thou shalt think. But a 'moral commandment' is a contradiction in terms. The moral is the chosen, not the forced; the understood, not the obeyed. The moral is the rational, and reason accepts no commandments
  • Some Jerk 2012-07-30 11:43
    Remy Porter:
    And PHP was designed with a different intent in mind- because it couldn't possibly have been designed to be a modern web development language.

    PHP, like Flash and Cold Fusion, isn't fit-for-purpose. Its popularity arises, not from any inherent quality of the language, but because of the prevalence of its deployment on cheap web hosts.

    I'll say this much: PHP is better than using CGI to do web development.


    PHP is designe daround the idea of text templating with code infrastructure behind it. Though it is certainly incompatable with my typical development workflow, I acknowledge that for plain text rendering it is an innovative approach. PHP also uses true standard coding architectures while not removing the intent... which is to create a template that represents the desired output.

    It is not my favorite language... but I must acknowledge that it has its' strengths. Consider ASP.NET, which I use 70-80% of my time over the past decade. It originated with the intent to obfiscate the distinction between client and server in order to deploy a code structure... which I always despised. MVC provided a more elegant way of bringing code to an application... and if anything the entire platform became MORE similar to php.

    Not saying that you are wrong... just saying that this is a matter of perspective. The tools that I don't use are typically developed for people who are not me... designers or prototypers or other such critters. But php, unlike any other web hosting platform, was designed ONLY for web development.
  • C-Octothorpe 2012-07-30 11:45
    Nagesh:
    I look down on all languages includes English.
    It only took a few years, but you finally said something funny!
  • F 2012-07-30 11:45
    Ayn Rand's Ghost!:
    Nagesh:
    I look down on all languages includes English.


    If I were to speak your kind of language, I would say that man's only moral commandment is: Thou shalt think. But a 'moral commandment' is a contradiction in terms. The moral is the chosen, not the forced; the understood, not the obeyed. The moral is the rational, and reason accepts no commandments


    Wot?
  • Andrew 2012-07-30 11:45
    pitchingchris:
    Jens:
    Well, it is a good idea. Not the unicorn part, that is more a matter of taste. But slowing down processing to enhance the UX may sound like a sin to engineers but often it is really helping the customer to understand what happens. Not automatically the best solution here, but sounds reasonable to me.


    I know nothing of web development, but surely there's a way to do the delay on the client end for the sake of animation. What if a different function wanted to upload a file and they don't want no spiffy animation. Now it takes them all the extra time to get files uploaded because there's some ui delays in the server end.


    Or, even better, preload the animation. The user is going to have to go find the file to upload anyway, may as well use that time to load the progress bar graphics rather then wait until after they have already found it and stick a useless delay in.
  • Nagesh 2012-07-30 11:46
    C-Octothorpe:
    Nagesh:
    I look down on all languages includes English.
    It only took a few years, but you finally said something funny!


    It only took a few years, but you finally got a joke.
  • Zylon 2012-07-30 11:52
    Nagesh:
    It only took a few years, but you finally got a joke.

    No, "Nagesh" really is tediously unfunny 99% of the time. About the only thing this persona consistently succeeds at is being annoying. If that's what you're going for, well... sucks to be you.
  • Andrew 2012-07-30 11:52
    Remy Porter:
    When you get down to it, each language is exactly the same- they're all (or mostly all) Turing Complete, and hence can be used to solve any problem.


    Can we please stop repeating this vacuous truth? Turing-completeness only applies if you're willing to dedicate an unbounded amount of memory and wait an unbounded length of time for your solution.

    Problems in the real world come with hardware, time, and programming effort constraints, so no, just because a language is Turing-complete does not mean it can be used to solve any problem.
  • HS 2012-07-30 11:56
    Hurrah - the first time in an article by Remy that I guessed the Cornify word first time!

    Captcha: iusto - two levels higher than gusto.
  • C-Octothorpe 2012-07-30 11:56
    Nagesh:
    C-Octothorpe:
    Nagesh:
    I look down on all languages includes English.
    It only took a few years, but you finally said something funny!


    It only took a few years, but you finally got a joke.
    If recycling "can I haz teh codez" jokes ad nauseum is "funny", then I am grateful that it took me this long to get it...
  • Remy Porter 2012-07-30 11:56
    Doing templating with code infrastructure behind it is one of the fastest ways to generate unmaintainable spaghetti code.

    WebForms is also terrible, although for different reasons (look at Node.js to see how event-driven web programming is done correctly). I'm fairly certain Alex built this site in WebForms, but that doesn't change the fact that WebForms was hideous and makes the dolphins cry.

    PHP was designed for web development, in theory, but given the core design decision was that it should mix code and document in a single file, it is not good for web development. You can make it good for web development by never using it the way it was designed, but once you leave a certain level of small scale applications, you're going to bump into serious problems with the PHP architecture.

    Code is code. Document/presentation is document/presentation. You shouldn't mix them any more than you should put data access code in your view classes.
  • Remy Porter 2012-07-30 11:58
    It certainly can- it just might not be useful for doing it in practice. I think it's an important truth, because it forces you to identify the elements that are the same in every language. Programming is programming, and once you understand how to program, the choice of language is based on the problem you're trying to solve.
  • onitake 2012-07-30 12:00
    GoodtimesSnuggler:
    We need that gif.


    That.
  • Some Jerk 2012-07-30 12:06
    Remy Porter:
    Doing templating with code infrastructure behind it is one of the fastest ways to generate unmaintainable spaghetti code.

    WebForms is also terrible, although for different reasons (look at Node.js to see how event-driven web programming is done correctly). I'm fairly certain Alex built this site in WebForms, but that doesn't change the fact that WebForms was hideous and makes the dolphins cry.

    PHP was designed for web development, in theory, but given the core design decision was that it should mix code and document in a single file, it is not good for web development. You can make it good for web development by never using it the way it was designed, but once you leave a certain level of small scale applications, you're going to bump into serious problems with the PHP architecture.

    Code is code. Document/presentation is document/presentation. You shouldn't mix them any more than you should put data access code in your view classes.


    Spoken like a true enterprise developer. Have you forgotten that for every website with a complex business model, there are nearly 100 which require only a handful of basic CRUD operations?

    I have never liked the implementations of enterprise applications in php... I agree with you on that. But on smaller, or more basic scale web applications, and most especially communication portals and such... it is appropriate to the task and does not become combersome to modify even without the abstraction between automation and presentation. I think the comment about "choosing what is appropriate to the task" is a much better definition than deciding that php is no longer good for websites.
  • Remy Porter 2012-07-30 12:12
    There are lighter, simpler, and more developer friendly programming frameworks than PHP.

    You can write good, easy to maintain applications in PHP. I've done a bunch. PHP handles the CRUD operations, and the UI is implemented in pure HTML/JavaScript, and they communicate over a RESTful API.

    PHP is fine- if you don't use it the way it was designed.
  • pantsman 2012-07-30 12:16
    TRWTF is not using a Data URI for the GIF, so that it would not need to be downloaded.
  • Some Jerk 2012-07-30 12:18
    And that is the test of a TRUE developer. I (for one) don't make any specific point to use anything exactly in the way that it was intended. Programming is like math... the more complex the expression is, the more paths there are to a solution. It is silly to think that every possible path has been used in the first place. I take enjoyment in finding a hidden trail that nobody uses... perhaps not for the purpose of adding it to future implimentations of code... but more in the spirit of discovering new potential in my tools.
  • D-Coder 2012-07-30 12:26
    Nagesh:
    C-Octothorpe:
    Nagesh:
    I look down on all languages includes English.
    It only took a few years, but you finally said something funny!


    It only took a few years, but you finally got a joke.
    "Joke"??? Is that what you've been trying to do all these years?

    Jebus on a pogo stick, you really should have told us. Cuz your jokes are... well... not funny. At all. Non-epic but complete fail.
  • dgvid 2012-07-30 12:29
    Jens:
    Well, it is a good idea. Not the unicorn part, that is more a matter of taste. But slowing down processing to enhance the UX may sound like a sin to engineers but often it is really helping the customer to understand what happens. Not automatically the best solution here, but sounds reasonable to me.

    In principle, this is absolutely correct. However, making a small upload take 15 seconds does cross the line into a WTF.
  • Brian 2012-07-30 12:45
    Remy Porter:
    PHP has frameworks that allow you to not merge implementation and document structure. But PHP, as usually used, is friggin' terrible. It's Classic ASP with PERL-like syntax, which is roughly equivalent to the product of a forced mating between a hippopotamus and a duck-billed platypus.

    Which language matches which organism can be left as an exercise to the reader.


    A smooshed Platypus?
  • C-Octothorpe 2012-07-30 12:52
    Remy Porter:
    a forced mating between a hippopotamus and a duck-billed platypus
    can i haz teh mpegs

    Filed under: hawt
  • Some Jerk 2012-07-30 13:00
    Brian:
    Remy Porter:
    PHP has frameworks that allow you to not merge implementation and document structure. But PHP, as usually used, is friggin' terrible. It's Classic ASP with PERL-like syntax, which is roughly equivalent to the product of a forced mating between a hippopotamus and a duck-billed platypus.

    Which language matches which organism can be left as an exercise to the reader.


    A smooshed Platypus?


    A Flatypus
  • PiisAWheeL 2012-07-30 13:06
    Some Jerk:
    Brian:
    Remy Porter:
    PHP has frameworks that allow you to not merge implementation and document structure. But PHP, as usually used, is friggin' terrible. It's Classic ASP with PERL-like syntax, which is roughly equivalent to the product of a forced mating between a hippopotamus and a duck-billed platypus.

    Which language matches which organism can be left as an exercise to the reader.


    A smooshed Platypus?


    A Flatypus
    Depends: Who's on top?
  • Some Jerk 2012-07-30 13:10
    I just can't picture a platypus climbing like that.
  • Joe 2012-07-30 13:18
    Some Jerk:

    1. Didn't say I look down on other languages... just said that I choose not to use the ones that are not designed for my role. I don't look down on Flash and Cold Fusion... they just are designed with a different intent in mind... and one that is incompatible with what I do (professionally speaking).

    Most programming languages are incompatible with professional speaking.

    I mean, who in their right mind would speak Java and have to end every statement with a ; ?

    Or Python, where much of the meaning of your words is held in the silence between them?

    Or Perl, which would be indistinguishable from static?

    Or VB/PHP/pickyourWTF, which would be indistiguishable from Tourette's syndrome?

    Professional speaking is much better handled in a language like Klingon. You haven't truly heard a powerpoint presentation until you've heard it in the original Klingon.

    --Joe
  • danielpauldavis 2012-07-30 13:27
    My eyes! The giggles do nothing!
  • dogmatic 2012-07-30 13:28
    Some Jerk:
    I find it funny how every wtf article ends up with people claiming one language or another is the WTF. It is surprising that one of the largest commonalities among developers (and the distinction between inferior developers and good ones) is that they are all brashly convinced that the coding language they choose to use is the single best solution and all other languages, platforms and technologies are inferior.

    I, for one, will use any language to equal effect (except cold fusion... but that is OBVIOUSLY not designed for professional use... or Flash, which is clearly modeled for designers and not programmers... and other such tools that are obviously inappropriate). In my experience, I have seen JSP and ASP.NET websites perform the same functionality with a lower performance threshold as vbscript or php websites... due to the inexperience or stupdity of the coder. They were probably fools that were simply using a technology they didn't understand because some idiot convinced them that it was best.

    Hopefully.. my fellow developers will move forward and judge the quality of the code and not their enthusiasm for the technology exectuting it.

    CAPTCHA : consequat - when cause and effect turns you into a vegetable?


    Flash has one of the best programming languages out there behind it. AS3 is an excellent OOP, strongly typed language. Not to mention Flex, which is geared towards enterprise level applications. And which Adobe, in their infinite wisdom, abandoned right after pushing it like mad to many corporations. That was a huge debacle, but I digress. The sad thing is most everything that would've been done with Flash is done with Javascript now and JS is horrible by comparison. Adobe's stewardship of Flash has been a miserable failure.
  • Jay 2012-07-30 13:30
    Ayn Rand's Ghost!:
    Nagesh:
    I look down on all languages includes English.


    If I were to speak your kind of language, I would say that man's only moral commandment is: Thou shalt think. But a 'moral commandment' is a contradiction in terms. The moral is the chosen, not the forced; the understood, not the obeyed. The moral is the rational, and reason accepts no commandments


    Hmm, I just don't know where to begin.

    So it is not "moral" for the government to pass laws against murder, because that would then be "forced"? I don't doubt that it would be nice if everyone behaved morally from their own free choice. But if it's a choice between hoodlums beating up and raping little old ladies, and the government or society forcing its morality on the hoodlumns, I choose "forcing morality".

    And it is unreasonable to say, for example, "Make your arguments based on fact and not emotion", because that would be a "commandment"? Umm, no.
  • mainframe web dev 2012-07-30 13:36
    dogmatic:

    Flash has one of the best programming languages out there behind it. AS3 is an excellent OOP, strongly typed language. Not to mention Flex, which is geared towards enterprise level applications. And which Adobe, in their infinite wisdom, abandoned right after pushing it like mad to many corporations. That was a huge debacle, but I digress. The sad thing is most everything that would've been done with Flash is done with Javascript now and JS is horrible by comparison. Adobe's stewardship of Flash has been a miserable failure.


    Flash binary is crazy good. No bytes. If something requires only 3 bits, that's what it passes. Reminds me of using unsigned numerics for storing "cash on hand". Also to the earlier comment about ColdFusion not meant for professional development -- didn't that sell for like > 100M on a startup budget of 20k? And the confluence -- sad that Harpoon was never released by Adobe after the ColdFusion buyout. We were to supposed to get Flash JSP generated from servlets... bummer.
  • Crampy Grampy 2012-07-30 13:38
    WC:
    People want to feel that something is happening, and computers often do it really fast.

    This reminds me of how fight choreography in older Steven Seagal films had to be slowed down so the audience would be able to see exactly what he did to disable the bad guy, i.e. to make it look "realer." If it were real and full speed, you'd see a guy approach him, make some brief/glancing contact, and then fall to the ground unconscious or writhing in pain ("WTF? He didn't even hit him!").
  • PedanticCurmudgeon 2012-07-30 13:43
    Jay:
    Ayn Rand's Ghost!:
    Nagesh:
    I look down on all languages includes English.


    If I were to speak your kind of language, I would say that man's only moral commandment is: Thou shalt think. But a 'moral commandment' is a contradiction in terms. The moral is the chosen, not the forced; the understood, not the obeyed. The moral is the rational, and reason accepts no commandments


    Hmm, I just don't know where to begin.

    So it is not "moral" for the government to pass laws against murder, because that would then be "forced"? I don't doubt that it would be nice if everyone behaved morally from their own free choice. But if it's a choice between hoodlums beating up and raping little old ladies, and the government or society forcing its morality on the hoodlumns, I choose "forcing morality".
    What's interesting about this is that Ayn Rand was opposed to anarchy, but that's a nice straw man you have there. Also, you do know you've been trolled, right?
  • Dazed 2012-07-30 13:46
    Jens:
    Well, it is a good idea. Not the unicorn part, that is more a matter of taste. But slowing down processing to enhance the UX may sound like a sin to engineers but often it is really helping the customer to understand what happens. Not automatically the best solution here, but sounds reasonable to me.

    Slowing down processing to help the user typically refers to such things as ensuring that messages stay on the screen long enough to be read, and avoiding flickering displays. What has that got to do with this WTF?
  • Spewin Coffee 2012-07-30 13:49
    Bronies! Magical things happen in the land of My Little Pony.

    If the end-user of this software is a little 5 year old girl, then I don't see a problem. Otherwise, hire someone else fast because maintaining software written by a Brony is going to be vomit-inducing.
  • myname 2012-07-30 14:01
    this i coming close:
  • That's the (second) one 2012-07-30 14:15
    Jens:
    Well, it is a good idea. Not the unicorn part, that is more a matter of taste. But slowing down processing to enhance the UX may sound like a sin to engineers but often it is really helping the customer to understand what happens. Not automatically the best solution here, but sounds reasonable to me.

    Really, this shows up all over. I'm in game development and I've seen it more than a few times. It makes operations look important, even if they're actually only taking a fraction of a second to complete.
  • foxyshadis 2012-07-30 14:32
    That's the (second) one:
    Jens:
    Well, it is a good idea. Not the unicorn part, that is more a matter of taste. But slowing down processing to enhance the UX may sound like a sin to engineers but often it is really helping the customer to understand what happens. Not automatically the best solution here, but sounds reasonable to me.

    Really, this shows up all over. I'm in game development and I've seen it more than a few times. It makes operations look important, even if they're actually only taking a fraction of a second to complete.

    I'm firmly convinced that most level loading times on mobile games are so they can either show you more ads, or at least shove their "hints" at you repeatedly to minimize support traffic.
  • jMerliN 2012-07-30 14:40
    TRWTF is using a busy loop as a delay. Should've used a more formal time-delayed redirect or something that doesn't chew up CPU doing nothing. Everything else is peachy (except ASP, WTF man?).

    Captcha: verto, that's what the unicorn got.
  • Coyne 2012-07-30 15:12
    "It's really important that the user knows the server is doing important work."

    "As opposed to us, right?"
  • johnny_five 2012-07-30 15:15
    What he said.

    (FU Akismet. Seriously.)
  • foo 2012-07-30 16:59
    Remy Porter:
    I'll say this much: PHP is better than using CGI to do web development.
    Do you also think apples are better than orange juice bottle seals? CGI is an interface that can be used via various libraries in various languages.

    Unless, of course, you're referring to Computer Generated Imagery. PHP might indeed be better than that for web development, slightly.
  • Nasukkin 2012-07-30 17:30
    A WTF indeed, but sadly more common (I imagine) than some may realize. I came upon a similar issue before, where we wrote an iPad application that uploads data to a remote server. The data was mostly user-entered text (iPad-typed text, no less!), so as you can imagine the upload went by really quick.

    Product management looked at it and were greatly distraught; how were they to know anything had been uploaded if the upload bar flashed by too quickly for the user to see move? Unacceptable user experience! Upload of text-based JSON must take longer.
  • Remy Porter 2012-07-30 18:08
    foo:
    Do you also think apples are better than orange juice bottle seals? CGI is an interface that can be used via various libraries in various languages.

    Unless, of course, you're referring to Computer Generated Imagery. PHP might indeed be better than that for web development, slightly.


    That's specifically why I called out CGI, not the various languages that can interface with it. Because it doesn't matter what language you're using- CGI basically converts STDOUT into an HTTP response. Again, you can layer enough APIs on top of it to not make it utter shite, but the core premise is, itself, bankrupt.
  • C-Derb 2012-07-30 18:39
    Remy Porter:
    foo:
    Do you also think apples are better than orange juice bottle seals? CGI is an interface that can be used via various libraries in various languages.

    Unless, of course, you're referring to Computer Generated Imagery. PHP might indeed be better than that for web development, slightly.


    That's specifically why I called out CGI, not the various languages that can interface with it. Because it doesn't matter what language you're using- CGI basically converts STDOUT into an HTTP response. Again, you can layer enough APIs on top of it to not make it utter shite, but the core premise is, itself, bankrupt.

    Pearl Jam is the greatest band in the history of the world!

    Completely irrelevant, I know, but just like this conversation, there is no right answer.

    Ok, just kidding. The greatest band in the history of the world really is Pearl Jam.
  • NotARobot 2012-07-30 19:08
    iToad:
    Remy Porter:
    "...But there's a difference between being able to solve a problem and their ability to solve a problem elegantly..."


    I am so going to steal this.


    "Engineering is the art of doing for a shilling what any clown can do for a pound." Nevil Shute. You're a bit late...
  • Bill 2012-07-30 19:23
    WC:
    I'm not sure what the WTF is supposed to be. This is actually something that is done and works.

    People want to feel that something is happening, and computers often do it really fast. Slowing it down makes them think it worked harder. One of the major tax companies does this with their online tax software. It spends like 5 seconds 'loading' my account, when I know good and well that it's already loaded when I logged in.

    I've heard other usability stories that say their customer opinion improved when they showed a loading bar in certain places that it was expected, instead of just doing things fast.

    If there's any real WTF here, it's people. And not the one who implemented the loading bar here.
    ATM's and that reassuring whirring sound....

    I'll bet people would actually think the bank didn't do things properly if a withdrawl was quicker - and the whirring sound makes it clear to the user that something important is going on....
  • Jim 2012-07-30 19:29
    Andrew:
    Remy Porter:
    When you get down to it, each language is exactly the same- they're all (or mostly all) Turing Complete, and hence can be used to solve any problem.


    Can we please stop repeating this vacuous truth? Turing-completeness only applies if you're willing to dedicate an unbounded amount of memory and wait an unbounded length of time for your solution.

    Problems in the real world come with hardware, time, and programming effort constraints, so no, just because a language is Turing-complete does not mean it can be used to solve any problem.
    Pedants Anonymous 1 800 555 436

    Actually, Turing-complete languages CAN be used to solve any programming problem. The problem of obtaining hardware with enough grunt to help facilitate this, however, cannot usually be solved using these languages.

    The abilities of the language are not constrained by your pissie mainframe....
  • foo 2012-07-30 20:36
    Remy Porter:
    foo:
    Do you also think apples are better than orange juice bottle seals? CGI is an interface that can be used via various libraries in various languages.

    Unless, of course, you're referring to Computer Generated Imagery. PHP might indeed be better than that for web development, slightly.


    That's specifically why I called out CGI, not the various languages that can interface with it. Because it doesn't matter what language you're using- CGI basically converts STDOUT into an HTTP response. Again, you can layer enough APIs on top of it to not make it utter shite, but the core premise is, itself, bankrupt.
    That's just the transport. (And actually that's the trivial part of CGI. The, uhm, slightly less trivial part is how the request etc. is passed.) It's like saying TCP/IP sucks because the raw HTTP request and response is passed through it.

    You can use any HTML generating library with CGI or copy your text from templates. CGI is neutral to all of this. So I really don't understand what you mean.

    Even PHP can run over CGI. The decision between PHP as a module or via CGI is basically a question of performance vs. security. Is that what you're getting at? Though, as far as I'm concerned, if either performance and/or security is really an issue, I wouldn't use PHP anyway, but rather a compiled and/or type-safe language.
  • bl0wf1sh 2012-07-30 23:33
    That reminds me of a website modification I had done once for a client. PDFs had to be shown, and normally those will just pop up in a new window (or the same window), with no progress indicator (if they are relatively small). The client, however, wanted some indication that the file was loading (so people do not click on the same link again furiously).

    So at first, we tried to do loading the PDF via a flash service, which is pretty, and has a nicely animated loading image overlay... but the customer was not happy.

    In the end, we did a short delay (client-side) before actually loading the PDF, with an image and saying "please be patient, PDF is loading" or sth like that. This made the client happy, and was implemented. The delay serves no practical purpose except to delay the loading of the PDF and to notify the user of the fact that he had just clicked that link.
  • Severity One 2012-07-31 03:02
    This reminds me of the time when our 'server' applications (things that connect to databases, do some stuff, and connect to a back-end system) were actually Swing applications, with a GUI. Sure enough, you could stop and start such an application by clicking a button. One particular example had a little dog running about when the application was running, and the dog sitting down and wagging its tail when the application was stopped.

    Obviously, there were a couple of disadvantages to this approach. For one thing, the 'server' applications all had their own window, all running on a Windows machine, and you have to take care not to log out. Also, the task bar was filled to the brim with windows.

    The unimaginative brute that I was, I replaced the lot with a service framework that runs from the console and logs using log4j.
  • Steve The Cynic 2012-07-31 03:37
    Summary of thread: Building a good UX is hard.

    My observation: I just wish more user-facing software components were written by people who a) were aware of this and b) gave a flying fuck.

    Case in point: PIN pad machines for Chip & PIN credit cards. Far too many do not update the display after you enter your PIN, until after they have had an approval from the card. A few will display "Veuillez patienter" immediately after you press the green button, and then "Code bon" after the card agrees, so you know they've heard you. (The ones I use say these things, because I live in France, so mostly use ones intended for use by French people. I'm not French.)
  • dkf 2012-07-31 04:01
    Jim:
    Actually, Turing-complete languages CAN be used to solve any programming problem. The problem of obtaining hardware with enough grunt to help facilitate this, however, cannot usually be solved using these languages.
    Well, saying "Turing-complete" just means you've got a general while loop (or equivalent mathematical structure), variables and a way of doing arithmetic that isn't restricted to a fixed number of bits. (Theoretically infinite, but nobody works with infinite state TMs if they can avoid it.)

    Turing-completeness says absolutely nothing about interacting with hardware, or about the timeliness of the production of results. These things matter a lot in the real world. (They are why a language like Brainfuck can't be used for serious web programming. Now, if you added syscalls then you could at least contemplate it…)
  • UNICORNS!!! 2012-07-31 05:30
    I am very glad that clicking on unicorn gave me the expected behavior
  • Nagesh's Pet Goat 2012-07-31 05:36
    Jim:
    Actually, Turing-complete languages CAN be used to solve any programming problem. The problem of obtaining hardware with enough grunt to help facilitate this, however, cannot usually be solved using these languages.


    Actually, there is one problem that no Turing-complete language can solve: deciding if a program (written in the same language) will terminate.

    A non-Turing-complete language can be devised to write programs which are guaranteed to terminate, so the decision is simple, it is always positive.

    (Since you did not define "programming problem", to me this is a valid example of such a problem. If you had said "computable problem", you would be correct. "Real world" and "business" problem are subjective and not allowed in rational discussion.)
  • Lockwood 2012-07-31 05:44
    Zylon:
    Given who anonymized this article, I very strongly doubt that the animated GIF in question was actually of a unicorn.


    But we can live in hope.
  • Anonandon 2012-07-31 07:57
    Some Jerk:
    Remy Porter:
    Doing templating with code infrastructure behind it is one of the fastest ways to generate unmaintainable spaghetti code.

    WebForms is also terrible, although for different reasons (look at Node.js to see how event-driven web programming is done correctly). I'm fairly certain Alex built this site in WebForms, but that doesn't change the fact that WebForms was hideous and makes the dolphins cry.

    PHP was designed for web development, in theory, but given the core design decision was that it should mix code and document in a single file, it is not good for web development. You can make it good for web development by never using it the way it was designed, but once you leave a certain level of small scale applications, you're going to bump into serious problems with the PHP architecture.

    Code is code. Document/presentation is document/presentation. You shouldn't mix them any more than you should put data access code in your view classes.


    Spoken like a true enterprise developer. Have you forgotten that for every website with a complex business model, there are nearly 100 which require only a handful of basic CRUD operations?

    <snip>


    But for every 100 of these, I'd guess there are quite a number that start like that in someone's head, but then they want it a bit more polished and interactive and they don't really want to be constantly switching pages to see different stuff, and before you know it you've got reams of document/script that rely on dozens of hard-coded references and constants, and that break, silently and at run time, at the slightest provocation.

    Grr.
  • Some Jerk 2012-07-31 08:32
    now that has nothing to do with the language. In 13 years I have yet to find a scope that didn't creap... if only a little. That is no excuse to write sloppy code though :p.
  • Anonandon 2012-07-31 09:13
    Some Jerk:
    now that has nothing to do with the language. In 13 years I have yet to find a scope that didn't creap... if only a little. That is no excuse to write sloppy code though :p.

    Serious question then - does anyone know any good articles on how to get rid of all the hard-coded identifiers, unsafe method calls, silent failures and general hacks (hidden fields to ensure UI state stays consistent, etc) from Javascript/JSP pages?
  • noland 2012-07-31 10:23
    By popular demand (you asked for it): http://www.masswerk.at/cornifiedLoader/

    Public Domain.
    (Don't know what that will mean in terms of kharma ...)
  • noland 2012-07-31 11:19
    Totally forgot to advertise the name: "The Glorious WTF Cornified Loading Indicator"
    And here it is, by popular demand: http://www.masswerk.at/cornifiedLoader
  • Some Jerk 2012-07-31 11:23
    Anonandon:
    Some Jerk:
    now that has nothing to do with the language. In 13 years I have yet to find a scope that didn't creap... if only a little. That is no excuse to write sloppy code though :p.

    Serious question then - does anyone know any good articles on how to get rid of all the hard-coded identifiers, unsafe method calls, silent failures and general hacks (hidden fields to ensure UI state stays consistent, etc) from Javascript/JSP pages?


    Code maintenance is much like physical fitness. Only a great deal of work can get the code into shape... and only continuous effort can keep it that way. I can tell you how to prevent things from getting to that point... but the only way that I know of to turn bad code into good code involves a keyboard, a lot of hours and even more caffine.

    Captcha: iusto - iusto write bad code too... but I know better now.
  • noland 2012-07-31 11:52
    You could write a tiny script to delete these entities from the page, but this would just break the platform the code was generated by. Maybe you could use such a script to enforce a decent praxis:

    var codeWatchDog = new function() {
    
    var legalGlobals = {};
    var legalHiddenFields = {};
    function init() {
    // collect initial entities
    for (var p in window) legalGlobals[p] = true;
    for (var i = 0, l = fields.length; i < l; i++) {
    var f = fields[i];
    if (f.type == 'hidden' && f.id)
    legalHiddenFields[f.id] = true;
    // and start
    setInterval( bark, 20 );
    }
    function bark() {
    // delete any additional simple entities
    // of the global object
    for (var p in window) {
    if (!legalGlobals[p]) {
    switch (typeof window[p]) {
    case 'number':
    case 'string':
    case 'boolean':
    delete window[p];
    break;
    }
    }
    }
    // delete any additional hidden fields
    var fields = document.getElementsByTagName('input');
    for (var i = 0, l = fields.length; i < l; i++) {
    var f = fields[i];
    if (f.type == 'hidden'
    && !legalHiddenFields[f.id]
    && f.parentNode)
    f.parentNode.removeChild(f);
    }
    }
    init();
    }


    I would not advise to use such a construct.
  • noland 2012-07-31 12:02
    Ahem:
        function init() {
    
    // collect initial entities
    for (var p in window) legalGlobals[p] = true;
    var fields = document.getElementsByTagName('input');
    for (var i = 0, l = fields.length; i < l; i++) {
    var f = fields[i];
    if (f.type == 'hidden' && f.id)
    legalHiddenFields[f.id] = true;
    }
    // and start
    setInterval( bark, 20 );
    }
  • Some Jerk 2012-07-31 12:06
    ... ummm
    $(function() {
    alert('you are a dumb@$$ if you expect this to do your job for you!');
    });
  • noland 2012-07-31 12:37
    Some Jerk:
    ... ummm
    $(function() {
    alert('you are a dumb@$$ if you expect this to do your job for you!');
    });

    But it would be a pain in the @$$ for anyone who would be cluttering the global object ... ;-)
  • foo 2012-07-31 13:40
    Some Jerk:

    It is surprising that one of the largest commonalities among developers (and the distinction between inferior developers and good ones) is that they are all brashly convinced that the coding language they choose to use is the single best solution and all other languages, platforms and technologies are inferior.

    It's what separates professionals from amateurs.
    Those that think this way are either inexperienced or amateurs... at least that's what i learned spending the last decade in the field.
  • David L. 2012-07-31 13:42
    "cold fusion... but that is OBVIOUSLY not designed for professional use"

    I say BS to this. ColdFusion is perfectly acceptable for enterprise level applications.

    Get over yourself.
  • Some Jerk 2012-07-31 14:42
    lol. Get over myself. :p.
    I didn't belittle Cold Fusion... I just said it is not designed for professional use. The reason I said that is simple. It was architected with drag and drop and wizards as the principal form of interaction. It is designed so that anybody with intelligence can produce information management sites without need for things like knowledge and experience. These features being the key selling point of the technology, the architecture incures a massive performance differential from large volumes of plumbing infrastructure. The programming language is then built on top to EXTEND the capabilities for users who take the time to learn it. Other platforms are the other way around... the language and infrastructure consuming a framework and then augmented with WYSIWYG.

    It is good for proof of concepts, and it is good for small businesses that cannot afform a programmer. Comparitive performance however is so inferior (unless they have come a VERY long way in 2 years) is not even a potential argument. Cold Fusion (On Windows at least) actually manages to perform worse than JAVA. That does not smack of Enterprise scale to me... and certainly does not imply that it was intended for Enterprise.
  • Jazz 2012-07-31 16:39
    Remy Porter:
    PHP has frameworks that allow you to not merge implementation and document structure. But PHP, as usually used, is friggin' terrible.


    If by "frameworks" you mean "best practices," and by "usually" you mean "frequently by newbies," then sure. The common PHP frameworks will force you into using good practices, too, but you don't need a framework to write good PHP. Every developer I know who has used PHP (even without a framework) for more than 18 months knows better than to merge implementation with document structure. The projects I work on in PHP have roughly 70% of their files as pure object-oriented code, no presentation, and the other 30% presentation files with a smattering of view logic where it's needed.

    The assertion that all PHP developers can't write reliable, maintainable code, just because everybody's seen at least one PHP application with unreliable, unmaintainable code, is just as false as saying that every Christian hates gay people just because some Christians - who happen to be very loud and prominent in the media - hate gay people.


    Remy Porter:
    It's Classic ASP with PERL-like syntax, which is roughly equivalent to the product of a forced mating between a hippopotamus and a duck-billed platypus. Which language matches which organism can be left as an exercise to the reader.


    Perl is clearly the hippopotamus – bloated but deadly. ASP is the duck-billed platypus - so ugly your brain can't believe it's a real thing.
  • Jazz 2012-07-31 16:54
    Remy Porter:
    PHP was designed for web development, in theory, but given the core design decision was that it should mix code and document in a single file, it is not good for web development. You can make it good for web development by never using it the way it was designed, but once you leave a certain level of small scale applications, you're going to bump into serious problems with the PHP architecture.


    You're close. Everywhere you say "designed" you should really say "originally designed." PHP was originally designed around the templating-with-supporting-infrastructure approach because, let's not forget, when web programming became a thing in 1995 or 96, that was the best idea anyone had at the time of how to do it. Later, when the pitfalls of this approach became clear, massive changes were made to PHP (versions 5 and 5.3) so that it was easier to use in a way that it hadn't originally been designed. PHP 5 and 5.3 are a significant departure from the mash-it-all-up approach which characterizes bad PHP code.

    Now, when they made 5 and 5.3, they refused to break existing functionality, so it's still possible to use PHP 5.3 to code really terrible apps, sure. All the crap code written in PHP 3 or PHP 4 still runs, just as crappily, on 5 and 5.3 (for the most part). And whether or not that backwards-compatibility is a good thing or not is sure open to debate. But please realize that no decent developer still uses it the way it was originally designed.

    As for the scalability of PHP: I think I'll let Facebook talk about this one. If PHP is running the largest social networking website in the history of the world, I don't think any more really needs to be said about its scalability.
  • tin 2012-08-01 04:30
    Steve The Cynic:
    Case in point: PIN pad machines for Chip & PIN credit cards. Far too many do not update the display after you enter your PIN


    Worse would be the terminals/software used by McDonalds in Australia (or at least where I am)... They come up with "Enter PIN" about 1 second before they start accepting input.
    So I end up regularly either missing the first digit off, or pressing the first digit far too many times as I get frustrated and start tapping it.
  • EmperorOfCanada 2012-08-01 08:51
    I agree that sometimes you need to make the server look like it is working hard. Otherwise people will feel that the process/transaction failed.
  • Paul Neumann 2012-08-02 11:53
    YR:
    I'm sorry, TRWTF is Jesus.
    ftfy

    captcha: sino - sino evil...
  • Paul Neumann 2012-08-02 12:01
    onitake:
    GoodtimesSnuggler:
    We need that gif.


    That.


    See attached.
  • Mark Wilden 2012-08-02 15:58
    Interesting. I, in sharp contradistinction, have NEVER heard anyone say their language is "the single best solution".

    I have, however, read posts like yours at least a hundred times over the years. And each time, the writer thinks he's saying something novel and significant.
  • Troll Feeder 2012-08-07 13:10
    As an aside, modern ColdFusion code is a great scripting language on top of Java, which I much prefer using over JSP.

    Open-source CFML via Railo has been part of the JBoss foundation for a while now, and I've had some pretty amazing successes with a Linux/Tomcat/Railo stack.

    Unfortunately, the bar for entry into doing ColdFusion code is still pretty low, and it contributes to an overall negative impression.

    Personally, I've done quite a bit of development, from C++ to Python to PHP, and I still find myself doing CF code from time to time on a major project. It's really nice to use for some things, and really painful for a few things.
  • Patrick 2012-08-08 11:56
    I've had several clients ask to insert artificial delays just for the purpose of showing a progress bar or animation.
  • Patrick 2012-08-08 11:56
    I've had several clients ask to insert artificial delays just for the purpose of showing a progress bar or animation.
  • outis 2013-11-22 23:50
    Some Jerk:
    I find it funny how every wtf article ends up with people claiming one language or another is the WTF. It is surprising that one of the largest commonalities among developers (and the distinction between inferior developers and good ones) is that they are all brashly convinced that the coding language they choose to use is the single best solution and all other languages, platforms and technologies are inferior.


    As the master said,
    The Tao gave birth to machine language. Machine language gave birth to the assembler.

    The assembler gave birth to the compiler. Now there are ten thousand languages.

    Each language has its purpose, however humble. Each language expresses the Yin and Yang of software. Each language has its place within the Tao.

    But do not program in COBOL if you can avoid it.