Steuard 11 years ago

Honestly, I think there's a little something to this submission beyond the "Ha ha, lots of people made typos that could cause big problems" factor.

A public repository like GitHub makes checks for common errors like this really easy. Would it be feasible for GitHub or the community to automatically recognize broad classes of these likely errors and notify the authors? How sophisticated could that sort of tool become?

Maybe "given enough bots, most bugs are shallow".

  • wdewind 11 years ago

    Yes, in fact Amazon already does this. It will frequently warn you if your AWS keys are published in Github.

  • joshstrange 11 years ago

    I agree, it's too bad they banned bots [0], one alternative I see is:

    >> Yeah, maybe the answer is a hybrid, bots that look for common mistakes and a website that lets people login to github and displays the potential fixes so they can fix the code in the browser and send the pull request. Like a way to try and introduce people to open source through guided fixes more or less. [1]

    [0] http://www.wired.com/2012/12/github-bots/

    [1] https://news.ycombinator.com/item?id=7717694

joshstrange 11 years ago

I wonder if Github will ever reconsider allowing bots [0]. There are bunch of things like this that would be cool to have pull-requests automatically generated for. Security fixes would be another place where I can see bots helping to fix common mistakes.

[0] http://www.wired.com/2012/12/github-bots/

  • XaspR8d 11 years ago

    Yeah, I'd love to help in some way, but the number of results is huge and without bots I'm discouraged from doing anything manually.

    Maybe we can create a resource of common typos in numerical constants that would auto-detect by edit distance? But I suppose most people willing to check a resource like that probably already double check their arithmetic. (That said, I've probably had this exact bug somewhere in my coding history, so no shame.)

    • joshstrange 11 years ago

      Yeah, maybe the answer is a hybrid, bots that look for common mistakes and a website that lets people login to github and displays the potential fixes so they can fix the code in the browser and send the pull request. Like a way to try and introduce people to open source through guided fixes more or less.

memnips 11 years ago

86400 seconds is 24 hours. It is surprisingly commonly mis-entered as 84600 seconds, as evidenced by this search. As such, many unintended consequences can ensue.

chubot 11 years ago

Haha, should be 86400, not 84600.

  • tshaddox 11 years ago

    I liked this one:

        SECONDS_PER_23_5_HOURS = 84600
    • markcarlson 11 years ago

      That is a very common value to use when you want something to either occur a bit more than once a day, or time out in a bit less than a day.

      • underyx 11 years ago

        And to keep the discussion interesting, also, 12 seconds is a pretty popular timespan to use when you want something longer than 10, but shorter than 15.

      • nkozyra 11 years ago

        I certainly have some code that adds 86399 to encompass the entirety of the day.

        This is in languages I use with less robust date logic, of course.

      • ggreer 11 years ago

        If there was an 84600 with no hinting variable names nearby, anyone reading would have trouble figuring out the author's intention. Any other number (say... 81234) would be unambiguous. In the words of Douglas Crockford, "All that you know about the code is that the programmer was incompetent."

  • CanSpice 11 years ago

    Except it shouldn't, because when you have a leap second occur, suddenly you're off by a second.

    A day is a day, it's not 86400 seconds.

    • rossy 11 years ago

      Most operating systems and frameworks don't expose the concept of leap seconds to user code. For example, Unix time is the number of seconds since the epoch ignoring leap seconds, so a program that compares timestamps generated by time() would be correct in assuming that a day is 86400 units of time_t.

Xylakant 11 years ago

It's actually not that many places where it's wrong: Anything from page 57 to 100 is one repo that does it consistently wrong: https://github.com/sconklin/solardata, then there's quite a few places that are partial matches only (seconds, but not 84600), there's quite a few places where it's a least not obviously wrong (page 38, where it matches on "PHI( 1) +6.18900e+05-7.84600e+05i Hz") and a ton of places that get copied around (the first pages are all bundled versions of the sonata cache interface).

strommen 11 years ago

HN Challenge: name a scenario in which defining a constant as 86400 is better then defining it as (60 * 60 * 24).

Or, are there languages where you can't declare a constant with a multiplication expression?

  • sliverstorm 11 years ago

    To me it's a coding style thing. The argument for 86400 would be, too many operators makes things damn confusing. When your define expands in the preprocessor to a function sixteen operators long, you have made a mess.

  • zemo 11 years ago

    > are there languages where you can't declare a constant with a multiplication expression?

    obviously PHP.

      php > const X = 1;
      php > echo X;
      1
      php > const Y = 1 * 2;
    
      Parse error: parse error, expecting `','' or `';'' in php shell code on line 1
      php > echo Y;
      Y
  • quaffapint 11 years ago

    I find myself with pre-optimization issues on my new code and define constants multiplied out rather than add that .000000001% extra overhead of doing the multiplication - it's a sickness.

    • wlievens 11 years ago

      Actually in all likeliness your compiler will do tgat for you anyway.

nkozyra 11 years ago

Disturbing enough that - despite having used 86400 a bazillion times (yes, literally) that it didn't look wrong at first glance.

markcarlson 11 years ago

Many of those are legitimately meant to be 23.5 hours, not 24 hours (TTL defaults, approximates for converting seconds to days, etc.)

elwell 11 years ago

I don't think it's right to judge someone just because they have 23.5 hour days. To each their own, I say.

akerl_ 11 years ago

Humorous as this is, it doesn't seem newsworthy. Maybe submit to The Daily WTF next time?

Kiro 11 years ago

I don't understand.

  • nycmattw 11 years ago

    I actually don't understand either. Explain OP?

    • krzrak 11 years ago

      86400 seconds = 24 hours

      84600 seconds = typo ;)

    • dandandan 11 years ago

      It's the number of seconds in a day.

  • ggreer 11 years ago

    A day is 86,400 seconds.

  • squidfood 11 years ago

    86,400 is the number of seconds in a day. This searches for the number of times a piece of code transposed the 6 and 4.

  • Avalaxy 11 years ago

    Probably the fact that there are 86400 seconds in one day and apparently lots of people typed 84600? Not really my sort of humor, but mmkay.

  • ethann 11 years ago

    There are 86400 seconds in a day

  • JosephRedfern 11 years ago

    Number of seconds in a day = 60 * 60 * 24 == 86400, rather than 84600.

  • rubiquity 11 years ago

    There will eventually be 84,600 replies to you telling you that there are 86,400 seconds in a day.

nperez 11 years ago

Even if you're using 86400, remember the possibility of leap seconds if you need absolute precision.

Time makes my brain hurt sometimes.

oxplot 11 years ago

This should never be entered like that. Not only it's prone to typos, it also requires a comment to accompany it. Since just about every compiler/interpreter folds constants, one should write it as 60 * 60 * 24 which would run without a performance hit.

Aaron1011 11 years ago

I first read this as 'Github search takes 84600 seconds'. Oops :)

beagle3 11 years ago

Easy mnemonic: 60 * 60 * 24 = 864e2 (scientific notation). Take down 2 each time, and shove an e.

  • mcosta 11 years ago

    Easier mnemonic: 60 * 60 * 24

    The compiler is going to do the operation for you.

    • beagle3 11 years ago

      Of course. I use 864e2 to remember that it is 86400 when I do calculations on paper.

ejo0 11 years ago
pkamb 11 years ago

`60 * 60 * 24`