78 comments

[ 3.3 ms ] story [ 168 ms ] thread
There was a unicode ♥ in 1993?
Although many characters in Unicode are there thanks to things like CP437 having those characters (thus the line-drawing characters, among others). Backwards compatibility is also why different Brahmic scripts handle vowel markers that surround the consonant differently (e.g., in Devanagari, it’s a combining mark while in Thai it will be three separate characters).
Codepage 437 had the characters for suits of cards.
How did one type such a thing back then?
Holding down left-alt and typing a 3 number sequence
(comment deleted)
Hold down Alt and type 3 on the numeric keypad, I think.

In Windows, you can type characters in the Latin1 character set by holding down Alt, then typing a zero on the numeric keypad, then the code you want, such as Alt+0233 for "é". The leading zero disambiguates Latin1 characters from the traditional DOS character set, so you'd have to type Alt+130 to get the same character that way.

Another Easter Egg was “mkdir Alt+255”, which created a directory with the name of the ASCII code 255 which is blank on the command line terminal. Tools like DIR would skip them so you could hide files in there
I just saw a demo of this the other day clicking around YouTube.

In later versions of windows you could change the folder icon to be an empty image, then have it on your desktop where nobody could see it.

Hiding it on the desktop is one of those things that seems like genius until some random Windows thing decides to do a desktop cleanup and rearranges your icons.
ALT+255 also made the directories inaccessible in Win9x. Couldn't open them in explorer, for instance, without renaming to remove the special character.
Heh, that one in particular I remember well from wanting to spell Pokémon correctly as a kid
Alt + 003 on the numeric keypad, IIRC.
In general the comments saying "Alt+Numpad" are correct, however it doesn't work for this character!

♥ is code 3, which is the same as Ctrl+C - typing this at the DOS prompt would cancel any input on the current line (and also flush disk buffers IIRC - something left over from CP/M)

It is possible to detect if the user pressed Ctrl+C or Alt+3, using BIOS calls or direct hardware access. However, the DOS console driver wouldn't do it this way, and instead convert both into the same ASCII code.

The only possible way to pass this character to the "copy" command (which was built into the command interpreter) would be to write a program that invokes "COMMAND.COM /C COPY /♥".

Story seems suspicious, if it happened at all it might have displayed "I ♥ SEX" when some other switch was present, then someone mixed things up?

Most of the code pages had them, in fact, as they normally didn't vary in the C0 control character range.
There for the purpose of making it easy to write card games. There were also a number of characters inspired by Wang word processors, which there'd been an early plan to reproduce on the PC.
Plenty of Blackjack demo apps, I'm sure.
To be precise, the heart is a the control character (the range of characters between 0 and 31). Code pages define the content of characters 128 to 255. Control characters are all the same between all DOS code pages.
(except cp864)
Learn something new every day. Interesting codepage!
end of text - alt 3 (or alt 03?) I don't have a numpad anymore
Near fifteen years ago I worked for a web agency with basically no code review and very limited QA. Fast and cheap. Insanely fast paced looking back.

I had a habit of hiding my face in little hard to spot places of sites I worked on in very low contrast. Over my five years there I worked on probably hundreds of sites.

A couple weeks after I'd left for my new gig, I get a message from a coworker that a different coworker had pushed up an untested change that broke the navigation on one of their biggest clients. The HTML had become malformed in such a way as to make the entire page a repeating pattern of my very low contrast face, which had been hiding under the navigation.

The client thought it was some sort of hack. My friend and coworker knew what I'd been up to and explained to the team. I have no idea what was said to the client.

A couple weeks later it happened again with a different site. Same developer pushed bad code and my face hidden under the contents of the page were revealed.

They ended up going on an Easter Egg hunt and removed most of my hidden faces.

It's not something I would do these days as it's very unprofessional but I still get a little smile thinking about it.

I look back on my early web dev career where source control was something unheard of as were dev environments. In fact we regularly edited code live on prod server to debug/develop. Looking back I just shudder thinking about it.
Yup. We worked on a shared SMB server that had nightly backups. If we borked something bad enough to need to pull one of the backups it was an ordeal that involved calling (on the telephone) and potentially waking our IT guy who lived in Juneau Alaska

Putting a site live just involved FTP-ing the files up to one our shared webservers.

Numbered folders for version control sftp up to the live server.
"/site-final2" "/site-final-final-4"
"/site-final-final-4.bak--prod3-rc0-23.live (1)"
Worked for an agency that edited sites cowboy style over FTP, and whose “backup plan” for all agency data was a 500gb NAS. I found out that the designer just edited files directly on the NAS, so there was no backup. Classic.
Say hi to most DWH, DB developments...
Everybody has a dev environment and a staging/qa environment. Places with better processes just have them so they're separate from production. :p

IMHO, it's better to be a cowboy and reluctantly follow 'best practices' for the most part, than to be a 'best practices' person and be unprepared to be a cowboy when it's needed.

Sometimes, the best way forward is to force an update on production, even if the only method you have is modifying the executable on disk, while it's running. It's mmaped, so you can do this. But you wouldn't know this if you hadn't broken production by using cp instead of install to update a binary you wanted to modify for the next load.

I belly laugh every time I see that scene in Jurassic Park where the admin's animated face was playing on repeat with taunting audio, and Samuel L. Jackson snaps when he sees it and realizes what has transpired. Classic solid gold.
As someone who loves Easter eggs this is the best story I’ve read so far. Thanks for sharing it! I hid one in an internal “time sheet” tool we had at work that would be triggered after typing 666
You should have sold it as a feature, saying that it is a guard image that shows up when something isn't right :)
A nice note to not put anything you don't want other folks to see in software, even in testing.

We wrote a system for a client once. And there was a particular functionality that I had to iterate over quite a bit, trying to nail down evasive, frustrating bugs.

Needless to say, later, when the client was printing out some invoices and discovered one with several notes reading "F** F** F**!!!!", we got a phone call. We, clearly, didn't managed to scrub the DB properly when we installed it. We were graced by the fact the clients children were in during the weekend, and they felt maybe one of them had managed to add commentary to the data. "Yea! That's what it was allright! It's all fixed now!"

Anyway, software never forgets. Version control is forever. Be gentle when adding commentary to code.

LMAOOOOOOOOOOOOOOOOOOOOOOO
Similar fun story - I was working out how to embed jQuery into a Twiki site and how to do mouse-overs on content for some reason, no idea what any more. I needed some tests with different content. Our boss had just got a bulldog puppy that he was enamored with, so I found a gif of a bulldog puppy licking the camera, so it looked like it was licking the screen from inside it and used it as my test image.

I ended up making the front page panel of the new team twiki page where we had the team structure laid out a small random chance of showing the bulldog licking the screen in a full screen mouse-over, then I completely forgot I'd done it and went on vacation.

The boss was demoing the new site to the global team, with our MD there, and moused over it, triggering the screen licking gif, then moused off it and came back and it wouldn't retrigger and couldn't work out what had happened. It caused bit of a stir, but I was allowed to leave it in place with a very low chance of appearing.

Back before flexible web layouts or modals were a thing, we went through a phase of opening a new browser window for some content, and locking the size. Sometimes we'd want to open multiple windows and reference them later on, so we had a naming convention like "_popup_a" and "_popup_b". We had an intern one summer who coded all of his new window calls as "_poopup_X". I have no idea how the client actually found it, but boy did we hear about it.
A great addendum to this would have what the Easter Egg guy is doing now. A decent coder with a bit of cheeky personality 30 years ago... What happened to him?! Did fortune hit? Did he ride the dotcom boom? Did he give up in tech altogether?!
I had a friend who was fired because a customer's machine let fly with a few profanities. He had used Norton to patch his copy of command.com with swearword-laden error messages which he'd use to build their machine, and then forgotten to overlay their machine's copy with a clean one before sending it on.
I did this kind of edit once with a hex editor.

The trick was to keep the message text the same length, so as to not upset byte offsets.

Sad.

They (THEY(TM)) also took away typing "man" at 00:01 (or later 00:30) would print "gimme gimme gimme"

https://unix.stackexchange.com/questions/405783/why-does-man...

And they took away the "MAKE LOVE" (returns "NOT WAR?") easter egg in MIT's TECO editor on the PDP-6

https://www.acriticalhit.com/make-love-not-war-first-softwar...

What does the "They(TM)" mean?
An out group of people to be blamed.

In this case, the lame corporate kind of people.

they™, as in "the people behind it all", "the cabal", "the man in black", "the nameless people in suits", etc, as opposed to the regular use of "they". Here probably boring business people
It's my perspective, as lamenting the loss of easter eggs and other fun quirks is easier to phrase as some kind of fun police cracking down on individuality in software, to further a scheme to trap everyone in an anodyne corporate hellhole. But in truth, the author who put the "gimme gimme gimme" easter egg in place was also the person who removed it. There is no "they" responsible (also, TINC)
They. Them. Not just they, but capital They.

Everyone knows who They(tm) are, especially Them.

The nonbinary people are behind it
Also it seems Microsoft had code reviews to catch such shenanigans as "/♥", but somehow the AARD code went completely undetected.

https://en.wikipedia.org/wiki/AARD_code

> The AARD code was a segment of code in a beta release of Microsoft Windows 3.1 that would determine whether Windows was running on MS-DOS or PC DOS, rather than a competing workalike such as DR-DOS, and would result in a cryptic error message in the latter case. This XOR-encrypted, self-modifying, and deliberately obfuscated machine code used a variety of undocumented DOS structures and functions to perform its work.

> Internal memos released by Microsoft revealed that the specific focus of these tests was DR-DOS. At one point, Microsoft CEO Bill Gates sent a memo to a number of employees, reading "You never sent me a response on the question of what things an app would do that would make it run with MS-DOS and not run with DR-DOS. Is there [sic] feature they have that might get in our way?"

> Microsoft Senior Vice President Brad Silverberg later sent another memo, stating: "What the [user] is supposed to do is feel uncomfortable, and when he has bugs, suspect that the problem is DR-DOS and then go out to buy MS-DOS."

> Microsoft Co-President Jim Allchin stated in a memo, "If you're going to kill someone there isn't much reason to get all worked up about it and angry. Any discussions beforehand are a waste of time. We need to smile at Novell while we pull the trigger."

I love business guys thinking they're mafia dons and using tortured murder metaphors to put their crimes in writing
Undetected only in the tongue-in-cheek sense. AARD was obviously intentional.
Intentional?

Where is the specification explicitly asking for it?

All we have are some memos asking Will no one rid me of this turbulent priest?

My point is that internal QA processes mean nothing if the company itself has nefarious intent. It can approve every violation of trust it wants to. But here we are cheering Dave Plummer reminiscing about 1990s Microsoft firing an intern and overlooking their underhanded behaviour as a company.

The AARD code ended up costing MS $280 million, not counting lawyer costs, in 1996 dollars when the new owners of DR DOS took them to court.

Microsoft did unforgivable shit like this all the time, which is why some of us have never forgiven them. Bill Gates is a piece of shit trying to buy his way into heaven.

This is the way...
There’s a reason Melinda’s name is on the foundation. I emphatically believe that if they hadn’t met he’d have spiraled out of control by now.

I was going to make a joke about Melinda Gates deserving a Nobel, not Bill. In doing so I just learned that Bill tried to persuade the Nobel committee by using Jeremy Epstein’s help. What kind of help could Epstein provide other than blackmail?

> Bill Gates is a piece of shit trying to buy his way into heaven.

On the one hand, he fucked over some tech bros. On the other, he's using the money he made off that to cure malaria. What a garbage human being.

He tried to make the entire Information Age about him.

Do you think if Bill Gates and Larry Ellison didn’t exist, that Google’s original mantra would have been, “Don’t Be Evil”? I don’t.

> Where is the specification explicitly asking for it?

Edit: actually check the docs [1], there are some specs. But anyway, assuming that memo was all...

I never worked for Microsoft, and I know they did do some real design and specification work in this time period, but in my experience, this looks like as much of a specification as I usually get:

> Microsoft Senior Vice President Brad Silverberg later sent another memo, stating: "What the [user] is supposed to do is feel uncomfortable, and when he has bugs, suspect that the problem is DR-DOS and then go out to buy MS-DOS."

Tell me what the user's outcome is (user with DR-DOS is uncomfortable and thinks they have bugs), tell me what the desired user response is (buy MS-DOS and retry), and let me figure out the rest.

Sounds like detect DR-DOS explicitly or implicitly, and fail occassionally, and cast asperssions in the error messages. Something like relying on internal layout of memory where MS-DOS always does it one way but DR-DOS doesn't always would be great (add comments to make sure MS engineers don't change it!) ; but I think they went with direct detection and intentional breakage.

I don't think this was a good choice for MS, but I don't think the specification was unclear even if it wasn't detailed. I've done similar work that I don't feel bad about; unapproved 3rd party clients were using my service and I held them to a very strict API; not my fault they didn't have API docs and only reverse engineered 2/3rds of the requests.

[1] https://web.archive.org/web/20180803194008/http://antitrust....

I don’t get why you think QA should catch and presumably block a feature which the executives of the company were asking for. QA works for those same executives. There’s nothing rogue about the Microsoft example.
> Microsoft Co-President Jim Allchin stated in a memo, "If you're going to kill someone there isn't much reason to get all worked up about it and angry. Any discussions beforehand are a waste of time. We need to smile at Novell while we pull the trigger."

For years, our yearly training specifically warned against using violent metaphors when referencing our competitors. It was probably because of that memo, huh?

The cheeky intern was not cheeky enough to obfuscate his code to make it past the code review and was caught. You can easily obfuscate your code by preparing it in several commits with each commit handling a little part that under the code review inspection of said commit appears not only benign but also necessary to the actual task your implement. And then in one final commit you put everything together and BOOM!, cheekiness implemented, while the manager and code reviewers are none the wise. Or that's how I did it in one such instance ;)
This also reminds me of a story of when a Commodore engineer did successfully insert a message into AmigaDOS that said "We Made Amiga" followed by "They Fucked It Up" very briefly if you invoked a specific key combo. Naturally, Commodore Intl. was not amused about this easter egg.
In fairness, there probably wasn't much going on with the source code for the internal COPY command in 1993. It had been stable for years by then. So I don't imagine it being particularly difficult to spot simply from what parts of the source tree a change touched.
(comment deleted)
In my first couple years of professional programming, I put in a little joke for other devs and testers. The URL shown to users to update their app was stored in the Windows Registry. I added some code that defaulted this value to the "Never Gonna Give You Up" video when the registry value was not set--a common condition when testing code.

What I didn't realize was that deleting the registry was a common action our tech support had people try when they called in. Turns out I ended up Rick Rolling a bunch of our customers!

It's not clear to me if he didn't get invited back, just because of this incident. I'd have a talk with him about it, but lots of people do stupid shit when we're young -- especially intern-young. It's kind of a bummer we don't trust each other more.
> It's kind of a bummer we don't trust each other more.

Huh? Sounds like he was trusted, but they verified his work. Trust != blindly accepting someone's work. And in the end, this intern violated the trust that _had_ been placed in him, and he was shown the door. Rightfully so.

Yes, part of growing up is making mistakes. But, part of growing up is also living with the consequences of your mistakes. And, yes, I've made some mistakes in my youth (hell, even as an adult) that have led to professional consequences, including termination.

When I say trust, I mean trusting his ability to learn and grow, even in a behavioral sense. If you trust that, then you can talk to him first and then make a fair judgement about whether he's changed or not.

Further, it's up to every manager and employer if they want to continue this kind of fear and punishment, or accept and correct mistakes. I don't think the entire professional world acts like this in reality, only in dystopian entertainment and nightmares.

I used to put very memorable phrases in web pages when I was trying to troubleshoot which of 30+ redirects I was hitting, then remove them afterward.

Once, when I was a student employee, there was a massive outage, leading to one of those redirect pages that's usually not visible and I had forgotten to clean up afterward, displaying for many people.

I no longer put quite such memorable messages in visible places.

Truly: did the intern think they wouldn't get caught? And, if you implemented the switch in the usual manner/jump table, did they get any fun from that at all?
I just put in little code comments about how you might not want to remove this Thread.Sleep() unless you want to harm a puppy. That and occasional f-bombs when I have to hack around and stink up my software because of a shitty dependency.