• (disco)

    There's that language="JavaScript" again. I don't know what standard tells you to do that but it wasn't the one I read.

  • (disco) in reply to Zacrath
    Zacrath:
    There's that `language="JavaScript"` again. I don't know what standard tells you to do that but it wasn't the one I read.

    IIRC my “Javascript 1.5” book (circa 1998) indicated that this was necessary for compatibility with Netscape 2, but that the recommended way for modern (for the time) browsers was type="text/JavaScript".

    I’m pretty sure that browsers which only understand language="JavaScript" do not support Dojo, {...} notation to define objects, and CSS, though...

  • (disco)

    I love how a num is a string. Ain't never going to surprise anyone like that…

  • (disco)

    F6F9FC is definitely more blue than any other primary colour, so it's OK to call it 'blue'. And anyway it might just be part of a 'blue' theme, going from the name of the class...

  • (disco)

    I suspect that some people do this kind of stuff when first learning languages at U, then when they get a job are under pressure and simply reuse stuff they did as a student, because learning how to do it properly takes work. The faster a computer is, the faster it can repeat all your mistakes.

  • (disco)

    I wanted to say that nobody writes code that badly..but then I remembered that here I am helping performance tune an application written by one of folks that, after first using an O(n^2) algorithm to sort a mostly already sorted stream of data, then takes a pass through the sorted data one more time...to check to make sure it's actually sorted....

    So sigh...

  • (disco)

    I especially love this part!

    if (typeof dojo == "undefined") {
        dojo.require("dojo.cookie");
    
  • (disco)

    I'm wondering how this bit was used:

    var month=new Array(12);
    month[0]="1";
    month[1]="2";
    month[2]="3";
    month[3]="4";
    month[4]="5";
    month[5]="6";
    month[6]="7";
    month[7]="8";
    month[8]="9";
    month[9]="10";
    month[10]="11";
    month[11]="12"; 
    

    None of the other month stuff in the article uses it, so either it wasn't WTFy enough, or just never used anywhere.

  • (disco) in reply to hungrier
    hungrier:
    None of the other month stuff in the article uses it, so either it wasn't WTFy enough, or just never used anywhere.

    Honestly, whatever they thought they were doing, it's less of a WTF than designing a system with 0 based months.

  • (disco) in reply to boomzilla
    boomzilla:
    Honestly, whatever they thought they were doing, it's less of a WTF than designing a system with 0 based months.

    Really? I plead guilty to having done exactly that. Because, Java Calendar. You don't need to tell me the inconsistency of having January=0 but first day of month = 1. They are just conventions. The important thing is to adopt a convention and stick to it, and the way to adopt a convention is to use the most general and widely used class in the libraries. Calendar example = new GregorianCalendar(2014,0,1); //works for me

    The designers of Calendar obviously weren't thinking of SQL compatibility, but really compared to complete fusterclucks like the irrational US date format MM/dd/yy which so often causes problems given the British more logical dd/MM/yy (little endian rather than mid endian) remembering to offset by a month when going from Java to SQL and vice versa is pretty straightforward. And your unit tests catch errors every time, don't they? Which you cannot do with the US/GB date format foulup.

  • (disco)

    A lot of this stuff looks to me like generated code, like the locale regex. There's probably some server-side code generating the JavaScript, so when the locale isn't "en", the regex might actually do something. Of course, then TRWTF would be why isn't the regex done in the server-side code.

  • (disco)

    google inurl:innerCHK hmmm Vietnam Airlines

  • (disco)

    Oh my.

    The original page is over five thousand lines long. And half of it is just multiple copies of style definitions.

    I wonder how many paste keys were worn out during the production of this monster.

  • (disco)

    Can one of you Regex-geniusses explain var locale = 'en'.replace(/_/, '-').replace(/iw/, 'he').toLowerCase(); to me? Does this not take the,lowercase 'en', replacing the nonexistent underscore and the non existent 'iw' to make it lowercase afterwards?

    If so, it is only 1 problem, not two or more. The problem being that this line is completely useless.

    Filed Under: Maybe I am missing something here

  • (disco) in reply to Kuro
    Kuro:
    Filed Under: Maybe I am missing something here

    You are not missing something. The developers were missing something, namely a central nervous system.

  • (disco) in reply to kupfernigk
    kupfernigk:
    Really? I plead guilty to having done exactly that. Because, Java Calendar.

    You designed the Java Calendar? No, I left out "using" specifically, because we all get saddled with WTFs.

    kupfernigk:
    The designers of Calendar obviously weren't thinking of SQL compatibility

    Who really cares about that? How about human compatibility? Or even compatibility with their own formatting functions?

  • (disco) in reply to Kuro
    Kuro:
    Can one of you Regex-geniusses explainvar locale = 'en'.replace(/_/, '-').replace(/iw/, 'he').toLowerCase(); to me?Does this not take the,lowercase 'en', replacing the nonexistent underscore and the non existent 'iw' to make it lowercase afterwards?

    If so, it is only 1 problem, not two or more. The problem being that this line is completely useless.

    Filed Under: Maybe I am missing something here

    I'm guessing Dragnslcr's explanation is correct:

    Dragnslcr:
    A lot of this stuff looks to me like generated code, like the locale regex. There's probably some server-side code generating the JavaScript, so when the locale isn't "en", the regex might actually do something. Of course, then TRWTF would be why isn't the regex done in the server-side code.
  • (disco) in reply to mott555
    mott555:
    The developers were missing something, namely a central nervous system.

    Missing a few central nervous systems, even -- their HTML is just as WTFy:

    "); } } function NewRow4(ctr){ if (ctr % 4 == 0){ document.write(""); } } /* js function for setting session cookies */ function Set_Cookie(name, value, expires, path, domain, secure) { // set time, it's in milliseconds var today = new Date(); today.setTime( today.getTime() ); /* if the expires variable is set, make the correct expires time, the current script below will set it for x number of days, to make it for hours, delete * 24, for minutes, delete * 60 * 24 */ if (expires){ expires = expires * 1000 * 60 * 60 * 24; } var expires_date = new Date(today.getTime() + (expires)); document.cookie = name + "=" +escape(value) + ((expires) ? ";expires=" + expires_date.toGMTString() : "" ) + ((path) ? ";path=" + path : "" ) + ((domain) ? ";domain=" + domain : "" ) + ((secure) ? ";secure" : "" ); } /* js function for retrieving session cookies */ function Get_Cookie(check_name) { // first we'll split this cookie up into name/value pairs // note: document.cookie only returns name=value, not the other components var a_all_cookies = document.cookie.split( ';' ); var a_temp_cookie = ''; var cookie_name = ''; var cookie_value = ''; var b_cookie_found = false; for (i = 0; i < a_all_cookies.length; i++) { // now we'll split apart each name=value pair a_temp_cookie = a_all_cookies[i].split( '=' ); // and trim left/right whitespace while we're at it cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, ''); // if the extracted name matches passed check_name if (cookie_name == check_name) { b_cookie_found = true; // we need to handle case where cookie has no value but exists (no = sign, that is): if ( a_temp_cookie.length > 1 ) { cookie_value = unescape(a_temp_cookie[1].replace(/^\s+|\s+$/g, '')); } // note that in cases where cookie is initialized but no value, null is returned return cookie_value; break; } a_temp_cookie = null; cookie_name = ''; } if (!b_cookie_found) { return null; } } /* js function for opening new window */ function OpenNewWin(urlStr) { newwin = window.open(urlStr, "newwin", "scrollbars=1,resizable=1,width=800,height=600"); } /* js function for opening deals and offers page */ function OpenDealsPage(urlStr){ /* Get the session cookie */ var languageStr = Get_Cookie("lang"); /* var countryStr = Get_Cookie("country"); if (countryStr) { countryStr = countryStr.replace(" ", "_"); countryStr = countryStr.toLowerCase(); } */ //urlStr = "/" + languageStr + urlStr + "?country=" + countryStr; urlStr = "/" + languageStr + urlStr; OpenPortalPage(urlStr); } /* js function for opening Portal page */ function OpenPortalPage(pathStr){ var portalPath = ""; var currpath="promotions/%21ut/p/c5/04_SB8K8xLLM9MSSzPy8xBz9CP0os3hnd0cPE3MfAwN3X183AyPzUAvzIFc_QwNnU6B8JG55A1MCur30o9Jz8pOA9oSDbMZvEkjeAAdwNND388jPTdUvyI2oDA5IVwQA4h1ANQ%21%21/dl3/d3/L0lDU0lKSWdrbUEhIS9JRFJBQUlpQ2dBek15cXchLzRCRWo4bzBGbEdpdC1iWHBBRUEhLzdfQ0dBSDQ3TDAwMDJUQjAyTkcyMTdMSjNHVTQvS19fX18y/indexf29f.html?PC_7_CGAH47L0002TB02NG217LJ3GU4_WCM_CONTEXT=/wps/wcm/connect"; var checkStr = currpath.substring(currpath.length-9, currpath.length); var countryStr = Get_Cookie("country"); if (countryStr) { countryStr = countryStr.replace(" ", "_"); countryStr = countryStr.toLowerCase(); } if (checkStr == "myconnect") portalPath = "/wps/myportal"; else portalPath = "/wps/portal"; pos = pathStr.indexOf("cargo_services"); if (pos == -1){ pos1 = pathStr.indexOf("local_promotion"); pos2 = pathStr.indexOf("local_fares"); // BEGIN - Updated by IDM if (pos1 != -1) location.href=portalPath + pathStr + "_" + countryStr + "?country=" + countryStr; else if (pos2 != -1) location.href=portalPath + pathStr + "_" + countryStr + "?country=" + countryStr; else location.href=portalPath + pathStr; // END - Updated by IDM } else { pathStr = pathStr.replace("/site", ""); location.href=portalPath + pathStr; } } /* Compute the WCM servlet path */ var tmpBase = "http://vnappd001.***************.com.vn:10040"; pos = tmpBase.lastIndexOf(":"); if (pos != -1) tmpBase = tmpBase.substring(0, pos); var WCM_Servlet_Path = tmpBase + "/wps/wcm/connect"; </script> <body>
    <link rel="stylesheet" title="" media="all" href="/wps/wcm/connect/30affb004c3cd462944cfe2966173b9f/01May2014.css?MOD=AJPERES&CACHEID=30affb004c3cd462944cfe2966173b9f" type="text/css" /> <script> /* js function for retrieving the url parameter */ function getURLParam(strParamName){ var strReturn = ""; var strHref = window.location.href; if (strHref.indexOf("?") > -1){ var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase(); var aQueryString = strQueryString.split("&"); for (var iParam = 0; iParam < aQueryString.length; iParam++){ if (aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1){ var aParam = aQueryString[iParam].split("="); strReturn = aParam[1]; break; } } } return unescape(strReturn); } /* js function for printing new row used for Level 2 menu and anchor link */ function NewRow(ctr){ if (ctr % 2 == 0){ document.write("
    [image]
     
    </body>
    		</td>
    		</tr>
    		</tbody>
    		</table>
    	</td>
    	</tr>
    </tbody>
    

    Filed under: I don't think HTML works the way these clowns think it does, THE WHITESPACE! IT BURNS! THE GOGGLES DO NOTHING!

  • (disco) in reply to tarunik

    Did I miss something in the anonymization? Or was the real site that easy to find?

  • (disco)

    I found another site that acts very much like the one outlined in this story. As a non-root user (or via a text browser or with NoScripts enabled -- I think this server has been pwoned), curl/grab this site, and take a look at all the WTFs:

    cantv.net
    

    No Dojo, but very similar coding styles.

  • (disco) in reply to mott555
    mott555:
    Did I miss something in the anonymization? Or was the real site that easy to find?

    Hint: google search for "wpfThemeBlueBackgroundPanelTable"

  • (disco) in reply to monkeyArms
    monkeyArms:
    Hint: google search for "wpfThemeBlueBackgroundPanelTable"

    I did that and only got two results. One was my article, the other was some random blog that had already scraped the article and re-hosted it.

  • (disco) in reply to mott555
    mott555:
    Did I miss something in the anonymization? Or was the real site that easy to find?
    rob_on_earth:
    google inurl:innerCHK hmmm Vietnam Airlines

    That google search turns up all of two results, so yeah -- the real site is that easy to find.

    As to the server-side generated code explanation, well -- that doesn't explain the copies of Get_Cookie spewed all over, or their idiotic abuse of HTML. If I wrote a browser, I'd have it autosend a nastygram to webmaster@ if it encountered bad HTML/CSS/JS...

  • (disco)

    I don't get why people are complaining about this. These days if it works who gives a fuck how its done. OO concepts - who gives a fuck, it works. This is not how it should be done - who gives a fuck, it works. Seriously, they teach them at school that now. I miss C, really did teach me things.

  • (disco) in reply to boomzilla

    If it's the first day of the year, how many months have there bean?

  • (disco) in reply to John_Imrie
    John_Imrie:
    If it's the first day of the year, how many months have there bean?

    Lattes.

  • (disco) in reply to MrD
    MrD:
    These days if it works who gives a fuck how its done.

    Will you please comment more in the forums?

    @antiquarian, I think we've got one for you.

  • (disco) in reply to MrD
    MrD:
    I don't get why people are complaining about this. These days if it works who gives a fuck how its done. OO concepts - who gives a fuck, it works. This is not how it should be done - who gives a fuck, it works. Seriously, they teach them at school that now. I miss C, really did teach me things.

    Because it's a sign the developers were just slinging mud all over the place until they got something that behaved in a semblance-of-working-for-them fashion. Would you trust a house that was built simply by slapping two-by-fours together quasi-randomly until it met the size constraints?

    Also -- I let the W3C HTML validator have a peek at it, and it's plenty ugly. Highlights:

    *Line 955, Column 63*: **document type does not allow element "INPUT" here; missing one of "P", "H1", "H2", "H3", "H4", "H5", "H6", "PRE", "DIV", "ADDRESS" start-tag** `<input type="hidden" name="search_keywords" value="searchable"/>`
      The mentioned element is not allowed to appear in the context in which
      you've placed it; the other mentioned elements are the only ones that
      are both allowed there and can contain the element mentioned.
      This might mean that you need a containing element, or possibly that
      you've forgotten to close a previous element.
    
     
      One possible cause for this message is that you have attempted to put a
      block-level element (such as "&lt;p&gt;" or "&lt;table&gt;") inside an
      inline element (such as "&lt;a&gt;", "&lt;span&gt;", or "&lt;font&gt;").
    
    *Line 959, Column 7*: **end tag for "FORM" which is not finished** `</form>`
      Most likely, you nested tags and closed them in the wrong order. For 
      example &lt;p&gt;&lt;em&gt;...&lt;/p&gt; is not acceptable, as &lt;em&gt;
      must be closed before &lt;p&gt;. Acceptable nesting is: 
      &lt;p&gt;&lt;em&gt;...&lt;/em&gt;&lt;/p&gt;  
    
    
      Another possibility is that you used an element which requires
      a child element that you did not include. Hence the parent element
      is "not finished", not complete. For instance, in HTML the &lt;head&gt;
      element must contain a &lt;title&gt; child element, lists require
      appropriate list items (&lt;ul&gt; and &lt;ol&gt; require &lt;li&gt;;
      &lt;dl&gt; requires &lt;dt&gt; and &lt;dd&gt;), and so on.
    
    *Line 2206, Column 6*: **document type does not allow element "BODY" here** `<body>`
      The element named above was found in a context where it is not allowed.
      This could mean that you have incorrectly nested elements -- such as a
      "style" element in the "body" section instead of inside "head" -- or
      two elements that overlap (which is not allowed).
    
    
      One common cause for this error is the use of XHTML syntax in HTML
      documents. Due to HTML's rules of implicitly closed elements, this error
      can create cascading effects. For instance, using XHTML's "self-closing"
      tags for "meta" and "link" in the "head" section of a HTML document may
      cause the parser to infer the end of the "head" section and the
      beginning of the "body" section (where "link" and "meta" are not
      allowed; hence the reported error).
    
    *Line 3543, Column 7*: **end tag for "HTML" which is not finished** `</HTML>`
      Most likely, you nested tags and closed them in the wrong order. For 
      example &lt;p&gt;&lt;em&gt;...&lt;/p&gt; is not acceptable, as &lt;em&gt;
      must be closed before &lt;p&gt;. Acceptable nesting is: 
      &lt;p&gt;&lt;em&gt;...&lt;/em&gt;&lt;/p&gt; 
    
    
      Another possibility is that you used an element which requires
      a child element that you did not include. Hence the parent element
      is "not finished", not complete. For instance, in HTML the &lt;head&gt;
      element must contain a &lt;title&gt; child element, lists require
      appropriate list items (&lt;ul&gt; and &lt;ol&gt; require &lt;li&gt;;
      &lt;dl&gt; requires &lt;dt&gt; and &lt;dd&gt;), and so on.
    

    Filed under: and you wonder why browsers are so buggy

  • (disco) in reply to boomzilla
    boomzilla:
    Who really cares about that? How about human compatibility? Or even compatibility with their own formatting functions?

    People who implement web functionality with SQL backends?

  • (disco) in reply to kupfernigk
    kupfernigk:
    People who implement web functionality with SQL backends?

    I'm just saying. Interfacing with people is a bit more important than that. The database people just had a better immune response to the 0 based index brain worm.

  • (disco) in reply to tarunik
    tarunik:
    Filed under: I don't think HTML works the way these clowns think it does, THE WHITESPACE! IT BURNS! THE GOGGLES DO NOTHING!

    I have seen a "programmer" paste the SQL generated by SQL Studio straight into a prepared statement, without removing the large amounts of whitespace. He seemed to think that because SQL Studio presumably strips out the decoration before sending a query to the server, Java would somehow know automatically to do the same thing to text. And then decided when asked that, well, it didn't matter because after all a hundred or so extra spaces don't take much time to transmit. At this point it occurred to me that many coders nowadays do not know what it is to be parsimonious with resources. This goes some way to explain the redundancy and wheel reinvention in so much JS.

  • (disco) in reply to kupfernigk
    kupfernigk:
    And then decided when asked that, well, it didn't matter because after all a hundred or so extra spaces don't take much time to transmit.

    Don't they take extra time to comprehend though? Interfering with your own brain is never a good idea...

    Filed under: which side of the "Ballmer Peak" was he on, anyway?

  • (disco) in reply to boomzilla
    boomzilla:
    I'm just saying. Interfacing with people is a bit more important than that. The database people just had a better immune response to the 0 based index brain worm.

    If the users are aware of how you are encoding dates, you are doing it wrong.

    You keep using abusive terms for zero based months, but you haven't explained why you think it is wrong. It is just a convention, like having the zero of time on 1/1/1970. We put up with October (which means the eighth month) actually being the 10th month since the start of the year was shifted from March to January, and compared to that 1 or 0 base is trivial.

  • (disco)

    That shite is full of gems:

    if (str_location.match(lang_en))
    {
        document.write('<iframe src="/vna/footer/mini-site.html" scrolling="no" width="100%" height="100%" frameborder="0" class="minisite-frame"></iframe>');
    }
    
  • (disco) in reply to kupfernigk
    kupfernigk:
    If the users are aware of how you are encoding dates, you are doing it wrong.

    If my users are aware, sure. But I'm a user, too. And I call bullshit.

    kupfernigk:
    You keep using abusive terms for zero based months, but you haven't explained why you think it is wrong.

    That's true. I thought it was too obvious to bother. But I'll let you in on the secret that everyone else has already figured out: Each month already has a number associated with it.

    kupfernigk:
    It is just a convention,

    That's my point. And having the months start at zero is a retarded convention.

    kupfernigk:
    We put up with October (which means the eighth month) actually being the 10th month since the start of the year was shifted from March to January, and compared to that 1 or 0 base is trivial.

    Fffffffffuuuck. Taken in by another troll. Well played.

  • (disco) in reply to Zacrath
    Zacrath:
    There's that language="JavaScript" again. I don't know what standard tells you to do that but it wasn't the one I read.
    Pre-HTML4. The `language`-attribute also allowed you to specify the least required version (like the universally unknown hash-mark feature of the `type`-attribute). E.g., `language="JavaScript1.2"` would cause Netscape Navigator 3 to ignore the script and it would be processed by Netscape Navigator 4.x and higher only. Moreover, it let you select version-specific language features, like, by specifying `"JavaScript1.2"`, you would get `-0` (which doesn't exist in other versions of the language). Bonus fact: JavaScript was originally dubbed "LiveScript" and most browsers used to recognize a language-attribute or type of `"LiveScript"` as a synonym. Today there's a completely different language named "LiveScript".
  • (disco)

    About date, I recently said that the user-agent was one of humanities greatest WTFs but date-time handling is pretty close. I mean, from the top of any web stack (HTML/JS) all the way down to the database, you're probably going to have three or four conversions, and if you add localization, then welcome to DateTime hell.

  • (disco) in reply to boomzilla
    boomzilla:
    @antiquarian, I think we've got one for you.

    I think he's beyond help, but could provide a fun trolling target.

    tarunik:
    Because it's a sign the developers were just slinging mud all over the place until they got something that behaved in a semblance-of-working-for-them fashion. Would you trust a house that was built simply by slapping two-by-fours together quasi-randomly until it met the size constraints?

    The house stayed up, didn't it?

  • (disco) in reply to antiquarian

    http://youtu.be/aNaXdLWt17A?t=26s

  • (disco) in reply to tarunik
    tarunik:
    Because it's a sign the developers were just slinging mud all over the place until they got something that behaved in a semblance-of-working-for-them fashion.

    That's exactly what I'm saying! I just see so much done like that lately that I'm afraid I'm becoming numb to it. That site was done by sub-sub-sub-contractors who just don't care to think a bit beyond copy/paste. Wouldn't be surprised to find some code c/p from stackoverflow or whatever tutorial site... makes me wonder now...

  • (disco) in reply to monkeyArms
    monkeyArms:
    wpfThemeBlueBackgroundPanelTable

    I get this article...

  • (disco) in reply to MrD

    Makes me appreciate schools that teach programming based on the high-level concepts, not as a trade that you simply learn the high-level tools for. Things like this are what drives me towards the craftsmanship crowd...

  • (disco) in reply to kupfernigk
    kupfernigk:
    The designers of Calendar obviously weren't thinking of SQL compatibility, but really compared to complete fusterclucks like the irrational US date format MM/dd/yy which so often causes problems given the British more logical dd/MM/yy (little endian rather than mid endian) remembering to offset by a month when going from Java to SQL and vice versa is pretty straightforward. And your unit tests catch errors every time, don't they? Which you cannot do with the US/GB date format foulup.

    Well, they didn't really need to think of SQL compatibility did they? Why would they encourage the WTF of manually building SQL strings?

    JPA's @Temporal doesn't care, while PreparedStatement and CallableStatement have setDate methods, use them!

  • (disco) in reply to John_Imrie
    John_Imrie:
    how many months have there bean?

    Fava Azuki Mung Garbanzo Runner Lima Pinto Kidney Black Navy Soybean ...

  • (disco)

    To the other...crimes...of this structure, I suspect we can add that the code is assembled from a database. This is suggested all the </script><script> combinations: Each individual script is pulled from a different set of database rows, so it must be complete.

  • (disco) in reply to kupfernigk

    SSMS does not strip the decoration.

    In fact, stored procedures actually preserve decoration.

  • (disco)
    /wps/themes/./dojo/portal_dojo/dojo/dojo.js

    What purpose does the /./ serve? This looks like the sort of precautionary nonsense someone would write if they didn't trust the computer to do what they said. "Now remember, from the themes directory, go straight into dojo. Don't go anywhere else first."

  • (disco) in reply to Covarr
    Covarr:
    What purpose does the /./ serve?

    none in a URL

    Covarr:
    This looks like the sort of precautionary nonsense someone would write if they didn't trust the computer to do what they said. "Now remember, from the themes directory, go straight into dojo. Don't go anywhere else first."

    not exactly. but kinda.

    . is "the current directory"

    so if you say ./dojo you mean "the file or folder called dojo in the current directory, not any executable called dojo in the $path"

    and then cargo cult means people do ./dojo/portal_dojo/dojo/dojo.js without knowing that once you put the / in $path no longer has effect and so you don't need the leading ./

    then concat that to a path ending in / and....

  • (disco) in reply to CoyneTheDup
    CoyneTheDup:
    To the other...crimes...of this structure, I suspect we can add that the code is assembled from a database. This is suggested all the </script><script> combinations: Each individual script is pulled from a different set of database rows, so it must be complete.

    Why did Discurse truncate that at &lt;/script&gt;? @discoursebot

  • (disco) in reply to HardwareGeek

    @HardwareGeek - Days Since Last Discourse Bug: -1

    <!-- Posted by SockBot 0.13.0 "Devious Daine" on Wed Dec 17 2014 23:59:54 GMT+0000 (UTC)-->

Leave a comment on “Pass By NullPointer”

Log In or post as a guest

Replying to comment #:

« Return to Article