Dragon Con 2017

Every time we come to this convention, we have a good time. Man, this year is no exception. I think yesterday may have been one of the coolest days I’ve ever had at a convention.

Each year I try to meet someone from the Frogpants podcast network, or someone from the Diamond Club and just say, “Hi.” This year, I had a really conversation with Brian Dunaway, and got Justin Robert Young to sign my Contender box. Since I got here, I’ve struggled a bit with what to get into or where to go. For the most part, I’ve just been hunting cool people to see and talk to. For the most part, this is a sci-fi con. There is also quite a bit of SyFy channel stuff here that I have no clue about, but I’ve been pleasantly surprised by how much I’ve enjoyed it anyway.

The Sailor Moon voice actor panel I went to was super fun and I have no idea what any of that show is really about. Stephanie and Ashley were huge fans of it and I’ve watched some of it with them, but I still don’t get it. The cool thing about some of these panels is that none of them necessarily need to be something you’re into as long as the people who are in it are fun to see and listen to. The Sailor Moon ladies were so fun, and they clearly love what they do.

One of the biggest wins so far for me was getting the legendary George Lowe to do the intro for our 400th episode. I was beside myself. I didn’t even know how to breathe after that happened. I have no idea if it’s going to turn out okay because the mic was so hot, but I think I can fix it enough that it sounds like it belongs. He was as genuine and wonderful as ever, and it’s always such a joy to meet him.

Second major win, which is pretty much as good as the first but lists are needed. I got to meet/hang out with Brian Dunaway! He was so cool, man. We really got to hang for a few minutes and spend some real quality time just talking about whatever came to mind. He asked me a bunch of questions as well which felt awesome to me. I asked him about coming on our show sometime and he was totally down for it. I’m hoping that really works out because I’d love to talk to him about all things podcasting and art. He’s such a down to earth, cool dude.

Well, that’s day 1 and 2 for me at Dragon Con. Not even remotely sure what we’ll do today, but I think we can find some stuff to get into. I’m a little crowd exhausted, but I think we can pick it up and make it through another day. I’m refreshed after getting to meet some heroes last night so I’m ready to take on the day. I’m not sure I’m ready for the level of crowds but we’ll see how it goes.

Woo!

Introspective Stephen

This blog has been neglected, then un-neglected, then neglected again for years. Over and over I’ve attempted to bring it back to life and start writing stuff in it again. I haven’t been able to maintain any schedule that I thought I would be able to. That’s really unfortunate.

I’m at a point in my online presence where so much of who I am is out there in the world. So many of the things I started years ago are still around even though I’ve grown into a different person. Every now and then I’ll change a theme or update the look of the art to kind of force my new outlook and new experiences into my old world. That doesn’t seem to scratch the itch like it used to. I am the kind of person that chases change and exciting new developments. It comes out mainly in my hobbies and my shopping habits. Newest. Latest. Best. That’s where I’m at. It’s also the name of a fantastic podcast >_>

I say all that to say that I’m on the verge of considering a full wipe of everything. That’s not to say that all the history I’ve built up is going away, but it might be sat to the side in favor of rebooting. I wasn’t a father a billion years ago when I started this blog. I wasn’t a guy with podcasts. I wasn’t even out of college yet. I don’t even really know if I was in college at the time, I’d have to go back to look. There’s so much that I could do that I’m not doing and I need to start making some changes.

Who knows how far this extends, and what I lose when I move along to something new? Who knows if I’m even going to do it? It’s just one of the many things floating around in my head today. I’ll be giving it some thought over the next few weeks and we’ll see where I end up. H&H is coming up on Episode 400. That’s been weighing on me a bit. It’s Episode 400 and we’re largely at the same listener count we’ve been at for years. Is that okay? Should we be fine with that? Maybe the answer is yes. I don’t know. The market is pretty saturated now and it’s hard to get noticed by people. I guess we’ll see what I decide to do with that as well. BAH! Introspective Stephen is Introspective.

Later!

Europe Bound!

I’m on my first ever trip across the Atlantic Ocean. I’m headed to the Czech Republic for work and I’m both excited and super nervous about the whole ordeal. I’ve only ever traveled to another country one time, and it was just to the Dominican Republic as a big group. This time I’m traveling with a co-worker so I’m still not alone, but more alone than I was the last time. We’re going to be in Prague the first day we’re there and then headed to Brno for a developer conference. I’m excited about being there and seeing the sights, but I’m definitely going to be missing my family a ton. I haven’t been away from them for this long since Sam was born. I went to Boston for a week back then and that was even hard. Sam is older now though, so it’s a bit tougher. He doesn’t know that I’m going to be gone that long, and it was hard to leave him. Not going to lie. I cried a bit.

Anyway, I’m planning on getting a ton of reading done while I’m on the plane and I might watch a movie or two as well. I brought Hellboy and a couple Pixar movies. I try not to watch anything too crazy when I’m on the plane next to people. As much as I love watching Deadpool, it’s probably not the kind of movie I want to watch around other folks. I’m actually super considerate when it comes to sitting next to people and would hate for them to be offended by my entertainment choices. I’m hoping I can finish my star wars book before I have to take it back to the library. I have until Friday and I’m almost 50% of the way through it. I think I can pull it off.

My plane just got to the gate! Yay! I might write some while I’m on the plane as well. I could write a short story about Jim Doogan if I want. That would be pretty awesome and it could help me adjust his tone a bit. If I do write a story about him, it’s going to be an awesome treasure hunt. Maybe not from his perspective either. What if it was a lot like Treasure Island. That could be really fun :D.

Here I go!

Building a Twitch Alert System

I help run a Twitch channel with a fellow group of nerds called 2Dorks. We produce a whole bunch of content on our Twitch Channel and last week we decided that we should put that all to good use. Jacob, a fellow dork and quite the philanthropist, decided that a 12 hour charity stream would be an awesome way to “do some good in the neighborhood.” We all agreed and quickly threw together plans to make this happen.

The meat of this post is on the alert system. We had a few problems:

  • Toys for Tots didn’t have any kind of alerting at all, and no connection to Twitch.
  • They don’t send an email to the donation recipient when someone donates, so no parsing emails for a notification.
  • The only place to get your donations is from either table in your admin panel, or a downloadable csv file.

This doesn’t sound like anything too bad, but it got a little hairy. We didn’t know a few things;

  • Does the list populate by most recent or are donations appended?
  • Does the list paginate, and at what point?
  • How can we grab data from behind the login wall with a script?
  • Is the data unique enough that we won’t trigger duplicates?

Like all good problems, you should always start with the questions. We had plenty of them.

I set to work on planning this thing out. There was no way that we were going to do a donation heavy stream without some way of showing an alert on the screen, or a tracking meter for when someone donated. I can imagine a lot of Twitch streamers would love to donate to something random and maybe this info can help someone. I am NOT a seasoned python dev, but I dabble. So take what you see here and improve on it if you think there’s a better way.

I knew we needed to be able to send alerts to Streamlabs, a common service used by Twitch streamers to display alerts on top of their stream. The good news on that front is that I had worked on a python based alert system utilizing the Streamlabs API, so I had that code already. I just needed to find out how to send the alerts from data I had no idea how to get.

GOOGLE

There’s you answer. I googled a bunch of stuff and finally got pointed to selenium. It’s a python module (oversimplification) that contains a function I need called webdriver. It can not only open webpages, but also click buttons and fill in boxes. I used that to login to the donation administration page, and grab the table. Here’s the code:

# initiate
driver = webdriver.PhantomJS() # initiate a driver, in this case PhatomJS. No Window PopUp
driver.get("https://p2p.charityengine.net/ToysforTotsFoundation/Dashboard/Donations/") # go to the url

# log in
username_field = driver.find_element_by_name('UserName') # get the username field
password_field = driver.find_element_by_name('Password') # get the password field
username_field.send_keys("username") # enter in your username
password_field.send_keys("password") # enter in your password
password_field.submit() # submit it

# gotta wait while the new site loads
time.sleep(3)

html = driver.page_source

#turn the html into ascii so we can iterate over the lines
html = html.encode('ascii','ignore')

#close PhantomJS Instance
driver.quit()

That chunk of awesome logs into the given URL with my admin creds, then pulls down the source code of the page. I had to put a sleep command in there to stop it from pulling down the login page code. Three seconds seemed to do the trick. Just long enough for the page and the actual data I needed to load. I grabbed the HTML because I needed the table where the names and donations lived. Luckily, it was the only table on the page, so I could parse each line one by one and just search for instances of name. The issue there is that I needed to separate actual names from other stuff. ENTER REGEX LAND! More googling plus a regex tester and I ended up with this:

for line in str.splitlines(html):
    if re.search("(
<td>([0-9a-zA-Z]+\s*[0-9a-zA-Z]*)<\/td>)", line)

That little piece of code loops through each line in the HTML and searches for a tag with something like Bob Whatever and considers it a match. Later on, I realized that this was a huge mistake, because it would ONLY match instances of names of either 1 or 2 words. Not 3 or 4. It also wouldn’t work on people like Nikolaj Coster-Waldeau should Jamie Lannister actually desire to donate. It also wouldn’t work on Edith and Archie Bunker or Conan O’Brien. My revised code after the entire thing blew up looks like this:

for line in str.splitlines(html):
    # Find the username line in the table
    if re.search("(
<td>
Opted out of communications<\/td>)", line):
        continue
    if re.search("(
<td>([0-9a-zA-Z'*-*]+\s*)*<\/td>)", line):

That part with the Opted out of communications line also had to be added so that the looper would skip instances of that. There is a hilarious moment where Mr. Opted out of communcations donated a bunch of money. Had to kill the script in a bad way. Lesson learned!

Onward to Redis!

Not only did I need to find the names and the amount they donated, I also needed to keep that data somewhere. What could I use to define two simple values that I could reference easily? REDIS!

I have never worked with Redis, but I knew enough to know it was a simple key/value store that I could use to store stuff like donator_name: value. It was perfect! I also knew how to access it with python since I had goofed around with another idea from before.

So I stored each line discovered with the loop in a dictionary that looked like this: {'Hulk Hogan': '$7000.00'}. That was in a list so it was a bunch of those over time. After I had the list of key/values, I looped over that list and ONLY stored values in redis that weren’t already there. I would check to see if name = donation, and if it didn’t, I’d add it. I figured people might donate twice. NOTE: The big issue with this is if someone donated twice the same amount, I wouldn’t alert nor include it. I took a risk and I knew it.

# iterate over the result list, load each dict into the redis db as a keypair
for i in result:
    if r.get(i.get('name')) != i.get('donation'):
        f.write(i.get('name') + ': ' + i.get('donation') + '
' + '\n')
        r.set(i.get('name'), i.get('donation'))

That’s the code that does the storing of the value. You can kind of see what I’m doing there. I also stored the donation into a donations.txt file. That file would be used for a bunch of stuff. I needed that one to load into a webpage so we could feed it to Open Broadcaster Software which is what we used to make all the ovelays.

Alert. Alert.

So now we havea all the data in a file and we are currently holding it in result list. That result list is handy because I could use it inside the loop to call my alert function. By the way, the alert function looks like this:

#Twitchalerts API
url = 'http://www.twitchalerts.com/api/v1.0/alerts'

# Payload. Still need to add a gif and a sound
payload = {
"access_token": "no_you_can't_see_this",
"duration": "5",
"type": "subscription",
"special_text_color": "#ff0000",
}

# Define the alert function that will be used to actually fire to streamlabs
def alert(name, donation):
    payload['message'] = '*' + str(name) + '* has donated *' + str(donation) + '* to Toys For Tots!'
    session = requests.Session()
    response = session.post(url, data=payload)

So I would do something like alert(i.get('name'), i.get('donation')) at the end of the result loop. I threw a time.sleep(15) in there because I don’t know how streamlabs handles a ton of alerts coming in at once. I wanted to avoid any missed alerts.

Meter Time

Okay, so we have our data alerting. GOOD! Job done, right?

WRONG!

Our good buddy, Drest, from our WoW streams surprised us with a meter for keeping track of donations. “All you have to do is plugin your data,” he says. Sounds great!

It was so much trickier than I thought and required more of that good ol’ Google. I figured out after a lot of trial and error that I could take the text from files and load it between <div> tags using jQuery. That way, I could define the data on demand rather than having to statically put it in the webpage. This was important because data was going to change and I wanted to make sure the website, AKA meter, got all the data.

So, I decided to just write out all the info into files that the jQuery could load from. Here’s what that looks like. **IT’S UGLY**

with open('/foo/bar/donations.txt', 'r') as content_file:
content = content_file.read()

f = open('/foo/bar/total.txt', 'w+')
total = 0
for line in content.splitlines():
    dollar = re.search("[0-9]+\.[0-9]{2}", line)
    dollar = dollar.group()
    total = total + float(dollar)
f.write('${:,.2f}'.format(total) + '\n')
f.close()

f = open('/foo/bar/percent.txt', 'w+')
percentage = float(total) / 500
f.write("{:.0%}".format(percentage) + ' \n')
f.close()

num_lines = sum(1 for line in open('/foo/bar/donations.txt'))
f = open('/foo/bar/lines.txt', 'w+')
f.write(str(num_lines) + '\n')
f.close

I would have done this smarter, but I didn’t have enough time and I don’t know HTML or PHP. I knew how to load the text from a file, but not how to separate it. The jQuery that actually pulls in the data looks like this:

$(document).ready(function () {
function callAjax() {
$("#amount").load("total.txt");
}
setInterval(callAjax, 10000);
});

That `setInterval` deal came a lot later. I learned that I needed to not only dynamically update stuff on page load, I also needed to do it in increments! That became apparent when we realized that the OBS plugin we used to display web content didn’t actually refresh or even have a refresh interval.

The good part about all this is that Drest was awesome and programmed div id’s around all the spots where I needed to put the text. So all I had to do is load the text file into whatever div I needed it to go to and everything was fine.

Lessons Learned

Double check your REGEX and consider alternates.
This one burned pretty bad. When a four name person came in, it totally broke the entire engine. Since a name wasn’t found, the next value of a dollar amount didn’t have anywhere to go and the script broke. It broke again later when a person with an apostrophe in their name donated, but by then I had gone to bed and nothing could be done at the time.

Stuff is gonna break. Roll with it.
We were troubleshooting bugs for an hour while LIVE. Though not ideal, it happens. Stuff is going to break. The key to this is knowing enough about the code you wrote to know where the issue is. This is where copy/paste can really burn you. If you just pull from websites and don’t **understand** your code, then you’re going to get hurt.

PHP/HTML/jQuery
I need to know more of this. That’s all.

If you can draw it, you can build it
A network teacher told me that a long time ago. I envisioned how I would hold the data early on in the project. Once I had that vision, I was able to put the pieces together. The blank page was terrifying. THe first thing I did was paste in my alert code I wrote a long time ago, because I knew how it worked. After that, some of the intimidation went away and I just started plowing away at it.

Charity streams are awesome
We were able to raise over $500 for Toys for Tots just by sitting down and playing video games all night. Granted a lot of effort went in to promoting it and getting people on board with us, but at the end of the day we just hung out and played. It was amazing. We definitely want to do it again, but we’ll pick a charity early next time and hopefully have the bugs worked out.

Code

Yep. I did the thing. I wrote an app that alerts a service by pulling data from another service. I wrote my first python script in July of this year, and now I wrote something on my own because I could. I would have never imagined this even a year ago, and now here I am. Once you know how to code, the possibilities are endless. I’m no expert, but I made a thing that did a job for me that otherwise would have been impossible. I think that counts for something.

Hopefully this post provides some info for other folks who want to send alerts for charities that don’t necessarily have a great system for weird off-shoot stuff like a Twitch stream. Extra-Life and Child’s Play cater to this kind of audience but there are plenty who don’t.

Questions

Got anything you want to know about this stuff? Just leave a comment on the post. I’ll try to answer them. I hope to put my code for this up on Github once I sanitize it a bit and add some comments. I also need to get Drest’s permission since the meter site was his minus the jQuery statements.

Streaming!

I have a had a blast picking up the hobby of streaming video games online.

A while back, Ashley and I decided to open up the stuff we do on the internet to more content. For me, it didn’t feel right for that content to all be labeled Horseshoes & Hand Grenades. Our show has a certain brand of humor and style that didn’t feel like it should encapsulate all the stuff we wanted to do. That’s where 2Dorks came from. Stephanie proposed the title when Ashley and I were discussing a creative writing project. Now we have a pretty decent little following over on twitch.tv/2dorkstv where we broadcast all the fun stuff we do. Horseshoes and Hand Grenades is over there, along with anytime we want to stream a video game.

It’s been pretty fun so far and we’ve been really happy to welcome Jacob into the fold for creating fun stuff. He and I started doing Diablo streams on Mondays and that’s been super fun. Now we’re talking about running dungeons in WoW as well. Stephanie actually came up with that idea when she got the itch to play it a few days ago.

I’m also officially doing The Adventures of Stephen on twitch every Tuesday night at 8:30pm. I’m going to be playing nothing but point-and-click adventure games, both old and new. I played Full Throttle already and tonight I’m starting a full franchise playthrough of the Monkey Island series. It’s easily one of my favorite series’ of all time. Up there with Mario for sure. I’ve always loved those games for the humor and really smart puzzles. I’m excited to dive back into this one because it’s  been a long time since I’ve played it. I have tried to fire this up once before and found that I got frustrated a littel early on, but I think I’m in the right mindset this time around.

  • The Secret of Monkey Island
  • Monkey Island 2: LeChuck’s Revenge
  • The Curse of Monkey Island
  • Escape from Monkey Island
  • Tales of Monkey Island

I’m doing all of those above games in a row first. Then I’m going to break out into some new stuff. I just figured, why not start with one of the best adventure games of all time and then move on. After that, I might give Toonstruck a shot. I haven’t played that in years and it deserves another look for sure.

Anyway, I’m excited about all this and pumped to get started. Can’t wait to see where it all goes!

The Bottom of the Barrel

It’s been a couple days since the infamous night that Trump managed to take the election. I’ve had some time to think this over, and I’ve had some time to consider what this all means.

Democracy worked and the country got what they wanted. Say what you will about popular vote vs. electoral vote, this is what happened. In all of it’s beauty, sometimes democracy works against the vision of some.

The thing that keeps me disheartened isn’t necessarily the fact that Trump will be the president. I honestly hope for the best and I hope that he’s able to speak to the people in the country that feel forgotten or betrayed by their government. There were plenty of things that President Obama did that I know a lot of the country was unhappy about, and left a lot of folks feeling uncared for. That being said, in regard to all of those hateful things that incited violence and fear around the country, I hope he fails miserably with those campaigns. I hope his wall is never constructed, I hope his deportation of millions of illegals can’t go through, I hope his ban on muslims entering the country is completely overruled by the supreme court as unconstitutional, and I hope that he is quick to quell the rampant and open hatred of non-whites that has emerged.

Honestly, not all of trumps policies are bad. I’ve looked at the stuff he wants to do. He has some decent ideas. Granted I’m not knowledgeable enough in it to speak to the details, but overall, there are some things that I think we will be nice to see. I’m not on board at all with his dismissal of evidence or fact in the case of environmental issues, and I’m definitely not on board with his views on the tech industry and how they should support the NSA in their spying efforts. That platform will never fly with me.

I just wish that in all of his campaigning he hadn’t stirred the pot of frustration and anger with so many in this country. There are already non-white, non-straight people being openly persecuted by many of those who support Trump. He calls for healing and unity, but he spent a year making sure that those people were given a microphone and given a kind of acceptance in their views. These are folks that are generally good people, but when they sit around with their friends and family at Sunday picnics or BBQs in their backyard, they were talking about the Muslim problem, or the black people in town that were causing problems. I know this is the case because I’ve seen this kind of stuff first hand. I’ve watched these conversations and always figured, “well, that’s just water cooler talk for these people. They live in it every day and they only act like this around each other.” Well, now they feel that the country agrees with them and are much happier to act out and let their group of choice know that they aren’t welcome here.

I can’t validate every story, but there are tons of tweets out there of minorities that are already feeling the results of this Trump win. It has nothing to do with economics and everything to do with a man that said we need to get these people out of here. The weird thing is, Trump didn’t openly say that blacks are a problem, but the message he sent about Muslims and Mexicans resonated with a group that thinks they are. He didn’t understand the power of his words. History is littered with men who stood from a pulpit and said something that caused a reaction. Sometimes the reaction they wanted, and sometimes people took it further than they had hoped.

The important thing here is that it’s up to the ones who care about people as a whole to take in those that feel like they aren’t welcome. We need to show them that there are people who care, and we want them to know they’re safe with us. I also ask that if you voted for Trump, for economic and american dream reason, you realize that there are people that voted because he would get rid of brown people. It’s as important for you to not ignore what’s going on, and make sure that those people are told this is not what America is about. I’m all for you voting for him. You believe he has a plan to restore some kind of greatness that you feel is lost, but don’t let his ‘bad’ supporters demolish all that is good in America.

Same goes for the democrats who lost. Don’t set things on fire. Don’t chant “Not my president.” This isn’t productive. Instead, show love to those who voted for either side. Don’t lower yourself to the level of those who oppose you just to make a point that you don’t support our president. Be better than that.

In Shock – Election 2016

I don’t really know what to think this morning. It’s the day after the election in the US and we’re staring down the barrel of a Trump presidency.

I’m shocked and confused how somebody as divisive as this man could garner enough support to become the 45th president of the United States. He’s ran a campaign based on fear and hate. He’s told masses of people that they are something to be feared because of the color of their skin, their country of origin, or their religion of choice. Somehow he ignited a part of this country that I think a lot of us kind of wanted to forget existed. We’d spent most of this election season choosing to believe that there was no way he could walk away with this.

I’m not a Republican or a Democrat. I think parties are a problem in American politics. It breeds a culture of divisiveness in our political system. John Adams said this way back in the day when our country was brand new:

There is nothing which I dread so much as a division of the republic into two great parties, each arranged under its leader, and concerting measures in opposition to each other. This, in my humble apprehension, is to be dreaded as the greatest political evil under our Constitution.

He’s right. This has been one of the ugliest battles I’ve ever seen in my life when it comes to the presidency. Sure, people were upset when their candidate lost before. Though I think that all in all, we knew we were going to be okay. We knew that mistakes would be made, decisions would leave us confused and concerned, but most of our presidents have been “good” people. I put that in quotes because there are varying degrees of good. At least they seemed to have the best interest of all Americans in mind. Trump doesn’t. If you are white, non-Muslim, you are “American.” He hasn’t said that directly, but his actions and collections of words and deeds speak to it.

I think President Obama has done a lot of stuff I don’t agree with. He has, however, been one of the classiest presidents in recent memory. He stood in front of the UN when being pushed to do something about the hate speech in America by saying:

“Here in the United States, countless publications provoke offense. Like me, the majority of Americans are Christian, and yet we do not ban blasphemy against our most sacred beliefs. As president of our country, and commander-in-chief of our military, I accept that people are going to call me awful things every day, and I will always defend their right to do so.”

That’s the opposite of the way Trump has carried himself during this campaign. He’s threatened the media with lawsuits because they said mean things about him, or even simply used his quotes in ads. That’s not how I think someone who is leading our country should behave. We need a leader who will defend our rights and liberties even when they disagree with them personally. I’m afraid that Trump will be way to sensitive to carry the power that we’ve just appointed him with.

At the end of the day, my goal and my family’s goal is to love others. I may not be able to control what happens in the higher tiers of our government, but I can control what goes on in my small corner of this planet.

“…But as for me and my household, we will serve the LORD.” – Joshua 24:15

One last thing. Trump’s platform in many aspects involved cleaning things up and getting rid of the immigration problem. We did this to the Irish as well back during the civil war. They were treated as trash, and many forced to fight for the Union as soon as they got off the boat. We would call that disgusting behavior as we look back at it, but we’re willing to do the same thing to a new set of people and call that “patriotism.”

Let’s not forget that this poem by Emma Lazarus is engraved on the Statue of Liberty, one of the most recognizable symbols of American freedom.

The New Colossus

Not like the brazen giant of Greek fame,

With conquering limbs astride from land to land;

Here at our sea-washed, sunset gates shall stand

A mighty woman with a torch, whose flame

Is the imprisoned lightning, and her name

Mother of Exiles. From her beacon-hand

Glows world-wide welcome; her mild eyes command

The air-bridged harbor that twin cities frame.

“Keep ancient lands, your storied pomp!” cries she

With silent lips. “Give me your tired, your poor,

Your huddled masses yearning to breathe free,

The wretched refuse of your teeming shore.

Send these, the homeless, tempest-tost to me,

I lift my lamp beside the golden door!”

The Secret of Monkey Island: Special Edition Crash FIX

I don’t normally post this kind of thing on the blog, but I had such a hard time finding the fix for this that I felt compelled to put it up here.

I started up The Secret of Monkey Island: Special Edition for the first time in a long time the other day. Much to my dismay, it crashed on startup. I tried again. Crash! Nothing seemed to work. Googling the problem revealed that it is an issue that arose after Nvidia released the version 369 driver. I’m on 373 or something and I just didn’t want to have to roll back.

If you are running into this problem, there is a really simple fix.

Download the d3d9.dll file and drop it in <SteamLibrary>/steamapps/common/The Secret of Monkey Island or whever your game directory is

That’s all it takes! It fired up and worked like a charm. The file is used for better performance in Skyrim but it does the trick for this issue as well.

Here’s a link to the file hosted on curse.com: https://mods.curse.com/mods/skyrim/skyrim-better-performance

Wounded Knee

I haven’t posted anything to this blog in a really long time. A lot in life has changed, but I’m not really going to concern myself with too much of it. Here are the high points:

  • I’m now working at Red Hat. (Yay!)
  • Sam is 16 months old.
  • I finally pulled up all the ivy in my yard.
  • I’m learning to code with python and being somewhat successful with it.

Good! Now that we have all of that out of the way, it’s time to cover the real subject of today’s blog. Stephanie broke her kneecap.

You read that right. She broke her knee cap right in half. It may have been the most terrifying event of the year, and I have a sixteen month old that scares me nearly every day.

The day started normal enough. I kissed my beautiful wife and son goodbye and headed off to work in downtown Raleigh. Speaking of, it’s only twenty minutes away from me which is amazing. I got a call about an hour after I got the office with Stephanie on the other end. It wasn’t a cheerful or happy call that you would want to receive. It was that terrifying call that you never want to get as a husband. She was on the verge of tears and quickly told me, “I need help. I think I broke my knee.”

Well then. Holy crap.

I booked it home faster than I think I’ve ever gone. I broke all the speed limits I could break as long as the cars in front of me would allow. I wouldn’t advise this. I learned along the way that you can easily get a stress ulcer from trying desperately to spot all the police that might be on your path. Just don’t do it. I don’t know how people drive that way all the time and call it fun. It was awful. Maybe it was also crappy because I knew my wife was in the middle of the woods with my son and a broken knee.

Stephanie is tough as nails. I would have passed out if I had a knee cap that was broken in half, especially when it was so easy to tell what had happened. I got to her and found her and Sam watching cartoons on her phone. I have to hand it to the little guy. He was really good for a kid that had no idea what was going on and was sitting in the woods for nearly forty-five minutes.

Stephanie’s parents arrived about ten minutes after I did and we all worked together to hand out some tasks. I called 911, which was great because it gave me something to do. Doc check on her leg, and Stephanie’s mom took care of Sam for us. Ashley also helped bring some levity to the whole situation, which she’s awesome at. I had an awesome conversation with the 911 dispatcher and before we knew it, we had a ride to the hospital.

I had never ridden in an ambulance before. It wasn’t much different than riding in the cab of a U-Haul, but there were more needles, lights, and seats. The two EMTs that helped Stephanie were amazing and super helpful. I wish we didn’t need the ambulance, but there was no way of getting her out of there with her leg in the shape it was in. We could build a splint, but we had no way of getting some wheels.

The rest of the day was spent finding out that she had a broken patella and would likely need surgery to correct the damage. The weird part about all these shenanigans is that they won’t even see her at the orthopedist until Tuesday. How can you walk around with a broken patella for nearly a week? That just doesn’t make sense to me. I guess they know more about knees than I do though, so we’ll take it.

Stephanie’s spirits have been really high and I hope we can both stay that way. Not being able to walk is a super bummer. We have an amazing support system from everywhere though, and even though taking care of her and Sam will be a challenge, I think we can pull it off. I just hope these next couple months go by quickly so she can get back to doing normal things.

Huge thanks to all the well wishers today. It was a challenging and long day, but I’m glad we had wonderful people around to help us get through it. I’m also incredibly grateful to my boss at Red Hat for being understanding. I’ve only been there for three weeks and have already had to take time for a couple things that were out of my control. I like this job and definitely want to keep it!

Here’s to healing fast. Later!

Stuck In Neutral – Part 2

I turned around to see two more people standing up, frothing at the mouth. They ran past me and out the door of the operating room. They flung their hands wildly like they didn’t have control over them. I wasn’t very surprised considering I know wasn’t in the shell of a body that ran past me and out into the wild blue. What was even more disconcerting was that whatever I seemed to have was contagious. I was patient zero. I was the plague. I very well could be the end times. If I was going to be one of the four horsemen of the apocolypse, I should have had a horse.

I walked out of the door of the operating room and looked left and right down the hallways of the hospital. There was blood everywhere. The walls and floors were painted red with the stuff and people were screaming. Whatever was happening, it was happening fast, and I was going to need some way to stop it. I ran over to a nearby phone to call for help. I tried to grip it but my hand just went through the reciever. I tried again and again but nothing worked. I was Patrick Swayze in Ghost. As a matter of fact it had finally occured to me that I was a ghost. This wasn’t going well.

Down the hall I noticed a bright light. It looked a lot like the bright light that I saw when I initially collapsed in Wal-Mart. There was an impressive contrast against the blood everywhere, but I tried to reign in my aww since people died to create this particular “art piece.” I ran over to it and was quickly teleported to the same white room that I had found when I first died. It was crowded.

There were people everywhere and more popping in every few seconds. Whatever was going on down there, was not good. I saw Peter talking to a couple other guys with badges by the door. I shoved my way through the crowd of lost souls. Peter and I had a thing since we talked earlier. He would definitely know what to do to fix the problem.

“Pete!” I yelled over the crowd of people. He looked over to me with a very stern face.

“That’s the one. Get him. Bring him to my office.” Pete’s words were muffled, but I knew what he said. The two guys in white came over to me. They looked more concerned than I felt like angels should look.

“You Dave?” One asked.

“Yeah, I’m Dave. I was here earlier.”

“We know. Why don’t you come with us.”

They walked me over to the white wall and a door appeared. It was solid white but it had a nice glowy border to it. It must be hidden until someone needs to get into it. I walked through and I was in what looked like a standard office. There were some trophies on a bookshelf in the corner that said things like “Employee of the Month,” “Excellence Award AD 100,” and some crayon art pictures I’m assuming were drawn by kids who liked him.

Peter was sitting at a huge mahogany desk. It looked like something Winston Churchill would have in his office.

“Nice desk, Pete,” I said trying to break the ice.

“You like it? Winston Churchill made it for me,” he rubbed the surface and smiled as he said it.

“Would have never guessed,” I lied.

“Yes you would have. Don’t like to me, Dave.”

I coughed and looked around. I was clearly in the presence of a professional.

“Here’s the thing, Dave,” he started. “Do you see all those people out there? Those people aren’t supposed to be here today. Well, most of them aren’t. Do you know who they’re here?”

I figured I shouldn’t try to make anything up again. “Yeah. My body got up in a hospital and started attacking people. I don’t know why. I was hoping you could tell me.”

Peter sighed, “That’s what I was afraid of.”

He got up from his desk and walked over to his book shelf. He pulled down a huge volume that said, “Rules and Regulations for Admittance into Heaven.” He slammed the book down on his desk and started rifling through the pages.

“There is an appendix in the rulebook regarding these types of events. We don’t deal with them very often. Most people who die are supposed to be here, but occasionally we have people that haven’t finished their job. We fill their memory with weird stuff and send them home.”

“Is that why people think Heaven is some kind of spacey white place?”

“Yeah. We don’t want people going back thinking that it’s some bland office building. Trust me though, it’s way more fun once you get through the gate. We handle rejections here too so we have to be pretty standard with everything.”

“Makes sense.”

Peter appeared to find the page he was looking for.

“Here it is! Necromancy. Close enough, right?” He seemed to be asking me.

“Sure. I guess raising from the dead is almost the same.”
“Undead, Dave. You’re not raised from the dead until the boss says so. Bodies that get started up without souls in them, that’s a whole different animal. You people keep finding new ways to confuse me.”

“Well, if it makes you feel better, I didn’t set out to watch my body go on a rampage without me.” I thought about how that sounded as soon as it came out of my mouth. “I mean, I wouldn’t want to see it go on a rampage with me either, just so we’re clear.”

“It’s fine, Dave.” He kept his head down in the pages. “Aha! Here’s what you have to do.”

“Me?” I asked concerned. “You don’t have some sort of angel clean up crew that handles this kind of thing?”

“Budget cuts,” he said dryly. “We only bring out those guys when really bad things happen.”

“Is this not a really bad thing?”

“It’s pretty bad, but it only gets really bad if you don’t do what you’re supposed to do.”

“What am I supposed to do?”

Peter looked at me seriously, “You need to go get your body back.”

“It wouldn’t let me in! I tried that, then it went crazy. Some shield was keeping me out.”

“That’s because it wasn’t yours anymore,” Peter sat back down in the chair behind his desk. “You can’t just inhabit something that doesn’t belong to you. At least not when you work for us. You need this,” he pulled a badge out of his drawer and sat it on his desk. It looked like a sherrif’s badge blended with the star of David.

I picked it up, “What is this?”

“It’s a license to possess, Dave. You have a job to do and you’re not going to be able to do it without getting your hands on some stuff. That badge will let you inhabit most people for a temporary time, as well as move stuff around and interact with real world objects.”

“So I’m a poltergeist now?”

“Well, you’re a sanctioned poltergeist. Consider yourself one of our agents. At least while you clean up this mess. You need to go find your body and repossess it. Once you’re back in, the rest of the situation should clear itself back up. It’ll cause a chain reaction that will cause the rest of the bodies out there to drop and all of these people in my waiting room can go back. Since you were the first one, it all lands on you to handle it.”

“But most of those bodies have hole and bite marks in them. Won’t it hurt?”

“Geez, you are just full of questions,” Peter was visibly irritated. “They’ll forget the whole thing and their bodies will be whole again. We can handle it. You do your job and we’ll do ours. Now get out there and fix it.”

I looked down at the star in my hand and then pinned it to my shirt. I didn’t feel any different, but it may at least make things easier when I get back down to earth. I did feel a little bit more sure of myself, but I think that was just the badge. Dudes with badges are cool. I was now a cool dude. I started to leave Peter’s office.

“Oh, and Dave,” he said not looking up, “Don’t trust anybody, okay?”

“Okay,” I said. Not sure who I was going to run into, but that was good enough advice for me.

I walked back to the lobby, through the larger crowd of people, and back down the stairs the same way that I had come the first time.