Monday, December 30, 2013

Blast Etching Pelican Cases


A short video covering the blast etching process I used on a Pelican 1750 and 1400 case.


Sunday, December 15, 2013

Sunday, November 17, 2013

Tormach PCNC 1100 - Comments on Delivery and Setup




A few comments on Tormach PCNC 1100 delivery and setup with some special notes on getting the machine down a sloped driveway.  


Sunday, November 10, 2013

Spray Cans - Composition, Function and Safety

I made a short video going over a few points about spray cans; how they work and some safety issues. A couple of lesser know items are reviewed such as FDA not regulating cosmetic products. 



Sunday, July 28, 2013

What is a Software Engineer?


Suppose you asked someone what they did for a living and they said, "I am a hammer". You might find this strange. You might also find it strange for them to say, "I am a table saw". However it would be quite normal for them to answer saying, "I am a carpenter". 

Far to often we confuse our proficiencies with the tools of our trade with our actual profession. This is not a good outlook. I use the tool not the other way around. I am not the programming language I am the software engineer. 

So why bring this topic up? Because anyone who believes they are defined by the skills they have in their tools will be limited by those tools. Remember this when you get the chance to learn something new.

Wednesday, July 17, 2013

Restarting old software projects

We do not always get to pick the project we work on
Sometimes a company will halt all development on a project only to restart it at a later (sometimes much later) date. The reasons for this are many and varied but there are a few things to keep in mind which might help you if you ever have to restart an old project.

Find all of the resources involved with the old project. 

This would obviously include the source for the project. It also includes build scripts, tests, requirements docs, and any other support files.
In addition to the files which make up the project it is useful if you can find the systems which were involved in previous development such as build servers and developer workstations. Some parts of the project may not have made it into source control or it may have an unexpected prerequisite to build or run. These may be identified by examining the old build/dev boxes.
You may also try to track down any email chains involving the project. Even if all of the people involved in the original project are gone the company may have kept an archive of their inboxs in case they needed to be referenced for just this purpose.

Determine the state of the project

Once you have all the bits of the project together it is time to determine where the project was when it stopped. This will accomplish a couple of things. First it will help you and those who want to restart the project determine if the restart is actually worth the time. Second it will keep you from accidentally rewriting functionality which is already present but not immediately obvious. 

Setup or create a build process

If the project has a set of build scripts or some manner of build process it should be reinstated on a nightly or continuous integration build machine. If not then a process should be created.
If this is an internal tool then it should copy its binaries (or other end user useful bits) to a build repository. If this project has installers or some other more involved deployment system then these deliverables should be built as part of the build process and copied out to your build repository.
A build created on a dev workstation should only be used by a dev. Only those builds created by a build server (which should be labeling the builds) should be distributed, handed to QA, or shipped to customers. Adhereing to this rule will prevent one off and otherwise unrepeatable builds from entering the wild. 

Are there unit tests for any part of this project?

If you should be so lucky then these are the next items up to reinstate. Tests will help give you an idea of how the various parts of the project are supposed to work (or expected to break) as intended by those who wrote them. They can also catch fatal flaws you might introduce in the future due to a lack of knowledge of how a particular component is intended to be used.

Deploy a build for QA

Using the output of your now functioning build process deploy an instance of this project and the test it. Validate the current level of functionality of the project. If you have a bug tracking system which has records for this old project then check any obvious issues against any open defects.
The goal of this step is two fold. First is to ensure the project is still in sync with any requirements documents and bug tracking systems you may have. Second is to survey for yourself the true current state of the project with a build and deployment which you can now reproduce.
A quick note about build reproducibility. You should always ensure your build process can exactly recreate any arbitrary build which has come before. There are several insidious things which could prevent this ability with the simplest example being files not under source control (possibly some infrequently modified data files or libraries). Should a defect be introduced into files not under source control this defect will effect all new builds including those of older versions or on branches.

Validate the restart of the project

This point may arise earlier based on what you find along the way, if not then now is the time to consider whether restarting the project is worth it. 
It may turn out the project doesn't actually do what project management thought it did. Or perhaps it does do what project management thought but is at a lower level of development than expected. A great number or severity of defects may also make the project a non starter. The project may have some big external dependency which is difficult to support or expensive to license. Even if none of the previous apply it may be difficult to add the new features project management wants to the project given the way it has been designed and built. 

The last and possibly most important point

If the objective of restarting an old project is to add some small feature to an old but operational deployment you may be tempted to just make the change to the source, build on your local system, and manually update the binaries on the production system. This is very bad idea. 
If you successfully pull off the update, then all is well. If, however, there are complications it will be very difficult to determine if the issue is caused directly by your update, indirectly through its interaction with other parts of the system, or if your update had nothing to do with the new issue at all. Additionally if you made a manual update to a system which is normally deployed via an installer you have now created a deployment which you may not be able to reproduce thereby making QA by another group virtually impossible. 

Thursday, July 11, 2013

Engine\Shop cranes and their unexpected uses

Parts and Operation

Crane Parts

There are not many parts to these cranes and assembly is simple (with the exceptions noted below). These cranes have a simple frame with arms which fold up for storage. A hydraulic ram supplies the mechanical advantage necessary to lift the load. All you need to do to operate it is lower the arms, attache your load, close the hydraulic valve and pump the ram. When you are ready to lower the load just (slowly) open the valve.

Notes on Assembly

The assembly instructions for these types of shop cranes indicate the mast is to be attached before the stanchions. In some cases you may find if you follow these instructions the stanchions's holes will not line up with the mast and the base. I believe in these cases the stanchions are intended to be preloaded by the mast. Just loosen the bolts holding the mast to the base, attach the stanchions, and then tighten the mast bolts.

Lifting stuff


engine crane lifting a washing machine
Here an engine crane is being used to lift a washing machine. I was not feeling all that well the day I needed to move this. So I opted for a reduced stress method of getting this washing machine into the back of a truck.

Lifting with these cranes it not complex but there are a few things to be aware of.

The crane even without a load is quite hefty weighing in at upwards of 150lbs.

Since normal rope can lift significant loads and is readily available it is a nice solution for lifting things around the house. While convenient rope can stretch quite a bit when loaded. If you lift with rope be certain to take this into account, otherwise you may discover you cannot lift to the height you need because the line has stretched too much.

The load you are lifting must have its center of mass inside of the footprint of the crane. Otherwise the crane will be tip over.

The orientation of the load may change as it is lifted. You may discover as you raise the load your attachment points are not in as ideal a position as you would like. This is why it is important to inspect the load as it is being raised. The sooner the issue is found the shorter the distance you will have to lower it back down.

If you are moving things inside the house be aware of the load at the wheels of your crane. When the arms are down the wheels at the front of the base are not used (they are off the ground).

Top: arms up. Bottom: arms down (not the floating wheels)

This means the weight of the load (and the crane) is distributed on 4 wheels. If the floor is not level you will be on 3 wheels. Some interior floors may not react well to the pressures the wheels of the lift will put on them.

Sunday, June 30, 2013

Tuesday, June 25, 2013

Safety first... and second, and probably third



my injured lineman's tool
So I was working in the garage installing new lights. I had verified the circuit breaker responsible for powering the circuit I would be wiring the new lights into, no problems here. Before I got around to installing the lights I realized I had other work to take care of first. So I turned the breaker back on as it was also powering outlets I needed, no problems here either.

After I was done with the sidetracking work I turned the breaker back off in preparation for wiring the lights up, no problems here either. Using my lineman's tool I then cut the Romex line I would be reworking to run my new lights... problems.

Immediately I had lights, not of the useful overhead lighting kind, along with the popping and hissing noises which accompany shorting a live wire. I was also working on a ladder, which in this case functioned as an unnecessary excitement multiplier, which I ungracefully abandoned. The wire was roasted and my tool now had a notch of metal blasted out by the short circuit arc.

closeup showing missing metal


But the circuit breaker was off. Why was there still power?

Simple. I had turned off the wrong circuit breaker. The breaker I shut off did not have any visual manifestations which would indicate I had gotten the wrong one. So I proceeded with my work. The error was not verifying the power was off at the place and time of the work. Had I checked the line right before starting work again (I had several tools which would do this for me) I would have caught the problem.

Instead I am down one pair of pliers. A small price considering other possible outcomes.

Sunday, June 2, 2013

When you have the wrong size heat shrink tubing

The Task

This combination headphone/microphone line has a break in its outer casing.
The broken casing
This causes the wire the catch on things. While the electrical connections are still good this condition is an inconvenience and needed to be repaired.

The Solution

Heat shrink tubing is perfect for this issue, expect I did not have a size of tubing on hand which would fit over the end connections of this wire and shrink down to a size necessary to grip the line.
The line could be cut and the tubing slid over it but this would entail reconnecting 4 electric lines and that is just a hassle.
I opted to use a larger diameter tubing and the build up the area to be covered with electrical tape. The tape alone would not be the best solution for this issue as unprotected it is likely to unravel.

Line prior to shrinking

After the line was taped the tubing was placed and heated. Ideally I would have used white tubing to match the line but this was all I could find without the trouble of ordering more.

The finished line

Friday, May 10, 2013

Ultrasonic cleaners

an ultrasonic cleaner
Ultrasonic cleaners function by bombarding items with sound whose frequency is beyond the range of human hearing. A discussion of the specific mechanism of cleaning is complex and beyond the intent of this post. What follows are some pointers when using a simple ultrasonic cleaner.

Overview

Ultrasonic cleaners will impart their cleaning action to the objects submerged (normally in water) inside them. As such you will only be able to effectively clean items which will fit inside the cleaner. Items with unusual aspect ratios (such as rifle barrels) will likely require a more specialized unit as their shape will not be as common.

Some units will also have heaters for heating the cleaning solution. This is an excellent feature and greatly accelerates the cleaning process. The unit pictured at the top of this page will heat the cleaning solution to about 176F (80C). For comparison most residential water heaters will heat your hot water supply to 120-140F. If you use the heating function some of the cleaning solution may evaporate from the unit and condense on the inside of the lid. Thus care should be taken when removing the lid especially if the condensate may contain corrosives (more on this later).

Cleaners will generally come with some type of wire basket for adding and removing items without getting your hands in the cleaning solution. In addition larger units will have a drain valve for emptying the cleaning solution when it becomes fouled or unusable.

cleaner interior

Usage

Simply place the items inside the cleaner, then turn it on or set the timer. The unit does not need supervision. Certain types of items are more easily cleaned in these cleaners than by other methods. Objects having intricate shape or edges cleaning brushes could get caught on are good candidates for ultrasonic cleaning.
electric razor blade assemblies are easily cleaned in an ultrasonic cleaner
Often cleaning will be more effective if some type of solvent is added to the water to form a more effective cleaning solution. What you can use in your cleaner will depend on what it was designed for. Most cleaners can be used with household detergents.

cleaner drain valve
More corrosive/awesome cleaners like sodium hydroxide should only be used if the unit is intended for use with them. Even if your cleaner is constructed of a metal body resistant to attack by corrosives (like stainless steel) other components, like the drain valve seals, may not be. In addition a single successful use of a cleaner with a powerful solvent does not indicate the unit is not suffering damage. While not immediately destroying the unit some substances may greatly reduce its working lifespan.

Ultrasonic cleaners come in a variety of sizes and prices. The one picture in the article runs about $400. Other smaller units can be less expensive but may not come with a heating function.

Wednesday, May 8, 2013

'Exception' does not denote 'Infrequent Occurrence”



NOTE: this will generally pertain to C# but applies to any programming language which uses similar exception handling (for example Java). This article covers a few misconceptions about exceptions and is not intended as a complete reference. In depth study of this important programming aspect is highly recommended. 

Overview

The exceptions a method throws are as important as its parameters or return value. They are part of your contract with the user, even if you are not required to declare them as part of your method definitions (as you are in Java). Too often methods are completely written before any thought is given to the exceptions it should throw. This unfortunate behavior leads to a less than ideal interface for the user.

Many developers believe, and in many cases are taught, exceptions exist to handle rare or infrequent conditions encountered during execution. The truth is as developers we have no control over the circumstances our code is used in beyond the compiler enforcing the existence of our parameters. As such we can never say what the frequency of any use case may be. Thus we can never say if any given case is rare or common.

Usage

The correct use of exceptions is to convey our inability to keep our contract with the user as defined by our method signature. Let us consider the following method signature from the Int32 type:

public static int Parse(string s)

This method takes a string representation of an integer and returns its integer representation. Viewing the documentation reveals it throws the following exceptions:

ArgumentNullException – thrown when s is null.
FormatException – thrown when s cannot be converted to an int.
OverflowException – thrown when the representation of s is beyond the capacity of an Int32 to represent.

Each of these exceptions represents a condition which prevents the method from honoring its contract, returning an integer representation of the string parameter, to the user. There is a different exception for each semantically meaningful mode of failure. That is to say each exception represents a different reason the conversion failed giving the caller the ability to make a meaningful decision about how to proceed. The OverflowException can represent failure due to either a value above or below what can be represented by an Int32. As the user would not take different actions based on whether the value is too big or too small we have just one exception to represent both instead of an OverflowHighException and an OverflowLowException.

Example

Using these ideas let us design our own method. Let us suppose we have a type which represents a temperature probe. We might start by writing a class method with the signature:

public float GetTemperature()

[Note: normally we would use a property here but for demonstration purposes we will make this a method. Also, interestingly enough, the CLR doesn't know about properties so C# converts them into methods during compilation]

What exceptions should this method throw? Anything which violates our contract with the user should be represented by an exception. In this case any condition which would prevent us from returning a temperature will need an exception. We could start with the following:

TemperatureProbeNotAvailableException – thrown if our connection to the probe is lost.
TemperatureOffScaleException – thrown if the probe provides a value beyond what its specification states it can accurately measure. 

Previously when considering the Parse method we said there was no need to have multiple exceptions to represent the high and low possibilities for the OverflowException. Here we also have a single exception to represent an out of range condition. Considering further is there any action our users might wish to take based on whether the temperature probe is off scale high vs low? In this case there is.

If the probe were attached to a heating or cooling system knowing which direction the temperature is off scale would be very meaningful information. For a more awesome example let us say this was a very high temperature probe in the exhaust of a gas turbine engine. Many such probes do not operate correctly until they reach a minimum temperature well above normal ambient. An off scale low condition might be normal while the engine was offline or idle but an off scale high might indicate the engine was running beyond specification and should be throttled down.

Since the direction of the off scale condition is potentially meaningful to the user we should provide exceptions for these conditions.

public class TemperatureOffScaleHighException : TemperatureOffScaleException
public class TemperatureOffScaleLowException : TemperatureOffScaleException

Though the off scale direction of the temperature probe could be useful to the user this might not always be the case. By extending the high and low exceptions from the TemperatureOffScaleException we give the user a choice  If they do not care about the direction of the off scale condition they can choose to catch the base TemperatureOffScaleException. Otherwise if they have code to handle the high and low conditions differently they may catch these derived exceptions in separate catch blocks and deal with them as they see fit.

Aren't Exceptions Time Expensive?

Depending on the environment the throwing of exceptions can be time expensive, especially if they repeatedly do so in tight loops. The previously mentioned Int32 type addresses this with the TryParse method. 

public static bool TryParse(string s, out int result)

This method does not throw a FormatException. Instead if will return a boolean indicating if the conversion was successful and if so it will provide the converted value via the result out parameter. By using a boolean instead of an exception this call avoids the cost associated with handling an exception.

Does this method keep its contract with its user? Yes it does.
Whereas the Parse method implies by its signature it will return a converted value TryParse implies it will attempt a conversion. This distinction in naming is important in creating an API your users will be able to easily understand.
A simple look through the FCL will demonstrate the occurrence of TryX is very limited. While the TryX methods seem to match the X method in capacity and excel it in speed it fails in code simplicity. The code necessary to support the TryX method is more cumbersome than the a simple X method.

Conclusion

There are various opinions about the role of exceptions and how they are used. What I would like to convey here is exceptions are an important yet overlooked aspect of development in environments which support them. A more in depth study than what is presented here is recommended though simply considering them at the outset of development instead of as a postscript will help in API design. 








Monday, May 6, 2013

Dealing with partially lighting gas burners

The patient needing attention
The above is my stove. It is an old stove. I think I have used this stove once in five years. I don't really care much about the stove. Unfortunately someone recently pointed out to me the burners on the stove do not light correctly. So in accordance with my 'fix ALL the things' policy it was torn apart until fixed or destroyed, whichever came first. Mercifully this ended in a fixing and what follows is what I discovered.

Overview and Operation


stove with the top removed
Opening the top of this stove is as simple as lifting the top from the front. Once raised the top can be slide off of its hinges exposing the amazingly primitive bits underneath. The gas line comes in from the upper left and travels down the left side to (what I think is) a regulator, a flame arrester, or both. This gas line then takes a 90 degree bend and forms the main fuel rail at the front of the stove.
Each of the four knobs for the burners and the one for the oven all open valves off of this line to supply fuel to their respective elements. When you turn on a burner fuel travels down its supply line, pulls some air in (more on this later), and fills the burner element. Turning the knob on also starts the igniters located in between the burners which share it (both igniters fire regardless of which burner you are lighting).


closeup of the ignition flame ports
Each burner has a set of flame ignition ports on the side facing its igniter. Fuel from these ports travels down a hollow tube to the igniter. Once lit the flame travels up the tube to the ports on the burner. From here the flame travels up to the closest main burner ports and then around until all of the element is lit. 

Problems and how to clean them

Assuming your ingiters are working (you can hear if they are firing and if they are not you have an issue which will not be covered here) the most likely cause of the burner either failing to light or not lighting completely is ash build up in the flame ports. To fix this you simply need to remove and clean the burner element. For my stove the elements can be removed without tools. 

Start by removing the spring clip for the burner. Then rotate the burner until it is free of its supports and then slide it off of its fuel nozzle  With the element free simply clean it with a stiff brush then blast some compressed air through the gas inlet. When cleaning the burner don't forget to clean the vertical ignition ports on the side in addition to the horizontal main ports at the top. Do not use any tools which could change the shape of the flame ports. Marring the ports on your burner will give you other issues not addressable with cleaning. You will want to use the compressed air outside as it can blast a surprising amount of ash out of the burner. 

Elements can acquire a good deal of grease and other nastiness on them over time. Unless the offending matter is blocking a port it is not necessary to remove it. If you do choose to do a deep cleaning of a burner remember it must be completely rinsed and dry before it is re-installed.

Why is there a slot in the fuel line?

air induction port
These port are intentional. All combustion requires fuel (in this case natural gas) and an oxidizer (normal air). When gas passes through this segment of tubing it creates an area of low pressure around this port (via venturi effect) and pulls in the surrounding air. This fuel air mix is delivered to the burner for combustion. 

Normally these ports are too far from any opening in the stove top to get dirty so you likely will not need to clean them. Just be aware of them when working on the stove as anything blocking or interfering with them will cause issues. 





Monday, April 15, 2013

Going Tankless


NOTE: this will be a discussion of fuel based tankless units. Electric units are available but due to the cost of electricity and the massive wiring issues involved with installing one I will not be addressing them here.

Tankless water heaters have been used for many years in other parts of the world but are only recently becoming a more common choice for US residential homes. As the name implies these devices provide hot water without storing it in a tank. They are more energy efficient than tank based heaters but there are some things to consider before installing one.

Traditional 50 Gallon Natural Gas Water Heater


Why tanks were used in the first place

Water has a very high specific heat. This means you need a lot of energy to make its temperature increase. As a comparison the amount of energy needed to raise the temperature of water 60 degrees would raise the temperature of the same weight of aluminum by 279 degrees. This makes water an excellent coolant but also very difficult to make ready for use in showers and dishwashers.
So the tank based water heater was created. These devices store a large amounts of water and heat it up over time. Since you don't have to heat the water all at once you can use a more modest electric heater or gas burner.
When water is needed you use some from the heated tank. The tank is constantly supplied new cold water to replace the hot water used which is then slowly heated for use.

Tanks have two major issues

First. The tank based water heater cannot heat its supply of water as fast as it will be used in the building. This is why it has the tank, to supply a buffer of hot water so it has time to heat up more. If the usage in the building exceeds the buffer (the water in the tank) then your hot water supply temperature will decrease as the new cold water entering the tank, to replace the hot water used, has not had time to be heated. Most tank based water heaters are rated by there capacity in gallons (the buffer size) and their recovery time (how long it takes to get the buffer back up to temperature).

Second. When you are not using any hot water the tank sits idle. This doesn't seem like an issue but it is a big energy inefficiency with tank based water heaters. Any time you have something hot sitting in a cool room the heat from the hot object will diffuse into the surrounding room until both are the same temperature. This means the hot water in the tank is constantly loosing its heat to its surroundings (assuming they are cooler) over time. Once the temperature of the water in the tank falls to a certain point its heater will fire to heat it back up. The energy needed to keep the water in the tank warm when no hot water is being used is called stand-by loss.

Manufactures of tank based water heaters try to minimize stand-by losses by slowing the rate at which heat escapes the tank. This is normally done by insulating the tank. This is also why older tanks can benefit from having an insulating 'blanket' placed around them.



Why tankless units are more efficient and awesome


Tankless Water Heater 

Since tankless heaters have no tank, they have no stand-by losses.
In addition tankless units can be built with high efficiency heat exchangers which extract more energy from the burning fuel and place it into the water instead of exhausting it to the atmosphere as hot gas. Some high efficiency units have exhaust gas temperature of less than 120F (this leads to condensate issues discussed later).

Since the water is heated in real time the tankless unit can provide hot water so long as you have water to heat and fuel to burn. Tankless systems are rated by the temperature rise they can sustain at a given flow rate. An example might be +40F at 9.3 gallons/minute.

Many tankless systems use electronics to monitor the flow of hot water out of the system. These same electronic may also be used to detect slow leaks in the hot water system. Once detected the system displays an error and shuts a computer controlled valve stopping all hot water flow.

The components of a tankless water heater are serviceable and replaceable. Generally only the burner of a tank based system is ever replaced. Replacement parts for tankless systems include the heat exchangers, electronics and various valve assemblies.

There are some downsides

Since the water is heated in real time the unit will need a lot of fuel. This fuel will be used very efficiently and only when needed but it is still quite a lot. A three or four bathroom house might use a 50 gallon tank based water heater with a heater rated at 40kBTU or a tankless rated at 200kBTU. Because of this need for great quantities of fuel a tankless unit may require larger fuel lines not available where an old tank unit was located. 

Many tankless models use electronics to provide very tight control on the temperature of the out going water. This means you will need a standard electrical outlet in close proximity to the new unit whereas most tank models have no such requirement.

Going tankless will involve a good bit of labor. Tanks rest on the floor and have their water inlet, water outlet, and temperature and pressure relief valves on the top while tankless units attach to the wall and have their water inlet, water outlet, and T&P relief valve on the bottom. So you can expect a fair bit of water line rerouting to get a tankless to take the place of a tank unit.

High efficiency models will produce condensate. In low efficiency heaters combustion waste products ride the hot exhaust gas leaving the unit and exit to the atmosphere. More efficient units produce exhaust gas at a temperature so low some of the combustion products will condense (like dew) and drain from the unit. This condensate is corrosive and local codes will dictate what may be done with it but at the very minimum you likely need more more piping to deal with it.

The bottom line

In my case the tankless unit cost $1150 and comes with a 12 year warranty on its heat exchanger. A comparable tank system would run about $600. At the current price of natural gas in my region the unit will save around $1000 in fuel cost over its warranted lifetime. This more than compensates for the up front cost of the unit but we have not yet considered installation costs.
My unit was installed for $1400. Other vendors in the area quoted as much as $2900. This does not include the cost of the unit just the cost to install it. In my case all of the prerequisites were met such as proximity to an exterior wall, gas supply, and an electrical connection. Even so the tankless unit could not make use of the existing flue duct nor the condensate lines from the AC units which already ran though the exterior wall (both of these restrictions are mentioned in the owners manual for the unit). So even in near ideal conditions there is likely to be a lot of work if you are replacing an old tank unit. Installation took a single technician about 7 hours to complete.

Despite the various advantages of a tankless water heater the economics of installing one may prove to be complicated when all costs are factored. Even if it proves to be a money saving decision it will likely be a long term savings.  

Sunday, April 14, 2013

Suspended Ceilings are Awesome

A drywall ceiling

The above is a conventional drywall ceiling. It consists of sheets of drywall screwed directly into the joists of the floor above. This is the most common type of ceiling seen in residential homes and apartments.


Traditional suspended ceiling

This is a suspended ceiling or drop ceiling. It is made of metal railings which form a grid suspended from the joists above by wire (between 18 and 12 gauge) with panels filling the square or rectangular spaces. This image also shows a fluorescent troffer, the most common lighting used in such ceilings. These shallow light fixtures normally hold 2 or 4 florescent tubes whose length is either 24 or 48 inches depending on whether the opening the in grid is 1 or 2 panels wide respectively. The panels used are flat, white, and have a bit of small scale texture to them. These ceilings are commonly found in commercial structures as they are not very attractive but provide good access to the mechanical systems which run through the ceiling.

Awesomeness++ suspended ceiling
This is another, much more awesome, suspended ceiling. Here the panels are beveled so they sit proud of the grid plane. They also have a much larger scale texture which in this case gives the appearance of naturally cloven and weathered stone.
This room makes use of indirect lighting above the bookshelves so there are no light fixtures in the ceiling. The white ports shown are vents attached to the HVAC system ducting. Other options for lighting are also available for these ceilings.

Suspended ceiling with can lights
Above we have another ceiling making use of can lights. These are the kind of lights you commonly see recessed into drywall ceilings. These lights can also be used in suspended ceilings. In fact the standard can lights sold at you local home center may be install into either a drywall or suspended ceiling.

Why don't more people have suspended ceilings?


People think they are ugly.

Most people associate suspended ceilings with the dull ultra utilitarian ceilings they see in their offices. This prejudice is so intense those who see an excellent suspended ceiling will not even recognize that it is a suspended ceiling. This prevents them from acquiring counter examples to their experience.

Houses do not commonly come with them.

Installing a suspended ceiling in existing construction requires removing the existing drywall ceiling. This is a very messy process. It generates a tremendous amount of fine dust and even a small room will have so much drywall you will want to either hire someone to remove it or rent a dumpster.

It is expensive per square foot. 

While you will spend less on labor to install a suspended ceiling compared to a drywall ceiling you will spend a lot more on materials. Drywall is cheap but ceiling tiles are not. Expect to spend at least triple (or more) on suspended ceiling materials compared to a drywall ceiling.

You will loose some ceiling height. 

Four to six inches is the minimum distance you want between the joists and the grid of the suspended ceiling. Any less and it will be hard to place the tiles. Since drywall ceilings are attached directly to the joists this is ceiling height you will loose from the room. Recessed lights, or can lights, are taller than six inches but are normally installed between joists so their use will not force the ceiling lower. Other type of lights may so advanced planning is important.

Some of the benefits of a suspended ceiling over a drywall
ceiling.


Provides access to the space above the ceiling.

This is very important if you ever have plumbing leaks, electrical problems, need to run new cables (security camera, home theater, networking), or want to remodel. Most contractors which provide these services do not work with drywall. Thus if their work requires making holes in your ceiling (which is very often does) they will either get a subcontractor to do the work or leave it to the homeowner to fix. Drywall work is slow and requires repeated layering, drying, and sanding of drywall compound. This makes it expensive.

The tiles are removable, replaceable, and paintable.

If a tile is damaged, perhaps by gouging it with something you were not careful enough in moving, it can be easily removed and replaced.
The tiles are also easily painted with aerosol (spray) paints. Many restaurants and hotels use suspended ceilings with the tiles and grid painted in combination with crown molding to match their decor. The grid is a bit more troublesome to paint since the existing hard coating needs to be roughed up and is not normally removable once installed.

A huge variety of tiles are available.

Everything from the standard white tile to tiles made to look like stone is available. Some specialty manufactures even make metallic tiles to look like hammered tin or brass, fine cast plaster tiles, or luminescent tiles. 


In the end if you are unable to get an awesome ceiling using a suspended ceiling system then you are doing it wrong.  


Tuesday, March 19, 2013

Degassing Epoxy


People who saw the vacuum chamber video were disappointing I did not actually use the chamber in the video. This should correct that issue. Here I am using my vacuum chamber to degas a small amount of West System epoxy.


Sunday, March 3, 2013

DIY Vacuum Chamber Setup


The will be my first video post. In this short clip I explain how my put together my vacuum chamber.

Thursday, February 7, 2013

The 3 light question and its abuses

The abused 3 light question

There is a popular interview question which claims to make a candidate think 'outside the box'. It goes something like this.
Suppose there are 3 light switches. There is elsewhere a room with three light bulbs each controlled by one of the aforementioned switches. You cannot see the room from where the switches are located. How do you determine which switch operates which light bulb if you are allowed to visit the room once?
It is answered with the following.
Turn on switches 1 and 2. Wait several minutes. Turn off switch 2. Go into the room. The light which is on is controlled by switch 1. The light which is warm is switch 2 while the room temperature light is switch 3.
While the question may have value in an interview I am not fond of the way it is commonly administered. A typical session with this question might go something like what follows. You can skip this next (somewhat humorous) section if you are familiar with how this question normally runs.
Candidate: Since each light is controlled by one switch I follow the wiring from the switch to the lights.

Interviewer: The wires are covered by walls and ceilings so you can't see them. Can you think of another solution?

Candidate: I punch holes in the walls and ceilings so I can see the wires.

Interviewer: The walls and ceilings are made of a an indestructible material. Can you think of another solution?

Candidate: I set my cell phone to record video and toss it into the room. I operate each switch in order and then go into the room and review the video on the phone to determine switch order.

Interviewer: But you can only go into the room once.

Candidate: Well you said that I could only visit the room once but never mentioned my phone.

Interviewer: Ok. The room has a door which can only be opened once and shuts immediately once you leave the room never to open again.

Candidate: Hmmm. I disconnect the common wires from the switches and attach signal toners to 2 of them. I then go into the room with a probe and use it to identify which switch goes to which light.

Interviewer: A signal toner?

Candidate: Yeah its a device which transmits a modulating electrical signal over the line which can be detected by a contactless probe. I set the 2 toners to transmit different patterns from each other. The light which does not have a tone is controlled by the switch which doesn’t have a toner on it.

Interviewer: I see. Well lets say the lights and switches do not use wires which transmit electrical signals.

Candidate: Um. Isn't that is a little bizarre.

Interviewer: Can you think of another solution?

Candidate: I would switch one light and then go outside and look through a window to see which light was on. Since I haven’t visited the room I can do this for each of the switches.

Interviewer: Why do you think this room would have a window?

Candidate: Well most rooms large enough to justify three different lights on three different switches would be too big to fit wholly within the interior volume of a building and most architecture would include windows in any room with an exterior wall. Doing this also helps with fire code.

Interviewer: Well lets say for this example this room has no windows.

Candidate: Alright. I would visit the room first and carefully arrange its furniture to cast specific patterns of shadows based on which light was on.

Interviewer: But the door will close after you leave.

Candidate: That's fine. The pattern of shadows is oriented so as to be distinguishable from outside the door at ground level. I revisit the outside of the room after operating each of the switches in turn.

Interviewer: But the door is closed.

Candidate: Doors include a gap at the bottom to allow for return ventilation within a building. If the door perfectly sealed it would increase the static pressure experienced in the ducts and place undue stresses on the HVAC's fan motors. You could have return vents within the room to alleviate this but its more expensive as you need a separate set of ducting to support it.

Interviewer: Why do you think this room wouldn’t have return ducts?

Candidate: Thus far this room is sounding like a terrible place so I am betting it is in a cheaply constructed building.

Interviewer: Well lets say the room has no ducting at all and the door does indeed perfectly seal when closed.

Candidate: Really?

Interviewer: Yes really.

Candidate: <long pause>

Interviewer: Any other ideas?

Candidate: YES! I have it! I am presently engaged in a dungeon crawl in a fantastic world of magic and adventure!

Interviewer: What?

Candidate: Of course, I should have seen it sooner. Where else would you find invincible walls, automatic sealing doors, and lights which don't use electricity. This must be a challenge I have to solve before advancing. Excellent. I engage my divination powers to search for clues.

Interviewer: No! No! Magic is not the answer either. Its nothing like that.

Candidate: Combat then! You must be the boss fight. Very well I am prepared for battle.

Interviewer: No! You are supposed to use the fact the lights get hot when you run them for a few...

Candidate: SILENCE! Everyone knows magic lights produce no heat. Now, face me you fiend.

Our candidate's epic fight and acquisition of a quest item which led him to a better job is not the point.

The point is this: If you want a candidate to think outside the box do not build one around him.

Whenever the candidate gives an answer the interviewer responds by restricting the problem space to make the offered solution invalid. The box most interviewers want their candidate to think outside of is being created by the interviewer with each limit placed to reject a solution which is not the 'correct' warm light bulb solution. If you truly want to measure the breath of imaginative thinking a candidate has then you should encourage multiple solutions without restricting the problem.

For example do not say:
“You cannot use a signal toner because of <some restriction> can you think of another solution?”

Simply say:
“Can you think of a different solution?”

This allows the full set of possible solutions to be explored and prevents the interviewer's biased solution from influencing the candidate.

This is not to say restricting a problem is a bad interview practice. Even in the most broad imaginative thinking exercises some restrictions must exist to provide a context for the answer. These restrictions however should be provided as part of the question in advance and not as a shove in a predetermined direction after an answer is given.

Does this mean there is no place for invalidating a candidates answer via refinement of the question after it is asked? Is there likewise no place for questions with expected answers? No on both counts.

There is a very appropriate place for these questions. If you want to measure a candidates experience in a certain field it is perfectly fine to give a problem for which there is a common industry practice answer. If the candidate responds with a novel solution you may restrict the question to encourage the industry answer. This is done to verify the candidate is familiar with standard practices and not to evaluate creativity. Understanding the differences in the goals of these questions is key to their effective use.

As always feedback is awesome and encouraged.

Monday, January 7, 2013

Gluing things to Pelican cases

Pelican 1750 with mounted plate

This was a project for my dad. It is a Pelican 1750 case which has attached to it an aluminum plate water jet cut with his initials. Attaching the plate to the case was a bit more challenging than expected, and by 'a bit' I mean I spent almost 2 months worrying over it before I was willing to attempt it.
These Pelican cases are made of polypropylene a plastic which has, among its many properties, a low surface energy. Simply put it is hard to get things to stick to it.
In the past I tried a 2 part epoxy, which sticks to most things, on one of these cases and it did not adhere. Not only did it not adhere the cured resin detached from the case with almost no effort. It detached so easy I could have used the epoxy to make a mold of the case.
Eventually I checked the FAQ on the Pelican website (probably should have done this first) which recommended using 3M Scotch-Weld DP 8005. This product is somewhat pricy. I spent, before shipping, a bit more than $1/mL for this stuff. This turned out to be the least of my issues as the cartridge for the Scotch-Weld requires a special gun to apply which is sold separately.
Dispenser for Scotch-Weld Adhesives
But the gun is just the beginning of your woes. While the gun comes with two plungers (the upper black rods in the photo) neither of them works with the 8005 cartridge. A 10:1 plunger is required (the bottom rod) which also had to be ordered separately. In addition to the gun and the plunger you also need mixing tubes (the clear and red cylinders in the photo). This is the most vexing part. I assumed since the mixing tubes and cartridges are used in a 1:1 ratio and cannot be reused the mixing tube would come with the cartridge. Nope. They are sold separately as well. Maximum vexation achieved.
Mercifully after the scavenger hunt to get the parts it turned out to be easy to use with the only catch being the 8005 has a working time of only 3 minutes. The work area was protected with standard masking tape, the part to be attached was checked and aligned, the adhesive was laid down and then the part was placed and weight applied. It is necessary to support the lid from underneath. When pressure is applied to the plate the force distribution causes the case lid to bow underneath it. This would increase the gap underneath the middle of the plate if the underside of the case lid was not supported.
In the end it worked out well and the adhesive turns out to be rather strong. Hopefully I will have another project for which this 8005 will be necessary. I certainly spent enough on its accouterments so it would be nice to get more than one use from them.