How to fix your snapping, popping, sparking microwave oven – replace waveguide easily


So there I was the day after Thanksgiving…  The previous evening we enjoyed a yummy dinner of turkey, mashed potatoes, and gravy.   Now we all know that Thanksgiving leftovers are the best.  I quickly grab some turkey meat, pour some gravy on them, and pop them in the microwave for a quick reheat.  Imagine my surprise when I suddenly hear a loud crackle sound, and then a boom coming from the microwave.  Looking over, I even see some flashes of light coming from within the oven.

Now, I have a Sharp R-520KS microwave, but it turns out the problem I was experiencing is pretty common to all microwave ovens.  Within the microwave oven there is a device call the waveguide.   This is a hole  inside of the microwave that focuses the microwaves into the oven.  And over this hole is a cover which is made from mica paper.

Over time, this cover will collect food and crud on it, and eventually it will start to arc, if it gets bad enough, you will experience the same fireworks inside your oven that I did.  It is recommended that you try to keep it clean, but eventually it will probably need to be replaced.  Official replacements are often not cheap, and if you have an older oven, may no longer be available.

Luckily it is fairly easy to buy a sheet of mica paper and cut it yourself to match your existing cover.  I bought mine from Amazon (click on link below), and carefully traced the existing cover onto the paper.  Use a sharp knife, or scissors to cut out the new pattern.  Simply pop your new cover into place, and your microwave will be ready for many more years of service.


How do you extract POST form data and file uploads in node.js?



One of the most common tasks in creating a Node web server is handling GET and POST calls.  GET calls are fairly straightforward, however POST calls are more involved.  POST form data and POST file uploads provide the ability for a web client to upload enormous amounts of data to your server.  Proper safeguards must be put into place to insure that your server does not crash if it runs out of resources required to handle a POST of unlimited size.

Many of the common Node frameworks, like Express, provide an abstraction layer that allows you to more easily access POST data.  However, if you are rolling your own web server in Node, you will need to handle this with your own code.  The example below will allow you to do so.

var http = require('http');
var querystring = require('querystring');

function receivePost(request, response, callback) {
    var queryData = "";
    if(typeof callback !== 'function') return null;
    request.on('data', function(data) {
         queryData += data;
         if(queryData.length > 6e6) { // limit uploaded data to 6M
             queryData = "";
             response.writeHead(413, {'Content-Type': 'text/plain'}).end();
              // Kill connection if over 6M of data received

    request.on('end', function() {
        // Parse the final result and save as request.post
        request.post = querystring.parse(queryData);

http.createServer(function(request, response) {
    if(request.method == 'POST') {
        receivePost(request, response, function() {
            // This section is where you would process the result of receivePost

            response.writeHead(200, "OK", {'Content-Type': 'text/plain'});
    } else {
        response.writeHead(200, "OK", {'Content-Type': 'text/plain'});


Wherever you are handling POST requests, just simply pass the request and response fields to receivePost.  This function will collect the incoming data, and it to a working variable, and insure that it does not exceed 6MB of data (easily changed if you want to allow more or less).  When it returns, request.post will contain the POST data object that you can then manipulate and process as required.

Moen shower faucet provides no cold water, only hot


A common issue with older Moen shower faucets is only cold, or only hot water coming out of the faucet or shower head.  This often happens with showers that are not used very often, or where the water supply is particularly hard or has high levels of contaminants.  If you search the web for help, the most often suggest is to replace the main cartridge (part number Moen 1225 or 1200).  However, this is most likely not the source of the issue.

If you remove the shower faucet knob, and remove the cover behind it, you should see something like the image below.  This is a Moentrol 3570 valve, there are other similar model numbers.


Within the valve is what is called a balancing spool.  This balancing spool valve contains a piston which moves back and forth maintaining a given temperature even if the pressure on the cold side is reduced, for example someone flushes a toilet when the shower is in use.  It prevents a sudden blast of hot water which can lead to burns.  When you suddenly experience only the cold or hot water flowing regardless of where you set the flow handle, this valve is almost always the culprit.

The piston which is inside the balancing spool will get stuck in one position or the other.  When this happens, it essentially shuts off flow to either the hot or cold side.  Poor water quality and age will eventually cause the piston to get stuck in its bore.   The balancing spool (part number Moen 1423) can be seen clearly in the photo below.

moentrol valve

The first step in repairing the balancing spool valve is to remove it.  You will need to use a VERY large screw driver to unscrew the valve (number 2 above).  Make sure you shut off your water first!  You can also use a straight-edge piece of metal clamped in vice grips if you do not have a large enough screw driver.  Spray the outside of the screw with Liquid Wrench or other penetrating oil in advance of your attempt, it can be difficult to loosen.  If you are lucky, the valve will come out with the screw.  But, most likely the top of the spool will separate, like in the photo below.


If this happens, you will need to retrieve the stuck piece.  The way that I accomplished this was to soak it in Liquid Wrench for an hour before my attempt.  I inserted a screw driver down into the piston and tried to lever it out, tapping with a hammer at the same time.  I then bent a piece of metal rod into a hook shape and fished it inside and caught it against one of the holes in the body of the spool.  Using a pair of vice grips I pulled until it came loose.  This may take some work, so be patient.

Once removed you have two options, replace with a new one, which is not cheap, retail price is between $55-95.00.  Or, you can usually successfully clean the spool.  To do this, remove the round piece of metal at the back of the valve (seen above).  Just slip a small screw driver into the gap and twist it out.  Then tap the piston out of the bore.  I used a socket to support the back of the spool, and used a hammer and screw driver to tap it out.

Next, you want to use fine sandpaper to clean off the piston journals, and the inside of the bore of the valve.  Get aggressive, you want the bore and journals to be polished clean.  Work the piston back and forth in the bore until there is absolutely no sticking or binding.  Then apply plumbers grease and reassemble.  Turn the water back on and test the faucet, you should now have hot and cold water, and just saved yourself a couple hundred dollar repair bill.

Whirlpool Duet Dryer GEW9250PW1 will not turn on, no lights displayed on control panel.

cute girl doing laundry

I have a Whirlpool Duet GEW9250PW1 that recently began to act up.  The symptoms were multiple, however the basic problem is that after running for a short period of time, the dryer would turn off and the control panel was no longer working.  It was not possible to turn it on.  This would happen randomly, although steadily got worse.  If I unplugged the dryer and tried again the next day, it would magically return to normal and work for some period of time before the problem returned.

Other internet stories have reported related symptoms, such as flickering or dim LED’s, various switches not working, only some cycles operational, etc.  All of these problems can usually be traced back to a flaky control panel (user interface).

This dryer is very similar to other Whirlpool models, such as the GEW 9200L and other Kenmore and Bosch models like the HE3.  They all share many common parts.  The following repair will often work on these models as well.

After a quick look around several of the appliance repair sites, the common suggestion is to replace part number AP3775548 (8546219) which is the control board.   This board controls all of the dryers operations, and the electronic control panel (also known as the touch pad user interface) plugs into it.  In general, if the dryer works, but the user interface responds only intermittently, then this control board is almost never the problem.  The core issue is the control panel, part number AP3775978 (8558753, 8530590, 8530589, 3980189, W10838692, 3979789, 1060819, AH973834, EA973834, PS973834)


Further research shows that the control panel has two common issues, the first is that the small micro-switches get small amounts of corrosion within them and only operate sporadically if at all.  The second issue is caused by the large number of LED’s that are used on the user interface.  These LED’s are not only used to provide feedback on what selections were made, they are also cleverly used to help multiplex the required signals back to the control board.  These LED’s are very susceptible to having poor soldered connections on the back of the control panel circuit board.


So, how to fix it?  It is actually fairly easy.  Refer to the Repair Manual for more detail on removing parts.

  1. Remove the top cover of the dryer (three screws in back)
  2. Remove the control panel.
  3. Separate the electronic control from the control panel via various clips
  4. Remove the plastic switches from the front of the panel.
  5. Clean switches and both circuit boards with CRC electronic cleaner (or similar)
  6. Carefully resolder EVERY LED connection on the back of the board (pictured above).  I also resoldered some of the switch contacts that looked suspect.
  7. Reassemble dryer.

If successful, you will now have a dryer that turns on when the On button is pressed!



Whirlpool Duet Washer GHW9400pw4 F06 error code

washer broken girl

My Whirlpool Duet Washer recently started acting up on me.  The washer would start a cycle, however during the cycle, the washer would stop, emit several loud repeated beeps and display F06 on the control panel.  Often, I could unplug the washer, wait an hour or so, and then after restarting the cycle, it would run to completion.  I began to notice that this only would happen during the summer when the temperature in the house was higher than normal.  In addition, it would happen more often when I had a very large load of laundry.

I begin to research what the issue could be.  First I downloaded the Repair Manual and ran the diagnostics.  These always completed successfully.  I than read reports that the MCU (Motor Control Board) can cause this issue.  It would seem that the unit overheats, or has poor solder joints that open when hot.  To test that theory, I removed the lower kick panel and placed a fan in front of the MCU.  I was able to run the washer for several months this way, it turned out to be a good short-term solution, and confirmed that the MCU was the culprit.

Eventually, this trick was no longer successful, and the dreaded F06 error returned.  I was able to buy a replacement MCU, part number W10756692 (also 461970300683) which is used in many Whirlpool Duet Washer models such as the GHW9100lw1 and other Kenmore and Bosch washers.  The retail price is usually around $250 new, but I found a used MCU on Ebay for $50.

whirlpool duet MCU W10756692

Replacement is simple, remove the lower kick panel.  Detach the MCU after unplugging the five electrical connectors, and reassemble with the new MCU.  Always remember to unplug the washer before attempting this repair!

With a new MCU, you should find that your Whirlpool Duet once again works like new.

How to proxy web sockets using Apache 2.14 and Node


I have an application that I am working on that requires the use of socket.io.  In most implementations, folks are using Node.JS to provide API access on the server-side.   However, many of us still use Apache for serving up static content, and using Node as the API server, facilitating this by using Apache’s proxy capability (mod-proxy).

However, when using the socket.io library, it becomes quickly apparent that a straight-forward proxy will not work.  If you watch how socket.io connects, it connects to a single URL, both using http polling, and then attempting to switch to web sockets if possible, using parameters passed on the query string to control this behavior.

websocket meme

In our implementation, we configure the client to use a specific socket path, which we can filter on in our proxy configuration.  As a bonus, we can also use this socket path to load-balance web socket traffic if required.

Socket.io setup in client side JavaScript.

var socketpath = ‘/chat_api/socket.io’;
var url = ‘/’;

socket = io.connect(url, {
path: socketpath

In the Apache config file, we configure ProxyPass to pass all normal http traffic to the node server, API calls (/api) going to one Node port, and Chat API calls (/chat_api)going to another port.  Our rewrite condition specifically looks for web socket traffic by matching the query parameter transport as matching websocket.  In this case, we do a Rewrite to ws:// node chat server.

Apache http.conf

RewriteEngine On

RewriteCond %{REQUEST_URI} ^/chat_api/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule “^/chat_api/socket.io” “ws://localhost:4001/socket.io/” [P,L]

ProxyPass /api http://localhost:4000/api
ProxyPassReverse /api http://localhost:4000/api

ProxyPass /chat_api http://localhost:4001
ProxyPassReverse /chat_api http://localhost:4001

In my limited testing, I was ONLY able to get this to reliably work using Apache 2.4.16.  I believe that this is due to a bug in earlier versions that will not allow you to redirect to a web socket  (ws://).   I was forced to compile and install the most recent version available when I wrote this.

One of the most often recommended solutions is to attempt to use proxy_wstunnel and back-port it to an older version of Apache.  I tried this method, and was unsuccessful in getting a stable configuration.  Your milage may vary…