Atomic I/O letters column #119Originally published 2010, in Atomic: Maximum Power Computing
Reprinted here July 17, 2011 Last modified 03-Dec-2011.
Every time I want to print a photo, my Stylus Photo has at least 3 blocked nozzles. The unblock routine sometimes works first try, but usually needs a couple, and apparently it works by just pissing ink into a little sponge inside the printer. This is not just annoying but also really expensive.
Now I haven't printed any photos for a couple of hot months, and it looks as if there are more blocked nozzles than unblocked. I did a couple of clean cycles, but at this rate I'll have to use a whole set of cartridges to clean it out. And apparently there's no guarantee even then.
Is there any other way to do this? Preferably one that involves some cleaning substance cheaper than Grange Hermitage?
Yes, it is possible to clean printer nozzles with something other than staggeringly expensive ink. You probably won't even screw up your printer. Window-cleaner with ammonia in it can do the job, and the procedure is generally
1: Slide the head out where you can work on it, with a sponge or paper towel under it
2: Remove the cartridges
3: Dribble your Windex-or-whatever through the head assembly, or even squirt small amounts of cleaner in with a syringe
4: Remove colourful paper towel, replace cartridges, power up printer, hope for the best.
(All usual disclaimers apply here, of course. There are several ways to break a printer by doing this. The management disclaims all responsibility.)
The exact technique for different models of printer varies, but this routine is now well enough known that you can find discussions about it for many different models - just searching for the printer name and "windex" often does the trick. There are even techniques to use with inkjet printers that have cartridges that incorporate the print head, which can still block before you use all of the ink.
How do I make a program only use a particular CPU or group of CPUs, without using Task Manager?
The Witcher kept crashing, so I was dicking around with the graphics settings and so forth. That didn't help, but then I thought of setting the game process to only use one CPU (of the 8 "CPUs" I have on a 4-core i7 with Hyper-Threading). "Set Affinity" in Task Manager (Windows 7, 64-bit) let me do that, and that fixed it! I think!
But the game supports multithreading, so I tried giving it 2 CPUs to use, and that seems OK too. I think it just freaks out if it gets ALL of the CPUs.
I looked on microsoft.com and found there's a utility, "imagecfg", that lets you modify an executable to only run on particular CPUs. But if I do that I bet game updates will fail. And if I stick with Task Manager, I have to re-set the affinity every time I run the game.
Can't I just automate whatever it is that Task Manager does when you Set Affinity?
Now do a smiley face!
There are standalone utilities that let you set the priority and affinity of particular processes whenever you run them, but you can also just use the command-line START command.
Among START's numerous options (open a command window and type "start /?" to see them all) is affinity-setting. If you want to restrict, say, Notepad to only run on CPU 2, you could type
start /affinity 4 c:\windows\notepad
To make this a point-and-click operation, you'd make a shortcut to the program you want to run, then go to the shortcut's properties and change the "target" line to have start /affinity et cetera at the beginning of it. (Remember to put quotes around the target statement when there are spaces in it.)
Which is, fortunately, not as complicated as it sounds.
If you've got a Hyper-Threaded four-core CPU, your computer does indeed think you've got eight CPUs, numbered 0 to 7 (because computers usually start counting at zero). Each of those CPUs gets one digit of the eight-digit binary mask number, CPU 0 getting the least-significant bit at the right and CPU 7 getting most-significant at the left. So if you wanted a task to run on CPUs 0, 1 and 4, the mask would be 00010011.
You can convert binary, decimal and hex numbers in many automated ways (Google will do it for you using the "0b" and "0x" prefixes to indicate binary and hex). It's a good idea to do it by hand a couple of times, though, if base-2 and base-16 are not yet familiar to you.
In decimal the rightmost number indicates units, the next one tens, then hundreds, and so on, with digits 0 through 9 allowed. In binary it's units, twos, fours, eights and so on, with only zeroes and ones. In hex it's units, 16s, 256s and so on, with digits 0 through F. So binary 10011 (0b10011, to avoid confusion with decimal ten thousand and eleven) is one unit, one two, no four, no eight, and one 16, for a total of 19 in decimal. 19-decimal is three units plus one 16 in hex, or "13" (0x13, to avoid confusion with decimal thirteen). So to set a program's affinity to those CPUs you'd type start /affinity 13 [program].
It's harmless to run Notepad over and over with different affinities, so you can just experiment with the command line until you get a handle on the mask idea.
Note that Hyper-Threading turns each physical CPU core into two virtual CPUs. "CPUs" 0 and 1 are both on the first physical core, CPUs 2 and 3 are the next one, and so on. If you set a multithreaded process's affinity to "CPUs" 2 and 3, it may run faster than it would on only one "CPU", but to get the full benefit you need to spread the process across more than one physical core, by telling it to use CPUs 2 and 4, for instance.
(This also means that if you're setting process affinity so that, for instance, a couple of CPU-intensive single-threaded tasks can be confined to one CPU each, you won't get much benefit if you assign them to two "CPUs" that are both actually the same core.)
I'm building a new PC in this awesome server case I found in the "old broken junk" room at work. It has a ton of 5.25 bays, which I'll put hard drives in with adapter rails, and there's a bay for some sort of redundant power supply that an ATX PSU roughly fits. The back panel should be OK, too; I'll just drill and hacksaw holes where they're needed.
Motherboard mounting is a problem, though. The case used to have some giant Alpha or something board in it, and there are round metal standoffs that seem to be welded in place, that don't line up with ATX mobo mounting holes at all.
I'm wondering whether I should angle-grind the standoffs away and drill new holes for standard hexagonal PC standoffs. I'd have to be pretty accurate with the drilling, though. Could I just put a sheet of plastic or something over the standoffs and fix the mobo onto that? Would this cause earthing problems?
I'm not planning to carry this computer to LAN parties or anything (MUCH too heavy), so a mobo mount that's a bit wonky and wobbly would be OK. What would you do?
The motherboard does need to be earthed, but this isn't a big problem - if the PSU and expansion card brackets are in contact with the chassis, that ought to do it. You could easily wire a unused mounting-screw spot to a point on the chassis as well, if you liked. (Use of automotive 2-gauge braided-copper earth strapping is optional.)
Apart from this, all your mounting method has to do is line up the mobo with the back of the case, not interfere with anything sticking out of the underside of the board (like the CPU mounting frame), and prevent the back of the motherboard from touching the chassis and shorting random solder pads to ground.
All sorts of improbable-sounding ideas would work. Yes, some non-conductive sheet attached to the existing mounts and to the mobo. Or a wooden frame. Or even a scribble of caulking-gun construction adhesive, if you never intended to remove the mobo again.
I'm tempted to suggest polycaprolactone plastic as a universal replacement for all sorts of plastic clips and knobs and standoffs. At room temperature it's like white nylon, but at about 60°C it becomes a clear, sticky substance that you can mould like Blu-Tack, and reuse indefinitely. Australian shoppers can buy it under the name "Polymorph" from Jaycar, and I ramble on about it (and suppliers in other countries, and for larger quantities) here.
That low melting point means polycaprolactone could turn back into clear goop in a hot PC, though. It'd be OK for side brackets for a motherboard in a decently-ventilated case, but questionable as a standoff near the CPU.