[HN Gopher] Hexadecimal clock counting down to 2038 problem
       ___________________________________________________________________
        
       Hexadecimal clock counting down to 2038 problem
        
       Author : PaulRobinson
       Score  : 93 points
       Date   : 2023-09-16 06:14 UTC (1 days ago)
        
 (HTM) web link (retr0.id)
 (TXT) w3m dump (retr0.id)
        
       | fguerraz wrote:
       | Why a signed int?
        
         | vore wrote:
         | time_t has historically been a typedef to a 32-bit signed
         | integer, so the signedness is baked into a lot of legacy
         | software still running today.
        
           | uoaei wrote:
           | Converting to unsigned int only changes the first digit (6
           | becomes e) but I think `e5075ea9` is a little easier to
           | reason about.
        
             | [deleted]
        
           | CableNinja wrote:
           | Afaik this is so that you can go back in time before epoch
           | (less than 0)
        
             | avgcorrection wrote:
             | Then why not start the epoch however far back they thought
             | they need to go back? Maybe a naive question.
        
               | umanwizard wrote:
               | Whether you make 0 be in 1902 and use an unsigned type,
               | or make 0 be in 1970 and use a signed type, the range of
               | representable dates is the same.
        
               | avgcorrection wrote:
               | Sure. But (and what I should have added) I don't think
               | they would need to go back that far.
               | 
               | But you're right, you can get the same results with both.
        
               | arcticbull wrote:
               | You may need an arbitrary distance back in time, so
               | really any epoch is as good as any other. So if you're
               | going to pick arbitrarily, zero around where most numbers
               | are going to be when you set the standard seems to make
               | sense.
        
           | faraggi wrote:
           | Was the negative sign commonly used for delta times?
        
             | SAI_Peregrinus wrote:
             | The epoch was set very close to the start of UNIX (it
             | started development in 1969, _before_ epoch 0). Negative
             | epoch dates are quite common, e.g. many people 's
             | birthdays.
        
               | gene91 wrote:
               | In 1970, I suppose there are many people whose birthdate
               | is before 1901-12-13?
        
         | umanwizard wrote:
         | Using a signed int allows you to represent times before 1970.
         | This is not just theoretical; it's done in the wild.
         | Materialize, the data warehouse software I work on, used to
         | have a bug causing it to fail on negative Unix times and we
         | found out when somebody tried to load in a database with human
         | dates of birth.
        
       | RedNifre wrote:
       | My bank is now y2.1k bug ready: In their CSV export, they changed
       | the date format for the year back to 2 digits.
       | 
       | It only takes 23 years to forget history.
        
         | ogogmad wrote:
         | Should dates be strings?
        
           | somewhereoutth wrote:
           | Yes absolutely. Dates are too complicated, requiring to much
           | context, with too much to go wrong, for any non human
           | readable format. At least with strings other systems have
           | half a chance of parsing them correctly, or at least parsing
           | them in a transparent manner.
           | 
           | Or to put it another way, they cannot be trusted to engineers
           | to get it right every time. Let's face it, even something as
           | simple as floating point numbers have serious issues when
           | implemented in computer systems (so another candidate for
           | strings quite frankly - notable that JSON is strings all the
           | way through).
        
             | landryraccoon wrote:
             | It's not just a matter of trust. Locale specific datetimes
             | in the future are simply not computable to a point on a
             | number line in the general case. Some locales have date
             | changes that must be determined by the local government
             | every single year. Israel is an example of such a case.
        
           | paulddraper wrote:
           | > CSV
        
           | dragonwriter wrote:
           | Not really.
           | 
           | I mean, sure, serialize them as ISO8601 strings, but, no,
           | dates are fundamentally not strings, and that shouldn't be
           | their basic internal representation in most sane systems.
           | 
           | In CSV, though, everything is strings. But the question there
           | is _what_ string format.
        
           | [deleted]
        
           | ooterness wrote:
           | ISO8601 / RFC3339 for life.
        
       | quickthrower2 wrote:
       | That is not the real 2038 problem.
       | 
       | But cool clock, really love it!
        
       | bloopernova wrote:
       | If you like to have the Unix epoch in your prompt, you can do
       | something like this:                   function prompt_epoch() {
       | printf -v COMMA_EPOCH "%'d" ${EPOCHSECONDS}             p10k
       | segment -f 66 -t ${COMMA_EPOCH}         }
       | 
       | EPOCHSECONDS relies on `zmodload zsh/datetime`. printf -v creates
       | a variable rather than output text. p10k segment is just a
       | function that powerlevel10k uses, you don't have to use it.
       | COMMA_EPOCH is just the current Unix time separated by commas
       | every 3 digits.
       | 
       | If you wanted your own countdown, you could easily do `2147483647
       | - EPOCHSECONDS` and display that time instead.
       | 
       | EDIT: and if you want to mimic that oh-so-cool clock, you could
       | do:                   printf '%x\n' $EPOCHSECONDS
       | 
       | or assign that to a variable with printf -v, then split the
       | string into pairs. Mimicking the colours of the clock would be
       | fairly trivial too.
        
         | codetrotter wrote:
         | > EPOCHSECONDS relies on `zmodload zsh/datetime`
         | 
         | Is there any advantage to using that module instead of invoking
         | date +%s
         | 
         | I use zsh but I don't have any addons installed or anything. So
         | for me it is less work to call date +%s instead
        
           | bloopernova wrote:
           | Yes, it doesn't fork a separate process. I doubt I could
           | really tell the difference in prompt responsiveness, but I
           | liked learning about the printf -v COMMA_EPOCH method.
        
       | simonkagedal wrote:
       | I love that hexadecimal-analog clock.
        
         | bloopernova wrote:
         | I know, right? I really want one for my wall.
        
       | xwdv wrote:
       | Why didn't past generations consider these ramifications for
       | future generations? 2038 must have seemed so far away, but now
       | it's so close I bet even in 2038 and beyond people will still be
       | reading this comment. Maybe they will be cursing us for the tech
       | debt they inherited!
        
         | faeriechangling wrote:
         | I suppose they figured, quite reasonably, that things written
         | in the 60's would be updated by 2038 and to address this
         | problem was premature optimisation. In the 2000s 64-bit went
         | mainstream which gave us a solid ~30 years to tackle this
         | issue. 32-bit time was introduced in a time where there was a
         | very real argument for it in terms of performance, simplicity,
         | and cost.
         | 
         | I'm not even sure if in hindsight the wrong decision was made.
        
         | ksenzee wrote:
         | Because the hardware didn't support it. We knew in 1999 that
         | the 2038 problem existed, for example, but our choices were a)
         | stop representing dates as seconds since the Unix epoch, and
         | introduce who knows how many bugs in every imaginable piece of
         | software, or b) kick the can down the road until 2038, when
         | presumably everything would support 64-bit integers. b) was the
         | obvious choice then, and it still looks like the right choice
         | to me in hindsight.
        
           | quickthrower2 wrote:
           | IPv6 just popped in to say hi
        
         | Kerb_ wrote:
         | >Why didn't past generations consider these ramifications for
         | future generations? 2000 must have seemed so far away, but now
         | it's so close I bet even in 2000 and beyond people will still
         | be reading this comment. Maybe they will be cursing us for the
         | tech debt they inherited!
         | 
         | ~Not enough people in 1985, I guess. They seem more concerned
         | with leap years than anything.
         | https://groups.google.com/g/net.bugs/c/ZGlqGwNaq3I
        
         | umanwizard wrote:
         | How much code have you written that you expect to still be in
         | use 68 years from now?
        
         | quickthrower2 wrote:
         | For someone adult in 2000, 2038 might be retirement age, so
         | they are probably investing in their pension and paying off the
         | mortgage assuming 2038 is coming, but then at work it is like
         | "wont be here when that happens!"
        
         | snickerbockers wrote:
         | See: climate change, American social security administration,
         | preservation of ancient manuscripts and ruins, etc...
         | 
         | But at least Jeff bezos is putting his fortune into an immortal
         | clock in the desert (I'm being sarcastic but the desert clock
         | is actually real and supposedly a gift to future generations as
         | if measuring time wasn't a problem that stone-age civilizations
         | all over the world were able to solve independently).
        
         | Someone wrote:
         | Why do you assume they didn't consider it? Memory was too
         | scarce and too expensive to do it.
         | 
         | Unix time is 32 bits, so I guess Unix time was invented a bit
         | later, but around 1970, when Unix was written, RAM cost around
         | $700k/megabyte, or, ballpark, $1/byte
         | (https://jcmit.net/memoryprice.htm)
         | 
         | Even if you had infinite memory, you couldn't use much of it in
         | your computer. The PDP-7 that Unix started life on topped out
         | at 144kB, the PDP-11 that it was soon ported to at 288kB (64k
         | 36-bit words), and many installs wouldn't have that.
        
       | matheusmoreira wrote:
       | Can't we fix this once and for all using variable length
       | integers?
       | 
       | https://en.wikipedia.org/wiki/Variable-length_quantity
       | 
       | This way the counter can scale up to any number of bits.
        
         | paulddraper wrote:
         | That's unnecessarily complicated.
         | 
         | A 64-bit signed Unix time fixes this for 25x longer than the
         | remaining lifetime of the sun.
        
           | Kamq wrote:
           | Our descendants around alpha centauri are going to have so
           | much legacy code to upgrade.
        
         | randyrand wrote:
         | That would add a lot of complexity to structs that want to have
         | a static size.
         | 
         | i'd just pick a huge number and move on.
        
       | layer8 wrote:
       | Discussed four days ago (15 comments):
       | https://news.ycombinator.com/item?id=37492371
        
       | 29athrowaway wrote:
       | Mainframe software will be the most painful to fix.
        
         | ogogmad wrote:
         | Obligatory: Could we use LLMs?
        
           | tylerrobinson wrote:
           | In case you missed it, that's IBM's plan (or at least their
           | marketing team's plan)!
           | 
           | https://arstechnica.com/information-
           | technology/2023/08/ibms-...
        
           | snickerbockers wrote:
           | Also obligatory: calendar based cryptocurrency that measures
           | time on the blockchain and also incidentally makes its
           | creator rich by providing him with the largest initial
           | allocation of currency.
        
       | jcul wrote:
       | Other interesting time storage issues, including the Y2038
       | problem.
       | 
       | https://en.m.wikipedia.org/wiki/Time_formatting_and_storage_...
        
       | johnea wrote:
       | This is displayed whnever I open a new terminal:
       | 
       | Welcome to workstation - Today is Sunday, September 17th 2023
       | 
       | There have been 53 years and 272 days in the unix epoch!
       | 
       | There are 14 years and 127 days until the 32-bit time apocalypse
       | Prepare yourself...
        
       | mcint wrote:
       | Pretty cool! Although it's not obvious, without reading, that the
       | issue falls at clock-bottom, which is counter to analog clock
       | convention, both for 12 hour and 24 hour clocks. I would
       | encourage some coloring, shading, or a larger mark.
       | 
       | Logically, reaching for a justification, an explanation, sure,
       | it's reasonable that the MSB flips halfway around, but again it
       | differs from the analog clock reading conventions.
       | 
       | v2 (+/v2.html) which he posted on another thread, does make it
       | clearer
       | 
       | https://retr0.id/stuff/2038/v2.html
       | 
       | Other thread of his blog domain
       | 
       | https://www.da.vidbuchanan.co.uk/blog/unix-clock.html
       | 
       | https://news.ycombinator.com/item?id=37492371
       | 
       | The color separation is also a bit large, mainly 2-3 and 3-4,
       | while 1-2 are similar but distinct.
        
         | kaoD wrote:
         | Not obvious indeed, but after some thought it actually feels
         | natural to have INT32_MIN (a negative number) at the bottom.
        
         | bcraven wrote:
         | 'Straight down' is how the UK gameshow 'Countdown' finishes its
         | iconic period, perhaps this is an influence.
        
       | turnsout wrote:
       | This makes me nostalgic for the mid-2000s when all the geeks had
       | binary watches
        
       ___________________________________________________________________
       (page generated 2023-09-17 23:00 UTC)