Hacker News new | ask | show | jobs
by 33degrees 1547 days ago
In Ruby that would be

    sleep 3.seconds
Hard to to be more concise than that
2 comments

Technically Ruby only accepts seconds. You're thinking of ActiveSupport from Rails.
Here's a fun way to annoy a Rails developer.

    (Time.now + 1.month).to_i == Time.now.to_i + 1.month.to_i
    #=> false
Not sure why that's annoying? The right side doesn't really make sense.

Though it does seem pretty easy for a novice to do thinking it's the same, but what does 1.month.to_i even mean!?

> 1.month.to_i

Duration of a month in seconds? Before you balk at the idea, there exists a definition of a constant month duration for accounting stuff. I you hate dates - and yourself - try accounting, there's mind boggling stuff that makes the engineer mind recoil in absolute terror.

Actually taken almost verbatim from the report summarizing a real and subtle bug (distributed across multiple files) in code written by definitely-not-novices.
I'm not really familiar to RoR. Is is due to Time.now getting called twice and each returns slightly different value?
Alas, no. It's because ActiveSupport's duration arithmetic is not distributive under conversion.

The expression on the left hand side advances time (as a domain object) by exactly a month, then converts the result to integer unix time. The expression on the right adds 2629746¹ to the current unix time.

The conversion becomes dangerously magical in the presence of shared code that accepts both object and integer representations of time & duration. A consumer from one part of a system can inadvertently obtain different results to another unless they use identical calling conventions.

[1] this is 1/12 of the mean length of a gregorian year²

[2] 365.2425 days i.e. 31,556,952 seconds

Oh wow. This is totally make sense when you think about it, but something that'll never cross my mind when casually checking the code. I guess this is why python's timedelta doesn't have month unit as the length of a month is highly context dependent.
I would just use `1.month.from_now` instead of the additions anyway
That won’t save you; 1.month.from_now is implemented by addition.
Are we golfing? Because that's identical to

   sleep 3
Are we golfing? This whole discussion is about clarifying units.
I must clarify, that was intended rhetorically, and in the most self-serving fashion; I try never to miss a golfing prompt