Bittersweet Marinade

It’s funny how it’s the simple things that can be so profound.

Like the simple thought that you’re dying every second of your life.

Marinate on that for a second. You are dying. Right now.

Can you feel it? Roll your mortality around your mouth with your tongue; taste the bittersweet truth of it. If you let it, that mortality will hit you like a bag of bricks right in the gut.

But the truth, of course, is also that you’re alive this very second. At least physically… But are you really alive? Do you feel the intense energy of life pulsing through your veins? Fill your lungs with your vitality; taste the bittersweet, temporary truth of it. If you let it, that vitality will straighten out your back and fill your body with lightness and strength.

See? Simple, yet profound.

The simple facts that you’re living and dying right now make you a ridiculous walking oxymoron! You’re Shrodinger’s cat in the flesh; you’re the inseparable Chinese twins Yin and Yang. You’re alive!! Yet, you’re one breath closer to death.

I think that in order to truly live, you must embrace your death. Similarly, in order to truly die you must be able to embrace your life. Unhappy is he who dies without ever having lived. Weak and afraid is he who lives life without embracing his death.

Ice Cube once rapped “Don’t talk about death I got too much life to live!” I’ve always loved that line. Though in this context it might be somewhat limiting. We all have a limited amount of time on this crazy dust ball, some less than others, but how fully we live depends on how willing we are to embrace our death, however near or premature it might be. If you were to die tomorrow, will you go out knowing that you were living to the fullest?

I don’t mean just being happy, i mean feeling joy! I don’t mean just being sad, I mean loving and giving so deeply that loss makes you grieve.

Ok, I’m not saying that we need the amp pushed all the way up to an ear-piercing eleven.

I’m saying that for life to be full and vibrant we need to fill ourselves with a bit more color, more love, more passion. One way to light a fire under that complacent, colorless, little ass of ours is to remind ourselves religiously of our mortality.

Try it for a week. Stop and really smell the flowers, like you’ll never see them again. Breathe deep the air around you. Feel the electricity in your fingertips when you touch your lover. Focus on accomplishing the things you care about; do you even remember what those things are? Fill yourself up with love for something and feel your vitality start to stir. Let it come back! Keep stoking the fire when you can. You’ll feel it give shivers down your spine, tingling your thighs and toes. Let it fill you up! Smile, cry, and feel what it means to truly be alive.

Honestly, as romantic as this all is, it’s so much easier said than done. I don’t think I have been living any fuller, feeling more directed or alive, but lately I’m definitely more focused on trying to figure out what things in life I can do with passion. I’ve started writing again, playing music again. I’ve opened myself up to new people and new opportunities. I’ve been slowly stoking those passions, and the more I do it the more fulfilled and meaningful my life becomes. Slowly. One tingling breath closer to death at a time.

I’ve been marinating in this sauce for a while now. I’m still not sure what to do with it, but I like the taste of it. Bittersweet. Real.

Life Afloat #1: Sex, Sailing & Swimming

blurry-sf-night

blurry view of SF at night from the water

“Oh! Oh! Oh! OOOH!” It was 3AM, Saturday morning, and the sounds of obnoxiously loud sex were floating over the marina water. The hatches of the sailboat were all open. The night was windless, cool and beautiful, and apart from the sex, peacefully quiet. I was glad at least someone was taking advantage of it.

I tried to go back to sleep, but “OH OH OH OH!”, the repetitive high pitched screams were sometimes high, sometimes moaning, but always incessant!  4AM. “OH! OH!” 4:30AM “OH! OWAWK!”  ? 5AM “OH!” 6:30AM “OH! OWAWK! OH! OH! OH!” ?  I had to imagine the girl would be hoarse by now and HO.LY.CRAP. this dude has stamina! Three and a half hours!? On an amazingly good day, I’m much more used to three and a half minutes!

Many possible scenarios were entertained. Maybe he took too much viagra. Maybe there were multiple guys? Maybe there were multiple guys and girls? Alone in the berth of the sailboat, the only thing that was clear was the fact that I was doing something wrong.

Saturday dawned magnificent. I did manage to sleep from 6-7 or so before being awoken by the sun streaming in the forward hatch. Thoughts of obnoxious sex passed and I plodded off to the marina showers. They’re crappy gym showers with no amenities save long lasting hot water and great water pressure. After spending all day in a constant 55-65 degrees in an uninsulated fiberglass shell, these showers are usually one of the highlights of my days.

I spent the rest of the morning researching my many questions about the boat. Why does my battery charger hum? Why do I have a loud hum in my speakers when connected to shore power? What’s an isolation transformer?  What in god’s name is wrong with the toilet? What are sacrificial zincs and why do I need them checked? What should I name her?

Finally, at 11AM, my friend stopped by and we sailed out into sunny and anomalously still San Francisco bay. I realized that I’m much better at single-handing the boat, as well as navigating the treacherously shallow waters that lead into and out of the marina. The butterflies I get when pulling the boat out of the dock have also slowly subsided.

calm waters at the golden gate

calm waters at the golden gate

We motor-sailed out to Angel Island, then killed the motor, and set the sails and autopilot to just mosey on along at 1 or 2 mph while we ate cheese, crackers, and wine in front of the Golden Gate bridge. The sun was brutally hot without the wind, so I suggested that we jump in the bay (read: the pacific ocean). This suggestion was met with mild enthusiasm, provided, of course, that I went first.

Strangely, I did not feel ridiculous standing on the boat’s swim ladder in only my skivvies. This feeling of ridiculousness kept itself at bay until a microsecond after I had jumped in and realized that HOLY SHIT THE PACIFIC OCEAN IS COLD! On hindsight, I knew this already. I seem to never really know something, though, until I get punched in the balls with the truth, feeling the complete, unadulterated knowledge coursing through my body. See, that’s knowledge.

Another new academic achievement included realizing that a boat moving away from you at only 1mph while you are flailing in 100 feet of freezing cold water is akin to your life line abandoning you at light speed. I shrieked (a manly shriek, of course) and swam in panic-riddled strokes back to the safety of the ladder.

The best part about this ill-conceived swim was stretching out on the sunny deck, air drying in the light breeze, all while bobbing along next to the Golden Gate bridge.

sunset over the marina

sunset over the marina

Saturday night was another windless quiet night, and I slept well. That is, until at 3AM, I awoke yet again to ‘OH! OH! OH!’ Non stop banging love!? Again, this went on until 6:30 in the morning!! I couldn’t believe it. I finally popped my head out of the hatch yet again, trying to pinpoint the source. It seems like I had done that 10 times the previous night, becoming what is referred to as a Hatch Gopher. Finally, this time, out of the corner of my eye I caught movement and a loud ‘OH! OH! OWAWK!’  Turns out it was a fucking bird!! (pun intended)  Again, in hindsight, I probably knew this already. OWAWK is not normally a sound made in passion. But hey, in my defense, in a three and a half hour, epic round of non-stop passion, anything’s possible at that point.

Signing RPMs cause unverifiable V4 signatures (and extreme frustration)?

Sometimes it seems it seems like I run into every possible problem imaginable when trying to do something very simple. This time, while finishing up our automated build and release system for Metric Insights, I decided that our RPMs needed to be signed with a GPG key cause, you know, we’re professional and shit.

The process is super simple, as spelled out on multiple blog posts and RPM documentation over the web. Setup your RPM’s _gpg_name macro, and sign with a simple:

$ rpm --define '_gpg_name mykey' --addsign test.rpm
Enter pass phrase: 
Pass phrase is good.
test.rpm:

For some reason, though, my otherwise perfectly valid GPG key would corrupt the RPM:

$ rpm -qpi test.rpm
error: skipping package with unverifiable V4 signature
error: test.rpm: not an rpm package (or package manifest)

There are various solutions to fix this on the internet, including outdated forum posts telling people that V4 signing was broken and you needed to force V3 signing. This turned out to be a  red herring. Don’t bother redefining the __gpg_sign_cmd rpm macro to use –force-v3-sigs. This just gives an even more annoying “unverifiable V3 signature”!

After much trial and error, however, I figured out that it was a problem with RPM not liking my particular GPG key. To pinpoint the problem, I created 4 different GPG keys, 1024 and 2048 byte RSA and DSA keys, and tested out signing RPM packages with them:

cru@bob:~ $ gpg --list-keys foo
pub 1024R/272D2ECA 2013-02-06
uid fooRSA1024 <foorsa1024@example.com>
sub 1024R/1D2D8E3C 2013-02-06

pub 2048R/413B4061 2013-02-06
uid fooRSA2048 <foorsa2048@example.com>
sub 2048R/A06F285A 2013-02-06

pub 1024D/85FBADC7 2013-02-06
uid fooDSA1024 <foodsa1024@example.com>
sub 1024g/FD971D0A 2013-02-06

pub 2048D/36DFE4E6 2013-02-06
uid fooDSA2048 <foodsa2048@example.com>
sub 2048g/A6971EDB 2013-02-06

cru@bob:~ $ for x in foo{rsa,dsa}{1024,2048}; do cp -f test.rpm test-$x.rpm; rpm --define "_gpg_name $x@example.com" --addsig
n test-$x.rpm; done
Enter pass phrase: 
Pass phrase is good.
test-foorsa1024.rpm:
Enter pass phrase: 
Pass phrase is good.
test-foorsa2048.rpm:
Enter pass phrase: 
Pass phrase is good.
test-foodsa1024.rpm:
Enter pass phrase: 
Pass phrase is good.
test-foodsa2048.rpm:

This created four separate signed rpms. All of them worked EXCEPT for the 2048 byte DSA key!

cru@bob:~$ for x in foo{rsa,dsa}{1024,2048}; do rpm -qip test-$x.rpm | grep Signature; done 
warning: test-foorsa1024.rpm: Header V4 RSA/SHA1 Signature, key ID 272d2eca: NOKEY
Signature : RSA/SHA1, Wed 06 Feb 2013 06:45:44 AM UTC, Key ID a5a029b1272d2eca
warning: test-foorsa2048.rpm: Header V4 RSA/SHA1 Signature, key ID 413b4061: NOKEY
Signature : RSA/SHA1, Wed 06 Feb 2013 06:45:44 AM UTC, Key ID 4f775b1a413b4061
warning: test-foodsa1024.rpm: Header V4 DSA/SHA1 Signature, key ID 85fbadc7: NOKEY
Signature : DSA/SHA1, Wed 06 Feb 2013 06:45:45 AM UTC, Key ID 4cb7b2bd85fbadc7
error: skipping package with unverifiable V4 signature
error: test-foodsa2048.rpm: not an rpm package (or package manifest)

So, to fix, I simply regenerated a 2048 RSA key.  Hopefully this will save others some headaches in the future 🙂  NOTE: this appears to be a problem on RPM 4.8 (which ships for Debian Squeeze/CentOS 6.3 and RHEL 6).

Shrinking VMware Virtual Disks on a Mac

I have the unfortunate quirk that, when I think “VMware”, I often say it in my head with a German accent, like “WeeEmVare”. I find that makes things like “VMware Virtual Woes” fun and challenging to say. So it is with great enthusiasm that I recommend reading this post in the same manner.[1]

At Metric Insights, we currently deploy VMWare virtual machines to customers to try out our product. Recently, after having updated one of said VMs and preparing to upload the compressed file to our site, I realized with horror that the compressed file was 3.7G. This takes me over 5 hours to upload to our server, and I imagine an hour or so for our customers to download. Here’s how I shrunk it!
Read More

Embedding Pig for CDH4/MRv1 java apps fer realz.

After working with Hadoop more and more and wading through the dependency hell of each crazy component of Hadoop’s little documented ecosystem, I’ve come up with the following cheeky definition for HADOOP: “Huge Ass Dependency Orgy Of Poo”. Ok, it’s not really that bad, but if you’ve ever tried to embed Pig in your own Java program as hinted at here, you might run into some pitfalls like I did. 

Read More

shooting things

My heart was pounding. I couldn’t really say why. I mean, I kinda knew what I was doing. The bullets go in the magazine. The magazine goes in the gun. Load the round in the chamber. Safety off. Point it away; far, far away from anything you care about. Squeeze. It should be easy. My little sister was standing right behind me, encouraging. My brother and father were in the lane to the left of me. 75% of the people I care most about in the world were less than 5 feet away. And I felt like a bumbling moron with a bomb and a hammer.

The instructions were hard to hear through the explosions and ear protection. I bent over to be closer to my sister’s head, which usually bobbles around 5 feet off the ground. The laughing head said “you just turned the safety ON”. “You mean, it’s turned OFF by default?!” My heart pounded a bit more in its cage. I had no idea why this was affecting me so much. I flipped the safety off, relaxed my shoulders, pointed the handgun at pink ink on a paper target, made sure I absolutely cared for nothing about the target except hitting it, and squeezed.

Voluntary actions turned involuntary. My arms were suddenly noodles and flew up ten feet in the air. My eyes squeezed shut. Something hot flew past my head. When I opened my eyes, I realized that the gun hadn’t flown out of my hands. It hadn’t pointed behind me to where my sister was. Smoke lingered around the end of the barrel; I smelled sulfur. A small black dot marred the pink ink not far from where I was aiming. I adjusted my expectations, and shot the rest of the magazine. When I realized nothing happened when I squeezed, I looked at the gun and realized the chamber had popped open like a little bird, screaming for more food. I could feel adrenaline in my fingernails as I ejected the magazine and shakily put the gun on the table in front of me. At some point, I remembered to breathe.

I actually enjoyed myself, once I got to the problem solving aspect of what I was doing. “Why won’t the black dot go where I want it to go?!” But the adrenaline in my body was telling me something foreboding and dangerous was going on. I found this strange, because I am no stranger to adrenaline or danger. I routinely smile as I dangle myself off a cliff, thousands of feet off the ground, sometimes without a rope. But there was something about discharing a ‘weapon’ that felt disturbingly dangerous. The truth of the matter is that guns are designed to kill. And each time you fire one, you are putting yourself in the hypothetical position of taking something, or someone’s, life. When I walk precipitously close to the edge of a cliff or a bridge, I’m doing something potentially dangerous to me. But when I fire a gun, I’m doing something that could be potentially dangerous to someone else.

When we were done, our little pink target looked like swiss cheese. It was obvious my sister and I both needed some practice. I smelled of gunpowder and sweat. I smiled and laughed and had a blast (pun intended). But I couldn’t suppress another jolt of the jitters when I realized that my brother and dad both shot clusters of 6 inch holes in the place where a chest would be in their human shaped target.

Sqoop hive import fails with IncompatibleClassChangeError

Exception in thread “main” java.lang.IncompatibleClassChangeError: class
com.facebook.fb303.FacebookService$Client has interface org.apache.thrift.TServiceClient as super class

As with most obscuro Hadoop issues, I found absolutely no documentation about this error anywhere on the interwebs. It turns out, this is because no one else had a sqoop install as hosed as ours 🙂

For some reason our sqoop installation had some random thrift jars lying around in /usr/lib/sqoop/lib, including:

# ls -l /usr/lib/sqoop/lib/*thrift*
/usr/lib/sqoop/lib/hadoop-thriftfs-0.20.2-cdh3u2.jar
/usr/lib/sqoop/lib/thrift-0.2.0.jar
/usr/lib/sqoop/lib/thrift-0.5.0.jar

I have absolutely no idea why, but maybe someone just copied stuff directly from a cdh3 installation or hacked around a previous problem. No idea. Needless to say, that’s a lot of unnecessary thrift crap, especially when none of those jars match up with the version of thrift that Hive is using (libthrift-0.7.0.jar).

So, if you happen to inherit a crazy hacked up CDH4 installation like I did, you can fix it with:

# rm /usr/lib/sqoop/lib/*thrift*