The Veteran Neophyte: Manual Labor

JIM MENSCH

As a 14-year Apple veteran, why would I be writing a "neophyte" column? It's
true that I've written system software for many Apple computers and I've been
in every tech support capacity that Apple has ever dreamed of. I'm writing this
because I'm in fact still wet behind the ears; I learn new things every day
here at Apple. Most of what I learn involves problem solving and debugging. I
believe that creative problem solving is the one trait that separates a great
programmer from an average programmer. Great programmers must hone their
problem-solving skills all the time, whether at a computer or not. In fact,
sometimes examining how day-to-day problems are solved can help us develop
proper coding and debugging skills at work. Here I'd like to relate a little
fable to illustrate this point (the names have been changed to protect my
automotive pride).

Bob and Stu were working on a primo 1963 Dodge Dart that they had just bought.
It was a classic: push-button transmission, cherry upholstery, straight body. A
classic car with a classic problem: it had been run dry of oil and the engine
needed to be rebuilt. Flush with confidence (having just completed an engine
rebuilding course at the local community college), Bob said, "No problem, man.
Let's rebuild it ourselves; how hard can it be?" That, I suppose, was the first
mistake.

So, Bob and Stu set out to rebuild the engine, using all new parts. A scant two
months later, the ten-hour job was finished. Finally they were ready to install
the engine. Struggling to get the 1000-pound engine into the car and onto two
very small bolts that hold it at an angle too obtuse to allow it to drop in
straight, they were cussing and cutting themselves constantly.

After a while it dawned on them that things were not going as planned. In a
moment of brilliance, Stu said, "Hey, what does the manual say about installing
this thing?" The manual! Every good car mechanic has a manual and follows it.
Why didn't I -- er, Bob -- think of that? Reading the manual, they found that
the torque converter (a big heavy round thing with teeth on it) was supposed to
be mounted not to the engine but to the transmission!

They pulled out the engine and struggled for an hour to get the converter
mounted to the transmission. After this the engine went in relatively easily
(with the help of Thom the helpful Brit). Having connected all the hoses,
belts, doodads, and whatnots, our intrepid pair looked at each other with giddy
anticipation. "Could it be that we're ready to start this thing?" they
wondered. So they tried to start it -- and they failed to start it. Just as
with every major programming project, they had put in countless hours, and when
the time came to fire the baby up, nothing happened.

It was time to debug this problem. "Hmm. Seems like a compression problem. Do
we have compression?" asked Stu. "Yup, it's low, about 60%, but I guess that's
because the engine hasn't been broken in yet," replied Bob. Were the plugs
firing? Ground one side, turn out the lights, look for the blue spark: of
course they were firing. Was the gas getting to the carburetor? Not yet, so
they siphoned some up and tried again. Still no go.

So they started looking at the esoteric stuff. Was the timing chain on
correctly? Well, we have compression, and it seems that we shouldn't if the
timing is wrong. Three hours later, after Bob browbeat Stu into agreeing that
the timing must be correct, Stu browbeat Bob into testing it anyway, since
while Bob talked a good game it was always possible that he was wrong. They
partly disassembled the engine and watched the little valve bits go up and
down, and sure enough the timing was right. A victory for Bob, hollow as it may
have been.

They continued to argue about what the problem could be, and finally decided to
let it rest a while. This went on for weeks, until one day Bob remembered
something that his teacher told him in class: a tablespoon of oil in every
cylinder will get the seals sealing so that an engine could start. Could it be
that easy? Could it be that the first thing that they had looked at -- the
compression -- was in fact what was preventing the engine from starting? Bob
put a little oil in each spark plug hole and the mighty engine roared to life!
Our heroes stood dumbfounded at first, then quietly patted themselves on the
back for such a fine job. Months after they had started their odyssey, they
finally got the beast running.

The first thing to notice is that reading the manual was not the first step Bob
and Stu took toward solving their problem. Neglecting to read the manual cost
them hours of avoidable frustration and rework. Like Inside Macintosh,
automotive manuals contain many hidden gems that are there for the asking. For
instance, the shop manual didn't explicitly say, "Don't be a moron; the torque
converter stays attached to the transmission!" but it did say, "Step 9. Remove
torque flex plate screws, leaving converter attached to transmission."

Inside Macintosh contains many such tidbits waiting to be found. For instance,
I was recently asked by a developer why a particular call to close a window
wasn't causing the window behind it to redraw properly (it was leaving a
desktop-patterned hole behind). Examining the problem a little further, we
found that a resource that was needed had been purged and wasn't being
reloaded. The code was smart enough not to crash when the purged resource was
discovered, but it didn't seem to be able to reload the thing. As it turns out,
the developer was using a rather strange strategy for manipulating the ResLoad
attribute of the Resource Manager. He was turning it off when he wanted it off
but not turning it back on again right away; instead he would turn it back on
when he needed it on. I pointed out to the him that this was the problem, and
he said, "I've been programming the Mac for almost 10 years and I've never read
anywhere that the Window Manager assumes ResLoad is TRUE!"

While he's right about this on the surface, if we look we find that Inside
Macintosh warns in the SetResLoad description that "If you call SetResLoad with
the load parameter set to FALSE, be sure to . . . set [it] to TRUE as soon as
possible. Other parts of system software that call the Resource Manager expect
this value to be TRUE." (This has been in there so long that Caroline Rose
wrote the first draft of it!) Since the WDEF is system software, it assumed
that ResLoad would in fact be TRUE. After I pointed this out, the developer
decided it was time to break out those manuals that had been collecting dust
for so many years, and revisit some of the documentation he thought he had
remembered.

Another lesson to learn is that when problems arise, don't spend hours plodding
through esoteric logic. First think, "What's the most obvious cause of this
problem?" You might recall that Stu was right when he suspected a compression
problem. By discarding the obvious without first examining it fully, we risk
costing ourselves days of work only to find out that we were right all along.
As a seasoned programmer, you'll learn that you can get a feel for why a
problem exists. You may not have any ready logic to explain why an event
occurred, but you might have a feeling anyway. Go with that feeling. The
obvious things are the easiest to check (but don't make it too easy and stare
past the real trouble). They're also usually the quickest to fix. Looking there
first can save time, effort, aggravation, and lots of cussing. In my 14 years
of problem solving for Apple, I've found that the simple, obvious solution is
right 90% of the time.

Why did Bob and Stu retest the timing, anyway? Experienced troubleshooters,
they realized that simply arguing about a point may lead to a conclusion, but
any conclusion that can be tested should be. Logic dictates that the cam shaft
can be 180deg. out of phase (for every rotation of the cam shaft, the
crankshaft rotates twice and thus will be in the same position at 0deg. cam
rotation as 180deg. cam rotation), but you should check it anyway if you're
stuck. It's easy to get your logical conclusions backwards and get your
crankshaft 180deg. out of phase. On a car this might result in outright
failure, while on a computer it can mean more insidious things.

I recently needed to use the Power Manager to control screen dimming, drive
spindown, and CPU sleep. All of the calls had a "get" function that returned a
Boolean, TRUE if the feature was on or FALSE if it was off. Strangely enough,
two of the "set" calls required a value of TRUE to enable the feature but one
required TRUE to disable the feature. I spent hours looking at the complex
logic of IF statements before I simply watched it all go by in MacsBug and
noticed that I was sending a TRUE value to a call named Disable. Going back
through my logic again brought the error right out.

If you've learned anything from the above tale, good. Remember, manuals contain
quite a lot of information and they're a good place to start. Also remember
that this isn't rocket (or automotive) science. Think simple thoughts; don't
create extra work for yourself.

JIM MENSCH (mensch@applelink.apple.com, AppleLink MENSCH) has spent the last 14
years as a wage slave at Apple. Before that he did real work that involved
cleaning and lifting and toting stuff and working with tools. While his mother
is his real inspiration in life, he looks to the relaxed masses for guidance.
An avid book collector and cook, he has absolutely no time for computers when
he's not at work. His personal motto is "Eat more beets."*

Community Search:

MacTech Search:

Software Updates via MacUpdate

Hopper Disassembler 4.3.16- - Binary dis...

Hopper Disassembler is a binary disassembler, decompiler, and debugger for 32- and 64-bit executables. It will let you disassemble any binary you want, and provide you all the information about its... Read more

Default Folder X 5.2.2 - Enhances Open a...

Default Folder X attaches a toolbar to the right side of the Open and Save dialogs in any OS X-native application. The toolbar gives you fast access to various folders and commands. You just click on... Read more

EtreCheck 4.0.1 - For troubleshooting yo...

EtreCheck is an app that displays the important details of your system configuration and allow you to copy that information to the Clipboard. It is meant to be used with Apple Support Communities to... Read more

Carbon Copy Cloner 5.0.9 - Easy-to-use b...

Carbon Copy Cloner backups are better than ordinary backups. Suppose the unthinkable happens while you're under deadline to finish a project: your Mac is unresponsive and all you hear is an ominous,... Read more

QuickBooks 17.2.25.638 R26 - Financial m...

QuickBooks helps you manage your business easily and efficiently. Organize your finances all in one place, track money going in and out of your business, and spot areas where you can save.
Built for... Read more

Monosnap 3.4.10 - Versatile screenshot u...

Monosnap lets you capture screenshots, share files, and record video and .gifs!
Features
Capture
Capture full screen, just part of the screen, or a selected window
Make your crop area pixel... Read more

Vivaldi 1.14.1077.50 - An advanced brows...

Vivaldi is a browser for our friends.
In 1994, two programmers started working on a web browser. Our idea was to make a really fast browser, capable of running on limited hardware, keeping in mind... Read more

Viber 8.2.0 - Send messages and make fre...

Viber lets you send free messages and make free calls to other Viber users, on any device and network, in any country!
Viber syncs your contacts, messages and call history with your mobile device, so... Read more

QuickBooks 17.2.25.638 R26 - Financial m...

QuickBooks helps you manage your business easily and efficiently. Organize your finances all in one place, track money going in and out of your business, and spot areas where you can save.
Built for... Read more

Carbon Copy Cloner 5.0.9 - Easy-to-use b...

Carbon Copy Cloner backups are better than ordinary backups. Suppose the unthinkable happens while you're under deadline to finish a project: your Mac is unresponsive and all you hear is an ominous,... Read more

Latest Forum Discussions

Our top 5 characters from casual RPG Cre...

Creature Quest definitely lives up to its name with a host of collectible creatures based on fantasy tales and world mythologies. To celebrate Creature Quest’s first birthday, we’re going to lay out what we think are the five best characters in the... | Read more »

Around the Empire: What have you missed...

Did you know that Steel Media has a whole swathe of other sites dedicated to all aspects of mobile gaming? Sure you'll get the very best iPhone news, reviews, and opinions right here at 148Apps, but we don't want you missing out on a single piece... | Read more »

All the best games on sale for iPhone an...

Oh hi there, and welcome to our round-up of the best games that are currently on sale for iPhone and iPad. You thought I didn't see you there, did you, skulking behind the bushes? Trust me though, the bushes aren't where the best deals are. The... | Read more »

The Battle of Polytopia Guide - How to H...

A new update just released for The Battle of Polytopia (formerly Super Tribes), which introduces online multiplayer. For all the fans of Midjiwan’s lite take on Civilization, this is certainly welcome news, but playing online isn’t as easy and... | Read more »

Here are the very best mobile games to p...

It's Valentine's Day! Did you get loads of cards and chocolates and other tacky, simple expressions of human affection? Did you send out tat because you find it almost impossible to express emotion unless there's a section dedicated to it at your... | Read more »

A laid-back mix of RPG and TCG, Creature Quest is all about building your deck, evolving your creatures and winning in battle. It’s the creation of VC Mobile, set up by Might and Magic producer Jon Van Caneghem. There are elements of that classic... | Read more »

Check out this awesome hands-on with the...

Well, PlayerUnknown's Battlegrounds has come out on mobile. This isn't a clone, this isn't a riff on the battleroyale mechanics of the game, it's the official mobile port by Tencent. But there's a little bit of a hitch.
[Read more]
| Read more »

Hostage Negotiator (Entertainment)

Hostage Negotiator 1.1.0
Device: iOS Universal
Category: Entertainment
Price: $3.99, Version: 1.1.0 (iTunes)
Description:
Official app of the board game by AJ Porfirio and Van Ryder Games.
In Hostage Negotiator, you play the part of... | Read more »

Price Scanner via MacPrices.net

Saturday Sale: Amazon offers 13″ 1.8GHz/256GB...

Amazon has the 13″ 1.8GHz/256B Apple MacBook Air on sale today for $250 off MSRP including free shipping:
– 13″ 1.8GHz/256GB MacBook Air (MQD42LL/A): $949.99, $250 off MSRP
Their price is the lowest... Read more

Roundup of Apple Certified Refurbished 12″ Ma...

Apple has Certified Refurbished 2017 12″ Retina MacBooks available for $200-$240 off the cost of new models. Apple will include a standard one-year warranty with each MacBook, and shipping is free.... Read more

Apple offers Certified Refurbished 10″ and 12...

Apple is now offering Certified Refurbished 2017 10″ and 12″ iPad Pros for $100-$190 off MSRP, depending on the model. An Apple one-year warranty is included with each model, and shipping is free:
–... Read more

Apple Canada offers Certified Refurbished Mac...

Canadian shoppers can save up to $560 on the purchase of a 2017 current-generation MacBook Pro, MacBook, or MacBook Air with Certified Refurbished models at Apple Canada. Apple’s refurbished prices... Read more

Adorama has the 8-core iMac Pro on sale for $4799 including free shipping plus NY & NJ sales tax only. Their price is $200 off MSRP, and it’s the currently lowest price available for an iMac Pro.
Read more

Sale! Walmart lowers prices even more on 9″ i...

Walmart has lowered their sale price on 9.7″ Apple iPads to $80 off MSRP for a limited time. Sale prices are for online orders only, in-store prices may vary:
– 9″ 32GB iPad: $249.99 $80 off
– 9″... Read more

Roundup of 13″ MacBook Pro sales, models avai...

B&H Photo has 13″ MacBook Pros on sale for up to $200 off MSRP. Shipping is free, and B&H charges sales tax for NY & NJ residents only. Their prices are the lowest available for these... Read more

MacTech is a registered trademark of Xplain Corporation. Xplain, "The journal of Apple technology", Apple Expo, Explain It, MacDev, MacDev-1, THINK Reference, NetProfessional, Apple Expo, MacTech Central, MacTech Domains, MacNews, MacForge, and the MacTutorMan are trademarks or service marks of Xplain Corporation. Sprocket is a registered trademark of eSprocket Corporation. Other trademarks and copyrights appearing in this printing or software remain the property of their respective holders. Not responsible for typographical errors.

All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.