Moving panorama hosting to 360cities

It has always been annoying that the Microsoft HDView tool relies on silverlight and forces users to install a plugin. Not to mention that I started embedding the panoramas in my page and that led to problems … crashes and lack of 360 deg awareness. So I took another look around at free hosting tools, and gigapan and 360cities emerged as two good options. Gigapan is picky in that they reject panoramas that are too small. They REALLY mean giga. 360cities has some restrictions, but not as severe.

For now, I am moving to 360cities. While my panoramas are not good enough for them to include publicly, they will host them so I can show them here.

My 360cites profile can be found at http://www.360cities.net/profile/richmacd

Sebago – Cabin 6 – Kitchen – 2011

This is the start of a series of pictures I took of the insides of the cabins at Sebago. I am doing high-resolution (zoomed lens) and HDR in a cramped space, so the limitations of the camera do show, and it is really hard to get it perfectly. So it isn’t perfect.

Kitchen Interior of Cabin 6, Sebago Resort in USABy the way, the HDView panorama is the best way to see the cabin, but if we look at one picture, we have to choose which distortion we least dislike. The above image is hemispherical, and is used for the HDView panorama. Below is the panini projection, which tries to keep straight lines as straight lines. Better in some ways; worse in others.

Java generics and the “Smalltak setter” pattern

Anyone coming from a Smalltalk background recognizes the idea of setters returning “this”. (Smalltalk does it automatically). It can be useful when chaining multiple setters together. (See this) And it is more readable than having a method with several parameters. Which would you prefer?

1) Methods don’t return anything:

myObject.setValue1(value1);
myObject.setValue2(value2);
myObject.setValue3(value3);

2) One method with lots of parameters:
myObject.setValues(value1, value2, value3);
3) Setters return this:
myObject.setValue1(value1).setValue2(value2).setValue3(value3);

(1) requires the most typing and the most screen space, so it slows down good programmers.
(2) is the worst option because you (a) wind up with several combinations of all the setters (setValues12, setValues13, etc), and if value1, value2, and value3 are of the same class, then you risk putting the parameters in an incorrect order.
(3) Nothing wrong with (3). It is clear and readable.

Now there could be a style debate: Should we use the Java pojo style, i.e.,

myObject.setValue1(value1).setValue2(value2).setValue3(value3);

or should we go with Smalltalk style, i.e.,
myObject.value1(value1).value2(value2).value3(value3);

I could argue both povs, so I won’t argue at all.

—-
Now when you have a class hierarchy, you immediately run into a problem with this style. Look at the following code (I have placed all classes inside one outside class, so i can keep it organized. Ignore that issue as it doesn’t matter.)

public class TestThis {
static abstract class MySuperclass{
public MySuperclass setter1(String str1){
//set setter1
return this;
}
}
static abstract class MySubclass1 extends MySuperclass{
public MySubclass1 setter2(String str2){
//set setter2
return this;
}
}
static class MySubclass2 extends MySubclass1{
}
public static void main(String[] args) {
MySubclass2 mySubclass2 = new MySubclass2().setter1(“str1”).setter1(“str2”);//COMPILE ERROR
}
}

The problem here is that the setter1 method returns the MySuperclass type even though the instance is actually of type MySubclass2. Blame this problem on Java’s crappy strong typing model. use Scala if it bothers you too much.

Or use generics. Yes, the Java generics model is lame (See Scala if offended), but we can do it as follows (see this FAQ for the background)

public class TestThisGenerics {
static abstract class MySuperclass>{
public THIS setter1(String str1){
return (THIS) this;
}
}
static abstract class MySubclass1> extends MySuperclass{
public THIS setter2(String str2){
return (THIS) this;
}
}
static class MySubclass2 extends MySubclass1{
}
public static void main(String[] args) {
MySubclass2 mySubclass2 = new MySubclass2().setter1(“str1”).setter1(“str2”);//WORKS
}
}

Its tricky. You have to get that > just right. I don’t know about you, but I can’t quite understand it perfectly; I just do it.

There is one annoying thing in the above class. Do you see how we have to cast “this” with “(THIS)” every time. And the compiler warns us that this is an “Unchecked cast”, which it is. We know it is safe, but the compiler doesn’t.

I have learned the hard way that compiler generics warnings can really bite you. You are not always smart enough to ignore it. It does usually pay to remove them. This brings up the silly but necessary “getThis()” pattern (also see here), so here is the final code without any compiler warnings:

public class TestThisGenerics {
static abstract class MySuperclass>{
protected abstract THIS getThis();
public THIS setter1(String str1){
//set setter1
return getThis();
}
}
static abstract class MySubclass1> extends MySuperclass{
public THIS setter2(String str2){
//set setter2
return getThis();
}
}
static class MySubclass2 extends MySubclass1{
@Override
protected MySubclass2 getThis(){
return this;
}
}
public static void main(String[] args) {
MySubclass2 mySubclass2 = new MySubclass2().setter1(“str1”).setter1(“str2”);//WORKS
}
}


Parboiled java patterns (Errors inside Optional)

I’ve been using Parboiled Java on a current project and think it is fantastic. Best thing since sliced bread and regexp. But as I was finishing up the edge conditions of the testing, I ran into some fundamental pattern issues which are not obvious and not in the examples. So here are some notes:

My problem domain syntax is essentially OData with some modifications. We’ve kept the basic ideas and added some necessary extensions. A user will create a URL representing a database search, send it to my system, I parse that URL and convert it to a search object, perform the search, then reply with the data from the search.

It was easy to create code for  the matching syntax. It was the error conditions and catching the errors that turned easy into hard and ugly. I don’t mind hard but I do mind ugly, so perhaps this post will lead to a better approach. Otoh, error handling and parsing tend to produce really ugly children, so a clean approach may not be possible either.

Here is an example of a URL snippet:

Person($expand=location($current))

Without getting into the meaning much, this is a database query that means Find all Persons and “expand” their “location” property which are “current”. In other words, find all people and return the people and their current locations.

Below is a parboiled parser class that does the trick:

import static org.parboiled.errors.ErrorUtils.printParseErrors;

import org.parboiled.BaseParser;
import org.parboiled.Parboiled;
import org.parboiled.Rule;
import org.parboiled.annotations.BuildParseTree;
import org.parboiled.parserunners.ParseRunner;
import org.parboiled.parserunners.TracingParseRunner;
import org.parboiled.support.ParseTreeUtils;
import org.parboiled.support.ParsingResult;

@BuildParseTree
public class BlogTest extends BaseParser {
    public static void main(String[] args) {
        parse(“Person($expand=location($current))”);
    }
    private static BlogTest parser = Parboiled.createParser(BlogTest.class);
    public static boolean RESULT_TREE_ON = true;
    public static boolean STDOUT = true;
   
    public static void parse(String str) {
        ParseRunner runner = new TracingParseRunner(parser.Query());
        ParsingResult result = runner.run(str);
        if (result.hasErrors()) {
            String errorMessage = printParseErrors(result);
            if (STDOUT) {
                System.out.println(“\nParse Errors:\n” + errorMessage);
            }
        }
        if (RESULT_TREE_ON) {
            System.out.println(str + ” ===>  ” + ParseTreeUtils.printNodeTree(result));
        }
        if (STDOUT) {
            System.out.println(“Parse String = “+str);
            QueryAst query = (QueryAst) result.resultValue;
            query.print();
        }
       
    }
    Rule Query() {
        // This matches the Person($expand=location($current=true))
        return Sequence(
            Word(),
            matchedQueryName(),
            Optional(
                Sequence(
                    “(“,
                    Expand(),
                    “)”
                )
            )
        );
    }
    protected boolean matchedQueryName() {
        QueryAst query = new QueryAst();
        query.name = match();
        return push(query);
    }
    Rule Word() {
        return OneOrMore(
            LetterOrDigit()
        );
    }
    Rule LetterOrDigit() {
        return FirstOf(CharRange(‘a’, ‘z’), CharRange(‘A’, ‘Z’));
    }
    Rule Expand() {
        // This matches the $expand=location($current=true)
        return Sequence(
            “$expand=”,
            Word(),
            matchedExpand(),
            Optional(
                “(“,
                Optional(
                    Current()
                ),
                “)”
            ),
            popExpandAst()
        );
    }
    protected boolean matchedExpand(){
        ExpandAst expand = new ExpandAst();
        expand.name = match();
        return push(expand);
    }
    protected boolean popExpandAst(){
        ExpandAst expand = (ExpandAst) pop();
        QueryAst query = (QueryAst) peek();
        query.expand = expand;
        return true;
    }
    Rule Current() {
        // This matches the $current
        return Sequence(
            “$current”,
            currentSucceeded()
            );
    }
    protected boolean currentSucceeded() {
        ExpandAst prop = (ExpandAst) peek();
        prop.current = true;
        return true;
    }
   
    static class QueryAst {
        public String name;
        public ExpandAst expand;
        public void print() {
            System.out.println(“Query: name=”+name);
            if (expand == null){
                System.out.println(“expand == null”);
            } else {
                expand.print();
            }
        }
    }
    static class ExpandAst {
        public String name;
        public boolean current;
       
        public void print() {
            System.out.println(“Expand: name=”+name + ” current=”+current);
        }
    }
}

The problem is all the optionals. The parentheses are optional, and the text inside the parentheses are optional. In other words, the following URLs  are all legal:

Person($expand=location($current))
Person($expand=location())
Person($expand=location)
Person()
Person

But if there is text inside the parentheses, then it must be correct. In other words, the following URL is illegal:

Person($expand=location($currents))

When the java class shown above parses the above string, it will succeed because it matched on “$current” and didn’t care that the following letter was a “c”. We need to correct this.

One way to do this is to use the TestNot() rule. (If there are better ways, I’d love to know.) Change the Current() rule to the following:

    Rule Current() {
        // This matches the $current and does not match $currents
             return Sequence(
                 “$current”,
                 TestNot(LetterOrDigit()),
                 currentSucceeded()
        );
    }

So now we will no longer match on $currents. Problem is, the parser still succeeds because the Current() rule is enclosed by an Optional(). The error inside the Current() rule matching will be ignored.

We want the parsing to fail with a useful error message where the error occurred. How do we do this?

I’ve come up with two approaches, neither of which I am that crazy about:

Option 1 is to throw an Exception when the illegal text is discovered. Something like:

    Rule Current() {
        // This matches the $current and does not match $currents
             return Sequence(
                 “$current”,
                 Optional(
                    LetterOrDigit(),
                    throwError(“Illegal character found after $current”+match())
                 ),
                 currentSucceeded()
        );
    }
    protected boolean throwError(String msg){
        throw new ActionException(msg);
    }

Option 2 is drastic: We define our parsing rules to accept “almost anything”, use the match() method to build up intermediate objects (i.e., abstract syntax trees or ASTs), then analyze these objects for correct data.

An argument for option 2 is that the parsing phase should be separate from the validation phase. And one can build up a generic and reusable AST system. I spent a day working this out, but ultimately abandoned it as the parsing rules had become so “unrelated” from the “correct syntax” of my problem domain. I didn’t like the code-smell.

I’m still working through this, but right now Option 1 is forging ahead.

Robyn’s room 2012

Daughter spent the day cleaning and re-arranging her room. The miracle of mess-removal, and once again being able to see the hard wood floors that her Mother and I discovered under crappy carpet and restored. We thought of taking a picture, then I remembered that photosynth is available for her new itouch, so we played with that. Good, but not good enough for Dad, so I spent 2 hrs taking the pictures, and maybe 10 hrs building the panorama with hugin, then the computer did a few hours of cranking as well. This one came out quite nicely. Problems mostly due to the average camera lens.

Rob Gillaspie – Corporate Slave

Back in 1993, I was working an hellacious job at the refinery in El Dorado. (Hell Dorado, as I called it.) Monday through Friday in the plant, home for weekends. Lousy project. One bar in town and these were the days when you needed a “membership” to enter. I wound up eating most of my meals in my motel room.

Anyway, I was back in Lawrence for Art in the Park, and I ran into a very talented kid (high school senior) who was displaying his work. His name was Rob Gillaspie. One image in particular caught my eye: Corporate Slave. Surprise 🙂

I told him I wanted to buy it and how much would he sell it for. Nice kid, he was stunned, and eventually came up with “five dollars”. I talked him up to ten dollars with a lecture about how it was going to cost me twice that to have it framed. Anyway, we parted company and I never saw nor heard from him again. Periodically I google and FB his name, but nothing yet. So now at least his name and his art work are in google and perhaps he can find me.

 

Rob Gillaspie
Corporate Slave
1993

Update: My google trick was successful and he finally showed up. You can find him at  Mal Content google user

Robin MacDonald newspaper clippings

I’d scanned some of my Dad’s old newspaper clippings, so it was time to commit them for posterity.. Cricket from the sixties…

This is an article from the 1960s. Currie Cup cricket is the South African equivalent of each US state competing against each other. SA had 5 provinces (or “states”).

Golf next. My Dad never got a hole in one but he got an albatross at Royal Durban Golf Club.

RDGC is a unique golf course. Totally flat and wind-swept. Two-shot penalty if you got into the rough. Surrounded by a horse race track. They have actually reversed the front and back nine since our time. Dad was club President a couple of years in the 70s.Fond memories of New Years dinners with party hats and Dad making the speech.

My Dad made the Natal amateur semifinals a couple of times. Natal was one of the South African provinces.

Paradise Cafe enchilada recipe

Paradise Cafe in Lawrence, KS was my favorite restaurant back in the college days. Sadly no longer with us, but I made some great friends there.

(You can find their facebook page at facebook paradise cafe group )

For some reason or another, I got hold of the enchilada recipe, so here it is:

Filling

1 pound spinach, chopped
2 tablespoons olive oil
2/3 cup finely diced onions
2/3 cups sliced mushrooms
1 teaspoon garlic
1/2 teaspoon dried oregano
salt and pepper
dash Tabasco
Cheese sauce
3 tablespoons margarine
3 tablespoons flour
2 cups milk
16 ounces sour cream
1 4-ounce can chopped green chilies
1 2-ounce jar diced pimientos, rinsed
 /2 teaspoon salt
 1/2 teaspoon Tabasco or to taste
 1 cup or 4 ounces grated Swiss cheese
 12 6-inch blue corn tortillas
 1 1/4 cups or 5 ounces grated Swiss cheese
 chopped tomatoes and black olives
 salsa
Preheat oven to 375 degrees.
Make filling: Sauté onions in oil until translucent. Add mushrooms, garlic and oregano. Continue to cook until mushrooms are soft. Add spinach and sauté until wilted. Add salt, pepper and Tabasco to taste.
Make cheese sauce: Melt margarine in saucepan. Whisk in flour and cook over medium-low heat for 2 to 3 minutes. Whisk in milk a little at a time and cook over medium heat, stirring frequently until smooth and thickened. Do not add other ingredients until sauce is thickened. Add sour cream, chilies, pimientos, salt and Tabasco. Heat through but do not boil or the sauce will break apart. Add Swiss cheese a little at a time, stirring constantly. Remove from heat as soon as the cheese has completely melted.
Heat heavy skillet or griddle until hot. Quickly heat corn tortillas on skillet. Spoon some of the spinach filling down the center of each tortilla. Add some Swiss cheese and 1 to 2 tablespoons cheese sauce.
Roll tortilla around filling and place, flap side down, in a shallow casserole. Cover and warm in 375-degree oven until enchiladas are heated through and cheese is melted. Just before serving, pour cheese sauce over tortillas. Garnish with chopped tomatoes and black olives.
Serve with salsa. Makes 12 enchiladas.

Bucket List Books

It occurs to me that everyone should maintain a list of “bucket-list” books. Books that are so important that we believe everyone should read. Or maybe this is the wrong term. Maybe this is just a list of books which we found essential to whoever we are today. I’ll get started here.

Zen and the art of motorcycle maintenance / Lila, by Robert Pirsig

Two books actually. Good college age reading, perhaps for advanced high school. This is an engineer’s bible. Foundations of logic and “truth”

Gödel, Escher, Bach: An Eternal Golden Braid, by Douglas Hofstadter 

College age. Very tough mathematics. Mind-blowing. The art of bootstrapped complexity.


A new kind of Science, by Stephen Wolfram

If it turns out to be true, the most important mathematical work since Godel’s incompleteness theorem.

Narcissus and Goldmund, by Herman Hesse 
One of the great writers of all time. The intellectual life vs. the experiential one. If one every plans to spend time debating capitalism vs. socialism, Democrat vs. Republican, etc, etc. one should also read Magister Ludi, in order to remove forever the fantasy that there could exist a perfect system.

Shogun, by James Clavell
Because aliens really do exist on this planet, and by the end of the book you will partially understand how they think. You’ll also never complain about the dropping of the atom bomb to end WWII.

And many more …

World’s greatest eggnog recipe

Picked this up from playboy many years ago.

1 pint of cheap domestic brandy
¼ pint cheap domestic sherry
½ pint of cheap rye whiskey
¼ pint Jamaica or New England rum
12 eggs
12 tablespoon of sugar
1 quart of milk or 1 quart of half & half
1 quart of cream or 1 quart of half & half Nutmeg and cinnamon to flavor ½ gallon of Borden vanilla ice cream (it has condensed milk)

Mix brandy, rye, rum and sherry.
Separate egg yolks and whites (keep both) Beat egg yolks well, then add sugar. While mixing egg yolks and sugar, drizzle the liquor. Then drizzle in milk & cream. Set aside.

Beat egg whites stiff. Then fold the egg whites into the mixture. This works best if you start with ¼ to 1/3 of mixture.

Put the brew in the refrigerator and leave for at least 72 hours- prefers 8 days when it peaks. If you drink it to soon it will taste like crap. Serve in a big punch bowl. Add the ½ gallon of ice cream and nutmeg and cinnamon.
This will keep in the frig for 4 to 5 weeks.


Update 12/19/2000
And here is an alternative recipe by Charles Mingus.

The True Meaning Of Life or The Laid-Back Country-Club Summer School Approach to the Laws of Thermodynamics

I was rummaging through old files looking for something, and came across this rant I wrote back in 1986 when I was teaching thermodynamics at KU. I decided not to give it to the students for obvious reasons. I am posting this with minimal cleanup.

————-

Thermodynamics is a subject that starts with very simple physical observations of the real world. The whole field is based on two laws (actually four: Two biggies and a couple of backups) and there isn’t a hell of a lot of theoretical background to any of them. The laws just are. If that’s not good enough for you, the Nobel prize is waiting.

The zero’th law says that if A is at the same temperature as B, and B is at the same temperature as C, then A is at the same temperature as C. Pretty profound stuff huh! And this is college? Well, somebody had to start somewhere, and that’s why they call it the zero’th law anyway.

Actually, when you really start looking at it, it gets pretty philosophical. Nobody’s actually proved the zero’th law mathematically, so it has to be a postulate. But it is necessary implicitly for the other laws to have any meaning. Luckily, it is borne out by observation, and nobody’s contradicted it yet. So mankind builds its first thermodynamic foundation on pretty sturdy ground. The stuff after that? Just you wait.

Next is the first law of thermodynamics which is simply the conservation of energy. What goes in must come out. But what makes it a bit more complicated is that nobody really knows for sure what energy is. Oh sure, we can all talk about it: OPEC screws us for it; it flies out the attic if we aren’t in the pink; we run out of it if we weren’t good little boys (sorry, persons) and finished all our porridge for breakfast like mummy told us to, etc. But we can’t hold it in our hands (1) and it’s invisible. But in some way we all know that it exists (I think). It cannot be created or destroyed.(2) The net result of all this crap is that we usually get a pretty circular definition for the first law. The first law defines energy, but the first law is itself defined by energy. Or something like that.

Everybody sneaks around this little problem by arbitrarily defining two other things first: Heat and Work (and let’s not get into that headache just yet). This takes up to Chapter 4 in Van Wylen and Sonntag. Then in Chapter 5 we get this beaut: “The first law of thermodynamics states that during any cycle a system undergoes, the cyclic integral of the heat is proportional to the cyclic integral of the work”(3). Are you kidding me? A much more sensible definition is as follows, but notice that we still really don’t say what the heck energy is:

energy input – energy output = change in stored energy

Anyway, throwing up our hands, we define energy well enough so we can use the concept and go on, keeping quiet along the way so we still get paid by those bean counters.

The second law is a deceptively easy concept but really tough in application. Or maybe it’s simple in application, but a damn difficult concept. I can never remember which. Basically, it says you can’t get something for nothing. Energy isn’t free and it’s a one way street. For instance, cups of coffee don’t sit around getting hotter. Energy in the form of heat flows from the hot cup to the cool surroundings, not vice-versa. Air flows into a vacuum, it doesn’t spontaneously turn around and head back out. The accursed friction is real. Even perfect engines cannot be 100% efficient. All quacks who build perpetual motion machines are full of doggy poo. All this from the immortal words of Clausius:

“Die Entropie der Welt strebt einem Maximum zu”.

To get around this little game, everybody defines entropy. And this little guy can be a monster, until you simply stop questioning it and go with the flow. The most universal application of the second law (or perhaps the starting point) is that the entropy of the universe always is tending toward a maximum. Think of entropy as a state of disorder. The greater the entropy, the more the mess. Yes folks, at last scientific proof that dirty dishes are nature’s way and lost single socks have an afterlife.

The third law of thermodynamics harps back to the fact that we don’t really know what energy is. Nor entropy, dorm food, and Vanna White’s phone number. Actually, the third law is something of an anticlimax when you get to it. It states that at absolute zero degrees, the entropy is zero. This is reasonably logical, and it gives us a point of reference. Once the energy or entropy of something is defined somewhere (zero at zero degrees, for instance), its state is fixed/determined at all other conditions. If all this makes sense, then I hate to spoil the party, but to be perfectly honest, the third law is no use to anybody except for a few mad scientists, and a few even madder philosopher-engineers. For one thing, all engineers are ever really interested in are the differences in energy and entropy, so we can define a reference point as zero anywhere we want. Not to mention that one of the teansy weansy problems is that absolute zero is unattainable, by definition of the actual law which defines it. Now that’s a real circular definition.

All this is enough to pick up a cold sixpack, drive out to Lone Star Lake, blow up the extra large inflatable raft, and set yourself adrift. Or perhaps you might say a few words to the big guy who made all this wonderful stuff possible and ask him why on earth he made it so weird. Actually, civilization hasn’t fallen yet so the whole field of thermodynamics is probably doing ok. The above bullshit won’t help you solve the homework problems or do well on the tests. But I hope it will help you take everything a little less seriously when you don’t understand something, and skeptically when you think you do. Above all, never trust the teacher. He just started studying this stuff a few years before you did, and look how screwed up he is.

Notes:

(1) Actually we can a la the potential energy of the column of air we are supporting, the potential energy of the hands being held off the ground, the chemical metabolic potential of our bodies, etc.

(2) Except for E=mc2, of course, and even then this only states that mass is another form of energy.

(3) To those of you that this is all sounding gibberish, congratulations, you are normal.

The Lennox Taulbee Clan. Recording from 2005/2006

This was a project I worked on a few years back. My friends, the Lennox Taulbee Cla,n decided they wanted to make a record of themselves singing together. Our friend Charlie Lamb built his own studio, called adoruerecords, so we booked a couple of days. The Taulbees sang, Charlie recorded, and I tried to film it. We had two cameras, so I always put one on a tripod and I walked around with the other. Trying to keep quite and out of the way. From the practices and multiple takes, I could get enough footage to mix it later. This youtube playlist was the result.

One technical note is that the light was low, so the video had a lot of noise. Noise reduction filters in the video world are pretty bad so I looked to the graphics tools. The best available had just been released as a PhD project and I could only use it from the command line. So I exported the video as images (30 images per second) and used a batch tool to run each image through the filter. At 30 seconds per image, this wound up taking about 40 days. 40 days when my computer was constantly pegged. It was definitely worth it.

Link to the youtube playlist

Sebago fish story: The one that almost got away

So Scotty and I took Robyn, Winston and Aiden fishing. We’ve caught 30+ blue gills, but only 7 are keepers. Um, actually only 2 are keepers and the other 5 are debatable. Anyway, things are going great until my bad knot on the fish cage allows it to float away.

Well yesterday, Spike had lost the old fish cage, with a 2 lb bass in it. So this is our new floating fish cage. So all is not lost. The fish cage is 20 yds away, and everyone reels in while scotty pulls the anchor. While he does so, Scotty lectures the kids about the necessity of “never toss anything overboard that you haven’t checked is properly tied in. Fish cages and anchors.”

So we drift over to the cage and I retrieve it. As I tie it to the boat with a better knot, Robyn yells out “What is that rope in the water?”

Yes, the rope at the other end of the anchor, as it starts to sink for the final time. Scotty immediately dives in and manages to get a hand on it.

Problem is that we are now drifting away from him and he can’t get back. No problems. I’m an adult. So I try and start his boat.

Um, it won’t start. Turns over just fine, but coughs to a stop as soon as I let go of the key. Very consistent behavior. I have steered his boat, but never started it. Something I am missing.

So we all start yelling at each other, since we’re now 100 yds apart. And I still can’t start the motor.

Luckily Spike is in another boat a few hundred yds away. We yell at him to get Scotty, and he takes his sweet time reeling in and pulling in his anchor. He suggests we tell Scotty to tie the rope around his anchor. Nothing is crisis for our man Spike!

I look over at the kids and see Winston (Mister empathy) is in tears. Fears the worst and no one has said things will be ok. i try and tell him not to worry, but I am still trying to start the motor (and failing). and I am still yelling, since everyone is 100 yds away.

Finally I try some weird “get the starter going and slam it into gear” trick and the motor starts and I can head back to scotty. but spike gets there first and saves him. I pull alongside and all is recovered. But the kids had had too much excitement and just felt things had been too dangerous. Time to head for home.

We shall see how this fish story grows over time.

Heather MacDonald – Norwegian Doll

My Mom is a master dollmaker, and I was taking some photos of her dolls when we came across an old article she wrote for Doll Crafter magazine. I figured I’d scan the text and photos, so here it is. First, the pages from the original article. Second, the text and enlarged pictures.

 

——————–
The dollmakers in the Kansas City area know and respect Heather MacDonald for her fabulous costuming of dolls and the fact that she is such a nice person. Her interest in dollmaking and costuming began in the mid 1980s when a friend of hers wanted to buy a Christening gown for her grandchild. Heather looked at the simple gown with its steep price and thought she could make a lovely one for her own grandchildren. There had been an heirloom Christening gown in her own family. This gown turned out beautifully and she got the idea that it should be displayed on a life-sized doll. In the hunt for a doll she came across the doll studio of ThuTam Freeman in Parkville, MO. She signed up for a class and was so excited to be able to make a doll for the gown and was “hooked” from that time on. She has continued to take classes and make beautiful dolls and lovely costumes for them. She especially loves the research and finding out the history that is intertwined with the costuming. We look forward to having more articles from this talented costumer in Doll Crafter. – Editor
—————
I began the love of sewing and needlework as a child. My three sisters and I were taught the fine art of stitching by our mother. We learned to embroider and many other fine hand sewing techniques. I love traveling and studying the history of the areas that I have visited. It is so satisfying to me when I research a specific type of costume and then follow through on the creation of it.

This adventure began ages ago when the picture of an intriguing Folk Costume appeared in ‘What Dolls Wore Before’, a doll auction catalog and reference book for costumes by Theriault’s. I could just see a small girl all dressed up in that outfit and cute little bonnet, her fair curls shining against the dark fabric. I set out to find out more and it was a long journey. Mildred Seeley wrote that you should, “Always make your dolls as authentic as possible.” It some times takes a lot of hunting for information to accomplish this.

The original doll costume in that auction catalog had been labeled ‘Eastern Europe’, but it was not to be found anywhere there. The hunt for “my” costume that had started in the East, took me all the Way West to the North Sea. I came across dolls by Ronnaug Petterssen of Nolway on page 113 of the book titled “European Costumed Dolls” by Polly and Pam Judd. These were a boy and girl from the l930s in stylized folk costumes of the Hallingdal Region of Norway. The embroidery on both costumes was made with Wool threads. It was known as ROSEAUM embroidery in the Hallingdal River Valley region of southern Norway. This Was so lovely; I just had to reproduce these costumes for my dolls. All of those hours of leaming to embroider as a child were put to good use making these Folk costumes for my dolls. The dolls that I chose were both made from the same mold, the Sonnenberg Child that was a special DAG Convention mold by Seeley’s.

These costumes have used phrases such as Ethnic, Native Ethnic, Festival, Folk, Folkloric, Peasant, Regional and even National. No one word describes them all, but they do have much in common with other nearby countries of Europe, where many of these costumes have disappeared from everyday wear. Norway continues to have a very important place for their Regional Folk costumes. They are worn on very special celebration days such as weddings, Christenings, other celebrations and especially on May 16, which is the Norwegian Independence Day.

In days past Embroiderers and Textile Makers could have made the costumes from the different regions. The tradition of making these costumes has been handed down to each generation and a very particular style was adopted for each region. There are handwork guilds set up in each region and they govern the design, fabrics, embroidery thread, colors and other parts of the costumes. It is to protect the design of the costume and keep them all uniform. The Norwegians are extremely proud of their Regional Folk Costumes, which are called Bunads.

Silver jewelry is a very important element in many of the Folk costumes. The designs of pins, clasps and other jewelry were developed over time and adopted with the advent of the final design of the Bunad or Folk costume. There are Folk costumes for the men, with knickers as a choice. If they prefer, they can Wear long pants instead.

I used some design elements from the costume in Theriault’s book and some from the Petterssen’s doll costumes. It is very difficult to include all of the detailed work on a costume so much smaller than that of a person. But by including the most important elements in the right proportions, you too can make your very own treasure.

References:
1. What Dolls Wore Before by Theriau1t’s.
2. European Costumed Dolls by Polly & Pam Judd
3. Norwegian Bunads by Kjersti Skavhaug

————————-