[HN Gopher] 0xCAFEBABE & 0xFEEDFACE (2003)
       ___________________________________________________________________
        
       0xCAFEBABE & 0xFEEDFACE (2003)
        
       Author : diggan
       Score  : 113 points
       Date   : 2024-08-13 01:03 UTC (21 hours ago)
        
 (HTM) web link (radio-weblogs.com)
 (TXT) w3m dump (radio-weblogs.com)
        
       | novagameco wrote:
       | Rust will yell at you if you use specific magic numbers like
       | these
       | 
       | edit: yes, 0xCAFEBABE is a warning but 0xFEEDFACE is not:
       | 
       | 3405691582
       | 
       | https://github.com/rust-lang/rust/blob/d0ea1d767925d53b2230e...
        
         | kevindamm wrote:
         | that sounds like 0xBADDBEEF
        
           | esterly wrote:
           | OxDEADBEEF
        
         | oguz-ismail wrote:
         | 0xB16B00B5
        
         | steveklabnik wrote:
         | This is only for rustc, not for arbitrary rust programs.
        
         | userbinator wrote:
         | That says all I need to know about the community.
        
           | tbrownaw wrote:
           | Really? Current mainstream political shibboleths are more
           | important than for example their stance on module versioning
           | or on whether C code should have a right to exist?
        
             | oguz-ismail wrote:
             | Yes.
        
             | kragen wrote:
             | it seems likely that the degree of importance they accord
             | to current mainstream political shibboleths is informative
             | about the community's value system and decision-making
             | process, and therefore how it will change its policy on
             | module versioning and c code in the next few years
             | 
             | probably some people will think it's encouraging
             | information, and others will think it's discouraging
             | information, but either way it's important information
        
         | SanjayMehta wrote:
         | But why?
        
           | nimih wrote:
           | It's a mystery, lost to the sands of time. IMO, it's highly
           | unlikely anyone will ever discover why the maintainers of the
           | Rust compiler decided to lint their codebase for a dozen or
           | so magic numbers.
        
             | SanjayMehta wrote:
             | I feel my leg is being pulled, ever so gently.
        
             | fch42 wrote:
             | the github commit's "conversations" log for the commit has
             | a few notes you need to log in for to view. But then, the
             | maintainer who merged said "it's just a few constants".
             | Which is fair enough.
             | 
             | I think this would more belong into clippy; it'd be easier
             | extensible then, and less "magic". But I'm just a 0xf001
             | who's intentions are 0x900d ... please don't let me 0xbe
             | misunderst0x0d.
        
             | cbzbc wrote:
             | It's fairly simple - and I don't know why no one has
             | pointed this out already.
             | 
             | If everyone starts to use the same magic numbers then they
             | are no longer magic and you can end up with strange corner
             | case bugs and holes where a magic number used in one
             | context is mistaken for a magic number in another context.
        
           | Krssst wrote:
           | https://www.oxfordlearnersdictionaries.com/definition/englis.
           | ..
           | 
           | > but sometimes considered offensive if used by a man to a
           | woman he does not know
           | 
           | There are billions of other magic numbers to choose from
           | anyway.
        
             | johnisgood wrote:
             | So someone using "0xCAFEBABE" or whatever, do you really
             | think women take it personally, or what is the problem
             | here? If I were to use it, there would be no target, and I
             | doubt in most common uses there are any, so it does not
             | make much sense to me.
        
               | Krssst wrote:
               | Just don't take the risk. Why is there a need to put
               | potentially offensive words in the code when there are
               | billions of alternatives?
               | 
               | Some people may find it funny, but it mostly gives an
               | image of immaturity.
        
               | layer8 wrote:
               | I've never liked those hex words, especially the sexually
               | connoted ones, but at the same time I find the existence
               | of code checking for them very cringy.
        
               | HappMacDonald wrote:
               | Because every word and every combination of hexadecimal
               | characters is "potentially offensive", and because those
               | prone to taking offense are perfectly capable of finding
               | it anywhere that they want to anyway?
        
               | kragen wrote:
               | perhaps https://news.ycombinator.com/item?id=41238488
               | will provide helpful context on the different ways people
               | think about these things
        
             | SanjayMehta wrote:
             | Oh.
             | 
             | I was reading them out in hex. As in CA FE BA BE ...
             | 
             | Now I feel stupid.
        
         | ryandrake wrote:
         | Kind of low-key hilarious that someone thought this was a
         | serious enough issue to actually submit that code. I wonder if
         | there is a written spec that helps to judge which integers
         | should be considered "problematic" and which ones aren't.
        
           | yongjik wrote:
           | Not just that, but they also wrote the numbers in _decimal_ -
           | they didn 't even want them in the code as an example of what
           | not to do.
           | 
           | Maybe someone was having too much fun and got carried away,
           | but what an odd sense of humor.
        
             | omoikane wrote:
             | > wrote the numbers in decimal
             | 
             | Maybe they just didn't want the checker to flag itself.
             | 
             | I remember there was a similar check inside Google, where
             | any file containing the words "DO NOT SUBMIT" will cause
             | the presubmit check to fail. Naturally the presubmit
             | checker needs to look for that string, but it couldn't
             | trivially include the string as-is because that would
             | prevent the presubmit checker from being submitted.
             | 
             | (Motivation for something like this is that if you inserted
             | some extra logging statements or similar for debugging, you
             | would add "DO NOT SUBMIT" in nearby comments, so that you
             | will remember to remove them later).
        
               | 8n4vidtmkvmk wrote:
               | It's also fun if you want to include that string in a
               | template file so that users of the template don't forget
               | to fill in the template before submitting.
        
           | lifthrasiir wrote:
           | The actual diff in question [1] does show that there have
           | been multiple cases where such "magic" numbers did appear in
           | rustc, so that the lint is meant to catch any such known
           | cases to reduce possibly resulting complaints in advance, no
           | matter you like them or not. (This is also why the list is
           | not as exhaustive, as it needn't to be.)
           | 
           | [1] https://github.com/rust-lang/rust/pull/92469/files
        
           | fch42 wrote:
           | And now I can't unrememeber and feel totally compelled to a)
           | translate them and b) use them in my code somewhere. Cannot
           | help but think this is a deliberate pun, to get cynic's
           | imagination going ... did they do this to poke fun at the PC
           | brigade asking for it, or were they actually seriously
           | believing it would make users look the other way ? Either
           | option is funny.
           | 
           | (practically, used only "F0015601D" ... as IPv6 link-local
           | address. No, wasn't a honeypot service)
        
         | pton_xd wrote:
         | No wonder the compile times are so slow. Rustc comes with
         | built-in content moderation!
         | 
         | Anyway I think they forgot a few, like 173406926 (//
         | Intentionally written in decimal rather than hex). Seems like
         | they just checked https://en.wikipedia.org/wiki/Hexspeak. Kind
         | of a weak effort, overall.
        
         | Lammy wrote:
         | Reformatted:
         | 
         | irb> [184594741, 2880289470, 2881141438, 2965027518,
         | 2976579765, 3203381950, 3405691582, 3405697037, 3735927486,
         | 4027431614, 4276992702].map! { _1.to_s(16) }
         | 
         | => ["b00b135", "abadbabe", "abbababe", "b0bababe", "b16b00b5",
         | "beefbabe", "cafebabe", "cafed00d", "deadbabe", "f00dbabe",
         | "feedbabe"]
        
           | hyperhopper wrote:
           | I wonder why are many many "babe" constants included, but
           | only a single "d00d" constant.
        
             | ramon156 wrote:
             | It's because soos is the most perfect man
        
             | lifthrasiir wrote:
             | It's probably based on the Hexspeak Wikipedia page [1],
             | which contains 7 "babe" constants and only 2 "d00d"
             | constants. So we already had much more "babe" magic
             | constants to start with, I wonder why... ;-)
             | 
             | [1] https://en.wikipedia.org/wiki/Hexspeak
        
             | KineticLensman wrote:
             | Burn baby burn
             | 
             | (As per the Apollo guidance computer)
        
             | kragen wrote:
             | if your coworker says 'ana over in sales is a babe' they're
             | almost certainly commenting on her appearance, not just
             | mentioning her gender. even if they don't explicitly
             | mention her b16 b00b5, you may reasonably wonder if they're
             | judging you on the same basis, and in particular whether
             | you'd have a better yearly peer evaluation if you were a
             | dowdy man instead of a dowdy woman
             | 
             | if they instead say 'leslie over in sales is a dood'
             | they're just being explicit about his gender, perhaps
             | because someone thought he was female
             | 
             | i'm not endorsing any value judgments for or against these
             | statements, just explaining what other people's thinking
             | (factually) is which leads to the kind of value judgments
             | that lead to policies against putting b00b135 in your
             | source code
             | 
             | i suspect cafed00d was included as a (possibly
             | counterproductive) gesture to allay equity concerns like
             | yours rather than because of any serious concern that a
             | cafed00d constant would cause anyone any concern on its own
        
         | hoseja wrote:
         | Rustaceans NOT beating the allegations.
        
       | rr808 wrote:
       | 0xDDDB00B5
        
         | bitwize wrote:
         | That's a Code of Conduct violation. It's not the 90s anymore,
         | there's no quarter for this type of thing in modern development
         | teams. Rust's style checker even flags up the use problematic
         | magic numbers.
        
           | steveklabnik wrote:
           | This is only for rustc, not for arbitrary rust programs.
        
             | cpburns2009 wrote:
             | Wouldn't rustc flagging "problematic" numbers prevent
             | arbitrary rust programs from having them in the source?
        
               | bitwize wrote:
               | He means that the style checker only checks for those
               | sorts of numbers in the source code to rustc.
               | 
               | But the point remains: there is far, far less tolerance
               | for the sort of humor that objectifies women today, and
               | even laughing at it can get you in trouble as Tim Peters
               | recently found out.
        
               | nequo wrote:
               | I mean, 0xDDDB00B5 is about as appropriate in a codebase
               | as 0xB166D1C5 or 0x73571C23 would be. Which is to say, it
               | isn't.
        
               | l33t7332273 wrote:
               | What objectionable thing is 0x73571C23 supposed to be?
        
               | tbrownaw wrote:
               | nuts
        
               | handojin wrote:
               | Testicle. It's a small unit test.
        
               | tbrownaw wrote:
               | https://en.wiktionary.org/wiki/ickle
               | 
               | Huh, cool.
        
               | gymbeaux wrote:
               | TESTICLE I believe
        
               | g15jv2dp wrote:
               | You're offended if someone wrote "testicle" in source
               | code? Are you also offended about "ankle" or "hair"? The
               | puritanism...
        
               | nequo wrote:
               | I'm not offended. It is unprofessional. Talking about sex
               | at a workplace that is not about sex is going to be
               | offputting to many people who are not there to have sex.
        
               | g15jv2dp wrote:
               | The mere mention of the word "testicle" makes you think
               | that your coworkers want to have sex with you? Wow.
        
               | nequo wrote:
               | Have you tried talking about testicles in a work meeting?
               | Genuine question.
        
               | g15jv2dp wrote:
               | There's a difference between "talking about it" and "the
               | word is uttered somehow at some point".
        
               | nequo wrote:
               | A constant in a codebase is not "uttered somehow at some
               | point." It is a fixture for everyone to see until it is
               | changed by another commit.
        
               | steveklabnik wrote:
               | No. These tests are part of rustc's tests, not part of
               | anything that runs for arbitrary Rust programs.
        
       | cdchn wrote:
       | I'm surprised they didn't use 0xDECAFBAD for the Java format.
       | 
       | Even more interesting is the Wikipedia page
       | https://en.wikipedia.org/wiki/Hexspeak catalogs a delightfully
       | long list of hexspeak words and what they're used for.
        
         | joshu wrote:
         | because it would need to be an even number of digits
        
           | onionisafruit wrote:
           | I count 8 digits
        
           | cdchn wrote:
           | Sneaky isn't it? Its give for the first "word" then three for
           | the second.
        
         | kragen wrote:
         | in ur-scheme i assigned a magic number to each boxed type as an
         | easy dynamic type test. procedures are 0xca11ab1e, variables
         | moved onto the heap because they were captured by a closure are
         | 0x1ce11ed, strings of text are 0xbabb1e, cons cells consisting
         | of a car and a cdr are 0x2ce11ed, symbol objects used for
         | naming procedures and variables are 0x1abe1, and all other
         | types are unboxed. aside from being enjoyably silly, this was
         | surprisingly helpful when i was single stepping through the
         | code it generated in gdb. hex dumps are a lot easier to read
         | when you do that
         | 
         | http://www.canonical.org/~kragen/sw/urscheme/compiler.scm.ht...
        
           | inglor_cz wrote:
           | I like the way how this is playful and useful at the same
           | time.
        
             | kragen wrote:
             | :)
        
         | rob74 wrote:
         | The page you linked introduces another "suspect" to the "cafe
         | babe" mistery:
         | 
         | > _( "cafe babe") is used by Plan 9's libc as a poison value
         | for memory pools._
         | 
         | Both the NeXT computer and Plan 9 were developed in the mid
         | 80s, so I wonder who used it first? But I don't think that one
         | influenced the other?
        
         | dgfitz wrote:
         | I've used 0xc0ffee00 at work, recently even. 0xbec0ffee or
         | 0xd0c0ffee were also in the running.
        
       | mikewarot wrote:
       | 0x08675309 also shows up fairly often.
        
         | askvictor wrote:
         | Does that mean anything?
        
           | an_d_rew wrote:
           | If you're a child of the 80's in North America it does!
           | 
           | (Do a google search on the number, without the 0x0 prefix...)
        
           | mysterydip wrote:
           | Pop song in the 80s, 867-5309 (Jenny)
        
           | sethrin wrote:
           | It's a reference to a song ("867-5309 / Jenny") by Tommy
           | Tutone. It's pretty dated by now.
        
             | an_d_rew wrote:
             | Dated?!
             | 
             | DATED?!
             | 
             | BLASPHEMY!
             | 
             | ;-)
        
               | phito wrote:
               | Dated, just like putting noses to smileys!
        
               | quesera wrote:
               | iOS speech-to-text spells "smiley face" with a nose.
               | 
               | FWIW! :)
        
               | phone8675309 wrote:
               | I feel older every day.
        
               | 1-more wrote:
               | It's as old now as the first Jazz concert at Carnegie
               | hall was to it. Fred Astaire's "Nice Work if You Can Get
               | It" was #24 on the charts that year.
               | https://en.wikipedia.org/wiki/1938_in_music
        
             | cardiffspaceman wrote:
             | It was fun to read about this in the North American
             | Numbering Plan documentation.
        
         | physicles wrote:
         | When I worked on Windows Phone during the good ol' days, my
         | team used this for a sort of retail mode assert, for situations
         | that really shouldn't happen. Instantly recognizable. The
         | definition went something like this:
         | 
         | // This is a shout out to that 80s hit. You know the one.
         | 
         | #define E_JENNY_JENNY_WHO_CAN_I_TURN_TO 0x88675309
         | 
         | The 1 in bit 31 was required to signify that it's a Win32 error
         | code. The other high bits are essentially a namespace, which we
         | used correctly for all our other error codes.
        
           | bankcust08385 wrote:
           | It's far better than constants like
           | NEVER_USE_OR_MODIFY_OR_YOU_WILL_BE_FIRED that are supposedly
           | for testing only but turn out to be used in production to
           | control whether a beta feature appears or not, and so lead to
           | a bunch of dead code that couldn't really be cleanly
           | disentangled from good production code without someone
           | familiar with it doing a diff review.
           | 
           | Wherever my Motorola MPx200 went, it says "Hello."
        
       | Jupe wrote:
       | = CAECBA8E
        
       | 0xbadcafebee wrote:
       | Welp, time to trademark the old handle.
        
         | 0xF00DBABE wrote:
         | Ditto. I wonder if I can get some sponsors too
        
         | 0xDEADFED5 wrote:
         | hey cousin!
        
         | 0xDECEA5ED wrote:
         | Hey fellas!
        
       | malkia wrote:
       | 0xC05FEFE
        
       | mikehollinger wrote:
       | Semi-related story with some insider baseball:
       | 
       | There are quite a few memorable words you can spell using 32 or
       | 64 bits--like BA5EBA11. This is the story of me -not- choosing
       | one of those.
       | 
       | These bit-pattern words are handy because they're easy to
       | recognize, especially in a random memory dump.
       | 
       | On my first "real" assignment, I was writing real-time embedded C
       | code for a 16-bit processor that communicated with a host
       | microprocessor on a server. We needed to run periodic assurance
       | tests across a bus to ensure reliable communication with the host
       | since we weren't constantly using the bus.*
       | 
       | We were given an unused register address on the host processor
       | and told to write whatever we wanted to it. The idea was to
       | periodically write a value, read it back, and if we encountered
       | any write errors, incorrect reads, or failures, we'd declare a
       | comm error and degrade the system in a controlled manner.
       | 
       | Instead of using zeros or something like 0xDEADBEEF, I decided to
       | write 0x4D494B45 - "MIKE" in ASCII. It was unique, unlikely to be
       | tampered with, it worked, and no one argued with me. The code
       | shipped, the product shipped, and all was well. We even detected
       | legitimate hardware errors, which I thought was pretty cool.
       | 
       | Fast forward two generations of systems, and long after I'd moved
       | on from that team, the code had been ported around but that
       | assurance test remained unchanged. Everything was fine until they
       | brought up a new generation of systems, flipped on the firmware
       | for that device, and 10 seconds later, my assurance test
       | clobbered an important register. The entire system promptly
       | checkstopped and crashed. It took the team days to figure out
       | what was wrong, and I had to explain myself when they found
       | "MIKE" staring back at them from the memory dump.
       | 
       | That was a fun project. ;-)
       | 
       | * Note: It would've been bad if our device went out to lunch
       | because we were responsible for energy management of the server.
       | If the power budget was exceeded and we couldn't downclock and
       | downvolt the processor, something might have crashed or been
       | damaged.
        
         | onionisafruit wrote:
         | That was a great "Mike says no" moment.
        
           | sargstuff wrote:
           | vs. 80's commercial tag line about 'Mikey likes it"
        
       | Dwedit wrote:
       | A side benefit of the 2GB address space limit for 32-bit Windows
       | programs is that magic numbers are not valid pointers, and will
       | instantly cause an access violation if used.
        
         | adzm wrote:
         | I chose my name partially for the 0xFEEEFEEE pattern that the
         | Win32 HeapFree fills memory with in debug mode. I found it when
         | I was very young in the debugger due to this very the reason
         | and I've always loved the words in hex codes since!
        
       | dec0dedab0de wrote:
       | a long time a go I wrote a script that spit out random phrases in
       | hex that would work as a mac address. I used to do this to mess
       | with my coworkers in networking , and previous coworkers at the
       | ISP I was still using. My HN username is the only one i remember
       | though.
        
         | bankcust08385 wrote:
         | 7415 8E55A6E 15 A99407ED!
        
         | parlortricks wrote:
         | I always set my MAC to deadbeefcafe because it stuck out so
         | much to see it in wireshark.
        
       | leejoramo wrote:
       | Great to see these UserLand Radio Blogs are still hosted all
       | these years later. Dave Winer (and I am sure others) obviously
       | worked to see that happen.
        
       | lifthrasiir wrote:
       | My preferred way to make a "magic" constant has been using
       | base64. For example, 0x31a82270 maps to base64 `MagicA==`. This
       | approach is most useful when the magic constant itself shouldn't
       | be obviously ASCII but still should be meaningful enough.
        
         | kragen wrote:
         | too bad pointer alignment isn't visible in a base64 dump of
         | memory
        
       | amsterdorn wrote:
       | What about 0xDEADBEEF?
        
       ___________________________________________________________________
       (page generated 2024-08-13 23:01 UTC)