Saturday, December 24, 2011

Year-end Letter

Hello all! In the revered tradition of year-end updates on our lives, we'd like to let everyone know how Drek, Child, and Ash are surviving the punishing, temperate climate of California.

Hanging Christmas lights in the dead of San Diego winter
In a year full of raising a kid, buying a house, and holding down a job, our family's crowning achievement, of course, was getting chickens. Four of them, although only one seems to be laying eggs, and then only once every few days. A few days ago, another chicken made a half-hearted effort leading to a marble-sized egg which was more of hors d'oeuvres than a meal. Lazy chickens. Little do they know that their carefree, freeloading era is near its end. As the old saying goes, "An egg in the fridge is worth two in the chicken." Those who don't produce end up as dinner. Or so Drek's boss tells him on a regular basis.

Speaking of 5D Robotics, Drek has managed to hold down a job for a full year. Even better, he's quelled nearly all the robotic revolutions he's instigated. For those worried about robots taking over the world, don't be—the end will be swift and painless. The company is doing well, having moved to a larger building nearly a 400 foot trek from the old one. The “big bay” itself in the new building is nearly the size of our old digs, with plenty of room to get a robot up to speed before slamming it into a closed door (protip: laser rangefinders do not handle highly absorbent paint well).

As winter approaches, Drek misses his yearly tradition of snow cave camping, but he's taking what solace he can in weekly visits to the beach or early morning outings to the neighborhood Frisbee golf course.
 
Child spent 2011 taking care of a Sunday School class of fourteen teenagers, a new house, a ten-year-old car, a two-year girl, and four chickens. It's totally understandable how confusions could arise, with the occasional chicken sitting up for dinner at the table or Ash locked in the chicken coop on one of her “spirited” days.


The most beautiful woman in the world
Child and Ash took the brunt of the enjoyment of the aforementioned zoo passes, visiting once a month at least. The passes also gained them access to the Safari park, which supplies much of the animals to the San Diego and other zoos.

The future of Humanity
The zoo is located near La Jolla, yet another of the beaches that dot the California landscape. At La Jolla, Child and Drek got to experience scuba diving for the first time, at which Child excelled but which involved a little too much water for Drek's taste (Drek prefers his beaches above sea level and boat engines not leaking oil slicks into his mouth). As beginners, they stayed in a shallow, churned-up lagoon, the theory apparently being that the less visibility there was, the more likely they'd be to want to return in hopes of actually seeing something. They did see a few fish close-up, but they were chance meetings in the murk and as much of a surprise to both diver and fish. Still, they (Drek and Child, not the fish) enjoyed it enough to probably attempt it again—preferably somewhere tropical.


Scuba diving (brochure picture)

Scuba diving (actual picture)
One of Redacted's primary accomplishments was buying their first house. Having had enough of wall-sharing neighbors testing their sound systems at 11 pm at night, upstairs dogs peeing onto their porch, and walking through a fog of cigarette smoke on their way to their car in their Sunday clothes, they decided to leave that world behind for the relaxing, care-free life of a home-owner.
Listing photo of new home in Vista, CA (lawn photoshopped in by real estate company)
The first month in their home, they received a visit from a representative of the water company. They were informed that their home was using enough water to supply a small village and that if they weren't, in fact, operating a clandestine water-park, they might want to get that looked at. As they found out, their home was leaking water underneath the cement foundation, which according to the plumber was “a mite hard to get to.” That's plumber-speak for “we're just going to cut off your pipes at the foundation and route everything through the ceiling instead,” or more succinctly, “Looks like I'm going to Hawaii this year.” Three days and one vacation package to Hawaii later, the Redacteds were able to shower again and reestablish social contact.

A few days later, cleaning up the backyard became a priority when the next-door neighbor asked if the Redacteds were growing marijuana back there (no). A few days later, Drek met the back-fence neighbor and mentioned this anecdote to him with a laugh. The back-fence neighbor didn't laugh. “I grow marijuana. For my injured back, you know. But never around the kids.” Oh, good.

Interesting aspects to home-ownership aside, it's been enjoyable having a garden, chickens, and yes, neighbors at property-line distance. Our backyard is big enough for tents, so everyone is welcome to visit, as long as they don't mind the possibility of a chicken slipping into their sleeping bag with them.

Friday, December 16, 2011

This may be the height of nerdiness, but the sheer length and impenetrableness of the following compiler error message amused me so much I decided to post it.

Yes, it's a single error message, for one line of code:

error: no match for ‘operator&&’ in ‘behaviorOption.std::_Rb_tree_iterator<_Tp>::operator* [with _Tp = std::pair<const int, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >]()->std::pair<const int, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::second.std::map<_Key, _Tp, _Compare, _Alloc>::find [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >](((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)(& std::basic_string<char, std::char_traits<char>, std::allocator<char> >(((const char*)"reportParams"), ((const std::allocator<char>&)((const std::allocator<char>*)(& std::allocator<char>()))))))) && std::operator== [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >*)behaviorOption.std::_Rb_tree_iterator<_Tp>::operator* [with _Tp = std::pair<const int, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >]()->std::pair<const int, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::second.std::map<_Key, _Tp, _Compare, _Alloc>::operator[] [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >](((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)(& std::basic_string<char, std::char_traits<char>, std::allocator<char> >(((const char*)"reportParams"), ((const std::allocator<char>&)((const std::allocator<char>*)(& std::allocator<char>()))))))))), ((const char*)"true"))’

"Oh, yes, I clearly see what my mistake was.  Using the C++ Standard Library."

Sunday, November 13, 2011

Child made me a wonderful Halloween costume this year: 



Those poor chickens had no idea who they were up against.  It was a hard-fought battle, four-on-one, but let's face it, the outcome was never really in question.  Besides, there's nothing dishonorable with a retreat in the face of superior numbers.

While strolling through downtown as part of the city's Halloween activities, I noticed this sign on one of the storefronts:


The "around back in alley" part would really seal the deal for me, if I were looking to sell my gold or silver.  You can tell just from that that you're dealing a an upstanding, reputable businessperson.




Friday, November 04, 2011

Function transformations

I wish I had a little cheat-sheet like this during my math classes:

Given vertical translation a (+ to shift up, - to shift down), vertical scaling b (larger to grow, smaller to shrink), horizontal translation c (+ to shift right, - to shift left), and horizontal scaling d (larger to grow, smaller to shrink), the function transformation would be:

(f((x-c)/d)+a)/b

You can pick and choose values.  If you don't have a or c, replace with 0.  If you don't have b or d, replace with 1.

Assume our function f was the sine function.  sin(x):



Say we wanted to shift the whole function to the right by +1, i.e. up the x-axis.  c=1 and our transformation would be sin(x - [+1]):



Note how the graph used to cross the x-axis at 0 (red), but now crosses it at 1 (green).

Say we now wanted to stretch it longer, i.e. horizontally scale it.  Maybe stretch it twice as long.   If we choose a horizontal scaling factor of  d=2, our new function would be sin((x-1)/2):


Now perhaps we want to shift it upwards, e.g. a=1.  Our new function is sin((x-1)/2)+1:

And finally, we want to stretch our function in the vertical axis, perhaps also by double, so b=2.  (sin((x-1)/2)+1)*2:

 Before, it ranged from a minimum y of 0 to a maximum y of 2, now the maximum y is 4.

Monday, October 31, 2011

Halloween

Today I biked into work in full ninja regalia.  There were a few honks, a few shouts--presumably of fear, or perhaps in surprise at seeing a bike travel by itself--and an "Avast, ye scurvy dog!" emanating from a pirate sword being waved out a car window.

At a stop light, a "pro" biker pulled up beside me wearing spandex tights, black/lime-green socks, and a neon-yellow logo-covered shirt.  "Nice costume!" he said.  "Likewise," I answered.  He seemed a little huffy as he left me in the dust, but I'm not sure why.

Arriving at the back door of work, my ninja-invisibility came in handy as I made a less-than-graceful dismount from my bicycle, thanks to the baggy ninja pants.  Walking to the front of the building to assassinate my boss and assume his position, I saw three visitors from another company approaching the front door, so I opened it for them.  They stopped, looking a little confused--probably terrified--checked the company name on the window, glanced at each other, then finally approached.  I took pity on them and lowered my mask, calming their fears.  They didn't offer to shake my hand though.  Probably afraid of being shurikened.

This afternoon, we're having a barbecue with them using a new grill the company just bought.  I'll probably demonstrate how I can hold fire in my hand without getting burned.  I'll let you know how it goes.

Thursday, October 20, 2011

War Update, Plus Work Productivity Note

After the last three public executions, the mice decided to lie low for a while.  We didn't hear a peep from them until last night, when a scout foolishly ventured into the garage while we were paper mâché-ing jack-o-lanterns for Webelos.  He was quickly apprehended and incarcerated, then met a swift end at dawn at the hands of our chickens.

On a different note, my productivity at work has soared since I blocked a few websites in my /etc/hosts file.  I realized I had gotten in the habit of working, then every time I hit a complicated spot, I'd almost instinctively switch to a browser to read a quick Slashdot article or CNN report.  The waste of time was adding up quickly, so I decided to block a handful of sites for myself at work.

127.0.0.1 ksl.com
127.0.0.1 cnn.com
127.0.0.1 slashdot.org
127.0.0.1 failblog.org
127.0.0.1 espn.com

It's worked surprisingly well over the past couple weeks.  Even though I could unblock them in a few seconds, the very fact that I'd have to jump through a hoop reminds me that I'm supposed to be focusing on work.

Sunday, October 16, 2011

Camping Trip

Friday and Saturday was our Elder's Quorum camping trip.

My wife blogged about it from her end and was fairly accurate in her description of the event being presented as a way to work off some testosterone poisoning. There were promises of guns, fires, possibly explosions, and definitely no kids.


There was a hairy road to get to our remote wilderness campsite, but we all made it alive.  There were seven of us, four of who were auto mechanics, so the campfire conversation was distinctly auto-oriented.  The moon was nearly full that night and it was surprisingly bright, which led directly to The Incident.

About 11 p.m, as we sat around the campfire, the manager of the property (who was also camping with us) told us that the narrow, rutted dirt road we had come up continued on to the top of a nearby peak.  One of the mechanics had brought an old BMW that he had fixed up Baja-style, and he promptly jumped up.  "It's bright enough out here," he said.  "I'm going to go check it out.  Who wants to come?"

Another guy took him up on his offer and a moment later, the two of them were roaring up the dirt track towards the top of the mountain.  The property manager watched them go, then said, "They're going to get stuck.  There's no room to turn around on the road."

There was silence for a moment.  "You probably should have told them that before they left," someone finally suggested.

The property manager shrugged.  "They said they wanted an adventure."

They apparently had one, because an hour later they came hiking on foot back down the mountain.  As they later explained, they had reached the end of the road, where there was a small dirt patch.  It was just large enough that with their small car, they probably could have done a hundred-point turn and ended up facing back down the hill.  Being 20 year old guys, the thought of doing it that way didn't even enter their minds and the driver decided to try to gun his engine, spin out on the dirt, and swing the car in a circle.

All he succeeded in doing was going off the road and nearly rolling down the mountain, fortunately stopped from doing so by the brush on the side of the road.  The car was holding on precariously with two tires, necessitating cautious climbing out through the driver side door for both of them.

"We'll get it in the morning," said the property manager, unperturbed.


The next morning, we started up the mountain in a pickup truck.  The goal was to somehow use the pickup truck to rescue the car, but true to the form of all ill-fated rescue missions, we only succeeded in nearly getting the pickup truck stuck.  It was only "nearly" and not "completely" because we ended up physically lifting up the rear end of the pickup truck and swinging it around. 


Fortunately, that led to the realization that if seven guys could lift up the tail end of a pickup truck, surely we could heft a small Baja-style BMW.  We finished the hike up the mountain on foot and finally arrived at the car.



It was dangling pretty solidly over the edge of the hill, but it was nothing we couldn't handle.  The Elder's Quorum president gave a stirring speech based on Elder Utchdorf's talk, "Lift Where You Stand," and we manually hefted it out.

Unfortunately the first video section was fairly large and was rejected by Blogger.  This second section I videotaped is just as good though, because it's shorter and still demonstrates the prowess of our biceps.

video


So all the people and vehicles survived, but one casualty of the event was my sock, forgotten by the campfire as it dried out from the previous night's dew.  It's the tragedies in life that make us stronger, though, so it was probably a good character-building experience.  And a reminder to bring a spare pair of socks next time.


We finished the morning on a lighter note, shooting large amounts of ammunition from a wide variety of weapons.  The cows in the nearby field cautiously moved to the far side of their enclosure, but the wives would be pleased to know that we were extremely safe and that the only casualties during this portion of our event were about 250 clay pigeons and a variety of soda pop cans and assorted campfire detrius.

 We even cleaned up when we were done.

Defense News Feature

We're in the news!  Our partner, DRS, demoed our joint product at a conference in Washington, D.C.  where Defense News did a feature on it.


Sunday, October 09, 2011

The War is On

This morning, I woke to find that a mouse had brazenly eaten the cheese from the mousetrap with the unmitigated audacity to not die in it.  Even more offensive, he left a taunting note to the effect of "Sucker!" behind.

Okay, he may not have left a note, per se, but I could tell he had thought of it.  I reset the trap with the cheese embedded deeper than a CNN journalist in Iraq and placed it back under the sink.

An hour later, a spider the size of the hamburgers in Cloudy With a Chance of Meatballs was discovered in the hallway to much shrieking and violent jumping about.  My wife was also a little startled by it.  I quickly vacuumed it up, then extracted the plastic vacuum container to empty it out.  Imagine my surprise when I discovered two mice saboteurs inside, a little wide-eyed and windswept but very much alive.

Caught red-handed, their protests of innocence did them no good and I delivered them to the gallows.  Our chicken executioners made short work of one, but let the other escape to warn his comrades. 

The stakes have been raised.

Saturday, October 08, 2011

No honor among mice

For the past week I've been hearing mysterious rustlings in the walls and under cupboards.  We've had a wet week too, which led me to suspect that a gang of mice had been  driven inside.  On my near-daily meander through the hardware store today, I spotted mice traps and got a package.  When I got home, dinner was ready so I placed a mouse trap under the sink and sat down to eat.

By cleanup time, we had our first victim.  Interestingly, the cheese I had placed on the trap was gone, so either he had gobbled it down then went back to lick the grease off the trap trigger, or another mouse had crawled over the first one's dead body to get to it.  Either way, it doesn't speak much to the intelligence of the mice, although I guess they don't make particular claims along those lines.

On the plus side, the chickens loved the mouse.  As my wife pointed out, one of the downsides of belonging to a vegetarian is that the chickens don't see much food "on the hoof," so to speak.

Yard Saling

Another good find obtained today at a yard sale: an A-frame ladder for $3. 

I felt like Patrick McManus explaining to his wife why he needed so many different types of guns.  "Well, I need an extension ladder for getting on the roof or climbing trees, then a smaller section of ladder for...well, small trees.  Then an A-frame ladder for high light bulbs and killing spiders on the ceiling, plus a step-ladder for..."

We also signed up to clean the church building this morning.  There were another handful of people there helping as well, and I overheard one mother say to her eight-year-old son, "My, you're grumpy this morning."  Personally, I couldn't really blame the kid.  Instead of watching Saturday-morning cartoons, he was cleaning bathrooms at 8 o'clock in the morning.

Moving on to yard work: over the past couple days I've been pulling weeds from our old, falling-apart asphalt driveway.  I got a tube of asphalt repair goo, but I think I grossly underestimated how much I would need.  Pulling the weeds left ravines the size of irrigation canals behind, some of which were quite possibly harboring wildlife.  A amazingly wide variety of bugs for sure.  Anyway, I'm hoping the goo will hold together the pieces of our driveway at least for another year or two.  We still have a garage door, fence, yard, painting, and a million smaller things on our list to do before we can afford that.

Thursday, October 06, 2011

Beginning of the End

I finally took the plunge.  I downloaded a password manager.

Until now, I've either remembered my passwords, used some algorithm to determine them on a per-website basis, or tracked them in my emails.  All of those had shortcomings, so I decided to try a password manager.

Using no particular criteria, I devided to try Revelation.  Simple, to the point, and for the handful of days I've used it, it's gotten the job done.  Using a password manager has its own shortcomings, but having to look up a password in a single application beats trying to find passwords in my email or guess until my account is locked.

Tuesday, October 04, 2011

Ice Shaver

The best $1 I ever spent:

Not the pumpkins: those were $3.33 each.  The ice shaver was $1 from a garage sale.  To make a delicious ice shavee, you will need the following ingredients:
  1. Ice
  2. Jello powder
Step 1: Grind up the ice

Step 2: Liberally dust it with jello powder to taste.  If you're gourmet, add a teaspoon of lemonade powder for an extra kick.


Step 3: Mix it all together.



Step 4: Hop your kid up on sugar and red dye 40 an hour before bed.  Which may explain last night's experience...

Resolution!

It's never too late to make a new resolution, so I'm going to attempt to start posting with renewed vigor.  Perhaps even daily. 

First post of the new resolution: WHY IN THE WORLD IS MY DAUGHTER STILL AWAKE at 3 AM?!?!

Thursday, August 25, 2011

Follow Me

Last week, half of our company was at the Association for Unmanned Vehicle Systems International (AUVSI) conference in Washington, D.C.  By all accounts it went well.  We may not have people hurling sacks of money at us yet, but soon enough.

One of the conference attendees uploaded a video of our follow behavior running on a robot called the Landshark, made by a company called Black-I.


Wednesday, August 17, 2011

Falcon


Friday, August 05, 2011

Summer Vacation

An overseas contact wrote the following line in an email he sent our company yesterday:

"Our company is going to be off tomorrow so I will follow up late in August."

That is no typo. Apparently most of Europe takes August off work.

How come the U.S. doesn't do that?

Scrambled Eggs

Coming home from work a couple days ago, I found out that someone had egged our house. After some questioning, my wife admitted that it had been her. She claimed our 2-year-old daughter made her do it. I tell you, what is the world coming to?

Sunday, July 17, 2011

Travels

Just got back from a business trip to Alabama.  One problem with living on the west coast is that every time you go back east, you have to wake up far too early according to the home timezone.  Since John and I arrived at our host's workplace at 8 am every morning, we met up at 7 am for breakfast and travel, which meant I was getting up around 6:15 a.m. --central time.  My body thought it was 4:15 a.m.

It's obviously worse when we travel to Boston, which I did last month and which it looks like I'll be doing again in a week.  Boston is on Eastern time, which means even earlier mornings.   It wouldn't be so bad if I could then go to bed around 9 p.m. Pacific time, but the trials and troubles of integration trips usually mean I lie awake in the hotel bed with my mind racing 100 miles per hour, trying to think through problems and find solutions and playing out scenarios in my mind for how things could have gone better.

At least our most recent trip to Alabama was a success.  Not the perfect success we could have hoped for, if such a thing exists, but a reasonable success.  There's always so many variables we have no control over, and given our time constraints, there's often no time to implement the solution we want to. 

On the last two days before the trip, I coded up a "follow" behavior.  The idea was for the robot to use the laser range-finders mounted on it to track a person and follow them around. When we were out behind our building testing it out, there were a handful of people from our neighboring businesses watching us, and it was amusing to hear their conversation.  "Do you see that?!  That's crazy!  It's following him like a dog!  That is so cool!" 

Sometimes I think I get a little jaded working with robots all day, and it isn't until I hear comments like theirs, or like the manager's at the company in Alabama, talking about how cool our work is, that I remember that it actually is a pretty cool job.

video

Monday, June 27, 2011

Chicken Run

A lot has been going on.  Fun progress with robots, a very interesting and educational business trip to Boston, Child's friend coming to visit for a couple weeks. 


And a chicken in our house.


Friday, June 17, 2011

Tithing

I've mentioned on this blog before that I pay tithing, and that I feel that I receive a lot of blessings as a result.  Here's the most recent:

Every now and then, my previous employer will call me up and ask me to do small jobs for them.  Shortly after we moved into our new house, he called me up and asked if I could do a project.  It was a fairly good-sized project, and I told him my estimate would be $1500-$2000, but I ended up turning it down because I wanted to spend my few free evening hours working on my novel rather than programming.

Well, the next day, we got a visit from the water company.  Apparently our house was using 15,000 gallons of water a day.  We called a plumber who discovered there was actually a couple leaks--one of them underneath the concrete slab that our house was built on.  The estimate?  $1590.

Well, since we had just bought a house, we had no money left.  Without the side-job from my previous employer, we would have been in trouble.  I called up my old boss, told him I'd do it, and spent the next couple weeks of evenings working on it. 

The final bill was $1725, which after I paid tithing, covered all but $40 of the plumbing bill.

Sunday, May 29, 2011

Uber-nerd

"Does dreaming about Captain Picard teaching me how to play chess make me an uber-nerd?"

"No, saying 'uber' makes you an uber-nerd."

What does this say about me?

While driving in the car yesterday, I flipped on the radio and caught the tail end of a program on NPR.  It seemed to be profiling somebody:

"He just went out and did things!  He was spontaneous.  Didn't stop to think, didn't worry about the consequences."

You know, I should be more like that guy, I thought.  I should be more spontaneous--go out and do things.  Live a little.

Then the program ended.  "This has been 'Profile of a Psychopath' on NPR," the announcer said.

Hmm.  Maybe I should be a little more careful about who I desired to emulate...

Monday, May 16, 2011

Robot Peripherals

I've been working for 5D Robotics for almost a year and a half now.  Early on, a large part of what I did was write drivers for various USB, serial, and Ethernet peripherals that we'd plug into our system.

That led to a realization.  The robots that we controlled using our Behavior ENgine were nothing more than peripherals themselves.  They plugged into the computer using the same USB, serial, or Ethernet systems as any other peripheral, and I had to write a driver for them just like any other plug-n-play device.

That realization sculpted how I designed the Behavior ENgine.  Rather than having everything centered around a robot, I designed the Behavior ENgine so a robot was nothing more than an additional peripheral.  Designing it that way has had a couple benefits. 

One, there is nothing special I have to do when I integrate our Behavior ENgine with additional robots.  I simply have to write an additional driver for the device.  That makes our Behavior ENgine highly portable between robots, if you want to view it from the robot's frame of reference.  It also makes our code clean and easy to maintain, since everything robot-centric is pushed down inside a driver instead of in the core of the Behavior ENgine.

Two, it makes the robot unnecessary.  This was a benefit I didn't anticipate, since I never anticipated using our robot-controlling software without a robot.  However, it turns out that the computer is useful even without a robot attached.  For example, the computer could have other sensors plugged in, e.g. chemical or radiation sensors.  Since the robot is unnecessary, the user can pull the computer off the robot and walk around with just the computer and sensors, reaching places the robot can't get to or even leaving the sensors at a position to monitor the area.

Friday, May 06, 2011

Yard Sale!

In about a week, my dad will be driving from Utah to Mexico to take part in a service project.  On the way, he's going to stop here in California to pick up my brother and help with some projects around the house. 

One of those projects is trimming some palm trees.  He's bringing a chainsaw, but until today I haven't had much luck finding an extension ladder.  On our way out the door to visit the beach, however, we spotted a yard sale literally a block away from our home. 

Normally I never stop at yard sales, but for some reason I decided to pull over, even though we were late.  There, lying in the grass, was an extension ladder!  And a dolly, which I've been wanting (probably thanks to all our moving), and a carpenter's square, and a little tricycle, and some horseshoes.  Thanks to Child's shrewd bargaining, we got the whole lot for $57.  Definitely a good find.

Friday, April 29, 2011

Punishment

Day 1 Friend: "Could you do me a favor? I need someone trustable and unswayable such as yourself to change my minecraft account password and not give it back to me until after finals. If I try to convince you to give it back to me before the semester is over, just tell me to work on my homework or to do something productive."
Me: "Sure. Done."

Day 2 Friend: "The new minecraft update is out! Let me have the password, just to check it out. Pls?"
Me: "No."

Day 3 Friend: "Man, giving my minecraft password to you was both the best and worst decision, depending on how I'm feeling about it. I know you'll never give it back, and so I'll have to stay on task... but then I know I'll never be able to convince you to give it to me either. Well now, you should try the game out yourself. heh heh"
Me: "And turn into an addict like you? Nuh uh."
Friend: "I'm not an addict! I like wasting time by assembling virtual blocks in fun shapes."

Day 4 Me: "I'm changing your profile picture to a picture of Sean Hannity." (Okay, maybe I baited him a little.)
Friend: "Curses! You'll ruin my reputation!"
Me: "Well...I can make it Glenn Beck if you'd prefer."

Day 5 Friend: "Can I minecraft for a bit? I want to check out the new features."
Me: "No."
Friend: "Dreeeeeek!"
Later Friend: "I'm dying of productivity, I've already gotten 2 assignments done early. Just a little minecraft wouldn't hurt..."

Day 6 Friend: "Can I have my password? I have nothing to do this weekend."
Me: "Except study?"
Friend: "Study? I'm done with homework!"
Me: "I would have thought you'd have forgotten about minecraft by now."
Friend: "Well I've given up trying to guess the thing you changed the password to."
Later Friend: Offensive emoticons
Later Friend: "I'll buy you your own account, just give me the password"
Friend: "I thought I could trust you"
Friend: "WHY THE HECK DID I DO THIS!"

Day 7 Friend: Suspicious silence
Day 8 Friend: Suspicious silence
Day 9 Friend: Suspicious silence
Day 10 Friend: Suspicious silence
Day 11 Friend: Suspicious silence
Me: Checks minecraft account. Can't log in.  Friend must have reset password.
Me: "Can you look me in the eyes and say you haven't played minecraft in the last week?"
Friend: "A person needs balance in their life..."

Right-handed rotation matrix for roll/pitch/yaw

Specifically, an three-dimensional orthogonal matrix corresponding to a counter-clockwise/right-handed rotation where roll is the rotation about the x-axis, pitch is the rotation about the y-axis, and yaw is the rotation about the z-axis.

You wouldn't think this would be hard to find online, but go figure.

Thanks to Phaedrus for his explanations and...well, doing most of the work.

Note: this matrix effectively yaws first, then pitches, then rolls.  For the opposite order (and the one I ended up using), look below.

[ cos(pitch)*cos(yaw) -sin(yaw)*cos(pitch) sin(pitch) ]
cos(yaw)*sin(pitch)*sin(roll)
    + sin(yaw)*cos(roll)
-sin(yaw)*sin(pitch)*sin(roll)
    + cos(yaw)*cos(roll)
-cos(pitch)*sin(roll)
-cos(yaw)*sin(pitch)*cos(roll)
    + sin(yaw)*sin(roll)
sin(yaw)*sin(pitch)*cos(roll)
    + cos(yaw)*sin(roll)
cos(pitch)*cos(roll)


 And to put it another way:

//Top row
rotation[0][0] = cos(pitch)*cos(yaw);
rotation[0][1] = -sin(yaw)*cos(pitch);
rotation[0][2] = sin(pitch);

//Middle row
rotation[1][0] = cos(yaw)*sin(pitch)*sin(roll) + sin(yaw)*cos(roll);
rotation[1][1] = -sin(yaw)*sin(pitch)*sin(roll) + cos(yaw)*cos(roll);
rotation[1][2] = -cos(pitch)*sin(roll);

//Bottom row
rotation[2][0] = -cos(yaw)*sin(pitch)*cos(roll) + sin(yaw)*sin(roll);
rotation[2][1] = sin(yaw)*sin(pitch)*cos(roll) + cos(yaw)*sin(roll);
rotation[2][2] = cos(pitch)*cos(roll);

Note: this matrix effectively rolls first, then pitches, then yaws.  This turned out to be the one I used for my system.

[ cos(pitch)*cos(yaw) -sin(yaw)*cos(roll)
    + cos(yaw)*sin(pitch)*sin(roll)
sin(roll)*sin(yaw)
    + cos(yaw)*sin(pitch)*cos(roll)
]
cos(pitch)*sin(yaw) cos(yaw)*cos(roll)
    + sin(pitch)*sin(yaw)*sin(roll)
-sin(roll)*cos(yaw)
    + sin(pitch)*sin(yaw)*cos(roll)
-sin(pitch) cos(pitch)*sin(roll) cos(pitch)*cos(roll)


//Top row
rotation[0][0] = cos(pitch)*cos(yaw);
rotation[0][1] = -sin(yaw)*cos(roll) + cos(yaw)*sin(pitch)*sin(roll);
rotation[0][2] = sin(roll)*sin(yaw) + cos(yaw)*sin(pitch)*cos(roll);

//Middle row
rotation[1][0] = cos(pitch)*sin(yaw);
rotation[1][1] = cos(yaw)*cos(roll) + sin(pitch)*sin(yaw)*sin(roll);
rotation[1][2] = -sin(roll)*cos(yaw) + sin(pitch)*sin(yaw)*cos(roll);

//Bottom row
rotation[2][0] = -sin(pitch);
rotation[2][1] = cos(pitch)*sin(roll);
rotation[2][2] = cos(pitch)*cos(roll);

Thursday, April 28, 2011

Nudist Beach

Sunday, April 17, 2011

Equations

Am I the only one who finds it amusing that recreational drug proponents clamor for the "freedom to choose" to do something that removes their freedom to choose?

And does anyone else find it laughable that one of their primary arguments is that it "doesn't affect anyone else"?

Foot in...pot?

Yesterday we had an early Easter celebration, since Child is going to be in Utah over Easter while I remain here in CA and work.  While we were outside hunting eggs, I noticed our back-fence neighbor out watering his ducks and chickens.  I went over to say hello.

Mr. Chicken seemed a nice gentleman, although it quickly became apparent that he didn't have a very high opinion of the previous residents of our home.

"Apparently the low opinion is universal," I said.  "A few days ago I met Mr. RV, our next-door neighbor, and one of the first things he asked me was if I was growing pot!  Ha ha!"

Mr. Chicken didn't blink.  "I'm growing pot," he said.

Mr. Chicken clearly wasn't joking.  "Just two or three plants," he added.  "I have a lot of neurological problems and it's medicinal.  I grow it legal."

Oh.  Okay.  Note to self: you live in California now.

(Edit: I should add that Mr. Duck called me up this morning and asked that I meet him by our back fence.  There, he presented us with the nicest flat of 18 eggs from his chickens, as well as bacon, hash browns, and a jar of raspberry jam.  He's a very nice neighbor.)

Friday, April 15, 2011

Low Expectations

I met one of my neighbors today. He was climbing out of his RV as I left for work, so I jumped out of my car to say hello.

ME: "Hello! My name is Drek. I just moved in next door."
HIM: "That's nice. Are you growing pot over there?"

Apparently the previous few occupants have greatly lowered his neighborly expectations.

Of course, some of his initial assessment of me may have had to do with the fact that our plumbing is broken so we haven't had running water, much less hot water for shaving, showering, and washing wrinkled work clothes, for over two days now.

He also suggested I fix the gopher holes in our yard. Apparently whenever it rains, the water pools in our yard, then drains out through the holes into his yard, which is at a lower elevation.  That didn't make a very convincing case for fixing the holes--in fact, it suggested that putting out gopher treats might be a great idea from a landscaping perspective. 

Overall, he seemed like a pleasant, friendly gentleman, at least once he understood that I was not, in fact, growing pot in my new house.

Thursday, April 14, 2011

Port Forwarding

The post is more for my own remembering than anything else, although I'm posting it here just in case someone stumbles across it and finds it useful

The goal: allow a remote computer to view a website hosted on my local computer.
Steps:
  1. Set up an account with dyndns.org
  2. Install ddclient on my Ubuntu machine to periodically notify dyndns.org what my IP address is
    1. Don't prepend "http://" to your domain name in the ddclient setup!
  3. On my router, assign my computer a static IP address
  4. On my router, forward incoming traffic on port 8080 to the new static IP address
  5. On my computer, port-forward port 8080 to port 80, where my apache webserver is listening
    1. sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80 (add the port forwarding rule)
    2. sudo iptables -F (flush the rule)
    3. sudo iptables -t nat --list (view the rule)
    4. sudo bash -c "iptables-save < /etc/iptables.rules" (save the rule to a file)
    5. sudo echo -e '#!/bin/sh\niptables-restore < /etc/iptables.rules\nexit 0' > /etc/network/if-pre-up.d/iptablesload (to create a script to restore the iptable rules every time the network interface comes up)
    6. sudo chmod +x /etc/network/if-pre-up.d/iptablesload (to make the script executable)
  6. Visit my site in a browser at http://subdomain.dyndns.org:8080
iptables: https://help.ubuntu.com/community/IptablesHowTo

Sunday, April 10, 2011

First Impressions

My plan was simple, really: trick the Lord into giving me a prime job at church.  We finally moved into our very first house last Monday, so today was our first Sunday in our new ward.  The idea is simple: wear a really nice suit the first day at church, and make sure you shave and comb your hair.  The Lord thinks you've turned a new leaf and inspires the Bishop of your new ward to give you a calling commesurate with your new duds, like...well, anything but nursery worker.  The Bishop wouldn't dream of sending you to a room where little grubby paws would wipe boogers and animal cracker crumbs all over your sparkly suit, right?

I think I may have blogged about doing this when we moved into our previous ward and it actually worked out pretty well.  I got called to be the Elder's Quorum secretary, where the worst thing I had to deal with was no one turning in their home teaching reports on time.

Apparently the Lord got wise to me.  Maybe I shouldn't have blogged about it.

So this morning I shaved and combed my hair for the first time in--well, however long it's been since the first Sunday in our previous ward.  I pulled my dusty, unused-since-the-first-day-of-church-in-our-previous-ward suit from the closet and put it on.  Church time rolled around and I put Ash in her car seat, blissfully unaware that as I gave her a bottle, I was setting in motion events that would result in my doom.

We arrived at church, made a good first impression as we strolled confidently into sacrament meeting, and found our seats near the front where everyone could admire the back of my combed head and the Bishop and his counselors could get a good look at my shave and slightly-wrinkled suit.  We sang the opening song, said the opening prayer, conducted a little ward business...then the Lord pulled the trigger.

Ash peed on me.

Child was apparently in on the plot.  Before I could move, she whisked Ash and the diaper bag away and was gone up the aisle.  I was left completely exposed, with nothing to hide a giant wet spot in the middle of my lap.  Disaster!  Ash had hidden my scriptures as we were rushing out the door that morning so I didn't even have those.  They were all in on it!

The boy carrying the sacrament tray was coming from the left!  The man who counted attendance was coming from the right!  The person in front would turn around to introduce himself at any moment!

I thought fast, grabbing a hymnal and opening it on my lap as if I were deeply absorbed in the lyrics to "I Believe In Christ."  Three ice ages later, Child returned with Ash and I was able to snatch her back and make a hasty, damp exit from the chapel.

So the Bishop's only impression of me was what he got from the all of five minutes I spent in sacrament meeting.  "Must be a less-active member," he probably thought.  "Maybe not a member at all.  Probably just came because his wife nagged him to be supportive on her first day in a new church.  Wonder why he was reading that hymnal?  Bit of an odd fish.  Nice hairdo, though."

So...yeah.  Nursery for me for sure.  No way the Bishop is going to trust me with a calling that deals with anything above the most rudimentary gospel principles.  So much for that plan.

Monday, March 28, 2011

And don't get me started on the service

Only five pillows on my bed?! And they call this a four star hotel...

Saturday, March 26, 2011

Halfway decent v. Not that bad

Our check engine oil light has been flickering for a while, so I finally decided to get the oil changed before I left for Boston tomorrow.  (I didn't want the transmission to fall out on Child while I was gone.)

We just moved here to CA a few months ago and Child took the car in last time in needed an oil change, so I didn't have any particular place I liked.  I called the Valvoline Instant Oil Change place in Vista and the person who answered the phone sounded so sullen and short that I immediately decided to try a different place.  My second phone call was to Firestone Complete Auto Care, and the way the clerk there answered the phone was like night and day.  He was bright and cheery and suggested I look on their website for a discount coupon.  I immediately decided to go there instead.

Unfortunately, that was the highest point of the experience.  Not that anything went particularly bad, but there were several areas they could have improved.  Like all auto places, they tried to upsell me on several more services, but they went even further than most places by throwing in a credit card offer.

Of course my tires were bad so they wanted to replace those, as they always do, but the man who helped me (different than the one who answered the phone) seemed genuinely peeved that I didn't take him up on his offer.  "But I'm giving them to you at cost plus a buck!"

I understand it's a great deal.  I've bought tires before.  But regardless, I just don't have $250 in the budget to drop on tires right now.

The other annoyance was that even though there was supposedly only one car ahead of me, and I was assured that they would be done by 11:30 AM at the latest, I didn't walk out until 12:30.  That was 2 1/2 hours on my Saturday gone.  I expect that at a doctor's office, but changing tires and oil isn't brain surgery.  It shouldn't be terribly hard to estimate time-to-completion, especially if there's only one other car.  (Of course there were more--I could see them in the bay.)

Would I go back?  I really, really wanted to like them after the way that first man answered the phone.  But I've been to better places, and would probably look around first.  Although actually, now that we have a house (or will in a few days) I'm going to try changing my own oil.  It'll save money, and after the first couple times, I've no doubt I'll save time too.

Sunday, March 20, 2011

Nobel Peace Prize

Nobel Peace Prize, here I come.  I have just solved world hunger.

All we have to do is send our daughter's booster seat to a country currently experiencing famine, and all their food problems will disappear.  At any given meal, it will easily amass three times the amount of food that was actually served at the meal.

As I tipped the chair on its side and shook it in preparation to sweeping the floor after dinner this evening, it produced:
  • Raisins
  • Avocados
  • Spaghetti
  • Spaghetti sauce
  • Bread
  • Cheerios
  • A cat
  • Orange
  • Granola
  • Potato
  • Apple
  • Plastic St. Patrick's Day clovers
Everything but the plastic clovers looked edible, and much of it actually looked better than many of the meals I ate as a college student.  I see no reason why the booster seat's particular capabilities couldn't be put to good use.

And who knows?  Maybe the living room recliner will come up with plan for world peace.

Love Unfeigned

In our men's group at church today, we had a new person show up.  He was obviously not your usual church-going type, and when he was asked to introduce himself, he said some things that made it clear he had some mental issues, probably schizophrenia.

Later in the lesson, the teacher asked a question and this man answered with a rambling response that ended with him saying he wanted to have a family, and how should he go about doing that?

Everyone in the room listened until he was done talking, and I expected everyone to do what I was planning to do: humor the man while maintaining a polite expression, then turn back to the teacher and let him guide the lesson back on-topic.

Instead, to my surprise, a couple of men in the class answered with very thoughtful, serious responses.  The marine with the grenade stickers on his truck explained that the man's first goal should be to make himself right with the Lord then blessings like a family would follow, while the silent man at the back of the room spoke up and gave encouragement for starting with the small things like coming to church.  Before the class was over, the man had been invited to a church activity, lined up with a ride, and shaken hands with half the class.

I was ashamed of my initial reaction of brushing off the man, while simultaneously rejoicing in belonging to an organization that built men like the ones who had just taught me a lesson.  Next time, I'll hopefully be a little more Christlike thanks to their example.

Thursday, March 17, 2011

Robotic Rodeo -- Day 3 -- Murphey backs off

So after I blogged about day 0, 1, and 2 of the Robotics Rodeo, life intervened, and I never got to day 3.  However, when John mentioned that Davin mentioned that my blog post about 5D Robotics stealing some lady's bag from airport security was on the first page of Google results for "5D robotics," I figured I better tie up a few loose ends.

First, we returned the lady's stolen bag.  We had left my phone number with Delta so they could give it to the lady if she called them, which she did.  As it turns out, the lady was moving from CA to GA, which somehow equated to carrying a carry-on full of brand-new clothes and 50 garbage bags, but she wasn't particularly inconvenienced by the bag being stolen.  We promised we'd leave it at Delta on our way home, and they would see that it got back to her, which they did.  (After we spent ten minutes convincing the Delta employee we were in fact returning a stolen bag rather than looking for a lost bag of our own.)

Second, we almost ran over Boeing's robotics team.  They were standing in a small group making snide remarks about the clearance and overall appearance of the Segway robot I was driving when it accidentally swerved towards them.  They managed to scatter in time to avoid getting ran over by 240 pounds of steel and clawing tires, but only barely.  Fortunately we had the velocity capped on the robot.

Third, the demos went marvelously, and not just because our CEO didn't like my blog post about the previous day's disaster showing up on the first page of Google results for our company's name.  They actually went really well.  Antenna Products pulled out a wireless spectrum analyzer and found us a channel that was fairly free, so our radios worked much better.  We were actually able to demo our robots for some important people that Davin roped in, and the Segway representative only mistook one middle-school boy for a girl.

So all-in-all, it ended up being a positive experience.  We had sushi for dinner, John didn't get tazed even once on the way home, and we got the next day off work to catch up on sleep.

Day 0
Day 1
Day 2

Tuesday, March 08, 2011

Favorite Baby

Last night, Child and I were in bed.  Ash was sleeping in her bed beside ours.  Child and I laughed about something and in her sleep, Ash laughed also.  Child and I thought that was pretty funny.

Wednesday, February 23, 2011

Foot, meet mouth

Following is a cautionary tale on never saying anything in private you wouldn't want repeated publicly.  Names have been changed.

We here at 5D have an intern working for us...we'll call him Scone.  Coworker John, Scone, and I all work in the same room, although we can't see each other because of the dividers between us.  This fact led directly to the incident.

Scone is a smart and articulate kid, so I sometimes forget that he just doesn't have much programming experience yet.  He came to me with a programming problem, so I told him the solution.

"Well, the obstacle avoidance behavior file is conditionally compiled based on the mission flag in the CMake file, which is currently set to mission_dave in your virtual machine.  Since the behavior should be unconditionally compiled in now, you'll have to move it out of the conditional and into the normal list of included files."

It makes perfect sense, right?  Apparently not, because Scone gives me this blank stare like I was talking in German.  That was doubtful, since I don't speak German, and I realize it just went right over his head.  I go over to his desk and walk him through what he needs to do, although I'm a tiny bit annoyed because I'd rather him play around and attempt to figure it out on his own for a few minutes before coming to me.

A few minutes later, someone walks out the door heading in the direction of the break room.  For some reason, I think it is Scone, which means John and I are left alone in the room.  I start talking, which incidentally is where a lot of my problems throughout my life have come from. 

Me: "John, do you think I'm helping Scone too little?  Or too much?  Because I just don't think he's getting anything I'm saying."

Scone: "Um..."

Me: "Um..."

So yeah.  There were a few frantic moments while I mentally went over what I said, trying to think if it was too insulting or patronizing.  Had I said Scone wasn't the sharpest knife in the drawer?  Had I mentioned anything about a light being on but nobody being home?  Because I could have easily said something like that, just joking of course, but not the sort of joke you'd want to say to someone's face.

And apparently, not the sort of the joke you'd want to say if you're not absolutely 100% sure of whose face you're talking to.  And even then, probably not, because you don't know what your listener might pass on, or what microphones are hidden around, or who might be just around the corner.

Sunday, February 20, 2011

Living Truth

Since our daughter has been sick (she seems mostly better now!), I've been doing a lot of reading about healing blessings and miracles.  There is a wealth of knowledge and information in the archives of Latter-day Saint church talks that is fascinating--even more-so when it applies personally to yourself given your particular circumstances.

Something struck me just now while reading.

Every now and then when I channel surf on the radio through the lower end of the dial where my NPR news likes to hang out, I stumble across some religious speaker.  I listen on occasion, and it brings back memories of attending various other religions' sermons while I was a missionary in Tennessee. 

There is a striking difference between those sermons and the ones I've been reading online.  The average sermon from a pastor will take an incident in the Bible and delve into it: history, background, various teachings or takeaway messages from it, etc.  Sometimes the sermons will be topical, drawing from a variety of Biblical references to make an interesting or helpful point on a specific subject.

These sermons are good, as is anything that lifts, enlightens, and gives direction to peoples' lives.  They can only rehash Jonah and the Whale so many times, though.  At some point they reach the end of what the Biblical writers managed to jot down and there they have to stop.  In the end, they're all missing a critical element: living revelation. 

Contrast this to a talk on, say, healing blessings given by an Apostle.  The Bible mentions several incidents of healing blessings, but doesn't go very much in depth into how they're done, who can do them, prerequisites, requirements, expectations, and limitations.

The Apostle isn't limited to the Bible, however, or even to the Book of Mormon, the book of Doctrine and Covenants, or revelation from a variety of modern prophets and Apostles, living and dead.  He has his own personal revelation as a mouthpiece of the Lord. 

As I've read through a half-dozen or so talks over the past couple hours, it keeps striking me how clearly and understandably the doctrine is laid out, how simple and organized it is, and most of all how much knowledge is added above and beyond any existing canon.  In short, a sermon given by an apostle or other inspired church leader has an incredible power impossible to find anywhere else.

RedBox

While getting a movie from RedBox yesterday, I watched the person in front of me walk away with five movies in hand.  Either they were planning to watch 10 hours of movies in the next 24 hours, or they were going to rack up some nice charges on their credit card.

Who knows.  Maybe the lady lived a hundred miles from civilization and this was her annual excursion to The Big City to "see what-all is goin' on."

Sunday, February 13, 2011

Haircut

My wife had a little accident last night.  I have to admit--I had a hard time keeping a straight face and murmuring the proper sympathetic phrases. 

Besides, it could have been worse.  She could have been shredding paper instead of cutting it.

Saturday, February 12, 2011

Updates

A hot-green motorcycle in our parking lot has the word "Ninja" painted in black letters on the side, with a giant grenade stencil beneath it.  Because when I think of ninjas, the first weapon that comes to mind is a grenade...

--------

Every time I go outside in the morning to leave for work, when there isn't much activity, a crow sitting in a tree along the sidewalk will give a brief caw, presumably to alert any other crows who cared that a human was nearby.  Another lookout crow did the same thing on our way to the park today.

--------

Yesterday evening I finally got another robot driving.  I was pretty excited since I had been working on it for the whole past week.  Child called me about 5 pm and asked when I was coming home.  It was a good thing she called, since I was so into my work that I probably would have worked until 7 pm before I realized what time it was.

On a related note, the company that built the robot apparently has no idea what a "standard" is.  If you decide to use the JAUS architecture for the nice standardization it brings, it's a little counter productive to put the left wheel speed in the "velocity" field, and the right wheel speed in the "turn rate" field.  It's wrong, and it defeats the whole purpose of using the standard to begin with.

--------

My writing group is great.  They gave me some good ideas for how to progress my characters and make them more realistic.  I like where my current novel is going.

Sunday, January 30, 2011

Power

Everyone's heard the saying, "Power corrupts; absolute power corrupts absolutely."  (Paraphrased from John Emerich Edward Dalberg Acton)

I decided I don't agree with that.  I don't think power corrupts, I think it merely exploits or exacerbates existing corruption.  It's like putting pressure on a stone--the stone will eventually crack along existing imperfections or fault lines.

Taking it a step further, the more power granted, the smaller the imperfections that become a problem. Following it to the conclusion, absolute power would cause anyone with the slightest corruption--anyone less that a perfect being--to be destroyed.

Mormons differ from other Christian religions in our beliefs concerning the afterlife.  For one thing, we take very literally the idea of being children of God and joint-heirs with Christ.  As such, those who fulfill to perfection their responsibilities on Earth will (as joint-heirs with Christ) obtain all that God has and become all that He is. 

Now we see the need for a judgment.  That inheritance includes absolute power--the power to create and destroy worlds without number.  The power to create and destroy life itself.  No sane person, no matter how degenerate they personally were, would want that power given to anyone with the least predilection for evil.  Imagine the potential for destruction.

No, most of us would agree that there should be a stringent teaching process (life), including frequent tests (trials), followed by a final judgment as to worthiness (and who knows--perhaps many more millenia of learning), before such an awesome power should be granted to anyone.

Saturday, January 22, 2011

Sweet Relief

Sometimes, it's been a long day and you're exhausted and all you want to do is sit down and watch the basketball game and eat something sweet but there's nothing but vegetables and coconut milk in the fridge and you're disappointed because there's never chips or cookies just lying around and you open the freezer and there you find a giant ice-cream/chocolate-chip cookie that you left there a week ago and forgot about and it's a little freezer-burned but you don't care because all you wanted was something sweet and it's like a little bit of heaven.

Saturday, January 15, 2011

Robots!

We finally lined up our robots at work and I snapped a shot with my camera.  We're missing one from the picture due to the simple expedient that it's too large to fit through the door (it weighs 4500 pounds), but when we get a nice picture I'll post that as well.


Tuesday, January 11, 2011

A Plus Updates

In a surprising "coincidence," a week to the day after an unsatisfactory phone call with A Plus, I got an email indicating that they "noticed that you do not have an account manager" and were assigning me one.  Before I even read the email, I got a call from the person who had been assigned, indicating she was my new account manager and casually asking how things were going. 

I knew exactly why they were calling and repeated my previous complaints, as well as indicated my plan to leave their services.  After listening, my "account manager" apologized profusely for the unprofessional behavior of the previous person I had talked to, and offered to give me the domain service that had prompted my original call for free.

For the price of a phone call, an apology, and a $6 perk (well, it saved me $6; it cost them nothing), they kept a customer who pays them $50-$60 per year.  That's doing business the right way.