Thursday, December 23, 2010

Kindergarden science - Paper Cogs

Cogs are a corner stone of mechanics. Although they are rather simple to make they tend to have a low tolerance to faults. The key to getting something that works in the end is to measure them as precise as possible at the start.


Stage 0) Adult prep
You can look below to construct the cog pattern from scratch or you can print out 2 patterns and paste it on to the cardboard.

Stage 1) Create some interest
Ask your kid about a clock(one with the cogs showing is best) how it turns and works and show her pictures of the insides. Ask her if she wants to make some cogs.

Stage 2) Gather materials
Get the cardboard with the cog patterns on it. Get scissors tape and a sharp pencil or Japanese chopsticks.

Stage 3) Cut it out.
Cut the cogs out. Don't worry to much about being too precise, just get them to follow the lines. My daughter was able to cut it quite neatly when I showed her to cut straight lines, even despite the cardboard thickness. Also clip the points of the teeth so they are flat (the points are weak and will easily get jammed). Cut a long strip of cardboard as the backing to the cogs. Then the adult should cut 2 cardboard pins(shown on the pattern) from the left over cardboard.

Stage 4) Assemble.
Place the two cogs on the backing board. The teeth should inter-mesh with about 1-2mm of gap between the two cogs. Then with Japanese chopsticks or a sharp pencil punch a hole in the middle of the cog and though the backing board. Push in the cardboard pins and fold them over on the backside and tap them to the backing board.

Stage 5) Test
Spin the cogs and check that they work correctly. Draw arrows to show (and discuss) how the cogs turn around.

What they learn
  • Basics of mechanical devices
  • Basics of rotational dynamics

Appendix
How to construct the Cog pattern from scratch.

0.1) First create a compass. Tape 3 sharpened pencils together in a triangle with of the 2 leads about 5cm apart.
0.2) Get some thick cardboard, thicker is better.
0.3) Draw a circle with the compass.
0.4) Then rule a straight line through the center of the circle, using the edge of the ruler to measure the 90 degrees draw a second line through the center to form a +.
0.5) Where each of lines touch the circle place the compass point and draw a lines marking the circle both above and below. These marks are exactly +/- 60degrees from the line. Once finish you will have marks on the circle at every 30 degree(including the + lines). There should be a total of 8 points marked and 4 points where the lines cut for a total of 12.
0.6) Now take the compass again an draw a circle around to of the neighboring marks. The two new circles will cross at 2 points, 1 the center of you main circle and another point outside of the circle. Draw a straight line through the 2 points where they cross. This forms the 15degree mark on the circle.
0.7) With the ruler place the corner of it on the 15 degree line facing into the main circles middle, and with the sides touching the marks on the outer circle. Trace its edge.
0.8) repeat for other 11 marks.
0.9) repeat for another cog.

Sounds complex but its quite simple to do.

Wednesday, December 22, 2010

Kindergarden science - Shaky leg robot

The Shaky leg robot is a simple device that uses mechanical vibration to draw random lines and patterns.


Stage 1) adult prep
Scavenge a battery container, switch and motor from a broken toy or device. wire them together and check the the switch correctly operates the motor. tape the motor to battery pack so the shaft extends out. tape the switch so is faces in the same direction but on a neighboring face of battery case.

Stage 2) build interest
Discuss robots and what the are with you kid. Ask if she wants to make one.

Stage 3) gather materials.
Get an old box with about 15cm square of thick cardboard.
Get the scissors, tape and 4 crayons


Stage4) build it - child
Cut about a 3 cm line straight in about 3cm fold the edges up and tape the overlapping 3 cms to the next edge. this forms a kind of strong small shoe box top.
tape the motor to the inside of box lid with the drive shaft out.
tape the four crayons/texters to the four box lid corners so they point in the same direction as the motors drive shaft and extend as far as possible.
then tape the weight to the motor with a long piece of tape

Stage 5) turn it on and test - done by child
Stand the entire device on a sheet of paper so the the points of the crayons are touching the paper. and turn it on.

The weight should swing around between the crayon legs causing the whole thing to shake and rotate drawing lines in the paper.

Have your kid change the length of the tape between the weight and motor and crayon leg length and see what happens to the drawing. Ask which is better and why

What they learn
  • basic engineering; prototyping and refinement
  • structure and stability (odd sized legs)
  • the basics of mechanical vibrations what the are and why they exist
Refer: http://www.newscientist.com/article/dn19501-homebrew-technology-meet-new-scientists-junk-robot.html

Saturday, December 18, 2010

Bad system design -- Overspecification of Data.

The key principles behind Architecture and technical drawing rules can and do apply to computer science and programing. One key item is "Over-specification". It is one of the main items that I find in;
  • Poorly written or adhoc designed software
  • In software that has been in long term maintenance without purging rewrites
  • or in software produced by coders under constant(and often pointless) deadlines.

Here is what it is and why its evil.

Consider a Line with a point on it. Here are 2 classes defining it.

struct Good
{
  int length;
  int pointFromLeft;
};

struct Bad
{
  int length;
  int pointFromLeft;
  int pointFromRight;
};

So why is the Bad struct a no-no. Simple!. There is an implicate relationship between the data entries. "length = pointFromLeft + pointFromRight". If something updates the length and forgets to update one of the pointForm entries, then you end up with the data in an invalid state. This will later cause computation errors and finding the cause of the incorrect data is often quite difficult, because the code with will often look legitimate..

Furthermore the problem often isn't so simple to see/fix either. Consider this set of classes defining the same thing.

class GoodLineWithPoint
{
private:
  GoodPoint* point;
  int length;
};

class GoodPoint
}
private:
  int pointFromLeft;
}

class BadLineWithPoint
{
private:
  BadPoint* point;
  int length;
};

class BadPoint
}
private:
  int pointFromLeft;
  int pointFromRight;
}

In this case someone may have added the pointFromRight member so that they can "cache" the result. In reality the parent class GoodLineWithPoint should be the one that is dealt with however a function call might be passing GoodPoint to save the additional pointer deference. And once this is established in an API or lib it becomes quite difficult to fix cleanly.

Svn commit all the readme's that where have modified.

Most of the time I'm working on multiple projects at the same time. This means many svn working directories. And sometimes its essential to commit a similar file across all working dirs. Here is quick commandline to get it done (for README files).

find ./ | grep README | grep -v svn | sed "s/^/svn status /" | sh | sed "s/^M *\(.*\)/svn commit \1 -m 'updating project readme'/"

open office from the command line

You probably want to alias this but sometimes its convenient to boot up open officce from the command line.

openoffice.org3 -writer <filename>