Enterprise Dependency: The Next Generation

  • ParkinT 2011-11-17 08:18
    Paula did not write this
    It is NOT in VB
    It is NOT in XML
    It is NOT on a wooden table
    This post is FIRST
    If I squint, it reminds me a little of "Irish Girl"

    It is PERFECT!
  • TheRealGrimmie 2011-11-17 09:04
    not FRIST darn
  • crammy 2011-11-17 09:05
    Ok, which one of those central classes is named "String"?
  • frits 2011-11-17 09:08
    It's a map of Europe!
  • Severity One 2011-11-17 09:15
    No, it's a map of the Falkland Islands, oddly enough.
  • dna 2011-11-17 09:17
    frits:
    It's a map of Europe!


    seriously...
    how can i missed that...
    i can see my house from here...
  • frits 2011-11-17 09:18
    "Number of classes" is a pretty blurry metric for measuring code maintainability IMO. For example, which would you rather have: 20 classes that are very limited in responsibility, or 1 behomoth that does the job of those 20? A lot of classes is not a problem if your dependency diagram is relatively flat. Now, if your graph looks like the Empire State Building or a buckyball, you may have a problem.
  • Steve The Cynic 2011-11-17 09:18
    dna:
    frits:
    It's a map of Europe!


    seriously...
    how can i missed that...
    i can see my house from here...

    I can't, but I can see my office...
  • Sylver 2011-11-17 09:21
    I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path. Where the fear has gone there will be nothing. Only I will remain.

    Repeat the mantra:

    I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will...

    Arrrgh! Again, again... must. not. give. hope.

    I must not fear. Fear is the....

    Hey, wait a minute, it's not so bad. I am not the one in charge of that mess. Oh, I love my life.
  • @Deprecated 2011-11-17 09:22
    The pic initially reminded me of when the Death Star destroyed Alderaan.
    Maybe the bits at the bottom could be imperial cruisers parked nearby to watch the 'show'.
  • steenbergh 2011-11-17 09:27
    Why can't I click on it for a full-sized version?
  • Rosuav 2011-11-17 09:30
    steenbergh:
    Why can't I click on it for a full-sized version?


    Preservation of sanity.
  • Nagesh 2011-11-17 09:36
    Remember more enterprisey systems meaning more employment. Simple economics diktate that we must have complex system so that entire civilisaton will stay employed.

    Idle minds are workships for Shaitan. That is means that we must keep all minds ocupied and this diagram just does that.

    Who's for employment? Madarchod!!!
  • KevinHamburger 2011-11-17 09:38
    Holy crap, there's a class for each symbol on the ASCII table there.
  • Mmmpf 2011-11-17 09:47
    Looks like the results of a "I read on the internet that patterns are good, so I implemented them all" kind of reasoning.

    How do you like my Model-View-View-Presenter-Model-View-Controller enterprise bus factory concern-separated service oriented piece of overexpensive unworking junk? Yes you have to press "Retry" when windows fail to load or when your screen starts to cry tears of blood, and the texts are in cyrillic, but it's just a small bug in the asynchronous transvertical resource manager service.

    But see, when you turn the mouse wheel, it switches from WPF to Silverlight then Metro then WinForms then Telescript then back to WPF again. Nice isn't it?
  • Martijn 2011-11-17 09:48
    frits:
    "Number of classes" is a pretty blurry metric for measuring code maintainability IMO. For example, which would you rather have: 20 classes that are very limited in responsibility, or 1 behomoth that does the job of those 20? A lot of classes is not a problem if your dependency diagram is relatively flat. Now, if your graph looks like the Empire State Building or a buckyball, you may have a problem.


    That's a good point. One of the nice things about Scala compared to Java is that in Scala it's trivial to create a ton of classes that do something trivial, at no extra maintainance overhead. Not requiring a file per class is an enormous help there.

    I doubt that's really the case here, though.
  • brazzy 2011-11-17 09:51
    1700 classes aren't that many. I've worked on far larger systems that were mostly OK.

    But those three classes that seem to have at least a hundred dependencies each... those scare me.
  • DOA 2011-11-17 09:55
    Mmmpf:
    when you turn the mouse wheel, it switches from WPF to Silverlight then Metro then WinForms then Telescript then back to WPF again.
    You, sir, are ahead of your time. I salute you.
  • Gilles 2011-11-17 09:57
    On the first sight, I thought I was looking at a map of some unknown country.
  • esteban 2011-11-17 09:57
    Good points.

    Also makes you wonder about the "easy-to-support legacy system which had around 100 classes". While I agree on the dangers of over-architecting, 100 classes sounds like the other end of the spectrum. Easy-to-support doesn't necessarily translate to quality code.

    Executives don't typically fund wall-to-wall rewrites unless there's a real need. If may have been easy-to-support, but did it scale to the performance and availability needs? How much maintenance did it require? How easy was it to add new feature blocks?

  • A mad arab... 2011-11-17 10:05
    Deep within the bowels of the system Codethulhu sleeps, waiting till the epoch time is right.

    Captcha: odio - The spanish version of the "Day-o" song
  • Paul 2011-11-17 10:07
    If you stare at it's miserable heart long enough, you can faintly make out something which looks like "V...GER".
  • Kempeth 2011-11-17 10:08
    Mmmpf:
    How do you like my Model-View-View-Presenter-Model-View-Controller enterprise bus factory concern-separated service oriented piece of overexpensive unworking junk?
    Yo Dawg! I heard you like MVC so I put and MVC in your MVC so you can control your view and model while you control your view and model.
  • Allan Schatsky 2011-11-17 10:09
    This raises so many pressing questions, like what's with the tiny, logical section at the bottom, and when will this be made available in desktop size?
  • RichP 2011-11-17 10:11
    I imagine one of the code reviews went like this:

    Q: "Where did you get the IEnterpriseAuthenticationProvider?"

    A: "It fell of a IEnterpriseAuthenticationProviderFactory"

    Q: "Where did the IEnterpriseAuthenticationProviderFactory come from?"

    A: "It fell off of a IEnterpriseAuthenticationProviderFactoryManagementFactory"


  • no laughing matter 2011-11-17 10:11
    Martijn:

    That's a good point. One of the nice things about Scala compared to Java is that in Scala it's trivial to create a ton of classes that do something trivial, at no extra maintainance overhead. Not requiring a file per class is an enormous help there.

    The rest of us have switched from Notepad to professional IDEs about 10 or 15 years ago.
    (If someone has programmed Java with an IDE more than 17 years ago, please stand up!)

    Creating a new Java class in a modern IDE is an absolute triviality and a matter of seconds (still no laughing matter, though ;-)

    And the Java requirement of a file per class is something you have invented.

    A file can contain as many private java classes as you like.

    Even the requirement of only one public class per file is not really enforced by the Java Language Specification:

    Java Language Specification:

    When packages are stored in a file system (§7.2.1), the host system may choose to enforce the restriction that it is a compile-time error if a type is not found in a file under a name composed of the type name plus an extension (such as .java or .jav) if either of the following is true:

    * The type is referred to by code in other compilation units of the package in which the type is declared.
    * The type is declared public (and therefore is potentially accessible from code in other packages).

  • RichP 2011-11-17 10:11
    steenbergh:
    Why can't I click on it for a full-sized version?


    It's actually a fractal, so it looks the same at all levels of zoom.
  • boog 2011-11-17 10:14
    ...so, management commissioned the Next Generation project.
    Good name for a project, management, well done. Projects need to have names so you can easily identify them in conversation, but the marketing spin just makes it so much sweeter. It's a lot easier to sell a fashionable name than it is to get real buy-in for the project itself.

    Seriously, Next Generation. Who's gonna question that?
  • AerieC 2011-11-17 10:18
    RichP:
    I imagine one of the code reviews went like this:

    Q: "Where did you get the IEnterpriseAuthenticationProvider?"

    A: "It fell of a IEnterpriseAuthenticationProviderFactory"

    Q: "Where did the IEnterpriseAuthenticationProviderFactory come from?"

    A: "It fell off of a IEnterpriseAuthenticationProviderFactoryManagementFactory"




    Factories inside factories?

    Factory-ception.

    Or, if you prefer:

    Hey dawg, I heard you like factories, so I put a factory in your factory so you can create objects while you create objects!
  • David 2011-11-17 10:18
    esteban:
    Good points.

    Also makes you wonder about the "easy-to-support legacy system which had around 100 classes". While I agree on the dangers of over-architecting, 100 classes sounds like the other end of the spectrum. Easy-to-support doesn't necessarily translate to quality code.

    Executives don't typically fund wall-to-wall rewrites unless there's a real need. If may have been easy-to-support, but did it scale to the performance and availability needs? How much maintenance did it require? How easy was it to add new feature blocks?



    It's possible the the legacy system had poor architecture but was decently coded in other respects. Someone who is capable of transforming 100 classes into 1700 probably suffers from at least a little hubris and that may have lead them to condemn the legacy code.
  • pjt33 2011-11-17 10:20
    boog:
    ...so, management commissioned the Next Generation project.
    Good name for a project, management, well done. Projects need to have names so you can easily identify them in conversation, but the marketing spin just makes it so much sweeter. It's a lot easier to sell a fashionable name than it is to get real buy-in for the project itself.

    Seriously, Next Generation. Who's gonna question that?

    Fans of TOS, obviously.
  • Dazed 2011-11-17 10:22
    frits:
    "Number of classes" is a pretty blurry metric for measuring code maintainability IMO.

    Yes, I'll grant you that.

    frits:
    For example, which would you rather have: 20 classes that are very limited in responsibility, or 1 behomoth that does the job of those 20?

    That's not so clear. I suspect I'd prefer half a dozen classes which each does a reasonable amount of work.

    The point is that complexity within a class and complexity of relationships between classes are both matters of concern. It seems to have become very fashionable to worry mostly about the first and hardly at all about the second. And that is every bit as bad as doing it vice versa.
  • Sheldon Cooper 2011-11-17 10:24
    The company needs an architect to derive abstract models from the full picture. That will reduce complexity of the mapped problem to a reasonable level. There seem to be systematic naming conventions, suggesting the implementors were disciplined and rigorous. Design Patterns are a public domain, which aids comprehension and eases up maintenance.

    There should be apparent a set of independent isolated autonomous coherent units as separate jars (Java Archives) that are later imported and used by other code. I'd like the job of re-engineering the architecture for this project from what there is. It's the Divide & Conquer kind of a game, which is fun.
  • AnonymousCoward 2011-11-17 10:26
    You mean a class for every Unicode code point, surely?

    There's FAR too many classes to cover *just* the ASCII table :)
  • apoc9 2011-11-17 10:26
    frits:
    It's a map of Europe!
    No It's complete map of all EU departments.
  • ubersoldat 2011-11-17 10:28
    I once worked in a project with such a graph... but it was a dependency graph! I didn't know there were so many Java libraries until that moment.
  • ObiWayneKenobi 2011-11-17 10:32
    You know, for all the flak that "enterprisey" code gets, keep in mind it's a GOOD thing to have abstractions. True, you don't need the
    HammerFactoryFactoryFactory
    type of things, but it's usually considered good practice to have a lot of interfaces that get passed around - in fact doing such things is the foundation of good design (see Robert C. Martin's SOLID principles).

    Having few classes is often worse than having many, because chances are those classes violate the SRP and do more than one thing. Granted, something like the illustration here is outright ridiculous and way too complicated, but it's not always a bad thing to have a lot of abstractions.
  • Mmmpf 2011-11-17 10:48
    no laughing matter:

    The rest of us have switched from Notepad to professional IDEs about 10 or 15 years ago.
    (If someone has programmed Java with an IDE more than 17 years ago, please stand up!)


    I don't remember what I used before Visual Studio or Eclipse to write my code under Windows (probably UltraEdit), but I'm quite sure it wasn't Notepad. Actually now that I have absolutely no reason to use it, I started to like it, in a nostalgic way: it's there to remind me why I hated Windows so much (while still using it) back in the days: it does the smallest subset of things it is supposed to do, but in the worse possible way.

    Doesn't know how to cancel. Well yes it does, but just one time. Next time you cancel, it cancels the cancellation. Deeeep!

    Doesn't lock files when modifying it. You can open it, and it can get deleted. You still have it. It won't tell you anything if you save a deleted file: if you modified it, it will recreate it. If you didn't, it will just do nothing, keeping you in the warm illusion that your file still exists.

    Uses Ctrl+keystrokes. But if you're in a foreign language OS, it's all wrong. In Spanish for instance, Ctrl-G saves, Ctrl-A opens, Ctrl-B finds, Ctrl-R replaces, Ctrl-E selects all. Try to work with this. To its defense, some other Microsoft apps (Explorer, Office) use this retarded way of thinking localization.

    Doesn't know how to select a word by double-clicking it. Well yes it does, but the set of characters it considers as word separators is completely different for that of any other existing tool.

    Also, it has absolutely no functionality, but it has this entry in a menu to insert the current date and time. So it's a completely useless program, unless you want to rapidly insert the current date and time in a text file. In this case, it's the bomb.
  • Geir 2011-11-17 10:49
    I think they have misunderstood the term "cloud computing". It looks like one, but...
  • iToad 2011-11-17 10:51
    Good luck printing that out. I don't think it would be legible as an E size engineering drawing.
  • I am Zunesis 2011-11-17 10:55
    This looks like my latest outbreak of HPV.
  • boog 2011-11-17 10:58
    frits:
    It's a map of Europe!
    Not a map, just an artistic portrayal; it's abstract.
  • boog 2011-11-17 11:02
    pjt33:
    boog:
    ...so, management commissioned the Next Generation project.
    Good name for a project, management, well done. Projects need to have names so you can easily identify them in conversation, but the marketing spin just makes it so much sweeter. It's a lot easier to sell a fashionable name than it is to get real buy-in for the project itself.

    Seriously, Next Generation. Who's gonna question that?

    Fans of TOS, obviously.
    It all depends on which project the stakeholders find to be more enterprisey.
  • Johann 2011-11-17 11:02
    If you look closely, you can see the Higgs-Boson.
  • Russ 2011-11-17 11:03
    Enterprise Shrubbery
  • Mmmpf 2011-11-17 11:03
    boog:
    frits:
    It's a map of Europe!
    Not a map, just an artistic portrayal; it's abstract.


    Europe is abstract too. It's a fading concept.
  • esteban 2011-11-17 11:08
    David:
    esteban:
    Good points.

    Also makes you wonder about the "easy-to-support legacy system which had around 100 classes". While I agree on the dangers of over-architecting, 100 classes sounds like the other end of the spectrum. Easy-to-support doesn't necessarily translate to quality code.

    Executives don't typically fund wall-to-wall rewrites unless there's a real need. If may have been easy-to-support, but did it scale to the performance and availability needs? How much maintenance did it require? How easy was it to add new feature blocks?



    It's possible the the legacy system had poor architecture but was decently coded in other respects. Someone who is capable of transforming 100 classes into 1700 probably suffers from at least a little hubris and that may have lead them to condemn the legacy code.


    Hubris, check.

    Don't get me wrong, I agree with the general thread that the thing looks like an over-engineered beast. Doesn't seem to be any agile 'build what you know you need' evident. My point is that large systems do this kind of refactoring, and get funding, for a reason -- not just because someone thinks its cool.
  • frits 2011-11-17 11:11
    Mmmpf:
    boog:
    frits:
    It's a map of Europe!
    Not a map, just an artistic portrayal; it's abstract.


    Europe is abstract too. It's a fading concept.
    Notice how Italy and Greece are missing.
  • Mmmpf 2011-11-17 11:15
    frits:
    Mmmpf:
    boog:
    frits:
    It's a map of Europe!
    Not a map, just an artistic portrayal; it's abstract.


    Europe is abstract too. It's a fading concept.
    Notice how Italy and Greece are missing.


    Wait a bit and all that will be left will be the fake smile of phony politics.
  • boog 2011-11-17 11:32
    esteban:
    Executives don't typically fund wall-to-wall rewrites unless there's a real need. If may have been easy-to-support, but did it scale to the performance and availability needs? How much maintenance did it require? How easy was it to add new feature blocks?
    Not so sure that I agree. I've seen many projects where executives are sold on some Shiny New Technology, funding wall-to-wall rewrites of existing, proven systems when there was no real need. Being on the latest bandwagon is not a real need.

    You ask how well the old system scaled to performance and availability needs, maintenance, ease of adding new features, blah blah, but these things are rarely, if ever, measured correctly and impartially when considering a Shiny New Technology. The novelty of something new is too much to resist; people who buy into the hype (executives and programmers alike) will convince themselves they are being fair, when they're unwittingly misrepresenting the actual costs of the current system, and vastly underestimating the total costs of the new system.

    I'm not saying you're wrong, just that it happens more often than you'd think.
  • D-Coder 2011-11-17 11:32
    boog:
    frits:
    It's a map of Europe!
    Not a map, just an artistic portrayal; it's abstract.
    Actually it's quite realistic.

    It's a 1-to-1 scale map.

    I recognize the arrangement of blades of grass near a particular bench in a park in a small town outside Geneva.
  • SomeCoder 2011-11-17 11:37
    Sounds like how we do business where I work. Rip out the easy to maintain but old (and sometimes hard to add new features to) system and replace it with something that is much slower, impossible to maintain, has a dependency graph like this one, and nobody except the original architect has any idea how to add new features to it. Perfect!
  • Tom 2011-11-17 11:45
    It's the Angelina Jolie of dependency diagrams: oddly beautiful, but kinda crazy-scary, and I'm sure glad I'm not the one supporting it.

    And it's even got little orphans running along the bottom.
  • Could I Bother You to Recharge My Zune? 2011-11-17 11:50
    I am Zunesis:
    This looks like my latest outbreak of HPV.
    No you are not.
    ...but thanks for minding the store for me.
  • Daid 2011-11-17 12:05
    frits:
    "Number of classes" is a pretty blurry metric for measuring code maintainability IMO. For example, which would you rather have: 20 classes that are very limited in responsibility, or 1 behomoth that does the job of those 20? A lot of classes is not a problem if your dependency diagram is relatively flat. Now, if your graph looks like the Empire State Building or a buckyball, you may have a problem.
    Is "Seeing all Java developers get shot" an option?

    Because in my experience, Java developers have a tendency to generate a lot of glue on glue code. IntegerFactoryImplementationFactoryGeneratorImplementationInterface.
  • frits 2011-11-17 12:11
    Tom:
    It's the Angelina Jolie of dependency diagrams: oddly beautiful, but kinda crazy-scary, and I'm sure glad I'm not the one supporting it.

    And it's even got little orphans running along the bottom in Africa.
    FTFY
  • esteban 2011-11-17 12:18
    boog:
    esteban:
    Executives don't typically fund wall-to-wall rewrites unless there's a real need. If may have been easy-to-support, but did it scale to the performance and availability needs? How much maintenance did it require? How easy was it to add new feature blocks?
    Not so sure that I agree. I've seen many projects where executives are sold on some Shiny New Technology, funding wall-to-wall rewrites of existing, proven systems when there was no real need. Being on the latest bandwagon is not a real need.

    You ask how well the old system scaled to performance and availability needs, maintenance, ease of adding new features, blah blah, but these things are rarely, if ever, measured correctly and impartially when considering a Shiny New Technology. The novelty of something new is too much to resist; people who buy into the hype (executives and programmers alike) will convince themselves they are being fair, when they're unwittingly misrepresenting the actual costs of the current system, and vastly underestimating the total costs of the new system.

    I'm not saying you're wrong, just that it happens more often than you'd think.


    Agreed, bright shiny objects can distract, and yes, there are companies that have more money than sense. But even in those cases, I doubt you'd find that selecting New Technology X was the *only* driver for moving down a particular path.
  • Silfax 2011-11-17 12:20
    Rosuav:
    steenbergh:
    Why can't I click on it for a full-sized version?


    Preservation of sanity.


    Bigger than the dimension we live in.
  • boog 2011-11-17 12:39
    esteban:
    Agreed, bright shiny objects can distract, and yes, there are companies that have more money than sense. But even in those cases, I doubt you'd find that selecting New Technology X was the *only* driver for moving down a particular path.
    True, but my point was that many times the *other* drivers are still influenced by the one. For example: it may actually be cheaper (development and support costs) to correct the deficiencies of Old Technology Y than to replace/rewrite with New Technology X (which may have a host of unknown deficiencies, possibly exceeding those of Y in quantity and cost). But we may never know because those who've already committed themselves to New Technology X are likely to misrepresent (even unintentionally).
  • C-Octothorpe 2011-11-17 12:41
    esteban:
    boog:
    esteban:
    Executives don't typically fund wall-to-wall rewrites unless there's a real need. If may have been easy-to-support, but did it scale to the performance and availability needs? How much maintenance did it require? How easy was it to add new feature blocks?
    Not so sure that I agree. I've seen many projects where executives are sold on some Shiny New Technology, funding wall-to-wall rewrites of existing, proven systems when there was no real need. Being on the latest bandwagon is not a real need.

    You ask how well the old system scaled to performance and availability needs, maintenance, ease of adding new features, blah blah, but these things are rarely, if ever, measured correctly and impartially when considering a Shiny New Technology. The novelty of something new is too much to resist; people who buy into the hype (executives and programmers alike) will convince themselves they are being fair, when they're unwittingly misrepresenting the actual costs of the current system, and vastly underestimating the total costs of the new system.

    I'm not saying you're wrong, just that it happens more often than you'd think.


    Agreed, bright shiny objects can distract, and yes, there are companies that have more money than sense. But even in those cases, I doubt you'd find that selecting New Technology X was the *only* driver for moving down a particular path.
    He's not saying that. He said that people will misrepresent the facts about the current system (exaggerate maintenance costs, etc.) and outright lie about "gains" in the proposed system, in order to get the rewrite approved.
  • Mason Wheeler 2011-11-17 12:50
    Dazed:
    frits:
    "Number of classes" is a pretty blurry metric for measuring code maintainability IMO.

    Yes, I'll grant you that.

    frits:
    For example, which would you rather have: 20 classes that are very limited in responsibility, or 1 behomoth that does the job of those 20?

    That's not so clear. I suspect I'd prefer half a dozen classes which each does a reasonable amount of work.

    The point is that complexity within a class and complexity of relationships between classes are both matters of concern. It seems to have become very fashionable to worry mostly about the first and hardly at all about the second. And that is every bit as bad as doing it vice versa.

    +1. Too many people out there using "design patterns" and "best practices" as excuses not to think instead of tools that can be useful in the appropriate circumstances.
  • Captain James T. Kirk 2011-11-17 12:50
    boog:
    pjt33:
    boog:
    ...so, management commissioned the Next Generation project.
    Good name for a project, management, well done. Projects need to have names so you can easily identify them in conversation, but the marketing spin just makes it so much sweeter. It's a lot easier to sell a fashionable name than it is to get real buy-in for the project itself.

    Seriously, Next Generation. Who's gonna question that?

    Fans of TOS, obviously.
    It all depends on which starship the stakeholders find to be more Enterprise-y.


    FTFY
  • Jay 2011-11-17 12:52
    Severity One:
    No, it's a map of the Falkland Islands, oddly enough.


    Wow, that is EXACTLY what I thought when I first saw it. I mean, not just "It looks like a map", but "It looks like a map of the Falkland Islands."

    (For the Argentine readers, I mean the Isles Malvinas.)
  • Jay 2011-11-17 12:54
    Rosuav:
    steenbergh:
    Why can't I click on it for a full-sized version?


    Preservation of sanity.


    Maybe he wants to use it as a model for his own next project.
  • Matt Westwood 2011-11-17 12:54
    That's really beautiful. Looks like an artist's impression of trees in the snow, as seen through a light winter mist.
  • Kuba 2011-11-17 12:55
    brazzy:
    1700 classes aren't that many. I've worked on far larger systems that were mostly OK.

    But those three classes that seem to have at least a hundred dependencies each... those scare me.
    If you're looking at any sort of a decent application development framework, reuse of existing code will surely make it so that some classes or methods refer to dozens of other basic classes. There's nothing wrong with it. Even a trivial Hello World application done in, say, Qt framework, will pull in on the order of a hundred classes indirectly.

    The graph, as shown in the article, does not allow anyone to truly judge the quality of the code. You cannot judge anything because the classes lack the hierarchical context. Usually in a framework there are layers of classes: at the bottom are basic data structures (say QVector, QList, QString), higher up are various simple primitives that may use those (say graphic primitives, MVC model elements, etc), further on you have things that provide more functionality (widgets, OS interfaces, ...). Higher up you'll have application-specific stuff, and that has a hierarchy of its own that may parallel some of the framework's own hierarchy.

    With an autogenerated diagram, where generation was done in the most silly way possible (like in the fine article), you don't know what's where in terms of hierarchy. Thus you cannot judge anything. If you get Qt's class hierarchy into a similarly poorly done diagram, it will look no better, even if it's a fairly well designed framework.
  • Jay 2011-11-17 12:59
    boog:
    ...so, management commissioned the Next Generation project.
    Good name for a project, management, well done. Projects need to have names so you can easily identify them in conversation, but the marketing spin just makes it so much sweeter. It's a lot easier to sell a fashionable name than it is to get real buy-in for the project itself.

    Seriously, Next Generation. Who's gonna question that?


    I think there's a law that every new project proposal must include the words "next generation", "paradigm", "utilize", and "enterprise". Probably several other magic words I'm forgetting.
  • Marnen Laibow-Koser 2011-11-17 13:00
    Exactly. There is somehow an implicit assumption being made here that more classes = bad. While one shouldn't overdesign, sometimes the clearest, best-factored design for a given system contains *more* classes, not fewer. Otherwise we'd all be writing procedural code shoved into one gigantic class...
  • Kuba 2011-11-17 13:02
    esteban:
    Don't get me wrong, I agree with the general thread that the thing looks like an over-engineered beast. Doesn't seem to be any agile 'build what you know you need' evident. My point is that large systems do this kind of refactoring, and get funding, for a reason -- not just because someone thinks its cool.
    They get funding because people who decide about allocation of funds probably couldn't code themselves out of a paper bag. You can't make decisions about funding coding if you have no clue about it, and likely a layer or two of people under you has little clue as well (otherwise they would be 10 layers below, not one or two).
  • Matt Westwood 2011-11-17 13:04
    Mmmpf:
    no laughing matter:

    The rest of us have switched from Notepad to professional IDEs about 10 or 15 years ago.
    (If someone has programmed Java with an IDE more than 17 years ago, please stand up!)


    I don't remember what I used before Visual Studio or Eclipse to write my code under Windows (probably UltraEdit), but I'm quite sure it wasn't Notepad. Actually now that I have absolutely no reason to use it, I started to like it, in a nostalgic way: it's there to remind me why I hated Windows so much (while still using it) back in the days: it does the smallest subset of things it is supposed to do, but in the worse possible way.

    Doesn't know how to cancel. Well yes it does, but just one time. Next time you cancel, it cancels the cancellation. Deeeep!

    Doesn't lock files when modifying it. You can open it, and it can get deleted. You still have it. It won't tell you anything if you save a deleted file: if you modified it, it will recreate it. If you didn't, it will just do nothing, keeping you in the warm illusion that your file still exists.

    Uses Ctrl+keystrokes. But if you're in a foreign language OS, it's all wrong. In Spanish for instance, Ctrl-G saves, Ctrl-A opens, Ctrl-B finds, Ctrl-R replaces, Ctrl-E selects all. Try to work with this. To its defense, some other Microsoft apps (Explorer, Office) use this retarded way of thinking localization.

    Doesn't know how to select a word by double-clicking it. Well yes it does, but the set of characters it considers as word separators is completely different for that of any other existing tool.

    Also, it has absolutely no functionality, but it has this entry in a menu to insert the current date and time. So it's a completely useless program, unless you want to rapidly insert the current date and time in a text file. In this case, it's the bomb.


    Before eclipse we used TextPad. Now, when not using eclipse or whatever tool is appropriate for whatever other stuff I happen to be doing, I use Notepad++. I recommend it.

    Was pissing around the other day on a remote server on which I was debugging a large app supplied by a large company. Needed to view a its log file. Only file view tools were Notepad and WordPad. Couldn't view the file while the app was running. WTF!?!? Installed Notepad++ and everything honky dorky.

    So WTF haven't MicroShit sorted out their fucking file viewers in the last 25 fucking years?
  • boog 2011-11-17 13:13
    Captain James T. Kirk:
    boog:
    pjt33:
    boog:
    ...so, management commissioned the Next Generation project.
    Good name for a project, management, well done. Projects need to have names so you can easily identify them in conversation, but the marketing spin just makes it so much sweeter. It's a lot easier to sell a fashionable name than it is to get real buy-in for the project itself.

    Seriously, Next Generation. Who's gonna question that?

    Fans of TOS, obviously.
    It all depends on which starship the stakeholders find to be more Enterprise-y.


    FTFY
    People say that jokes are ruined when you explain them. Thank you for proving all of them wrong.
  • Uncle Al 2011-11-17 13:25
    Matt Westwood:

    Uses Ctrl+keystrokes. But if you're in a foreign language OS, it's all wrong. In Spanish for instance, Ctrl-G saves, Ctrl-A opens, Ctrl-B finds, Ctrl-R replaces, Ctrl-E selects all. Try to work with this. To its defense, some other Microsoft apps (Explorer, Office) use this retarded way of thinking localization.

    And this is of course retarded because the letters chosen for ctrl-keystrokes should only by coincidence have any relation to the underlying command names in the local language, yes? (Though I'll admit surprise that "select all" isn't ctrl-T in a Spanish system...) For your next trick, are you going to explain how retarded it is for an application to make you type words from right to left when localized for Hebrew or Arabic?
  • boog 2011-11-17 13:29
    Jay:
    I think there's a law that every new project proposal must include the words "next generation", "paradigm", "utilize", and "enterprise". Probably several other magic words I'm forgetting.
    "Big picture". Also, "synergy", and its handful of variations.

    Oh, and lots of acronyms.
  • no laughing matter 2011-11-17 13:36
    Jay:

    I think there's a law that every new project proposal must include the words "next generation", "paradigm", "utilize", and "enterprise". Probably several other magic words I'm forgetting.

    * "Service-Oriented Architecture"
    * "X-As-A-Service" (Toilet-As-A-Service?)
    * "Cloud Computing" / alternatively: "in the Cloud"
    * "X-Driven-Y". Main variants:
    ** Model-Driven-Y (Architecture/Design/Development)
    ** Domain-Driven-Y
    ** Test-Driven-Y

    Paradigm-Shifting-Next-Generation-Zunesis-Driven-Porn-Browsing-As-A-Service-Oriented-Architecture-In-The-Enterprise-Cloud!

  • frits 2011-11-17 13:46
    no laughing matter:
    Jay:

    I think there's a law that every new project proposal must include the words "next generation", "paradigm", "utilize", and "enterprise". Probably several other magic words I'm forgetting.

    * "Service-Oriented Architecture"
    * "X-As-A-Service" (Toilet-As-A-Service?)
    * "Cloud Computing" / alternatively: "in the Cloud"
    * "X-Driven-Y". Main variants:
    ** Model-Driven-Y (Architecture/Design/Development)
    ** Domain-Driven-Y
    ** Test-Driven-Y

    Paradigm-Shifting-Next-Generation-Zunesis-Driven-Porn-Browsing-As-A-Service-Oriented-Architecture-In-The-Enterprise-Cloud!

    The difference between your list and Jay's is most of those things are actual concrete technologies that people actually use.

    Or are you using trolling-as-a-service?
  • boog 2011-11-17 13:50
    frits:
    no laughing matter:
    Jay:

    I think there's a law that every new project proposal must include the words "next generation", "paradigm", "utilize", and "enterprise". Probably several other magic words I'm forgetting.

    * "Service-Oriented Architecture"
    * "X-As-A-Service" (Toilet-As-A-Service?)
    * "Cloud Computing" / alternatively: "in the Cloud"
    * "X-Driven-Y". Main variants:
    ** Model-Driven-Y (Architecture/Design/Development)
    ** Domain-Driven-Y
    ** Test-Driven-Y

    Paradigm-Shifting-Next-Generation-Zunesis-Driven-Porn-Browsing-As-A-Service-Oriented-Architecture-In-The-Enterprise-Cloud!

    The difference between your list and Jay's is most of those things are actual concrete technologies that people actually use.

    Or are you using trolling-as-a-service?
    Troll-Driven-Commentary
  • Andy 2011-11-17 14:03
    Just great! But does anybody know what tool was used to draw this picture? I'd be happy to try it on one of our projects...
  • esteban 2011-11-17 14:24
    C-Octothorpe:
    esteban:
    boog:
    esteban:
    Executives don't typically fund wall-to-wall rewrites unless there's a real need. If may have been easy-to-support, but did it scale to the performance and availability needs? How much maintenance did it require? How easy was it to add new feature blocks?
    Not so sure that I agree. I've seen many projects where executives are sold on some Shiny New Technology, funding wall-to-wall rewrites of existing, proven systems when there was no real need. Being on the latest bandwagon is not a real need.

    You ask how well the old system scaled to performance and availability needs, maintenance, ease of adding new features, blah blah, but these things are rarely, if ever, measured correctly and impartially when considering a Shiny New Technology. The novelty of something new is too much to resist; people who buy into the hype (executives and programmers alike) will convince themselves they are being fair, when they're unwittingly misrepresenting the actual costs of the current system, and vastly underestimating the total costs of the new system.

    I'm not saying you're wrong, just that it happens more often than you'd think.


    Agreed, bright shiny objects can distract, and yes, there are companies that have more money than sense. But even in those cases, I doubt you'd find that selecting New Technology X was the *only* driver for moving down a particular path.
    He's not saying that. He said that people will misrepresent the facts about the current system (exaggerate maintenance costs, etc.) and outright lie about "gains" in the proposed system, in order to get the rewrite approved.

    We're getting pretty far afield here. Just because an app gets rewritten, doesn't mean the bogeyman is out there. People make technology choices for lots of reasons, good and bad (I like IBM, or I own stock in Microsoft, or the sales rep I'm hitting on works at X, or my legacy app is hard to maintain and needs a full refresh). Whether it gets rewritten well or not is the question. If the legacy app in this case was pristine nirvana, then by all means, the rewrite was pointless. Personally, I've never seen a green-field rewrite that didn't, at it's core, have a fundamental set of problems that needed to be solved and accountability for ROI, in addition to the political/religious technology preferences that went with it.
  • r66 2011-11-17 14:28
    I am sure, the generation after "the Next Generation" will seriously question this name choice when they start their next-generation-rewrite.
  • boog 2011-11-17 15:09
    esteban:
    Just because an app gets rewritten, doesn't mean the bogeyman is out there.
    Oh, I assure you I'm real.

    esteban:
    People make technology choices for lots of reasons, good and bad... Whether it gets rewritten well or not is the question.
    It's certainly important, but the question here is whether a rewrite is necessary. Even a well-written rewrite can be unnecessary.

    esteban:
    If the legacy app in this case was pristine nirvana, then by all means, the rewrite was pointless.
    Or in another case: What if the legacy app is stable, but maybe requires a gentle nudge from a developer every few months, needs a small module or two added or implemented, and has a handful of minor data transformation bugs? I would say a rewrite is pointless there as well; those issues could be resolved in a matter of weeks, maybe days. Some people would throw it out in favor of a rewrite, hoping to avoid all those documented flaws by design (and disregarding any undocumented flaws that come up in the rewrite).

    esteban:
    Personally, I've never seen a green-field rewrite that didn't, at it's core, have a fundamental set of problems that needed to be solved and accountability for ROI, in addition to the political/religious technology preferences that went with it.
    Personally, I've never seen a legacy app that was perfect to begin with. Any application that has support costs could be said to "have a fundamental set of problems" by anybody who wants to do the work of a rewrite (or take credit for it).
  • JayC 2011-11-17 15:16
    Kuba:
    brazzy:
    1700 classes aren't that many. I've worked on far larger systems that were mostly OK.

    But those three classes that seem to have at least a hundred dependencies each... those scare me.
    If you're looking at any sort of a decent application development framework, reuse of existing code will surely make it so that some classes or methods refer to dozens of other basic classes. There's nothing wrong with it. Even a trivial Hello World application done in, say, Qt framework, will pull in on the order of a hundred classes indirectly.

    The graph, as shown in the article, does not allow anyone to truly judge the quality of the code. You cannot judge anything because the classes lack the hierarchical context. Usually in a framework there are layers of classes: at the bottom are basic data structures (say QVector, QList, QString), higher up are various simple primitives that may use those (say graphic primitives, MVC model elements, etc), further on you have things that provide more functionality (widgets, OS interfaces, ...). Higher up you'll have application-specific stuff, and that has a hierarchy of its own that may parallel some of the framework's own hierarchy.

    With an autogenerated diagram, where generation was done in the most silly way possible (like in the fine article), you don't know what's where in terms of hierarchy. Thus you cannot judge anything. If you get Qt's class hierarchy into a similarly poorly done diagram, it will look no better, even if it's a fairly well designed framework.


    +1 agreed. If you define an interface or abstract class, and 100 things depend upon that interface/abstract class, with this dependency software, it looks like you'd get a big fuzzy ball, like (what looks like a few) of the classes shown.

    THE Real WTF is the lack of clarity dependency diagram.
  • DaveK 2011-11-17 15:27
    ObiWayneKenobi:
    You know, for all the flak that "enterprisey" code gets, keep in mind it's a GOOD thing to have abstractions. True, you don't need the
    HammerFactoryFactoryFactory

    Stop Stop Stop! HammerFactoryFactoryFactory time!

  • esteban 2011-11-17 15:36
    boog:
    esteban:
    Just because an app gets rewritten, doesn't mean the bogeyman is out there.
    Oh, I assure you I'm real.

    esteban:
    People make technology choices for lots of reasons, good and bad... Whether it gets rewritten well or not is the question.
    It's certainly important, but the question here is whether a rewrite is necessary. Even a well-written rewrite can be unnecessary.

    esteban:
    If the legacy app in this case was pristine nirvana, then by all means, the rewrite was pointless.
    Or in another case: What if the legacy app is stable, but maybe requires a gentle nudge from a developer every few months, needs a small module or two added or implemented, and has a handful of minor data transformation bugs? I would say a rewrite is pointless there as well; those issues could be resolved in a matter of weeks, maybe days. Some people would throw it out in favor of a rewrite, hoping to avoid all those documented flaws by design (and disregarding any undocumented flaws that come up in the rewrite).

    esteban:
    Personally, I've never seen a green-field rewrite that didn't, at it's core, have a fundamental set of problems that needed to be solved and accountability for ROI, in addition to the political/religious technology preferences that went with it.
    Personally, I've never seen a legacy app that was perfect to begin with. Any application that has support costs could be said to "have a fundamental set of problems" by anybody who wants to do the work of a rewrite (or take credit for it).


    Heh... doesn't mean he *isn't* out there either.

    Agreed, but tacking back to my original points, the decision to rewrite isn't necessarily a bad thing, if the app is insufficiently healthy. That measuring stick is different for everyone, but if I heard an app was being gutted, (depending on context) I wouldn't necessarily assume mendacity straight off. Sometimes the rationale can be even more mundane -- we need to spend our budget.

    Granted, a bad rewrite can be worse than the devil you know, but then governance, especially over the two-year time frame in this example, is hard.
  • picard 2011-11-17 15:41
    so, the number of classes [nc's, or NCC] is over 1700.

    like 1701?

    enterprizy
  • Matt Westwood 2011-11-17 16:02
    Uncle Al:
    Matt Westwood:

    Uses Ctrl+keystrokes. But if you're in a foreign language OS, it's all wrong. In Spanish for instance, Ctrl-G saves, Ctrl-A opens, Ctrl-B finds, Ctrl-R replaces, Ctrl-E selects all. Try to work with this. To its defense, some other Microsoft apps (Explorer, Office) use this retarded way of thinking localization.

    And this is of course retarded because the letters chosen for ctrl-keystrokes should only by coincidence have any relation to the underlying command names in the local language, yes? (Though I'll admit surprise that "select all" isn't ctrl-T in a Spanish system...) For your next trick, are you going to explain how retarded it is for an application to make you type words from right to left when localized for Hebrew or Arabic?


    That wasn't my quote, bub, but let it go ...
  • boog 2011-11-17 16:27
    esteban:
    Agreed, but tacking back to my original points, the decision to rewrite isn't necessarily a bad thing, if the app is insufficiently healthy.
    Agreed.

    esteban:
    That measuring stick is different for everyone, but if I heard an app was being gutted, (depending on context) I wouldn't necessarily assume mendacity straight off.
    Which I think is a valid point - we can be weary of rewrites, but we shouldn't assume outright that people are deliberately lying to push a rewrite.

    That said, I'm going to take the submitter's description of the legacy software as "easy-to-support" to be my evidence that the rewrite was probably unnecessary, regardless of motivation. There's no way for me to know for sure; the submitter's word is the only evidence I have right now.
  • coyo 2011-11-17 16:29
    <blockquote>
    ObiWayneKenobi:
    You know, for all the flak that "enterprisey" code gets, keep in mind it's a GOOD thing to have abstractions. True, you don't need the
    HammerFactoryFactoryFactory
    type of things, but it's usually considered good practice to have a lot of interfaces that get passed around - in fact doing such things is the foundation of good design (see Robert C. Martin's SOLID principles).

    Having few classes is often worse than having many, because chances are those classes violate the SRP and do more than one thing. Granted, something like the illustration here is outright ridiculous and way too complicated, but it's not always a bad thing to have a lot of abstractions.

    </blockquote>
    There is a correct balance between deep and wide. A programmer brain should be able to take in a unit a little less than a page long.<br> I have seen 10,000 line long functions, which is way beyond too much. <br>
    I've also seen messes of things so abstracted the code is just a mess of message passing single or double line subs.<br>
    Numerous small classes are not better when, in order to understand the whole, you have to hunt down over a dozen to see what is happening. They are a royal pain for debugging, when you have to put print statements (or breakpoints if you like debuggers) across lots of classes to catch errors.
  • Bob 2011-11-17 16:32
    Mmmpf:
    If you're in a foreign language OS, it's all wrong. In Spanish for instance, Ctrl-G saves, Ctrl-A opens, Ctrl-B finds, Ctrl-R replaces, Ctrl-E selects all. Try to work with this. To its defense, some other Microsoft apps (Explorer, Office) use this retarded way of thinking localization.

    Please attempt some sensitivity. I had a son who was retarded, and let me assure you: it is no matter to be taken casually.
  • Nagesh 2011-11-17 16:37
    Matt Westwood:
    Before eclipse we used TextPad. Now, when not using eclipse or whatever tool is appropriate for whatever other stuff I happen to be doing, I use Notepad++. I recommend it.

    Was pissing around the other day on a remote server on which I was debugging a large app supplied by a large company. Needed to view a its log file. Only file view tools were Notepad and WordPad. Couldn't view the file while the app was running. WTF!?!? Installed Notepad++ and everything honky dorky.

    So WTF haven't MicroShit sorted out their fucking file viewers in the last 25 fucking years?


    Pising on remote servers will cautrize your pising tool, bro!
  • boog 2011-11-17 16:42
    Mmmpf:
    boog:
    frits:
    It's a map of Europe!
    Not a map, just an artistic portrayal; it's abstract.

    Europe is abstract too.
    Nonsense, it's been instantiated at least once.
  • Matt Westwood 2011-11-17 16:48
    boog:
    esteban:
    Agreed, but tacking back to my original points, the decision to rewrite isn't necessarily a bad thing, if the app is insufficiently healthy.
    Agreed.

    esteban:
    That measuring stick is different for everyone, but if I heard an app was being gutted, (depending on context) I wouldn't necessarily assume mendacity straight off.
    Which I think is a valid point - we can be weary of rewrites, but we shouldn't assume outright that people are deliberately lying to push a rewrite.

    That said, I'm going to take the submitter's description of the legacy software as "easy-to-support" to be my evidence that the rewrite was probably unnecessary, regardless of motivation. There's no way for me to know for sure; the submitter's word is the only evidence I have right now.


    If you have an application written in FORTRAN that functions smooth as you like, easy to use, etc. etc. whose only downsides are: a) The hardware it runs on is obsolete and no longer supported, and there is no appropriate replacement, and b) despite needing minimal ongoing maintenance, you can't find any staff either willing or able to perform this task, then reluctantly you find you *have* to upgrade.

    And let me assure you, that's no laughing matter.
  • Matt Westwood 2011-11-17 16:51
    coyo:
    <blockquote>
    ObiWayneKenobi:
    You know, for all the flak that "enterprisey" code gets, keep in mind it's a GOOD thing to have abstractions. True, you don't need the
    HammerFactoryFactoryFactory
    type of things, but it's usually considered good practice to have a lot of interfaces that get passed around - in fact doing such things is the foundation of good design (see Robert C. Martin's SOLID principles).

    Having few classes is often worse than having many, because chances are those classes violate the SRP and do more than one thing. Granted, something like the illustration here is outright ridiculous and way too complicated, but it's not always a bad thing to have a lot of abstractions.

    </blockquote>
    There is a correct balance between deep and wide. A programmer brain should be able to take in a unit a little less than a page long.<br> I have seen 10,000 line long functions, which is way beyond too much. <br>
    I've also seen messes of things so abstracted the code is just a mess of message passing single or double line subs.<br>
    Numerous small classes are not better when, in order to understand the whole, you have to hunt down over a dozen to see what is happening. They are a royal pain for debugging, when you have to put print statements (or breakpoints if you like debuggers) across lots of classes to catch errors.


    Given the choice I prefer the former to the latter, because then at least you have a nice meaty refactoring job on your hands which will keep you nice and happily busy for a week or two's lovely overtime, just right at this time of year.
  • boog 2011-11-17 17:08
    Matt Westwood:
    If you have an application written in FORTRAN that functions smooth as you like, easy to use, etc. etc. whose only downsides are: a) The hardware it runs on is obsolete and no longer supported, and there is no appropriate replacement, and b) despite needing minimal ongoing maintenance, you can't find any staff either willing or able to perform this task, then reluctantly you find you *have* to upgrade.
    Obviously. At that point, it's no longer a decision to rewrite/upgrade, but an imperative.
  • esteban 2011-11-17 17:21
    Matt Westwood:
    boog:
    esteban:
    Agreed, but tacking back to my original points, the decision to rewrite isn't necessarily a bad thing, if the app is insufficiently healthy.
    Agreed.

    esteban:
    That measuring stick is different for everyone, but if I heard an app was being gutted, (depending on context) I wouldn't necessarily assume mendacity straight off.
    Which I think is a valid point - we can be weary of rewrites, but we shouldn't assume outright that people are deliberately lying to push a rewrite.

    That said, I'm going to take the submitter's description of the legacy software as "easy-to-support" to be my evidence that the rewrite was probably unnecessary, regardless of motivation. There's no way for me to know for sure; the submitter's word is the only evidence I have right now.


    If you have an application written in FORTRAN that functions smooth as you like, easy to use, etc. etc. whose only downsides are: a) The hardware it runs on is obsolete and no longer supported, and there is no appropriate replacement, and b) despite needing minimal ongoing maintenance, you can't find any staff either willing or able to perform this task, then reluctantly you find you *have* to upgrade.

    And let me assure you, that's no laughing matter.

    Lack of institutional knowledge sounds like a very unhealthy situation. Doesn't sound like much fun at all.
  • Matt Westwood 2011-11-17 17:23
    boog:
    Matt Westwood:
    If you have an application written in FORTRAN that functions smooth as you like, easy to use, etc. etc. whose only downsides are: a) The hardware it runs on is obsolete and no longer supported, and there is no appropriate replacement, and b) despite needing minimal ongoing maintenance, you can't find any staff either willing or able to perform this task, then reluctantly you find you *have* to upgrade.
    Obviously. At that point, it's no longer a decision to rewrite/upgrade, but an imperative.


    But oh so sad. There's a beautifully written program whose only crime is to be written in a language which is no longer "fashionable", for fucking pissing vb asp microsoft sake.
  • foo 2011-11-17 17:24
    Uncle Al:

    Uses Ctrl+keystrokes. But if you're in a foreign language OS, it's all wrong. In Spanish for instance, Ctrl-G saves, Ctrl-A opens, Ctrl-B finds, Ctrl-R replaces, Ctrl-E selects all. Try to work with this. To its defense, some other Microsoft apps (Explorer, Office) use this retarded way of thinking localization.

    And this is of course retarded because the letters chosen for ctrl-keystrokes should only by coincidence have any relation to the underlying command names in the local language, yes?

    Like they do in the nonlocal(?) language? Ctrl-X = cut, Ctrl-V = paste, Ctrl-Z = undo. WTF?
  • Piotr 2011-11-17 17:25
    Cool,
    Can you post full res picture? It will make super geek desktop background!

    :)
  • Sole Purpose of Visit 2011-11-17 17:30
    RichP:
    steenbergh:
    Why can't I click on it for a full-sized version?


    It's actually a fractal, so it looks the same at all levels of zoom.


    This one seriously merits a "featured comment."

    That opens up a whole new area of Type Theory. If your hierarchy can be modeled as a fractal, then 1700 classes is a mere bagatelle!
  • PiisAWheeL 2011-11-17 17:32
    It looks more like a map of dependencies for the entire star trek franchise. (Was I not supposed to open that can of worms?)
  • Silverhill 2011-11-17 17:33
    Mmmpf:
    But see, when you turn the mouse wheel, it switches from WTF to Silverlight then Metro then WinForms then Telescript then back to WTF again. Nice isn't it?

    FTFY
  • Pervert 2011-11-17 17:47
    Consultants have been busy. It's hard work looking like you're working then, when crunch time comes, taking a map of the world, turning it upside down, squinting and drawing a bunch of boxes to match.
  • boog 2011-11-17 17:47
    Matt Westwood:
    boog:
    Matt Westwood:
    If you have an application written in FORTRAN that functions smooth as you like, easy to use, etc. etc. whose only downsides are: a) The hardware it runs on is obsolete and no longer supported, and there is no appropriate replacement, and b) despite needing minimal ongoing maintenance, you can't find any staff either willing or able to perform this task, then reluctantly you find you *have* to upgrade.
    Obviously. At that point, it's no longer a decision to rewrite/upgrade, but an imperative.

    But oh so sad. There's a beautifully written program whose only crime is to be written in a language which is no longer "fashionable", for fucking pissing vb asp microsoft sake.
    Absolutely. I never said it was right.
  • esteban 2011-11-17 18:04
    Matt Westwood:
    boog:
    Matt Westwood:
    If you have an application written in FORTRAN that functions smooth as you like, easy to use, etc. etc. whose only downsides are: a) The hardware it runs on is obsolete and no longer supported, and there is no appropriate replacement, and b) despite needing minimal ongoing maintenance, you can't find any staff either willing or able to perform this task, then reluctantly you find you *have* to upgrade.
    Obviously. At that point, it's no longer a decision to rewrite/upgrade, but an imperative.


    But oh so sad. There's a beautifully written program whose only crime is to be written in a language which is no longer "fashionable", for fucking pissing vb asp microsoft sake.


    Don't know that fashionable plays into it. If the code hasn't upgraded to more current versions of FORTRAN (and I know next to nothing about it, but do see that there's an OOP version and Fortran 2003), and won't run on modern hardware, that's an adapt or die problem.
  • Matt Westwood 2011-11-17 18:15
    esteban:
    Matt Westwood:
    boog:
    Matt Westwood:
    If you have an application written in FORTRAN that functions smooth as you like, easy to use, etc. etc. whose only downsides are: a) The hardware it runs on is obsolete and no longer supported, and there is no appropriate replacement, and b) despite needing minimal ongoing maintenance, you can't find any staff either willing or able to perform this task, then reluctantly you find you *have* to upgrade.
    Obviously. At that point, it's no longer a decision to rewrite/upgrade, but an imperative.


    But oh so sad. There's a beautifully written program whose only crime is to be written in a language which is no longer "fashionable", for fucking pissing vb asp microsoft sake.


    Don't know that fashionable plays into it. If the code hasn't upgraded to more current versions of FORTRAN (and I know next to nothing about it, but do see that there's an OOP version and Fortran 2003), and won't run on modern hardware, that's an adapt or die problem.


    QFT. Arsewipe company wasn't prepared to admit the possibility that FORTRAN 95 or 2003 were worth a piss.
  • Simon 2011-11-17 21:51
    Daid:
    Because in my experience, Java developers have a tendency to generate a lot of glue on glue code. IntegerFactoryImplementationFactoryGeneratorImplementationInterface.


    I blame Sun, for setting bad examples in their own APIs.
  • PiisAWheeL 2011-11-17 23:09
    Allan Schatsky:
    This raises so many pressing questions, like what's with the tiny, logical section at the bottom, and when will this be made available in desktop size?


    That little logical section at the bottom is where the program actually does what the client wants. The rest is called "job security" for a very large number of programmers.
  • Scarlet Manuka 2011-11-17 23:23
    Captain James T. Kirk:
    boog:
    It all depends on which starship the stakeholders find to be more Enterprise-E.

    FTFY

    FFTFY. (Finished fixing...)
  • DaveK 2011-11-18 00:40
    foo:
    Uncle Al:

    Uses Ctrl+keystrokes. But if you're in a foreign language OS, it's all wrong. In Spanish for instance, Ctrl-G saves, Ctrl-A opens, Ctrl-B finds, Ctrl-R replaces, Ctrl-E selects all. Try to work with this. To its defense, some other Microsoft apps (Explorer, Office) use this retarded way of thinking localization.

    And this is of course retarded because the letters chosen for ctrl-keystrokes should only by coincidence have any relation to the underlying command names in the local language, yes?

    Like they do in the nonlocal(?) language? Ctrl-X = cut, Ctrl-V = paste, Ctrl-Z = undo. WTF?
    Ctrl-X = eXcise
    Ctrl-V = adhesiVe
    Ctrl-Z = reviZe

    ;-)
  • DaveK 2011-11-18 00:43
    Matt Westwood:

    Was pissing around the other day on a remote server on which I was debugging a large app supplied by a large company. Needed to view a its log file. Only file view tools were Notepad and WordPad. Couldn't view the file while the app was running. WTF!?!? Installed Notepad++ and everything honky dorky.

    So WTF haven't MicroShit sorted out their fucking file viewers in the last 25 fucking years?
    At least on W2k, and IIRC XP too, Notepad has no trouble opening in-use files. However it's so lousy as an editor that I prefer to use the cmd.exe COPY command (which also works on in-use files) to copy it to a new name and then use wordpad to read the (partial) copy.

  • d 2011-11-18 04:13
    Kuba:
    brazzy:
    1700 classes aren't that many. I've worked on far larger systems that were mostly OK.

    But those three classes that seem to have at least a hundred dependencies each... those scare me.
    If you're looking at any sort of a decent application development framework, reuse of existing code will surely make it so that some classes or methods refer to dozens of other basic classes. There's nothing wrong with it. Even a trivial Hello World application done in, say, Qt framework, will pull in on the order of a hundred classes indirectly.

    The graph, as shown in the article, does not allow anyone to truly judge the quality of the code. You cannot judge anything because the classes lack the hierarchical context. Usually in a framework there are layers of classes: at the bottom are basic data structures (say QVector, QList, QString), higher up are various simple primitives that may use those (say graphic primitives, MVC model elements, etc), further on you have things that provide more functionality (widgets, OS interfaces, ...). Higher up you'll have application-specific stuff, and that has a hierarchy of its own that may parallel some of the framework's own hierarchy.

    With an autogenerated diagram, where generation was done in the most silly way possible (like in the fine article), you don't know what's where in terms of hierarchy. Thus you cannot judge anything. If you get Qt's class hierarchy into a similarly poorly done diagram, it will look no better, even if it's a fairly well designed framework.

    You can't judge it directly from the graph/map/multidimensional painting, but you CAN judge it by the fact that it's half finished after two years and replacing a 100 class working system.
  • Render0r 2011-11-18 05:15
    If you need a render farm for your dependency diagram, you are doing it wrong
  • Mmmpf 2011-11-18 05:24
    Uncle Al:
    Matt Westwood:

    Uses Ctrl+keystrokes. But if you're in a foreign language OS, it's all wrong. In Spanish for instance, Ctrl-G saves, Ctrl-A opens, Ctrl-B finds, Ctrl-R replaces, Ctrl-E selects all. Try to work with this. To its defense, some other Microsoft apps (Explorer, Office) use this retarded way of thinking localization.

    And this is of course retarded because the letters chosen for ctrl-keystrokes should only by coincidence have any relation to the underlying command names in the local language, yes? (Though I'll admit surprise that "select all" isn't ctrl-T in a Spanish system...) For your next trick, are you going to explain how retarded it is for an application to make you type words from right to left when localized for Hebrew or Arabic?


    I don't know why you would think Matt Westwood wrote that, he lives in UK and I don't see why he would have met a Spanish version of Windows ever.
    I think it's retarded because it's just a key scheme Microsoft decided to follow, without promoting it to some kind of native system which every application has to use. So, if you use Spanish Windows with American Office, you will have to think, before selecting all, if you're doing it within the OS or within Word.

    Furthermore, every other software developer totally ignores it and uses the US scheme. Even Microsoft uses the classic US scheme it the vast majority of their tools, even when in Spanish.

    Besides, in a Spanish version of Visual Studio, a plug-in developer needs to think, before assigning a keystroke to a functionality of his plugin, if somewhere, in some language, that keystroke isn't already used for one of the classic keystrokes like Open or Select All. Do you think any of them care about this? No, of course!

    So in the end, you use the same keystrokes as US OSes, except in two or three Microsoft applications, which is a big pain in the butt. And I really don't care if the key corresponds to the first letter of a word: those keystrokes are for power users (I never saw a occasional PC user use keystrokes like this), we learned them 15 years ago, we don't need them to be changed.

    It's like French or German keyboards: really, WTF?? That's not how you localize stuff, that's just plain stupid.
  • Mmmpf 2011-11-18 05:31
    DaveK:
    Matt Westwood:

    Was pissing around the other day on a remote server on which I was debugging a large app supplied by a large company. Needed to view a its log file. Only file view tools were Notepad and WordPad. Couldn't view the file while the app was running. WTF!?!? Installed Notepad++ and everything honky dorky.

    So WTF haven't MicroShit sorted out their fucking file viewers in the last 25 fucking years?
    At least on W2k, and IIRC XP too, Notepad has no trouble opening in-use files. However it's so lousy as an editor that I prefer to use the cmd.exe COPY command (which also works on in-use files) to copy it to a new name and then use wordpad to read the (partial) copy.



    Notepad++ can open files that are in use, updates it when it has focus if you want... Plus, it can open huges files in an instant... It's an amazing tool really.
  • Annonymous 2011-11-18 05:59
    KevinHamburger:
    Holy crap, there's a class for each symbol on the ASCII table there.


    Forget ASCII. Try Unicode.
  • Monkeycode 2011-11-18 07:09
    Mmmpf:

    Notepad++ can open files that are in use, updates it when it has focus if you want... Plus, it can open huges files in an instant... It's an amazing tool really.


    Sorry I don't believe you. Product with two pluses in name can't be good.
  • DaveK 2011-11-18 07:53
    Monkeycode:
    Mmmpf:

    Notepad++ can open files that are in use, updates it when it has focus if you want... Plus, it can open huges files in an instant... It's an amazing tool really.


    Sorry I don't believe you. Product with two pluses in name can't be good.
    They're not good - they're doubleplusgood!

  • DaveK 2011-11-18 07:54
    Mmmpf:
    DaveK:
    Matt Westwood:

    Was pissing around the other day on a remote server on which I was debugging a large app supplied by a large company. Needed to view a its log file. Only file view tools were Notepad and WordPad. Couldn't view the file while the app was running. WTF!?!? Installed Notepad++ and everything honky dorky.

    So WTF haven't MicroShit sorted out their fucking file viewers in the last 25 fucking years?
    At least on W2k, and IIRC XP too, Notepad has no trouble opening in-use files. However it's so lousy as an editor that I prefer to use the cmd.exe COPY command (which also works on in-use files) to copy it to a new name and then use wordpad to read the (partial) copy.



    Notepad++ can open files that are in use, updates it when it has focus if you want... Plus, it can open huges files in an instant... It's an amazing tool really.
    Yes, I think that was Matt's point. I was just pointing out an alternative for situations where it's not available.

  • Nagesh 2011-11-18 08:19
    Matt Westwood:

    Given the choice I prefer the former to the latter, because then at least you have a nice meaty refactoring job on your hands which will keep you nice and happily busy for a week or two's lovely overtime, just right at this time of year.

    You obvious are not being computer profesional. Nuthing but profesional trol.

    http://www.dol.gov/whd/regs/compliance/fairpay/fs17e_computer.htm

    Don't be a H8R.

    I undertake project in java, if you need help with homework, contact me.
  • Nagesh 2011-11-18 09:34
    Anyone wanting to join me for lunch?

  • Nagesh 2011-11-18 09:58
    esteban:
    Matt Westwood:
    boog:
    Matt Westwood:
    If you have an application written in FORTRAN that functions smooth as you like, easy to use, etc. etc. whose only downsides are: a) The hardware it runs on is obsolete and no longer supported, and there is no appropriate replacement, and b) despite needing minimal ongoing maintenance, you can't find any staff either willing or able to perform this task, then reluctantly you find you *have* to upgrade.
    Obviously. At that point, it's no longer a decision to rewrite/upgrade, but an imperative.


    But oh so sad. There's a beautifully written program whose only crime is to be written in a language which is no longer "fashionable", for fucking pissing vb asp microsoft sake.


    Don't know that fashionable plays into it. If the code hasn't upgraded to more current versions of FORTRAN (and I know next to nothing about it, but do see that there's an OOP version and Fortran 2003), and won't run on modern hardware, that's an adapt or die problem.


    People make these decisions more complicated than they have to be. Upgrading is not a decision of technology, it is a decision of economics. If the net present value of the upgrade project exceeds the net present value of doing nothing, then it makes sense to do the upgrade (and net present value accounts for the risk).
  • Nagesh 2011-11-18 10:00
    Nagesh:
    esteban:
    Matt Westwood:
    boog:
    Matt Westwood:
    If you have an application written in FORTRAN that functions smooth as you like, easy to use, etc. etc. whose only downsides are: a) The hardware it runs on is obsolete and no longer supported, and there is no appropriate replacement, and b) despite needing minimal ongoing maintenance, you can't find any staff either willing or able to perform this task, then reluctantly you find you *have* to upgrade.
    Obviously. At that point, it's no longer a decision to rewrite/upgrade, but an imperative.


    But oh so sad. There's a beautifully written program whose only crime is to be written in a language which is no longer "fashionable", for fucking pissing vb asp microsoft sake.


    Don't know that fashionable plays into it. If the code hasn't upgraded to more current versions of FORTRAN (and I know next to nothing about it, but do see that there's an OOP version and Fortran 2003), and won't run on modern hardware, that's an adapt or die problem.


    People make these decisions more complicated than they have to be. Upgrading is not a decision of technology, it is a decision of economics. If the net present value of the upgrade project exceeds the net present value of doing nothing, then it makes sense to do the upgrade (and net present value accounts for the risk).


    This is being why bus being painted mor oftan than apeartmant not being painted for decedes.

  • frits 2011-11-18 10:04
    India looks kinda like Newark, NJ.
  • Nagesh 2011-11-18 10:06
    frits:
    India looks kinda like Newark, NJ.

    Sadly, Indian woman also resembling newark woman :(
  • Bryan 2011-11-18 10:07
    Oh look! It's the Very Hungry Caterpillar.
  • geoffrey 2011-11-18 10:17
    Enterprises have unique and complex problems, which require unique and complex software systems to solve. TRWTF is Bob thinking things are simpler than they really are.
  • PiisAWheeL 2011-11-18 14:13
    Nagesh:
    Anyone wanting to join me for lunch?



    Absolutely! That goat look delicious.
  • Hortical 2011-11-18 15:22
    PiisAWheeL:
    Nagesh:
    Anyone wanting to join me for lunch?
    Absolutely! That goat look delicious.
    Oh, the goat? I just assumed we were eating the shirtless kid. Bunch of savages over there.
  • SQLDave 2011-11-18 17:33
    It's a Magic Eye! If I blur my focus just right, I see a unicorn humping an Irish girl.
  • PiisAWheeL 2011-11-18 19:45
    Hortical:
    PiisAWheeL:
    Nagesh:
    Anyone wanting to join me for lunch?
    Absolutely! That goat look delicious.
    Oh, the goat? I just assumed we were eating the shirtless kid. Bunch of savages over there.


    Is it me or does everyone in that pic look pissed. Even the goat looks angry... Makes me think of India as an angry place to live.
  • NGProject 2011-11-20 14:10
    Stop mocking about the picture of my brain!!

    Do I run around and say "Your brain looks like cauliflower"?

    Humans suck!!!
  • 康威廉 2011-11-20 16:12
    How interesting to read this well expressed opinion. This shows how big business and government, hamstrings itself with unnecessary complicated systems which grow of of control.

    Lets face it the real cause of this is overinflated ego's in IT departments.

    However, on the basis that one should not give advice or wisdom to a horse's arse leave them well alone to their folly and concentrate on the smaller enterprises who have the capability to see the potential of simple sensible solutions.

    I give you one example: recently the Government financed a huge multi million project to digitize NHS paper records. At the same time about ten years ago I think,another major organization were using an old MSDOS based system to do much the same with Probate records which are not dissimilar. An IT friend wrote a few lines of PHP code which solved the Probate problem. Was it used ? Of course not!!!

    WTF
  • nortee 2011-11-20 18:24
    They haven't updated that because they won't make money from it...
  • nortee 2011-11-20 18:29
    Matt Westwood:
    Mmmpf:
    no laughing matter:

    The rest of us have switched from Notepad to professional IDEs about 10 or 15 years ago.
    (If someone has programmed Java with an IDE more than 17 years ago, please stand up!)


    I don't remember what I used before Visual Studio or Eclipse to write my code under Windows (probably UltraEdit), but I'm quite sure it wasn't Notepad. Actually now that I have absolutely no reason to use it, I started to like it, in a nostalgic way: it's there to remind me why I hated Windows so much (while still using it) back in the days: it does the smallest subset of things it is supposed to do, but in the worse possible way.

    Doesn't know how to cancel. Well yes it does, but just one time. Next time you cancel, it cancels the cancellation. Deeeep!

    Doesn't lock files when modifying it. You can open it, and it can get deleted. You still have it. It won't tell you anything if you save a deleted file: if you modified it, it will recreate it. If you didn't, it will just do nothing, keeping you in the warm illusion that your file still exists.

    Uses Ctrl+keystrokes. But if you're in a foreign language OS, it's all wrong. In Spanish for instance, Ctrl-G saves, Ctrl-A opens, Ctrl-B finds, Ctrl-R replaces, Ctrl-E selects all. Try to work with this. To its defense, some other Microsoft apps (Explorer, Office) use this retarded way of thinking localization.

    Doesn't know how to select a word by double-clicking it. Well yes it does, but the set of characters it considers as word separators is completely different for that of any other existing tool.

    Also, it has absolutely no functionality, but it has this entry in a menu to insert the current date and time. So it's a completely useless program, unless you want to rapidly insert the current date and time in a text file. In this case, it's the bomb.


    Before eclipse we used TextPad. Now, when not using eclipse or whatever tool is appropriate for whatever other stuff I happen to be doing, I use Notepad++. I recommend it.

    Was pissing around the other day on a remote server on which I was debugging a large app supplied by a large company. Needed to view a its log file. Only file view tools were Notepad and WordPad. Couldn't view the file while the app was running. WTF!?!? Installed Notepad++ and everything honky dorky.

    So WTF haven't MicroShit sorted out their fucking file viewers in the last 25 fucking years?

    Because they won't make money from updating that kind of stuff... Economics 101... :|
  • Nagesh 2011-11-21 10:36
    Are they not meke money from windows selling?
  • Hmmmmmpf... 2011-11-23 09:37
    Mmmpf:
    Uncle Al:
    Matt Westwood:

    Uses Ctrl+keystrokes. But if you're in a foreign language OS, it's all wrong. In Spanish for instance, Ctrl-G saves, Ctrl-A opens, Ctrl-B finds, Ctrl-R replaces, Ctrl-E selects all. Try to work with this. To its defense, some other Microsoft apps (Explorer, Office) use this retarded way of thinking localization.

    And this is of course retarded because the letters chosen for ctrl-keystrokes should only by coincidence have any relation to the underlying command names in the local language, yes? (Though I'll admit surprise that "select all" isn't ctrl-T in a Spanish system...) For your next trick, are you going to explain how retarded it is for an application to make you type words from right to left when localized for Hebrew or Arabic?


    I don't know why you would think Matt Westwood wrote that, he lives in UK and I don't see why he would have met a Spanish version of Windows ever.
    I think it's retarded because it's just a key scheme Microsoft decided to follow, without promoting it to some kind of native system which every application has to use. So, if you use Spanish Windows with American Office, you will have to think, before selecting all, if you're doing it within the OS or within Word.

    Furthermore, every other software developer totally ignores it and uses the US scheme. Even Microsoft uses the classic US scheme it the vast majority of their tools, even when in Spanish.

    Besides, in a Spanish version of Visual Studio, a plug-in developer needs to think, before assigning a keystroke to a functionality of his plugin, if somewhere, in some language, that keystroke isn't already used for one of the classic keystrokes like Open or Select All. Do you think any of them care about this? No, of course!

    So in the end, you use the same keystrokes as US OSes, except in two or three Microsoft applications, which is a big pain in the butt. And I really don't care if the key corresponds to the first letter of a word: those keystrokes are for power users (I never saw a occasional PC user use keystrokes like this), we learned them 15 years ago, we don't need them to be changed.

    It's like French or German keyboards: really, WTF?? That's not how you localize stuff, that's just plain stupid.



    I partially agree. It's true that having different key shortcuts than the standard is a pain in the ass, specially if the they're different even to the rest of the same system.

    But you're just plain wrong about "those keystrokes are for power users [...] we learned them 15 years ago, we don't need them to be changed". Occasional users occasionally know about keystrokes too, and it's much, much easier to teach them if they have any way to remember them. If you're Spanish, your computer is in Spanish, and your keyboard is in Spanish, I think shortcuts should obviously correspond to spanish words (Ctrl+C,V,Z are historic exceptions). The only problem is power-users that have already learned the English shortcuts (and the rest of non-localized applications).

    The obvious solution is to have system-wide shortcut customization. Change the locale to Spanish, and you have Spanish shortcuts. Change it to English and they're English. Or you can have "Ctrl+Alt+W+2+Ñ" as "Undo" if you want. I'm pretty sure every linux distro (and probably Mac OS) can do this already.


    CAPTCHA: jumentum. Jumentum is conserved between Portals.
  • Maurizio 2011-11-24 09:43
    > Not requiring a file per class is an enormous help there.

    The following is legal (incomplete) java code, in a single file

    public class MyContainer
    {
    public static class MyClass1
    {
    }
    public static class MyClass2
    {
    }

    ....

    public static class MyClassN
    {
    }
    }

    May not be nice (depends on the point of view, and on what the classes does), but there is nothing that prevent you from having one hundred java class for each file. It also offer you a nice way to implements sub-modules without having pseudo sub-packages.
  • L. 2011-11-29 07:51
    foo:
    Uncle Al:

    Uses Ctrl+keystrokes. But if you're in a foreign language OS, it's all wrong. In Spanish for instance, Ctrl-G saves, Ctrl-A opens, Ctrl-B finds, Ctrl-R replaces, Ctrl-E selects all. Try to work with this. To its defense, some other Microsoft apps (Explorer, Office) use this retarded way of thinking localization.

    And this is of course retarded because the letters chosen for ctrl-keystrokes should only by coincidence have any relation to the underlying command names in the local language, yes?

    Like they do in the nonlocal(?) language? Ctrl-X = cut, Ctrl-V = paste, Ctrl-Z = undo. WTF?


    Pfft . never heard of silent consonants ?

    Pastev, undoz, cutx ... get your spelling right seriously
  • L. 2011-11-29 07:51
    Matt Westwood:
    Mmmpf:
    no laughing matter:

    The rest of us have switched from Notepad to professional IDEs about 10 or 15 years ago.
    (If someone has programmed Java with an IDE more than 17 years ago, please stand up!)


    I don't remember what I used before Visual Studio or Eclipse to write my code under Windows (probably UltraEdit), but I'm quite sure it wasn't Notepad. Actually now that I have absolutely no reason to use it, I started to like it, in a nostalgic way: it's there to remind me why I hated Windows so much (while still using it) back in the days: it does the smallest subset of things it is supposed to do, but in the worse possible way.

    Doesn't know how to cancel. Well yes it does, but just one time. Next time you cancel, it cancels the cancellation. Deeeep!

    Doesn't lock files when modifying it. You can open it, and it can get deleted. You still have it. It won't tell you anything if you save a deleted file: if you modified it, it will recreate it. If you didn't, it will just do nothing, keeping you in the warm illusion that your file still exists.

    Uses Ctrl+keystrokes. But if you're in a foreign language OS, it's all wrong. In Spanish for instance, Ctrl-G saves, Ctrl-A opens, Ctrl-B finds, Ctrl-R replaces, Ctrl-E selects all. Try to work with this. To its defense, some other Microsoft apps (Explorer, Office) use this retarded way of thinking localization.

    Doesn't know how to select a word by double-clicking it. Well yes it does, but the set of characters it considers as word separators is completely different for that of any other existing tool.

    Also, it has absolutely no functionality, but it has this entry in a menu to insert the current date and time. So it's a completely useless program, unless you want to rapidly insert the current date and time in a text file. In this case, it's the bomb.


    Before eclipse we used TextPad. Now, when not using eclipse or whatever tool is appropriate for whatever other stuff I happen to be doing, I use Notepad++. I recommend it.

    Was pissing around the other day on a remote server on which I was debugging a large app supplied by a large company. Needed to view a its log file. Only file view tools were Notepad and WordPad. Couldn't view the file while the app was running. WTF!?!? Installed Notepad++ and everything honky dorky.

    So WTF haven't MicroShit sorted out their fucking file viewers in the last 25 fucking years?


    Notepad++ FTW /. I don't use IDE's and I know I should give it a try .. but notepad++ is one damn good reason to keep a windows environment somewhere.