20th

Can’t believe it’s been 20+ years with this incredible lady. Of all the things I could say, and have probably said, one of my favorites is paraphrased from thelma ritter in rear window as stella : “When I married [bec], we were both a couple of maladjusted misfits. We are still maladjusted misfits, and we have loved every minute of it.”

IMG_0877

Advertisements

TIR

Made it through my first Texas Independence Relay back in March, herewith a photo of the fine folks in my team. I was quite surprised with how much I enjoyed the race, especially considering it was twice my current weekly miles. Compressed into 24 hours. Special thanks to Alex for inviting me to join his team and the epic trek through bucolic hill country, along winding highways and byways into Houston from Gonzalez.

tir

david byrne

Austin usually gets all the credit, however htown continues to attract a bevy of brilliant acts eg., cults 11/13/17, ghostland observatory 12/30/17, brmc 01/20/18, sleigh bells 02/07/2018, david byrne at WOMH last night. To see him in particular was really sentimental, considering talking heads was among the first few bands I heard and fell in love with as a kid. David Byrne doesn’t seem to lose an ounce of creativity or relevance as the years go by; a remarkable talent to say the least.

IMG_0386

20171230_224154

IMG_0539

IMG_0591

IMG_0886

the f250

a story for moth night at the ledbetters

1. After finishing grad school in Williamsburg, Virginia and knowing we would move within a few months, we decided not to renew our lease. For this reason, we spent about 4 months toward the end of the year, effectively homeless, all our worldly possessions in storage and ready for the move. A good friend was in India for a stretch, and he kindly sublet his basement apartment to us. Virginia in the tidewater area is like Houston in terms of climate, and our basement was quite dank and smelly, pungent with the fragrance of body spray, curry and mold. Occasionally bec could be heard gently sobbing in the shower over the chirps of crickets, keeping her company in there. At least 2-3 times a week, the undergraduates upstairs played beer pong, balls and solo cups connecting loudly with the wooden floor among the clatter of feet and drunken revelry. Vijay returned a little early, and in October or November found ourselves moving on to a hotel by the edge of town.

2. The hotel on the surface was much better than the basement, no crickets in the shower and we had a free continental breakfast every day, as well as a decent pool and Jacuzzi. We did notice a few other residents milling about, one room in particular attracted a lot of attention. This was obviously the local crack house or muster point for the Mormons, hard to tell based on the random clientele and their states of dress. Bicycle was also the preferred mode of transportation. Missing a stove or kitchen, we ate microwave lasagnas almost nightly and to this day get a little queasy at the thought of Stouffers. The hotel was to be our last stop in Williamsburg, and early December after a final interview at Penn State we began to plot our escape from the second worst hotel in Williamsburg. The worst in our experience was another hotel on the outskirts, our first stop in Williamsburg when fresh off the boat in 2000. It had what looked like a meth lab but no Jacuzzi.

3. Around Christmas we’d found a lease to take over for a few months in state college PA, with room for a little furniture, and so we started to look at truck rentals. One way seemed a little pricey, especially considering we’d need to repeat the trip for the rest of our goods when we’d found a house eventually. We both enjoy exotic vehicles (although Bec prefers her to be in good running order), therefore we decided to buy an old truck to carry us up there. Our reasoning was that we would have a memorable trip and a practical vehicle to enjoy and use afterwards. We consulted the classifieds and possibly craigslist, finding what looked like a suitable candidate, a 68 ford f250, located just south of Williamsburg in Newport News. The truck was to be a Christmas present of sorts, and Bec for her troubles received some clothes I picked hastily at the local target. Turns out they were radically the wrong size. There were more tears, this time by the light of our small garish Christmas tree. Also from target.

4. When I first laid eyes on the f250, it did appear a little worse for wear but lovingly maintained by the owner. A closer inspection revealed a hand painted powder blue and cream body, including some thinly veiled rust in the truck bed. However, the new engine leads, hoses, plugs and brakes seemed promising. We took it for a spin, and it handled like an Abrams tank. A standard transmission with four on the floor, little to no power steer and drum brakes made for an exciting and challenging drive. No matter I said, with my usual reckless abandon, it’ll do. And the price was right; for 500 bucks, it was a steal. We set out back to the burg on interstate 64, temporary truck permit in place and ready for anything. In what turned out to be a portent of things to come, I ran out of gas, finding out the hard way the gas gauge didn’t work. My resolve hadn’t weakened much. No tears from bec this time, just a nervous smile at my bravado, as we brought a jerry can of gas to our crippled truck resting suspiciously by what was a CIA facility. Keep in mind this is mid 2000s and the truck looked like something out of Mad Max, a generous assessment.

5. Sometime in January, we loaded up the f250 with a selection of items from the storage unit, including a large collection of CDs, books, appliances and small furniture. These were all held in place by a queen mattress ensemble, tied down with elastic netting, overall resembling a gypsy wagon. We loaded Bec and our neon up with clothing and perishables, leaving Williamsburg in convoy, by way of interstate 64 and Richmond to the North, then interstate 95 and DC before hitting MD and ultimately interstate 99 to state college in PA. We had completed the route some weeks prior for the final interview in December, last time in heavy snow, which the locals declared I was crazy to drive in. I get called crazy *a lot*. During that particular trip we noticed how many more trucks there were up North, mostly due to the snow and hills. I felt good leaving Williamsburg in a truck, a feeling which turned out to be short lived.

6. Somewhere North of Richmond and after a refill, I sensed the occasional bump against the truck body. It was hard to pinpoint and not very loud, so I thought nothing of it for a while. Over the next half hour, the frequency and volume of the noise increased, and bemusement turned to mild panic, something was obviously wrong. I pulled off near Fredericksburg with Bec in tow, and did a quick walk around the vehicle. The problem took a while to register, it was so far outside my experience. Apparently, my tires were disintegrating; I’d never seen anything like it, large chunks of rubber had fallen away, the tires resembling swiss cheese. This was just prior to smart phones, and at the time we had no AAA, so we decided to head off from 95 in search of new shoes for the horse.

7. I drove gingerly around the country highways of greater Fredericksburg in search of a tire yard. I don’t remember how we found the place, maybe we relented and asked directions. I do remember pulling up into what used to be a gas station and feeling a sense of relief; driving 95 is stressful at the best of times, let alone when your tires are made of cheddar cheese. A couple of surly guys eventually offered to help. After a quick study of the truck, they took on horrified expressions beneath the grease and sweat on their faces. It had been a harrowing experience, not to mention couple of months; our nerves were getting raw at this point. The more affable guy tried to explain that the truck had antique tires (I had picked up on that one) but what was much worse, were fitted with split or suicide rims, otherwise known as widow makers. Take them off wrong and they can decapitate or otherwise maim you. Suffice it to say, they wouldn’t touch the tires unless we also replaced the rims. I mentally sobbed in the shower, I think Bec was holding up better than I at this point.

8. Our cheerful mechanics pointed us to a junkyard out in king and queen county to the south, where we could buy some used rims. It was a long journey, practically back to Richmond, and there we also encountered unsympathetic junkyard workers. Nonetheless they loaded us up in the neon with some sooty ford rims, one on bec’s lap, three in the back seat and trunk, taking up all the room we had left. We made it back just before closing and thankfully our greasy saviors took pity on us, fitting rims and tires. Our two hour trip had turned into about seven by this point, so we charged out from VA into MD, stopping just briefly for food before finally hitting 99 North in PA around 10 pm. Even in the darkness we could see the beautiful vista of central PA open up before us. Not for the first or last time we felt like Ulysses, beset by endless challenges on the quest to find the way home. Eventually we would sell the truck, extracting the roughly 900 dollars we’d sunk into it, but not before I was pulled over by the cops, losing my license for a couple of days on one occasion. A story for another time.

basic python gui

It feels like years since I posted something technical; I have a busy day job and at least one side gig to thank for that. Thought I’d share the following python code, handy for wrapping a terse command line app (myApp) in a slightly more user friendly/cross platform gui. Don’t forget to re-introduce the persnickety python formatting 😉


from tkinter import *
from tkinter import ttk
from tkinter import filedialog
import subprocess
import time
import os
root = Tk()

# initialize parameters
programArgs = (' --a ', ' --b ', ' --c ')
argumentNames = ('Input File', 'Output Log', 'Output Directory', 'Output Prefix')
initMessage = 'Required'
argumentMap = { }
processID = ''
baseCommand='myApp.exe'
pathSep='\\'

# adapt syntax to OS
if os.name == 'posix':
baseCommand='myApp.x'
pathSep='/'

# test availability of binary
testCommand=''
try:
testCommand = subprocess.check_output(baseCommand, stdout=subprocess.PIPE)
if "allowed options" not in testCommand.communicate()[0]:
print('please install the myApp executable and make sure your PATH is correct')
time.sleep(3)
root.quit
except:
pass

# select a file or directory
def openFileDir(entry,field):

f=StringVar()
if 'Dir' not in field:
if 'Input' not in field:
f = filedialog.asksaveasfilename()
else:
f = filedialog.askopenfilename()
else:
f = filedialog.askdirectory()

if len(f) > 1:
argumentMap[field] = f
entry.delete(0,END)
entry.insert(0,f)
else:
argumentMap[field] = ''
entry.delete(0,END)
entry.insert(0,initMessage)

# get entry for prefix
def updateArgument(entry,field):

f=entry.get()

if "Required" not in f:
argumentMap[field]=f
else:
argumentMap[field]=''

# inform the user, uninitialized params
def printArgumentError(f):
msg="Please set a value for the parameter: "
msg+=f
print("%s" % (msg))

# create command
def createCommand():

v=StringVar()
comm=baseCommand + programArgs[0];
v=argumentMap[argumentNames[0]]
if len(v) <= 1:
printArgumentError(argumentNames[0])
return ''

comm+=v
comm+=programArgs[1];
v=argumentMap[argumentNames[1]]
if len(v) <= 1:
printArgumentError(argumentNames[1])
return ''

comm+=v
comm+=programArgs[2];
v=argumentMap[argumentNames[2]]
if len(v) <= 1:
printArgumentError(argumentNames[2])
return ''

comm+=v
comm+=pathSep
updateArgument(e4,argumentNames[3])
v=argumentMap[argumentNames[3]]
if len(v) <= 1:
printArgumentError(argumentNames[3])
return ''

comm+=v
print('%s' % comm)
time.sleep(10)
return comm

# run command
def runCommand():

comm=StringVar()
comm=createCommand()

if len(comm) <= 1:
msg="Can't execute myApp; missing required parameters"
print('%s' % msg)
return

subprocess.Popen(comm, stdout=subprocess.PIPE)

# create and grid the form
c = ttk.Frame(root)
c.grid(sticky="nsew")
c.master.title("myApp")

# create the widgets, first grid
# label, entry and browser for input
f1 = argumentNames[0];
l1 = ttk.Label(c, width=20, text=f1)
e1 = ttk.Entry(c,width=30)
e1.insert(0, initMessage)
b1 = ttk.Button(c, text='Browse',
command=lambda: openFileDir(e1,f1))
argumentMap[f1] = ' '

# label, entry and browser for output log
f2 = argumentNames[1]
l2 = ttk.Label(c, width=20, text=f2)
e2 = ttk.Entry(c,width=30)
e2.insert(0, initMessage)
b2 = ttk.Button(c, text='Browse',
command=lambda: openFileDir(e2,f2))
argumentMap[f2] = ' '

# label, entry and browser for output file
f3 = argumentNames[2]
l3 = ttk.Label(c, width=20, text=f3)
e3 = ttk.Entry(c,width=30)
e3.insert(0, initMessage)
b3 = ttk.Button(c, text='Browse',
command=lambda: openFileDir(e3,f3))
argumentMap[f3] = ' '

# label, entry for prefix
f4 = argumentNames[3]
l4 = ttk.Label(c, width=20, text=f4)
e4 = ttk.Entry(c,width=30)
e4.insert(0, initMessage)
argumentMap[f4] = ' '

# grid all the widgets
# first row, input
l1.grid(row=0, column=0, padx=5, pady=10)
e1.grid(row=0, column=1, pady=10)
b1.grid(row=0, column=2, padx=5)

# second row, output log
l2.grid(row=1, column=0, padx=5, pady=2)
e2.grid(row=1, column=1, pady=10)
b2.grid(row=1, column=2, padx=5)

# third row, output ldf
l3.grid(row=2, column=0, padx=5, pady=10)
e3.grid(row=2, column=1)
b3.grid(row=2, column=2, padx=5, pady=2)

# fourth row, output prefix
l4.grid(row=3, column=0, padx=5, pady=10)
e4.grid(row=3, column=1)

c.grid_columnconfigure(0, weight=1)
c.grid_columnconfigure(1, weight=1)
c.grid_columnconfigure(2, weight=1)
c.grid_rowconfigure(0, weight=1)
c.grid_rowconfigure(1, weight=1)
c.grid_rowconfigure(2, weight=1)
c.grid_rowconfigure(3, weight=1)

# second grid, action buttons
d = ttk.Frame(root)
d.grid(sticky="nsew")
b4 = Button(d, text='Quit', command=root.quit)
b5 = Button(d, text='Start', command=lambda: runCommand(),bg="green")
b6 = Button(d, text='Stop', command=root.quit,bg="red")
b4.grid(row=0, column=0, padx=5, pady=2)
b5.grid(row=0, column=1, padx=5, pady=2)
b6.grid(row=0, column=2, padx=5, pady=2)

# fix size
root.update()
root.minsize(root.winfo_width(), root.winfo_height())
root.maxsize(root.winfo_width(), root.winfo_height())

# run
root.mainloop()

 

mexico

We took our first trip to Mexico recently, staying on the coast down akumal way, picture below. Tranquil hardly begins to describe it. Managed to swim with green sea turtles, survey some Mayan ruins, indulge a little in the local cuisine and just generally relax with family/friends. A great respite, returned refreshed to H-town, but ready to go back to Mexico asap, maybe Merida next time.

IMG_0048

 

flaming lips

I think we’ve seen more shows in Houston over the last three years than all the years previous. Last night’s performance by the lips was one of the most theatrical and enjoyable of all time; mac deMarco did a great job priming the crowd. We were delighted to find that Wayne Coyne was as charismatic and eccentric as we’d hoped, belting out most of the classics and a couple of newer songs as well.  The band also put on a spectacular light show, punctuated by plenty of vibrant and crowd pleasing props.

IMG_0154IMG_0177IMG_0185

wolfsburg

Alas the wolfsburg died as it lived- painfully. Exsanguinated on I-45 by a piece of it’s own undercarriage to be precise. Apparently some debris broke off a corner of the drip pan, which proceeded to rotate into the transmission like a buzzsaw. Nice.

There’s nothing quite like finding out that your expensive DSG transmission is toast, which happened for the first time during a snowstorm in PA at ~ 50k. To have it happen a second time with ~99k on the clock meant that it was time for the knackery. Here’s hoping that the new vehicle is less of a money-pit. Now if you’ll excuse me, I’m off to look at some expensive mods for my wrx.

avett brothers

Per kind favor of good friends we were privileged to see avett brothers on the 18th down in sugarland. Energetic, touching show with a heartbreaking tribute to incredible talent chris cornell (a rendition of black hole sun). I fondly remember seeing avett brothers in ’07 during bumbershoot in seattle. Eddie vedder did a few surprise duets with crowded house, and I heard the shins live for the first time too. I digress.