10 December 2008

Republicans, Democrats, and the Governor of Illinois

So unless you've been living under a rock, you'll know that Governor Rod Blagojevich of Illinois has been caught, apparently attempting to sell off President Elect Obama's vacated senate seat to the highest bidder. And he apparently did it, knowing that he was already under investigation for other corruption charges.

A long time ago, Chris used to say "Republicans are evil, and Democrats are stupid. And if given the choice, I'd rather go with evil." He no longer believes that. Now he says that "they are both stupid and evil," just about different things.

It seems that Blagojevich, a Democrat, is a perfect example of being both stupid and evil.

Now, being stupid isn't a crime, but shouldn't we expect better of our elected officials? Shouldn't they be BETTER, than the average Joe? Both in ethics AND intelligence? I suppose it's power that draws the corrupt to run for political office. So how do we go about attracting the smart and ethical folks to office? Hold a lottery? Only those who DON'T want to be governor, should be given the office?

There doesn't seem to be a good answer here. I've always wondered how men like Nixon could record (and then keep) the records of their illegal behavior, or how Governor Blagojevich could openly solicit bribes while already under investigation, and then expect to not get caught.

My seven-year-old is more adept at hiding her crimes than THAT.

So I'll tell Blagojevich and all other politicians who are considering illegal behavior the same thing I do her: "Grow up. Do the right thing. If you'd do what you are supposed to do in the first place, then you wouldn't ever get into trouble."

19 November 2008

How to use players' emotions

I'm targeting a few game developers with this, but welcome input from anywhere.

Let's say that there's a technology -- a module that you can plug into your projects that allows you to access the internal emotional state of the user of your game. How would your game use that? Any game. Any kind of game. What kinds of games would use it in what ways? Are there ethical considerations? As a designer/developer/whatever, would you like to have access to that extra stream of data? And why?

In email, Patrick Dugan wrote:

I'm currently playing with relationship-focused multiplayer interaction and how imperfect information can balance that out, kinda like what Between did but from a different angle. So naturally I'd like to experiment with making that data known to the other player, as well as leaving it unknown and doing some fancy back-end stuff with it. The easiest thing to do, of course, is leave "traps" for players to express emotional extremes, like a sudden gap-up in a market, and reveal things to their counter-player and to themselves that they may not have been aware of. That's the trick, the cognitive construction of choice matrices is powerful enough to mold behaviors behavior and take metrics on it, you don't need direct B-CIs. Of course, the B-CIs would be useful, but the control grid will come in more subtle forms.


That's good stuff for me. I hadn't been thinking at all about multi-user reveals, only how to manipulate the player with adaptive algorithms.

In email, Craig Perko wrote:

The problem with a question like this is that it's a very unsatisfying
thought experiment. The answers are all too basic and uniform because
the question is too wide-base.

Anyone with an ounce of brain can see that it would allow you to make
better games, and they can imagine up the kinds of ways it can happen
for all the various kinds of games. Anyone with an ounce of brain can
also clearly see the ethical considerations.

In order to be an interesting thought experiment, it has to be about
something more specific, something that requires thought. Something
that ten different designers would come up with ten different answers
for.

But if you really want an answer, okay. I would make games scarier,
more touching, more adrenaline-filled, obviously with an eye to player
health and privacy. You could easily develop a feedback system for
stressing the things that affect them most: if Anna makes them more
happy than Bert, you can show them more Anna, or you can strive to
make Bert more likeable. And, of course, that's a simple intro
example, it can get very complex as you apply it to level design, NPC
scripting, and variations in player capacities for emotion...

The problem is that it's a straight run: everyone will give you more
or less the same answers, perhaps flavored with different levels of
paranoia. I imagine these are the same answers you came up with.

Uh, yeah. What he said is what I'm finding.

There are little exceptions. Patrick's multiplayer thoughts are great. James Brown suggested a Rock Band game where audience appreciation matters to your score -- which is a different, easier kind of multiplayer use. He also suggested using the tech to gauge the effectiveness of product placements. That's neat.

14 October 2008

Sewing - so what are all of those stitches used for?

Ok, so I'm not much more than a beginner when it comes to sewing. And when I bought my new sewing machine, a Janome HT2008, it came with 50 different stitches:



(You think that's a lot? There are more advanced machines that come with hundreds of different stitches, and the ability to stitch alphabets and embroider and all sorts of stuff like that).

The problem is that I don't know what all of the stitches are used for. So I created an Excel file with all 50 stitches, the recommended presser foot (that's what the letter below each stitch shown refers to), and pictures of many of the available accessories. The accessory list includes all the presser feet that came with the machine, plus all of the ones I've bought, plus all of the ones I'd like to have. There are certainly more available.

I got all of the stitches and descriptions from the Janome Stitch Learning Center.

Anyway, I created a PDF file for those that don't have Excel, or don't know how to use it. If you have this machine, you might find it useful. You can download it here.

If you want the original Excel file so you can add other stitches (if you have a different machine), or other accessories, then drop me a note or comment, and I'll email it to you.

06 October 2008

Crow's-Feet: A Story-Games Contest Response

I occasionally design games in response to online contests. Some people do it often and produce great stuff. That's not me, but it's still fun. I wasn't really in the make-a-game mode, but something about Jonathan's post at SG kept rattling around in my head and out came the following. I think it's playable in an hour -- even if some people would take longer, I'll try it out and see how it works. I guess I've disregarded the rule about no writing implements at the table — I kind of forgot about that while the idea flowed out of me. I think I'll leave it like that rather than implement some inane replacement like pressing the crow's-feet into aluminum foil with your finger-nail. Also, when I started, I'd kind of expected the graphical role of the illustrated crow's-feet to have a more numeric role in resolution or something but that's not how it worked out.


Crow's-feet
-any of the tiny wrinkles at the outer corners of the eyes resulting from age

Players are expected to be sitting around a table or something. There are the same number of characters as there are players but each character resides between two adjacent players who share it — so that each player has two characters and each character has two players. Each character is represented at the table by a youthful, cut-out face. (To generate these, take pictures, tear them out of magazines, find them on the net, draw them up, use my templates below, whatever.)

These characters that you'll be playing with were in more or less the same clique in high school, twenty years ago. Maybe they're still friends and maybe not. Probably not really; but y'know, friendly. It's a funny time in their lives because high school graduation was such a significant milestone and now they've lived more life after that point than before. And they've seen quite a bit and really lived their lives for a while. Experiences have left tracks on the characters. They've aged.

Aging has good parts and bad and different people react and emphasize these aspect differently. And I think that the way we handle these things has some impact on the way we age. Take crow's-feet; maybe this is myth — though for purposes of this game it isn't: when you laugh and smile a lot, you develop wrinkles radiating out from your eyes in a generally downward direction and when you scowl more, your crow's-feet point more out and up. That's how you'll be recording the story of the characters — by illustrating their crow's-feet. And by calling on those illustrations to influence more of their stories.

So now you're sitting around the table with some friends and you have these cut-out faces lying on the table's surface between you and your neighbors...now what? Grab a fine-point sharpie (or whatever) and the character's face to your right. Write her first name on her forehead — way up high, and put her back on the table. Someone has to start — let's say it's the oldest player. He's going to pick one of his characters and describe a bit of a situation. It'll be either historic or current for the character.

See, the setting of this game is like this: It's late on the evening of their twentieth class reunion — after things have shut down and they've moved, as a group, to someone's house. They talk about the good old days, but more, they talk about Real Life; what's been going on. You're past the bullshit part of the evening and old friends have been reexamining their lives all day. Maybe they've had a few drinks. Now they're confiding.

When it's your turn, you come up with a situation of significance in the character's life; something that helped them to mature. Anything, really. But don't be trying to narrate an outcome — the group will do that collaboratively, just set something up and as play proceeds, you'll learn some cool stuff about the characters.












kidislackingsecurity
partnercausesbuildingsatisfaction
jobexacerbateslosingsufficiency
money
showingexcitement
parent
conflictedheartache
news
socialanxiety
technology

healing
body

function

You can come up with any kind of situation that will lead to significance, but if you want some help, check out this table. There are four lists of words. you can string them together, adding the occasional "not," changing the tense or form and even adding or deleting a word as you want — this is just a helper. For example, maybe you grab "money causes social satisfaction" and set up a situation in which the character, aspiring to "success" can finally buy into a country club or maybe he hires a prostitute to help fill the gaps in his lackluster marriage. Some combinations won't make perfect sense; just fix them up or choose something else.

So one player (whomever is "on") sets up a beginning situation for one of his characters — describing in a few sentences what's going on: setting, initial actions and goals. Then he holds up the character's face and shows it around. if it is after the first round of play, the character is likely to have some crow's-feet. Each player should let the face inform their narration. (How you do that — seeking balance or considering the prior direction a tipping point, is up to each of you on your own.) From this starting place the players will take turns contributing to narrating what happens.

There are two formats to this: narration and dialogue. Some groups do most of the play as that kind of narration. Others will want a bunch of in-character dialogue. They're both quite nice ways to play.

Narration is as simple as this: the players take turns adding one sentence (or so — one main point, anyway) to the description of actions and reactions. Go clockwise around the table. Say whatever follows most obviously from what the player before you said. Don't take a bunch of time to think of something cool — trust that it'll be most cool by just riding the collaboration. And you want to keep the game moving; keep people engaged. That's narration. (Please note, this character is revealing a story. As such, a few things can't happen in the story -- like the character's death, at least. Usually.)

When speaking for a character, if the character happens to be one of the main characters — the ones on the table, then that character is spoken for by one of her players. (The player with the same left-right relationship to the character as the player who set this situation has with his character is ideal.) If it's some other character, the first person who wants to talk for her can speak up and run with it. If no one does that, it's the first player to the left of the player who set the situation up who isn't already engaged in the current dialogue. You can shift back and forth between narrative and dialogue freely — just remember who narrated the last bit so it can pick up with the next player.

This story-telling/acting round ends when the situation is naturally resolved. This will usually be obvious, but you can also check to see when everyone agrees that there's nothing more to add. In practice, these scenes just run out of steam and then you know that it's time to move on. At this point, the two players of the character for whom the recently ended situation was authored take a moment to reflect on the outcome of the story and illustrate a crow's-foot on the character's face — on the eye closest to the player. If you think that it was a positive growth outcome, angle the crow's-foot downward. If not, then upward. If it was strongly one or the other, curve it quite a bit. If you think the event had powerful impact on the character's life, make the line you draw a little wider/darker/deeper.

When one situation is resolved, the next player (to the previous player's left) chooses one of her characters and repeats the process. Note that you could play two situations in a row for the same character — it's up to you each round. Repeat this cycle until everyone has set up and resolved a situation. At this point, each player will have "judged" and drawn two crow's-feet. Call that a round. You should play the game as many rounds as you find interesting. I'm writing this with no play-testing, so it's only a guess, but I'd hope that after three rounds you'd have an interesting assortment of crow's-feet illustrated and you'd know some things about the characters.

Facial Resources:
I'm not sure what's legal in the way of grabbing images to retouch and present here, but I also didn't want to leave you with merely a mandate to supply big faces. So here's what I'm doing. There's a list of links below that seem like good resources. Either import faces from the following links, into a graphics editor and tweak and resize them for printing or just print them so they fill the page. These should get you started — I'm particularly fond of the first site.

A site dealing with computer-composited faces
One of what must be tons of modeling sites
Another
Another composite face.

Also, the software used by that top link is available here. If you wanted to morph a few pictures together from the net so that any trace of their origin was gone and so that they would be pretty generic, this would be a good tool. I hope to find time to do this in the next few days and I'll post a face or two here if that works out. And if you do that, let me know!



If anyone has suggestions or comments, I'd love to hear them — particularly improvements to the situation-word table.

02 October 2008

Recycling old T-shirts into underwear

So after Chris gave me his blessing on the purchase of the new sewing machine, and then proceeded to hand me a large stack of mending, I've had to learn when to mend, and when not to. The jeans were all worth mending, but the T-shirt I found in the stack was not. It was full of holes along the shoulder seams, around the neck band, and occasional holes peppered the bodice as well.


It was ready for the rag pile, and fortunately it didn't take much convincing to get Chris to agree. The sheer volume of patches would have made it uncomfortable. He did ask that I keep the fabric to use as patches for other mending that needs to be done, and that seemed reasonable.

But then, I found the pattern review site, which for sewers, is pretty sweet: http://sewing.patternreview.com

And you know what I found? That folks over there took old T-shirts and turned them into underwear. Now that is clever, and is a pretty good way to recycle fabric. And everything I read suggests that briefs are pretty easy. So I settled on the highly regarded Kwik Sew 2334 pattern that everyone said was simple and quick.

I also took another step that I've never done before - I traced the pattern onto newsprint paper, rather than trying to cut out the fabric using the original pattern. Newsprint isn't ideal, as it's not very transparent, but it worked well enough:


This pattern probably is easy, but I've never worked with knits before (let alone a limp, worn-out old cotton T-shirt), nor have I ever made any sort of pants before. I'm pretty familiar with the shapes that turn into bodices or skirts or sleeves, but pants? It's a bit like when your third grade teacher showed you one of those really weird maps of the world like this one:

. . . And then claimed that it really would cover a ball. Yeah, right. ;-)

So the first step was to turn the shirt into a flat piece of fabric. First I carefully cut off the sleeves, and then cut them along their bottom seams so they would lay flat. Then I cut the shoulder seams, and removed the neckband, so that I had something like this:


This left me with the bodice, which is essentially a tube of material, with no side seams to deal with. (Excellent!) Because most of the holes peppering the T-shirt seemed to be on the front, I decided to slit the tube right up what was the front of the T-shirt, in the hopes that that would put most of the holes near the ends of the fabric, and that I could avoid them better. Cutting up the front was a happy coincidence, as I'll demonstrate later. But here it is, all spread out:

Next, I joined the sleeves together because I thought (incorrectly) that I wasn't going to have enough fabric from the bodice to cut the long thin strips of material for the leg-hole bindings. If you don't know what I'm talking about, get out a pair of briefs - look at the leg holes. See how there is a strip of fabric sewn around the opening, giving it a nice finished, and reinforced look?

Anyway, I joined the sleeves together by laying one sleeve at a 90-degree angle to the other, and sewing diagonally across them, then cutting off the corner. When you open them back up, they form a continuous strip of cloth, with a diagonal seam in it, like this:

However, when I laid out the pattern, I discovered that that had been an unnecessary step, as the bodice was plenty big enough:


That strip along the bottom, is the leg-hole binding strip. It fit remarkably well. Also, see the U-shaped cut out at the top? That's what remains of the original arm holes. Remember when I talked about the happy coincidence? Well, here it is. If I hadn't cut the shirt down the front, I might not have been able to fit the pattern pieces so well. See how the dip in the arm hole fits into the dip in the pattern? Perfect.

The next issue I had to worry about was grain and stretch. For those non-sewers out there, grain refers to the way the fabric is woven, and it's the "up and down" direction of the fabric. Stretch refers to the side-to-side direction. If you are wearing a T-shirt (though this works with most fabrics), grab the bottom hem, and the collar and gently pull your hands farther apart, and you'll see that it will stretch a bit. It has some give, but doesn't stretch far. Now grab the bottom hem in two places, maybe 8 or 12 inches apart and pull your hands apart again. See how there's lot's of stretch? The up-and-down, non-stretchy direction is the grain, and the side-to-side very stretchy direction is the appropriately-named "stretch" of the fabric. This works for both wovens and knits, though it's much more evident in knits.

Well, guess what? Briefs and T-shirts have the grain and stretch oriented in exactly the same way! Which meant that when I laid out the pattern in the only way it could fit, the grain and stretch were correct. Another happy coincidence. If I'd laid it out incorrectly, the briefs would not stretch properly, or be comfortable. They'd be more like a tight tummy-control girdle rather than stretchy comfortable underwear. For those that don't sew, all pattern pieces are marked whether they should be oriented with the grain or the stretch of the fabric, so that you'll know which way to lay out the pieces on the uncut fabric.

Now, on to the sewing. Once the pattern was laid out and cut, I got to sewing. I'm far from an experienced seamstress. I can certainly follow a pattern, and I've made a few things. But I've never worked with knits, and it took some experimentation to find the right techniques. (There are entire books devoted to sewing with knits). Using the right needle helps, as well as making sure your machine has been cleaned and oiled recently. I also had to improvise a lot - like how in the world do you keep things even when you are sewing across a piece of fabric, rather than at an edge (use the adjustable blind hem foot, that's how!). I also did almost all of my seams using a zig-zag stitch, which is nice and stretchy and stretches with the fabric nicely.

I did find one mistake in my pattern instructions, which is shown at left.

If you don't spot it yourself - it's the third diagram down on this set of instructions. It's shaded wrong. The gray shading indicates the right side of the fabric, and the white indicates the wrong side. The third little drawing down should have the briefs shaded in gray (not white), with the fly flap that's flipped over the top done in white (as it's shown).

This was the first time I've ever spotted a mistake in a pattern before, and given my inexperience with sewing pants, it was very confusing. Other than that, the Kwik Sew pattern was great to work with. The pattern was printed on white paper that's a little more substantial than the brownish tissue I'm used to in Simplicty patterns. The instructions were also nice and clear aside from the mistake.

They turned out OK, though I think I messed up the fly a little - it's rather floppy, more so than it should be (see the final picture at the end of the article). I also have a bunch of sloppy seams and other amateurish mistakes. At least one seam looks like it was sewn by a drunk. I figured out what foot to use for all the other seams, which look a lot better.

But the real problem came when I got out a pair of Chris's RTW (that's ready-to-wear, AKA "store bought" for those non-sewers out there) briefs.

Uh, oh.

I measured Chris, and he has a 42.5" waist, and according to the pattern, he should wear an extra large, which is what I made. Chris's store bought briefs are a size large (not XL), and are tiny compared to the ones I made.

Chris tried them on, and found them very comfortable due to the softer fabric that I used, and while he can wear them (I was surprised that they'd even stay up, but they do), they don't fit well. For one thing, they fit loosely, rather than snugly, which is no surprise. The leg holes also gape in the back. He's going to wear them -- he's awfully sweet about this -- but I'm definitely making a large the next time.

But in the end, we went from this:


To this:


It was a fun little project.

25 September 2008

Make the World a Better Place

Cathy and I have been increasingly discussing how we can make the world a better place. Y'know, we're nobody...what can we do?!? Well, the answer is nothing -- at least if you don't try. So, these ideas that we come up with; what can we do with them? We need to catalog them and share them and solicit other ideas from other people. So we are. Right over here.

Please feel encouraged to stop by, read, let us know what you think, suggest ideas to us or maybe even write a guest column. :)

Darning Jeans

I got a new sewing machine just after the Labor Day holiday, and I have spent the last week learning how to mend jeans using the buttonhole foot, and a special darning stitch. I set the machine over a hole and start sewing, and it moved the fabric evenly back and forth for me. See my previous blog post about the new machine (Janome HT2008), or read about it on the Janome site.

Note: You can click on any of the photos to get a closer look.


Not all sewing machines do it automatically the way mine does, but many Janome models do, and other brands probably do as well. If you have a sewing machine, check to see if your machine does something similar, and if it doesn't, you can do it freehand (you move the fabric back and forth by hand) using a straight stitch and an actual darning foot (mine is actually the buttonhole foot). But that takes more skill and practice than the automatic darning feature.

Darning is a bit different than just patching a hole, and shows a lot less than patching does. It actually uses thread to cover a hole - almost as if you've re-woven the missing fabric out of thread. And if you do it right, it's nearly invisible. The downside is that patching might be slightly more comfortable (though we haven't found that darning the jeans is uncomfortable).

There are a few key components to darning jeans:
  1. Matching the thread. You must get it as close as possible to the color of the jeans. If it's not the exact shade, getting a thread that is slightly lighter is better than if it's slightly darker. A small spool of thread costs about $2.50 USD.
  2. Matching the patch, if using. Bigger holes (larger than .7cm) require a small piece of fabric to support the new thread. The patch should ALSO be as close to the color of the fabric as possible, and as with the thread, going ever so slightly lighter is better than going darker. An eighth of a yard of fabric rarely costs more than a dollar or two.
  3. A washable fabric glue stick. You use it to hold the patch in place while you are darning. It costs around $3, and lasts a LONG time.
When patching jeans, you normally use double-sided fusible interfacing to glue the patch to the hole. You cut the interfacing around the hole so that the interfacing can't be felt from the back of the hole. It also prevents the edges of the patch or the edges of the hole from unraveling further. I didn't like using interfacing to hold the patches on, for a couple of reasons. It leaves the patch rather stiff. It wasn't really uncomfortable, but that spot never really conforms to your skin the way undamaged denim does. And when you darn across a patch, the darning also leaves the patch a little stiff - there's a LOT of thread being used. So when doing a darning job, I leave out the interfacing in the hopes that eventually the repair will eventually soften, something it won't do with interfacing. I figure the thread will prevent the unraveling well enough, and that's one less layer of stiffness to make the jeans uncomfortable.

Other, less important, but worth thinking about considerations:
  1. Match the thread type with the fabric. If you are darning cotton fabric such as denim, then use an all cotton thread if possible, rather than a polyester thread. That way, as the fabric continues to fade, so too will the thread, hopefully at the same rate. However, matching the thread color is more important to me, and if I can get the exact right color, but only in a polyester thread, then I use polyester thread.
  2. Match the fiber content of the patch, with the fiber content of the garment being repaired. In other words, if you are fixing cotton jeans, then use a cotton patch. This is for the same reason as #1 above. Again, matching colors is more important to me.
This sounds complicated, but it's really not.

I had 8 pairs of jeans to repair, and 3 of them were very faded blue jeans. I took the most damaged pair, and used the fabric to repair the other two. The rest, I took to Joanne Fabrics, and found matching threads and patching fabrics. I think the materials were about $15 to repair 5 pairs of jeans.

Then, follow these steps:

  1. Cut patches for the holes. I make the patches squares or rectangles only. Cut the patch so that it extends at least 1/2 an inch past any edge of the hole. Bigger is better than smaller, because if you don't make it big enough, it's easy to catch and scrunch up the edge of the patch, making a hard lump underneath the fabric. If the diameter of the hole is less than .7 cm, I skip this step entirely. That's about the same size as the width of my pinkie finger at the tip, and is the widest the darning foot will accommodate in one pass. I also do NOT trim the frayed edges if I'm skipping the step - the fraying fabric will help support the darn.
  2. Glue the patch behind the hole on the inside of the garment. I use a washable fabric glue stick. Avoid getting the glue on the center of the patch, where it covers the hole. Wait about 5 minutes for it to set.
  3. Darn the hole using the #9 stitch (shown) and the buttonhole foot. You open out the back of the foot as far as it will go, and you do NOT pull down the buttonhole size sensor for the machine. You position the needle so it's at the lower left corner of the hole, maybe 1/2 a centimeter away from the edge. Do as many passes as you need to, to completely cover the hole and edges of the hole. When done, you can turn it 90 degrees and go over it again, if desired. If the hole is small enough to not use a patch, I try and center it just so. You can also shorten the darning pass for smaller holes.
  4. Remove the jeans from the machine, and trim your threads close to the fabric surface. I then turn the jeans to the inside, and trim the edges of the patch close to where the stitching begins.
Not including the trip to the fabric store, the entire process takes no more than 10-15 minutes per hole. (Well, at least that's how long it took me after I figured out how to do it. The first few tries took longer). And as long as I've done a good job matching everything, the repairs are remarkably hard to see. Not invisible, but only noticeable if you are looking for the spots. I've also found that the process is more invisible on blue jeans, than on other colors of jeans. The reason is that blue jeans are made of two colors of thread in the weaving process - white in one direction, blue in the other, giving the jeans a slightly variegated appearance. That variegation does a better job hiding the repair work (Think about it, what kind of carpet shows all the dirt or crud on it - a matte style, or a speckled style?). Chris has pairs of jeans in black, brown, tan, and olive, and the threads used to weave those denims tend to all be one color. It's even MORE important to match your thread and patch colors when darning jeans that aren't the standard blue.

The step-by-step photos above document a mediocre thread- and patch-matching job. (It was because of that particular pair of jeans that I got MUCH more careful when choosing colors.) The repairs are clearly noticeable. But the poor choice turned out to be advantageous - the repairs do show up nicely in the photos. Below, are some examples where the thread matched nicely.


To put things into perspective - I put 6 pairs of Chris's jeans back into circulation. To have bought them new would have cost $35 x 6= $210. The cost of the sewing machine was $350. It hasn't quite paid for itself, but it has certainly helped. And there are cheaper machines available that can do the same thing. The cheapest machines wouldn't do this automatically, but you could still do it with a darning foot and freehand darning with a straight stitch (though that takes some practice to get right).

I got a new sewing machine


Back in the mid 1970s, my mother spent an ungodly amount of money on the very first electronic sewing machine. It cost about $1200, and was the Singer Athena 2000. Evidently it was the machine to have. As someone on a sewing message board told me, "I remember when she came out and was the absolute last word in a machine in her day. So revolutionary." I was 5 or 6 years old when Mom got it, and I even used it a little bit growing up - enough that I actually knew how to thread it, though I can't claim to have learned to actually sew.

Mom upgraded to a used Bernina when I was in my late 20s or early 30s, and I just couldn't understand why. What was wrong with the Singer? But, I wasn't going to complain, as she gave me the Singer. It sat around for years - maybe six years - without getting much use ... I think my husband and I dragged it along on two cross-country moves before I ever gave sewing a serious try. But, it came with a sewing table/cabinet and every conceivable accessory (Mom was an avid and talented seamstress), so I was hesitant about replacing it.

I started sewing, and have been sewing somewhat more seriously for about two or three years now. I've made a couple of nightgowns, three capes and Halloween costumes, a dress, and a shirt for my daughter, a bathrobe for my husband and several doll quilts. I've also made valentines for my kids - my daughter got a small puffy heart-shaped pillow, and I made heart-shaped juggling bean bags for my stepson (made from red, white and black bandanna fabric with hearts and flaming skulls).

But the Singer was giving me problems. First, it really handled slippery flimsy fabrics poorly, and to date, I've made two Halloween costumes out of that sort of fabric. Skipped stitches, distorted decorative stitches, you name it. It also had a terrible tendency to suck any kind of thin fabric down into the throat plate, despite using the appropriate needle, and a straight-stitch throat plate (for those of you who don't sew - the throat plate is the small metal plate under the fabric, with a hole in it. The needle goes up and down into that hole. A straight stitch plate has a tiny hole not much bigger than a needle. It's maybe 1 mm in diameter, and it's harder for fabric to be pulled down in there. An all-purpose plate has an oblong hole, maybe 8 mm across, to accommodate stitches like zig-zag stitches, where the needle comes down on the left side and then the right).

Then after 30+ years of often heavy use, the machine was no longer reliable. It would suddenly refuse to stitch anything without forming horrible knots, suck ALL fabrics down into the bobbin area, and jam, and nothing I did - from changing needles, threads, fabrics, and re-threading would make it work. So I'd haul it up to my sewing machine repair guy, and he'd tinker with it for a few minutes for free, get it working again, and I'd go home to start sewing again. This happened three times in a row, right at the beginning of new projects. My repair guy is a nice man, but frankly, I had to drive 30-45 minutes each way, and I was getting tired of it. He also warned me that if the circuit boards went bad, it would be either very, very expensive, or impossible to repair. The boards aren't made anymore, and haven't been for years, so repair guys collect the machines to use for parts. Repairs to that part would run in the hundreds of dollars, if they could be made at all.

A year or two ago, I had asked at a local quilt shop what kind of machines they recommended, and they had given me an unhesitating and wholehearted recommendation for a Janome, just about any Janome. She felt they were reliable and easy to use. I had never heard of Janome (pronounced Juh-NO-mee), but I found out later that they were a Japanese company. I was interested in a Bernina of course, as lots of people (including my Mom) consider them the Cadillac of sewing machines. But the Swiss-made Berninas that I could afford were either new and the lowest end mechanical models, or used but so old, they didn't have the modern features I wanted. My mom's machine was a used Bernina 1130, and it was a nice machine that I could have been quite happy with, but even a 20 year old model like hers (it was made in the mid 1980s) now retails for around $1000. That's just too expensive for me at this time.

When my Singer finked out AGAIN, a friend loaned me a $70 Brother purchased at Walmart. It wasn't a great machine, but frankly, it handled the slippery, flimsy fabric FAR better than my high-end, but old machine ever did. Like night and day. But it was loud, and had none of the more modern features that I wanted. I didn't put it through its paces, but I doubt it could handle multiple layers of heavy fabrics well. That was the last straw. I had found out what a joy it was to sew on a good machine (my mother's 20-year-old Bernina), and then when a cheap machine handled a fabric BETTER than the Singer did....

So, I did some research on Janomes and liked what I saw. No one really had anything bad to say. I also saw a model called the Janome HT2008, which was quite flexible - good for nearly any kind of sewing project - quilting, home decor, and clothing, and had plenty of modern features, and 50 stitches both decorative and utility. The average price paid was around $350.

The next day, I went to my repair guy, and brought him my machine, which he again tinkered with and got running again. I asked him point blank, "Can you make this machine reliable?" And he said "You can keep it running for a few more years, but no, not really." And I said "so what's the equivalent machine in a new Janome? And he said, "look at the heart machine." He didn't have any used machines that I wanted that were in my price range (they were all too expensive!), so I tried out the "heart machine." It's a Janome HT2008 (the same model I'd read about the night before). The HT stands for "Heart's Truth" and it's a limited edition machine meant to raise awareness of heart disease in women. I tried it out, and bought it on the spot. It was $350, but Kurt gave me $30 in trade for the Singer. To put the price in perspective, I saw one new Janome that retails for $8000. I also get unlimited free lessons on how to use the features the machine offers (I've had two lessons so far).

It's got lots of great features, which you can read about it here:
Janome's web page and Brochure.

So then I took it home, a bit nervous about what Chris would say. We usually talk to each other when making big purchases like this, and I hadn't talked about it with him at all. While it wasn't exactly a whim, it wasn't far from it! But he was really great about it. He felt that it was a good thing for the household to have, and so the household paid for 1/2 of the machine, and the rest is coming out of my allowance (we both get some money each month to spend as we like). He then gave me a wicked look, and handed me a stack of jeans he'd been saving for at least 6 years and asked me to patch the holes in them. Gulp. I couldn't well refuse since a) I have the time, and b) he really was great about me buying the machine, with money so tight.

I still have the cabinet that came with the Singer, and I'm currently using it with my Janome, which fits in the cabinet perfectly. However, I don't have a bolt that fits the bottom of the Janome, and one would have to be special ordered in the right size and threading. If I did that, I'd just drill a new hole in the bottom of the cabinet. No problem - it wouldn't even show. But, as I don't have a bolt, I can't collapse the machine into the cabinet when not in use. The cabinet has a platform that's below the surface of the table, so that the machine sits down below a bit, with the sewing surface itself flush with the table. Then, when you want to put the machine away, you lift up on the platform to release it, and it tilts down at 90 degrees, and the machine dangles on its side underneath (see why a bolt is needed?). Then you flip the extended table surface up and then down on top of the hole. It's open on the underside though, so if you crouch down under the table, you can see the machine.

This is a problem for two reasons:
  1. I have a cat named Squeaky that LOVES thread, and he will, if I leave the machine out with thread on it, grab the thread and spiderweb it all around the room, and also try to eat it. That's a health hazzard for a cat, and he's already been rushed to the vet once, to have his hind legs untangled from the thread he'd dragged out (he was OK, fortunately). But he was so freaked out, biting and scratching, that I couldn't release him by myself. The open bottom is unacceptably insecure, as it doesn't keep the thread out of his reach.
  2. The machine (like most sewing machines) has what is called a "free arm". You can take part of the base off, which makes it really small. This is great when hemming pants or cuffs. You put the fabric tube AROUND the base of the machine. I do use that feature. On the Singer, I had to collapse the sewing surface to access the free arm, but because the machine was bolted in place, I had to lift up the front panel of the cabinet, collapse the machine's surface, and then sew with my arms OVER that front panel, reaching behind and below it. It was like sewing in a hole. It was a pain in the butt. I suppose I could have unbolted it, and lifted it up to the top surface but that's a huge hassle, too.
Mom's new cabinet has a "lift". You push down on the platform supporting the machine and it lifts up on some sort of hydraulic mechanism, rather than swinging or tilting up. And it's got three positions - Machine fully below the surface of table, Machine partially up, so the sewing surface is flush with the table, and all the way up, so you can access the free arm. The cabinet also fully encloses the sewing machine when not use, protecting it from kitty curiosity and fur. I want one lots and lots, but it's another $350 for a cheap one, and I'm making do with the old one for now.

I'm terrified that somehow someone will hit the mechanism that releases the cabinet platform, and the machine will fall through, but I doubt it's likely. And to put the machine away, I have to either lift the machine up and out of the cabinet, and then collapse the cabinet and store the machine on the floor, OR I leave the cabinet open, and cover the machine with a hard plastic sewing machine case that I bought. I do the latter when I'm just going to pausing for a short time to keep Squeaky from the thread. I'll pack up the machine in the case, and fold up the table, when I'm on one of my longer sewing hiatuses.

I've been sewing on it for nearly a month now, and I really, really like the machine. It's quiet, far more powerful than my old machine and a joy to use. My only negatives are that I find the markings on the throat plate hard to interpret (all Janomes have this same problem - it has both centimeter and 1/8th inch markings, and it's hard to tell which is which), and the machine doesn't have adjustable presser-foot pressure (the one and only feature the old machine had that this one doesn't). I'll get used to the former, and the latter mostly doesn't matter. I didn't change the pressure all that often on the old machine either.

Oh, did I mention the Janome has a darning stitch? You use with the buttonholer, and it darns holes pretty nicely, and I've (as promised) repaired several pairs of Chris's jeans with it, and the repairs are nearly invisible. But that's a subject for another post!

11 September 2008

Spore: six hours in

I preordered Spore from Amazon in December of 2007. It arrived yesterday. I'm talking here about my impressions.

OK, first, I have only six hours of play time in on Spore, so really, these are just first impressions. I’ve played through the first three stages and am poised to begin the civilization stage. My review of it, I’ve come to realize as I wrote the below, is unapologetically positive. I realized, of course, that I was having fun playing, but now I realize that I love the game. It has shortcomings – the controls are hard sometimes, but overall, I’m really enthusiastic.

The creature creators – particularly once you get into 3D (i.e. everything after the cellular stage) are really fun to just mess with. There are game-play repercussions to the choices of what you attach and where, but even without that, just seeing what you can do is awesome fun. In the end – regardless of how Spore lives up to expectations and hype, just the creative acts alone will make it worth $50 if I honestly appraise things (time and money).

At each stage, so far, the game-play changes significantly. It both gets more complex as you advance and also changes how you accomplish things. I’m playing an herbivore and that informs the choices I have throughout play.

In the beginning I was just hunting bits of green stuff and trying to avoid being prey. The way you grow and level (up through strata of the tide pool? down? Or maybe just in that you’re aware of things at a different scale but in the same space?) is a nice gimmick and the play remains the same but the graphics are rich enough that even though there’s not much to it, it’s fun and rewarding just playing the light game and looking around.

When you advance from one stage to the next, you are presented with a history of your development which focuses on what all you accomplished during the last stage but includes the whole history. It’s fun. Just looking at how your body has morphed at each “generation” is kind of neat – particularly since you remember back to how you were making decisions.

When you crawl out of the sea, new parts – arms and legs most obviously, become available. And you gain a third dimension. You can fight or befriend other nests of critters and you have some basic missions to fulfill to gain DNA points (or whatever – the currency that allows you to alter your form). And you can (and must, I think) build a pack of companions that will help you make friends or eat foes. I stumbled upon gliding wings and found that increasing my flight ability made it fast and fun to get around (and out of danger) in this stage. This is also the first area where maneuvering with the WASD keys was hard. Turning is something I still haven’t mastered. The mouse-look doesn’t work like it ought, I think.

This brings me to another realization about Spore. They give you enough guidance to steer you along the right path, but really figuring out how to play has enough holes in it that you’re figuring stuff out. (Now that I think about it, maybe the manual tells more – maybe even too much, I dunno, I only read the first page.) But, so far at least, the figuring out is nicely in what Vygotsky called my Zone of Proximal Development – which means that the learning task is stimulating and not discouraging.

In the third stage your form is fixed and the creator aspect of play involves dressing your tribe; designing their costume. It’s quite fun. The game play was pretty dull real-time strategy play. Harvest food, domesticate pets – though I’m not sure how to use them yet, make babies, outfit your tribe and assign them tools – that sort of thing. And then you can either impress and ally with other tribes or destroy them. I think your strategy at the beginning of this stage depends on what tools you start with. If not, that kind of sucks, but oh well. I befriended two and destroyed three – even with the intent to follow as pacific a course as I could. Destroying enemies is hardish. If you want to figure everything out for yourself, skip the rest of the paragraph.............The strategy that I settled on was to equip my entire tribe with burning torches and just attack their main building. You get slaughtered but suck up tons of their resources. You want to have built up a food supply first because as you die, you’re laying more eggs. Probably you got wiped out, but reproduced faster than them. So now, you outfit the tribe similarly and repeat the attack. This time you win. I actually hope it’s not as formulaic as all that, but it worked like that for me on my first game.

That’s about all I can think of to say just now. I’m having fun with it.

15 July 2008

CSA starts to fly


Two weeks ago I noted what our haul from our local CSA was. I just got back with the next box -- last week was a week off for the harvest. It's a nice, but small, assortment. I got maybe a cup of raspberries (that won't last twelve hours), a few radishes, one nice kolrabi, a humongous zucchini (which is not very flavorful, but will provide bulk to stew or omelette or something), a nice bunch of onions, a small amount of chard -- also a nice amount on a week when Cathy and Kivi are out of town, a bag (maybe six ounces) of spinach and another of mixed greens and two big bags of kale. Apparently the box was supposed to have just one but they had an extra and knew from previous conversations that I like kale, so they gave it to me. Booyah!

10 July 2008

Party game design

1:30 - Using Brenda Brathwaite's article, Easiest Game Design Exercise Ever I decided to make a silly little game quickly. Also, I need text-heavy stuff to do in order to practice working with my new keyboard.

Right off the bat I'm aiming for a somewhat risque party-game since I don't have any experience inventing such a thing.

1:39 - Step 1 - So let's say there are twenty spaces on our track.

1:40 - Step 2 - Must...choose...narrative... OK, so I really prefer an abstract, but I want to follow this exercise. I want to have some social play elements ( so I want it to be social like running for class president or something but kind of more grown up. Um...like a successful party host(es) or something. Yeah, that'll do -- Party Time.

2:10 - Step 3 - My first impulse was to violate the rules here, but I've gone back and decided to *really* follow this as closely as possible and see what I get. I'm going to just "go with dice" but I want there to be three or four sources of movement in step 4 and I want them to be relatively more powerful than the random movement of the dice. I want the dice to result in a distribution with a low kurtosis. What I'd really like is 3d2 or something but I think that's impractical -- flipping coins sucks compared to rolling dice. After goofing around for a bit I think I'll go with Roll three dice (d6) and take the lowest roll as the mechanic. It gives a slight chance of extraordinary movement (six spaces) but you're about 70% likely to move only one or two spaces. This also allows future developments to alter the die-mechanic.

2:49 - Step 4 - Conflict. I'm not sure about calling this conflict but I want a few position-modifying mini-games. Maybe once they're fleshed out the board will just have one of them on each space or maybe they're the result of a card-draw. The trick now is to figure out what they are. I'd like to have at least four mini-games and ideally, more. I'd like them to extensible -- fitting expansions and player-generated content in seamlessly and allowing certain Challenges (I think that's what I'm calling them) to be removed to fit the tastes of the play-group. I'd also like for the Challenges to result in a net movement of <2 spaces -- so some player(s) might advance or fall back up to two spots or maybe some of each would happen but only up to one space in each direction -- and if this were occasionally violated, no biggie.

Challenge 1: Who here has (never) done...? The way this works is that the Focus player (she who triggers the Challenge) selects a question about past deeds for which her truthful answer is "me" (indicated with a raised hand) and presents it to the crowd. (E.g. "Who here has driven over 100 MPH?" or "Who here has drawn a lover's blood with your teeth?" or "Who here has never skied?") Every other player either raises their hand, indicating that the statement is true for them too, or does nothing indicating that it is not. If no hands are raised, the focus player advances two spaces. If fewer than half the hands are raised then the focus player advances one space.

Challenge 2: Color-Match When using this Challenge, a pile of colored cards or tokens or something must be available. (For testing, I'd like to get a pile of color chips from the paint department at Home Depot or something.) The focus player select a color randomly, drawing it and revealing it to all the players. If that player is wearing a garment that is pretty close in color to drawn color (as determined by a consensus of fellow players) then the focus player has two options. If not, skip the first option below and execute the second.

2a: If the focus player is wearing a garment of close color she may opt to apply the color test rules to herself rather than seeking out the closest match as per the paragraph below. If she happens to wear the closest match in the game, then the option is moot.

2b: The player wearing a garment that is closest in color to the selected color must go back two spaces. If that player would rather, he may remove the garment and instead go forward one space.

Challenge 3: Kiss Your Neighbor When playing with this Challenge module, there is a play aid -- a card with five strata each listing one of, in order: hand, arm, lips, neck and tongue, upon which a pawn rests and moves. The pawn begins the game on the lowest (hand) space. When the focus player lands on a KYN space, he must consult the play aid and kiss one of the players adjacent to him -- the one he has kissed the fewest times if applicable, otherwise his choice. If he will not, he loses two spaces. If he kisses the neighbor in a place and manner appropriate to what is indicated in the space with the pawn, he advances one space. The focus player also has the option of kissing his neighbor as per the space below or above the pawn's current location, subtracting or adding one to the number of spaces gained. Further the pawn is moved up a space on the play aid each time a kiss is conducted earning one or two spaces gained on the victory track. The point of the kiss-location track is to escalate the passion and intimacy of the kiss. To play this appropriately, the meaning of each space should be apprehended with this in mind.

Challenge 4: A Round of Greetings The focus player is to address each other player starting with the player to her left and continuing in clockwise order as if she were the host of a party and were greeting guests as they arrive. Each greeting should include physical contact where practicable (maybe only with adjacent players if your game space doesn't permit freedom of movement), direct eye-contact and a compliment. The focus player receives two space-advances minus one for every fellow-player who thought the act implausible.

Challenge 5: Art Contest The focus player names a subject for the other players to draw. Each other player is given a small piece of paper and a pen or pencil and attempts to draw the named subject. This should take just a few minutes. The focus player then collects the drawings and judges them -- selecting a winner. The drawer of the winning picture advances one space. Then, the focus player's judgment is judged. If every player agrees with the judgment, the focus player advances two spaces. If not, but every player agrees that it was a reasonable or plausible judgment, the focus player advances one space. If not, and every player suspect the focus player of gaming the judgment then the focus player loses a space.

etc.

I'm now thinking that the way to do the board is to just assemble a small deck of cards/spaces based on the modules you're playing with and the relative frequencies desired and then shuffle them up and lay them out making a dynamic board.

5:07 - Step 5 - Oh, I'm done. There you go!

Ergonomics

I recently purchased two new pieces of hardware to improve the ergonomics of my workstations. This decision arises out of the fact that my wrists have been aching more or less constantly for a couple of years. As a programmer, I keyboard for a living and while I keep thinking of career changes that I might undertake, I don't really want to and I don't see how I could continue to provide the same standard of living for my family. Also, I've been holding the degeneration of my wrists back by wearing braces for like ten or twelve hours each day, my fingers have recently started to hurt too.

So, the first of these new devices is the Kinesis Advantage keyboard. Golly, but it's strange. This is the first document that I'm typing on it and some things are interesting. I'll let you read all the specific features and claims made by the manufacturer, but I'll note that the seemingly awkward depression in which the keys lie really does lessen the reach and flex of each finger. I am also starting to believe in the value of this device because in the (painfully long) time that it has taken me to type this short note, my unbraced wrists have been markedly pain-free. So, while it is really hard to get used to the new key-layout, I think I will and I am currently thinking that it's a good thing.

Something unexpected about this experience is that I have identified a bunch of poor typing habits that are deep-rooted in me. Apparently, I hit the Y key with my left pointer habitually. Same with the C! Like, what am I thinking? I took mandatory typing class in 5-7th grades and another semester in high school. And I type nearly as fast as I can compose my thoughts. I should know how to do this all right. And yet, I see that I also use only the left shift key under normal circumstances and I also routinely glance at the keyboard as I type. Bad me! Anyway, neat stuff to observe.

The other new piece of hardware is the Evoluent Vertical Mouse 3. The main idea is that it keeps your mouse-arm more naturally aligned. It seems to make perfect sense that that would be desirable, but it's hard to use comfortably. It is much more like a normal mouse than the new keyboard is normal, but in some ways it feels subtly more awkward. There is a slight ledge on the bottom right of the mouse's body that feels like it must be where to rest your pinky-finger. But when I do, it seems that my fingers don't line up naturally with the buttons. My pointer is on the top button (left-click) and my middle finger is lined up with the second button (I have this set up to switch between open apps) and then my ring and pinky fingers both rest on the bottom button (right-click). The two problems I'm currently experiencing with this is that using the scroll-wheel (between the pointer and middle fingers) is awkward with either finger and then the bottom button feels awkward -- maybe like it's too small for my two fingers or something. Also, these are my impressions after using it for less than an hour -- maybe I'll just get used to it and it will be second nature. Hopefully.

27 June 2008

Name-generating algorithm

I've been dabbling with algorithms to generate new, fictional names for new, fictional cultures for ages. Sometimes I just goof around, sometimes I do real research and sometimes I devise implementations. I've got some code that I've been playing with today and I decided to write about what I'm doing. As you will see, the results are not yet entirely satisfying.

Check out the short wiki article on syllable theory for some basics. There's lots more to read on the web if you want to.

The first step was to build up a potential language. I selected an incomplete, base set of phonemes with which I would work:

Co: b, f, j, k, l, p, r, st, y
Cr: b, d, ph, g, h, dge, ck, ll, m, n, p, r, s, t, v, gh, z
v: a, e, ee, o, oo, u, au, ea, eu, oa, ou, ua, ue

I chose these five years ago when I was first developing a spreadsheet that would generate all the possible syllables of certain configurations. I know that limiting the raw numbers was one concern, but I frankly don't recollect why I kept which ones. It doesn't really matter and I could swap them out as desired.

(I think that Co indicates consonants used in syllabic onset and Cr indicates consonants used in the rime. Note some, but not total, overlap.)

I was writing this up today as an element in a little game that I've been messing with so that pawns would have names and personalities. Because of this context I wanted each game to have a cohesive linguistic feel. I went with those default phonemes above and then for each game-run, limited the available elements by removing roughly 50% of them at random. (Each phoneme had a 50% chance to stay or go so really weird things could occasionally happen.)

In one example (which I'll stick to through this article), the retained phonemes look like this:
Co: j, k, p, st, y
Cr: b, ph, g, h, dge, ck, ll, m, p, r, t, v
v: oo, u, ea, oa, ou

The next step is to build syllables that the language uses. I started out accumulating EVERY syllable possible of three different schemes. But that's too much because it lead to a bunch of over-similar syllables and the language ends up feeling funny. I already had a function that trimmed an array in half as described above, so I just ran them through that.

So the three kinds of syllables that I built are: VC Rime, CVC and CV. using the above-described phonemes and trimming algorithm, I created the following syllables that would be available for use in names (or other words, for more ambitious projects):

R/Rime: oob, oodge, oock, ooll, ub, uph, uh, uck, ull, up, eall, eap, ear, oab, oaph, oag, oadge, oack, oat, oav, oum, our, ouv

CoR/CVC: joodge, jooll, jup, jeall, joaph, joag, joadge, joack, joat, koob, koodge, koock, kooll, kub, kuh, kull, kup, keall, koab, koaph, koag, koack, koat, koum, kouv, poob, poodge, pub, puck, pup, pear, poab, poag, poadge, poack, poat, poav, poum, stoob, stub, stuh, stuck, stull, stup, steap, stear, stoaph, stoag, stoadge, stoack, stoat, stour, yoob, yoodge, yoock, yooll, yub, yuph, yuh, yull, yup, yeall, yeap, yoack, yoat, yoav, youm, your

CoV/CV: jea, joa, jou, ku, koa, poo, pu, poa, pou, stoo, stea, yea, yoa

Then in order to put these together to form words, I identified (some taken from literature and some made up by me) eight configurations that were reasonably likely to produce plausible word-forms. They are:

CoR 'CVC
CoV_CoR 'CV_CVC
CoV_CoV 'CV_CV
CoR_CoR 'CVC_CVC
CoR_CoV 'CVC_CV
R_CoV 'R_CV
R_CoR 'R_CVC
CoR_R 'CVC_R

In my application, I just randomly select one as the pattern to which male names will adhere and one to which female names will. using the above syllables, my app generated the following sixty names:


female names using(CoR_CoV):
koabkoa
koagstea
koatpou
stoatyoa
stuhpu
stupjoa
stulljou
koodgeyoa
poadgestoo
poabpoa
stearku
stubyoa
stoaphpu
poobkoa
kealljoa
koollpu
joatpu
poavstea
stoagjou
stullpu
joollstea
stuckkoa
yullstea
stoatpoo
koodgepoo
stearpoo
poodgejoa
stourjea
yoodgekoa
joadgestea


male names using(CoR_R):
keallup
stoageap
koackooll
joodgeoock
stulluck
kealluh
joatouv
poatoav
stearuh
joadgeoum
yoodgeouv
koockoav
puboack
joadgeoob
yoobear
jupull
joatoat
kulloaph
joackoock
youroadge
yooboag
yoodgeoav
koockup
koackup
stooboum
koumeap
kupub
joolluh
kulloav
joadgeoab


Sadly, these are really, hideous names. They do seem to share a set of sounds and rules, but a horrible one. So, clearly, I have some work to do to avoid Joadgeoum and Koodgepoo, but I'm getting there.

If anyone wants the VB.NET class that I'm using to generate this stuff, here it is:


Imports System.Text

Public Class Language
Dim rand As New Random

Public Co() As String = {"b", "f", "j", "k", "l", "p", "r", "st", "y"}
Public Cr() As String = {"b", "d", "ph", "g", "h", "dge", "ck", "ll", "m", "n", "p", "r", "s", "t", "v", "gh", "z"}
Public v() As String = {"a", "e", "ee", "o", "oo", "u", "au", "ea", "eu", "oa", "ou", "ua", "ue"}

Public R As New List(Of String) 'VC (VCr) Rimes
Public CoR As New List(Of String) 'CVC (CoVCr) Syllables
Public CoV As New List(Of String) 'CV (CoV) Syllables

Public malePattern As wordPattern = rand.Next(0, 8)
Public femalePattern As wordPattern = rand.Next(0, 8)

Public Sub New()
Co = randomHalf(Co)
Cr = randomHalf(Cr)
v = randomHalf(v)
popR()
popCoR()
popCoV()
End Sub

Public Function getName(ByVal sex As gender) As String
Dim pattern As wordPattern
If sex Then pattern = malePattern Else pattern = femalePattern
Dim sb As New StringBuilder
For Each seg As String In pattern.ToString.Split("_")
Select Case seg
Case "Co" : sb.Append(Co(rand.Next(0, Co.Length)))
Case "Cr" : sb.Append(Cr(rand.Next(0, Cr.Length)))
Case "v" : sb.Append(v(rand.Next(0, v.Length)))
Case "R" : sb.Append(R(rand.Next(0, R.Count)))
Case "CoR" : sb.Append(CoR(rand.Next(0, CoR.Count)))
Case "CoV" : sb.Append(CoV(rand.Next(0, CoV.Count)))
End Select
Next
Return sb.ToString
End Function

Private Sub popR()
For Each seg1 As String In v
For Each seg2 As String In Cr
R.Add(seg1 + seg2)
Next
Next
R = randomHalf(R)
End Sub

Private Sub popCoR()
For Each seg1 As String In Co
For Each seg2 As String In R
CoR.Add(seg1 + seg2)
Next
Next
CoR = randomHalf(CoR)
End Sub

Private Sub popCoV()
For Each seg1 As String In Co
For Each seg2 As String In v
CoV.Add(seg1 + seg2)
Next
Next
CoV = randomHalf(CoV)
End Sub

Private Function randomHalf(ByVal a() As String) As String()
Dim output As New StringBuilder
For i As Int16 = 0 To a.Length - 1
If rand.Next(0, 2) Then
If output.Length > 0 Then output.Append(",")
output.Append(a(i))
End If
Next
Return output.ToString.Split(",")
End Function

Private Function randomHalf(ByVal a As List(Of String)) As List(Of String)
Dim output As New List(Of String)
For i As Int16 = 0 To a.Count - 1
If rand.Next(0, 2) Then
output.Add(a(i))
End If
Next
Return output
End Function

End Class

Public Enum wordPattern
CoR 'CVC
CoV_CoR 'CV_CVC
CoV_CoV 'CV_CV
CoR_CoR 'CVC_CVC
CoR_CoV 'CVC_CV
R_CoV 'R_CV
R_CoR 'R_CVC
CoR_R 'CVC_R
End Enum

26 June 2008

Conservative Justices -- I choose you!

Today!

The Supreme Court of the United States, just today, decided a case in a way that, while I think it's butt-obvious, is very, very pleasing to me. Below are some highlights from their decision (some of which I've been arguing for twenty years).

The Second Amendment protects an individual right to possess a firearm unconnected with service in a militia, and to use that arm for traditionally lawful purposes, such as self-defense within the home.
Hooray!

The “militia” comprised all males physicallycapable of acting in concert for the common defense.
Ayup!

SCALIA, J., delivered the opinion of the Court, in which ROBERTS,
C. J., and KENNEDY, THOMAS, and ALITO, JJ., joined. STEVENS, J., filed a dissenting opinion, in which SOUTER, GINSBURG, and BREYER, JJ., joined. BREYER, J., filed a dissenting opinion, in which STEVENS, SOUTER, and GINSBURG, JJ., joined.
Ouch! I'm usually with the other guys. I still don't like that Alito, but Thomas seems like a good pick -- I wonder how GW pulled that off.

The Amendment’s prefatory clause announces a purpose, butdoes not limit or expand the scope of the second part, the operativeclause.
This is specifically what I've been advocating. My friend Aaaron Hunsley helped me clarify my nascent thoughts on this in the early 90s.

So this is me doing a happy dance!

24 June 2008

Our new CSA is starting slowly

When we were in Jersey, we were members of a Community Supported Agriculture farm-coop that we really liked. The fact that it was a block from the Bristol-Myers Squibb campus where I worked was great too. But when we moved to Minnesota three and a half years ago, I couldn't find one that was a reasonable distance -- Rochester is too far for fresh produce!

But a couple months ago I found myself at the Department of Agriculture web pages and noticed a link to MN CSAs and in that directory, I found a link to The Farm at Prairie Oaks Institute which is on the outskirts of Belle Plaine -- the next town down 169 from Jordan! So I inquired and found that this was their first year doing CSA and Cathy and I decided to join them. Two weeks ago we got a preliminary box with some light offerings and today I picked up our second box of goodies.



There's a nice bunch of onions and cilantro and dill and good-sized baggies of mint and marjoram and a small salad worth of mixed greens (mustard, sorel, arugula and romaine) and wee, cute samples of broccoli and kale. The produce is still slow in coming, but I figure it'll soon be bursting forth from the ground. We also got a dozen eggs.

I need to figure out what to do with the dill and marjoram -- I can always dice and freeze, but I'd rather cook. Hmmm...

Combatting obesity

So, I'm fat. Pretty fat, but not crazy fat, I think. And I shouldn't be. I know (intellectually) how not to be. I should go vegan -- eating two salads and five fruits per day and also swim for an hour. And obesity is a chronic epidemic -- spreading as the American diet spreads. I guess at some point I'll care enough about my failing health to get serious. Hopefully it won't be too late. But anyway, enough of my background regarding obesity -- I really want to talk about public policy.

Slashdot just cited new Japanese policy that will require employers to inspect waist size of employees and be fined if they are too big. My first thought was that this was a horrible invasion of privacy and personal liberty and yadda, yadda. You know what, though? Screw that! Sometimes the greater good has a cost to be paid and sometimes, a bit of personal liberty is a worthwhile expense. So, I think this would be a really stupid thing for the US to do, not because it's unjust but because it is pointless.

It would cause hostility and discrimination and enhance low self-esteem issues and further marginalize fat folks. Which isn't necessarily all bad if it would motivate people to effect positive change. But it wouldn't. See, most Americans have no clue. There are thirty popular diets at any given time -- all of them telling you (at least a little) different stuff. Not only that, but 95% of the food in the American supermarket is junk. Not just Chef Boy-R-Dee and the candy isle. Rice-a-Roni, Hamburger Helper, canned soup, all breakfast cereal, 99% of the bread, cow's milk and all meat. Everything. And, I hope it goes without saying, it is almost *literally* impossible to eat right eating out. (OK, go to Subway and get a salad -- none of the bread if nutritive and don't get any of the dressings (maybe a fat-free dressing is also devoid of carcinogenic chemicals, but I wouldn't count on it) and that's reasonably nutritive, but not particularly exciting -- it'll do in a pinch, for sure.) If you buy normal flour from the grocer and bake your own bread, it's still garbage. What if you get whole wheat flour? It's rancid and has lost much of the grain's native value. You have to grind your own and bake right then or freeze it (for not too long!).

I don't know what life is like in Japan. Are they living like this now too? It would be dumb to institute workplace fat-checks and maintain the way of life that we have built around e.g. corn syrup. It's a stupid band-aid which entirely fails to address the problem.

If the government wants to address obesity, there are things to remediate. Craft a sensible farm bill. Incentivize small family farms, (the good, permaculturish) organic methods and local farmers markets. For God's sake, how about requiring that schools stop poisoning our children! Tax fast food and give tax breaks to genuinely healthy restaurants. I'm sure there's lots of stuff.

01 May 2008

Want $25, free?

Refer A Friend using Revolution Money Exchange
Sign up for a Paypal competitor and you get $25 free and I get $10!

25 April 2008

Buttons!: a software toy


So I've been messing around with an idea that was nagging at me for a game that I could write. Only it's not really a game. I remember one of the early Maxis Sim-* games calling itself a software toy. That's what Buttons is. It's kind of a puzzle and kind of a toy. It may turn out that it was more fun for me to make than for you to play with. And I'd kind of like to make it more of a game. If you have any thoughts on how I'd do that, I'd love to read them.

You'll see things change on the screen as you interact with it. Also note that right now there are two menu options to alter the environment.

Download the Buttons installer (for Windows) here.

18 April 2008

MMO class design: reaching balance

I just read the article at Gamasutra, MMO Class Design: Up With Hybrids! An Economic Argument in which the author analogizes the ecology of classes and player-competition within that to several economic factors. It was a good read. And it struck me that it would be really, really easy to provide one kind of balance to the class ecology by simply applying a reward multiplier (maybe just on XP if that's how your game rolls) based on nothing but the popularity of the class. If everyone detects that the fire/fire tank in CoH is uber and picks that, they might choose something else when they realize that the invul/mace tank earns xp at a rate 1.5 times as fast as the fire/fire. Right? And you could have that dynamically tuned as a weighted average based on the previous week on in-game play time or something. Then, barring stupendous gaffes in design which you've hopefully caught in testing, you can just completely avoid pissing people off when you nerf their class.

Is any game doing this? Why not?

21 March 2008

Home Game: map generation

Right, so I've been working on a map generator between other stuff at work -- like when I have to copy 90 zips from DVDs and then unzip them and deal with the 5% that are either bad media or corrupt zip files. I get a bunch of unproductive time that allows light coding and if I don't have any work-related light coding, at least I'm doing vaguely vocational research. Anyway, I think I've got the map generator to a point where it's playable. I might just build out a map with LEGO to help me visualize. (I guess I should be able to plug my output into LDRAW or something and render it on the PC, but I don't think I'll look into that in the next few days.)

Here's a sample map with a key at the bottom: (Well, grr! So it's only the right quarter or third of the map -- you get the idea.)


+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|^^^^|....|~~~~|~~~~|^^^^|~~~~|^^^^|~~~~|~~~~|....|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|^01^|.00.|~00~|~00~|^00^|~00~|^04^|~00~|~00~|.00.|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|^^^^|....|~~~~|~~~~|^^^^|~~~~|^^^^|~~~~|~~~~|..1.|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~2~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|^^^^|....|~~~~|~~~~|^^^^|~~~~|^^^^|~~~~|~~~~|....|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|~~~~|~~~~|....|....|wwww|TTTT|....|TTTT|TTTT|^^^^|....|TTTT|^^^^|....|wwww|wwww|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|~00~|~00~|.00.|.01.|w02w|T00T|.00.|T04T|T01T|^02^|.03.|T00T|^05^|.02.|w04w|w00w|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|~~~~|~~~~|....|....|wwww|TTTT|....|TTTT|TTTT|^^^^|....|TTTT|^^^^|....|wwww|wwww|~~~~|~~~~|~~~~|~~~~|~~2~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|~~~~|~~~~|....|....|wwww|TTTT|....|TTTT|TTTT|^^^^|....|TTTT|^^^^|....|wwww|wwww|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|....|wwww|TTTT|^^^^|....|TTTT|wwww|wwww|wwww|TTTT|~~~~|TTTT|^^^^|~~~~|~~~~|~~~~|~~~~|~~~~|....|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|~00~|~00~|~00~|~00~|.02.|w01w|T02T|^05^|.07.|T06T|w02w|w02w|w06w|T01T|~00~|T03T|^00^|~00~|~00~|~00~|~00~|~00~|.00.|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|....|wwww|TTTT|^^^^|....|TTTT|wwww|wwww|wwww|TTTT|~~~~|TTTT|^^^^|~~~~|~~~~|~~~~|~~~~|~~~~|....|~~~~|~~~~|~~~~|~2~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|....|wwww|TTTT|^^^^|....|TTTT|wwww|wwww|wwww|TTTT|~~~~|TTTT|^^^^|~~~~|~~~~|~~~~|~~~~|~~~~|....|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|^^^^|~~~~|~~~~|....|TTTT|....|^^^^|TTTT|~~~~|TTTT|TTTT|^^^^|TTTT|....|....|^^^^|wwww|....|....|~~~~|wwww|~~~~|....|....|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|^00^|~00~|~00~|.01.|T05T|.00.|^03^|T08T|~02~|T06T|T04T|^06^|T06T|.02.|.04.|^03^|w00w|.02.|.00.|~00~|w00w|~00~|.01.|.00.|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|^^^^|~~~~|~~~~|....|TTTT|....|^^^^|TTTT|~~~~|T1TT|TTTT|^^^^|TTTT|....|....|^1^^|wwww|....|....|~~~~|wwww|~~~~|....|....|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|^^^^|~~~~|~~~~|....|TTTT|....|^^^^|TTTT|~~~~|TTTT|TTTT|^^^^|TTTT|....|....|^^^^|wwww|....|....|~~~~|wwww|~~~~|....|....|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|~~~~|wwww|....|@@@@|....|....|TTTT|^^^^|wwww|^^^^|^^^^|^^^^|^^^^|,,,,|TTTT|^^^^|^^^^|....|....|~~~~|~~~~|wwww|TTTT|~~~~|~~~~|^^^^|TTTT|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|~00~|w00w|.00.|@03@|.01.|.00.|T06T|^06^|w06w|^08^|^06^|^06^|^05^|,04,|T06T|^04^|^02^|.04.|.01.|~00~|~00~|w00w|T04T|~00~|~00~|^01^|T01T|~00~|~00~|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|~~~~|wwww|....|@@@@|....|....|TTTT|^^^^|wwww|^^^^|^^^^|^^^^|^^^^|,,,,|TTTT|^^^^|^^^^|.2..|....|~~~~|~~~~|wwww|TTTT|~~~~|~~~~|^^^^|TTTT|~~~~|~~~~|~~~~|~1~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|~~~~|wwww|....|@@@@|....|....|TTTT|^^^^|wwww|^^^^|^^^^|^^^^|^^^^|,,,,|TTTT|^^^^|^^^^|....|....|~~~~|~~~~|wwww|TTTT|~~~~|~~~~|^^^^|TTTT|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|~~~~|....|....|~~~~|^^^^|^^^^|FFFF|~~~~|wwww|,,,,|^^^^|TTTT|FFFF|^^^^|TTTT|^^^^|TTTT|TTTT|^^^^|TTTT|^^^^|wwww|~~~~|^^^^|^^^^|^^^^|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|~00~|.03.|.03.|~00~|^06^|^04^|F08F|~05~|w10w|,13,|^12^|T10T|F07F|^10^|T08T|^04^|T02T|T06T|^06^|T05T|^03^|w05w|~02~|^03^|^03^|^03^|~00~|~00~|~00~|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|~~~~|....|....|~~~~|^^^^|^^^^|FFFF|~2~~|wwww|,,,,|^^^^|TTTT|FFFF|^^^^|TTTT|^^^^|TTTT|TTTT|^^^^|TTTT|^^^^|wwww|~~~~|^^^^|^^^^|^^^^|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|~~~~|....|....|~~~~|^^^^|^^^^|FFFF|~~~~|wwww|,,,,|^^^^|TTTT|FFFF|^^^^|TTTT|^^^^|TTTT|TTTT|^^^^|TTTT|^^^^|wwww|~~~~|^^^^|^^^^|^^^^|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|@@@@|~~~~|~~~~|^^^^|TTTT|^^^^|^^^^|wwww|^^^^|^^^^|^^^^|^^^^|wwww|,,,,|wwww|FFFF|wwww|TTTT|wwww|FFFF|~~~~|....|@@@@|wwww|^^^^|TTTT|^^^^|~~~~|....|~~~~|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|@01@|~00~|~00~|^01^|T06T|^04^|^07^|w08w|^11^|^11^|^13^|^12^|w10w|,12,|w09w|F06F|w06w|T04T|w04w|F08F|~04~|.08.|@06@|w08w|^04^|T02T|^01^|~00~|.00.|~00~|~00~|~00~|~00~|~00~|
|~~~~|~~~~|@@@@|~~~~|~~~~|^^^^|TTTT|^^^^|^^^^|wwww|^^^^|^^^^|^^^^|^^^^|wwww|,,,,|wwww|FFFF|wwww|TTTT|wwww|FFFF|~~~~|....|@@@@|wwww|^^^^|TTTT|^^^^|~~~~|....|~~~~|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|@@@@|~~~~|~~~~|^^^^|TTTT|^^^^|^^^^|wwww|^^^^|^^^^|^^^^|^^^^|wwww|,,,,|wwww|FFFF|wwww|TTTT|wwww|FFFF|~~~~|....|@@@@|wwww|^^^^|TTTT|^^^^|~~~~|....|~~~~|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|@@@@|wwww|~~~~|wwww|^^^^|TTTT|FFFF|wwww|^^^^|^^^^|wwww|^^^^|wwww|FFFF|^^^^|wwww|^^^^|^^^^|wwww|TTTT|~~~~|^^^^|wwww|~~~~|^^^^|^^^^|....|TTTT|~~~~|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|@00@|w06w|~00~|w03w|^04^|T08T|F12F|w12w|^12^|^14^|w10w|^10^|w10w|F13F|^08^|w08w|^10^|^07^|w09w|T08T|~04~|^08^|w08w|~00~|^06^|^03^|.01.|T00T|~00~|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|@@@@|wwww|~~~~|wwww|^^^^|TTTT|FFFF|wwww|^^^^|^^^^|wwww|^^^^|wwww|FFFF|^^^^|wwww|^^^^|^^^^|wwww|TTTT|~~~~|^^^^|wwww|~~~~|^^^^|^^^^|....|TTTT|~~~~|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|@@@@|wwww|~~~~|wwww|^^^^|TTTT|FFFF|wwww|^^^^|^^^^|wwww|^^^^|wwww|FFFF|^^^^|wwww|^^^^|^^^^|wwww|TTTT|~~~~|^^^^|wwww|~~~~|^^^^|^^^^|....|TTTT|~~~~|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|....|~~~~|....|wwww|@@@@|^^^^|^^^^|TTTT|~~~~|wwww|^^^^|^^^^|FFFF|~~~~|^^^^|wwww|TTTT|~~~~|TTTT|FFFF|TTTT|TTTT|FFFF|FFFF|TTTT|~~~~|TTTT|^^^^|^^^^|~~~~|~~~~|~~~~|wwww|~~~~|
|~00~|~00~|.02.|~00~|.00.|w04w|@04@|^05^|^13^|T11T|~09~|w10w|^13^|^13^|F11F|~08~|^10^|w12w|T13T|~04~|T07T|F11F|T09T|T09T|F08F|F08F|T08T|~04~|T07T|^01^|^00^|~00~|~00~|~00~|w01w|~00~|
|~~~~|~~~~|....|~~~~|....|wwww|@@@@|^^^^|^^^^|TTTT|~~~~|wwww|^^^^|^^^^|FFFF|~~~~|^^^^|wwww|TTTT|~~~~|TTTT|FFFF|TTTT|TTTT|FFFF|FFFF|TTTT|~~~~|TTTT|^^^^|^^^^|~~~~|~~~~|~~~~|wwww|~~~~|
|~~~~|~~~~|....|~~~~|....|wwww|@@@@|^^^^|^^^^|TTTT|~~~~|wwww|^^^^|^^^^|FFFF|~~~~|^^^^|wwww|TTTT|~~~~|TTTT|FFFF|TTTT|TTTT|FFFF|FFFF|TTTT|~~~~|TTTT|^^^^|^^^^|~~~~|~~~~|~~~~|wwww|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|....|~~~~|....|TTTT|wwww|~~~~|wwww|^^^^|FFFF|^^^^|^^^^|^^^^|^^^^|^^^^|~~~~|FFFF|TTTT|wwww|FFFF|FFFF|^^^^|^^^^|TTTT|~~~~|wwww|^^^^|,,,,|....|....|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|.00.|~00~|.02.|T06T|w08w|~03~|w11w|^16^|F15F|^15^|^16^|^15^|^15^|^13^|~07~|F08F|T08T|w11w|F15F|F11F|^13^|^11^|T08T|~04~|w06w|^06^|,08,|.00.|.01.|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|....|~~~~|....|TTTT|wwww|~~~~|wwww|^^^^|FFFF|^^^^|^^^^|^^^^|^^^^|^^^^|~~~~|FFFF|TTTT|wwww|FFFF|FFFF|^^^^|^^^^|TTTT|~~~~|wwww|^^^^|,,,,|....|....|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|....|~~~~|....|TTTT|wwww|~~~~|wwww|^^^^|FFFF|^^^^|^^^^|^^^^|^^^^|^^^^|~~~~|FFFF|TTTT|wwww|FFFF|FFFF|^^^^|^^^^|TTTT|~~~~|wwww|^^^^|,,,,|....|....|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|....|^^^^|TTTT|....|~~~~|wwww|^^^^|^^^^|^^^^|^^^^|^^^^|~~~~|FFFF|^^^^|^^^^|TTTT|^^^^|~~~~|^^^^|FFFF|....|~~~~|^^^^|FFFF|^^^^|TTTT|^^^^|^^^^|^^^^|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|.02.|^05^|T05T|.06.|~05~|w11w|^10^|^14^|^16^|^19^|^16^|~14~|F16F|^12^|^10^|T12T|^09^|~08~|^11^|F12F|.13.|~09~|^11^|F10F|^07^|T08T|^06^|^02^|^07^|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|....|^^^^|TTTT|....|~~~~|wwww|^^^^|^^^^|^3^^|^^^^|^^^^|~~~~|FFFF|^^^^|^^^^|TTTT|^^^^|~~~~|^^^^|FFFF|....|~~~~|^^^^|FFFF|^^^^|TTTT|^^^^|^^^^|^^^^|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|....|^^^^|TTTT|....|~~~~|wwww|^^^^|^^^^|^^^^|^^^^|^^^^|~~~~|FFFF|^^^^|^^^^|TTTT|^^^^|~~~~|^^^^|FFFF|....|~~~~|^^^^|FFFF|^^^^|TTTT|^^^^|^^^^|^^^^|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|wwww|....|^^^^|^^^^|TTTT|~~~~|^^^^|^^^^|FFFF|^^^^|^^^^|^^^^|^^^^|~~~~|FFFF|^^^^|FFFF|^^^^|^^^^|,,,,|^^^^|^^^^|^^^^|FFFF|FFFF|....|~~~~|wwww|^^^^|^^^^|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|w01w|.03.|^02^|^06^|T08T|~06~|^10^|^12^|F12F|^12^|^16^|^15^|^13^|~09~|F11F|^09^|F10F|^12^|^15^|,14,|^13^|^11^|^11^|F13F|F08F|.04.|~02~|w04w|^04^|^01^|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|wwww|....|^^^^|^^^^|TTTT|~~~~|^^^^|^^^^|FFFF|^^^^|^^^^|^^^^|^^^^|~~~~|FFFF|^^^^|FFFF|^^^^|^^^^|,,,,|^^^^|^^^^|^^^^|FFFF|FFFF|....|~~~~|wwww|^^^^|^^^^|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|wwww|....|^^^^|^^^^|TTTT|~~~~|^^^^|^^^^|FFFF|^^^^|^^^^|^^^^|^^^^|~~~~|FFFF|^^^^|FFFF|^^^^|^^^^|,,,,|^^^^|^^^^|^^^^|FFFF|FFFF|....|~~~~|wwww|^^^^|^^^^|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|^^^^|....|TTTT|wwww|....|^^^^|wwww|wwww|wwww|~~~~|^^^^|FFFF|,,,,|FFFF|^^^^|wwww|TTTT|TTTT|....|^^^^|^^^^|^^^^|FFFF|^^^^|FFFF|FFFF|^^^^|FFFF|wwww|~~~~|....|~~~~|TTTT|~~~~|~~~~|
|~00~|^00^|.00.|T01T|w04w|.02.|^10^|w07w|w08w|w11w|~08~|^13^|F16F|,15,|F14F|^16^|w12w|T12T|T09T|.12.|^14^|^16^|^18^|F16F|^15^|F09F|F08F|^07^|F08F|w06w|~02~|.03.|~00~|T02T|~00~|~00~|
|~~~~|^^^^|....|TTTT|wwww|....|^^^^|wwww|wwww|wwww|~~~~|^^^^|FFFF|,,,,|FFFF|^^^^|wwww|TTTT|TTTT|....|^^^^|^^^^|^^^^|FFFF|^^^^|FFFF|FFFF|^^^^|FFFF|wwww|~~~~|....|~~~~|TTTT|~~~~|~~~~|
|~~~~|^^^^|....|TTTT|wwww|....|^^^^|wwww|wwww|wwww|~~~~|^^^^|FFFF|,,,,|FFFF|^^^^|wwww|TTTT|TTTT|....|^^^^|^^^^|^^^^|FFFF|^^^^|FFFF|FFFF|^^^^|FFFF|wwww|~~~~|....|~~~~|TTTT|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|^^^^|....|TTTT|TTTT|^^^^|FFFF|^^^^|^^^^|^^^^|wwww|TTTT|TTTT|~~~~|^^^^|....|^^^^|wwww|~~~~|@@@@|****|^^^^|^^^^|^^^^|wwww|^^^^|^^^^|wwww|TTTT|....|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|^00^|.01.|T01T|T04T|^04^|F04F|^09^|^16^|^12^|w14w|T16T|T10T|~09~|^10^|.13.|^11^|w13w|~12~|@17@|*18*|^15^|^15^|^12^|w13w|^07^|^06^|w06w|T03T|.01.|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|^^^^|....|TTTT|TTTT|^^^^|FFFF|^^^^|^^^^|^^^^|wwww|TTTT|TTTT|~~~~|^^^^|....|^^^^|wwww|~~~~|@@@@|****|^^^^|^^^^|^^^^|wwww|^^^^|^^^^|wwww|TTTT|....|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|^^^^|....|TTTT|TTTT|^^^^|FFFF|^^^^|^^^^|^^^^|wwww|TTTT|TTTT|~~~~|^^^^|....|^^^^|wwww|~~~~|@@@@|****|^^^^|^^^^|^^^^|wwww|^^^^|^^^^|wwww|TTTT|....|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|wwww|^^^^|TTTT|^^^^|TTTT|^^^^|FFFF|FFFF|^^^^|~~~~|TTTT|~~~~|wwww|wwww|^^^^|....|~~~~|wwww|@@@@|,,,,|~~~~|wwww|^^^^|~~~~|^^^^|FFFF|^^^^|~~~~|wwww|~~~~|....|~~~~|~~~~|
|~00~|~00~|~00~|w02w|^01^|T04T|^07^|T06T|^05^|F05F|F07F|^11^|~08~|T12T|~09~|w12w|w11w|^09^|.13.|~08~|w14w|@18@|,17,|~13~|w15w|^11^|~06~|^09^|F08F|^08^|~00~|w02w|~00~|.01.|~00~|~00~|
|~~~~|~~~~|~~~~|wwww|^^^^|TTTT|^^^^|TTTT|^^^^|FFFF|FFFF|^^^^|~~~~|TTTT|~~~~|wwww|wwww|^^^^|....|~~~~|wwww|@@@@|,,,,|~~~~|wwww|^^^^|~~~~|^^^^|FFFF|^^^^|~~~~|wwww|~~~~|....|~~1~|~~~~|
|~~~~|~~~~|~~~~|wwww|^^^^|TTTT|^^^^|TTTT|^^^^|FFFF|FFFF|^^^^|~~~~|TTTT|~~~~|wwww|wwww|^^^^|....|~~~~|wwww|@@@@|,,,,|~~~~|wwww|^^^^|~~~~|^^^^|FFFF|^^^^|~~~~|wwww|~~~~|....|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|....|~~~~|....|~~~~|^^^^|TTTT|TTTT|~~~~|TTTT|FFFF|wwww|....|^^^^|TTTT|^^^^|FFFF|TTTT|TTTT|FFFF|^^^^|^^^^|^^^^|TTTT|....|^^^^|@@@@|~~~~|....|^^^^|^^^^|....|wwww|....|~~~~|~~~~|
|~00~|.00.|~00~|.01.|~00~|^05^|T02T|T06T|~04~|T09T|F10F|w10w|.11.|^08^|T10T|^08^|F05F|T08T|T11T|F14F|^12^|^16^|^12^|T14T|.16.|^13^|@11@|~06~|.10.|^06^|^04^|.04.|w02w|.01.|~00~|~00~|
|~~~~|....|~~~~|....|~~~~|^^^^|TTTT|TTTT|~~~~|TTTT|FFFF|wwww|....|^^^^|TTTT|^^^^|FFFF|TTTT|TTTT|FFFF|^^^^|^^^^|^^^^|TTTT|....|^^^^|@@@@|~~~~|....|^^^^|^^^^|....|wwww|....|~~~~|~~~~|
|~~~~|....|~~~~|....|~~~~|^^^^|TTTT|TTTT|~~~~|TTTT|FFFF|wwww|....|^^^^|TTTT|^^^^|FFFF|TTTT|TTTT|FFFF|^^^^|^^^^|^^^^|TTTT|....|^^^^|@@@@|~~~~|....|^^^^|^^^^|....|wwww|....|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|....|wwww|~~~~|....|^^^^|^^^^|^^^^|^^^^|wwww|,,,,|^^^^|TTTT|wwww|TTTT|^^^^|^^^^|^^^^|TTTT|wwww|^^^^|^^^^|^^^^|FFFF|~~~~|^^^^|FFFF|wwww|^^^^|wwww|TTTT|~~~~|^^^^|~~~~|
|~00~|~00~|~00~|.00.|w01w|~00~|.00.|^05^|^08^|^08^|^06^|w07w|,10,|^06^|T04T|w05w|T04T|^08^|^10^|^09^|T10T|w13w|^10^|^09^|^10^|F10F|~04~|^08^|F08F|w06w|^01^|w02w|T00T|~00~|^01^|~00~|
|~~~~|~~~~|~~2~|....|wwww|~~~~|....|^2^^|^^^^|^^^^|^^^^|wwww|,,,,|^^^^|TTTT|wwww|TTTT|^^^^|^^^^|^^^^|TTTT|wwww|^^^^|^^^^|^^^^|FFFF|~~~~|^^^^|FFFF|wwww|^^^^|wwww|TTTT|~~~~|^^^^|~~~~|
|~~~~|~~~~|~~~~|....|wwww|~~~~|....|^^^^|^^^^|^^^^|^^^^|wwww|,,,,|^^^^|TTTT|wwww|TTTT|^^^^|^^^^|^^^^|TTTT|wwww|^^^^|^^^^|^^^^|FFFF|~~~~|^^^^|FFFF|wwww|^^^^|wwww|TTTT|~~~~|^^^^|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|~~~~|~~~~|wwww|....|TTTT|....|....|^^^^|^^^^|^^^^|wwww|^^^^|,,,,|TTTT|TTTT|^^^^|^^^^|TTTT|FFFF|TTTT|^^^^|,,,,|^^^^|....|wwww|TTTT|wwww|~~~~|~~~~|~~~~|....|~~~~|~~~~|
|~00~|~00~|~00~|~00~|~00~|w01w|.00.|T02T|.05.|.04.|^04^|^06^|^04^|w10w|^04^|,04,|T04T|T07T|^06^|^06^|T11T|F10F|T10T|^09^|,11,|^09^|.05.|w06w|T04T|w02w|~00~|~00~|~00~|.01.|~00~|~00~|
|~~~~|~~~~|~~~~|~~~~|~~~~|wwww|....|TTTT|....|....|^^^^|^^^^|^^^^|wwww|^^^^|,,,,|TTTT|TTTT|^^^^|^^^^|TTTT|FFFF|TTTT|^^^^|,,,,|^^^^|....|wwww|TTTT|wwww|~~~~|~~~~|~~~~|....|~~~~|~~~~|
|~~~~|~~~~|~~~~|~~~~|~~~~|wwww|....|TTTT|....|....|^^^^|^^^^|^^^^|wwww|^^^^|,,,,|TTTT|TTTT|^^^^|^^^^|TTTT|FFFF|TTTT|^^^^|,,,,|^^^^|....|wwww|TTTT|wwww|~~~~|~~~~|~~~~|....|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|~~~~|....|~~~~|~~~~|....|^^^^|TTTT|~~~~|wwww|wwww|TTTT|^^^^|wwww|TTTT|TTTT|~~~~|^^^^|^^^^|^^^^|TTTT|^^^^|FFFF|~~~~|wwww|wwww|....|TTTT|....|wwww|TTTT|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|~00~|.00.|~00~|~00~|.03.|^04^|T03T|~01~|w07w|w04w|T06T|^04^|w01w|T03T|T06T|~04~|^09^|^09^|^10^|T07T|^11^|F10F|~05~|w07w|w04w|.02.|T02T|.02.|w02w|T03T|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|~~~~|....|~~~~|~~~~|....|^^^^|TTTT|~~~~|wwww|wwww|T1TT|^^^^|wwww|TTTT|TTTT|~~~~|^^^^|^^^^|^^^^|TTTT|^^^^|FFFF|~~~~|wwww|wwww|....|TTTT|....|wwww|TTTT|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|~~~~|....|~~~~|~~~~|....|^^^^|TTTT|~~~~|wwww|wwww|TTTT|^^^^|wwww|TTTT|TTTT|~~~~|^^^^|^^^^|^^^^|TTTT|^^^^|FFFF|~~~~|wwww|wwww|....|TTTT|....|wwww|TTTT|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|wwww|....|....|TTTT|^^^^|TTTT|^^^^|wwww|....|TTTT|^^^^|FFFF|TTTT|~~~~|^^^^|....|wwww|wwww|^^^^|TTTT|....|....|~~~~|wwww|~~~~|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|~00~|~00~|~00~|~00~|w02w|.00.|.00.|T03T|^02^|T05T|^03^|w04w|.01.|T02T|^05^|F10F|T08T|~05~|^10^|.06.|w09w|w04w|^06^|T04T|.04.|.02.|~00~|w02w|~00~|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|wwww|....|....|TTTT|^^^^|TTTT|^^^^|wwww|....|TTTT|^^^^|FFFF|TTTT|~~~~|^^^^|....|wwww|wwww|^^^^|TTTT|....|.1..|~~~~|wwww|~~~~|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|wwww|....|....|TTTT|^^^^|TTTT|^^^^|wwww|....|TTTT|^^^^|FFFF|TTTT|~~~~|^^^^|....|wwww|wwww|^^^^|TTTT|....|....|~~~~|wwww|~~~~|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|^^^^|~~~~|....|....|~~~~|TTTT|^^^^|~~~~|^^^^|TTTT|^^^^|^^^^|wwww|~~~~|wwww|wwww|....|....|~~~~|TTTT|~~~~|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|^02^|~00~|.00.|.00.|~00~|T05T|^02^|~01~|^02^|T08T|^06^|^06^|w08w|~02~|w05w|w04w|.01.|.01.|~00~|T01T|~00~|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|~~~~|~~~~|~~1~|~~~~|~~~~|~~~~|~~~~|~~~~|^^^^|~~~~|....|....|~~~~|TTTT|^^^^|~~~~|^^^^|TTTT|^^^^|^^^^|wwww|~~~~|wwww|wwww|....|....|~~~~|TTTT|~~~~|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|^^^^|~~~~|....|....|~~~~|TTTT|^^^^|~~~~|^^^^|TTTT|^^^^|^^^^|wwww|~~~~|wwww|wwww|....|....|~~~~|TTTT|~~~~|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|@@@@|~~~~|....|~~~~|@@@@|~~~~|~~~~|^^^^|^^^^|^^^^|^^^^|^^^^|^^^^|....|^^^^|^^^^|^^^^|^^^^|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|@00@|~00~|.00.|~00~|@00@|~00~|~00~|^03^|^02^|^04^|^04^|^03^|^03^|.02.|^05^|^02^|^07^|^05^|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|@@@@|~~~~|....|~~~~|@@@@|~~~~|~~~~|^^^^|^^^^|^^^^|^^^^|^^^^|^^^^|....|^^^^|^^^^|^^^^|^^^^|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|@@@@|~~~~|....|~~~~|@@@@|~~~~|~~~~|^^^^|^^^^|^^^^|^^^^|^^^^|^^^^|....|^^^^|^^^^|^^^^|^^^^|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|~00~|
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~1~~|~~~~|~~~~|~~2~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|~~~~|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+

The border all around each tile shows the terrain. In the center, the top row shows the elevation and the next row shows any special resources or occupants (if any)












LEGO colorTerrainSymbolPossible Special Resources
light greyrock^(metal, flint, ruby)
bluewater~(fish, shellfish, pearl)
beigesand.(salt, whitesand, diamond)
greenjungleT(exotic plants, exotic wood, emerald)
yellowprarie,(megafauna, farmland, tar)
redlava!(sulfur, hotsprings, steel)
whiteice*(coal, amythist, mysterious artifacts)
orangefungal waste@(medicine, mana/isotopes, glowstone)
oliveswampw(peat, exotic animals, methane)
brownforestF(exotic wood, exotic animals, spring)