The cats sitting on a fence in early builds of Windows 8
devblogs.microsoft.com
devblogs.microsoft.com
Eventually I got around to implementing a rudimentary framebuffer to send to the display. Wondering what to display, I figured I'd compute a Mandelbrot fractal!
People liked it, and I was happy to have made our dev systems a little less ugly.
I went to work on other things for a few months. When I came back, they had replaced my fractal with the company logo :\
(I suspect, but don't know the codec, that the jpeg used to store the company logo ended up using more space and cycles-per-pixel than my fractal)
Slightly mismatched colors.
Bassic mispelings.
Logo rotated by 4 to 5 degrees.
Overlay a semi-transparent competitor logo for a single frame.
Etc.
I have to ask: is this serious or not? While extremely funny, are you guys all working for places where this is not potentially billions in damages?
I may have left it for awhile with each viewport rotated by a degree...maybe two.
HR sent out a series of painful to read HR speak emails where they chastised whomever did it, implied just about everything you could imagine ... all while saying nothing at all.
Whimsy can be dangerous.
If HR cares and has time to do that it’s a sign, there's fat to trim in the organization. I’m sure your investors would be thrilled to learn that.
When one person does it, it's a clever surprise. When many people do it, it quickly becomes tedious and repetitious. It's interesting only when it's done judiciously. It's even worse when it escalates, such as with vandalism, or cruelty, or shock. And one person's "whimsy" can easily become "what, can't you take a joke?"
So I can see why an HR department would want to say, "Yes, the was very cute, the first time. Please don't turn it into a problem".
In most cases, in my experience, I can tell what generation an engineer comes from based on attitude to whimsy. Younger devs almost always don't like them. Too much effort, too much potential for trouble. Older devs, especially past retirement, almost always like them. This industry started with a sense of humor and fun.
Now I work on systems that have more complexity in their I/O controllers than the devices I had started on, and no-one understands the full stack. When something goes wrong, the whimsy is the first thing that goes out the window in trying to find the root cause.
And yet, the "expensive" hardware of now is cheaper than your single server from over a decade if you look at the whole picture... a lot of development trends are based on capitalism incentives:
- Outsourcing stuff like server hardware management to AWS is 1-3 FTEs less on your payroll, plus saving of datacenter related cost (climate control, UPS maintenance, Internet uplink, redundant equipment/spare parts)
- "DevOps" aka "let people who have never heard of Unix cobble together Docker containers and CI pipelines until it works Good Enough" is yet another saving of specialized expert staff (SysOp / SRE)
- "microservices" got popular because it's easier to onboard developers and treat them like disposable cogs if your work packages can be really small, with clearly defined interfaces
There's plenty of us old UNIX greybeards working in DevOps. And frankly in most fields of IT you're going to see your fair share of younger engineers because that's literally how life works: people get old and retire while younger people look for work. Moaning that kids don't know the tech they don't need to know is a little like trying to piss in the wind: you might get some short term relief but ultimately you're only going to soil yourself.
edit: It's also funny that you moan about AWS as outsourcing while saying "people don't remember Unix" yet Unix itself comes from a heritage of time sharing services which are the same basic principles of cloud computing.
If you're old enough you'll eventually see all trends in computing repeat themselves.
A bit graphic design, a bit of PHP, a bit of email management, MySQL, a "pay now" page imported from a payment provider, and they were making good money for a minimal startup cost. All the code written by one or two people, often some external help with the graphics, and sometimes the business concept was someone else's idea.
Obviously the services weren't scalable, they didn't have hundreds of millions of users, and they didn't operate globally.
But they didn't need to. And that's still true of many startups today.
A few of them sold up for large sums.
The "microservice" name just seems to be the modern way to make all forms of distributed RPC hipster fashionable.
Unix isn't that hard. And Docker containers and CI/CD pipelines open other cans of worms, and since no one seems to understand what is going on under the surface (because no one wants to touch Unix), they just add more monitoring tools and scaling.
But we suddenly need five times as many developers because 80% of the code is just dealing with interfaces and communication and handling race conditions and recovering from failed network calls.
I saw a script written by a devops employee where they zeroed out all the partitions when they added a new web server.
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-init...
I'm going to disagree, here. Things were as difficult as they ever have been since. Systems and side-effects are better understood only in hindsight.
Coding in assembly because higher-order language wasn't invented yet. Coding in a text editor because IDEs were not a thing. Searching linked lists because what's a data-base, not to mention SQL. Needing to keep things lean because 32kb was an ungodly waste.
In that light, things are easier than ever.
One can be both professional and whimsical. In fact, I'd argue that true mastery will only come with a sense of fun and interest in your craft.
Applying whimsy can be an engineering decision. Using 418 when any error code will do, for example, if it affects nothing else.
It's good that a developer has cursory knowledge of how those layers work (e.g. to avoid re-adding checks at the upper layers of something that is already guaranteed by the lower ones), but there's no need to be an expert at all them.
I'd say something like Docker containers, running a wasm engine, targeted by a lean library with a sane high-level programming language - either a santard-looking imperative language like Haxe, or some esoteric opinionated functional thingie like Julia or Elixir. (It could also be something like Vue, Angular or React, but those aren't exactly 'lean', being specialiced in working with the full browser DOM and web servers).
Each layer abstracts away the lower levels (virtualization & compartmentalization to run on any hardware, bytecode to run on any OS or browser engine...), allowing you to potentially use it without being tied to one specific implementation of that layer.
Higher layers provide increasingly more complex and powerful abstractions, with standardized code that's been created by experts in the field with efficiency in mind, and debugged through hundreds or thousands of client projects; making them likely more performant and robust than anything a single development team could ever build on their own (except for extremely limited domains run on dedicated hardware).
And ideally they have the plus side of working side-by-side with other applications or libraries, running in the same system without being engineered to work only with a single "official stack", allowing you to mix-and-match the best abstraction for each problem being solved, instead of forcing you into a single solution for all your software. That level of flexibility (plus the simplification of the layers below) is worth the runtime penalty imposed by several piled-up abstraction layers. That's why we don't code everything on assembly anymore.
(To round out the anecdote, I’m a performance engineer on the younger side, so we’re not all bad :P)
This is a HN trope that gets trotted out every time a subject like this comes up. It's gone from amusing cliché to just boring and false.
Yes, the hardware was simpler. But the knowledge wasn't.
For example, when I first started with ray tracing in the 1990's, you used something like Turbo Pascal and had to actually know and understand all of the math behind what you were doing. Today it's just #include some random other person's library and you're off to the races.
Today if a developer wants to display a new font, they just add it to the massive tire fire pile of other abstractions they've copied from the internet. Back in the supposedly "simpler" days, you plotted out a font on graph paper, then actually did the math of converting those pixels into bytes for storage and display. And did the extra math to find ways to do it in the most efficient way possible.
The knowledge has changed, but the amount of knowledge hasn't.
Things are much simpler now than they were then. That's why programmers today think it's OK to waste so much of their computing resources. With the supercomputer power we have in our pockets, this should be a golden age of computing, but instead we use that power to feed people's vanity and addictions.
side-effects were better understood and contained.
If that was true, then retro computer enthusiasts wouldn't still be discovering features and capabilities today.
Luckily, we quickly stopped doing that, but the idea that things were easier back then is because people learned from what we were doing. In 20 years, people will talk about how easy it was to make things in 2022.
The GP was talking about how much of the stack we don't know. Ie if something fails in an abstraction underneath what we develop in, then we're often fscked. And there are so many layers to the stack now that the simplicity of debugging the entire stack has gotten harder -- this is a true statement.
However you are talking about the barrier for entry in software development. It has gotten easy. This is also a true statement but it doesn't make the former statement untrue either.
By making it easier to write higher level code we end up obfuscating the lower layers. Which makes it harder to inspect the lower layers of the stack. So it's literally both simpler and more complex, depending on the problem.
> > side-effects were better understood and contained.
> If that was true, then retro computer enthusiasts wouldn't still be discovering features and capabilities today.
This is a grossly unfair statement because you make a claim for one side of the argument and, without comparing it to the other side (ie are we still discovering features and capabilities of modern systems?) draw a conclusion that the original statement is false.
So lets look at the other side of argument: in fact the reality is people are routinely finding optimizations in modern systems. For example you often see submissions on HN where hashing algorithms, JSON serialization, and such like have been sped up using ASM tricks on newer processors.
Another example is some of the recent Rust code released that outperforms their GNU counterparts.
It is also worth noting that modern hardware is fast so people generally optimize code for developer efficiency (a point you made yourself) rather than CPU efficiency. So fewer people are inclined to look for optimizations in the capabilities of the hardware. However once current gen becomes "retro", you might start seeing a shift were people are trying to squeeze more out of less.
But debugability was far harder, you could not do it remotely, and there was no stackoverflow etcetera to help you.
Example: Installed in another country is an embedded controller talking RS232 to devices. The controller is resetting, probably due to a watchdog timeout. The controller software uses a custom RTOS, with no spare hardware timers and it is hard to get logs back, which restricted in size to some kilobytes. You make educated guesses as to what is happening, but are failing. Many weeks of work later, you design your own process profiling technique using a hardware logic analyser and from that you find the root cause. Easily over a man-month of work.
It did, then what the hell happened? :(
Like every other industry, the fun is all gone, and the bean-counters and moronic managers have taken control.
2. Why do I need your image hosting program?
2. You don't need it, but you want it
Today, we could power his suggestions with a fleet of AIs running in over 200 Azure data centers around the globe.
Rumors that he would become self-aware are unsubstantiated.
I buried a Konami code in the ad integration JavaScript (no one wants to code review that) which flipped all the stories on the homepage for zombie invasion stories. The authors were all members of the dev and project manager teams. You can still Google it.
I did not get fired, for a couple reasons. One, I disabled all the ads, so there was no negative brand association. Two, we'd just launched a redesign and our homepage traffic skyrocketed from 45,000 views / day to 750,000 views a day. My personal highlight was receiving a mention on NPR morning edition.
My general manager "scolded" me in public, but privately was thrilled at the several hundred thousand dollars worth of free marketing. I figured I'd hang my hat up there.
https://www.forbes.com/sites/firewall/2010/06/15/newsweek-re...
The square could have been anything but I had a very cute picture of my toddler so I used a photo of them instead. So now somewhere in a database there are hundreds of reports with a picture of my kid in them :)
Yeah, like _NSAKEY. Much planned. Very trustworthy. https://en.wikipedia.org/wiki/NSAKEY
As I recall, Brian Valentine sent an email to the Windows division and basically said that easter eggs made the product look bad. Customers don't want to be patching their systems constantly (I was there circa 2000 so in the NT4/2000/XP era, so back when windows update was a website you visited, and the original NT4/2000 bug fix delivery mechanism was the service pack and various rollups) and then also hear it contained easter eggs for funsies.
Microsoft also licensed the source out to companies, governments, universities, etc and it wasn't a professional look. Easter eggs in games - that's fine. Easter eggs in your operating system, that licensees could see - not a good look when the previous product (NT4) didn't have a great stability reputation and Microsoft wanted to pursue businesses with new SKUs like Windows Enterprise, Datacenter, with features like clustering.
BV recognized programmers wanted to insert a little bit of credit so for Win2000 the easter egg replacement was either a link to a webpage (that listed the names of the Windows team members) or a rolling display of those members. Sorry I can't quite remember which it was... I think it was a link to a webpage to keep as much out of the OS as possible.
Remember this was around the time that Excel 97 had an easter egg flight simulator, Word 97 had a pinball game, and Windows NT 4 had one or two easter eggs maybe more (one was the opengl screensaver would 1% of the time draw a teapot at an intersection; the other was a scrolling list of windows team members that I don't remember how it was invoked. So due to this I'm 98% sure what he let into Win2000 was a webpage link). By now, the URL is probably long decayed.
(For the curious: Wikipedia has an article listing lots of old MSFT Easter eggs.)
The best reason to not add Easter Eggs is simply: they add unnecessary (albeit tiny) risk to a project. Technical risk and schedule risk. They are not part of the software's requirements, and they are likely going to be undocumented. Every line of code we add increases risk. Part of our jobs as developers is ensuring every line we add contributes more value than risk. Easter Eggs don't do this. Sorry to be Mr. Serious Raincloud, but please leave Easter Eggs for personal, non business-critical software.
A perfect example from the article: the performance and memory impact on Windows startup due to loading the ASCII cats’ monospace font.
But over the very LONG TERM projects I see with Easter Eggs tend to have had developers who cared more about the project and were having fun, which leads to an overall higher code quality. (Your own experience may be different).
OP, here. I don't completely disagree with you. As I said, there are always reasons to take them out, and almost always, those reasons are excellent.
A well-executed Easter egg says something good about the team and the project, though. A team that has the time, resources and capability to build something neat or cool or (pleasantly) surprising, is a team that is unstressed and competent.
To be clear, I'm not discussing something like adding a clown giggle to flight control systems. I'm talking about when there are two equivalent paths, neither objectively worse than the other, I prefer when the team follows the path that adds whimsy and fun to the project over when they decide boring is better.
A team that will at least consider adding it will inevitably be more efficient than a team that absolutely will not consider it because they fear extra work.
Yea man, because most of us are just trying to get through the career part of our life to money and retire. Save your whimsy for your hobby projects. Nobody wants to debug production code with subtle easter egg behaviors.
> Instructor, Course Name, etc
> Ripley, Interstellar Ore Hauling
> Ripley, Terraforming 101
> Ripley, Criminal Justice Reform
> Ripley, Military Bio-Weapons Projects
It stayed up for a few years until my boss made me change it because one of the instructors got confused, complaining that they didn't teach any of these courses.
Oh they do, it's just its more of a preference for some cute thing out of marketing. "Made with love" etc etc
https://www.asciiart.eu/animals/dolphins
I usually put a random ascii art animal in the `motd` of random servers that I work with, and have seen tons of pieces with a “jgs” sig.
It's something to doodle while waiting for the compiler I reckon. I can't imagine OS development to be a fast iterative process.
But that aside, someone else has now linked to the source and it wasn’t MS.
I will grant you that there are tools that will generate ASCII art using letter shading (based on the number of pixels that letter lights up) but that also is very different to using the characters themselves to draw the shape of the image (like with emoticons). That still relies on raw human creativity…well maybe AI could now do it but that wasn’t around 15 years ago when Win 8 was in development, let alone back when those images were created.
No matter how useful the tool, it's still the artist that makes the art of course. But the tools can make a real difference in how creative someone can be - I doubt much of the really creative ascii art is/was made with notepad.
My point was simply that there are tools out there that really can approach that experience of 'doodling' with ascii, and I thought some people might not have been exposed to that before.
These sorts of articles are awesome though. I love hearing all the stories that go on behind the scenes of huge projects like this that otherwise never see the light of day.
He references the same blog, and goes into some pretty incredible detail about the history of what happened to pinball coming pre-installed on Windows.
[1] https://www-archive.mozilla.org/docs/web-developer/samples/k...
And of course, about:mozilla is still present.[0]
[0]: The Beast continued its studies with renewed Focus, building great Reference works and contemplating new Realities. The Beast brought forth its followers and acolytes to create a renewed smaller form of itself and, through Mischievous means, sent it out across the world.
from The Book of Mozilla, 6
Plenty cute though.
* I could be wrong; I'm just spouting naive hot air with no practical experience at either end of this spectrum :)
If there was a malfunction, the graphics would be malformed.
https://www.theatlantic.com/technology/archive/2013/01/the-n...
$ grep -o --text U+1F4A9 vmlinux
U+1F4A9
and while there may be an argument that this is whimsical, I don't think there's an argument that it's beautiful.
(U+1F4A9 should be the literal Unicode PILE OF POO glyph, but HN strips it, so)
[1] not just in the middle of a sea of otherwise arbitrary hex either, something like 00000000-0000-ABAD-IDEA-000000000000 so it was easily visible as a “test” value.
DEADBEEF shows up regularly if you work on projects that have only a seven-segment display.
> Joan G. Stark, also known by her pseudonym Spunk or her initials jgs, is an American ASCII artist.
See ‘cats on a fence 8/98’ for the missing risqué frames: https://web.archive.org/web/20091028023559/http://www.geocit...
Once, I collected some ascii art and made a online gallery (https://ascii-art.pywebio.online/#0_joan_stark.cat_love), "cats on a fence " is one of them
But iirc, Windows 8 introduced Segoe Mono and the kernel text mode interface is/was using that font, too?
It probably has, but maybe not between kernel and userspace
Oh but it does. Most (all?) text rendering on Windows happens in the kernel.
https://googleprojectzero.blogspot.com/2016/06/a-year-of-win...
* DirectWrite and WPF have been always user-space.
(In the case of this kernel text mode / BSOD code, I do wonder does it use the GDI font rendering, or does it have its own separate mini renderer just for those screens?)
[1] Probably a bit of a simplification, I know.
the waiting game is real for most developers/coders.
Also there is no point in the series where Luna and Artemis actually stare at the moon together in this fashion, and the cat on the left is wearing a collar. Neither Luna nor Artemis is collared.
...
I was a six year old girl when Sailor Moon premiered in America. I know WAY too much about that show.
Wow, I never thought an entire operating system could be crippled by font load times. Must be a problem I'm too linux & vector font to understand.
Millions of hours of our moms wasted combatting this one.