Sinus Surgery (Round 2 — Sub Surface Mucosal Resectioning)

I’m not going to break this into several posts because I wasn’t ontop of things enough to keep a diary.

The Day of Surgery
The advantage of going in for round two is that I wasn’t nearly as nervous this time. That is lucky because there was a teenage girl who was in right before me to get her tonsils out. I could hear freaking out and crying from near complete panic. I saw a woman get this procedure done live on the Dr. Oz show using local anesthesia. Dr. Dawson does it under general anesthesia which I’m thankful for.

The procedure itself took less than 30 minutes. I went in. The anesthesiologist gave me happy drugs. I went to sleep. I woke up. It was easy with no muss or fuss.

I woke up with no packing and the ability to breath out of my nose. I had a mild headache but that was the only pain. Just in case I ate two puddings (which were delicious) and then popped some hydros.

As the day wore on, I stayed pretty comfortable. There was no pain in my nose. I could breathe. There was a little drippyness from my nose which went away within hours.  All in all, this was nothing compared to the deviated septum correction.

Days 2-3
My only symptom was a very bad headache. It didn’t feel like it was in any way connected with the surgery. In fact, at first I just figured it was caffeine withdrawal. After a couple cups of coffee didn’t help, I gave up and took my pain pills. That helped.

Because I’m paranoid, I called Dr. Dawson who assured me that a headache was one of the potential side effects.

Day 4
My headache was completely gone. I went in for my post op. Dr. Dawson used the snot-O-vac to remove some blood clots. I also had a very small amount of packing he put in there during the surgery removed.

I COULD BREATH! The right side was a little more restricted than the left, but nowhere close to where it was before.

I was told I could resume ALL normal activities in another 10 days. I could also start blowing my nose gently immediately.

Day 7
I was feeling a little disappointed because my right sinus remained a bit plugged up. To put a number to it, I would call it 80% of where I want it to be. Then I blew my nose one day.

Stop reading now if you are squeamish and move on to the next bolded text.

Something came out of my head. It was bloody and gross and completely awesome. It was the sort of thing that little kids giggle about. All of a sudden, I could breath perfectly out of both sides. PERFECTLY.

Day 14
As I was told, I could resume all normal activity 10 days after my post op. I really tested it here. The morning of day 14 saw me riding a chair lift up to the top of a cold snowy mountain for a skiing vacation. I have had no complications. No blood….nothing. I can breathe perfectly.

Some would call going in twice a failure. I don’t agree. I’m glad that Dr. Dawson was conservative his first time in. It is comforting that he treats surgery as a last resort and only does the minimum. I’ve read about Empty Nose Syndrome and would rather they take too little out than too much.

For anybody in the same boat I was in, I cannot recommend these procedures enough. My quality of life has improved immensely. I no longer have to go through a nightly regiment of nose sprays and allergy pills just to hope for sleep. I can breath and well. Recovery from surgery wasn’t bad.

< Sinus Surgery (One Year Update)


Sinus Surgery (One Year Update)

Unfortunately, I can’t call mission accomplished. It has been more than a year since I went under the knife (err chisel).  Before anybody sees this as a reason not to get the procedure done, let me be clear: I am far better than I was before.

The problem is that I am still congested at night. Interestingly, almost all of the problem is in the right side. Before it was the left. The congestion is better than it was, but still obnoxious enough to interfere with my sleeping. While I suffered complete blockage before, I would say that I have half blockage now. My ENT and I have tried several medicines in an attempt to head off a second round of surgery. While the results are better than before, they still don’t work well.

A second CT scan showed the problem. My deviated septum was straightened from intruding into the left side. When this happened, it decreased the space in the left side. My Doctor’s work to shrink the turbinates wasn’t aggressive enough on the right. We decided together that the best option was to go in for a second round or surgery. Luckily, we decided this while there was still time to get in before my insurance deductible recycled.

The recommendation was to have a “sub surface” mucosal resection. In short, he goes inside the mucosal tissue of the turbinate and removes tissue but more importantly causes scarring inside the turbinate. The effect of this is that the turbinate is slightly smaller than before and cannot swell due to the internal scarring. While this sounds invasive, he promised that it is really not very invasive. Because all of the work happens inside the mucous tissue it heals quickly and results in little pain.

< Sinus Surgery (3 weeks) | Sinus Surgery (Round 2 — Sub Surface Mucosal Resectioning) >

Fix: Internet Explorer 9 Freezes After Resuming from Sleep

IE started freezing on my Win8 x64 PC whenever I resumed the machine from sleeping.  The GUI would load completely, but would freeze as soon as I tried to load a web page.  It would lock up for about 60 seconds and then come back like nothing was wrong.

  1. Try disabling all add-ons:  This didn’t work for me, but it is always the first step for troubleshooting IE.
  2. If that doesn’t work, try resetting IE settings:  This will require you to restart the computer.  It worked like a charm for me.
  3. If that doesn’t work, check the error logs.  Reproduce the error and make note of the exact time.  Go to start > run and type eventvwr.msc.  Run through the different error lists and look for errors which occurred at the same time as IE froze.  If you can find a suspicious error, try searching for that.

Colorado Green Chili

Green Chili (AKA Chili Verde) is probably second only to Coors Beer as the ubiquitous food of the state of Colorado.  Never mind that Colorado means red colored.  In Colorado, green is king.  It is the perfect meal for a cold rainy (or to be more authentic: snowy) day.  I may have moved west of the Rockies, but I still have Green Chili in the blood.

Prep time: 1 hour

Cook time: 3 hours


4-6 Green Chili Peppers — I’ve used both Anaheim, Poblano or Ancho Chili peppers.  Poblanos are hotter, but I’m limited to what I can get at the supermarket.  Anaheim peppers are bigger so I use 4.

10 medium (2in) Tomatillos — If you can’t get tomatillos, tomatoes work.  Your green chili just won’t be green.  Many people make chili verde with tomatoes.

1 medium yellow onion — diced

1 head of garlic, minced — go big or go home.

2lbs Pork roast — Pork shoulder tastes best but has the most fat.  I’ve had good luck with pork loin.

1 cup fresh cilantro, diced —  If fresh cilantro isn’t available, double up on the ground coriander.

1 Green Pepper, diced

0-2 Jalapeños — if you don’t like spice, go with 0.  If you are a fire-breather, go for 2 or upgrade to serranos.   I put in 1.5.

1 Quart chicken broth

1 Tbs ground cumin

2 tsp ground coriander

1 tsp cinnamon

1 tsp oregano

2 Tbs brown sugar

salt and pepper

2 Tbs olive oil

Optional Ingredients

1 Can white kidney beans — beans aren’t authentic to chili verde, but I like them anyway.

1 Denver Broncos football game — preferably when winning.

1+ Bottle of Coors or Fat TIre, for the chef — Any beer is acceptable as long as it isn’t Yuengling

1. Roast and skin the green chilies

It is best to roast your green chilies on the BBQ grill, but that isn’t often a possibility during green chili season.  Here is an alternative

  1. Turn on the oven broiler and let it preheat.
  2. Cut in a circle around the stem of the pepper.  If done right, you can pull out the stem and 90% of the seeds at once.
  3. Half or quarter the chilies.  The goal is to get them to lay as flat as possible.  You may be able to smash them down flat.
  4. Lay down a layer of aluminum foil on a large cookie sheet.
  5. Lay out the chilies so they don’t overlap
  6. Place the whole thing 6-10 in from the broiler
  7. Broil until most of the chili skin is blackened and starting to bubble off, then remove the chilies from the oven.
  8. Fold the aluminum foil over on itself making an airtight package and sealing the chillies inside.  The steam will help loosen the skins even more.
  9. Don’t touch until they are cool enough to handle
  10. We will return to the chilies after the rest of the prep work.

2. Cut the pork roast into bite-sized cubes.  Liberally salt and pepper the cubes.

3. Prep the rest of the vegetables

  1. Dice the onion and put in a bowl.
  2. Smash and mince the garlic and put in a bowl
  3. Dice and de-seed the jalapeños.
  4. Dice the green pepper and mix with the jalapeños in a bowl.

4. Prepare the tomatillos and cilantro

  1. Remove the husks from the tomatillos.
  2. Half them and put in a blender
  3. Rince and cut the bottom half of the stems off of approximately 1/2 bunch of cilantro.  You should have about a cup of the leafy part left.  Toss that in the blender
  4. Add about 1 cup of chicken broth to the blender.
  5. Blend for a few seconds until smooth.

5. Skin the Chilies

The chilies should be cool enough to handle now.  Open the aluminum foil packet.  The skins should be almost falling off the chillies.  They will peal off in sheets.  Get off as much of the chili skin as possible.  You don’t have to get all of the skin off.  Just try to get most of it off.

Dice the skinned chilies and set aside.

6. Start frying

  1. Heat 2 Tbs of olive oil in a very large skillet over high heat
  2. Get out a Dutch oven or large stewpot and set aside.
  3. Dump in the diced pork into the skillet.
  4. Brown the pork stirring occasionally.
  5. Once all of the pork is browned — not necessarily completely cooked — poor in a bowl and set aside.  Try to keep the oil and drippings in the skillet.
  6. Lower the heat to medium.  Sweat the onions until clear
  7. Lower the heat again.  Add the garlic.
  8. Once the garlic is brown, dump the whole thing into your Dutch oven or stewpot.
  9. Deglaze the skillet with some chicken broth then pour it in with the onions and garlic.

7. Put it all together

Dump the pork and all of the remaining vegetables into the pot.  Pour in enough chicken broth that everything is mostly submerged.  Add all spices and stir to combine.  Turn up the heat until the mixture is simmering.  Make sure to stir regularly.  You don’t want this to burn to the bottom.  Turn down the heat to low and cover.

8.  Wait for 2-3 hours.

After 2-3 hours, the pork should be nice and soft.  All of the vegetables should have cooked down.  Add the beans (if you want beans) and stir to combine.

You’re done.  Add salt to taste (I had to add 2tsp).  If the chili tastes too acidic, try adding a little brown sugar.

Serving suggestions

Serve in a bowl with flour tortillas

Serve over fried eggs for breakfast

Serve over ‘smothered’ burritos

Schedule A Task In Windows 8 (the easy way)

Open the Task Scheduler Snapin with Administrator Privileges

  1. Hold down the Windows Key and hit R
  2. Type ‘mmc’ in the open field and hit okay
  3. Click ‘yes’ on the User Account Control security prompt
  4. Click File > Add/Remove Snap-in
  5. Scroll to the bottom of the list of available snap-ins.
  6. Click Task Schedule then click Add
  7. Choose local computer and hit OK
  8. Hit OK again
  9. Click Task Scheduler (Local) in the left-side snap-in tree.

Now you can either click ‘Create Basic Task’ or ‘Create Task’ under the right side ‘Actions’ menu

Create Basic Task: Gives you a wizard which is easiest if you are less of a power user or want to be walked through the process.

Create Task: Gives you more advanced options and doesn’t hold your hand through the process.

Here is the end of the Basic Task Process:

Schedule PowerShell Task

Powershell scripts can’t be automatically executed by Tasks alone.  They have to be executed by powershell.exe with arguments which run the script.

  1. Open the ‘Action’ tab of the task
  2. Click ‘Edit’
  3. Type powershell as the Program/Script (yes it does say script but don’t actually put a script there.)
  4. for the arguments, type (including quotes) -command “& C:\path\to\script.ps1” NOTE: I’m having trouble if there are spaces in the script path. The normal tricks aren’t working.  Best to avoid spaces altogether.
  5. Click okay

Expire Task Automatically

If you want the task to expire automatically — I do because I don’t want this thing to run forever — Make sure ‘open the properties dialog’ checkbox is checked from the wizard.  Then click finish

If you went the advanced route, start here:

  1. Click the triggers tab
  2. Click the first trigger in the list (ie the one which says how often your task runs) There should only be one.  Mine says weekly.
  3. Check the box next to expire
  4. Set the time/date
  5. Click OK

Check on the task

  1. To check on your task, perform steps 1-8 to open the task scheduler
  2. Expand the tree under task scheduler — click the arrow to the left of ‘Task Scheduler (Local)’
  3. Click Task Scheduler Library
  4. Click the ‘History’ tab below
  5. You’re looking for a line which says ‘Action completed’

Sinus Surgery Cost

How much did it cost?

Billed to Insurance: $32,012.21

Cost after Insurance’s negotiated rate: $9,130.04

Price I paid: $(significantly significantly less than that)

This doesn’t include any of the pre-op, or post-op visits.

Thank you Primera BCBS!

How to automatically update TFS workitems from the command line

A lot of my life is lived according to bugs filed on a Team Foundation Server somewhere.  One of my particular projects of late has been requiring weekly updates to a number of TFS workitems.  I guess they want to make sure we’re still paying attention to them.

I set out to find a solution where I could automatically bulk update my work items at the click of the button.  Stretch goal: I wanted to have this happen automatically without any interaction.

Step 1: download TFS Powertools from: (make sure you get the version which matches your copy of Visual Studio

Command line tool documentation is located at: C:\Program Files (x86)\Microsoft Team Foundation Server 2012 Power Tools\Help\TFPTCommandLineTool.mht

NOTE: I will write this assuming you are using VS 2012.  Assume the path to other versions will be different.

Step 2: Make sure your connection to TFS is configured.

cd "C:\Program Files (x86)\Microsoft Team Foundation Server 2012 Power Tools"
.\TFPT.exe connections

Verify that the correct TFS server is listed.

If the correct version of TFS is not configured:

  1. Open Visual Studio (2012)
  2. Click Team > Connect To Team Foundation Server
  3. Click Servers
  4. Click Add
  5. Configure the server

Step 3:

Create a query for the items you want to update.

The cron script will automatically update anything from a particular query.  You could just as easy specify work item IDs on the command line instead of using a query.  I decided against that because I wanted the flexibility to change the work items which get edited without having to change my code.

  1. Navigate to your TFS server in the browser (you could do this from Visual Studio Too)
  2. Click New > Query
  3. Build the query you want
  4. Save the query and make note of the location.
    In this case: Shiproom/My Queries/WeeklyAutoUpdate

NOTE: this query should actually say Changed Date < @Today – 6.  Not =.

Note that the last line is searching for @Today – 6.  I did that so that any work item I’ve updated within the last week isn’t touched by this query.

Step 4:

Verify that you are getting the correct work items IDs on the command line:  (replace http://tfsserver:8080/tfs with the server’s URL and the query name with your full query path)

PS C:\...> .\TFPT.exe query /collection:http://tfsserver:
8080/tfs /format:id "Shiproom/My Queries/WeeklyAutoUpdate"
PS C:\...>

Step 5:

Try editing an item through the command line.

Replace 942 with one of your work item IDs and once again replace http://tfsserver:8080/tfs with your server’s URL.

PS ...> .\TFPT.exe workitem /collection:http://tfsserver:8080/tfs /update 942 /fields:"History=."
Work item 942 updated.

Check to make sure your work item was updated.  It should now show a new entry in the history which merely contains a period.

Step 6:

Put it all together into a nice PowerShell script

$SERVER = "http://server:port/path" #Full URL to the server
$QUERY = "PATH/My Queries/QueryName" #Query of items to update
$UPDATECMD = '/fields:"History=."' #Command you want to run against them
$TFSPTPATH = "C:\Program Files (x86)\Microsoft Team Foundation Server 2012 Power Tools"

Set-Location $TFSPTPATH

$idlist = .\TFPT.exe query /collection:$SERVER /format:id $QUERY

#could avoid the loop and send all IDs at once
foreach($id in $idlist)
    $result = .\TFPT.exe workitem /collection:$SERVER /update $id $UPDATECMD
    Write-Host $result

pause  #remove this to run without an end prompt

I chose to nest the work item update in a for loop.  This isn’t necessary.  TFPT will take a list of work item IDs and perform the same operation on all of them.  I general feel safer when I wrap something like that in my own loop.  That way one failure doesn’t necessarily kill everything.  Additionally, you get instant progress if there are a large number of workitems which must be updated.

The program as it is above has a call to pause on the last line.  If you want to run this as a scheduled task, that line should be commented out.

Step 7:

Add this to a scheduled task so that you aren’t bothered to remember your bugs.


Thanks to:

This guy: for giving me a lot of the concept.

Sinus Surgery (3 Weeks)

I’m feeling great.  The only difficult part appears to have been the first 10 days.  Most of that was due to the unexpected bleeding.  I would have probably been feeling pretty good about a week out if that hadn’t happened.  All in all, I would say that the whole experience wasn’t nearly as bad as I was anticipating.

The surgery appears to have been a resounding success.  I can breath better than I ever could before.  As Dr. Dawson promised, my turbinates were a bit swollen at first, but they have shrunk down.  I can breath better now than I could even with judicious snorting of Afrin before.  I was worried a couple times, but it always turned out to be a clot or temporary irritation due to blowing my nose too hard.

I’m still seeing a little blood when I gently blow my nose.  Every day there is a little less.  I’m no longer coughing up things that look like they came out of a horror movie.  That’s probably for the best.  Emily was getting sick of me saying, “hey babe, wanna see something really gross?”  TMI…

In my 3-week post op yesterday, Dr. Dawson said I could go back to normal activities.  He just suggested taking it easy for a while.  No neti pot yet.

An unintended consequence of the surgery is that my neck and back feel a lot better.  I was doing a lot of stomach sleeping presumably because that was when breathing was easiest.  I can now sleep on my back (WITHOUT SNORING!) or my side comfortably.

My advice to anybody contemplating this surgery: do it.  Breathing at night is well worth a week of moderate discomfort.  Next checkin with the doctor is in another 3 weeks.

< Sinus Surgery (Days 7-10) | Sinus Surgery (One Year Update) >

Securing THE CLOUD

One of the primary purposes for this blog is to talk about information security.  An appropriate first post on the topic is Securing THE CLOUD.

Cloud is one of those words I don’t like to use.  It was drummed up by marketing gurus to make an old idea sound new.  All the cloud means to me is putting your stuff on somebody else’s servers.  Generally that stuff is accessible from anywhere on the internet, although they have coined the term ‘private cloud’ to describe a scenario where access is more limited.  I digress.

As a developer for the cloud, the stakes are high for you.  Customers are entrusting you to protect their stuff which is logically connected every internet user on the planet (potentially sans N. Korea, Iran, China, et al.).

Here is a checklist that I like to think of when I’m evaluating the security of a cloud product.  I suppose you could turn it around and use it as a howto guide.  Just a quick caveat.  I am not a programmer.  I stopped programming as soon as I realized just how bad I am at it.  You know what they say, “those who can’t do manage”.

  1. Guard the front gates with everything you have.  Every restricted-access cloud service sits behind an authentication layer.  That is your first line of defense.  The first line of code on every page (figuratively) should be an authentication/authorization check.
  2. Don’t even think of writing your own authentication system.  Let somebody else do that for you.  Trust me, they are much better at it than you are.  Use Microsoft ID (aka LiveID), Open ID, Google ID, Facebook ID.  Better yet, let them pick.  Your customers will thank you because that is one less password they have to remember.
  3. Don’t let the bad guy pretend to be a legitimate user.  How do they do that?  Cross-site scripting (XSS) is the most common vulnerability I run across in the wild.  That is followed closely by cross-site request forgery (CSRF).  Both of these can be leveraged by an attacker to cause a user to shoot themselves in the foot.   This is a huge topic which probably warrants its own post.  I’ll try to break it down.
    • sanitize! sanitize! sanitize! Consider every piece of data which is ever in a user’s possession as evil. This includes cookies, form variables, url parameters, and uploaded files. They are all evil and must be stopped.  I do mean everything.  Use somebody else’s form sanitization library.  Again, they have thought of things you haven’t.
    • Canaries are your friend.  This is the only effective way to prevent cross-site request forgery.  Multi-step forms don’t work.  Cookies don’t work.  Use a challenge-response system with canaries to validate that a user really just came from one of your pages.
    • Use HTTP commands as designed.  Never change state with an HTTP GET.  Use a POST.  It may take some extra JavaScript foo, but it is much harder to attack.
    • Scan every version of your code.  There are a number of automated XSS scanners on the market.  They are pretty good at finding script kiddie vulnerabilities.  If you are a juicy enough of a target to warrant attention by ‘advanced’ researchers’, you may want to invest in a second set of eyes.  Trust me, an expert pentest crew is a whole lot cheaper than getting horribly owned.
  4. Don’t do dumb things with SQL.  It never ceases to amaze me that SQL injection still works. Use stored procedures for everything.  Also, building an SQL string in a stored procedure and EXECing it is just as bad as parameterized SQL.  Don’t do it.
  5. SSL is good.  If the data is important enough to put behind a login page, it is important enough to protect with SSL.  Period.
  6. Protect data in storage.  This is a topic I am planning on writing a dedicated post about.  The news is full of companies whose data has been stolen and put on pastebin or similar.  If it shouldn’t be shown to the world, it should be encrypted.  Stay tuned for the specifics of this.

As I write this, you may notice that none of these items are specific to the cloud.  These are all best practices for developing on the internet in general.  That is because they are the same thing.  Cloud == internet, internet == cloud.  Marketing will say what marketing will say.  For the rest of us, nothing has changed.  The web is still the web.  If you can secure one, you can secure the other.

Sinus Surgery (Days 7-10)

8 Days Post Surgery7 Days Post Surgery

I started bleeding again last night.  It was worse this time.  It went right around the packing he added after yesterday’s cauterization.  I did eventually manage to get it stopped.

I set up an appointment to go back into Dr. Dawson.  He poked around again and couldn’t figure out which area had been bleeding and couldn’t find any obvious contenders for more cauterization.

Very apologetically, he said that he would have to completely pack that side with gauze just like it was right after surgery.  He also said that this sort if thing happens very rarely.  I went home with a packed left sinus.

8 Days Post Surgery

I got almost no sleep.  My right sinus is flowing 49% of normal air.  It turns out it takes 50% in order to sleep comfortably.  It was another night of mouth breathing.

Other than that, I can say I feel great.  For a person who doesn’t have unusual bleeding problems, I can anticipate that a week after surgery they would be feeling right as rain.  Everything is still a bit swollen and tender, but I’m no longer bleeding and feel pretty much normal.

I went back to work today too.  I am a little worn down, but I’m able to get things done.

9 Days Post Surgery

Need Sleep.  My right side has completely rebelled and decided that it wants to swell closed.  4 days without sleep…  Is this what it’s like to have children?  I can’t blame it.  I’ve been trying to use it for 100& of my oxygen intake needs.  It is probably just inflamed.

I went in to Dr. Dawson’s office to have the packing removed.  It came out easily, but it was still a strange feeling.  He vacuumed out both sides again and said that everything is healing up nicely.  Some of the cauterizations are still angry.  He put some Polysporin on them and used a little dissolvable gauze for protection.  He was able to place the gauze in such a way that I can still breath around it.

10 Days Post Surgery

I slept 10 hours last night.  Both sides are wide open and happy.  No bleeding.  I feel fantastic!

< Sinus Surgery (Day 6) | Sinus Surgery (3 Weeks) >