# A big measuring tape and a right triangle

Just a good picture of Eli (with Ezra and Anna in the background) holding a 300′ measuring tape.

We needed to make a right angle, so I explained to them that a triangle with the sides

3, 4, 5

will be a 100% right triangle.  So we measured 15′, 20′, and 25′ around three stakes, and that is how we got our right angle :)

For anyone who has been out of high-school long enough to forget, the equation is:

A*A + B*B = C*C

That is…

3*3 + 4*4 = 5*5
9 + 16 = 25
25=25
True

See more about Pythagoras and his Pythagorean Theorem at Wikipedia…

# A better way to hold metal inventory

For a couple years now, my growing collection of dimensional metalic material has been piled on the end of my workbench. Not good for finding it, keeping it clean, rust free, or straight. Plus, I cannot make full use of my workbench.

Here is what 100′ of PVC pipe cut into 3′ lengths can do…

Now, I just need to build a rack for the pipe to set in, move it off my bench, and I’ll be set (for now).  Easy to expand, though.

And a great helper!

# Python: ‘tuple’ object is not callable

This can be a bit of an obscure error, if you run into it…  It looks like this:

File ".../CCRM/Content.py", line 202, in Page_Update
('Nav1'       , Data.Nav1),
TypeError: 'tuple' object is not callable

In reality, it’s typically caused by accidentally forgetting a comma from the line before:

Page_MNID = App.DB.Value('''
UPDATE
"Dashboard"."Page"
SET
[Field=Value]
WHERE True
AND "Page_MNID" = \$Page_MNID
''',
('ScriptPath' , Data.ScriptPath)
('Nav1'       , Data.Nav1),
('Nav2_Icon'  , Data.Nav2_Icon),
('Nav2_Label' , Data.Nav2_Label),
('Title'      , Data.Title),
('Active'     , Data.Active),
Page_MNID     = Data.Page_MNID,
)

Notice that line 9 is missing a comma at the end?  That causes python to see this:

tuple_object = ("ScriptPath", Data.ScriptPath")
tuple_object("Nav1" , Data.Nav1)  #eg, next tuple looks like params

Solution?  Just add the comma :)

# A square peg in a round hole?

Yep.  We are building a rough wooden table out of the trees we cut down for a clearing on our land.  Rather than use screws or nails or saws, we opted for the axe, drilling holes, and wooden pegs.

Actually, almost all of the wood pictured was cut with a Friskars Chopping Axe.  Eventually, I got tired of chopping and purchased a nice Stihl chainsaw to help out.  Regardless, the hewing and fitting is still done with the axe.

The top boards are half-logs of a maple tree.  The pegs, also, are green maple, that we squared off with a knife and pounded into 1″ holes.

# Rubber Band Gun #6 – four pieces explained

I spent a bit of time this evening taking measurements and verifications, adding pin holes, and communicating with Dixon Tool and Die about pricing, etc…

### Here are the 4 key parts in the design:

Trigger: Pivots on a 3/16″ dowel pin.  As the trigger is pulled, the two protrusions from the front move downward into the actuators.  The one side is milled out 1/16″ deeper than the other, so that the one side of the rubber band gun fires before the other.  A 2 stage trigger.

Hammer: The hammer is not a hammer in the sense that it strikes something, but only in that it resembles the hammer from a gun.  It pivots on a 3/16″ dowel pin.  At the bottom is a milled out section directly below the pivot point, providing for a linear, smooth release.  The notch and hole on the front are used to attach a spring, which provides an automatic-reset for the hammer.

Actuator: Because I couldn’t think of a better name at the time.  This is the piece which holds the hammer from being released, and also contacts the trigger, both providing a linkage to be released, as well as spring tension up on the trigger.  Since the trigger does not have a spring, it relies on the contact from this part to provide springiness.

Receiver: For simplicity, this is milled and drilled from a 1.000 x 1.500 aluminum tube with 0.125″ thick walls.  It is responsible for holding pins, which in turn hold the rest of the parts.

Well, that’s all for now.

# Rubber Band Gun #6 – springs, etc…

I visited Dixon Tool and Die, Inc. today to see about having some machining done.  Bill Dixon Jr. was very helpful, and explained many of the points that will make the process go easier.

1. Design for available parts and sizes
2. Buy everything you can stock (pins, springs, aluminum channel, etc…)
3. Minimize milling by doing the above

To that end, I did a bit of springy research, and found that neither McMaster Carr or Manhattan Supply Co. had really small springs in bulk (only precision (eg expensive) springs in those sizes).

So I re-placed one of the pins to fit a standard (cheap) McMaster spring, and got pricing from http://centuryspring.aitrk.com/products/extension.html for a special spring.  The trigger spring has ~ a 2/1 leverage (finger/spring), so we need to have several lbs of spring pull to equal a decent trigger pull.  They have a spring with these dimensions:

Part #80127
Diameter: 3/16″
Rest: 0.63″
Max Travel: 0.39″
ID of loops at ends: .132
\$1.20 each at 100

While \$1.20 is more than I wanted to pay, it sure beats \$2.00 to \$3.00 per spring that I was looking at from McMaster.

With a shorter spring, I was able to re-design the pin placement, which resulted in this:

# Rubber Band Gun #6 and Pro/Engineer Wildfire

I recently purchased a copy of Pro/Engineer Wildfire 5.0, and have been comparing it to SolidWorks. They are both nice programs, and within about a day, I have achieved about the same level of usefulness in ProE as SolidWorks. (Note: all that means is that I am a beginner at this).

Anyway, I wished to share one of the models I’m working on. This is a mechanism for a Rubber Band Gun receiver.

# An Easier Way to Blog (2)?

Now, I am trying out BlogDesk

That was pretty easy… Now, how about some source code?

#============================================================================
def Exec(self):
# We will try to catch everything and return a valid response.
# if that is not possible, a 500 will be returned.
try:
self.Open()
try:

self.Log('Coaster: ScriptPath={0}'.format(self.Env.ScriptPath), LogLevel=4)

ScriptPath = self.Env.ScriptPath
ScriptPathParts = ScriptPath.split('/')[1+self.ImportStrip:]

if not VALID_SCRIPT_PATH_MATCH(ScriptPath):
XYZ
return

Ok, let’s see how that works out…

# I’m going to try out Microsoft Word -> WordPress

One of my biggest complaints about blogging is the miserable web interface for creating posts. Formatting and images are just painful.

I would blog a good deal more if it were truly easy. So the question of the day is:

Is it easy with Microsoft Office 2007?

Let’s see!

Here is a snagit:

#============================================================================
def Exec(self):
# We will try to catch everything and return a valid response.
# if that is not possible, a 500 will be returned.
try:
self.Open()
try:

self.Log('Coaster: ScriptPath={0}'.format(self.Env.ScriptPath), LogLevel=4)

ScriptPath = self.Env.ScriptPath
ScriptPathParts = ScriptPath.split('/')[1+self.ImportStrip:]

if not VALID_SCRIPT_PATH_MATCH(ScriptPath):
XYZ
return

End of test.