Secret Life of Windows Task Manager - The Oxford University Address

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
Hey I'm Dave, welcome to my shop! I'm Dave Plummer, retired operating systems engineer from Microsoft going back to the Windows95 and MS-DOS days, today, I'm speaking at Oxford university about Microsoft, what it was like there in the 1990s, and some of the projects I worked on like the Windows Task Manager, Zip Folders, Space Cadet Pinball, and so on. Unfortunately, due to Covid, the presentation is all online, but my loss is your gain as now you can watch from the comfort of your own chair on YouTube. Enjoy! Good morning, afternoon, or evening, as the case may be wherever you are. Being asked to speak at the ICTF conference certainly fell into the classic Good News/Bad News pattern. The good news, of course, is that you're being asked to speak at Oxford. The bad news is that, thanks to the aftershocks of Covid, you'll be doing it from the comfort of your own basement or garage via Zoom. The exquisite history and architecture of the campus have been replaced instead by my hot water heater and some old cans of latex paint. And while working locally has a few advantages, course, the last bit of bad news is that due to the time difference, I'm speaking to you live at 2:30AM in the morning my time. I'm rarely entirely coherent at 2:30AM in the morning and there's no guarantee that today will be an exception! As you've likely deduced from the schedule, my name is Dave Plummer, and if you don't recognize it that's really to be expected, as I'm one of the anonymous software engineers enlisted by Microsoft to write operating systems such as MS-DOS and Windows. Odds are then, that you would know me best by some of my work, like Task Manager or the ZIP file support in Windows, the port of Space Cadet Pinball, Product Activation, and so on. Along the way I also worked on products like MS-DOS, Media Center and a number of other technologies. Of those, I've opted to speak to you primarily today about the Windows Task Manager and the unlikely story of how it came to be, and in so doing I'll be able to relate a little about myself, my background, and my time at Microsoft back in the 1990s. By now the odds are that you've used Task Manager at some point and have at least a cursory familiarity with its menus and buttons, but you might be surprised to learn that they didn't always carry the names that they do today. About the time that I was putting the finishing touches on the first versions of Task Manager, a new group had started up within Microsoft called POLCHECK, for policy check. Its sworn duty was to defend our honor by scouring the Microsoft source code and its products for pretty much anything that would make us look stupid, unfeeling, out of touch, and so on. Basically, it was a pass of political correctness and professional sanity run upon the code and was often sorely needed. In the ancient days, programmers could be known to take out their frustration by leaving comments in the source tree that would make even the rowdiest of sailors blush. I likely learned more colorful cursing imagery from reviewing old code than ever I did from reading the bathroom walls at the county fair. Other than security experts and a few folks in academia, however, few would actually see our internal Windows source code. But many would see the end user product, and that is why it was important that the product design and user interface reflect the new kinder, gentler, Microsoft. The days of the harshly angled DOS prompt were over, and Windows was going to be your friend and your confidante, no longer merely a rude adversary. We were going to take the sharp edges off so that nobody got hurt. The most basic checks, of course, were for profanity. No problem there, as like you, I'm sure, I tend not to encode a lot of profanity into my products. But when we got to the stage for "violent imagery", it became clear there would be a few issues. That's because Task Manager is, quite frankly, a natural born killer. Like the character of Winston Wolfe who serves as the Cleaner in Pulp Fiction, Task Manager is the one you call when you're facing an insurmountable computer problem. Task Manager stands there in its little tuxedo, confronts the problems and makes them go away. When everything else has gone wrong, and the system is failing down around you, Task Manager is often the tool you reach for to right the ship and steady its path. And the first thing often you do when a system has run amok is to find the offending process, and, well... kill it. In the computer science world this harsh notion of killing tasks and jobs goes back to the 1950s, as does the notion of parent and child processes. In fact, even the signal-based system of Unix still used "kill" as the command name, so it's something a systems programmer could become a little desensitized to over time. Still, even I knew that clearly, we couldn't ship a product with a big red Kill button or a Kill menu item. We decided that the softer cases would be called "End Task". Your process wouldn't be harshly killed, it would sort of wander towards the light in a graceful exit, perhaps saying hello to a ghostly visage of its parent process as it went by. Shaking hands with the other old processes, it wound saunter out the exit door while quietly saving it work accompanied by soothing jazz piano. The harder cases, where the process wasn't playing nicely, meant we would use the verb "Terminate", and later, "End Process". If a process were behaving badly, and if it didn't respond to more reasonable requests to knock off whatever it was doing, you could ultimately Terminate it, assuming you had the correct permissions. The attorneys from PolicyCheck were becoming a little frustrated with me, as though I had personally made up all this violent verbiage just to test their patience and the limits of their system. And right when they thought we were done, he asked me for the final menu items. We were on the last page now, the process page, and it's not very user friendly to begin with. It's really where I hid all the nerd knobs for low level process monkey business. The first major verb after Kill Process was the very unfortunately named "Kill All Children". We struggled a while with that one before finally agreeing to call it "End Process Tree". And the final one? It was simply renamed Shutdown and Exit. But what did it actually do? Well, as far as functionality, its purpose was to rapidly flush buffers and exit. All apps would stop, a complete service shutdown would occur and then final system exit. Particularly if the Component Object Model and its threaded apartments were in use it really come down to "Kill all children, then kill self, and then burn down the rental apartment". So, thank goodness for Policy Check, because the life of a Task Manager can be a dramatic and scary one. In the Beginning It's always hard to know where to begin a story such as this. I decided to embrace brevity for your comfort and to compress two centuries into a few sentences. If you do go back far enough, my ancestors owned and operated the Sportsman public house in Luton, about an hour from Cambridge. The youngest emigrated to Canada in the early 1900s after obtaining a land grant for a homestead in Saskatchewan. Soon a family hardware store was opened in town, and that business continued on down for four generations. My Dad's store was just down the alley from our house, as was my retired Grandfather's workshop, and so every day from about the age of 5 on up, especially in the summers, I would wander down and hang out with my Dad at the hardware store for a while and then visit my grandfather at his shop. Not only did his shop feature an actual Coke machine, he had the key, and sometimes he'd open it up and grab us each a bottle. As a little kid, being able to open the Coke machine seemed to me to be the ultimate in power and privilege! Between the hardware store and grandpa's shop I spent a great deal of time hanging around with folks that were busy fixing, inventing, and building things, and I think that was somehow formative. Of course, what was hardware for them would turn out to be software for me, but the core instincts are very similar, I think. By 1980, when I was 11 and able to venture a little further from home, I made my way into the local Radio Shack, a retail electronics chain. There, out of the boxes but not yet set up, sat something I'd only heard of: a computer. The TRS-80 Model 1, Level 1, with 4K. When I asked when it was going to be ready to see, they said they weren't sure how to hook it up yet. In a move that would become somewhat of a theme in my life, I offered to set it up even though I clearly had no idea what I was doing. They must have felt I was precocious enough to humor with their expensive system because they said "sure, kid, have a shot" and left me to it. Now in all honesty, it wasn't much different from connecting a component stereo, except Tandy, in their infinite wisdom, used the exact same round 5-pin-DIN connector for video, power, cassette, and keyboard, but I still somehow managed not to blow it up. It was to be my first experience with "Das blinkin lights" and I loved it. The more LEDs something had, as far as I was concerned, the better. Once up and running, I naively performed a Turing test of sorts on the machine by typing English commands into the BASIC interpreter. My only prior computer experience had been watching Star Trek, where the machines could answer sufficiently logical human questions. It failed miserably and responded only with SN? which I decided must mean spelling error. Later I would figure out it was a Syntax error, but at that age I didn't know what syntax meant anyway. Suffice to say, I didn't get very far that first day, but I walked or rode my bike down there every Thursday night and Saturday morning, and the manager, Brian Patmore, graciously let me key in the BASIC programs I had dreamed up in elementary school in the days prior. I didn't even save any of these early programs to cassette and keyed something new in every time. I initially had no idea how limited the interpreter truly was, but I learned quickly. There were no books on how a kid could learn Zed 80 assembly language, at least not that I could find. While the Radio Shack guys were friendly, initially they knew less about the machine than I did. And as nice as they were about letting me exploit Regina's Thursday night shopping policy, I couldn't spend all my days sitting on a stool in the corner of a retail store. My family couldn't afford a cutting-edge computer like the TRS-80, but by the time I entered high school in 1982 my dedication to the subject had convinced my parents to stretch their budget enough to purchase a Commodore 64. I was also fortunate that the high school I attended had an excellent Computer Science teacher by the rather apt name of Mr. Breit. He stoked our interest in the material by assigning interesting projects like a prime sieve competition and he gave us extra-credit assignments called "Trivials" that challenged kids of all abilities. Thanks to cars and girls and various other distractions my path to university was a circuitous route that took about six years, but I got there eventually. It was a foregone conclusion, I suppose, that I'd study computer science In some form, but I still had no real idea what I wanted to do when I grew up. Would I be a game programmer, or write the code to run the clock on microwave ovens? I really had no idea. I was going in the right general direction even though I didn't know precisely what my ultimate destination was going to be. It all became suddenly clear during my summer break during my third year of college. I was working a summer internship at the phone company where I was converting their network over to 10BaseT and each day I had an hour for lunch in the food court. I took to reading each day as I dined with the old and the bored, and one book I picked up was called "Hard Drive: Bill Gates and the Making of the Microsoft Empire". As I read the book, I became increasingly entranced by the stories of the people and the projects at the company. The people there sounded like me, they acted like me, and apparently, they paid them fairly well for doing so. It was everything I didn't even know that I had been looking for. I became increasingly certain that, unlikely as the prospects might be, Microsoft was the place I wanted to be. But Seattle is a long way from Saskatchewan, and it was in another nation entirely. How would I ever get there from where I was? Even had I lived next door, Microsoft was already receiving on the order of 100,000 job applications a year. The odds were stacked against me, but I had one trick up my sleeve, as it were. I had been putting myself through college by writing and selling applications for the Amiga series of computers, such as the program known as HyperCache, which had quite a following in the Commodore community. In those days before the web, software often came with a registration postcard that you would complete and mail in, and my program was no exception. I had a stack of a few thousand little blue cards, so I started to go through them all looking for anyone with a Microsoft email address. I found about four people in total and wrote a polite email to each one. I explained that I was a computer science student nearing graduation and that my goal was to land a position or internship with Microsoft. One person wrote back, a fellow by the name of Alistair Banks. He was a British fellow who happened to be working Stateside at the Microsoft headquarters at the time. He gave me what was perhaps the greatest gift you can give to an aspiring college graduate, and that was the direct contact emails of a few Microsoft development managers that were actively hiring. I wrote to each of them in turn and after a lengthy phone screen I was flown out for a set of all day interviews that, were I successful, would net me an internship for my final summer of school back in 1993. I would be working on the MS-DOS team under a senior developer by the name of Ben Slivka. [Slide: Microsoft Campus] Microsoft Interview Microsoft interview loops used to be famously grueling. You spend the entire day there. You start with an interview at the Human Resources Department to make sure you're sane and bathed, and if so, you're then off to a series of 5 one-hour coding interviews where you stand at a whiteboard and answer brain teasers and write C and assembly code until you can't go any further. They push you until they stump and/or break you, and then depending on how those first five interviews go, you might make it to the "As Appropriate" interview, which is the hiring manager. The answer is Boolean at each of the steps - Hire or No Hire. You cannot almost hire a person, and thus there are no maybe responses allowed. You only get to the final interview if most everyone else has said "Hire", since the team must be fully bought in on who gets hired: it's not just up to the boss. In fact, the boss is the last one to decide, and the team determines who makes it that far. The coding problems are simple tasks that you can fit on one whiteboard, like how to reverse a doubly linked list. Or how to count the number of bits that are set in a word. Attempt to factor a prime number, that sort of thing where there's an obvious and trivial approach that can be refined and then optimized. You want to see their thought process, and you want to see what they consider to be "good enough". Take the case of counting the number of bits that are set in a 32-bit word. The na ve approach is to OR it with one, increment a count if true, shift the word over by one bit, and repeat. Do that 32 times and you've got your answer. But that can be improved - you can stop as soon as the remaining word is zero, after all. As the interviewer, you watch to see if the person picks up on those little optimizations as they chew on the problem. But what about long runs of zeros separated by ones, that seems like a waste of time. Well, it turns out that instead of ANDing with one, you AND with the number itself less one, and that way you only do one operation per actual bit that was initially set. If three bits are set, you only do three tests. In other words, there's the simple answer, the fast answer and the "smart enough to get yourself hired" answer. Starting Internship at Microsoft I learned quickly that I'd made it, and right after final exams at school, I flew down. After a couple of hours of New Intern Orientation, they gave me an office, an account, and a copy of the MASM assembler. From there, it's sink or swim. Remember, it was still 1993: There was no World Wide Web to look things up on. There was no Google or Wikipedia or Stack Overflow. I had never written a line of x86 code before, and they were expecting me to be productive immediately. I was sitting in an office with a chair, a desk, a used PC and a network cable. Where do you even start? I can't overstress the 'straight into the fire part' - it's not like phone company where they give the intern a token task that he or she can't screw up and won't cause a problem when they inevitably do anyway. In contrast, Microsoft has me working on the core codebase on new features for MS-DOS, which is a multi-billion-dollar business. Bill Gates has us over to his house for a BBQ to talk about it over a few beers, and I'm supposed act like this is all totally normal for me. They do take their interns seriously. There are only perhaps 5 or 6 developers in total on MS-DOS and most of that team is feverishly rewriting the hard disk compression engine to not use a hash-table, which it turns out the Stac Corporation managed to somehow get a patent on and that Microsoft lost a lawsuit over. Thus, with the big brains working on the hard problems, it's me and one other intern developer responsible for pretty much every new feature in MS-DOS 6.22. I wrote the new SmartDrv CD-ROM cache, moved Doublespace Into the High Memory Area, made Diskcopy single pass finally, fit the entire upgrade onto a single floppy using binary deltas, and so on. The work took about three months, and even though I felt I had done a good job, there was no guarantee that an internship would ever translate into a full-time position. When my summer was over, I went back to hometown of Regina to go back to class and hope the phone might ring one day. I started final semester of university, taking classes in two of my favorite areas from two of my favorite professors - advanced operating systems topics with Dr. Hamilton and a sweeping tour of uncommon languages from Ada to Prolog that I'd otherwise never have had the opportunity to touch with Dr. Yang. The school Is Incredibly fortunate that both are still there today! The Microsoft Offer And I remember exactly where I was and what I was doing when that offer call came in that fall. I was being offered a full-time software design engineer position in Redmond with complete relocation benefits, visa and immigration assistance, the works. And the salary? Are you ready? You've all heard of the Microsoft millionaires of that era... well, it was under 25,000 pounds a year. That's all they were paying, but I didn't care. I didn't negotiate. Whatever it was, it was enough. I wasn't in it for the money, even if I thought I was at the time. It wasn't until the UPS delivery drivers went on strike that summer that I found out they were making a fair bit more than I was! But I didn't care, and there were these other things called "stock options?" that worked out OK in the end. What I found especially interesting was to compare notes with the other new hires from places like MIT and Harvard. They got the -exact- same offer as I did, right down to the penny. My fianc and I flew to the United States and I was taken into the big glass room for my immigration interview. As she watched from the outside, she could see the Immigration Officer flailing his arms and turning red in the face and yelling. Clearly, I was headed back to Canada and my Microsoft dreams were not to be. But what she didn't know, because she couldn't hear anything, was that he had already long since stamped and approved my work Visa. He was upset because every time he printed a document in Word it would print blank piece of paper at the end, and it was wasting paper, and since I was going to work for Microsoft, he wanted me to fix it for him, right then and there. So I did - I fixed the borders at the border and he let me on through. That May I flew back one weekend, convocated from the U of R on Friday, got married on Saturday, and then permanently relocated internationally to the USA on Monday. And by the way, if you are planning a wedding, I strongly endorse the approach of hiding out in another country while all the hard decisions are made for you. Then just fly in the day before, get married, and fly back out. Truly hassle free! [Slide: Dave at Work] VisualZIP and Task Manager I spent the majority of my career in Windows NT, which became Windows XP, and is today the code you know as Windows 10. Back in those days, just like today, I liked to code. I liked to code a lot. In fact, I'd code all day at work at Microsoft and then come home and code on my side projects at night until bed. I'm also the kind of guy who's just genuinely curious about what's going on my in my system and who enjoys seeing machines of any kind busy at work. I could literally sit and watch Norton Speed Disk shuttle blocks and sectors around my disk in a fascinating dance for longer than I probably should. Heck, I've even defeated the safety and propped the lid of my washing machine open to watch it run a full cycle out of curiosity about how it worked; there could be a whole spectrum of reasons why, but I think I'm just wired that way. Now that I was working on the fledgling Windows NT, with all its complicated internal mechanisms, I wanted to get some insight into what was going on with my own desktop as well, and that interest led to Task Manager. Today you might think of Task Manager primarily as a way of dealing with rogue apps and frozen desktops, but that ability was secondary to the monitoring piece of determining what was programs were running, what resources were in use, what was still free, who owned what, and most important, what if anything looked out of the ordinary. It was more about inspection than control. What was running, how much memory each process was using, how many threads of execution each had operating, how many graphics handles it had outstanding, and so on. With a glance, a knowledgeable developer could now easily spot a resource leak with ease. In a way it's a debugging tool written by a developer that even end users ultimately found useful. I wrote that first draft in my den at home and then took the resultant rough program into work. In those days we followed a practice known as Eating Our Own Dogfood, which meant we were self-hosted on the newest builds of Windows NT even as we worked to create them. Eventually several other developers talked me into giving them copies, and it spread amongst the team. It eventually came to the notice of Dave Cutler, the designer of Windows NT and our only other boss beyond Bill Gates. Fortunately, he was a fan of the fledgling Task Manager and gave me permission to add it to the main Windows source tree. A few days later, Task Manager was part of Windows. No money exchanged hands and no contracts were signed. I simply added it to the project source tree and changed the copyright headers. It was very much a wild west in comparison with how you would go about it today. The best part about it at the time, at least from my perspective, was that once I added it to the product, my hobby became my day job. The software that I had been tinkering with in my den now became my primary full-time job for a few months. It would be very much like if you had a hobby of building and painting little birdhouses, and then one day you brought one in to show your boss, and your boss said "You know Dave, really like your little birdhouses, and we're going to pay you to build them while you're here at work too." My birdhouses just happened to be things like Task Manager. Contrast that experience with the one I had about a year later involving the system software known as ZipFolders. That's the code that enables you to download and browse through Zip archives using the Windows shell, and it lets you drag and drop in and out to compress and decompress files, and so on. I had written it at home but released it as shareware. I was selling perhaps a dozen copies a day when somehow a Windows product manager at Microsoft stumbled across the utility and decided that it, too, belonged in the operating system as part of Windows. To that end she called me early one morning at home, before I'd left for work, to explain that they wanted to purchase the program from me for inclusion in Windows, and would I be willing to discuss it? I offered to stop by her office that morning, which seemed to unnerve her - she demurred and said I should talk to Microsoft Travel, which confused the heck out of me. Why would I schedule a travel visit to Microsoft when I worked there every day? I lived only a few blocks away! It turned out, after some uncomfortable back and forth, that she had no idea that I worked at Microsoft, just as she did! She had merely researched, tracked down, and cold-called the author of ZipFolders, who happened to be me, at home to explore an acquisition. As a result, my choices were quite limited. If I did not sell it to Microsoft, they would simply develop their own or buy a competing one, and I'd have to stop selling mine or quit my day job - I couldn't just continue selling mine in competition with my own employer once they had entered the market! And so, I cheerfully accepted their first, best, and only offer. Still, everyone was happy: I showed up at work the next week in a red Corvette and ZipFolders remains as part of Windows to this very day. Turning the story back to Task Manager itself, you can't just stick a piece of shareware into an operating system and call it good. There is a huge difference in required code quality and robustness between an app you cranked out over a weekend and a part of the Windows operating system. It would take a lot of work to bring my quick and dirty draft up to the standard required for inclusion in the operating system, and that work would comprise my day job for the coming weeks or months. As you can imagine, when it comes to an app like Task Manager, the accuracy of the data its reporting is paramount, and early in its development I was chasing an annoying bug related to total CPU usage. It was all calculated very precisely for each process based on the system accounting, but when they were added up individually, very, very rarely, it would flash briefly greater than 100 percent. I stared at my code until I could barely see straight, but I just couldn't find a problem. I convinced myself that the problem had to be in the kernel's accounting, but blaming the kernel is almost akin to claiming "it must be a compiler bug" when you really don't understand what your own code is doing. The bar for blaming the kernel guys was very high, and when I did try, they were unmoved. They were pretty certain it had to be my problem. In order to try to catch this weird edge case, I placed an assertion in the code. An assertion is a statement which verifies that a particular condition is always true, and I added one to continually check and validate on every machine everywhere that the total was 100 percent or less. It would also re-check that total once per second. My assertion would trigger if the total was ever more than 100 percent. The plan was to run this through the entire gauntlet of nightly NT Stress tests across the team. What is an NT Stress test? Well, each and every night every developer, before they left, would start a test suite that put their PC to work running the day's latest test build of Windows under enormous load. It would call every API and do everything it could think of to destabilize or crash the system so that we could attempt to catch those cases and debug through them and fix them. There were many people whose full-time job was entirely to devise new ways to abuse the operating system in the hopes of breaking it. These tests would run all night on every machine we had, all while each was connected to a debugger. Any oddity would be investigated by the developer responsible for that particular area. They could connect to the machine's debugger remotely from anywhere, even from home, and that gave them the opportunity to inspect the issue live. Into this mix I added my assertion message that the CPU time was never greater than 100 percent in total. If it ever was, an alert message would pop up on the user's desktop and if NT Stress were running, it would stop right there the debugger. And yet nothing ever happened. We could never catch it happening during stress, and the few times it did happen live during interactive daily use were harder to catch. Since repro cases were so exceedingly rare, I got a little desperate and did something unconventional: I put my home phone number in the message. If this ever happened to anyone in the Company testing the product, I wanted to know about it right away, no matter what. In the meantime, I moved onto other issues and kind of forgot about the message. That was unfortunate, because it means I also forgot to remove it, and my home phone number, before we publicly shipped the Windows Beta far and wide around the world. It meant that every time the issue manifested itself to anyone anywhere on the planet, my home phone number would be displayed to the user. Not smart. A few weeks later we caught a case in the debugger on a machine at work. I debugged it far enough to convince myself the problem had to be in the kernel, and I handed the debugger connection off to them to investigate further. Sure enough, there was, in fact, a tiny accounting error somewhere in the kernel that happened very rarely that would push reported CPU time over 100, and Task Manager had just been dutifully reporting that. It wasn't my bug, and it was now fixed, both of which made me happy, and I removed my home phone number from future versions of Windows. 25 years later I still have that same home number, and thankfully, no one has ever called. As if dealing with the Shell and Task Manager wasn't bringing me enough to do at the time, I also volunteered to write the Windows NT version of Space Cade Pinball. Our Senior VP wanted to be able to show off how Windows NT could support gaming, and what better way than to include a game that's fun and visually compelling yet still runs on pretty much any computer, no matter how old and frail? It's a rare opportunity to add a new game to Windows and mine was going to make Solitaire look like Minesweeper. Given all the original IP from Maxis, I thought it would be smooth sailing until I discovered such complications as the sound engine it used being written entirely in fast x86 assembly language with few comments, which effectively necessitated reverse engineering it and then rewriting it from scratch in C++ so that it could work on all of our CPUs, including the RISC platforms. The nice thing about having worked on Space Cadet Pinball is the street cred it gave me when volunteering at my kid's school to teach their computer labs. Those little kids could care less about most anything I'd worked on with that one exception: they all seemed to know and love Pinball. And being able to make a little show of walking over and entering a "secret code" that only I knew that gave them infinite lives? Priceless. One reason that it was important to maintain a small size is that Task Manager is a bit like the Highlander - there can be only one. Or at least there should only be one instance of it running at any time. There are a number of different ways that you can launch Task Manager, so managing the single instance problem really has to be up to the program itself. Task Manager does this by looking for another instance as soon as it starts. If it finds one, it sends a private message to the existing instance with a challenge code. The running instance must provide the correct response within 10 seconds. Any failure or unexpected results along the way and Task Manager will launch a new instance so that in theory you're never stuck without a usable task manager. Even if one is a zombie, another will be created to take its place. Your worst case is having multiple Task Mangers running. Task Manager takes a number of other defensive steps so that it has the best shot at providing at least the basic functionality that you would normally find on the Processes page. For example, even though it's not the first page, it's created first. Then I check memory, and if I've gotten that far but memory is low, as in under eight megabytes, then you get a severely reduced Task Manager with a much smaller memory footprint, but one that is still able to do basic process reporting and management. You should be able to get a Task Manager up and running with what today would be almost no memory free. One nice little touch owes its existence to a story I'd heard. Apparently, the GPS failed on a helicopter near Seattle and so the pilot needed to know his current location in order to set his bearings on the map. They came upon a low-rise office complex, and so they hovered outside a window and quickly made up a sign that said, "WHERE ARE WE?". The person inside the building furiously wrote up a sign of their own and held it up to the pilot which read "YOU ARE INSIDE A HELICOPTER". To the amazement of the passengers, the pilot then flew directly to the airport. When questioned how he'd suddenly known where to fly, the pilot explained "When I saw an answer that technically correct but totally unhelpful, I knew immediately we were outside Microsoft headquarters, and I knew my way from there." In the event that Task Manager gets an error condition it doesn't recognize, it goes to some great lengths to get the system to parse the error into a meaningful message, with the aim being that you never get a silly message like "ERROR: The Operation Completed Successfully". In addition to the goals of small size and robustness, my most important personal goal was actually flicker free painting and resizing. Although the operating system provided all of the tools necessary, before Task Manager I cannot think of another application with that many list columns and controls that could be arbitrarily resized live in all directions without flicker or flashing. It seems a minor thing until you've experienced it both ways. I went to some great lengths to avoid even a single instance of flicker. The process list, for one, is a fairly complex affair that takes full advantage of most everything the excellent system ListView control has to offer. For example, if only a single cell of a single row has changed in the complete process view, only that tiny little rectangle is invalidated and repainted. In the initial incarnation of Task Manager, I did not want any rubber baby buggy bumpers to protect the user from themselves. By that, I mean that I wanted the operating system itself to be the arbiter of what you were allowed to do, not me in the form of rules inside Task Manager. If you wanted to terminate the whole Shell or even a process like Winlogon that would cause the system to then bluescreen immediately - by design - you could do it as long as you had the appropriate administrative system rights and credentials. You could also do things like mark a CPU-bound process as real-time priority and effectively hang the system if you so wished. That led to some bad press however as a few smarmy computer journalists showed how you could, as super user given the correct rights, crash a Windows machine with Task Manager in a single click. Never mind that you could delete the main hard drive partition as well, so it's kind of a silly point, but it made for bad PR. Another idiosyncrasy of the code is that it contains a number of functions and controls named Dave. For example, there's Daves Frame Window Procedure, Init Daves Controls, Daves Frame Class, Daves Group Class, and so on. This was not so much a doff of the cap to my own megalomania as a side effect of the code having started its life as a pet project. These are all cases where the operating system provided a version of a control, such a group box, but I super-classed and customized that behavior. To distinguish my version from the system's original one, I simply added my name, Dave, as a prefix. It made sense when I was working alone on it, but I likely should have updated those names when we brought the code in house. It was probably a Priority 3 item in Raid, which is what we called our bug tracking database. What often happens to trivial changes in the real world is that being trivial, people procrastinate on them until they actually have the spare time to work on trivial stuff, but by then it's too late in the product cycle to accept even trivial changes that don't fix an important bug, and naming isn't an important bug. And so, sometimes trivial but harmless items never get fixed and as a result, the Dave classes have persisted across the ages. There are literally ten ways you can start Task Manager, but my personal favorite, however, is one I added to the logon process, since it'sounds by definition always running if you're logged in. Simply press Control Shift Escape which will signal the logon manager to start a fresh Task Manager for you even if everything else is gone or bunged. This is also a handy shortcut if you're working in a VM because you don't then have to deal with the special ctrl-alt-del key sequence being captured by the host. Trust me, though: Ctrl Shift Escape is the way the kids are all doing it now. Well, if we're talking about starting
Info
Channel: Dave's Garage
Views: 40,960
Rating: undefined out of 5
Keywords: ms-dos, microsoft windows, microsoft, microsoft history, task manager, oxford university, zip folders, ms-dos 6.22, history, Windows Task Manager, Product Activation, space Cadet Pinball, windows 95, windows nt, windows xp, windows 2000, windows 10, career, job interview, day in the life, london, art, art of code, code, 2021, uk, cambridge, hypercache, secret history, Windows task manager
Id: KclSIRRuBIE
Channel Id: undefined
Length: 29min 13sec (1753 seconds)
Published: Wed Jun 23 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.