''See SelecticaCxLanguage for a description of the tagging language to which this page is most certainly not a veiled reference...'' DeletionCandidate? ''yes'' The above-mentioned language page apparently was deleted long ago. Page SelecticaInc questions whether this page is related to Selectica or not. References below argue about or are ambiguous about whether this is about Selectica, and if so, why the reference is veiled rather than direct. Searching Selectica's site (and indeed, the entire web) for tags like CyElse or CxElse from below fail. So what on earth are we talking about here? If it is impossible for anyone to explain, then as it stands this page is just the remnant of a WalledGarden (see note on SelecticaInc), so then this page should either be deleted, or conceivably edited (and renamed) to be a complaint about the '''many''' XML-based languages that blow up simple expressions like '''(a+b)*c''' into 10 lines and a thousand characters. Actually the latter option. I belatedly note that this page was created 3 years ago by someone who moved its contents from XmlProponent. ------ ... from XmlProponent I suppose that a ''proponent'' advocates xml when it seems suitable, and a ''fanatic'' invents stupid languages like this: output some stuff ... output different stuff different logic... Not to mention that expression evaluation was done like this: (You guessed it, there was no "-" operator,... you just have to add negatives. ) [In C, C++, Perl, Python, Java and Visual Basic, you could just write (a+b)*c. In cy tags, you'll need at least 4 lines of fluff to say this. I bet most assembly language programmers can do (a+b)*c in two lines - and that it will be more understandable in assembler than using a pair of nested plugin expressions in cy tag.] I discovered the same bug in 41 different places in a single file... Then I found the same bug a few times in another file... (Ever heard of OnceAndOnlyOnce?) I tried to shorten the code - then I realised just how long the expression for calling a "subroutine" would be. (You have to include a separate element for every parameter...) Then I found the subtle scoping problems with variables, introduced by element nesting. Business logic, textual content and presentation were never supposed to be woven together with this sort of rubbish - you knew that, but you'd expect even those most resistant to commonsense to twig something was wrong when a number of these files topped 200k. Finally, proof of the shallowness of the design came when I noticed that we had to buy a custom-written plugin to output symbols like "&" properly. (This tool was originally conceived to write interactive web pages for e-commerce sites.) * What does this say about html & xml output before this plugin was written? * What does this say about the power and conciseness of the tag-based programming language if string substitution and output requires a plug-in? * What does this say about the depth of thought that went into the design of the tagging-language in general? I'd like to meet the person who thought this up and lock them in a pair of stocks. Then I'd sell tomatoes and rotten cabbage to incandescent programmers fresh from maintaining the verbose, underpowered crap that this person has foisted on the world. ''Oh, you've seen XSL, have you?'' At least XSL is well-formed XML. We're generating XML in this brain-dead scripting language. It has the verbosity of XML, but the actual scripts you write can't be valid... e.g.: " /> The best bit comes when you're required to use this language to inject JavaScript into HTML output from this... That's a good way to spend four days testing a build. (Funny how all the test cases would take at least two weeks to run by hand...) HttpUnit, nor CanooWebTest are going to save you when you have business logic in client-side JavaScript. '''Options''' - so what's a PragmaticProgrammer to do? * Refactor repeated blocks of cy tags with cysub procedures - long winded, but it dresses the wound a little. (With large repeated blocks this might actually make the code shorter... but a subroutine call with arguments can take many lines to write.) * Functional testing through http: Some JavaScript-based business logic is injected into the html using the cy tags.. hence HttpUnit and CanooWebTest are out. * Refactoring the logic in general would be fun because business logic is in the database triggers, the templates and in the client-side JavaScript... and of course, automated regression testing this is a big challenge. * What about unit testing frameworks like JUnit? I've got a few Mb of text files, but nothing resembling a unit. * Quietly find a job with a firm that has a clue, and resign. Attach an article called "Why CyTags isn't my favourite programming language" to your resignation letter. ---- * ''So you're not going to play that music?'' ** No. * ''What are you going to do with that music?'' ** If I had a match, I could put it out of it's misery. -- old muppet show joke (Zoot (the saxophone player) said it) ---- Gruesome isn't it? I wish we could just be honest and admit we need a real programming language and a separate templating language... maybe we could use J2EE taglibs. If "pragmatic programmers" care about their work then some of us will have to practice "professional detachment" like doctors and nurses, so that we can survive. -- HarassedHacker ''Who invented this mutated-LISP monstrosity anyway?'' Disclaimer: This page describes the cy tag language, and not the cxtags used by Selectica (http://www.selectica.com "don't delay, buy today!!!") in their toolset. Any similarity to their tagging technology is purely coincidental. Disclaimer on the disclaimer: There isn't any sarcasm or irony on this page. Any perceived use of sarcasm or irony on this page is in the mind of the beholder. Especially if you are a lawyer acting for Selectica. ''This page would be more useful to readers if it were named after the actual programming language or after the actual vendor. Concern about lawsuits for saying "XXX sucks" is probably unnecessary; if it were, Microsoft would've bankrupted WardCunningham years ago.'' ''Also, this page would be more useful if the name weren't so bloody cumbersome. Perhaps SelecticaCxLanguage?'' (This page is named after BrianKernighan's hilarious WhyPascalIsNotMyFavoriteProgrammingLanguage.) ''Is Pascal really the name of the language, or is it actually "Pascab", and Kernighan was just worried about getting sued?'' : I think Kernighan could take Wirth in a bar fight. * ''I'm sure of it. Have you seen him? Wirth would be bantam weight -- not to mention being the stereotypical mild-mannered academic.'' * ''Where did "Pascab" come from? If it was seen somewherer in the paper WhyPascalIsNotMyFavoriteProgrammingLanguage, it was just a typo, and if not...huh?'' ---- CategoryStory * "Story"? How do you figure? ''Because it really is one. The title 'WhyCyTagIsntMyFavouriteProgrammingLanguage' even confirms that. Though I agree, that the story is disguised by the technical details around it - and by the comments added everywhere.''